Sprachausgabe

HomeMatic Sprachausgabe mit Alexa, ioBroker und JavaScript

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.GeraetWerteliste
Echo.TextZeichenkette
Echo.VersandLogikwert
Folgende Systemvariablen müssen angelegt werden

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 Beitrag
var 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

Variablen zur Ausgabe von Informationen
Variablen zur Ausgabe von Informationen

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 🙂

Anlegen des Programms für die Sprachausgabe
Anlegen des Programms für die Sprachausgabe

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:

Virtuelle Kanäle anzeigen
Virtuelle Kanäle anzeigen

Wenn du nun das Fenster geöffnet hast, kannst du in der Übersicht der Systemvariablen sehen, das die entsprechenden Werte gesetzt worden sind.

Variablen wurden gesetzt
Variablen wurden gesetzt

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.

Datenpunkte der HomeMatic Variablen
Datenpunkte der HomeMatic Variablen

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.

Anlegen des Programms für die Sprachausgabe mit Auslesen von Werten
Anlegen des Programms für die Sprachausgabe mit Auslesen von Werten

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);
     }
 });

2 Gedanken zu „HomeMatic Sprachausgabe mit Alexa, ioBroker und JavaScript

  1. Pingback: Dynamische Alexa-Ausgabe auf verschiedene Echos mit ioBroker mit JavaScript | Kreyenborg.koeln

  2. Pingback: ioBroker Skript um zu prüfen, ob die aktuelle Uhrzeit innerhalb eines bestimmten Zeitfensters liegt | Kreyenborg.koeln

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.