Seite 1 von 2
Items aus openhab nach MQTT
Verfasst: 2. Jun 2023 07:42
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
Re: Items aus openhab nach MQTT
Verfasst: 2. Jun 2023 08:49
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
Re: Items aus openhab nach MQTT
Verfasst: 2. Jun 2023 09:40
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
Re: Items aus openhab nach MQTT
Verfasst: 2. Jun 2023 09:45
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
Re: Items aus openhab nach MQTT
Verfasst: 2. Jun 2023 11:16
von goerdi
Hi !
den 2ten und 3ten hab ich probiert irgendwie steigt da meine rule immer aus...
Gruss Gerd
Re: Items aus openhab nach MQTT
Verfasst: 2. Jun 2023 16:57
von udo1toni
Zeig doch mal Deine Rule konkret. Bitte die Code-Ansicht auswählen und den Text hier (als Code markiert) posten.
Re: Items aus openhab nach MQTT
Verfasst: 2. Jun 2023 23:04
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
Re: Items aus openhab nach MQTT
Verfasst: 3. Jun 2023 02:03
von udo1toni
Also das hier:
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.
Re: Items aus openhab nach MQTT
Verfasst: 3. Jun 2023 11:38
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
Re: Items aus openhab nach MQTT
Verfasst: 3. Jun 2023 13:43
von udo1toni
Und die Rule ist in einer rules-Datei angelegt?