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)。探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像服务
在 Docker Desktop 配置镜像
Docker Compose 项目配置
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
MacOS OrbStack 容器配置
在宝塔面板一键配置镜像
Synology 群晖 NAS 配置
飞牛 fnOS 系统配置镜像
极空间 NAS 系统配置服务
爱快 iKuai 路由系统配置
绿联 NAS 系统配置镜像
QNAP 威联通 NAS 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
免费版仅支持 Docker Hub 访问,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等;免费版仅支持 docker.io。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
来自真实用户的反馈,见证轩辕镜像的优质服务