Mit MQTT Werte an OCHSNER OTE über eBus schreiben

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
blondi
Beiträge: 7
Registriert: 15. Apr 2022 10:34
Answers: 0

Mit MQTT Werte an OCHSNER OTE über eBus schreiben

Beitrag von blondi »

Ich habe eine Ochsner OTE Wärmepumpe, einen eBus V5 Adapter der per MQTT an mein openHAB angebunden ist. MQTT deshalb weil das eBus Binding für meine Ochsner Wärmepumpe keine Unterstützung bietet.
Mit Unterstützung im eBus Forum habe ich nun eine eBus Konfiguration gefunden die es mir erlaubt alle Werte die von der Wärmepumpe am eBus ausgegeben werden zu lesen und mit MQTT an openHAB weiterzugeben.
Was ich nun möchte ist einige dieser Werte von openHAB aus zu setzten, wie z.B. die Art des Heizbetriebes (Automatik, Sommer, ....) oder die Warmwasser Solltemperatur, um einige zu nennen.

Als Beispiel nehme ich die Warmwasser Solltemperatur:

thing:

Code: Alles auswählen

Type number : temperature_hotwater_setpoint     [ stateTopic="ebusd/24849/temperature/hotwater.setpoint", transformationPattern="JS:|(input).split(';')[6]"]
item:

Code: Alles auswählen

Number temperature_hotwater_setpoint    "Warmwassertemperatur Soll [%.1f °C]"               {channel="mqtt:topic:mosquitto:ebusd:temperature_hotwater_setpoint:Values"}
sitemap:

Code: Alles auswählen

Setpoint item=temperature_hotwater_setpoint step=1 minValue=10 maxValue=60
Im MQTT Explorer wird der vom eBus Adapter gelieferte Wert so angezeigt:

Code: Alles auswählen

hotwater.setpoint = 179;66;8d;°C;60.0;10.0;58.0
in der thing Definition sorgt der transformationPattern für das Auslesen des Temperaturwertes aus dem eBus Datagram.
Will ich nun diesen Wert verändern und zurückschreiben muss ich den veränderten Wert wieden an die siebte Stelle im String Array schreiben und dann per commandTopic in der thing Definition via MQTT auf den eBus schreiben.
Soweit die Theorie.

Mein erster Versuch

Code: Alles auswählen

Type number : temperature_hotwater_setpoint     [ stateTopic="ebusd/24849/temperature/hotwater.setpoint", commandTopic="ebusd/24849/temperature/hotwater.setpoint", transformationPattern="JS:|(input).split(';')[6]"]
hat folgendes ergeben: Setze ich den Wert auf z.B. 58 und schreibe Ihn zurück steht nach kurzer Zeit im Display der OTE -17.5, andere Werte ergeben andere unsinnige Temperaturen.

Weitere Versuche wollte ich mit transformationPatternOut durchführen, was mir aber nicht gelingt ist im gelesenen String den Wert zu ersetzen, alle meine Versuche sind gescheitert.

Wie muß der transformationPatternOut aussehen um dieses Ziel zu erreichen?

LG
Werner

Benutzeravatar
udo1toni
Beiträge: 14502
Registriert: 11. Apr 2018 18:05
Answers: 225
Wohnort: Darmstadt

Re: Mit MQTT Werte an OCHSNER OTE über eBus schreiben

Beitrag von udo1toni »

Hallo Werner,

der wichtigste Punkt ist hier: MQTT Kommunikation ist grundsätzlich gerichtet. Das heißt, ein Gerät sendet auf einem Topic und lauscht auf einem anderen Topic, z.B. bei Tasmota cmnd/%topic%/POWER und stat/%topic%/POWER um ein Relais ein- (ON) oder aus- (OFF) zuschalten und die entsprechende Rückmeldung zu erhalten.
Du musst also leider erst noch hgerausfinden, auf welchem Topic das eBus Gateway lauscht und Befehle an die Ochsner WP sendet.
Es könnte z.B. sein, dass man noch ein /set anhängen muss, aber da die Möglichkeiten quasi unendlich sind, aber es nur eine einzige korrekte Variante gibt, hilft raten da leider nicht. Es ist sehr unüblich, dass ein Gerät zum Senden und empfangen das selbe Topic verwendet.

Das Format der Payload: Es handelt sich hier ja um eine csv (mit Semikolon als Trennzeichen), aber Du willst exakt einen Wert setzen.
Oftmals werden auf Empfangsseite noch weitere Werte mitgeliefert (hier mindestens die Einheit in Klartext sowie vermutlich die beiden Grenzwerte, was aber die 179, die 66 und das 8d bedeuten...? )
So oder so ist transformationPatternOut hier vermutlich nicht zielführend. Stattdessen musst Du formatBeforePublish verwenden.
Hier kannst Du %s als Platzhalter für den gelieferten Wert einsetzen. Aber auch dazu musst Du genau wissen, in welchem Format der Wert geschrieben werden muss.
openHAB4.2.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.7, LXC), mit openHABian eingerichtet

Benutzeravatar
udo1toni
Beiträge: 14502
Registriert: 11. Apr 2018 18:05
Answers: 225
Wohnort: Darmstadt

Re: Mit MQTT Werte an OCHSNER OTE über eBus schreiben

Beitrag von udo1toni »

Laut ebusd Wiki ist tatsächlich /set das passende Subtopic, also

Code: Alles auswählen

Type number : temperature_hotwater_setpoint     [
                stateTopic="ebusd/24849/temperature/hotwater.setpoint", 
              commandTopic="ebusd/24849/temperature/hotwater.setpoint/set", 
     transformationPattern="JS:|(input).split(';')[6]"
     ]
(Umbruch hier nur wegen der besseren Lesbarkeit ohne Scrollen, aber man kann es tatsächlich auch so in der Textkonfiguration angeben)

Mein erster Versuch wäre, keinerlei Format vorzugeben, sondern lediglich den nackten Zahlenwert zu senden (aber halt an das richtige Topic).
openHAB4.2.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.7, LXC), mit openHABian eingerichtet

blondi
Beiträge: 7
Registriert: 15. Apr 2022 10:34
Answers: 0

Re: Mit MQTT Werte an OCHSNER OTE über eBus schreiben

Beitrag von blondi »

Danke für die Tips. Funktionieren aber leider nicht.

Code: Alles auswählen

Type number : temperature_hotwater_setpoint     [ stateTopic="ebusd/24849/temperature/hotwater.setpoint", commandTopic="ebusd/24849/temperature/hotwater.setpoint/set", transformationPattern="JS:|(input).split(';')[6]"]
hat als Ergenbiss im MQTT Eplorer

Code: Alles auswählen

hotwater.setpoint = 179;66;8d;°C;60.0;10.0;59.0
set = 60
wenn ich per Openhab den Wert von 59 auf 60 stelle.Im Ochsner Display ändert sich auch nichts.

Benutzeravatar
udo1toni
Beiträge: 14502
Registriert: 11. Apr 2018 18:05
Answers: 225
Wohnort: Darmstadt

Re: Mit MQTT Werte an OCHSNER OTE über eBus schreiben

Beitrag von udo1toni »

Dann muss der Wert anders gesetzt werden, im Zweifel wirst Du aber im eBus Forum da mehr Chancen haben, Erhellendes zu finden.
openHAB4.2.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.7, LXC), mit openHABian eingerichtet

blondi
Beiträge: 7
Registriert: 15. Apr 2022 10:34
Answers: 0

Re: Mit MQTT Werte an OCHSNER OTE über eBus schreiben

Beitrag von blondi »

Ich bin nun einen Schritt weiter in meinem Bestreben Werte in meine Ochner OTE via eBusd per MQTT zu schreiben.
Ich kann mit

Code: Alles auswählen

ebusctl write -c 22420 room/temperature/set 24.0
auf der ebusd Konsole den Wert setzen und sehe Ihn dann im MQTT Explorer

Code: Alles auswählen

ebusd 
  global
    22420
      room
        temperature = 1;0;0d;°C;50.0;0.0;24.0
          set = 24.0
und nach kurzer Zeit auf dem OTE Display.

Was ich noch nicht geschafft habe ist diesen Wert per MQTT zu schreiben.
Hier meine MQTT Konfig:

mqtt.things

Code: Alles auswählen

Bridge mqtt:broker:mosquitto "Mosquitto MQTT Broker" @ "MQTT" [ 
    host="localhost", 
    secure=false, 
    port=1883
]
{
    Thing topic ebusd
    {
        Type number : temperature_room [ stateTopic="ebusd/22420/room/temperature", commandTopic="ebusd/22420/room/temperature/set", transformationPattern="JS:|(input).split(';')[6]"]
     }
 }
Mit dieser Konfig kann ich zwar Werte schreiben, sehe im MQTT Explorer auch die neuen Werte im richtigen (write) topic set aber nicht im (read) topic temperature (Wert von 24.0 auf 24.5 geändert)

Code: Alles auswählen

ebusd 
  global
    22420
      room
        temperature = 1;0;0d;°C;50.0;0.0;24.0
          set = 24.5
Versuche mit

Code: Alles auswählen

transformationPatternOut="JS:|(input).toString()"
oder ähnlichem (Versuch value in string umzuwandeln) haben nichts gebracht.
Im ebusd log (debug enabled) habe ich auch nicht gesehen dass irgend ein Kommando per MQTT ankommt. Wenn ich per ebusctl write arbeite sehe ich

Code: Alles auswählen

[main debug] >>> write -c 22420 room/temperature/set 24.0
im log file.

Ich weiß dass hier eigentlich nur openhab supported wird, aber vielleicht hat wer eine Idee oder hat selber eine Ochsner OTE und hat das MQTT publish Problem gelöst.

Danke und LG
Werner

Benutzeravatar
udo1toni
Beiträge: 14502
Registriert: 11. Apr 2018 18:05
Answers: 225
Wohnort: Darmstadt

Re: Mit MQTT Werte an OCHSNER OTE über eBus schreiben

Beitrag von udo1toni »

Gehe mal anders an das Problem heran:
Im mqtt Explorer kannst Du ja ebenfalls Topics publishen, was geschieht denn, wenn Du an ebusd/global/22420/room/temperature/set einfach den RAW Wert 24.5 sendest?
Und lautet das Topic nun ebusd/global/22420/room/temperature oder ebusd/22420/room/temperature (also mit oder ohne global)?
openHAB4.2.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.7, LXC), mit openHABian eingerichtet

blondi
Beiträge: 7
Registriert: 15. Apr 2022 10:34
Answers: 0

Re: Mit MQTT Werte an OCHSNER OTE über eBus schreiben

Beitrag von blondi »

Da habe ich einen typo, richtig ist ohne global:

ebusd/22420/room/temperature/set

Ich habe in MQTT Explorer also den RAW Wert 30.0 an dieses Topic geschickt, am ebusd im log folgenden Eintrag:

Code: Alles auswählen

2024-08-07 15:35:05.525 [mqtt error] received unmatchable topic ebusd/22420/room/temperature/set
daraufhin zum Vergleich mit ebusctl:

Code: Alles auswählen

2024-08-07 15:35:29.447 [update notice] sent write 22420 room/temperature/set QQ=31: 30.0
Was läuft da falsch?

Antworten