qlwz / esp_dc1

DC1插线板固件
GNU General Public License v2.0
227 stars 92 forks source link

用了几个月突然不能用了,WiFi指示灯一直处于闪烁状态,打开开关会自动断开 #16

Open bravehappy opened 2 years ago

qlwz commented 2 years ago

看看是否wifi断开了。没有连接wifi 会定时重启,所以会关闭继电器。

bravehappy commented 2 years ago

被重置成初始状态了,出现了dc1_049dc3的wifi,现重新配网

bravehappy commented 2 years ago

今天又被重置成初始状态

byff commented 2 years ago

看看是否wifi断开了。没有连接wifi 会定时重启,所以会关闭继电器。

image

大佬,并不是WiFi连接的问题,我出现一样的情况,只要配置mqtt服务器或者打开mqtt发现就马上重置了,然后就会出现上图所示read config错误,连接WiFi不配置mqtt就没问题。 不知道是硬件问题还是怎么了,突然间就出现这种问题了,一起工作的其他几个dc1都好好的

qlwz commented 2 years ago

如果这样看有可能是flash有问题了 存储了mqtt读出来错的。然后校验失败了。

sxx1314 commented 2 years ago

如果这样看有可能是flash有问题了 存储了mqtt读出来错的。然后校验失败了。

也偶尔有这问题。无规律被重置,然后有极小几率保存配置失败。但是清空flash重刷其他固件等操作都没什么问题。重点是出现在不同的设备上都或多或少会有无规律被重置的几率。

byff commented 2 years ago

如果这样看有可能是flash有问题了 存储了mqtt读出来错的。然后校验失败了。

今晚尝试了一下刷回旧固件,神奇的过去了好几个小时了居然没有被重置,HA接入也正常。旧版固件比最新的体积要大,怀疑是flash出现坏块或者其他问题了,刷新固件的时候正好问题存储区域被mqtt写入数据读取异常导致… PS以上纯属个人没有依据的瞎猜😂😂

sxx1314 commented 2 years ago

如果这样看有可能是flash有问题了 存储了mqtt读出来错的。然后校验失败了。

看了一下log,应该是每过5min 会保存一次config的问题。。。有点太频繁了,如果保存失败就可能出现“被重置”的情况。

00:00:00 successful client mqtt connection
18:30:49 NTP: 2022-02-20 18:30:49
18:35:43 saveConfig . . . OK Len: 232 Crc: 17638
18:40:42 NTP: 2022-02-20 18:40:42
18:40:44 saveConfig . . . OK Len: 234 Crc: 31645
18:45:45 saveConfig . . . OK Len: 234 Crc: 23766

如果按照这个频率 一年的话得写入 12x24x365=105120次

看了一下代码,应该是保存电量这里,按照tasmota的电量保存代码好像是得等非常长的时间(对写入次数几乎没有影响)。

https://github.com/qlwz/esp_dc1/blob/e6694bac0c065b569f5cd47cc5c90850007eb6e8/src/DC1.cpp#L661-L667

有这个影响的同学可以尝试直接注释或者延长这个时间,当然也可以在web上加一个控制选项,自己研究吧。

sxx1314 commented 2 years ago

重新编译了一个版本 发现现在控制时会出现

CAT9554 digitalWrite Error
CAT9554 digitalWrite Error2

然后刷容量大一点的homekit固件又正常了。。。 把它刷到另一台设备上倒是正常。 希望 @qlwz 大佬编译一个屏蔽每隔5min保存电量代码的homekit的固件吧,这个项目下没有homekit。

fenkail-ui commented 2 years ago

如果这样看有可能是flash有问题了 存储了mqtt读出来错的。然后校验失败了。

看了一下log,应该是每过5min 会保存一次config的问题。。。有点太频繁了,如果保存失败就可能出现“被重置”的情况。

00:00:00 successful client mqtt connection
18:30:49 NTP: 2022-02-20 18:30:49
18:35:43 saveConfig . . . OK Len: 232 Crc: 17638
18:40:42 NTP: 2022-02-20 18:40:42
18:40:44 saveConfig . . . OK Len: 234 Crc: 31645
18:45:45 saveConfig . . . OK Len: 234 Crc: 23766

如果按照这个频率 一年的话得写入 12x24x365=105120次

看了一下代码,应该是保存电量这里,按照tasmota的电量保存代码好像是得等非常长的时间(对写入次数几乎没有影响)。

https://github.com/qlwz/esp_dc1/blob/e6694bac0c065b569f5cd47cc5c90850007eb6e8/src/DC1.cpp#L661-L667

有这个影响的同学可以尝试直接注释或者延长这个时间,当然也可以在web上加一个控制选项,自己研究吧。

多谢,把301改成了3600,即一个小时,已成功

gitercn commented 2 years ago

如果这样看有可能是flash有问题了 存储了mqtt读出来错的。然后校验失败了。

看了一下log,应该是每过5min 会保存一次config的问题。。。有点太频繁了,如果保存失败就可能出现“被重置”的情况。

00:00:00 successful client mqtt connection
18:30:49 NTP: 2022-02-20 18:30:49
18:35:43 saveConfig . . . OK Len: 232 Crc: 17638
18:40:42 NTP: 2022-02-20 18:40:42
18:40:44 saveConfig . . . OK Len: 234 Crc: 31645
18:45:45 saveConfig . . . OK Len: 234 Crc: 23766

如果按照这个频率 一年的话得写入 12x24x365=105120次 看了一下代码,应该是保存电量这里,按照tasmota的电量保存代码好像是得等非常长的时间(对写入次数几乎没有影响)。 https://github.com/qlwz/esp_dc1/blob/e6694bac0c065b569f5cd47cc5c90850007eb6e8/src/DC1.cpp#L661-L667

有这个影响的同学可以尝试直接注释或者延长这个时间,当然也可以在web上加一个控制选项,自己研究吧。

多谢,把301改成了3600,即一个小时,已成功

我也遇到了容易重置这个问题,我按照你说的修改了下,提了个pull request

feng5064 commented 2 years ago

有没有那位大神能提供已经“更改保存电量时间为一小时”的固件,这里提供的固件好像不是最新的。自己不会编译,只能求助各位大神了。

neckyaan commented 1 year ago
我跟踪了下日志,发现除了上面能量保存要写flash外,switchRelay也会经常写flash ,最夸张的是我插了个400w左右的电器,每一分钟就要写一次flash.至于开关状态,由homeassistant负责管理,完全没必要写在flash中。我的临时解决方案是把563行以下的内容: 

if (isSave && config.power_on_state > 0) { bitWrite(config.last_state, ch, isOn); bitSet(operationFlag, 1); Config::delaySaveConfig(10) }

改写成以下内容: if (isSave && config.power_on_state > 0) { //我改了参数,operationFlag为1会产生1分钟写一次falsh,并注销了Config::delaySaveConfig(10); bitWrite(config.last_state, ch, isOn); bitSet(operationFlag, 0); //Config::delaySaveConfig(10); Debug::AddInfo(PSTR("my_test DC1::switchRelay delaysaveconfig")); }

wwwcqh commented 1 year ago

请各位高手共享一下最新的固件,谢谢

sxm635796963 commented 1 year ago
我跟踪了下日志,发现除了上面能量保存要写flash外,switchRelay也会经常写flash ,最夸张的是我插了个400w左右的电器,每一分钟就要写一次flash.至于开关状态,由homeassistant负责管理,完全没必要写在flash中。我的临时解决方案是把563行以下的内容: 

如果 (isSave && config.power_on_state > 0) { bitWrite(config.last_state, ch, isOn); bitSet(operationFlag, 1); 配置::delaySaveConfig(10) }

修改以下内容: if (isSave && config.power_on_state > 0) { //我修改了参数,operationFlag为1会产1分钟写一次falsh,并注销了Config::delaySaveConfig(10); bitWrite(config.last_state, ch, isOn); bitSet(operationFlag, 0); //配置::delaySaveConfig(10); Debug::AddInfo(PSTR("my_test DC1::switchRelay delaysaveconfig")); }

老哥能分享个你的固件吗

jeremy-chuang commented 1 year ago

您好 @qlwz 請問可以關閉没有连接wifi 会定时重启的功能嗎?

ghostist commented 1 year ago
我跟踪了下日志,发现除了上面能量保存要写flash外,switchRelay也会经常写flash ,最夸张的是我插了个400w左右的电器,每一分钟就要写一次flash.至于开关状态,由homeassistant负责管理,完全没必要写在flash中。我的临时解决方案是把563行以下的内容: 

if (isSave && config.power_on_state > 0) { bitWrite(config.last_state, ch, isOn); bitSet(operationFlag, 1); Config::delaySaveConfig(10) }

改写成以下内容: if (isSave && config.power_on_state > 0) { //我改了参数,operationFlag为1会产生1分钟写一次falsh,并注销了Config::delaySaveConfig(10); bitWrite(config.last_state, ch, isOn); bitSet(operationFlag, 0); //Config::delaySaveConfig(10); Debug::AddInfo(PSTR("my_test DC1::switchRelay delaysaveconfig")); }

老哥我觉得你这么改,还是会每分钟写flash,但是不是很确定 想问下你现在插座还好吗?

neckyaan commented 1 year ago

https://github.com/neckyaan/esp_dc1/releases/download/2020.07.11.2000/dc1_20230108.bin

fffonion commented 4 months ago

跑了一年左右我也碰到同样的问题了,也判断是flash写坏了 😂 ;我自己的一个项目(esp32)也是往flash里写统计,结果最近也坏了。学到了。