Alexa-Anbindung ohne Cloud per Node-Red

  • 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:

    Code
    1. 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.

    hg2Acab.png



    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".

    QoTRfab.png



    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.

    2GAugab.png


    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.

    yYCRaab.png



    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.

    eh1vgab.png



    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.

    Q60vdab.png



    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.

    OyIteab.png



    Als Function wird der folgende Code eingetragen:


    Code
    1. var newMsg = { payload: msg.bri } ;
    2. return newMsg;

    Cpeobab.png



    Anschließend müssen die Nodes nur noch miteinander verbunden werden und das Ganze mit „Deploy“ veröffentlicht werden.

    LTW9bab.png



    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:

    Qyrtfab.png



    An das Alexa-Node muss ein „Switch“ angeschlossen werden. In diesem Switch wird an 2 Ausgängen zwischen „on“ und „off“ unterschieden:

    E4K9bab.png



    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:

    AXqtaab.png



    Als Function muss der folgende Code eingetragen werden:

    Code
    1. msg.payload = false;
    2. 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:


    8SBZeab.png



    Ich hoffe das Ganze ist einigermaßen verständlich. Bei Fragen helfe ich gerne weiter!

  • Hallo,

    ich habe nach der Anleitung eine Lampe Alexa hinzu gefügt. Ist es normal das mir jetzt die Lampe als Dimmbar dargestellt wird obwohl ich die als nur schaltbar eingestellt habe.


    schimmer-media.de/index.php?attachment/202/

    ja, das ist normal. Das Node-Red Plugin simuliert eine Phillips Hue Lampe. Die sind eben immer dimmbar. Wenn dich das stört könnte man auch eine Wemo-Steckdose simulieren. Dann würde nur An und Aus in der Alexa-App angezeigt werden.

  • Ok, wie kann ich denn umstellen auf Wemo? Ich kann aber wahrscheinlich nur das eine, also entweder Hue odee Wemo? Ich habe halt Birnen die ich dimmen kann und halt auch welche die das nicht können, oder ist das egal? Wenn ich über Alxa die Lampe anschalte, wird die dann auf 100% geschaltet und wenn ich jetzt sage auf 50% verändert sich nichts?

  • Ok, wie kann ich denn umstellen auf Wemo? Ich kann aber wahrscheinlich nur das eine, also entweder Hue odee Wemo? Ich habe halt Birnen die ich dimmen kann und halt auch welche die das nicht können, oder ist das egal? Wenn ich über Alxa die Lampe anschalte, wird die dann auf 100% geschaltet und wenn ich jetzt sage auf 50% verändert sich nichts?

    Richtig, der Dimm-Befehl wird einfach ignoriert, wenn du im Flow nichts dazu hinterlegt hast. Das ist also eher ein kosmetisches Problem. Du kannst die Hue-Devices und die Wemo-Devices auch wild mischen-> vollkommen egal.

    Zur Emulation einer Wemo-Steckdose benötigst du das Node-Red Wemo-emulator plugin. Das funtkioniert am Ende genauso, nur das du ein anderes Noder als Input verwendest.

  • Super Anleitung! Danke dafür. Leider findet alexa keine neuen Geräte. Muss ich den Cloudadapter deaktivieren, wenn ich node Red nutzen möchte?