HomeMatic ist die Grundbasis, die die Funkverbindung zu den Geräten von eQ3 herstellt. Durch die Installation von Plugins kann die Zentrale ein wenig erweitert werden – jedoch lassen sich keine übergreifenden Plugins wie bei ioBroker installieren. Dazu ist das System auch nicht konzipiert. Daher verwenden wir hier den ioBroker, der viele Adapter mitbringt, auf die wir die Sprachausgabe weiterleiten können. Somit steht der Ausgabe von HomeMatic Variablen nichts im Wege!
Hinweis:
Dieser Beitrag baut auf einen vorherigen Beitrag auf, in dem bereits der Alexa Adapter in ioBroker installiert und ein Grund-Skript erstellt wurde.
Vorbereitungen auf der HomeMatic
Auf der HomeMatic legen wir zuerst 3 Systemvariablen an.
name: | Typ: |
---|---|
Echo.Geraet | Werteliste |
Echo.Text | Zeichenkette |
Echo.Versand | Logikwert |
In der Werteliste kannst Du alle Echos, die Du verwenden möchtest, mit Namen auflisten. Bitte achte darauf, das die Reihenfolge mit der Werteliste des Arrays aus dem vorherigen Beitragvar echos = ['kein Gerät','Fire TV Cube','Echo Dot Küche','Echo Dot Schlafzimmer','Echo Dot Flur','Wohnung','Überall'];
überein stimmt.
Der Logikwert von Echo.Versand
lautet: wahr = sprachen, nicht wahr = Standby
Anlegen eines Programms auf der HomeMatic
Als Beispiel dient hier ein einfaches Programm, welches auf die Öffnung eines Fensters reagiert. Ich habe hier den Echo “Fire TV Cube” gewählt, da dieser im Wohnzimmer steht und ich das Fenster im Wohnzimmer öffne 🙂
Wichtig ist das Gerät HM-RCV-50 BidCoS-RF:50 am Ende einzufügen. Dies ist die Trigger-Funktion (Auslöse-Funktion) für ioBroker, um neue Daten von der HomeMatic abzuholen. Dies geschieht normalerweise nämlich nur alle 30 Sekunden!
Solltest Du das Gerät nicht finden können, so betätige bei der Gerätseauswahl einmal die Schaltfläche:
Wenn du nun das Fenster geöffnet hast, kannst du in der Übersicht der Systemvariablen sehen, das die entsprechenden Werte gesetzt worden sind.
Vorbereitungen für das Skript in ioBroker
Im vorherigen Beitrag haben wir bereits das dynamische Skript angelegt, welches Ausgaben auf Alexa tätigt. Damit nun die Ausgaben von HomeMatic auch auf Alexa ausgegeben werden, benötigen wir ein zusätzliches Skript, welches das bereits angelegte Skript anspricht. Zuerst aber solltest du den ReGa-Adapter neu starten, damit die eben angelegten Variablen auch ihre Datenpunkte erhalten.
Jetzt wirst Du, wenn Du nach “Echo.” suchst, die passenden 3 Datenpunkte finden. Hier sind die ID’s der Datenpunkte wichtig, da wir hiermit weiterarbeiten.
Skript in ioBroker anlegen
Das folgende Skript kann ruhig im common Bereich angelegt werden, da es keine Funktion enthält, auf die global zugegriffen wird.
// var Geraet aus HomeMatic var geraet_dp = "hm-rega.0.3118"; // var Text aus HomeMatic var text_dp = "hm-rega.0.3119"; // var Versand aus HomeMatic var versand_dp = "hm-rega.0.3120"; on({id: versand_dp, change: "ne"}, function (obj) { // Prüfen, ob Versand auf "sprechen" steht if (obj.state.val==true) { // Hole Text aus Datenpunkt var text = getState(text_dp).val; // Hole Gerät aus Datenpunkt var echo = getState(geraet_dp).val; // Alexa Ausgabe Alexa_sprechen(echo,text); // Alle Werte zurücksetzen setState(geraet_dp,0); setState(text_dp,''); setState(versand_dp,false); } });
Sobald Du das Skript abgespeichert und “Skript ausführen” betätigt hast, sollte auch direkt eine Ausgabe erfolgen, da ioBroker ja immer noch die Werte gespeichert hat und der Versand immer noch auf true (wahr) steht. Danach werden die Variablen zurückgesetzt und wieder zu HomeMatic übermittelt. Sollte ein Fehler erscheinen, dass “Alexa_Sprechen” nicht gefunden werden kann, so stelle bitte sicher, das Du meinen
vorherigen Beitrag gelesen und umgesetzt hast 🙂
Ausgabe von Werten der HomeMatic Geräte
Um den Wert von einem Gerät an Alexa weiterzuleiten, benötigst Du ein Skript, welches die Werte ausliest. Dies lässt sich leider nicht mit den normalen Blöcken von HomeMatic realisieren.
Ich verwende hier ein Beispiel, welches den neu eingestellten Wert des Heizkörperthermostats ausgibt.
Um nun die Werte aus dem Heizkörperthermostat auslesen zu können, benötigt man den Übertragungsstandard(Bid-Cos-RF oder HmIP), die Seriennummer des Gerätes und den entsprechenden Kanal (hier Kanal 4) und den Datenpunkt in HomeMatic (die Datenpunkte kannst Du hier herunterladen).
! Lese Soll-Temperatur aus #################################### ! Hole Temperatur aus dem Gerät in einen String mit einer Nachkommastelle var soll_temp = dom.GetObject("BidCos-RF.KEQ1041939:4.SET_TEMPERATURE").Value().ToString(1); ! Temperatur in Komma statt Punkt umschreiben soll_temp = soll_temp.Replace('.',','); var AText = "Die eingestellte Temperatur im Wohnzimmer beträgt: " # soll_temp # " Grad!"; ! Ansage für Alexa dom.GetObject('Echo.Text').State(AText); ! Gerät 1 'Fire TV Cube' dom.GetObject('Echo.Geraet').State(1); ! Versand auf true stellen dom.GetObject('Echo.Versand').State(true); ! Trigger für ioBroker auslösen ! dom.GetObject("BidCos-RF.BidCoS-RF:50.PRESS_SHORT").State(1);
Nun solltest Du beim Verändern der Soll-Temperatur eine Sprachausgabe von Alexa erhalten, die Dir die aktuell eingestellte Temperatur mitteilt.
Erweiterung des Skripts in ioBroker um einen Uhrzeitbereich
Schön sind die Ansagen von Alexa, wenn man sie auch hören kann – in der Nacht möchte man jedoch gerne schlafen und nicht durch eine Stimme geweckt werden, die einem die derzeit eingestellte Temperatur mitteilt.
// var Geraet aus HomeMatic var geraet_dp = "hm-rega.0.3118"; // var Text aus HomeMatic var text_dp = "hm-rega.0.3119"; // var Versand aus HomeMatic var versand_dp = "hm-rega.0.3120"; on({id: versand_dp, change: "ne"}, function (obj) { // Prüfen, ob Versand auf "sprechen" steht if (obj.state.val==true) { // Hole Text aus Datenpunkt var text = getState(text_dp).val; // Hole Gerät aus Datenpunkt var echo = getState(geraet_dp).val; // Generiere Datum var d = new Date(); // Hole Stunde var hour = d.getHours(); // Ausgabe von Text zwischen 8 Uhr morgens und 22 Uhr abends; if (hour>8 && hour<22) { Alexa_sprechen(echo,text); } else { log ("Alexa darf nicht zwischen 22 Uhr und 8 Uhr sprechen!"); } // Alle Werte zurücksetzen setState(geraet_dp,0); setState(text_dp,''); setState(versand_dp,false); } });
Mit dieser Änderung spricht Alexa die Texte, die aus HomeMatic kommen, nur in der Zeit von 8 bis 22 Uhr.
Durch meinen neuen Beitrag lässt sich das Zeitfenster auch anders anpassen, wenn man dieses Skript global verwendet.
// var Geraet aus HomeMatic var geraet_dp = "hm-rega.0.3118"; // var Text aus HomeMatic var text_dp = "hm-rega.0.3119"; // var Versand aus HomeMatic var versand_dp = "hm-rega.0.3120"; on({id: versand_dp, change: "ne"}, function (obj) { // Prüfen, ob Versand auf "sprechen" steht if (obj.state.val==true) { // Hole Text aus Datenpunkt var text = getState(text_dp).val; // Hole Gerät aus Datenpunkt var echo = getState(geraet_dp).val; // Ausgabe von Text zwischen 8 Uhr morgens und 22 Uhr abends; if (Zeitbereich("08:00:00", "22:00:00")) { Alexa_sprechen(echo,text); } else { log ("Alexa darf nicht zwischen 22 Uhr und 8 Uhr sprechen!"); } // Alle Werte zurücksetzen setState(geraet_dp,0); setState(text_dp,''); setState(versand_dp,false); } });
Habe dein Script abgewandelt auf ein Fenster Kontakt.
Prüfe in der HomeMatic ob das Fenster offen ist.
Im Script “Fenster_
Hallo Ingolf,
freut mich, wenn alles funktioniert hat 🙂
GFruß,
Stephan
Pingback: ioBroker Skript um zu prüfen, ob die aktuelle Uhrzeit innerhalb eines bestimmten Zeitfensters liegt | Kreyenborg.koeln
Pingback: Dynamische Alexa-Ausgabe auf verschiedene Echos mit ioBroker mit JavaScript | Kreyenborg.koeln