Komm nicht weiter

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Benutzeravatar
Snatsch
Beiträge: 455
Registriert: 9. Jan 2021 22:55
Answers: 0

Komm nicht weiter

Beitrag von Snatsch »

Hallo,
ich stehe gerade völlig auf dem Schlauch :( Ich möchte gern das der zweite Teil meiner Rule erst ausgelöst wird wenn der erste erfolgt ist. Also "if(AussentuerePartyraum_TurFensterstatus.state == CLOSED)" darf erst nach dem Timer erfolgen. Wäre schön wenn mir jemand einen Tip geben könnte.

import java.net.URLEncoder
var Timer AussentuerePartyraumMeldung = null

rule "Außentüre Partyraum offen"
when
Item AussentuerePartyraum_TurFensterstatus changed
then
//cancel timer if running
AussentuerePartyraumMeldung?.cancel
AussentuerePartyraumMeldung = null

if(AussentuerePartyraum_TurFensterstatus.state == OPEN)
AussentuerePartyraumMeldung = createTimer(ZonedDateTime.now.plusMinutes(1), [|
val telegramAction = getActions("telegram","telegram:telegramBot:8750e150c1")

if((Localweatherandforecast_Aussentemperatur.state as Number).floatValue <15){
telegramAction.sendTelegram("Die Außentüre im Partyraum steht schon länger offen und es wird kalt!")

say ("Die Außentüre im Partyraum steht schon länger offen und es wird kalt",null)

val urlmessage = URLEncoder::encode("Die Außentüre im Partyraum steht schon länger offen und es wird kalt", 'UTF-8')
sendHttpGetRequest("https://api.callmebot.com/whatsapp.php? ... 3456&text=" + urlmessage)

}
])

if(AussentuerePartyraum_TurFensterstatus.state == CLOSED){

val telegramAction = getActions("telegram","telegram:telegramBot:8750e150c1")

telegramAction.sendTelegram("OK die Aussentüre im Partyraum wurde geschlossen!")

say ("OK die Aussentüre im Partyraum wurde geschlossen!",null)

val urlmessage = URLEncoder::encode("OK die Aussentüre im Partyraum wurde geschlossen!", 'UTF-8')
sendHttpGetRequest("https://api.callmebot.com/whatsapp.php? ... 3456&text=" + urlmessage)

}


end
openhab4.3.1 auf Pi 5 8GB im Docker Portainer&Frontail /Grafana&InfluxDB und mosquitto auf Pi 3 in Docker Portainer/Pi 3 mit Docker zur Datensicherung / Pi 4 4GB Portainer & Deconz

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

Re: Komm nicht weiter

Beitrag von udo1toni »

Du darfst in diesem Fall den Timer nicht einfach so zu Beginn der Rule canceln und löschen.
Stattdessen muss die Rule so aussehen:

Schritt 1: Unterscheidung ob OPEN oder CLOSED.

Falls OPEN: Timer anlegen
Falls CLOSED: Prüfen, ob Timer schon abgelaufen, Anschließend Timer Canceln und auf null setzen.

Da es leider keinen direkten Weg gibt, zu prüfen, ob der Timer bereits abgelaufen ist, brauchst Du eine Hilfsvariable vom Typ Boolean, die Du global anlegst. Diese wird beim Canceln des Timers auf false gesetzt. Der Timer setzt die Variable auf true.


Gesendet von iPad mit Tapatalk
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
Snatsch
Beiträge: 455
Registriert: 9. Jan 2021 22:55
Answers: 0

Re: Komm nicht weiter

Beitrag von Snatsch »

vielen Dank für deine Antwort. Könntest du mir das bitte an einen Beispiel zeigen ? Habe erst vorige Woche angefangen mit VSC zu arbeiten.
MfG Daniel Knoch
openhab4.3.1 auf Pi 5 8GB im Docker Portainer&Frontail /Grafana&InfluxDB und mosquitto auf Pi 3 in Docker Portainer/Pi 3 mit Docker zur Datensicherung / Pi 4 4GB Portainer & Deconz

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

Re: Komm nicht weiter

Beitrag von udo1toni »

Ja, da muss ich allerdings den Rechner wechseln… das macht am iPad echt keinen Spaß…


Gesendet von iPad mit Tapatalk
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
Snatsch
Beiträge: 455
Registriert: 9. Jan 2021 22:55
Answers: 0

Re: Komm nicht weiter

Beitrag von Snatsch »

Das glaub ich. Vielen Dank
openhab4.3.1 auf Pi 5 8GB im Docker Portainer&Frontail /Grafana&InfluxDB und mosquitto auf Pi 3 in Docker Portainer/Pi 3 mit Docker zur Datensicherung / Pi 4 4GB Portainer & Deconz

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

Re: Komm nicht weiter

Beitrag von udo1toni »

So:

Code: Alles auswählen

import java.net.URLEncoder
var Timer   tPartyraum = null
var Boolean bPartyraum = false

rule "Außentüre Partyraum offen"
when
    Item AussentuerePartyraum_TurFensterstatus changed
then
    tPartyraum?.cancel     // cancel timer if running
    tPartyraum = null      // kann auch entfallen, da der Zustand nirgends geprüft wird
    if(AussentuerePartyraum_TurFensterstatus.state == OPEN) // das heißt, vorher war zu
        tPartyraum = createTimer(ZonedDateTime.now.plusMinutes(1), [|
            val String strMessage = "Die Außentüre im Partyraum steht schon länger offen und es wird kalt!"
            val telegramAction = getActions("telegram","telegram:telegramBot:8750e150c1")
            if((Localweatherandforecast_Aussentemperatur.state as Number).floatValue <15){
                bPartyraum = true  // die OK-Meldung kommt nur, wenn vorher die Erinnerung kam
                                   // // alternativ vor die Bedingung einbetten, dann kommt die OK-Meldung, wenn die Tür eine Minute offen stand und geschlossen wird.
                telegramAction.sendTelegram(strMessage)
                say (strMessage,null)
                val urlmessage = URLEncoder::encode(strMessage, 'UTF-8')
                sendHttpGetRequest("https://api.callmebot.com/whatsapp.php? ... 3456&text=" + urlmessage)
            }
        ])
    else { // das Gegenteil von OPEN ist CLOSED
        if(bPartyraum){
            val String strMessage = "OK die Aussentüre im Partyraum wurde geschlossen!"
            val telegramAction = getActions("telegram","telegram:telegramBot:8750e150c1")
            telegramAction.sendTelegram(strMessage)
            say (strMessage,null)
            val urlmessage = URLEncoder::encode(strMessage, 'UTF-8')
            sendHttpGetRequest("https://api.callmebot.com/whatsapp.php? ... 3456&text=" + urlmessage)
            bPartyraum = false
        }
    }
end
Falls Du häufiger Meldungen ausgibst, bietet es sich an, das in eine Rule auszulagern. Dazu definierst Du ein String Item z.B. Meldung und eine Rule, die sich um die Message kümmert:

Code: Alles auswählen

rule "send Message"
when
    Item Meldung received update
then
    if(Meldung.state == NULL || Meldung.state.toString == "") {
        logWarn("message","Item Meldung erhielt Update auf {}, keine Ausgabe möglich!",Meldung.state)
        return;
    }
    val String strMessage = Meldung.state.toString
    val urlmessage = URLEncoder::encode(strMessage, 'UTF-8')
    val telegramAction = getActions("telegram","telegram:telegramBot:8750e150c1")
    telegramAction.sendTelegram(strMessage)
    say(strMessage,null)
    sendHttpGetRequest("https://api.callmebot.com/whatsapp.php? ... 3456&text=" + urlmessage)
end
Nun reicht ein

Code: Alles auswählen

Meldung.postUpdate("Das ist meine Nachricht!")
um die Nachricht einmalig an alle Kanäle zu verteilen. Da das Ganze über Rule und Item funktioniert, kann es systemweit genutzt werden. Du kannst sogar innerhalb der Rule "send Message" Abhängigkeiten vorsehen, z.B. dass zu bestimmten Uhrzeiten keine Ansage erfolgt oder die Benachrichtigung auf WhatsApp nur erfolgt, wenn niemand im Haus ist (vorausgesetzt natürlich, Du hast eine Anwesenheitserkennung), oder, oder, oder.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
Snatsch
Beiträge: 455
Registriert: 9. Jan 2021 22:55
Answers: 0

Re: Komm nicht weiter

Beitrag von Snatsch »

vielen, vielen Dank. Das ist ja der absolute Vollservice. Werde mich heute Abend gleich mal drüber machen.
openhab4.3.1 auf Pi 5 8GB im Docker Portainer&Frontail /Grafana&InfluxDB und mosquitto auf Pi 3 in Docker Portainer/Pi 3 mit Docker zur Datensicherung / Pi 4 4GB Portainer & Deconz

Benutzeravatar
Snatsch
Beiträge: 455
Registriert: 9. Jan 2021 22:55
Answers: 0

Re: Komm nicht weiter

Beitrag von Snatsch »

Möchte deine Hilfe nicht überstrapazieren aber könntest du mir noch Erklären wie ich des String Item mit dem Namen "Meldungen" anlege und das die Rule nur in der Zeit von 6.00 Uhr bis 22.00 Uhr triggern soll. Wäre echt super.
openhab4.3.1 auf Pi 5 8GB im Docker Portainer&Frontail /Grafana&InfluxDB und mosquitto auf Pi 3 in Docker Portainer/Pi 3 mit Docker zur Datensicherung / Pi 4 4GB Portainer & Deconz

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

Re: Komm nicht weiter

Beitrag von udo1toni »

Ich gehe davon aus, dass Du OH3 verwendest. Du gehst in die Main UI -> Administration->Einstellungen->Items. Dort klickst Du unten rechts auf das weiße + im blauen Kreis und wählst aus der Liste … ähm… … create Item… (nicht from file… hab’s grade nicht präsent, welche Punkte es da genau gibt)
Dann legst Du das Item als String Item an, vergibst den Namen und wenn Du willst auch ein Label, wobei das Item für die UI nicht so interessant ist.

Punkt 2: Es gibt verschiedene Möglichkeiten dafür. Pragmatisch: Du legst ein weiteres Item an (z.B. Nachtruhe), als Switch.
Du definierst zwei Rules, die zur entsprechenden Uhrzeit Trigger (Time cron) und das Item auf ON bzw. OFF setzen (per postUpdate!).
In Deiner Rule schreibst Du vorne eine Abbruchbedingung rein, so wie etwa:

Code: Alles auswählen

if(Nachtruhe.state == ON) return;
Und schon wird die Rule automatisch beendet, falls Nachtruhe auf ON steht.

Alternativ kannst Du innerhalb der Rule auch prüfen, ob aktuelle Stunde/Minute in einem bestimmten Bereich liegen, z.B. mit

Code: Alles auswählen

if(now.getHour<6 || now.getHour > 21) return;
Sobald es um Minuten geht, werden solche Abfragen aber kompliziert, weil zum einen ein Stundenbereich abgefragt werden muss, zum anderen aber im “Randbereich” Gleichheit der Stunde und Minutenbereich abgefragt werden müssen.
Ein Item wie oben beschrieben kannst Du auch problemlos in anderen Rules wiederverwenden, so denn der Zeitraum passt.


Gesendet von iPad mit Tapatalk
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
Snatsch
Beiträge: 455
Registriert: 9. Jan 2021 22:55
Answers: 0

Re: Komm nicht weiter

Beitrag von Snatsch »

Vielen lieben Dank für deine Bemühungen :)
openhab4.3.1 auf Pi 5 8GB im Docker Portainer&Frontail /Grafana&InfluxDB und mosquitto auf Pi 3 in Docker Portainer/Pi 3 mit Docker zur Datensicherung / Pi 4 4GB Portainer & Deconz

Antworten