Windwarnung über Cloudserver

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

madmike
Beiträge: 278
Registriert: 15. Apr 2018 17:09
Answers: 0

Windwarnung über Cloudserver

Beitrag von madmike »

Hallo zusammen,

ich bräuchte einmal Eure Hilfe mit einer Rule.
Ich möchte gerne eine Windwarnung über den Cloudserver senden. Das senden funktioniert habe ich schon probiert.
Die abhängig Größe soll die Überschreitung des Wertes sein der mir Über OpenweatherMap ausgegeben wird.
Zusätzlich soll diese Warnmeldung nur alle 3 Stunden ausgegeben werden.
Ich tue mich damit etwas schwer die richtigen Begrifflichkeiten zuzuordnen.
Hier meine Items:

Code: Alles auswählen

 Number:Speed         localCurrentWindSpeed             "Windgeschwindigkeit [%.1f km/h]"     <wind>                { channel="openweathermap:weather-and-forecast:api:local:current#wind-speed" }


und hier mein erster Versuch der rule:

Code: Alles auswählen

 rule "Windwarnung"

when
    localCurrentWindSpeed.valve >=49
then 
    sendBroadcastNotification("WINDWARNUNG !!  Gartensachen sichern!")
    createTimer(now.plusMinutes(180)) [|
	sendBroadcastNotification("WINDWARNUNG !!  Gartensachen sichern!")

	]
end
das ist die Fehlermeldung:

Code: Alles auswählen

 2019-03-07 11:54:04.411 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'windwarnung.rules' has errors, therefore ignoring it: [6,5]: no viable alternative at input 'localCurrentWindSpeed'
Irgendwie will das ganze aber noch nicht richtig auslösen. Hat jemand einen Tipp ??
mfg
Micha

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

Re: Windwarnung über Cloudserver

Beitrag von PeterA »

Hi,
müsste das nicht "localCurrentWindSpeed.value >=49" lauten ?
- OpenHab 2.4
#PWRUP

mamoel
Beiträge: 137
Registriert: 12. Jan 2019 19:56
Answers: 0

Re: Windwarnung über Cloudserver

Beitrag von mamoel »

Die rule ist zumindest hinsichtlich der Triggerbedingung falsch. Das muss so ähnlich aussehen:

Code: Alles auswählen

 rule "Windwarnung"

when
    Item localCurrentWindSpeed changed    
then
    if (localCurrentWindSpeed.state >=49) {
        sendBroadcastNotification("WINDWARNUNG !!  Gartensachen sichern!")
        createTimer(now.plusMinutes(180)) [|
	sendBroadcastNotification("WINDWARNUNG !!  Gartensachen sichern!")
	]
    }
end
Ob die anderen Befehle und der Timer syntaktisch passen, kann ich nicht sagen. Das müsste ich selbst er testen.
Du würdest aber aktuell permanent die Warnung schicken also bei jeder Änderung der Windgeschwindigkeit - falls diese über 49 liegt. Zusätzlich mit 3h Versatz noch einmal. Das willst Du bestimmt nicht :mrgreen:
openHAB 2.5 (M1) in Docker auf NAS: Synology DS418play
mit Homematic, Hue, TP-Link, AVM Fritz!, FritzboxTR064, Nuki, Amazon Echo, Sonos, Harmony, zigbee2mqtt, Denon/Marantz, ...

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

Re: Windwarnung über Cloudserver

Beitrag von udo1toni »

Grundsätzlich brauchst Du natürlich eine Rule, die bei jeder Änderung der Windgeschwindigkeit getriggert wird.
Weiterhin brauchst Du einen Timer, der verhindert, dass die Nachricht zu oft versendet wird.

Als Rahmen wäre das hier geeignet:

Code: Alles auswählen

// globale Variablen müssen zu Beginn der rules Datei deklariert werden!
var Timer tWind = null

rule "Wind Alarm"
when
    Item localCurrentWindSpeed changed
then
    if(tWind === null && (localCurrentWindSpeed.state as Number) > 49) {
        tWind = createTimer(now.plusHours(3), [ |
            tWind = null
        ])
        sendBroadcastNotification("WINDWARNUNG !!  Gartensachen sichern!")
    }
end
Die Rule wird bei jeder Änderung der Windgeschwindigkeit getriggert. Wenn die Windgeschwindigkeit über dem Grenzwert liegt und der Timer nicht läuft, wird der Timer erzeugt und anschließend die Warnmeldung versendet.
Wenn der Timer gestartet wurde, passiert nichts weiter, denn die Rule prüft, ob der Timer läuft. Wenn der Timer abläuft, leert er die Variable und ist wieder "scharf".

Selbstverständlich kann man auch zuerst die Warnmeldung verschicken und den Timer anschließend starten, das spielt keine Rolle. Die gesamte Rule läuft vielleicht 4 Millisekunden.

Bei der Notification muss man natürlich noch einen Empfänger mitgeben ;)

EDIT: Rule korrigiert.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

madmike
Beiträge: 278
Registriert: 15. Apr 2018 17:09
Answers: 0

Re: Windwarnung über Cloudserver

Beitrag von madmike »

Vielen lieben Dank an mamoel und Udo.
Ich werde beides morgen testen.
Laut dem Cloudserver Dienst würde bei dieser Angabe die Notification an jedes registriertes Gerät meiner Cloud gesendet.
Mal sehen ob es funzt.
Danke Danke
mfg
Micha

madmike
Beiträge: 278
Registriert: 15. Apr 2018 17:09
Answers: 0

Re: Windwarnung über Cloudserver

Beitrag von madmike »

So, ich habe die Rule von Udo probiert und bekomme folgende Fehlermeldung:

Code: Alles auswählen

 2019-03-08 02:44:47.726 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Windwarnung': Unknown variable or command '>'; line 10, column 26, length 27


die Rule lautet:

Code: Alles auswählen

/ globale Variablen müssen zu Beginn der rules Datei deklariert werden!
var Timer tWind = null

rule "Windwarnung"

when
    Item localCurrentWindSpeed changed

then
    if(tWind === null && (localCurrentWindSpeed) >40) {
        tWind = createTimer(now.plusHours(3), [ |
            tWind = null
        ])
        sendBroadcastNotification("WINDWARNUNG !!  Gartensachen sichern!")
    }
end
Ich habe as number rausnehmen müssen da mir der Fehler angezeigt wurde das ein Number Item nicht als Number dargestellt werden kann und ich habe die Geschwindigkeit zu Testzwecken auf 40 runtergesetzt.
die >40 will er irgendwie nicht anerkennen.
mfg
Micha

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

Re: Windwarnung über Cloudserver

Beitrag von udo1toni »

Ups, da fehlt ein .state. korrekt muss die Zeile so aussehen:

Code: Alles auswählen

if(tWind === null && (localCurrentWindSpeed.state as Number) >40) {
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

madmike
Beiträge: 278
Registriert: 15. Apr 2018 17:09
Answers: 0

Re: Windwarnung über Cloudserver

Beitrag von madmike »

Hallo Udo,

danke für deinen schnellen Tip.
Nach der Änderung war der fehler in der log weg.
Ich habe den Wert derzeit auf 20 gesetzt(echter wert liegt bei der Zeit 26) bekomme aber im log keine Anzeige das die Rule irgendetwas macht.
Weder das sie auslöst noch das eine Nachricht kommt.
mmh mal weiter testen.
hast du noch eine Idee?
mfg
Micha

Benutzeravatar
peter-pan
Beiträge: 2767
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Windwarnung über Cloudserver

Beitrag von peter-pan »

Hallo Micha,

ich habe hier mal eine kleine Test-Rule zusammen gebastelt.

Code: Alles auswählen

rule "Windwarnung"

when
    Item Dummy4x changed to ON or
    Item localCurrentWindSpeed changed

then

     if((localCurrentWindSpeed.state) >20) {
       logInfo("windspeed","Windgeschwindigkeit ohne Pattern als Vergleich" + localCurrentWindSpeed)
     }  // geht nicht
     if( (localCurrentWindSpeed.state as Number) > 20) {
       logInfo("windspeed","Windgeschwindigkeit umgewandelt ohne Float: " + localCurrentWindSpeed)
     }  // geht nicht
    if(localCurrentWindSpeed.state >20 | "km/h") {
       logInfo("windspeed","Windgeschwindigkeit mit Pattern: " + localCurrentWindSpeed)
     } // geht
     if( (localCurrentWindSpeed.state as Number).floatValue > 20) {
       logInfo("windspeed","Windgeschwindigkeit umgewandelt als Float für Vergleich: " + localCurrentWindSpeed)
     } // geht
     var vWindSpeed = (localCurrentWindSpeed.state as Number).floatValue
     if( vWindSpeed > 20) {
       logInfo("windspeed","Windgeschwindigkeit mit umgewandelter Variable: " + vWindSpeed)
     } // geht
end
Die ersten 2 If-Bedingungen funktionieren nicht (bzw. erkennen den Vergleich nicht richtig).

Die letzten drei sollten aber für deinen Vergleich passen. Also z.B.:

Code: Alles auswählen

if(tWind === null && (localCurrentWindSpeed.state >20 | "km/h")) {
Gruss
Peter
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

madmike
Beiträge: 278
Registriert: 15. Apr 2018 17:09
Answers: 0

Re: Windwarnung über Cloudserver

Beitrag von madmike »

Hallo Peter,

erstmal vielen Dank für deine Mühe.

Ich werde das ganze mal probieren und entsprechen einsetzen.
Melde mich morgen was passiert ist und ob alles erfolgreich abgeschlossen werden konnte.
mfg
Micha

Antworten