Alarmanlage - Meldung nach Wartezeit

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

Absinthe
Beiträge: 83
Registriert: 16. Jan 2022 13:30
Answers: 0

Re: Alarmanlage - Meldung nach Wartezeit

Beitrag von Absinthe »

Danke! Ich bin an der Stelle von einem anderen Verhalten ausgegangen. Mich hatte die "umgekehrte" Logik verwirrt. Sorry.

Aktueller Code:

Code: Alles auswählen

var Timer tAlarm = null                                                                // Zeiger auf Scheduler Eintrag
var String strAlarmItem = ""                                                           // Speicher für gemeldete Items

rule "Alarmanlage_Home_Automatik"
when
    Member of Group_Bewegungsmelder changed to ON or
    Member of Group_Fensterkontakt_Binaereingang changed to OPEN or
    Item Haus_Alarmanlage_Benachrichtigung changed to OFF or
    Item Group_Anwesenheitsstatus changed to ON
then
    if(Haus_Alarmanlage_Benachrichtigung.state == OFF && Group_Anwesenheitsstatus.state == ON) {         // Falls deaktiviert 
        tAlarm?.cancel                                                                  // lösche Timer, falls vorhanden
        tAlarm = null                                                                   // lösche den Zeiger
        strAlarmItem = ""                                                               // entferne den Itemnamen
        return;                                                                         // und brich die Rule ab.
    }
    if(triggeringItem === null) {                                                       // Rule wurde nicht durch Member getriggert
        return;
    }

    val mySwitch = Group_Bewegungsmelder_ExpirationTimer.members.filter[i|i.name.startsWith(triggeringItem.name)].head
    if(mySwitch.state != OFF){                                                          // wurde bereits alarmiert?
        return;                                                                         // dann Abbruch
    }
    mySwitch.postUpdate(ON)                                                             // Alarmfrequenz begrenzen
    if(strAlarmItem != "")                                                              // Falls schon ein Alarm besteht
       strAlarmItem  = strAlarmItem + ", "                                              // ergänze die Aufzählung
    strAlarmItem  = strAlarmItem + triggeringItem.label                                 // Itemnamen zwischenspeichern
    if(tAlarm !== null)                                                                 // Falls Timer bereits läuft
        return;                                                                         // nicht erneut erzeugen
    tAlarm = createTimer(now.plusSeconds(60),[|                                         // Lege Timer an
        val String strMessage = "ACHTUNG: Folgender Bewegungsmelder hat ausgelöst: "+strAlarmItem+". Bewegung erkannt am: "+new DateTimeType().format("%1$td.%1$tm.%1$ty %1$tH:%1$tM") // Meldetext festlegen
        val mailActions = getActions("mail","mail:smtp:Mail_SMTP")                      // Handle für Mail holen
        val pushActions = getActions("pushover", "pushover:pushover-account:Test")      // Handle für Push holen
        mailActions.sendMail("mail@mail.de", "Alarmanlage",strMessage)        // Mail versenden
        pushActions.sendPriorityMessage(strMessage,"Alarmanlage",1)                     // Push versenden
        strAlarmItem = ""                                                               // Itemnamen entfernen
        tAlarm = null                                                                   // und Zeiger auf Scheduler entfernen
    ])
end
Vielen Dank @udo1toni noch einmal für die Klasse Unterstützung!

Ich würde diesen noch um einen generellen Aus- & Einschalter erweitern:

Code: Alles auswählen

 if((Haus_Alarmanlage_Benachrichtigung.state == OFF && Group_Anwesenheitsstatus.state == ON) || Haus_Alarmanlage_Ausschalter.state == OFF) {    
Oder gibt es dafür eine bessere Stelle/Methode?
OpenHAB 4.3.0
in einem Docker-Container
auf einer Synology DS1515+

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

Re: Alarmanlage - Meldung nach Wartezeit

Beitrag von udo1toni »

Sagen wir mal so: Sinnvoller wäre ja ein Schalter, der drei Stellungen hat (Aus, An, Automatik). Das macht die Abfrage an der Stelle nicht einfacher, aber die Bedienoberfläche in openHAB wird dadurch übersichtlicher. Je nach verwendeter UI (HABPanel, Sitemap, Main UI) gibt es da unterschiedliche Wege, das zu konfigurieren.

Nehmen wir ein Number Item, welches die drei Werte 0, 1 und 2 annehmen kann. Umschaltung (mit Mapping für die Anzeige) geht dann über ein Widget. Passende Abfrage (0 = Aus, 1 = An, 2 = Auto):

Code: Alles auswählen

    val Integer iScharf = if(Alarmanlage.state instanceof Number) (Alarmanlage.state as Number).intValue else 2 // Default ist Auto
    if(iScharf == 0 || (iScharf == 2 && Group_Anwesenheitsstatus.state == ON)) {         // Falls deaktiviert 
Zunächst wird der Wert aus dem Item geholt. Falls dort kein gültiger Wert vorliegt, nimmt die Rule den Automatik-Betrieb an. Hier könnte natürlich auch ein anderer Default Modus verwendet werden.
Anschließend kommt die Abfrage, ob Alarm gegeben werden soll oder nicht. ist der Schalter auf 0, so soll kein Alarm gegeben werden, ist der Schalter auf 2 und Anwesenheit ist ON, so soll ebenfalls kein Alarm gegeben werden. In den anderen Fällen (Schalter steht auf 1, Schalter steht auf 2 und Anwesenheit ist OFF) wird der nachfolgende Teil nicht ausgeführt und damit ein eintreffender Alarm auch (verzögert) ausgegeben.

Darstellung des Items in einer Sitemap:

Code: Alles auswählen

Switch item=Alarmanlage label="Alarmanlage" mappings=[0="Aus",1="An",2="Auto"]
Alternativ als Selection:

Code: Alles auswählen

Selection item=Alarmanlage label="Alarmanlage" mappings=[0="Aus",1="An",2="Auto"]
Sieht dann in der Basic UI so aus (ich habe sie der Einfachheit halber untereinander angeordnet)
Screenshot 2022-10-08 125904.png
Ähnlich kann das auch über HABPanel und/oder Main UI erfolgen, spare ich mir hier mal...
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Absinthe
Beiträge: 83
Registriert: 16. Jan 2022 13:30
Answers: 0

Re: Alarmanlage - Meldung nach Wartezeit

Beitrag von Absinthe »

Sehr kluger Ansatz! Gleich eingebaut. Funktioniert einwandfrei :)

Auch das Fallback, falls kein Wert oder etwas anderes nicht klappt, dass dann automatisch die Anlage auf "auto" steht!

Vielen, vielen Dank noch einmal für Deine Hilfe und Geduld!!!

#closed
OpenHAB 4.3.0
in einem Docker-Container
auf einer Synology DS1515+

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

Re: Alarmanlage - Meldung nach Wartezeit

Beitrag von udo1toni »

Stufe zwei:

Jetzt ändere das Item und die Rule so ab, dass statt "Auto" über das selbe Item(!) zusätzlich angezeigt wird, ob die Anlage gerade automatisch ein- oder automatisch ausgeschaltet ist.

:D
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Absinthe
Beiträge: 83
Registriert: 16. Jan 2022 13:30
Answers: 0

Re: Alarmanlage - Meldung nach Wartezeit

Beitrag von Absinthe »

Hallo @udo1toni

Dies würde ich so lösen und einen zweiten String mit dem Status der Alarmanlage an die Benachrichtigung der E-Mail mit anhängen.

Code: Alles auswählen

        val String strMessageStatus = "Status der Alarmanlage: " + transform("MAP", "alarmstatus.map", Haus_Alarmanlage_Selektion.state.toString)
OpenHAB 4.3.0
in einem Docker-Container
auf einer Synology DS1515+

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

Re: Alarmanlage - Meldung nach Wartezeit

Beitrag von udo1toni »

Ja, aber das ist dann ein zweites Item :) - war auch mehr als Spaß gedacht.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Absinthe
Beiträge: 83
Registriert: 16. Jan 2022 13:30
Answers: 0

Re: Alarmanlage - Meldung nach Wartezeit

Beitrag von Absinthe »

:D

Challenge accepted ;)

Stimmt ;) Wollte nur den ersten Nachrichten String nicht noch länger werden lassen :D

Noch einmal viele Dank für Deine Hilfe!!!
OpenHAB 4.3.0
in einem Docker-Container
auf einer Synology DS1515+

Antworten