Items aus openhab nach MQTT

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

goerdi
Beiträge: 110
Registriert: 21. Dez 2019 23:44

Items aus openhab nach MQTT

Beitrag von goerdi »

Hallo !

Gibts eigentlich eine Möglichkeit Items welche eigentlich nur in Openhab existieren in MQTT abzubilden ?
Ich hab in Openhab ein paar Items welche ich dort quasi "erzeuge" (sprich ich rechne mir z.B. den Wirkungsgrad eines Erzeugers aus.
In Openhab existiert dazu eine Items welches auch korrekt befuellt und angezeigt wird.
Wie kann ich nun erreichen dass dies auch in MQTT landet ?
(passendes thing erstellen reicht anscheinend nicht aus da schon probiert :-)

Gruss Gerd

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

Re: Items aus openhab nach MQTT

Beitrag von PeterA »

Hi,

Du musst das Item noch mit einem Channel Verlinken.
Dann landet das auch beim Broker.

Hier ein Beispiel:
Definition thing:
Es gibt immer ein State und Command Topic

Code: Alles auswählen

Type number : inv1_limit_relative		"I1 limit relative"		[stateTopic="solar/116183132641/status/limit_relative", commandTopic="solar/116183132641/cmd/limit_persistent_relative", unit="%"]
Type number : inv1_limit_absolute		"I1 limit absolute"		[stateTopic="solar/116183132641/status/limit_absolute", commandTopic="solar/116183132641/cmd/limit_persistent_absolute", unit="W"]
items:

Code: Alles auswählen

Number:Dimensionless    OpenDTU1_inv1_limit_relative      "Limit (rel)"                                  <qualityofservice>    (OpenDTU)                 {channel="mqtt:topic:3448a27a:OpenDTU1:inv1_limit_relative"}
Number                  OpenDTU1_inv1_limit_absolute      "Limit (abs)"                                  <qualityofservice>    (OpenDTU)                 {channel="mqtt:topic:3448a27a:OpenDTU1:inv1_limit_absolute"}
Ich hoffe das Hilft weiter.

Gruß
Peter
- OpenHab 2.4
#PWRUP

goerdi
Beiträge: 110
Registriert: 21. Dez 2019 23:44

Re: Items aus openhab nach MQTT

Beitrag von goerdi »

Hi !

das habe ich ja..
thing

Code: Alles auswählen

       Type number : solar_eff  "WR Wirkungsgrad" [stateTopic="solarview/WR1/EFF", commandTopic="solarview/WR1/EFF"] 
item

Code: Alles auswählen

Number Solar_Efficiency   "Wirkungsgrad [ %.2f %%]" <solarplant>              { channel="mqtt:topic:home:solarview:solar_eff" }
Gruss Gerd

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

Re: Items aus openhab nach MQTT

Beitrag von PeterA »

Wenn ich mich richtig Erinnere wird nur was auf den Broker published wenn das Item einen "Command" bekommt.

https://community.openhab.org/t/solved- ... t/135634/3

Oder So:

viewtopic.php?t=4080

Und So:

viewtopic.php?t=6928
- OpenHab 2.4
#PWRUP

goerdi
Beiträge: 110
Registriert: 21. Dez 2019 23:44

Re: Items aus openhab nach MQTT

Beitrag von goerdi »

Hi !

den 2ten und 3ten hab ich probiert irgendwie steigt da meine rule immer aus...

Gruss Gerd

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

Re: Items aus openhab nach MQTT

Beitrag von udo1toni »

Zeig doch mal Deine Rule konkret. Bitte die Code-Ansicht auswählen und den Text hier (als Code markiert) posten.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

goerdi
Beiträge: 110
Registriert: 21. Dez 2019 23:44

Re: Items aus openhab nach MQTT

Beitrag von goerdi »

Hi !

Code: Alles auswählen

rule "calc efficiency"
when
    Item Solar_Power_dc changed or
    Item Solar_Power_ac changed
then

sendCommand(triggeringItem.state.toString)
Solar_Efficiency.postUpdate(Solar_Power_ac.state as Number/Solar_Power_dc.state as Number * 100)

val mqttActions = getActions("mqtt", "mqtt:broker:home")
mqttActions.publishMQTT("solarview/WR1/EFF", Solar_Efficiency.state)

end
Also die ersten zwei Zeilen das geht ja sprich ich krieg den Wirkungsgrad angezeigt...

Gruss Gerd

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

Re: Items aus openhab nach MQTT

Beitrag von udo1toni »

Also das hier:

Code: Alles auswählen

sendCommand(triggeringItem.state.toString)
kann schon mal nicht funktionieren, weil je nachdem, wie man des dreht, entweder der Itemname fehlt, oder aber es wird versucht, den Wert des triggernden Items als Item Name zu verwenden (dann fehlt immer noch der zu sendende Befehl - außerdem existiert das implizite Objekt triggeringItem nicht in dem Kontext, es sei denn, Du arbeitest mit openHAB2.x

Code: Alles auswählen

rule "calc efficiency"
when
    Item Solar_Power_dc changed or
    Item Solar_Power_ac changed
then
    Solar_Efficiency.postUpdate((Solar_Power_ac.state as Number)/(Solar_Power_dc.state as Number) * 100)

    val mqttActions = getActions("mqtt", "mqtt:broker:home")
    mqttActions.publishMQTT("solarview/WR1/EFF", Solar_Efficiency.state)
end
Der Ausdruck Item.state as Number muss geklammert werden, damit die Berechnung funktioniert.

Besser:

Code: Alles auswählen

rule "calc efficiency"
when
    Item Solar_Power_dc changed or
    Item Solar_Power_ac changed
then
    var nPac = 0
    var nPdc = 0
    if(Solar_Power_ac.state instanceof Number)
        nPac = Solar_Power_ac.state as Number
    if(Solar_Power_dc.state instanceof Number)
        nPdc = Solar_Power_dc.state as Number
    var nEff = 0
    if(nPdc > 0)
        nEff = nPac / nPdc * 100

    Solar_Efficiency.sendCommand(nEff)
end
Das Item kann direkt den Wert an mqtt senden, warum mit einer Action lösen, wenn es auch über einen Channel geht?

Code: Alles auswählen

Number Solar_Efficiency (verlinkt mit einem mqtt number Channel, der als commandTopic solarview/WR1/EFF konfiguriert hat.)
Der Weg über lokale Variablen schützt vor Fehlermeldungen, weil z.B. eines der Items nicht initialisiert ist oder weil der Divisor vielleicht 0 ist.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

goerdi
Beiträge: 110
Registriert: 21. Dez 2019 23:44

Re: Items aus openhab nach MQTT

Beitrag von goerdi »

Hi !

Code: Alles auswählen

rule "calc efficiency 2 "
when
    Item Solar_Power_dc changed or
    Item Solar_Power_ac changed
then
    var nPac = 0
    var nPdc = 0
    if(Solar_Power_ac.state instanceof Number)
        nPac = Solar_Power_ac.state as Number
    if(Solar_Power_dc.state instanceof Number)
        nPdc = Solar_Power_dc.state as Number
    var nEff = 0
    if(nPdc > 0)
        nEff = nPac / nPdc * 100

    Solar_Efficiency.sendCommand(nEff)
end
Ergebnis
2023-06-03 11:35:18.669 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'test-1' failed: An error occurred during the script execution: Could not invoke method: org.eclipse.xtext.xbase.lib.IntegerExtensions.operator_greaterThan(int,int) on instance: null in test

Gruss Gerd

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

Re: Items aus openhab nach MQTT

Beitrag von udo1toni »

Und die Rule ist in einer rules-Datei angelegt?
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten