Hallo Zusammen,
in den letzten Wochen gab es ja immer mal wieder ausfälle der ioBroker Cloud (Free-Version). Aus meiner Vergangenheit mit einer anderen Heimautomatisierungszentrale (Domoticz) war mir bekannt, das man die Alexa-Anbindung auch ohne zusätzliches Modul verwirklichen kann sofern eine Node-Red Instanz läuft.
Mit der hier vorgestellten Lösung lassen sich alle ioBroker-Objekte mit Alexa steuern, ohne das eine Cloud Anbindung notwendig ist. Die Verbindung zwischen Alexa und ioBroker funktioniert direkt über das lokale Netzwerk per UPNP. Per Node-Red lassen sich damit beliebig viele Phillips Hue Geräte emulieren, die direkt mit eurem Echo kommunizieren können.
Als erstes muss über den üblichen Weg (ioBroker-> Adapter -> Instanz hinzufügen) der Adapter "node-red" installiert und anschließend gestartet werden. An der Konfiguration des Adapters muss nichts angepasst werden. Nachdem der Adapter gestartet wurde, ist die Node-Red Oberfläche unter der URL: [http://[IOBrokerIP]:1880]http://[IOBrokerIP]:1880 erreichbar. Das kann allerdings ab Start der Node-Red Instanz 1-2 Minuten dauern (einmalig).
Als nächstes muss das passende Alexa-Modul in ioBroker übernommen werden. Das geht entweder über die Konsole direkt auf eurem ioBroker Server per:
npm install node-red-contrib-alexa-local
oder über die Node-Red Oberfläche. Dort im Menü (rechts oben) auf den Manage Palette gehen.
Dort dann im Reiter "Install" nach node-red-contrib-alexa-local suchen und das Plugin installieren.
Damit haben wir alle notwendigen Voraussetzungen geschaffen um Alexa mit ioBroker-Objekten verbinden zu können. In dem Beispiel hier gehen wir davon aus, das wir eine dimmbare Lampe steuern wollen ( Funktionen: An, Aus, Dimme, Dimme auf X%)
Nun wird eine neuer Flow erstellt (Oben das +) und umbenannt. Um Alexa ein bekannt zu machen benötigt man ein Alexa-Local Input Node. Das befindet sich auf der linken Seite in der Kategorie "Input".
Nachdem der Node auf das Zeichenbrett gezogen wurde muss hier nur noch in den Eigenschaften unter "Device Name" der Name angegeben werden, den Alexa dann erkennen soll.
Wenn man nun oben rechts auf "Deploy" drücken würde und Alexa nach Geräten suchen lassen würde, dann würde Alexa das Gerät auch schon finden, ioBroker würde allerdings nichts tun, da die Verbindung zu dem entsprechenden ioBroker Objekt noch nicht definiert wurde.
Dafür ziehen wir uns als erstes ein ioBroker Output-Node auf unseren Desk.
In den Eigenschaften dieses Nodes muss lediglich als "Topic" die Objekt ID eingetragen werden, die gesteuert werden soll. In diesem Fall handelt es sich um eine Yeelight Deckenlampe. Diese kann über das „power“-Objekt mit den Werten „On“ und „Off“ geschalten werden.
Das ist an der Stelle praktisch, da das Alexa-local Node als Payload „On“ bzw. „Off“ liefert.
Um Alexa mit ioBroker zu verbinden müssen in diesem Fall nur die 2 Nodes miteinander verbunden werden.
Nach einem Klick auf „Deploy“ könnt ihr in der Alexa App nach neuen Geräten suchen und fertig! Das Bad-Licht lässt sich nun An und Aus schalten.
Als nächstes implementieren wir noch die „Dimmen“-Funktion. Dazu gibt es bei der Yeelight Lampe ein Objekt „bright“. Dieses Objekt muss wiederum in ein ioBroker Output Node gepackt werden.
Die Helligkeit übermittelt das Alexa-local Node über das Objekt „msg.bri“ das ioBroker-Node braucht die Information allerdings im Objekt „msg.payload“. Zum Umwandeln benötigen wir eine kleine Funktion.
Dazu einfach ein „function“ – Node aus der rechten Seite ziehen und bearbeiten.
Als Function wird der folgende Code eingetragen:
var newMsg = { payload: msg.bri } ;
return newMsg;
Anschließend müssen die Nodes nur noch miteinander verbunden werden und das Ganze mit „Deploy“ veröffentlicht werden.
Das war auch schon! Die Lampe lässt sich nun auch per Alexa dimmen.
Falls euer zu steuerndes ioBroker-Objekt kein „on“ / „off“ versteht, sondern nur „true“ und „false“, so muss der Flow noch leicht verändert werden:
An das Alexa-Node muss ein „Switch“ angeschlossen werden. In diesem Switch wird an 2 Ausgängen zwischen „on“ und „off“ unterschieden:
Wenn eine der beiden Bedingungen zutrifft liegt an dem entsprechenden Ausgang ein „true“ an. Für den Fall dass das Objekt eingeschalten werden soll ist das OK. Für den „Aus“-Fall muss noch eine kleine Function „False“ zwischen dem Switch und dem ioBroker Node geklemmt werden:
Als Function muss der folgende Code eingetragen werden:
msg.payload = false;
return msg;
Dann einfach noch die Nodes wie im Screenshot oben miteinander verbinden, auf Deploy drücken und fertig!
In diesen Flow ließe sich noch genauso die Dim-Funktion mit realisieren. Das DIM-Function Node müsste zwischen dem „On“-Ausgang des Switch und dem Brightness-ioBrokerNode der Lampe geklemmt werden.
Hier noch ein weiteres Beispiel für Lampen die ein einzelne On bzw. Off-Objekte haben:
Ich hoffe das Ganze ist einigermaßen verständlich. Bei Fragen helfe ich gerne weiter!