Seite 1 von 2

MQTT publish Problem

Verfasst: 6. Mär 2024 16:19
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

Re: MQTT publish Problem

Verfasst: 6. Mär 2024 16:46
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.

Re: MQTT publish Problem

Verfasst: 6. Mär 2024 16:57
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

Re: MQTT publish Problem

Verfasst: 6. Mär 2024 17:04
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

Re: MQTT publish Problem

Verfasst: 6. Mär 2024 19:49
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.

Re: MQTT publish Problem

Verfasst: 7. Mär 2024 12:13
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.

Re: MQTT publish Problem

Verfasst: 8. Mär 2024 10:12
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 :(

Re: MQTT publish Problem

Verfasst: 8. Mär 2024 14:11
von peter-pan
...gerne. Dafür ist das Forum ja da.

Re: MQTT publish Problem

Verfasst: 8. Mär 2024 15:00
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...

Re: MQTT publish Problem

Verfasst: 10. Mär 2024 11:34
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?