Seite 1 von 1

MQTT Abfrage der Heizungswerte Ebusd

Verfasst: 23. Nov 2019 12:48
von maddin2020
Hallo ich habe eine Vaillant Heizung die ich über das Ebus Bus angebunden habe. Dafür habe ich das Tool Ebusd installiert und sehe die Daten im MQTT Broker.
Für manche Werte muss ich aber erst ein Publish senden der den jeweiligen Status dann zurückgibt. Nun weiß ich nicht mehr weiter hier einmal mein jetziger Code

Laut Beschreibung von Ebusd muss ich zunächst pro wert ein publish mit dem "Kürzel" /get am Ende absetzen und bekomme dann den Wert als im Wert ohne Get zurück

Bespiel:
ich sende per MQTT Broker "ebusd/broadcast/outsidetemp/get" weg und bekomme dann auf dem Wert "ebusd/broadcast/outsidetemp" zurück. Über den Broker geht das alles schon tadellos. Nun würde ich das gerne automatisiert in Obenhab zyklus (z.B. pro Minute) einbinden. Bisher habe ich folgenden Code der aber einfach nicht funktioniert.

Code: Alles auswählen

Heizung.items
Number  Heizung_Aussentemperatur "Aussentemperatur"

Code: Alles auswählen

Heizung.rules
rule "Energieertrag MQTT Publish"
    when
        Time cron "0 0/1 * 1/1 * ? *" //Aufruf pro Minute
    then
        val mqttActions=getActions("mqtt","mqtt:broker:MQTTBroker")
        mqttActions.publishMQTT("ebusd/broadcast/outsidetemp/get",Heizung_Aussentemperatur.state.toString)
    end
Danke für die Hilfe

Re: MQTT Abfrage der Heizungswerte Ebusd

Verfasst: 23. Nov 2019 16:03
von udo1toni
So kann es nicht funktionieren, denn Du gibst gar nicht das entsprechende Topic an.

Aber zum Glück ist es viel einfacher (so behaupte ich zumindest mal...)
Du definierst das Item, welches die Außentemperatur anzeigen soll und bindest es direkt an das Topic. Du verwendest mqtt2, entsprechend definierst Du ein Thing und einen Channel (bzw. packst Du den Channel zu einem bestehenden mqtt Thing dazu), der Channel ist vom Typ number und hat nur das stateTopic.

Die Rule sendet minütlich die Anfrage und die Vaillant sendet auf das Topic, welches dann automatisch im Item landet.

Die Rule kannst Du etwas vereinfachen:

Code: Alles auswählen

Heizung.rules
rule "Energieertrag MQTT Publish"
when
    Time cron "0 * * * * ?" //Aufruf pro Minute
then
    val mqttActions=getActions("mqtt","mqtt:broker:MQTTBroker")
    mqttActions.publishMQTT("ebusd/broadcast/outsidetemp/get",null)
end
Die Rule triggert wie bisher einmal pro Minute.
Falls Du mehrere Topics auf diese Weise triggern willst, kannst Du das alles in einer Rule erledigen (sofern die Antwort auf unterschiedlichen Topics landet)
Falls Du andere Rules hast, die ebenfalls zur vollen Minute triggern, solltest Du den Triggerzeitpunkt von der vollen Minute weg bewegenm beispielsweise auf die 3. Sekunde der Minute (also die 0 durch eine 3 ersetzen), damit die Rules gestaffelt laufen.

Re: MQTT Abfrage der Heizungswerte Ebusd

Verfasst: 1. Apr 2020 22:11
von Macro77
Hallo

ich hab mal noch eine Frage.
Bei mir hat es erst funktioniert als ich die ,null in "" gelegt habe, ansonsten ist nichts an den Broker gesendet worden.
Ausserdem kommt per MQTT immer 2 mal die Antwort, einmal kurz nach den get und dann nochmals ca. 10 Sekunden später.
Benutze ich aber das .state.toString erfolgt nur einmal eine Antwort mit dem gewünschten Wert.
Ist jetzt nicht weiter schlimm aber man möchte ja auch verstehen was man macht. ;-)

Gruss Macro77

Code: Alles auswählen

rule "Wasserdruck Vaillant VC 146"
    when
        Time cron "0 */5 * * * ?" //Aufruf pro 5 Minute
    then
        val mqttActions=getActions("mqtt","mqtt:broker:MQTTBroker")
        mqttActions.publishMQTT("ebusd/bai/WaterPressure/get","null")
    end