Wie MQTT Nachrichten auf ein anderes Topic weiterleiten/kopieren

  • Ich brauch mal wieder einen Stubser in die richtige Richtung.


    Das Switchbot Plugin schreibt auf Wunsch ein nicht konfiguierbares Topic, z.B.


    homebridge-switchbot/meter/11:22:33:44:55:66  {"humidity": 47,"temperature": 21.6}


    Hieraus würde ich nun gerne die Temperatur nehmen und auf ein anderes Topic weiterleiten oder umleiten:


    zigbee2mqtt/Heizung1/set/sensor_temp -> 21.6


    Die vom Switchbot Meter gemessene Temperatur soll also dem Heizungsthermostat als externen Temperatursensor untergejubelt werden. Händisch funktioniert das sehr gut.


    Das muss keineswegs zwingend in Homebridge geschehen (wäre natürlich toll, wenn das ginge) Meine Programmierskills sind jetzt nicht die tollsten aber vorhandene, ähnliche Scripte umschreiben klappt meist ganz gut. Wenn es keine einfache Variante gibt, müsste ich also ein Script (Bash/Python/...) permanent laufen lassen und das erste topic abonnieren und jedesmal das JSON parsen, wenn eine neue Nachricht reinkommt. Genau hier scheitern aber meine Kenntnisse.


    Der Mosquitto Server läuft auf Raspian/testing, zigbee2mqtt als Docker Container.


    mqttthing Plugin ist auch installiert. "Thermostat" hat hier aber leider kein setCurrentTemperature


    OK, ich hab dann gestern Abend doch noch ein bisschen recherchiert und habs in Phython soweit hinbekommen, musste dann aber aufhören wegen Frühschicht heute.


    Fehlt noch:

    • eine Verzweigung um verschiedene Sensoren an unterschiedliche Thermostate zu senden - bekomme ich hin.
    • Nutzung von mqtts mit user/pass statt mqtt anonym - mal sehen
    • Überwachung des Scripts

    Zum letzten Punkt, wie stelle ich sicher, dass das Script permanent läuft? Erste Überlegung war per cron-job stündlich einen mqtt-trigger zu senden, der das Script veranlasst den loop und sich selbst zu beenden, 3 Sekunden warten, dann sicherheitshalber ein killall scriptname.py und nach weiteren 3 Sekunden das Script wieder starten. Eine andere Überlegung wäre, vom Switchbot-Plugin die Nachricht mit retain senden zu lassen und das Script dann nur alle 5 oder 10 Minuten zu starten. Würde vermutlich auch der Lebensdauer der Batterie am Heizkörperventil gut tun.

    Einmal editiert, zuletzt von Spy () aus folgendem Grund: Ein Beitrag von ApplePrime mit diesem Beitrag zusammengefügt.

  • Ich brauch mal wieder einen Stubser in die richtige Richtung.

    Hier ist der Stupser. Node Red.


    Ich sag's gleich: ich werde über meinen Vorschlag in diesem Thread nicht weiter diskutieren. Und du auch nicht. Und auch sonst keiner. Das hier ist nämlich ein HomeKit-Forum und keins für Node Red, und die Moderatoren sehen es nicht gern, wenn wir hier Lösungen diskutieren, die mit HomeKit nix zu tun haben. Wobei sie meine volle Unterstützung haben.


    Ich stelle es jetzt trotzdem hier in diesen Thread, weil es vielleicht auch ein Stupser für andere ist, die sich mit MQTT beschäftigen.


    Wenn du Fragen hast, schreib mir eine persönliche Nachricht. Zurück zum Stupser:



    Weitere Infos auf YouTube mit dem Suchbegriff Node Red MQTT.

  • Danke sschuste für die Inspiration. Nur zu diesem Zweck scheint mir das etwas übertrieben; wäre wie der Versuch mit Atomraketen eine Ameise tätowieren zu wollen. Sorry - aber ich liebe diesen Spruch.


    Generell werde ich mir aber irgendwann mal NR als Docker zum Testen reinziehen, nur rein aus Interesse.


    Zwischenzeitlich ist mein Python Script fertig. Das Switchbot-Meter setzt die Temperatur jetzt mit Retain-Flag und ich lasse alle 15 Minuten per cronjob mein Script laufen und gut.


    Wenn ich mehr Zeit habe, bereite ich das Script mal auf und ergänze es hier.