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

 找回密码
 立即注册
查看: 38968|回复: 240

[经验分享] 【最终版本-代码开源】20元的中移铁通插排:esp+功率计量

  [复制链接]

10

主题

184

帖子

1822

积分

论坛技术达人

积分
1822
金钱
1633
HASS币
20
发表于 2023-12-21 15:23:58 | 显示全部楼层 |阅读模式
本帖最后由 szlww 于 2024-5-30 23:27 编辑

关于插排详细介绍详见之前的帖子:https://bbs.hassbian.com/thread-23623-1-1.html

更新:2024年5月30日   
Fatal exception:4 flag:1 (Hardware Watchdog)这个问题修过代码优化,应该算是不完美的解决了,之所以说不完美,是因为不能增加webserver组件,它会导致随机异常重启(可能十几天也可能几小时就会出现)。

第一台测试的设备已运行1300多小时(约58天,其他的测试设备已运行40多天,没有再出现异常重启。测试截图如下:
powerboard测试截图_20240530225949.png
升级方式[与之前的方式一样,我用的esphome版本为 2023.12.5]:解压附件的yaml文件,到esphome/conf/目录下 ,清理一下原来编译的中间文件,重新编译powerboard-test.yaml后通过web ota上传到设备。
20240402.zip (5.89 KB, 下载次数: 230)
-----------------------------------------------------------------------------------------------------------------
!!!重要更新: 2024年2月22日!!!
        固件运行很长一段时间后出现崩溃,查询日志显示:Fatal exception:4 flag:1 (Hardware Watchdog) ,esp处理超时触发看门狗重置。
原因网上有多种说法:1.arduino版本的问题、2.内存不足问题,导致申请内存失败崩溃、3.其他说法,比如esp8266内存20kb以下不稳定、版本新增的apikey有问题之类。由于arduino版本验证过于复杂,就从内存占用入手调整,经过不断删减yaml测试,剩余内存由原来的15kb提高到28kb。目前已经运行7*24小时,暂时比较稳定,内存占用一直维持在27kb上下。主要修改点如下:
    1. 删除webserver组件,组件占用内存约4kb,如果访问webserver,占用内存数量应该和yaml中展示到web网页前台的组件数正相关(4 +n) kb ;
    2. 删除api key,占用内存约3kb,参考油管上一位up主的视频介绍,内网似乎没必要设置密码或密钥,并且网络状况不好的情况下,模块重连使用api key会占用更多的内存。
    3.删除配网组件,忘记计算内存占用了,应该也是几kb。
    4.其他插排相关的yaml修改,如:esp8266模块参数由2M(esp_wroom_02) 变更为4M(esp12e)等等
    5.代码优化,如果uart读取数据错误,不再上报NAN值。
    6.由于去掉了webserver,附件yaml文件中 的node_name_add_mac_suffix默认设置的是false,需要一个插排建一个yaml文件,方便直接无线ota。可以按需修改为true,需要同时增加wifi: use_address: 设备ip地址或者设备内网域名,就可以直接无线ota。


升级方式:
    由于去掉了apikey,需要先在homeassistant中删除设备,ota升级之后再添加。
    由于去掉了配网组件,需要在secrets.yaml中配置下列属性。

wifi_ssid: "xxx"
wifi_password: "xxx"
ap_password: "xxx"
api_password: "xxx"
ota_password: "xxx"

    其他跟以前一样:解压附件的yaml文件到esphome/conf/目录下 ,清理一下原来编译的中间文件,选择powerboard-test.yaml进行编译,然后Install-Wirelessly。升级后通过uptime 和reset_reason验证是否会发生异常,如果产生崩溃uptime会重置从0开始,reset_reason会显示崩溃原因,如果一直稳定,可以尝试按需增删yaml相关组件,由于验证是个比较漫长的过程,一个人测试场景有限,欢迎大家反馈的验证结果!
    yaml-20240222-dev.zip (5.75 KB, 下载次数: 210)




更新:2024年1月3日(测试了几个小时,各项功能均正常,这应该是最后一个版本了,如果没有大问题就不再更新了)
        1.新增电度量断电记忆功能 :sy7t609的电度量是在内存中保存的,断电会丢失,因此使用esp的flash来保存电度量,对应的sensor名称为“energy-Energy Counter(Persist)”。
        2.新增重置按钮:实现重置系统的同时,清零总电度量、每日电度量,对应的按钮名称为“system-FactoryReset-WithEnergyCounter”。系统默认的重置按钮保留。
        3.代码优化:修复重置系统之后,有时会收不到uart消息,update函数无法正常进行,导致传感器数据无法采集的问题。

升级方式:解压附件的三个yaml文件,到esphome/conf/目录下 ,清理一下原来编译的中间文件,重新编译后web ota上传到设备。
        ●local模式:请修改yaml文件中sy7t609组件的源地址,改为local,同时下载新版本的驱动源码github://shzlww/esphome_custom_components@20240103
        ●git模式:直接使用下面的yaml文件即可:

         yaml-20240103.zip (9.36 KB, 下载次数: 384)


更新:2024年1月2日
        1.优化了一下计量芯片sy7t609的驱动代码,修改了轮询方式,一个loop循环(大约15ms)不读取全部寄存器数据,改为多个loop读取。这样esphome web端就不会再打印那个warning “Component sy7t609.sensor took a long time for an operation (0.23 s)”
升级方式:
        请修改yaml中的github地址,改为 source: github://shzlww/esphome_custom_components@20240101。此版本已经稳定运行10小时以上。



更新:2023年12月30日:
测试发现有些插排的“校准寄存器”出厂数据不正确,原因未知,导致电流、功率等数值错误的问题,因此新增功能“4.重置校准寄存器”,可手动将“校准寄存器”的数据改写为正确的数值。
       1.新增功率power sensor的副本power median sensor,此副本采用median_filter(中值过滤器),避免原始power sensor的数据异常抖动,导致能源统计错误。
       2.新增esphome:friendly_name节点,使用esphome:friendly_name节点和 esphome:name_add_mac_suffix: true,就可以保证homeassistant中的entity_id唯一,批量增删设备不影响自动化。
       3.新增sensor:total_daily_energy,统计每日用电量(这是esphome模拟计算的,并且使用的第1条中的power median sensor来统计的,会和寄存器的值有误差,用于前端展示不需要很高的精度)
       4.新增button/switch:button-清零每日电度量、button-清零累计电度量、button-重置校准寄存器、button-打印寄存器数据、switch-操作确认开关。
          【使用这几个功能之前需要先打开switch-操作确认开关,然后再点击对应的button,防止误操作】
       5.新增sensor: 采集cpu频率、剩余内存容量、内存碎片占比、esphome版本号、IP、MAC、Uptime等诊断信息


esphome完整配置文件(解压三个文件到esphome/conf/目录下) yaml.zip (9.02 KB, 下载次数: 219)
预编译的固件(gz格式可以通过web直接ota) cmcc-powerboard_v2.0b.bin.gz (391.96 KB, 下载次数: 305)
###########################################################################################
升级之前,请阅读下面的文档,以免出现疑惑
注意事项:
1.固件的编译环境为esphome-v2023.11.4,可正常编译运行;不想升级esphome版本,则需要修改min_version的值,尝试编译固件。
2.OTA升级固件之后,请长按电源键5秒,等待蓝灯闪烁,重置设备并重新配网,最好对插排断电10秒以上,避免出现奇怪的问题。
3.如需重新校准、重置电度量、打印寄存器原始数据等操作,按如下步骤进行,以重新校准为例:
  第一步,打开adv-Confirm 开关,第二步,点击adv-ResetCalibration
固件功能:
一.插排按钮:
1.实现智能模式与普通模式。
   功能可配置,为normal或者smart模式,web界面或者homeassistant中下拉框选择。
    normal: 普通模式,插排按钮按下之后全开或者全关
    smart:  智能模式(此模式为默认模式),插排按钮按下之后只操作[主继电器]通断,不改变[从继电器]之前的状态
 2.长按、双击、单击操作
   长按:按住电源按钮5秒以上,插排会重置flash上的信息(包括插座记忆状态),并进入配网状态,
   双击:双击电源键,从继电器接通或断开
   单击:单击电源键,按下实现第[1]条功能配置的相应模式(智能模式/普通模式)
二.指示灯
   蓝灯常亮:wifi已连接
   蓝灯熄灭:wifi未连接
   蓝灯闪烁:ap配网模式
   红灯闪烁/熄灭:esphome status_led light
   白灯常亮:从继电器 真正通电
   白灯熄灭:从继电器 真正断电
三.断电记忆
   记忆状态写入间隔1分钟,也就是说开关等组件状态发生变化,1分钟后才会被记录到flash,下次通电之后可恢复这个状态(可以配置成0s,所有状态变化立刻写入flash,
   但频繁的状态变化会缩短flash寿命。)
四.计量功能
 1.sy7t609计量芯片已驱动
   (1)支持电压、电流、有功功率、无功功率、功率因数、电度量、频率、温度等esphome sensor。
   (2)支持累计电度量清零、重置校准寄存器、打印寄存器原始数据的esphome action
 2.yaml文件修改点
   配置缺一不可:logger:[baud_rate:0]、uart:[xxxxx]、sensor:[platform: sy7t609]、external_components:[xxxx]]
 3.sy7t609驱动组件与配置
   (1)下载地址:https://github.com/shzlww/esphome_custom_components.git,空余时间写的,主要为了实现功能,基本没写代码注释。
   (2)esphome的yaml中配置外部组件有两种方式:git和local。
      (2.1)git模式直接用此yaml即可
      (2.2)local模式需要下载zip源码包,解压后将components(注意是components,不是esphome_custom_components)整个目录复制到esphome的conf目录下
   (3)编译之前,最好清理一下原来编译的中间文件:esphome网页端 - yaml文件 - 三个点 - Clean Build Files
 4.由于是轮询寄存器模式,每次都要给串口一个延时,保证tx能完整发送数据包、rx能完整接收数据包,
   因此esphome的web端会一直打印"Component sy7t609.sensor took a long time for an operation (0.23 s).",不需要理会这个warning
五.其他改动
 1.新增功率power sensor的副本power median sensor,此副本采用median_filter(中值过滤器),避免原始power sensor的数据异常抖动,导致能源统计错误。
     可用于homeassistant中的能源统计,之前使用pzem004t_v3的模块就遇到过上电启动后几秒内,采集到的数据都特别大,
     导致homeassistant中能源统计异常还没办法删除。目前的配置是:每采集5个,升序排序后上报中间的第三个值,然后丢弃最小值,如此反复。
     会和实际值有误差,但是大大降低了采集数据波动的影响。
 2.新增esphome:friendly_name节点,使用esphome:friendly_name节点之后,homeassistant会对esphome的name和id重新定义,在homeassistant中新的命名方式如下:
     * Entity name的格式为[friendly_name] + ' ' + [各个组件的name]
     * Entity id的格式为[esphome的name]+ '_' + [mac地址后6位] + '_' + [各个组件的name]
     * Device name的格式[friendly_name] + ' ' + [mac地址后6位]
   使用场景:当设备较多时,从homeassistant中批量新增或者删除设备会导致entity_id发生变化,导致配置的自动化失效;
   如果配置了esphome:friendly_name和 esphome:name_add_mac_suffix: true,就可以保证entity_id唯一,批量增删设备不影响自动化。
 3.新增sensor:total_daily_energy,统计每日用电量(这是esphome模拟计算的,并且使用的第1条中的power median sensor来统计的,
   会和寄存器的值有误差,用于前端展示不需要很高的精度)
 4.新增button/switch:button-清零每日电度量、button-清零累计电度量、button-重置校准寄存器、button-打印寄存器数据、switch-操作确认开关。
  【使用这几个功能之前需要先打开switch-操作确认开关,然后再点击对应的button,防止误操作】
 5.其他:新增sensor: 采集cpu频率、剩余内存容量、内存碎片占比、esphome版本号、IP、MAC、Uptime等诊断信息
 6.新增电度量断电记忆功能,sy7t609的电度量是在内存中保存的,断电会丢失,因此使用esp的flash来保存电度量。
 7.新增重置按钮,实现重置系统的同时,清零总电度量、每日电度量。系统默认的重置按钮保留。
六.待完善部分(暂不实现)
 1.由于这个计量芯片寄存器变量比较多,目前实现的基本够用,其他的都是高级功能,大部分人用不到--
    --比如视在功率、反向有功电度量、设置采集精度、阈值报警、自动校准模式、自动上报模式(目前用的是主动轮询模式)等等非常多。
 2.利用esphome的number组件,来配置各个校准寄存器的数据,进行手动校准。
 3.利用sy7t609 MCU内置的自动校准来实现数据校准。原厂默认支持的是恒压220v、恒流1A的负载,来进行自动校准各个寄存器。
七、测试
 1.固件目前稳定运行了10小时,功能正常。
 2.IGAIN寄存器的电流使用的UNI-T的万用表10A电流档校准的,有更高精度的电表可以自行修改源码,设置igain寄存器。
   校准公式:IGAIN_new = IGAIN_old * IRMS_TARGET / IRMS ,通俗讲就是[新igain=当前igain*设备实际电流/寄存器采集的电流]
###########################################################################################

界面图片:
20231230121131.png





以下内容为第一版测试固件
1.png
测试固件:
使用web端进行ota固件升级。升级完成后,观察蓝灯是否闪烁,如果没有就长按插排的电源键5秒以上,等待蓝灯闪烁,重置系统并配网,密码12345678。连接homeassistant时候需要用到的api key,在web端自行获取。
cmcc-powerboard_v1.0b.bin.zip (379.21 KB, 下载次数: 193)






评分

参与人数 17金钱 +123 HASS币 +20 收起 理由
yangminglong + 2 感谢楼主分享!
xiaomumu0303 + 5 论坛有你更精彩!
sorrypqa + 16 大神666!
pafuyin + 5 根据楼主提供的代码,成功配置好两个插座,.
cym9007 + 5
taida + 8 高手,这是高手!
s2233 + 12 高手,这是高手!
tiamo1314 + 2 墙都不扶,就服楼主!
jjcs + 12 高手,这是高手!
Mr.G -16 大神666!
trz0332 + 20 高手,这是高手!
+ 20 + 20 高手,这是高手!
Gaozx029 + 2
pengguilian + 5 感谢楼主分享!
qxdnzx + 5 高手,这是高手!
DDDear + 10 大神666!
flyice + 10 论坛有你更精彩!

查看全部评分

回复

使用道具 举报

10

主题

184

帖子

1822

积分

论坛技术达人

积分
1822
金钱
1633
HASS币
20
 楼主| 发表于 2023-12-21 15:27:15 | 显示全部楼层
本帖最后由 szlww 于 2023-12-30 23:09 编辑

占楼备用

评分

参与人数 1金钱 +8 收起 理由
xiaoo + 8 大神666!

查看全部评分

回复

使用道具 举报

3

主题

154

帖子

1776

积分

金牌会员

Rank: 6Rank: 6

积分
1776
金钱
1622
HASS币
10
发表于 2023-12-21 16:13:26 | 显示全部楼层

占楼备用
回复

使用道具 举报

5

主题

78

帖子

956

积分

高级会员

Rank: 4

积分
956
金钱
878
HASS币
0
发表于 2023-12-21 16:21:21 | 显示全部楼层
牛人!!!
回复

使用道具 举报

52

主题

1349

帖子

5725

积分

论坛DIY达人

积分
5725
金钱
4376
HASS币
20
发表于 2023-12-21 18:51:05 | 显示全部楼层
楼主有空试试这插排打开继电器时耗电有没有超过2W?
回复

使用道具 举报

10

主题

184

帖子

1822

积分

论坛技术达人

积分
1822
金钱
1633
HASS币
20
 楼主| 发表于 2023-12-21 20:24:05 | 显示全部楼层
本帖最后由 szlww 于 2023-12-21 20:27 编辑
sorrypqa 发表于 2023-12-21 18:51
楼主有空试试这插排打开继电器时耗电有没有超过2W?

简单测试了一下:
测试环境:两个同款插排串接,插排A esphome固件,插排B原厂固件。
测试场景:
1.A插排接通一个开关,此时A插排的esphome固件显示功率0.02w左右,这个作为0w基准。

   test0.png

2.然后B插排插在A插排上,B插排的继电器处于全部断开状态,此时A插排esphome固件显示功率0.62w

test1.png

3.点击B插排的电源键,让B插排的继电器处于吸合状态,此时A插排esphome固件显示功率1.74w

test2.png

结论:插排B的两个继电器吸合的功耗是:1.74w-0.62w ≈ 1w?

回复

使用道具 举报

52

主题

1349

帖子

5725

积分

论坛DIY达人

积分
5725
金钱
4376
HASS币
20
发表于 2023-12-21 20:46:26 | 显示全部楼层
szlww 发表于 2023-12-21 20:24
简单测试了一下:
测试环境:两个同款插排串接,插排A esphome固件,插排B原厂固件。
测试场景:

还是买3元一个那种磁保持继电器换了吧,用一年半载就回本了,还能减少发热,我的4控+2路电量全开耗电才0.5W
IMG_20231219_085933.jpg

回复

使用道具 举报

21

主题

177

帖子

2355

积分

金牌会员

Rank: 6Rank: 6

积分
2355
金钱
2178
HASS币
20
发表于 2023-12-21 21:21:30 | 显示全部楼层
建议把传感器更新间隔设置为3s,1s一次感觉功率有点来回跳
1703164843884.jpg
回复

使用道具 举报

10

主题

184

帖子

1822

积分

论坛技术达人

积分
1822
金钱
1633
HASS币
20
 楼主| 发表于 2023-12-21 21:35:05 | 显示全部楼层
flyice 发表于 2023-12-21 21:21
建议把传感器更新间隔设置为3s,1s一次感觉功率有点来回跳

目前是2s间隔。重点看一下高、中、低功率电器设备的计量准确度,我手头没有高精度的电表,没法确定这个准确度怎么样。
回复

使用道具 举报

2

主题

60

帖子

566

积分

高级会员

Rank: 4

积分
566
金钱
506
HASS币
0
发表于 2023-12-21 21:55:55 | 显示全部楼层
sorrypqa 发表于 2023-12-21 20:46
还是买3元一个那种磁保持继电器换了吧,用一年半载就回本了,还能减少发热,我的4控+2路电量全开耗电才0.5 ...

可以出一个换的教程 直接换就可以?

                               
登录/注册后可看大图
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-12-24 00:23 , Processed in 0.063742 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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