sunfang1cn 发表于 2021-2-16 23:00:59

分享一个电表 正泰 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上配置前端组件了。

最终效果:


300y 发表于 2021-2-16 23:28:59

谢谢分享,刚好用到。

zxyny1989 发表于 2021-2-17 00:00:44

谢谢分享,研究一下。

情非殇 发表于 2021-2-17 08:36:00

强迫症表示,这个485网关也该买个导轨式的:lol

hunterfox 发表于 2021-2-17 10:12:51

工业级别的就是稳定。
现在居然有转MQTT的成品了,更高级。我还在用MOXA 5110.通过串口硬转

liantianji 发表于 2021-2-17 10:32:46

不错,谢谢分享。楼主也发个实物图让我们眼馋一下。

evantalk 发表于 2021-2-17 10:51:42

提个建议,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

zxlch 发表于 2021-2-17 14:56:02

直接用8266做一个modbus穿透的网关就可以了,便宜很多

sunfang1cn 发表于 2021-2-17 20:28:45

evantalk 发表于 2021-2-17 10:51
提个建议,ha直接支持modbus tcp,并不需要mqtt中转

也可以,不过我买的网关刚好支持mqtt,当然也支持tcp透传。主要是我对NodeJS熟悉程度远高于python,所以想用nodered做下解析,就走mqtt了

sunfang1cn 发表于 2021-2-17 21:47:26

zxlch 发表于 2021-2-17 14:56
直接用8266做一个modbus穿透的网关就可以了,便宜很多

也是个不错的方案
页: [1] 2 3 4 5 6 7 8 9
查看完整版本: 分享一个电表 正泰 DDSU666 ,以及如何接入Home-assistant