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.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
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:
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
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
Ich hab ein paar kleine "Umbauten" vorgenommen, weil ich ungeduldig bin "received command" wollte bei mir nicht funktionieren und stattdessen habe ich "changed" genommen.
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
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?!
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.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
@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
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.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet