Homematic: Alexa Ausgabe ob Fenster geöffnet ist beim Gehen

Ich habe nun über Homematic folgendes realisiert.
Nachdem ich in meinem letzten Beitrag erklärt habe, wie man dem Homematic-System das sprechen beibringt, kam ich auf folgende Idee:

Wir sagen Alexa immer, dass wir gehen damit das Smart Home sämtliche Geräte ausschaltet.
Dafür habe ich ein Script in einem Programm (das Script habe ich über google gefunden, keine Ahnung woher das nun genau ist), dass alle Geräte innerhalb eines Gewerks ausgeschaltet werden, dieses Programm habe ich über ioBroker an Alexa veröffentlicht.

Nun haben wir viele Räume und vor allem Fenster und diese später im Winter vor dem gehen alle manuell zu kontrollieren, ist sehr nervig.
Deshalb bin ich dabei, alle Fenster und auch Heizungshermostate mit dem Homematic IP easy connect-Set auszurüsten.
Darüber habe ich dann auch die Erkennung, ob irgendwelche Fenster geöffnet sind.

Soweit, so gut

Nun kam ich auf die Idee, Innerhalb des Programms Gehen, könnte ja auch geprüft werden, ob alle Fenster geschlossen sind und das via TTS an Alexa auszugeben.
Dafür habe ich bei Homematic-Guru eine Anleitung + Script gefunden, die eine sehr gute Grundlage hierfür ist.
Ich habe dann also erstmal alles so angelegt, wie das auf der oben verlinkten Seite beschrieben ist.
Anschließend habe ich auch noch eine neue Variable angelegt Namens Anwesenheit Alexa als Logikwert, die über das an Alexa veröffentlichte Programm auf Abwesend geändert wird.
Auf Anwesend wird der Status der Variable geändert, wenn wir über die Fritzbox-Anwesenheitserkennung Anwesend sind (separates Programm).

So sieht nun mein Programm aus:

Bild in Groß

Das heißt, wenn wir Alexa sagen das wir gehen, wird die Variable Alexa Anwesenheit auf Abwesend gesetzt, dieser Status triggert dann das Programm, prüft ob die Variable Ueberwachung Fensterkontakte auf Min. 1 Fenster offen oder Min. 1 Fenster offen 15 Minuten steht, wenn ja, sagt uns das Alexa im Anschluss, dann kann man immer noch in der App nachschauen, welches und das zu machen, im Sommer ist es ja nicht ganz so schlimm 🙂

Homematic: TTS mit Alexa

Dank einer Anleitung von Heupel’s Blog konnte ich heute auch erfolgreich eine TTS Ausgabe von Homematic auf meinen Alexa’s realisieren.

Da das Script etwas bescheidend eingefügt ist (Code-Formatierung), möchte ich das Script mal im RAW-Format veröffentlichen (Alle Rechte liegen bei Heupel).
Wenn man das Script so per Copy+Past Methode in nano reinkopiert, wird daraus ein Python-Technischer Alptraum.
Benötigt wird Pyhton 2.7

Weitere Voraussetzungen:
1) Alexa Remote Control – Script: Link
Hier die Plain Version herunterladen
2) Python Modul bottle: pip install bottle
3) speechconnector.py: Link
Bei dieser Datei muss noch das .txt entfernt werden

Ordnerstruktur:
Ich habe mir auf meinem Pi unter /root/ einen Ordner “alexa” angelegt,
/root/alexa
In dem alle Daten hierzu gespeichert sind, sprich:

alexa_daemon.sh
alexa_remote_control_plain.sh
speechconnector.py

Der alexa_daemon.sh ist recht unauffällig, da startet der Webserver speechconnector.py in einer screen session, das ganze in dann unter /etc/rc.local eingetragen, damit diese automatisch startet:
screen -dmS AlexaDaemon python /root/alexa/speechconnector.py

In der alexa_remote_control_plain.sh muss noch die eigene Amazon E-Mail Adresse und das Kennwort eingetragen werden, zusätzlich sollte man es einmal ausführen, damit die Device Liste und der Cookie angelegt wird.

Im Anschluss kann man die Datei mal aufrufen via:
python ./speechconnector.py
Die Terminalausgabe sollte dann wie folgt aussehen:

Kommen wir nun zum Homematic Script.
Es werden hier 2 Variablen benötigt:
1) Alexa.Function als Werteliste – ich habe hier “Speak” und “Silence” als Werte definiert
2) Alexa.Speak als Zeichenkette, hier wird später der Text eingegeben.

Bild in Groß

Zusätzlich muss noch ein Programm erstellt werden, welches getriggert wird, wenn die Systemvariable Alexa.Function auf Speak gesetzt wird.
Wir nennen dieses Programm mal – Alexa.Speak
Mit diesem Script wird die Variable Alexa.Speak ausgelesen und als Variable an den Aufruf von dem bottle Server gesendet.
Das sieht wie folgt aus:

Bild in Groß

Das dazugehörige Script findet ihr hier: Link

Soweit geschafft, nun hat man alle vorraussetzungen erfüllt, man kann nun in einem Programm (z.B.: Waschmaschine ist fertig) das ganze ausführen:
In meinem Fall sieht das so aus:

Bild in Groß

Wenn die Waschmaschine aus ist (via TP-Link HS110, Wert: Leistung < 5 Watt für 5 Minuten), dann soll das ganze via Alexa kommuniziert werden.

Wenn man verschiedene Alexa ansteuern möchte, kann man einfach die Datei speechconnector.py kopieren, neuen Daemon starten mit anderem Port (z.B.: 8081, 8082, usw…) und in der kopierten Datei das Device ändern, und das Programm in Homematic kopieren und dort dann auch den Port entsprechend abändern, geht villeicht auch schöner wenn man das Zielgerät als Variable an Python übergeben kann, aber dafür reichen meine Kenntnisse aktuell noch nicht aus 😉