Item wird in rule nicht bearbeitet

Alle Infos und Tipps speziell zu openHAB 2

Moderatoren: seppy, udo1toni

Antworten
violine21
Beiträge: 11
Registriert: 20. Sep 2019 05:49

Item wird in rule nicht bearbeitet

Beitrag von violine21 » 11. Okt 2019 14:07

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!

eiGelbGeek
Beiträge: 89
Registriert: 11. Aug 2019 06:39

Re: Item wird in rule nicht bearbeitet

Beitrag von eiGelbGeek » 11. Okt 2019 18:21

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

violine21
Beiträge: 11
Registriert: 20. Sep 2019 05:49

Re: Item wird in rule nicht bearbeitet

Beitrag von violine21 » 11. Okt 2019 19:09

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

Benutzeravatar
udo1toni
Beiträge: 1788
Registriert: 11. Apr 2018 18:05
Wohnort: Darmstadt

Re: Item wird in rule nicht bearbeitet

Beitrag von udo1toni » 11. Okt 2019 23:22

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.

violine21
Beiträge: 11
Registriert: 20. Sep 2019 05:49

Re: Item wird in rule nicht bearbeitet

Beitrag von violine21 » 12. Okt 2019 17:32

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

eiGelbGeek
Beiträge: 89
Registriert: 11. Aug 2019 06:39

Re: Item wird in rule nicht bearbeitet

Beitrag von eiGelbGeek » 12. Okt 2019 18:04

Gutes Beispiel warum Log Files wichtig sind um gezielt zu helfen :-)

Schön das es nun funktioniert :-)

Grüße

violine21
Beiträge: 11
Registriert: 20. Sep 2019 05:49

Re: Item wird in rule nicht bearbeitet

Beitrag von violine21 » 12. Okt 2019 23:37

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!

Benutzeravatar
udo1toni
Beiträge: 1788
Registriert: 11. Apr 2018 18:05
Wohnort: Darmstadt

Re: Item wird in rule nicht bearbeitet

Beitrag von udo1toni » 12. Okt 2019 23:58

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

violine21
Beiträge: 11
Registriert: 20. Sep 2019 05:49

Re: Item wird in rule nicht bearbeitet

Beitrag von violine21 » 13. Okt 2019 14:14

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!

Benutzeravatar
udo1toni
Beiträge: 1788
Registriert: 11. Apr 2018 18:05
Wohnort: Darmstadt

Re: Item wird in rule nicht bearbeitet

Beitrag von udo1toni » 13. Okt 2019 16:19

Immer wieder gerne :)

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste