Fensterkontakt mit Alarm auf Handyapp
Moderator: seppy
-
- Beiträge: 67
- Registriert: 8. Jun 2020 20:16
Fensterkontakt mit Alarm auf Handyapp
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
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
Nicht kürzer, aber eleganter:
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:
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 AntwortCode: 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
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
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...
- sihui
- Beiträge: 1827
- Registriert: 11. Apr 2018 19:03
Re: Fensterkontakt mit Alarm auf Handyapp
openHAB3 mit Zwave, Alexa, ESPEasy, MQTT, Logitech Harmony, Philips HUE und ZigBee Hardware auf Proxmox VE.
-
- Beiträge: 67
- Registriert: 8. Jun 2020 20:16
Re: Fensterkontakt mit Alarm auf Handyapp
Danke für den Hinweis.
Edit*
Okay hatte ich Anfangs falsch verstanden. Sieht sehr Umfangreich aus. Denke das wird entsprechend sicher nicht schnell gehen.
Edit*
Okay hatte ich Anfangs falsch verstanden. Sieht sehr Umfangreich aus. Denke das wird entsprechend sicher nicht schnell gehen.
- sihui
- Beiträge: 1827
- Registriert: 11. Apr 2018 19:03
Re: Fensterkontakt mit Alarm auf Handyapp
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.
-
- Beiträge: 67
- Registriert: 8. Jun 2020 20:16
Re: Fensterkontakt mit Alarm auf Handyapp
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?
Es gab doch auch die Möglichkeit, dass z.B. die FritzBox dann intern eine Nummer wählt oder?
- udo1toni
- Beiträge: 13869
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Fensterkontakt mit Alarm auf Handyapp
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.
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.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 67
- Registriert: 8. Jun 2020 20:16
Re: Fensterkontakt mit Alarm auf Handyapp
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.
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.
- udo1toni
- Beiträge: 13869
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Fensterkontakt mit Alarm auf Handyapp
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
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
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 67
- Registriert: 8. Jun 2020 20:16
Re: Fensterkontakt mit Alarm auf Handyapp
Habe es nun wie vorgeschlagen gelöst. Simpler geht es wirklich nicht. Kann man eigentlich alte Benachrichtigungen in der App löschen?
-
- Beiträge: 67
- Registriert: 8. Jun 2020 20:16
Re: Fensterkontakt mit Alarm auf Handyapp
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:
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.
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
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.