Seite 1 von 1

Rule Werte kopieren

Verfasst: 14. Sep 2019 15:44
von alfiner
Hi ich möchte den Wert eine Wetter Items in ein Modbus Item kopieren und dann an meine SPS senden damit ich den Wetterwert dort auswerten kann.
Ich dachte mir mit einer Rule sollte es gehen aber ich weis nicht wie ich es programmieren muss.

Wetter Item:
Number Temperature "Temperature [%.1f °C]" {weather="locationId=home, type=temperature, property=current"}

Modbus Item:
Number Temperature1
"Temperature1 [%.1f °C]" <temperature1>
{ channel="modbus:data:CX5010:holding:Temperature1:number" }

Modbus Thing:
Thing data Temperature1 [
readStart="32778", readValueType="uint16",
writeStart="32778", writeValueType="uint16", writeType="holding" ]

Rule Test:
rule "Temperatur"
when
Item ModbusKomm1 changed from OFF to ON
then
sendCommand (Temperature1, 38)
end


Mit dieser Rule kann ich den Wert 38 übertragen aber ich weis nicht wie ich das Wetter Item Temperature angeben muss anstelle der 38. Der Wert kann auch zyklisch gesendet werden, das Item ModbusKomm1 ist nur zum testen da.

Muss ich eventuell das Datenformat ändern damit es funktioniert? Ich weis aber nicht wie und in welches Format.

Wenn ich noch mehr angeben muss bitte Bescheid geben, ich hoffe jemand kann mir da helfen, danke.

Gruss

Re: Rule Werte kopieren

Verfasst: 14. Sep 2019 19:53
von peter-pan
Ich kenne mich da zwar nicht so aus, aber wenn du den Wert übertragen willst, dann solltest du den Channel van deinem Item Temperature1 weglassen, weil dort immer wieder der Wert von deinem Channel ankommt !!?? oder

Re: Rule Werte kopieren

Verfasst: 14. Sep 2019 23:07
von udo1toni
Dazu braucht es - eine aktuelle Version von openHAB vorausgesetzt (mindestens testing, also OH2.5M3) - keine Rule. Es reicht in diesem Fall ein Profil (follow)
Items:

Code: Alles auswählen

Number Temperature "Temperature [%.1f °C]" {weather="locationId=home, type=temperature, property=current", channel="modbus:data:CX5010:holding:Temperature1:number" [profile="follow"]}
Der Channel bekommt bei jedem Update vom weather Binding automatisch den neuen Wert.

Falls das nicht funktioniert, weil z.B. die OH-Version nicht passt oder der Datentyp nicht passt, geht es einfach per Rule:

Code: Alles auswählen

Number Temperature "Temperature [%.1f °C]" {weather="locationId=home, type=temperature, property=current"}
Number Temperature1 "Temperature1 [%.1f °C]" <temperature1> { channel="modbus:data:CX5010:holding:Temperature1:number" }
Rule:

Code: Alles auswählen

rule "update modbus temperature"
when
    Item Temperature changed
then
    if(Temperature.state instanceof Number) {
        Temperature1.sendCommand(Temperature.state as Number)
    }
end
Natürlich ist es nicht sinnvoll, das Item auch zu verwenden, um Daten von Modbus aus zu schicken, es sollte also ausschließlich in Richtung Modbus konfiguriert sein, nicht bidirektional.

Re: Rule Werte kopieren

Verfasst: 15. Sep 2019 13:35
von alfiner
Danke, follow funktioniert. Hm das wusste ich bis jetzt nicht.

Die Temperatur hat 2 Kommastellen, die beim übertragen via Modbus (uint) abgeschnitten werden. Kann ich vor dem übertragen die Temperatur mit 10 multiplizieren damit ich in der sps die Temperatur in 1/10 °C habe oder braucht es da eine rule?

Re: Rule Werte kopieren

Verfasst: 15. Sep 2019 15:15
von udo1toni
Das geht per Rule.

Code: Alles auswählen

rule "update modbus temperature"
when
    Item Temperature changed
then
    if(Temperature.state instanceof Number) {
        Temperature1.sendCommand((Temperature.state as Number)*10)
    }
end
also bis auf den Faktor identisch mit der Variante von oben.

Re: Rule Werte kopieren

Verfasst: 15. Sep 2019 17:28
von alfiner
Danke werde ich testen. Eventuell kann ich es auch als float (32bit) via Modbus übertragen.

Die follow Funktion finde ich cooler als mit einer rule aber mal sehen , muss das heute oder morgen testen.

Gruss