分享一个电表 正泰 DDSU666 ,以及如何接入Home-assistant
本帖最后由 sunfang1cn 于 2021-2-16 23:07 编辑之前根据论坛帖子 https://bbs.hassbian.com/thread-5634-1-1.html的培正模块做了个智能电表,接入老房子的电箱,但是可能是某个地方焊接短路,某一天砰的一声巨响把整栋楼的电闸都跳掉了。前一阵子装修新房子,就打算买一个成品的智能电表直接放到强电箱中并且能够接入Home-Assistant。
论坛里面有推荐松下的KW4M的,https://bbs.hassbian.com/thread-6410-1-1.html,不过有两个缺点:
1、不是标准的强电箱35mm导轨用尺寸,装进电箱有点麻烦
2、难买、小贵,某宝少数卖家有卖,400元左右
于是乎淘到了正泰的DDSU666,导轨式安装,支持modbus,有天猫店(天猫搜 "正泰导轨式电表 485" ),国产大厂品质也没啥问题,只要130元。
重点看如何接入home-assistant:
第一步:买一个RS485的网关,理论上任意的支持RS485转tcp协议的网关均可,我买的塔石物联网的TAS-WIFI-261 ,支持modbus rtu转MQTT。
第二步:连接好RS485网关和电表(24、25端口接485的A和B),网关接入好网络。
第三步:用485网关,或者nodered或者任意工具,每隔一段时间(例如5秒)通过网关发送查询指令(com口设置默认波特率9600,数据位8,奇偶校验N,停止位2)到电表,查询当前瞬时情况和累计总能耗分别要两次轮询指令(指令为16进制,已包含CRC校验码):
01 03 20 00 00 0A CE 0D
01 03 40 00 00 02 D1 CB
第四步:从modbus网关的接收端,接收和解析结果,可以直接用hass解析,但是我更熟悉nodejs,所以使用了nodered,工作流如下:
rs485EMdefault是从塔石物联网的网关接收modbus rtu返回数据的mqtt topic,如果你使用的网关是tcp接口的请自行更换。返回值解析的关键在两个function节点:
可以看到,两个解析节点的唯一区别是:
if (rawBuffer != 0x1C){
// 另一个节点为 if (rawBuffer != 0x04) {
return { payload: { success: false, msg: 'is another' } };
}原因在于,分两次轮询查询电表的不同寄存器区间,返回都在一个MQ中(用tcp同步查询的可能没这个问题),需要根据返回数据长度(寄存器数值个数)区分,做不同的处理。处理的结果以JSON格式分别写入两个新的mqtt topic供home-assistant使用。
第五步:home-assistant配置,configuration.yaml:
sensor:
- platform: mqtt
name: "power_s"
state_topic: "rs485EMDecoded"
value_template: "{{value_json['data'].power_s|round(3)*1000 }}"
unit_of_measurement: "W"
- platform: mqtt
name: "power_pf"
state_topic: "rs485EMDecoded"
value_template: "{{value_json['data'].pf|round(3) }}"
unit_of_measurement: " "
- platform: mqtt
name: "power_voltage"
state_topic: "rs485EMDecoded"
value_template: "{{value_json['data'].voltage|round(1) }}"
unit_of_measurement: "V"
- platform: mqtt
name: "power_current"
state_topic: "rs485EMDecoded"
value_template: "{{value_json['data'].current|round(3) }}"
unit_of_measurement: "A"
- platform: mqtt
state_topic: "rs485EMDecoded2"
name: "totalkwh"
unit_of_measurement: 'kwh'
value_template: "{{ value_json['data'].totalkwh|round(1) }}"
第六步:可以使用home-assistant 0.88之后自带的utility_meter 组件计算每日每月用电:
utility_meter:
monthly_electricity:
source: sensor.totalkwh
cycle: monthly
daily_electricityc:
source: sensor.totalkwh
cycle: daily之后可以在lovelace ui或者其他的什么dashboard上配置前端组件了。
最终效果:
谢谢分享,刚好用到。 谢谢分享,研究一下。 强迫症表示,这个485网关也该买个导轨式的:lol 工业级别的就是稳定。
现在居然有转MQTT的成品了,更高级。我还在用MOXA 5110.通过串口硬转 不错,谢谢分享。楼主也发个实物图让我们眼馋一下。 提个建议,ha直接支持modbus tcp,并不需要mqtt中转
modbus:
name: hf
type: tcp
host: 192.168.2.10
port: 8899
sensor:
- platform: modbus
registers:
- name: DTS2626_IA
hub: hf
slave: 33
unit_of_measurement: A
register: 3
scale: 0.01
precision: 1 直接用8266做一个modbus穿透的网关就可以了,便宜很多 evantalk 发表于 2021-2-17 10:51
提个建议,ha直接支持modbus tcp,并不需要mqtt中转
也可以,不过我买的网关刚好支持mqtt,当然也支持tcp透传。主要是我对NodeJS熟悉程度远高于python,所以想用nodered做下解析,就走mqtt了 zxlch 发表于 2021-2-17 14:56
直接用8266做一个modbus穿透的网关就可以了,便宜很多
也是个不错的方案