kite3721
发表于 2020-7-17 14:23:20
米家门锁能接上不?
dscao
发表于 2020-7-17 14:56:22
本帖最后由 dscao 于 2020-7-17 15:02 编辑
我用原版加你的代码修改的,配网后如果全部正确就没什么问题。如果mqtt服务器是关闭的或什么原因连不上就导致系统ota及telnet都没反应。
之后修改了一处,没反应变成有反应,只是慢一点,但至少能操作了。
bool mqtt_reconnect() {
if (!mqtt_client.connected()) { //while改为if ,调用的地方本身就一直循环检测了,这里应该不需要再循环了。
if (mqtt_client.connect(HOSTNAME, MQTT_USER, MQTT_PASS)) {
Serial.println(F("MQTT connected!"));
mqtt_client.publish("mqttl/status", "alive");
//mqtt_client.subscribe("mqttl/set");
//delay(5000);
//break;//防止配网后陷入发布alive的死循环
}
else {
Serial.print(F("MQTT Connection failed: rc="));
Serial.println(mqtt_client.state());
Serial.println(F(" Retrying in 5 seconds"));
delay(5000);
}
}
return true;
}
……
可以试试看效果怎样,我还不太会怎么调试消息。
我的情况是消息太少了,有时以为是不是坏了,一点动静都没有。蓝牙温湿计上报时间间隔太久了,只好加入其它消息,用遥控器操作操作以显示点消息,好让我知道它在工作。今天编译+ota了几十次了,先这样了。后续再学习或请教 yaml 中的配置。
dscao
发表于 2020-7-17 15:05:24
kite3721 发表于 2020-7-17 14:23
米家门锁能接上不?
我认为此方案原理肯定能接上,如果锁的参数不一样可能需要自己查锁的pid和eid,所以还是保留了telnet或mqssl/json的输出。
XCray
发表于 2020-7-17 17:33:32
kite3721 发表于 2020-7-17 14:23
米家门锁能接上不?
你这有明知故问的嫌疑啊?
都说过了,适应米家所有蓝牙设备(只要它能连接蓝牙网关)。
当然,需要自己动手在ha侧编辑yaml配置,米家门锁可参考killadm大神提供的yaml修改。
或者和任意蓝牙设备一样,收集mqtt消息和debug消息(json),结合官方文档和自己的需要即可编辑yaml了。
有问题具体讨论
XCray
发表于 2020-7-17 17:37:59
本帖最后由 XCray 于 2020-7-17 18:03 编辑
dscao 发表于 2020-7-17 14:56
我用原版加你的代码修改的,配网后如果全部正确就没什么问题。如果mqtt服务器是关闭的或什么原因连不上就导 ...
我搞清楚之前碰到的问题了。
本来想稳妥,原来的esp-01s保持正常工作(刷入wifi硬编码的固件),用另一个esp-01s刷入通用固件进行测试。没想到这两个模块连接mqtt时使用的clientid是一样的,导致连接被反复中断然后俩模块都玩命重连。。。
你现在只有蓝牙温湿度计?这个东西消息确实非常少,报告频率很低,比花花草草都低得多。
除了蓝牙事件,其他消息的格式之类的需要另行研究
lustlost
发表于 2020-7-17 23:41:23
楼主能不能做个刷好的提供购买啊
XCray
发表于 2020-7-18 06:25:08
本帖最后由 XCray 于 2020-7-18 07:18 编辑
lustlost 发表于 2020-7-17 23:41
楼主能不能做个刷好的提供购买啊
我不是商家,只是自己喜欢玩。没有从商经验,更没有电商经验,倒是在网上卖过几样个人闲置出二手的东西(咸鱼,应该不超过10件)。。。
你说的这事儿理论上没问题,但实际操作可行性似乎不大。
模块网上我能找到的最便宜又非常可靠的货源,5.3/个,运费6元/次,一次买多个的话能再省点儿运费。
软件、工具、刷写方法都是公开的,不宜收费也没想收费。
发货,这个是最大的问题。我印象中发快递最低是12元/单。
这东西需求量不可能太大,怎么看都是免费给快递公司打工了。
哪位有这方面的经验或资源,倒是可以尝试。
dscao
发表于 2020-7-18 12:34:16
在你的基础上再作个改进:
bool mqtt_reconnect() {
String mqttlname = HOSTNAME + String(ESP.getChipId()).substring(0, 4);
while (!mqtt_client.connected()) {
if (mqtt_client.connect(mqttlname.c_str(), MQTT_USER, MQTT_PASS)) {
Serial.println(F("MQTT connected!"));
mqtt_client.publish("mqttl/status", "alive");
//mqtt_client.subscribe("mqttl/set");
delay(5000);
break;//防止配网后陷入发布alive的死循环
}
else {
Serial.print(F("MQTT Connection failed: rc="));
Serial.println(mqtt_client.state());
Serial.println(F(" Retrying in 5 seconds"));
delay(5000);
}
}
return true;
}
这样每个芯片不同,clientid就不同了,仿热点名后缀的。
通用性越来越强了,这样家里同一台服务器可以服务多个网关设备了。
XCray
发表于 2020-7-18 14:08:19
本帖最后由 XCray 于 2020-7-18 14:30 编辑
dscao 发表于 2020-7-18 12:34
在你的基础上再作个改进:
bool mqtt_reconnect() {
哈哈,想到一起了!
我上午刚把自己主用的模块更新了,clientid和你说的一摸一样。
不过问题原因弄明白了,delay和break那两个语句就没啥意义了(当时有些怀疑mqtt_client.connected()这个方法的实现有bug以为是在这儿陷入死循环的)。
你说的“多个网关设备”这一点很重要(我开始都没往这儿想,我家里只有一个蓝牙网关,但我相信家里有多个蓝牙网关的朋友应该也有不少),我在主贴里特意更新了一版代码和固件并加入了文字说明。
qjiang
发表于 2020-7-18 23:04:01
我有几个蓝牙夜灯 下次试试大佬的固件!!
页:
1
[2]
3
4
5
6
7
8
9
10
11