本帖最后由 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多天,没有再出现异常重启。测试截图如下:
升级方式[与之前的方式一样,我用的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*设备实际电流/寄存器采集的电流]
###########################################################################################
复制代码
界面图片:
以下内容为第一版测试固件
测试固件:
使用web端进行ota固件升级。升级完成后,观察蓝灯是否闪烁,如果没有就长按插排的电源键5秒以上,等待蓝灯闪烁,重置系统并配网,密码12345678。连接homeassistant时候需要用到的api key,在web端自行获取。
cmcc-powerboard_v1.0b.bin.zip
(379.21 KB, 下载次数: 193)