MQTT publish Problem

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

alex_alexandroff22
Beiträge: 20
Registriert: 6. Dez 2020 05:44
Answers: 0
Wohnort: Kreis OF

MQTT publish Problem

Beitrag von alex_alexandroff22 »

Habe MQTT eingerichtet, welches auch läuft.
Mehrere Items publishen dort ihre Werte, was ebenfalls gut funktioniert.
Aber ein bestimmtes Item will einfach nicht und ich verstehe nicht warum, und zwar das unterste: STROMVERBRAUCHMQ.

Alle Werte der Items werden korrekt in der Channel Übersicht angezeigt und bekommen regelmäßig Updates, die ersten beiden werden gepublished,
aber der STROMVERBRAUCHMQ eben nicht.

Habe das MQTT Log bereits auf Debug, finde aber keinerlei Hinweis auf ein Problem.

Die anderen beiden dagegen ohne Probleme:
Successfully published value 249 to topic /strom/solarertrag
Successfully published value 1000 to topic /strom/strombezug
Liegt es evtl. daran, dass STROMVERBRAUCHMQ ein berechneter Wert ist und kein "state" eines Items?
Die entsprechende Rule ist weiter unten.


Code: Alles auswählen

UID: mqtt:topic:09bc80bc53:1MQTT
label: 1MQTT
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:09bc80bc53
channels:
   - id: STROMBEZUGMQ
    channelTypeUID: mqtt:number
    label: STROMBEZUGMQ
    description: ""
    configuration:
      commandTopic: /strom/strombezug
      retained: true
  - id: SOLARERTRAGMQ
    channelTypeUID: mqtt:number
    label: SOLARERTRAGMQ
    description: ""
    configuration:
      commandTopic: /strom/solarertrag
      retained: true
  - id: STROMVERBRAUCHMQ
    channelTypeUID: mqtt:number
    label: STROMVERBRAUCHMQ
    description: ""
    configuration:
      commandTopic: /strom/stromverbrauch
      retained: true

Code: Alles auswählen

rule "Strombezug MQTT"
when	
     Item powerfox_Aktueller_Leistungswert changed
then 
	MQTT_STROMBEZUGMQ.sendCommand (powerfox_Aktueller_Leistungswert.state)
end



rule "Solarertrag MQTT"
when	
     Item SolarLogMeter_PAC changed
then 
	MQTT_SOLARERTRAGMQ.sendCommand (SolarLogMeter_PAC.state)
end




rule "Stromverbrauch kumuliert MQTT"
when
    Item Stromverbrauchberechnet changed
then
    val calculatedValue = Stromverbrauchberechnet.state.toString
    MQTT_STROMVERBRAUCHMQ.postUpdate (calculatedValue)
end
OH4

Darkem
Beiträge: 7
Registriert: 4. Mär 2024 14:50
Answers: 0

Re: MQTT publish Problem

Beitrag von Darkem »

Moin,

ich denke, es ist eher ein Problem, dass du den Stromverbrauchberechnet.state in einen String wandelst und das dann in einen Number-Type über MQTT publishen willst.

alex_alexandroff22
Beiträge: 20
Registriert: 6. Dez 2020 05:44
Answers: 0
Wohnort: Kreis OF

Re: MQTT publish Problem

Beitrag von alex_alexandroff22 »

Habe die jetzt mal geändert auf "Number", aber gleiches Verhalten.
Das Item an sich wird problemlos von der Rule upgedatet, aber es erfolgt kein Publishing :(

Code: Alles auswählen

rule "Stromverbrauch kumuliert MQTT"
when
    Item Stromverbrauchberechnet changed
then
    val Number calculatedValue = Stromverbrauchberechnet.state as Number
    MQTT_STROMVERBRAUCHMQ.postUpdate(calculatedValue)
end
oder ich mach das komplett falsch
OH4

alex_alexandroff22
Beiträge: 20
Registriert: 6. Dez 2020 05:44
Answers: 0
Wohnort: Kreis OF

Re: MQTT publish Problem

Beitrag von alex_alexandroff22 »

...und SO hats jetzt funktioniert, auch wenn OH meint Validation ISsues gefunden zu haben (?)
Validation issues found in configuration model 'MQTTOH4.rules', using it anyway:

Code: Alles auswählen

rule "Stromverbrauch kumuliert MQTT"
when
    Item Stromverbrauchberechnet changed
then
    val Number calculatedValue = Stromverbrauchberechnet.state as Number
    MQTT_STROMVERBRAUCHMQ.sendCommand (Stromverbrauchberechnet.state)
end
OH4

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

Re: MQTT publish Problem

Beitrag von udo1toni »

Ein paar Anmerkungen:
  1. MQTT Topics haben gewöhnlich keinen führenden Slash. Es ist zwar möglich, das Topic so zu definieren, ist aber nicht gern gesehen. Grundsätzlich kannst Du das natürlich handhaben wie Du willst, es ist halt unüblich und kann im Zusammenspiel mit anderen Geräten auch zu Problemen führen, wenn diese z.B. den führenden Slash nicht unterstützen.
  2. Innerhalb openHAB ist die Empfehlung, CamelCaseSchreibweise zu verwenden, genau genommen sogar trailingCamelCase. Sinngemäß gilt das gleiche wie bei Punkt 1, Du kannst das natürlich machen wie Du willst, es ist nur unüblich. Dies gilt im Übrigen für Items und Channel IDs gleichermaßen.
  3. Der Unterschied zwischen .postUpdate() und .sendCommand() besteht darin, dass .sendCommand() grundsätzlich einen Befehl sendet, während .postUpdate() grundsätzlich den Status des Items aktualisiert. Ein Befehl wird vom openHAB Bus automatisch an verlinkte Channel weitergeleitet, die ihrerseits den Befehl nach extern weiter senden, wenn dies so konfiguriert ist (z.B. commandTopic in MQTT gesetzt).
    Ein Update des Status wird nicht an externe Teilnehmer weitergeleitet, nur das Item bekommt einen neuen Status.
  4. Die Klammern gehören zur Methode. Du kannst da ein Leerzeichen einfügen, weil es openHAB ohnehin schnurz ist :) aber die Zuordnung zur Methode wird so nicht deutlich.
  5. Wenn Du eine Rule auf changed triggerst und anschließend den Wert des triggernden Items innerhalb der Rule verwendest, solltest Du grundsätzlich newState verwenden. newState steht als implizite Variable zur Verfügung und ändert seinen Wert nicht - im Gegensatz zum .state eines Items, welches seinen Wert jederzeit ändern kann, auch unmittelbar nach dem Triggern einer Rule.
  6. Du benötigst hier gar keine Rule. Auch die MQTT_... Items kannst Du komplett weg lassen.
    Stattdessen verlinkst Du die mqtt-Channel direkt mit den Items, welche die Werte enthalten und setzt dabei das Profile des Links auf follow.
    Fortan wird openHAB bei jeder Aktualisierung des Status des Items diese automatisch als Befehl an den verlinkten Channel weiterleiten.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet

Benutzeravatar
peter-pan
Beiträge: 2573
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: MQTT publish Problem

Beitrag von peter-pan »

alex_alexandroff22 hat geschrieben: 6. Mär 2024 17:04 ...und SO hats jetzt funktioniert, auch wenn OH meint Validation ISsues gefunden zu haben (?)
..noch eine kleine Anmerkung zu dieser INFO(Validation ISsues) . Das liegt daran, dass du die Konstante "val Number calculatedValue = Stromverbrauchberechnet.state as Number" deklariert hast, aber dies dann nicht benutzt, da du den Wert direkt an "MQTT_STROMVERBRAUCHMQ" schickst.
Lass die Deklaration einfach weg, oder übergebe die Konstante an "MQTT_STROMVERBRAUCHMQ", dann kommt auch die Info nicht mehr.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.2 openhabian

alex_alexandroff22
Beiträge: 20
Registriert: 6. Dez 2020 05:44
Answers: 0
Wohnort: Kreis OF

Re: MQTT publish Problem

Beitrag von alex_alexandroff22 »

Ich bedanke mich herzlich bei Euch für die Tipps! Bin leider, selbst nach Jahren OH Nutzung, kein guter Rule-Programmierer geworden.
Meistens sind das zusammengebaute Schnipsel aus anderen Rules und aus Forenbeiträgen anderer Nutzer.

Ist für mich meistens ein Buch mit sieben Siegeln :(
OH4

Benutzeravatar
peter-pan
Beiträge: 2573
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: MQTT publish Problem

Beitrag von peter-pan »

...gerne. Dafür ist das Forum ja da.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.2 openhabian

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

Re: MQTT publish Problem

Beitrag von udo1toni »

alex_alexandroff22 hat geschrieben: 8. Mär 2024 10:12 Ich bedanke mich herzlich bei Euch für die Tipps! Bin leider, selbst nach Jahren OH Nutzung, kein guter Rule-Programmierer geworden.
Meistens sind das zusammengebaute Schnipsel aus anderen Rules und aus Forenbeiträgen anderer Nutzer.

Ist für mich meistens ein Buch mit sieben Siegeln :(
Wie gesagt, Punkt 6... Du benötigst hier überhaupt keine Rule...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet

alex_alexandroff22
Beiträge: 20
Registriert: 6. Dez 2020 05:44
Answers: 0
Wohnort: Kreis OF

Re: MQTT publish Problem

Beitrag von alex_alexandroff22 »

udo1toni hat geschrieben: 8. Mär 2024 15:00
alex_alexandroff22 hat geschrieben: 8. Mär 2024 10:12 Ich bedanke mich herzlich bei Euch für die Tipps! Bin leider, selbst nach Jahren OH Nutzung, kein guter Rule-Programmierer geworden.
Meistens sind das zusammengebaute Schnipsel aus anderen Rules und aus Forenbeiträgen anderer Nutzer.

Ist für mich meistens ein Buch mit sieben Siegeln :(
Wie gesagt, Punkt 6... Du benötigst hier überhaupt keine Rule...

Aber wie müsste ich die Items dann definieren, damit sie auch immer aktualisert werden?
OH4

Antworten