最新固件升级后局域网模式的改变

最近发布的固件,升级完成后局域网模式变得几乎不可用的心跳发送模式貌似变了,HomeBridge 插件经常反馈心跳丢失+无法连接灯,一直重试。另一盏带氛围灯的大皎月(ceiling4)没有更新固件就没这问题。

灯型号:
ceiling1
ceiling3

固件版本:
2.0.2_0192
2.0.2_0048

HomeBridge Log:

closed the socket and retry
[4/26/2020, 2:42:15 AM] [homebridge-yeelight.yeelight] failed to connect!
[4/26/2020, 2:42:15 AM] [homebridge-yeelight.yeelight] accesseory unreachable
[4/26/2020, 2:42:15 AM] [homebridge-yeelight.yeelight] dev disconnected 0x0000000007cd839e false
retry connect (18) …: 0x0000000007cd839e
heartbeat lost, close socket and reconnect
closed the socket and retry
[4/26/2020, 2:42:25 AM] [homebridge-yeelight.yeelight] failed to connect!
[4/26/2020, 2:42:25 AM] [homebridge-yeelight.yeelight] accesseory unreachable
[4/26/2020, 2:42:25 AM] [homebridge-yeelight.yeelight] dev disconnected 0x0000000007cd839e false
retry connect (19) …: 0x0000000007cd839e
heartbeat lost, close socket and reconnect
closed the socket and retry
[4/26/2020, 2:42:35 AM] [homebridge-yeelight.yeelight] failed to connect!
[4/26/2020, 2:42:35 AM] [homebridge-yeelight.yeelight] accesseory unreachable
[4/26/2020, 2:42:35 AM] [homebridge-yeelight.yeelight] dev disconnected 0x0000000007cd839e false
retry connect (20) …: 0x0000000007cd839e

手动 telnet 显示:

Trying 10.0.0.159…

Connected to yeelink-light-ceiling3_mibt13119359.lan.

Escape character is ‘^]’.

Connection closed by foreign host.

HomeBridge 插件:


补充:注释掉插件中的心跳检测模块后恢复正常,正在进一步差错。Staff 若有最新固件在「局域网通信」这块的修改详情,若方便请告知。初步怀疑是心跳包那块变了

感谢反馈,我们排查下

初步查错应该是新固件不允许命令的 id 为 -1

在插件的 yee.js:106 行,调用 get_prop 获取设备状态(插件对灯具的心跳检测)时 id 为 -1 ,导致灯具一直返回 “invalid command”

利用 python demo 的小测试,结果符合预测:

Enter a command: c 1 {“id”:-1,“method”:“get_prop”,“params”:[“power”]}
connect 10.0.2.63 55443 …
{“id”:-1,“method”:“get_prop”,“params”:[“power”]}
{“id”:0, “error”:{“code”:-1, “message”:“invalid command”}}

Enter a command: c 1 {“id”:1,“method”:“get_prop”,“params”:[“power”]}
connect 10.0.2.63 55443 …
{“id”:1,“method”:“get_prop”,“params”:[“power”]}
{“id”:1,“result”:[“on”]}

修改插件发送命令时 id 的生成机制后一切正常了

对比测试符合预期,没有收到固件更新的大皎月(型号 ceiling4)在使用 id 为 -1 的命令时并不会报错。Staff 请确认一下最新固件是否更改了 「LAN 控制里请求的 id 值不再允许为负值」,谢谢~

Log:

Enter a command: l
4 managed bulbs
1: ip=10.0.0.158,model=ceiling3,power=on,bright=60,rgb=0
2: ip=10.0.0.160,model=ceiling4,power=on,bright=90,rgb=0
3: ip=10.0.0.159,model=ceiling3,power=off,bright=60,rgb=0
4: ip=10.0.0.157,model=ceiling1,power=on,bright=1,rgb=0

Enter a command: c 2 {“id”:-1,“method”:“get_prop”,“params”:[“power”]}
connect 10.0.0.160 55443 …
{“id”:-1,“method”:“get_prop”,“params”:[“power”]}
{“id”:-1, “result”:[“on”]}