『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 113874|回复: 83

[进阶教程] 分享一个电表 正泰 DDSU666 ,以及如何接入Home-assistant

  [复制链接]

8

主题

62

帖子

822

积分

论坛技术达人

积分
822
金钱
745
HASS币
60
发表于 2021-2-16 23:00:59 | 显示全部楼层 |阅读模式
本帖最后由 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元。
QQ截图20210216225410.jpg

重点看如何接入home-assistant:

第一步:买一个RS485的网关,理论上任意的支持RS485转tcp协议的网关均可,我买的塔石物联网的TAS-WIFI-261 ,支持modbus rtu转MQTT。
QQ截图20210216225354.jpg

第二步:连接好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,工作流如下:
QQ截图20210216230623.jpg

rs485EMdefault是从塔石物联网的网关接收modbus rtu返回数据的mqtt topic,如果你使用的网关是tcp接口的请自行更换。返回值解析的关键在两个function节点:
节点1.js (4.4 KB, 下载次数: 221)
节点2.js (4.4 KB, 下载次数: 114)

可以看到,两个解析节点的唯一区别是:

if (rawBuffer[2] != 0x1C)  { 
// 另一个节点为 if (rawBuffer[2] != 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上配置前端组件了。

最终效果:
QQ截图20210216225955.jpg

评分

参与人数 3金钱 +27 HASS币 +20 收起 理由
xxapollo + 5 厉害了word楼主!
adr + 2 在下对你的景仰犹如滔滔长江之水,连绵不绝.
+ 20 + 20 厉害了word楼主!

查看全部评分

回复

使用道具 举报

1

主题

62

帖子

3337

积分

论坛元老

Rank: 8Rank: 8

积分
3337
金钱
3275
HASS币
0
发表于 2021-2-16 23:28:59 | 显示全部楼层
谢谢分享,刚好用到。
回复

使用道具 举报

32

主题

1993

帖子

5069

积分

论坛元老

Rank: 8Rank: 8

积分
5069
金钱
3076
HASS币
50
QQ
发表于 2021-2-17 00:00:44 | 显示全部楼层
谢谢分享,研究一下。
我不生产技术,我只是技术的搬运工。
回复

使用道具 举报

26

主题

2096

帖子

8510

积分

论坛元老

Rank: 8Rank: 8

积分
8510
金钱
6409
HASS币
30

论坛元老

发表于 2021-2-17 08:36:00 | 显示全部楼层
强迫症表示,这个485网关也该买个导轨式的
回复

使用道具 举报

43

主题

407

帖子

3627

积分

元老级技术达人

积分
3627
金钱
3215
HASS币
136
发表于 2021-2-17 10:12:51 | 显示全部楼层
工业级别的就是稳定。
现在居然有转MQTT的成品了,更高级。我还在用MOXA 5110.  通过串口硬转
回复

使用道具 举报

6

主题

243

帖子

1864

积分

金牌会员

Rank: 6Rank: 6

积分
1864
金钱
1621
HASS币
0
发表于 2021-2-17 10:32:46 | 显示全部楼层
不错,谢谢分享。楼主也发个实物图让我们眼馋一下。
回复

使用道具 举报

46

主题

641

帖子

4394

积分

元老级技术达人

积分
4394
金钱
3723
HASS币
120
发表于 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

评分

参与人数 1金钱 +1 收起 理由
qian + 1 感谢楼主分享!

查看全部评分

回复

使用道具 举报

20

主题

247

帖子

1405

积分

金牌会员

Rank: 6Rank: 6

积分
1405
金钱
1153
HASS币
40
发表于 2021-2-17 14:56:02 | 显示全部楼层
直接用8266做一个modbus穿透的网关就可以了,便宜很多
回复

使用道具 举报

8

主题

62

帖子

822

积分

论坛技术达人

积分
822
金钱
745
HASS币
60
 楼主| 发表于 2021-2-17 20:28:45 | 显示全部楼层
evantalk 发表于 2021-2-17 10:51
提个建议,ha直接支持modbus tcp,并不需要mqtt中转

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

使用道具 举报

8

主题

62

帖子

822

积分

论坛技术达人

积分
822
金钱
745
HASS币
60
 楼主| 发表于 2021-2-17 21:47:26 | 显示全部楼层
zxlch 发表于 2021-2-17 14:56
直接用8266做一个modbus穿透的网关就可以了,便宜很多

也是个不错的方案
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-27 13:00 , Processed in 2.483932 second(s), 37 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表