iobroker-community-adapters / ioBroker.device-watcher

Watchdog for adapter/instances and devices/services.
MIT License
19 stars 12 forks source link

OpenMQTTGateway #193

Closed ciddi89 closed 6 months ago

ciddi89 commented 1 year ago

Anfrage aus Forum. Topic: https://forum.iobroker.net/topic/55426/test-adapter-device-watcher-v2-x-x-github-latest/1345?_=1686739165281

Devices über OpenMQTTGateway bei mir drin.
Das läuft auf einem ESP32 z.B. und setzt BLE Devices nach MQTT um.

In den Objekten sieht das folgendermaßen aus:

70ad7c6e-5a89-4932-9b0f-8c41ee3288ec-image.png

Objekte sehen so aus:

{
  "id": "3F:59:C8:63:90:D1",
  "name": "LYWSD02",
  "rssi": -98,
  "brand": "Xiaomi/Mijia",
  "model": "e-ink Clock",
  "model_id": "LYWSD02",
  "tempc": 24.7,
  "tempf": 76.46
}
{
  "id": "A4:C1:38:1B:D7:1A",
  "name": "ATC_1BD71A",
  "rssi": -89,
  "brand": "Xiaomi",
  "model": "TH Sensor",
  "model_id": "LYWSD03MMC_ATC",
  "tempc": 24.5,
  "tempf": 76.1,
  "hum": 64,
  "batt": 92,
  "volt": 3.032
}

Habe hier ein Blockly, was ich auch irgendwo gefunden hatte und mir zwei Sensoren ausließt:

// Beschreibe diese Funktion …
--
  | async function MQTT_MI_E72E00D32042() {
  | //Datenpunkt mit MQTT-Informationen im json-Format auslesen
  | json = (function () { try {return JSON.parse(getState("mqtt.0.home.OpenMQTTGateway_ESP32_BLE.BTtoMQTT.E72E00D32042").val);} catch(e) {return {};}})();
  | //json auslesen und Datenpunkte für Temperatur, Luftfeuchte und Batterie
  | setState("0_userdata.0.OpenMQTTGateway_BLE.E72E00D32042.Temperature", getAttr(json, 'tempc'));
  | setState("0_userdata.0.OpenMQTTGateway_BLE.E72E00D32042.Humidity", getAttr(json, 'hum'));
  | setState("0_userdata.0.OpenMQTTGateway_BLE.E72E00D32042.Battery", getAttr(json, 'batt'));
  | setState("0_userdata.0.OpenMQTTGateway_BLE.E72E00D32042.RSSI", getAttr(json, 'rssi'));
  | //Log Ausgabe als return der Funktion
  | return "MQTT MI_E72E00D32042 aktualisiert";
  | }
  |  
  | // Beschreibe diese Funktion …
  | async function MQTT_MI_E72E00E070B9() {
  | //Datenpunkt mit MQTT-Informationen im json-Format auslesen
  | json = (function () { try {return JSON.parse(getState("mqtt.0.home.OpenMQTTGateway_ESP32_BLE.BTtoMQTT.E72E00E070B9").val);} catch(e) {return {};}})();
  | //json auslesen und Datenpunkte für Temperatur, Luftfeuchte und Batterie
  | setState("0_userdata.0.OpenMQTTGateway_BLE.E72E00E070B9.Temperature", getAttr(json, 'tempc'));
  | setState("0_userdata.0.OpenMQTTGateway_BLE.E72E00E070B9.Humidity", getAttr(json, 'hum'));
  | setState("0_userdata.0.OpenMQTTGateway_BLE.E72E00E070B9.Battery", getAttr(json, 'batt'));
  | setState("0_userdata.0.OpenMQTTGateway_BLE.E72E00E070B9.RSSI", getAttr(json, 'rssi'));
  | //Log Ausgabe als return der Funktion
  | return "MQTT MI_E72E00E070B9 aktualisiert";
  | }
  |  
  |  
  | createState("0_userdata.0.OpenMQTTGateway_BLE.E72E00D32042.Temperature", 0, async function () {
  | });
  | createState("0_userdata.0.OpenMQTTGateway_BLE.E72E00D32042.Humidity", 0, async function () {
  | });
  | createState("0_userdata.0.OpenMQTTGateway_BLE.E72E00D32042.Battery", 0, async function () {
  | });
  | on({id: "mqtt.0.home.OpenMQTTGateway_ESP32_BLE.BTtoMQTT.E72E00D32042"/*home/OpenMQTTGateway_ESP32_BLE/BTtoMQTT/E72E00D32042*/, change: "ne"}, async function (obj) {
  | let value = obj.state.val;
  | let oldValue = obj.oldState.val;
  | console.log((await MQTT_MI_E72E00D32042()));
  | });
  |  
  | createState("0_userdata.0.OpenMQTTGateway_BLE.E72E00E070B9.Temperature", 0, async function () {
  | });
  | createState("0_userdata.0.OpenMQTTGateway_BLE.E72E00E070B9.Humidity", 0, async function () {
  | });
  | createState("0_userdata.0.OpenMQTTGateway_BLE.E72E00E070B9.Battery", 0, async function () {
  | });
  | createState("0_userdata.0.OpenMQTTGateway_BLE.E72E00E070B9.RSSI", 0, async function () {
  | });
  | on({id: "mqtt.0.home.OpenMQTTGateway_ESP32_BLE.BTtoMQTT.E72E00E070B9"/*home/OpenMQTTGateway_ESP32_BLE/BTtoMQTT/E72E00E070B9*/, change: "ne"}, async function (obj) {
  | let value = obj.state.val;
  | let oldValue = obj.oldState.val;
  | console.log((await MQTT_MI_E72E00E070B9()));
  | });
michael-siegel-github commented 11 months ago

Moin,

ich stand genau vor dem gleichen Problem und habe eine für mich einfache und flexible Lösung gefunden.

Ich benutze Tasmota/Sonoff als BLE Bridge auf MQTT

image

Aus diversen Gründen nutze ich aber schon länger Linkeddevices und mappe mir die Datenpunkte um. nun habe ich das Mapping erweitert um rssi (battery hatte ich vorher schon)

image

Und den Device-Watcher um einen LinkedDevices Adapter erweitert.

Funktioniert und kann im Prinzip für alles benutzt werden.