Zahlenwert an ein MQTT Topic senden

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Benutzeravatar
PeterA
Beiträge: 1106
Registriert: 8. Feb 2019 12:12
Answers: 13

Zahlenwert an ein MQTT Topic senden

Beitrag von PeterA »

Hallo zusammen,

Mein Victron Laderegler erlaubt den min SoC des Akku vom Nutzer anpassen zu lassen.

Hier ein Snippet aus der Mqtt Doku:

Code: Alles auswählen

/Settings/CGwacs/BatteryLife/MinimumSocLimit      <- User setting: Minimum Discharge SOC
Dieses Topic hab ich schon in OpenHab integriert:

Thing: (Auszug)

Code: Alles auswählen

Type number : MinimumSocLimit          "Minimaler SoC"                     [ stateTopic="N/c0619ab2dc41/settings/0/Settings/CGwacs/BatteryLife/MinimumSocLimit", transformationPattern="JSONPATH:$.value"]
Item:

Code: Alles auswählen

Number    MinimumSocLimit                   "Minimaler SoC [%.0f %%]"                          <batterylevel>        (Victron)                        {channel="mqtt:topic:VictronBroker:victron:MinimumSocLimit"}
Wenn ich den min SoC über das Victron Portal verändere kommt das auch in OpenHab an.

Nun möchte ich via Setpoint Widget den Wert über die Sitemap von OpenHab verändern:

Sitemap:

Code: Alles auswählen

Setpoint item=MinimumSocLimit          icon="batterylevel" label="Minimaler SoC [%.0f %%]" minValue=0 maxValue=100 step=5
So sieht der JSON dieses Topics über den Mqtt Explorer aus:

Code: Alles auswählen

{
  "max": 100,
  "min": 0,
  "value": 15
}
Wie kann ich denn nun einen veränderten Wert an dieses Topic senden ?
(Hab das noch nie gebraucht und mir fehlt der passende Code im Thing)

Gruß Peter
- OpenHab 2.4
#PWRUP

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

Re: Zahlenwert an ein MQTT Topic senden

Beitrag von udo1toni »

Mindestens musst Du noch das passende commandTopic mit eintragen. Weiterhin musst Du schauen, wie der Wert an das commandTopic gesendet werden muss, also z.B. in Form eines JSON {"value" : 25}, die Formatierung läuft dann über den Parameter formatBeforePublish, so:

Code: Alles auswählen

[... formatBeforePublish="{\"value\" : %s}"]
%s wird dann mit dem aktuell vom Item gesendeten Befehl substituiert.
Leider muss man die Anführungszeichen escapen, was bei größeren JSON Konstrukten irgendwann auch fehleranfällig werden kann. Ich probiere dann gerne die Payloa direkt im mqtt Explorer aus, kopiere sie in einern Editor und lasse alle " durch \" ersetzen. Das Ergebnis füge ich dann in openHAB ein und sende von dort, wobei ich das Topic im mqtt Explorer im Auge behalte :)

Kann aber auch sein, dass das commandTopic gar keine weitere Formatierung braucht, das kann Dir letztlich nur die Anleitung verraten...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
PeterA
Beiträge: 1106
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: Zahlenwert an ein MQTT Topic senden

Beitrag von PeterA »

Hallo Udo,

vielen Dank!
So sieht das Topic nun aus und funktioniert auch in sofern das "value" auch geändert wird.
Ist auch im Mqtt Explorer zu sehen.
Leider schreibt der Victron nach einem kurzem Augenblick das wieder zurück auf den vorherigen Wert.
Da muss ich noch mal schauen woran das liegt.

Code: Alles auswählen

Type number : MinimumSocLimit          "Minimaler SoC"                     [ stateTopic="N/c0619ab2dc41/settings/0/Settings/CGwacs/BatteryLife/MinimumSocLimit", transformationPattern="JSONPATH:$.value", commandTopic="N/c0619ab2dc41/settings/0/Settings/CGwacs/BatteryLife/MinimumSocLimit", formatBeforePublish="{\"value\": %s}"]
- OpenHab 2.4
#PWRUP

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

Re: Zahlenwert an ein MQTT Topic senden

Beitrag von udo1toni »

stateTopic und commandTopic sind niemals(!) identisch. Per Definition ist die Kommunikation in MQTT Topics immer gerichtet, also entweder Empfang, oder Senden.
Natürlich kann ein Device das eigene Publishing zurück empfangen, dann aber nur, um sicherzustellen, dass der Broker die Daten auch korrekt erhalten hat. Eigentlich reicht es dafür aber, qos=2 zu setzen, das Protokoll hat das schon eingebaut...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
PeterA
Beiträge: 1106
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: Zahlenwert an ein MQTT Topic senden

Beitrag von PeterA »

hm...

Da müsste ich das "stateTopic" im Thing entfernen ?
- OpenHab 2.4
#PWRUP

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

Re: Zahlenwert an ein MQTT Topic senden

Beitrag von udo1toni »

Nein, Du musst das korrekte commandTopic setzen, welches sich immer vom stateTopic unterscheidet. Es geht dabei nicht darum, dass Du es auf openHAB-Seite nicht identisch setzen könntest, sondern dass das Device hier unterschiedliche Topics verlangt. Du musst also herausfinden, wie das korrekte commandTopic lautet.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
PeterA
Beiträge: 1106
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: Zahlenwert an ein MQTT Topic senden

Beitrag von PeterA »

Dann muss ich da noch mal schauen.

Wie im Eingangspost geschrieben gibt es dafür eigentlich nur ein Topic:

Code: Alles auswählen

/Settings/CGwacs/BatteryLife/MinimumSocLimit      <- User setting: Minimum Discharge SOC
https://github.com/victronenergy/venus/ ... s#settings
- OpenHab 2.4
#PWRUP

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

Re: Zahlenwert an ein MQTT Topic senden

Beitrag von udo1toni »

Dann hat da ein Entwickler nicht verstanden, wie MQTT funktioniert (oder alternativ setzt er sich über Richtlinien hinweg).
Und in der Folge funktioniert es halt nicht :) oder nicht richtig - dem Victron ist es ja offensichtlich egal, dass Du einen anderen Wert sendest.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
PeterA
Beiträge: 1106
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: Zahlenwert an ein MQTT Topic senden

Beitrag von PeterA »

Über die Konsole funktioniert das:

Code: Alles auswählen

dbus -y com.victronenergy.settings /Settings/CGwacs/BatteryLife/MinimumSocLimit SetValue 10
- OpenHab 2.4
#PWRUP

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

Re: Zahlenwert an ein MQTT Topic senden

Beitrag von udo1toni »

Ja, das hat ja aber nichts mit mqtt zu tun.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten