Rules

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

matze.lingen
Beiträge: 52
Registriert: 28. Jul 2018 18:35
Answers: 0

Rules

Beitrag von matze.lingen »

Moin zusammen,

ich verstehe es einfach nicht :)
Ich versuche eine Regel zu bauen die bei Temperaturen unter 0 Grad eine Telegramm Nachricht versendet. Aber wie bin ich zu dämlich dafür:

Code: Alles auswählen

/Temperatur Stall
rule "Temp_Stal_rule"
when
    Item Stall_Temp received update
then
    if (Stall_Temp > ) 25{

       }
else
    if (Temper.state < 25) {
       sendTelegram("bot1", "Stall Temperatur ist nun %.1f")
       }
end
Kann mir jemand sagen an welcher stelle ich zu dumm bin :)
Danke und Gruß
Matze

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

Re: Rules

Beitrag von mamoel »

Die Regel ist ein wenig seltsam.
Mal schreibst Du "Stall_Temp", mal "Temper".
Im Teil mit "sendTelegram" fehlt die Übergabe des Wertes.

Was funktionieren müsste:

Code: Alles auswählen

rule "Temp_Stall_rule"
when
    Item Stall_Temp received update
then
    logInfo("bot1", "Stalltemperatur: " + Stall_Temp.state)
    var DecimalType sTemp = Stall_Temp.state as DecimalType

    if (sTemp > 25) {

    }
    else if (sTemp < 25) {
       sendTelegram("bot1", "Stall Temperatur ist nun: " + Stall_Temp.state)
    }
end
Falls das nicht klappt, poste bitte, was im Log als "Stalltemperatur: " angezeigt wird.
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
peter-pan
Beiträge: 2758
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Rules

Beitrag von peter-pan »

Hallo Matze,

die erste 25 muss auf jeden Fall mal in der Klammer stehen. Du schreibst aber einmal von 0 Grad und fragst dann aber 25 ab. Und dann frägst du noch zwei verschiedene Variablen ab.

Vielleicht gibst du noch ein paar Hintergrundinformationen dazu und evtl. die enstprechenden Items aus deiner .items Datei.

Gruss - Peter
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

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

Re: Rules

Beitrag von udo1toni »

Die rule von mamoel sieht schon mal viel besser aus als die initiale :)

Um ein wenig Licht rein zu bringen: Stall_Temp ist ja offensichtlich ein Item. Du möchtest aber den Status des Items vergleichen, also musst Du Stall_Temp.state verwenden. Nun ist ein Status erstmal ein ein Status, Du möchtest den Status aber als Zahl betrachten (man kann nur Zahlen mit einem > oder < vergleichen). Das Problem hierbei ist, dass ein Status eines Number Items nicht automatisch vom Typ Number ist. Die korrekte Lösung ist also noch ein Stückchen komplizierter, wenn man es sauber lösen möchte:

Code: Alles auswählen

rule "Temp_Stal_rule"
when
    Item Stall_Temp changed
then
    if(Stall_Temp.state instanceof Number) {
        val Number nTemp = Stall_Temp.state as Number
        if(nTemp < 0) {
           sendTelegram("bot1", "Stall Temperatur ist nun {}",nTemp)
        }
    }
end
Das Setzen der Konstanten nTemp ist hier sinnvoll, da derselbe Wert mehrfach verwendet wird. Der bessere Trigger ist hier changed, um zumindest einige Meldungen zu vermeiden.
Überhaupt bietet es sich an, dafür zu sorgen, dass nicht alle paar Sekunden eine Alarmmeldung gesendet wird, nur weil die Temperatur immer noch unter 0 ist.
Falls Stall_Temp mit UoM konfiguriert ist, muss man dem in der Rule Rechnung tragen, es ist also selbst bei solch simplen Aufgaben sinnvoll, mindestens die Item Definition mit anzugeben.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

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

Re: Rules

Beitrag von peter-pan »

Hier noch eine Version von mir(für die UoM-Version):

Code: Alles auswählen

rule "Temp_Stal_rule"
when
    Item Stall_Temp changed
then
    var nTemp = (Stall_Temp.state as Number).floatValue
    if(nTemp < 0) {
       sendTelegram("bot1", "Stall Temperatur ist nun {}",nTemp)
    }
end
Aber wie @udo1toni sagte, diese Rule triggert immer wieder so lange der Wert unter 0 bleibt und er sich in diesem Bereich immer wieder ändert.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

matze.lingen
Beiträge: 52
Registriert: 28. Jul 2018 18:35
Answers: 0

Re: Rules

Beitrag von matze.lingen »

Hey,

erstmal Danke für die zahlreichen Antworten. Was bedeutet UoM?
Ich habe alles mit Normalen Item Definitionen gemacht ohne Weboberfläche...
Ich möchte es gerne so haben das sobald die Temeratur unter 0 fällt er auch jedes mal eine Nachricht sendet wenn die Temperatur kälter wird. Bsp. ab -5 Grad wieder usw. Geht das so? Wie kann ich es verhindern dass bei jeder Änderung eine E-Mail Angetriggert wird?
Habt ihr noch gute Lecktüre damit ich das besser verstehen kann?

Vielen Dank
Gruß
Matze

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

Re: Rules

Beitrag von mamoel »

'UoM' steht für Unit of Measurement. Dies ist dann relevant, wenn das in deinem Itemfile z.B. so deklariert wurde:

Code: Alles auswählen

Number:Temperature temperature "Outside [%.2f °F]" { channel="...:current#temperature" }
Deshalb wäre es hilfreich, wenn du uns den Inhalt deines Itemfiles oder zumindest den Teil, wo 'Stall_Temp' erzeugt wird hier rein posten würdest.
Als nächstes müssten wir auch wissen, was genau du erreichen möchtest.
Bei welchen Schwellwerten möchtest du eine Nachricht? Und dann nur bei sinkender Temperatur (dann könnte man den neuen Wert immer mit dem Vorgängerwert 'previousState' vergleichen)? Was soll passieren, wenn die Temperatur von z.B. -5.2°C auf -4.9°C steigt?

Einiges an Info gibt es hier.
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, ...

matze.lingen
Beiträge: 52
Registriert: 28. Jul 2018 18:35
Answers: 0

Re: Rules

Beitrag von matze.lingen »

Moin,

vielen dank. Hier mal ein Auszug aus dem default.items:

Code: Alles auswählen

Number Stall_Temp "Temperatur [%.1f *C]" <temperature> (gTemperature, gStall) [ "CurrentTemperature" ] {mqtt="<[openhub:stall/temp:state:default]"}
Number Stall_F "Luftfeuchtigekeit [%.1f %%]" <temperature> (gTemperature, gStall) {mqtt="<[openhub:stall/f:state:default]"}

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

Re: Rules

Beitrag von udo1toni »

Die UoM-Version sieht aber erheblich anders aus!

Code: Alles auswählen

rule "Temp_Stal_rule"
when
    Item Stall_Temp changed
then
    if(Stall_Temp.state instanceof QuantityType) {
        val Number nTemp = Stall_Temp.state as QuantityType<Number>
        if(nTemp < 0) {
           sendTelegram("bot1", "Stall Temperatur ist nun {}",nTemp)
        }
    }
end
Da ein Item entweder QuantityType oder Number sein kann, aber niemals beides gleichzeitig, muss man sich in der Rule nicht um beide Varianten kümmern, aber berücksichtigen, welche Art Item man nun verwendet. Deine Items nutzen jedenfalls kein UoM. Wenn Du z.B. Netatmo verwendest, musst Du zwangsweise UoM verwenden (dafür kann man sich die Messwerte aber auch beliebig ausgeben lassen, z.B. Temperaturen als °C oder °F, ganz ohne Rumgerechne, oder statt m/s km/h) :)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

matze.lingen
Beiträge: 52
Registriert: 28. Jul 2018 18:35
Answers: 0

Re: Rules

Beitrag von matze.lingen »

ok dann noch einmal mit hilfe :) wie bekomme ich es nun hin das er nur einmal meldet wenn die Temperatur unter 0 Grad Sinkt und dann erst wieder wenn die Temperatur bei -5 ist und dann bei -10? und wie würde eine Regel aussehen, dass wenn das letzt Update länger als 12 Stunden her ist er mir eine nachricht sendet?
Dann muss ich mich nochmal richtig schlau lesen :)

Danke und Gruß
Matthias

Antworten