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
查看完整版本: (多个)蓝牙网关 TTL->MQTT,支持任意米家蓝牙设备接入HA/NR