Seite 1 von 2
HM-CC-RT-DN nach Mqtt
Verfasst: 19. Jan 2022 18:08
von HiG
Da die Suche mir sagt...sie will mir nix sagen, da zuviele Einträge für diese Suchparameter vorhanden sind...ich aber nüx finde...
Ich möchte gerne meine HM-CC-RT-DN-Werte in die Mosquitto-Queue bringen.
Ich habe eine Items-Datei in der die Items defniert sind
Code: Alles auswählen
Number DG_HZ_Batterie "Batterie [MAP(battery.map):%s]" <lowbattery> (G_DG_Hz) {channel="homematic:HG-HM-CC-RT-DN:ccu:xxx0432xx7:0#LOWBAT"}
Number DG_HZ_Temp_Ist "Ist-Temperatur [%.2f °C]" <temperature> (G_DG_Hz) {channel="homematic:HG-HM-CC-RT-DN:ccu:xxx0432xx7:4#ACTUAL_TEMPERATURE"}
Number DG_HZ_Temp_Soll "Soll-Temperatur [%.2f °C]" <temperature> (G_DG_Hz) {channel="homematic:HG-HM-CC-RT-DN:ccu:xxx0432xx7:4#SET_TEMPERATURE"}
Wie bekomme ich es hin...das OH die Werte bei Änderung in die MQ stellt?
Re: HM-CC-RT-DN nach Mqtt
Verfasst: 19. Jan 2022 21:03
von udo1toni
Du musst Channel erstellen, die jeweils auf ein Topic senden. Diese Channel musst Du dann mit den passenden Items verlinken und als Profile vermutlich Follow setzen, damit die Wertänderung als Befehl durchgereicht wird.
Re: HM-CC-RT-DN nach Mqtt
Verfasst: 20. Jan 2022 15:50
von HiG
Ich hab mich mit meinem begrenzten Wissen drangesetzt unbd versucht Deine Worte in Taten umzusetzen
Folgende Dinge habe ich jetzt definiert
MQTT-Thing/Channel
Code: Alles auswählen
Thing topic eg_test_heizung "Test Heizung" @ "mqtt" {
Type number : eg_tt_hz_Ist "Ist-Temperatur" [ stateTopic="zb2mqtt/eg_tt_hz_01", commandTopic="zb2mqtt/eg_tt_hz_01/set", formatBeforePublish="{ \"ist_temp\" : %f }"]
Type number : eg_tt_hz_Soll "Soll-Temperatur" [ stateTopic="zb2mqtt/eg_tt_hz_01", commandTopic="zb2mqtt/eg_tt_hz_01/set", formatBeforePublish="{ \"soll_temp\" : %f }"]
}
Item
Code: Alles auswählen
Number x_eg_tt_hz_Soll "Soll-Temperatur" <temperature> (gKuecheHeizung) { channel="mqtt:topic:ff57091363:eg_tt_hz_Soll"[profile="follow"]}
Dieses hab ich mir aus diesem Forum "geklaut"
Setzen Tue ich den Wert über eine Rule...damit das passiert wenn ich will
Code: Alles auswählen
rule "rules test1"
when
Item x_dg_of_li_01_sw changed
then
x_eg_tt_hz_Soll.sendCommand(75)
end
In meinem Mosquitto kommt allerdings nichts an. Also wahrscheinlich falsch

Re: HM-CC-RT-DN nach Mqtt
Verfasst: 20. Jan 2022 16:18
von udo1toni
Du solltest nicht zwei Channel mit identischen state- und commandTopics einrichten. Siehe unten...
Weiterhin stimmt die Channel UID nicht. Diese setzt sich zusammen aus "mqtt:topic:<bridge-id>:<thing-id>:<channel-id>, bei Dir fehlt also die Thing-ID (eg_test_heiung). Da Du hier Textkonfiguration angibst: Nutzt Du VSCode? Dort gibt es ein openHAB-Plugin. Man trägt den openHAB-Server ein und das Plugin zieht sich per REST API eine aktuelle Thing- und Item Liste. Man kann beide Listen anzeigen und vor allem vollautomatisch Items zu Things bzw. deren Channels erstellen lassen, damit ist es dann so gut wie ausgeschlossen, die falsche UID anzugeben.
Nochmal zurück zum Topic: Du willst auf ein identisches Topic unterschiedliche JSON Objekte senden. Am einfachsten (und zuverlässigsten) machst Du das direkt aus der Rule. Dazu legst Du einen String Channel an, der ausschließlich das commandTopic enthält und sonst gar nichts. Die komplette Formatierung des Befehls (also mit JSON Objekt) erledigst Du innerhalb der Rule. Dadurch hast Du viel bessere Kontrolle über das Objekt, und es ist auch einfacher, weitere Objekte hinzuzufügen:
Code: Alles auswählen
rule "rules test1"
when
Item Sollwert received command // ein Number Item, welches den Sollwert speichert/anzeigt
then
val Number nSoll = if(receivedCommand instanceof Number) (receivedCommand as Number).floatValue else 22 // 22 ist der Default Wert
val String strSoll = "{ \"soll_temp\" : " + nSoll.toString + " }" // Achtung, Alternative, Entweder diese oder die nächste Zeile
val String strSoll = '{ "soll_temp" : ' + nSoll.toString + ' }' // geht eventuell auch
x_eg_tt_hz_Set.sendCommand(strSoll)
end
Re: HM-CC-RT-DN nach Mqtt
Verfasst: 20. Jan 2022 18:07
von HiG
Das klappt

Super...danke
Ich hab ein paar kleine "Umbauten" vorgenommen, weil ich ungeduldig bin

"received command" wollte bei mir nicht funktionieren und stattdessen habe ich "changed" genommen.
Thing
Code: Alles auswählen
Thing topic eg_test_heizung "Test Heizung" @ "mqtt" {
Type string : eg_tt_hz_Soll "Soll-Temperatur" [ commandTopic="zb2mqtt/eg_tt_hz_01/set"]
}
Item
Code: Alles auswählen
String x_eg_tt_hz_Soll "Soll-Temperatur" <temperature> (gKuecheHeizung) { channel="mqtt:topic:ff57091363:eg_test_heizung:eg_tt_hz_Ist"[profile="follow"]}
Code: Alles auswählen
rule "rules test1"
when
Item eg_ku_hz_Temp_Soll changed// ein Number Item, welches den Sollwert speichert/anzeigt
then
val Number nSoll = if(eg_ku_hz_Temp_Ist instanceof Number) (eg_ku_hz_Temp_Ist as Number).floatValue else 20 // 22 ist der Default Wert
val String strSoll = "{ \"soll_temp\" : " + nSoll.toString + " }" // Achtung, Alternative, Entweder diese oder die nächste Zeile
//val String strSoll = '{ "soll_temp" : ' + nSoll.toString + ' }' // geht eventuell auch
logInfo("Heizung",strSoll)
x_eg_tt_hz_Soll.sendCommand(strSoll)
end
Hab dann noch ein wenig nachgedacht...eigentlich könnte ich ja einen kompletten Payload zusammenbasteln und senden?!
Code: Alles auswählen
rule "rules test2"
when
Item eg_ku_hz_Temp_Soll changed // ein Number Item, welches den Sollwert speichert/anzeigt
then
val Number nSoll = if(eg_ku_hz_Temp_Soll instanceof Number) (eg_ku_hz_Temp_Soll as Number).floatValue else 20 // 20 ist der Default Wert
val Number nIst = if(eg_ku_hz_Temp_Ist instanceof Number) (eg_ku_hz_Temp_Ist as Number).floatValue else 20 // 20 ist der Default Wert
val String strSoll = "{ \"soll_temp\" : " + nSoll.toString + ", " + "\"ist_temp\" : " + nIst.toString + " }"
logInfo("Heizung",strSoll)
x_eg_tt_hz_Ist.sendCommand(strSoll)
end
Allerdings bin ich kein Freund von String-Konkatenation...schön wäre was wie ein StringBuilder oder so?!
Re: HM-CC-RT-DN nach Mqtt
Verfasst: 20. Jan 2022 19:22
von udo1toni
StringBuilder gibt es in openHAB DSL auch. Einfach
Code: Alles auswählen
val StringBuilder strMyString = new StringBuilder
strMyString.append("der erste Teilstring ")
strMyString.append(einObjekt.toString)
strMyString.append(" der dritte Teilstring")
logInfo("string","der String lautet: {}",strMystring.toString)
Aus dem Gedächtnis...
Das received command sollte funktionieren, solange Du über die UI verstellst. Wenn Du über ein anderes Binding steuerst, ist natürlich changed der richtige Trigger, und entsprechend newState als Wert.
Re: HM-CC-RT-DN nach Mqtt
Verfasst: 20. Jan 2022 20:55
von HiG
udo1toni hat geschrieben: ↑20. Jan 2022 19:22
Aus dem Gedächtnis...
Funktioniert noch
Code: Alles auswählen
rule "rules test1"
when
Item og_bd_hz_Temp_Ist changed // ein Number Item, welches den Sollwert speichert/anzeigt
then
val Number stnew=(newState as Number)
val Number nSoll = if(eg_ku_hz_Temp_Ist instanceof Number) (eg_ku_hz_Temp_Ist as Number).floatValue else 20 // 20 ist der Default Wert
val Number nIst = if(eg_ku_hz_Temp_Ist instanceof Number) (eg_ku_hz_Temp_Ist as Number).floatValue else 20 // 20 ist der Default Wert
val Number nVentil = if(eg_ku_hz_Ventil instanceof Number) (eg_ku_hz_Ventil as Number).floatValue else 0 // 20 ist der Default Wert
val StringBuilder strMyString = new StringBuilder
val String strSoll = "{ \"soll_temp\" : " + nSoll.toString + ", " + "\"ist_temp\" : " + nIst.toString + " }"
strMyString.append("{ \"soll_temp\" : ")
strMyString.append(nSoll.toString)
strMyString.append(", \"ist_temp\" : ")
strMyString.append(stnew.toString)
strMyString.append(", \"ventil\" : ")
strMyString.append(nVentil)
strMyString.append(", \"window\" : ")
strMyString.append(eg_ku_hz_Fenster.state.toString)
strMyString.append(", \"active\" : ")
strMyString.append(eg_ku_hz_Active.state.toString)
strMyString.append(", \"mode\" : \"")
strMyString.append(eg_ku_hz_C_M.state.toString)
strMyString.append("\"}")
logInfo("Heizung","new:" + stnew.toString )
logInfo("Heizung",strMyString.toString)
x_eg_tt_hz_Ist.sendCommand(strSoll)
end
liefert
Code: Alles auswählen
{ "soll_temp" : 20, "ist_temp" : 18.70, "ventil" : 0, "window" : ON, "active" : OFF, "mode" : "AUTO-MODE"}
Re: HM-CC-RT-DN nach Mqtt
Verfasst: 20. Jan 2022 22:09
von udo1toni
Re: HM-CC-RT-DN nach Mqtt
Verfasst: 21. Jan 2022 08:09
von HiG
@udo1toni : Funktioniert das mit OH2.5 genauso? Dann könnte ich das direkt auf dem "Quellsystem" einspeisen. Aktuell zieht es sich die Werte per Remotebinding aus dem OH2.5 und schiebt sie dann (vom OH3) in die MQTT. Das liesse sich ja sparen
Nachtrag: Ja...das funzt auch da. #froi
Re: HM-CC-RT-DN nach Mqtt
Verfasst: 21. Jan 2022 20:06
von udo1toni
Welchen Teil meinst Du? Grundsätzlich, wenn Du mqtt2 nutzt (auf OH2.5 stünde auch noch mqtt1 zur Verfügung, Unterschied: bei mqtt2 gibt es Things, bei mqtt1 nicht), sollte das 1:1 genauso auch in OH2.5 funktionieren.