
sjmushet/xml-exporter-be本Docker镜像是一个轻量级工具,专为电表数据处理设计,可将电表采集的能源数据(如用电量、电压、电流、功率等)转换为标准化XML格式并导出。镜像基于精简基础镜像构建,资源占用低,部署便捷,适用于能源监控系统、能源管理平台及数据分析系统的数据集成环节,帮助实现电表数据与上层系统的无缝对接。
energy_consumption、voltage)与XML元素/属性的映射关系。bashdocker run -d \ --name energy-meter-xml-exporter \ --restart unless-stopped \ -v /path/to/host/config:/app/config \ # 挂载配置文件目录(含映射规则和电表列表) -v /path/to/host/exports:/app/exports \ # 挂载XML导出文件目录(宿主机路径) -e EXPORT_INTERVAL=300 \ # 导出间隔(秒),默认300(5分钟) -e LOG_LEVEL=info \ # 日志级别:debug/info/warn/error,默认info -e DATA_INPUT_TYPE=file \ # 数据输入类型:file(本地文件)/mqtt(MQTT订阅),默认file energy-meter-xml-exporter:latest
创建docker-compose.yml文件:
yamlversion: '3.8' services: xml-exporter: image: energy-meter-xml-exporter:latest container_name: energy-meter-xml-exporter volumes: - ./config:/app/config # 宿主机配置目录(存放映射规则和电表列表) - ./exports:/app/exports # 宿主机导出目录(存放生成的XML文件) environment: - EXPORT_INTERVAL=300 # 导出间隔(秒) - LOG_LEVEL=info - DATA_INPUT_TYPE=mqtt # 示例:使用MQTT订阅电表数据 - MQTT_BROKER=mqtt://192.168.1.100:1883 # MQTT broker地址(当DATA_INPUT_TYPE=mqtt时必填) - MQTT_TOPIC=energy/meters/# # MQTT订阅主题(当DATA_INPUT_TYPE=mqtt时必填) restart: unless-stopped
启动容器:docker-compose up -d
| 参数名 | 说明 | 可选值 | 默认值 |
|---|---|---|---|
EXPORT_INTERVAL | 定时导出间隔(单位:秒) | 正整数(如60、300) | 300 |
LOG_LEVEL | 日志输出级别 | debug/info/warn/error | info |
DATA_INPUT_TYPE | 电表数据输入类型 | file(本地文件)/mqtt(MQTT) | file |
OUTPUT_DIR | 容器内XML文件导出目录(需通过volume挂载到宿主机) | 绝对路径 | /app/exports |
CONFIG_DIR | 容器内配置文件目录(需通过volume挂载到宿主机) | 绝对路径 | /app/config |
MQTT_BROKER | MQTT broker地址(仅DATA_INPUT_TYPE=mqtt时生效) | MQTT URL(如mqtt://host:port) | - |
MQTT_TOPIC | MQTT订阅主题(仅DATA_INPUT_TYPE=mqtt时生效) | 字符串(支持通配符#) | - |
容器依赖CONFIG_DIR目录下的以下配置文件(需用户提前创建):
meters.yml)定义需处理的电表设备信息,示例:
yamlmeters: - id: "meter_001" # 电表唯一标识(需与输入数据中的电表ID对应) name: "Factory_Main_Meter" # 电表名称(将作为XML中的`<meter_name>`元素) type: "three_phase" # 电表类型(自定义,用于XML分类) mapping_config: "mapping_meter001.xml" # 该电表的数据映射规则文件(位于CONFIG_DIR下) - id: "meter_002" name: "Workshop_A_Meter" type: "single_phase" mapping_config: "mapping_meter002.xml" # 不同电表可使用不同映射规则
mapping_meter001.xml)定义电表数据字段与XML元素的映射关系,示例:
xml<mapping> <!-- XML根元素配置 --> <root_element name="EnergyData" namespace="[***]"> <attribute name="timestamp" value="${system.timestamp}" /> <!-- 系统时间,内置变量 --> <attribute name="meter_id" value="${meter.id}" /> <!-- 引用meters.yml中的电表ID --> </root_element> <!-- 数据字段映射:将输入数据中的字段映射到XML子元素 --> <fields> <field input="energy_consumption" output_element="TotalEnergy"> <!-- 用电量 --> <attribute name="unit" value="kWh" /> <!-- 元素属性 --> <format type="number" precision="2" /> <!-- 格式化:保留2位小数 --> </field> <field input="voltage" output_element="Voltage"> <!-- 电压 --> <attribute name="unit" value="V" /> </field> <field input="current" output_element="Current"> <!-- 电流 --> <attribute name="unit" value="A" /> </field> </fields> </mapping>
${system.timestamp}:内置变量,自动填充当前导出时间(格式:ISO 8601,如2024-05-20T10:30:00Z)。${meter.id}:引用meters.yml中电表的id字段。input:电表输入数据中的字段名(如JSON输入中的energy_consumption字段)。output_element:生成的XML子元素名称。导出的XML文件(如energy_data_meter_001_202405201030.xml)内容示例:
xml<EnergyData xmlns="[***]" timestamp="2024-05-20T10:30:00Z" meter_id="meter_001"> <TotalEnergy unit="kWh">1250.68</TotalEnergy> <Voltage unit="V">220.5</Voltage> <Current unit="A">15.2</Current> </EnergyData>
chmod 777 /path/to/dir临时测试,生产环境建议通过UID/GID映射限制权限)。energy_data_${meter.id}_${timestamp}.xml(timestamp为导出时间,格式:YYYYMMDDHHMM)。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务