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

 找回密码
 立即注册
查看: 12692|回复: 7

[基础教程] 关于松下的KW4M电力表接入home-assistant

[复制链接]

6

主题

35

帖子

478

积分

论坛分享达人

积分
478
金钱
443
HASS币
10
发表于 2019-2-21 11:10:03 | 显示全部楼层 |阅读模式
本帖最后由 msmmbl 于 2019-2-21 11:19 编辑

上次在这个贴子里面提到了KW4M,https://bbs.hassbian.com/forum.p ... 4&page=14#pid172776,收到一些站内消息询问怎么接入的。记录下过程:

首先,KW4M有几个型号,根据不同型号,有的是通信协议是MEWTOCOL,有的是Modbus。在这个网站上可以看到https://device.panasonic.cn/ac/c ... w4m/price/index.jsp
TIM截图20190221100857.png

可以看到,这个系列的产品,一共有4种型号,都是走的RS485,只是通信时候的数据格式不一样。我买的的NEWTOCOL协议的。下面的流程按照这个协议走。

首先下载这个产品的样本,https://device.panasonic.cn/ac/c ... .jsp?series_cd=1783

1. 硬件上,样本上提供了RS485的端子号,根据型号不同,用双绞线接出来。
TIM截图20190221100857.png
双绞线另一端,我用了一个RS485转USB的模块,接到了树莓派。
TIM截图20190221100857.png
这个步骤是建立了数据的连接,方法不是唯一的。我因为装修时候有埋线,所以这样操作。完成后,在树莓派中多了一个设备/dev/ttyUSB0(这个设备号如果只接了一个usb,就是这样,不然可能是/dev/ttyUSB1、/dev/ttyUSB2)

2. 软件层面
home-assistant本身提供了modbus的协议的组件(https://www.home-assistant.io/components/sensor.modbus/),但是我的KW4M是MEWTOCOL协议的,所以得自己搞通讯,home-assistant的串口模块不支持给串口直接发任意的数据(https://www.home-assistant.io/components/sensor.serial/),但是home-assistant的tcp sensor(https://www.home-assistant.io/components/sensor.tcp/)支持。所以,可以先将串口转化为tcp,这样就可以用home-assistant的tcp sensor间接和串口通讯了。

在树莓派上安装ser2net,这是一个将串口转换为tcp的一个工具
sudo apt-get install ser2net

编辑配置文件
/etc/ser2net.conf
TIM截图20190221100857.png
主要是最后一行
3300:raw:600:/dev/ttyUSB0:19200 8DATABITS NONE 1STOPBIT
大概意思是,开放3300端口,将这个端口的数据,都转发到设备/dev/ttyUSB0,串口的速率是19200,8bit之类的,后面速率之类的在KW4M的设置界面都可以自己调整,貌似默认值就是我上面这样的。具体看下手册。这样搞完后,往树莓派的3300网络端口发数据,就相当于和KW4M通讯了。

完了后
sudo systemctl restart ser2net.service
或者重启下树莓派让配置生效

3. 配置home-assistant
例如,要读取当前的功率
sensor:

  - platform: tcp
    host: 192.168.11.7
    name: Total Power Rate
    port: 3300
    payload: "%01#RDD001760017754\x0d"
    value_template: "{{ [value[12], value[13], value[10], value[11] ,value[8], value[9] ,value[6], value[7]] | join | int(0, 16) / 100}}"
    unit_of_measurement: kW

说下参数:
host:就是树莓派的IP地址
port:3300上面提到过了
payload:就是MEWTOCOL协议,关于这个,手册上有说明
TIM截图20190221100857.png
% 数据的起始
01:站号,这个也可以在KW4M的界面设置,每个设备要设置成不同的站号,貌似默认不去动它就是01
# 代表后面跟着的是指令
RD 代表是“读取”指令
TIM截图20190221100857.png
D0017600177: 代表是地址D00176,D00177,这两个地址也可以在手册27页中的表格查到,存的是"瞬时功率"
54 是Bcc校验码,就是把%01#RDD0017600177算出一个校验码出来,计算方法在手册26页有介绍,具体我好久没算了,暂时不回忆了。
\x0d 代表结束
value_template: 是对结果的解析,27页表格里面说,返回是32位数字,数字1代表0.01kW,如果没记错的话,大概返回是这样的格式:
%01$RDXXXXXXXX??\x0d,这个在手册28页“正常时候的响应"有说明,XXXXXXXX就是具体的32位的数字,用16进制表示的。低位在前面,高位在后面。
{{ [value[12], value[13], value[10], value[11] ,value[8], value[9] ,value[6], value[7]] | join | int(0, 16) / 100}}代表取出6~12这几个字符,也就是上面的XXXXXXXX,把它转换为数字,*0.01,这样就得到了kW数字。

差不多就是上面的过程。要去读其他数据也是类似的。下面是去读电量的配置。
  - platform: tcp
    host: 192.168.11.7
    name: Total Power
    port: 3300
    payload: "%01#RDD001000010154\x0d"
    value_template: "{{ [value[12], value[13], value[10], value[11] ,value[8], value[9] ,value[6], value[7]] | join | int(0, 16) / 100}}"
    unit_of_measurement: kWh


其他数据,像电流什么的,我没有关心,写法是类似的。

P.S.,home-assistant在0.87版本中引入了utility meter,可以方便的按照月/日/年统计数据:https://www.home-assistant.io/components/utility_meter/,例如,按照月统计电量
utility_meter:
  total_power_monthly:
    source: sensor.total_power
    cycle: monthly


差不多就是这样。




评分

参与人数 1金钱 +10 HASS币 +10 收起 理由
Roger + 10 + 10 厉害了word楼主!

查看全部评分

回复

使用道具 举报

14

主题

660

帖子

3959

积分

论坛元老

Rank: 8Rank: 8

积分
3959
金钱
3294
HASS币
10
发表于 2019-2-22 00:25:27 | 显示全部楼层
看起来很牛逼……
回复

使用道具 举报

12

主题

397

帖子

2289

积分

金牌会员

Rank: 6Rank: 6

积分
2289
金钱
1892
HASS币
10
发表于 2019-2-22 14:07:11 | 显示全部楼层
顶帖 学习,不知道我的上次有没有给我弄坏
回复

使用道具 举报

12

主题

397

帖子

2289

积分

金牌会员

Rank: 6Rank: 6

积分
2289
金钱
1892
HASS币
10
发表于 2019-2-22 14:10:32 | 显示全部楼层
能否给个

                               
登录/注册后可看大图
,文件我
回复

使用道具 举报

6

主题

35

帖子

478

积分

论坛分享达人

积分
478
金钱
443
HASS币
10
 楼主| 发表于 2019-3-14 17:10:42 | 显示全部楼层
iciness 发表于 2019-2-22 14:10
能否给个,文件我

样本见附件 kw4m_1f413c.pdf (2.5 MB, 下载次数: 29)


回复

使用道具 举报

12

主题

397

帖子

2289

积分

金牌会员

Rank: 6Rank: 6

积分
2289
金钱
1892
HASS币
10
发表于 2019-3-15 14:23:19 | 显示全部楼层
谢谢 大佬
回复

使用道具 举报

0

主题

150

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
金钱
1113
HASS币
0
发表于 2019-3-20 19:41:54 | 显示全部楼层
谢谢分享!
回复

使用道具 举报

0

主题

4

帖子

78

积分

注册会员

Rank: 2

积分
78
金钱
74
HASS币
0
发表于 2021-8-13 19:36:15 | 显示全部楼层
感谢分享,已调试成功。调试中发现,3300:raw:600:/dev/ttyUSB0:19200 8DATABITS NONE 1STOPBIT 修改为
3300:raw:600:/dev/ttyUSB0:19200 8DATABITS ODD 1STOPBIT ,对应串口设置是奇校验。
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-24 18:15 , Processed in 0.089867 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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