Seite 1 von 1

Item wird in rule nicht bearbeitet

Verfasst: 11. Okt 2019 14:07
von violine21
Hallo,
ich bin Neueinsteiger in OpenHAB. Habe bisher nur mein System eingerichtet und möchte jetzt Regeln erstellen.
Von einer Homematic-Wetterstation bekomme ich sämtliche Messwerte.
Um meine elektrischen Dachluken bei Schlechtwetter zu schliessen, habe ich versucht, eine Regel zu schreiben.
Dazu habe ich mir ein virtuelles Item angelegt:

Code: Alles auswählen

Switch                 virtual_schlechtwetter      "Schlechtwetter"
Die Homematic-Items sind so konfiguriert:

Code: Alles auswählen

Switch                 Wetterstation1RAINING                    "Raining"                      {channel="homematic:HmIP-SWO-PR:3014F711A0001F98A9AA0B0E:00185A498C455E:1#RAINING"}
Number:Speed           Wetterstation1WINDSPEED                  "Wind speed"                   {channel="homematic:HmIP-SWO-PR:3014F711A0001F98A9AA0B0E:00185A498C455E:1#WIND_SPEED"}
Number:Temperature     Wetterstation1ACTUALTEMPERATURE          "Actual temperature"           {channel="homematic:HmIP-SWO-PR:3014F711A0001F98A9AA0B0E:00185A498C455E:1#ACTUAL_TEMPERATURE"}
Die Rule dazu sieht so aus:

Code: Alles auswählen

rule "schlechtwetter"
when
    Item Wetterstation1RAINING changed or
    Item Wetterstation1ACTUALTEMPERATURE changed or
    Item Wetterstation1WINDSPEED changed
then
    if(Wetterstation1RAINING == "ON" || Wetterstation1ACTUALTEMPERATURE.state <= 4.00 || Wetterstation1WINDSPEED.state >= 2.00) {
        virtual_schlechtwetter.sendCommand(ON)
    } else {
        virtual_schlechtwetter.sendCommand(OFF)
    }
end
Zur Kontrolle habe ich eine Sitemap entworfen:

Code: Alles auswählen

sitemap Homematic label="Homematic" {
    Frame label="Wetterstation" {
        Text     item=Wetterstation1ACTUALTEMPERATURE label="Aussentemperatur" icon="temperature"
        Text     item=Wetterstation1WINDSPEED label="Windgeschwindigkeit" icon="wind"
        Switch   item=Wetterstation1RAINING label="Regen" icon="rain" mappings=[OFF="trocken", ON="Regen"]
        Switch   item=virtual_schlechtwetter label="Schlechtwetter" icon="wetter" mappings=[OFF="nein", ON="ja"]
    }

}
Die aktuellen Werte sind:
kein Regen
Temperatur: 13.30 °C
Windgeschwindigkeit: 19.00 km/h

Trotzdem das die Windgeschwindigkeit > 2.00 ist, zeigt das Item "Schlechtwetter" in der Sitemap Off (Nein) an.

Kann mir da bitte jemand zeigen, was ich falsch mache?
Besten Dank!

Re: Item wird in rule nicht bearbeitet

Verfasst: 11. Okt 2019 18:21
von eiGelbGeek
Was sagt der Log? Tauchen dort Fehlermeldungen auf ?

Der erste Wert in der if Abfrage ist falsch ;-)

Falsch

Code: Alles auswählen

Wetterstation1RAINING == "ON"
Richtig

Code: Alles auswählen

Wetterstation1RAINING.state == ON
Hier komplett :-)

Code: Alles auswählen

rule "schlechtwetter"
when
    Item Wetterstation1RAINING changed or
    Item Wetterstation1ACTUALTEMPERATURE changed or
    Item Wetterstation1WINDSPEED changed
then
    if(Wetterstation1RAINING.state == ON || Wetterstation1ACTUALTEMPERATURE.state <= 4 || Wetterstation1WINDSPEED.state >= 2) {
        virtual_schlechtwetter.sendCommand(ON)
    } else {
        virtual_schlechtwetter.sendCommand(OFF)
    }
end

Re: Item wird in rule nicht bearbeitet

Verfasst: 11. Okt 2019 19:09
von violine21
Hallo,

vielen Dank! Ich habe im Log folgenden Eintrag von gerade eben:

Code: Alles auswählen

2019-10-11 18:57:01.108 [vent.ItemStateChangedEvent] - Wetterstation1WINDSPEED changed from 7.50 km/h to 6.80 km/h
2019-10-11 18:57:01.117 [ome.event.ItemCommandEvent] - Item 'virtual_schlechtwetter' received command OFF
Es werden regelmäßig Änderungen der Windgeschwindigkeit registriert aber keine Hinweise auf irgendwelche Programmfehler.

Ich habe dann Deinen Hinweis umgesetzt und die Anführungsstriche entfernt und das .state hinzugefügt. Leider ohne Erfolg:

Code: Alles auswählen

2019-10-11 19:04:22.818 [vent.ItemStateChangedEvent] - Wetterstation1WINDSPEED changed from 5.40 km/h to 6.40 km/h
2019-10-11 19:04:22.990 [ome.event.ItemCommandEvent] - Item 'virtual_schlechtwetter' received command OFF
Ich stelle mir die Frage, ob das evtl. mit den mitgelieferten Einheiten zusammenhängt? Ich vergleiche ja im Prinzip auf eine Zahl, ist das in diesem Fall nicht richtig?

Viele Grüße

Re: Item wird in rule nicht bearbeitet

Verfasst: 11. Okt 2019 23:22
von udo1toni
Das Problem heißt UoM, Units of Measurement. Wie Du siehst, kommen die Einheiten mit, Du vergleichst aber mit einer Zahl. Es gibt zwei Möglichkeiten, das Problem zu umschiffen. Möglichkeit 1, Du verpasst dem Vergleichswert eine Einheit:

Code: Alles auswählen

if(Wetterstation1RAINING.state == ON || Wetterstation1ACTUALTEMPERATURE.state <= 4|"°C" || Wetterstation1WINDSPEED.state >= 2|"km/h") {
Der große Vorteil ist hier, dass Du z.B. auch 32|"°F" schreiben kannst, openHAB rechnet die Werte passend um. Natürlich nur, solange die Einheit bekannt ist und zur gegebenen Einheit passt, z.B. könnte die Windgeschwindigkeit auch in m/s angegeben werden, oder in Knoten, aber nicht in Kubikmeter.

Möglichkeit 2, Du entfernst die Einheit:

Code: Alles auswählen

if(Wetterstation1RAINING.state == ON || (Wetterstation1ACTUALTEMPERATURE.state as Number).floatValue <= 4 || (Wetterstation1WINDSPEED.state as Number).floatValue >= 2) {
Vorteil hier ist, dass Du nun eine echte Zahl hast und Dir keinerlei Gedanken um Einheiten machen musst. Genaugenommen müsste es übrigens

Code: Alles auswählen

(Wetterstation1ACTUALTEMPERATURE.state as QuantityType<Number>).floatValue 
heißen, die Kurzversion geht aber auch.

Re: Item wird in rule nicht bearbeitet

Verfasst: 12. Okt 2019 17:32
von violine21
Hallo Udo,

genau das war die Lösung des Problems. Ich habe Variante 2 genommen, da ich das für mich als die bessere Vorgehensweise sehe.

Vielen Dank euch beiden!

Viele Grüße

Re: Item wird in rule nicht bearbeitet

Verfasst: 12. Okt 2019 18:04
von eiGelbGeek
Gutes Beispiel warum Log Files wichtig sind um gezielt zu helfen :-)

Schön das es nun funktioniert :-)

Grüße

Re: Item wird in rule nicht bearbeitet

Verfasst: 12. Okt 2019 23:37
von violine21
Hallo,
ich würde gern noch darstellen, welches Ereignis für Schlechtwetter verantwortlich ist.
Dazu habe ich ein weiteres Item angelegt:

Code: Alles auswählen

String                 virtual_wetterereignis      "Wetterereignis"
Die Rule habe ich wie folgt verändert:

Code: Alles auswählen

rule "schlechtwetter_ein"
when
    Item Wetterstation1RAINING changed or
    Item Wetterstation1ACTUALTEMPERATURE changed or
    Item Wetterstation1WINDSPEED changed
then
    if (Wetterstation1RAINING.state == ON)
        {virtual_schlechtwetter.sendCommand(ON)
        virtual_wetterereignis.postUpdate("Regen")}

    if ((Wetterstation1ACTUALTEMPERATURE.state as Number).floatValue <= 4)
        {virtual_schlechtwetter.sendCommand(ON)
        virtual_wetterereignis.postUpdate("Temperatur")}

    if ((Wetterstation1WINDSPEED.state as Number).floatValue >= 2)
        {virtual_schlechtwetter.sendCommand(ON)
        virtual_wetterereignis.postUpdate("Wind")}    

end
In die Sitemap habe ich noch dies eingefügt:

Code: Alles auswählen

Text     item=virtual_wetterereignis label="Auslöser"
Obwohl im log die korrekte Zuweisung angezeigt wird (dem Item hatte ich zuvor den Wert "ok" zugewiesen)

Code: Alles auswählen

2019-10-12 23:27:43.327 [vent.ItemStateChangedEvent] - Wetterstation1WINDSPEED changed from 4.30 km/h to 6.00 km/h
2019-10-12 23:27:43.736 [ome.event.ItemCommandEvent] - Item 'virtual_schlechtwetter' received command ON
2019-10-12 23:27:43.746 [vent.ItemStateChangedEvent] - virtual_schlechtwetter changed from OFF to ON
2019-10-12 23:27:43.749 [vent.ItemStateChangedEvent] - virtual_wetterereignis changed from ok to Wind
ist in der Basic UI der zugehörige Text nicht zu sehen.
Kann man den Inhalt eines String-Items nicht zur Laufzeit verändern?

Vielen Dank und Grüße!

Re: Item wird in rule nicht bearbeitet

Verfasst: 12. Okt 2019 23:58
von udo1toni
Du musst schon im Label einen Platzhalter vorsehen. Anders sieht es aus, wenn das Item mit einem Channel verlinkt wird, dort greifen Defaultwerte vom Channel. Da es sich hier um ein ungebundenes Item handelt, muss das Label komplett definiert werden, am besten in der *.items Datei:

Code: Alles auswählen

String virtual_wetterereignis "Auslöser[%s]"
Und dann in der Sitemap kein Label setzen, also

Code: Alles auswählen

Text item=virtual_wetterereignis

Re: Item wird in rule nicht bearbeitet

Verfasst: 13. Okt 2019 14:14
von violine21
Hallo Udo,

vielen Dank für die Erläuterung.
Es funktioniert tadellos!
Ich habe als Neueinsteiger mal grob durch das Forum quergelesen und muss sagen, das Du einen unheimlichen Erfahrungsschatz hast.
Ich möchte Danke sagen, für die Geduld und die Bereitschaft, Dein Wissen mit uns Newbie's zu teilen!

Viele Grüße!

Re: Item wird in rule nicht bearbeitet

Verfasst: 13. Okt 2019 16:19
von udo1toni
Immer wieder gerne :)