Fensterkontakt mit Alarm auf Handyapp

Allgemeine Fragen zum Thema "Smart Home" und Entscheidungshilfen

Moderator: seppy

AndRe5575
Beiträge: 64
Registriert: 8. Jun 2020 20:16

Fensterkontakt mit Alarm auf Handyapp

Beitrag von AndRe5575 »

Hallo zusammen,

ich habe mein SmartHome um ein paar Fensterkontakte von Lidl erweitert. Nun möchte ich gerne, dass sobald ein Kontakt geöffnet wird, ich eine Benachrichtigung auf mein Handy bekomme. Wie realisiere ich das am Besten? OpenHab App ist auf dem Handy installiert und eine VPN Verbindung wäre eigentlich auch fast immer möglich. Da ich kein Telegram nutze fällt das Binding raus.

Danke vorab
von udo1toni » 23. Nov 2022 01:14
Nicht kürzer, aber eleganter:

Code: Alles auswählen

rule "Alarm"
when
    Member of gContact_Open changed to OPEN                     // Ein Item der Gruppe wechselt auf OPEN
then 
    if(Ueberwachung.state != ON)                                // Falls Überwachung aus
        return;                                                 // regel abbrechen
    val StringBuilder message = new StringBuilder               // Stringbuilder initialisieren
    val opened = gContact_Open.members.filter[i|i.state == OPEN] // Nimm die Gruppe und filtere auf offene Kontakte
    message.append("Fenster ")                                  // Starte den Text
    opened.forEach[w, i|                                        // durchlaufe die Liste der Items
        message.append(w.label)                                 // hänge das Label an
        if(i == opened.size -1)                                 // falls vorletztes Element der Liste
            message.append(" und ")                             // hänge " und " an
        else if(opened.size > 2 && i < opened.size - 1)         // Falls Liste größer als zwei Elemente und nicht letztes oder vorletztes Element
            message.append(", ")                                // hänge ", " an
    ]
    if(opened.size == 1)                                        // Falls Listengröße 1
        message.append(" ist")                                  // hänge " ist" an
    else                                                        // sonst
        message.append(" sind")                                  // hänge " sind" an
    message.append(" geöffnet.")                                // beende den Text
    sendBroadcastNotification(message.toString)                 // sende Text
end
Erst mal meldet Deine Rule immer nur ein offenes Fenster, falls mehrere Fenster geöffnet wurden, wird das ignoriert.
Die oben gezeigte Rule macht das anders.
Erster Schritt: sie triggert jedes Mal, wenn ein Fenster geöffnet wurde, egal, ob dies das erste oder ein weiteres Fenster ist.
Ist die Rule gestartet, so prüft sie, ob das Item Ueberwachung den Status (!) ON hat. Ist dies nicht der Fall, bricht die Rule ab. Das ist insofern eleganter, als dass der restliche Code nicht Teil eines Blocks sein muss.

Zu diesem Zeitpunkt ist also klar: 1. mindestens ein Fenster ist offen und 2., das soll auch gemeldet werden.

Nun wird ein Stringbuilder initialisiert. Im nächsten Schritt wird die Gruppe auf alle offenen Kontakte gefiltert.
Anschließend wird der Meldetext generiert, Stück für Stück.
Für jedes Fenster wird das Label des Items an die bereits aufgebaute Meldung angehängt.
beinhaltet die Liste mehr als ein Item, so müssen jeweils Kommata unmittelbar nach dem Label eingefügt werden, bis auf das vorletzte Element, welchem (mit einem Leerzeichen Abstand) das Wort "und" folgen muss.
Nach dem letzten Label muss abhängig von der Anzahl der Fenster entweder ein " ist" oder ein " sind" angehängt werden.
Nach Vervollständigung der Meldung wird sie versendet.

Die schnöde Variante, die eher Deiner Variante entspricht:

Code: Alles auswählen

rule "Alarm"
when
    Member of gContact_Open changed to OPEN
then 
    if(Ueberwachung.state != ON)
        return;
    val message = "Fenster "+triggeringItem.label" + wurde geöffnet."
    sendBroadcastNotification(message)}
end
Hier wird also nur das Fenster gemeldet, welches gerade geöffnet wurde. Aber auch hier wird zumindest für jedes Fenster eine Meldung generiert, welches geöffnet wird, unabhängig davon, ob bereits andere Fenster geöffnet sind.

Natürlich müssen die Label so gestaltet sein, dass die Meldung sinnvoll daraus generiert werden kann. Ist das nicht der Fall, gibt es weitere fiese Tricks ;) um dennoch ohne if-Wüste auszukommen.

EDIT: Denkfehler meinerseits... der letzte Begriff in der Message ist immer ein Label, mithin muss auch vor dem "sind" ein Leerzeichen stehen.... Ich habe das im Code geändert...
EDIT2: Noch zwei Typos entfernt...
Gehe zur vollständigen Antwort

Benutzeravatar
sihui
Beiträge: 1827
Registriert: 11. Apr 2018 19:03
Answers: 21

Re: Fensterkontakt mit Alarm auf Handyapp

Beitrag von sihui »

AndRe5575 hat geschrieben: 19. Nov 2022 17:07 Benachrichtigung auf mein Handy
https://www.openhab.org/docs/configurat ... on-actions
openHAB3 mit Zwave, Alexa, ESPEasy, MQTT, Logitech Harmony, Philips HUE und ZigBee Hardware auf Proxmox VE.

AndRe5575
Beiträge: 64
Registriert: 8. Jun 2020 20:16

Re: Fensterkontakt mit Alarm auf Handyapp

Beitrag von AndRe5575 »

Danke für den Hinweis.
Edit*
Okay hatte ich Anfangs falsch verstanden. Sieht sehr Umfangreich aus. Denke das wird entsprechend sicher nicht schnell gehen.

Benutzeravatar
sihui
Beiträge: 1827
Registriert: 11. Apr 2018 19:03
Answers: 21

Re: Fensterkontakt mit Alarm auf Handyapp

Beitrag von sihui »

AndRe5575 hat geschrieben: 19. Nov 2022 22:25 Denke das wird entsprechend sicher nicht schnell gehen.
Nun ja, es sind nur einige wenige Schritte bis zur Handy-Benachrichtigung:

ein Konto bei myopenhab anlegen
den Cloud Connector in openHAB installieren
UUID und SECRET bei myopenhab eintragen
eine zusätzliche Zeile in deine Regel schreiben
openHAB3 mit Zwave, Alexa, ESPEasy, MQTT, Logitech Harmony, Philips HUE und ZigBee Hardware auf Proxmox VE.

AndRe5575
Beiträge: 64
Registriert: 8. Jun 2020 20:16

Re: Fensterkontakt mit Alarm auf Handyapp

Beitrag von AndRe5575 »

Eigentlich hätte ich gerne eine interne Lösung, welche ohne externe Dienste arbeitet.
Es gab doch auch die Möglichkeit, dass z.B. die FritzBox dann intern eine Nummer wählt oder?

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

Re: Fensterkontakt mit Alarm auf Handyapp

Beitrag von udo1toni »

Du wirst ohne externe Dienste nicht weiter kommen, es sei denn, Du willst es Dir dreckig geben und z.B. einen eigenen Push Server aufsetzen.
myopenhab ist einfach eine bequeme Möglichkeit, openHAB in die Cloud zu bringen, ohne es in eine x-beliebige Cloud zu bringen.
myopenhab wird von der openHAB Foundation e.V. betrieben und ist kostenlos. Da die gesamte Software Open Source ist und von den openHAB Entwicklern stammt, kannst Du einigermaßen beruhigt sein, was potenziellen Datenabfluss angeht.

Alternativen wären: eMail (externer Mailserver) telegram Bot (externer telegram Server), xmpp Bot (externer Jabber Server) oder, oder, oder. All diese Dienste landen natürlich nicht in der openHAB App selbst. Die openHAB App unterstützt Push Notification, aber eben nur über myopenhab, irgendein Server muss ja nun mal die Kommunikation übernehmen.
openHAB3.4.1 in einem Debian-Container (Proxmox, LXC)

AndRe5575
Beiträge: 64
Registriert: 8. Jun 2020 20:16

Re: Fensterkontakt mit Alarm auf Handyapp

Beitrag von AndRe5575 »

Stimmt schon. Man ist immer von irgendwie von externen Diensten abhängig.
Ich wollte dies zumindest versuchen beim SmartHome auszuschließen.

Bei OpenHab kann man da dann sicher die Ausnahme machen. Schnittstelle zu Gmail ist wegen dem Kalender halt schon da, aber auch die Realisierung darüber ist ja mit einigen Kompromissen behaftet.

Ich werde mir das heute Abend von daheim einmal anschauen.

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

Re: Fensterkontakt mit Alarm auf Handyapp

Beitrag von udo1toni »

Nur so als Anregung (weil es ja sehr darauf ankommt, was Du so nutzt) openHAB kann auch twittern.
Du kannst also einen Schlossaccount einrichten, den nur Du (oder auch andere ausgewählter Personen) sehen kannst (können). openHAB sendet Nachrichten als Tweets und Du kannst Dich durch die Twitter App benachrichtigen lassen.
Wie gesagt, die Daten sind eh im Internet unterwegs, es ist ohnehin fraglich, was man dort guten Gewissens transportieren will. Auf der anderen Seite hat Elon ohnehin Besseres zu tun, als gegen die eigenen Vorschriften zu verstoßen ;)
openHAB3.4.1 in einem Debian-Container (Proxmox, LXC)

AndRe5575
Beiträge: 64
Registriert: 8. Jun 2020 20:16

Re: Fensterkontakt mit Alarm auf Handyapp

Beitrag von AndRe5575 »

Habe es nun wie vorgeschlagen gelöst. Simpler geht es wirklich nicht. Kann man eigentlich alte Benachrichtigungen in der App löschen?

AndRe5575
Beiträge: 64
Registriert: 8. Jun 2020 20:16

Re: Fensterkontakt mit Alarm auf Handyapp

Beitrag von AndRe5575 »

Steh gerade wieder einmal auf dem Schlauch. Wahrscheinlich ist meine Rule in Summe auch zu kompliziert gedacht :-)
Eigentlich möchte ich nur bei eingeschalteter Überwachung die entsprechenden Benachrichtigungen bekommen.

Meine Rule:

Code: Alles auswählen

rule "Alarm"
when
	Item gContact_Open changed to OPEN
then
    if (Ueberwachung==ON) {
        if(Fenster_Schlafzimmer.state == OPEN) { 
            sendBroadcastNotification("Fenster Schlafzimmer Auf")}

        else if(Fenster_Kueche.state == OPEN) { 
            sendBroadcastNotification("Fenster Küche Auf")}

        else if(Fenster_Wohnzimmer_1.state == OPEN) { 
            sendBroadcastNotification("Fenster Wohnzimmerfenster rechts Auf")}

        else if(Fenster_Wohnzimmer_2.state == OPEN) { 
            sendBroadcastNotification("Fenster Wohnzimmerfenster links Auf")}

        else if(Tuer_Terrasse.state == OPEN) { 
            sendBroadcastNotification("Terassentür Auf")}

        else if(Tuer_Eingang.state == OPEN) { 
            sendBroadcastNotification("Eingangstür Auf")}
    }
end
Ueberwachung hat den Staus ON.

gContact_Open ist eine Gruppe aller Kontakte mit OPEN als Vorrang.
Sobald der Status eines Kontaktes sich auf OPEN ändert, ändert sich entsprechend auch gContact_Open auf OPEN.

Antworten