OpenMQTTGateway support thread - im Speziellen: BT/BTLE

Begonnen von Beta-User, 21 Februar 2022, 17:13:56

Vorheriges Thema - Nächstes Thema

Waldmensch

#150
Habs am Laufen mit dem intAct Battery Guard auf ESP32, der AES key ist hardcoded in der APK und im Device :-X

Der BM6 und BM200 (und vermutlich noch andere) nutzt übrigens dieselbe App, sollte also die gleiche Hardware sein.

Hier ist ein Demo PIO Projekt für den ESP32 der mit bis zu 4 Monitoren gleichzeitig verbinden kann: https://github.com/Waldmensch1/BatteryGuard

Test Battery (50547B815AFB): 14.01V | 3% | 23°C | charging
Test Battery (50547B815AFB): 14.01V | 3% | 23°C | charging
Test Battery (50547B815AFB): 14.01V | 3% | 23°C | charging
Test Battery (50547B815AFB): 14.01V | 3% | 23°C | charging
Test Battery (50547B815AFB): 14.01V | 3% | 23°C | charging
Test Battery (50547B815AFB): 14.01V | 3% | 23°C | charging
Test Battery (50547B815AFB): 14.01V | 3% | 23°C | charging
Test Battery (50547B815AFB): 14.01V | 3% | 23°C | charging
Test Battery (50547B815AFB): 14.01V | 3% | 23°C | charging
Test Battery (50547B815AFB): 14.01V | 3% | 23°C | charging
Test Battery (50547B815AFB): 14.01V | 3% | 23°C | charging
Test Battery (50547B815AFB): 14.01V | 3% | 23°C | charging

JWRu

#151
Um lepresenced etc. abzulösen und meine G-Tags weiter für die Anwesenheitserkennung nutzen zu können, habe ich einen ESP32 mit OpenMQTTGateway geflasht und nach der Anleitung im FHEM-Wiki OpenMQTTGateway eingerichtet.
Das hat bestens geklappt. Ich habe jetzt das MCU-Device und auch ein OMG_XXXXXXXXXXXX-Device für den G-Tag, das regelmäßig aktualisiert wird.
Das einzige, was nicht funktioniert, ist die Abfrage des Batteriezustands.
Wenn ich "get OMG_XXXXXXXXXXXX batteryPercent" ausführe, erhalte ich nach einiger Zeit die Meldung:
Timeout reading answer for SmartHome/BLE/OMG_ESP32_BLE/commands/MQTTtoBT/config {"ble_read_address":"XX:XX:XX:XX:XX:XX","ble_read_service":"180f","ble_read_char":"2a19","value_type":"HEX"}Der G-Tag ist dabei ganz in der Nähe des ESP32 (RSSI -35).
(XXX..... dient natürlich nur zur Anonymisierung).
ZBox; RasPi 3B; RasPi Zero W; Homematic; Z-Wave; EnOcean, Shelly; DuoFern; Oregon- und Bresser-Sensoren; Steuerung Viessmann-Heizung; ESP32 und ESP8266 über MQTT; Arduino

Guybrush

sicher dass dein topic passt?

.../commands/MQTTtoBT/ sieht richtig aus, aber das config dahinter sieht falsch aus? damit werden doch nur configs des gateway gesetzt und nichts gelesen?

JWRu

#153
Die getList wurde mit dem attrTemplate OpenMQTTGateway_BT_gtag nach Eingabe der Bluetooth-MAC zusammen mit dem Device automatisch angelegt (wie im Wiki beschrieben):
batteryPercent:noArg batteryPercent { my $id = ReadingsVal($NAME,'id','XXXXXXXXXXXX'); qq($DEVICETOPIC/commands/MQTTtoBT/config {"ble_read_address":"$id","ble_read_service":"180f","ble_read_char":"2a19","value_type":"HEX"}) }Im Reading "id" steht die Bluetooth-MAC mit Doppelpunkten.
Wenn ich "/config" aus der getList entferne, erhalte ich den gleichen Fehler.
ZBox; RasPi 3B; RasPi Zero W; Homematic; Z-Wave; EnOcean, Shelly; DuoFern; Oregon- und Bresser-Sensoren; Steuerung Viessmann-Heizung; ESP32 und ESP8266 über MQTT; Arduino

Guybrush

setz doch mal testweise statt $id die mac direkt und value_type als int. denke mal so in etwa:
readBattery:noArg $DEVICETOPIC/commands/MQTTtoBT {
    "ble_read_address":"XX:XX:XX:XX:XX:XX",
    "ble_read_service":"180f",
    "ble_read_char":"2a19",
    "value_type":"INT",
    "immediate":true,
    "ttl":2
}

JWRu

Dann erhalte ich das:
Timeout reading answer for syntax error at (eval 5579480) line 1, near ""ble_read_address":"
Execution of (eval 5579480) aborted due to compilation errors.
ZBox; RasPi 3B; RasPi Zero W; Homematic; Z-Wave; EnOcean, Shelly; DuoFern; Oregon- und Bresser-Sensoren; Steuerung Viessmann-Heizung; ESP32 und ESP8266 über MQTT; Arduino

Guybrush

bekommst du denn parallel eine battery message? müßtest du mal mit mosquitto_sub/pub testen. was da wirklich an messages von dem device im broker aufläuft

JWRu

Zitatbekommst du denn parallel eine battery message? müßtest du mal mit mosquitto_sub/pub testen. was da wirklich an messages von dem device im broker aufläuft
Nein, da kommt nichts - ich habe mit MQTT Explorer geschaut. Falls etwas käme, würde ja damit das Reading batteryPercent gefüllt (so ist getList definiert, falls ich die CommandRef richtig verstehe).
ZBox; RasPi 3B; RasPi Zero W; Homematic; Z-Wave; EnOcean, Shelly; DuoFern; Oregon- und Bresser-Sensoren; Steuerung Viessmann-Heizung; ESP32 und ESP8266 über MQTT; Arduino

Guybrush

dann muss man aber tatsächlich beim OMG den Fehler suchen. Ich vermute mal dass der topic für dein device nicht richtig ist..

JWRu

#159
Heureka - jetzt habe ich es hingekriegt - mit dieser getList:
batteryPercent:noArg batteryPercent { my $id = ReadingsVal($NAME,'id','XXXXXXXXXXXX'); qq($DEVICETOPIC/commands/MQTTtoBT {"ble_read_address":"$id","ble_read_service":"180f","ble_read_char":"2a19","value_type":"HEX","immediate":true,"mac_type": 0}) }
Edit: Funktioniert nur ab und zu - es gibt immer mal wieder Timeout-Fehler.
ZBox; RasPi 3B; RasPi Zero W; Homematic; Z-Wave; EnOcean, Shelly; DuoFern; Oregon- und Bresser-Sensoren; Steuerung Viessmann-Heizung; ESP32 und ESP8266 über MQTT; Arduino