Amazon Alexa ist in Verbindung mit openHAB eine tolle Sache. Das ganze Haus lässt sich per Sprache steuern. Leider ist Alexa noch etwas eingeschränkt und es müssen „unnatürliche“ Sätze verwendet werden. Bei Licht ist es kein Problem: „Alexa, schalte das Wohnzimmerlicht an“ ist sogar ziemlich passend. Bei einer Regel, die man per Sprache steuern will, sieht das schon anders aus. Ich habe beispielsweise eine Regel für das Schlafen gehen, bei deren Aufruf alle Lichter ausgehen, der Fernseher ausgeschaltet wird und alle (noch nicht geschlossenen) Rollläden herunterfahren. In openHAB wird die Regel von einem Switch aktiviert. Nun müsste der entsprechende Befehl in Alexa heißen „Alexa, schalte gute Nacht an“. Das hört sich nicht nur komisch an – es geht auch schwer über die Lippen. Mit Alexa Routinen kann das deutlich besser gelöst werden. Bei mir sind zwei Echo Dot im Einsatz.
Mit Alexa Routinen individuelle Befehle erstellen
Am Beispiel der oben beschriebenen „Gute Nacht“ Regel zeige ich wie die Routine am besten umgesetzt wird. Zuerst muss ein Dummy Switch mit Alexa Unterstützung erstellt werden.
1 |
Switch Einschlafen "Gute Nacht" [ "Lighting" ] |
Sobald das erledigt ist, kann die dazugehörige Regel erstellt werden. Diese sieht in meinem Fall so aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
ule "Gute Nacht" when Item Einschlafen received command then if (receivedCommand == ON) { Harmony_Hub_Fernsehen.sendCommand("PowerOff") Thread::sleep(1000) sendCommand(Licht, OFF) Thread::sleep(1000) sendCommand(Rolladen_Haus_Gesamt, DOWN) } end |
Die Regel schaltet den Fernseher aus, das Licht aus und fährt die Rolläden herunter. Ausgelöst wird es vom Dummy Switch. Alexa führt also nur den Befehl „Schalter an“ aus, der Rest passiert in openHAB. So ist man unabhängiger was die Geräte und deren Befehle angeht.
In der Alexa App muss nun die Geräteliste in der Smarthome übersicht wieder aktualisiert werden, damit der neue Schalter „Gute Nacht“ sichtbar wird. Wie du Alexa und openHAB miteinander verknüpfst, erkläre ich in diesem Artikel.
Routine anlegen
In der Alexa App gibt es im Menü den Punkt „Routinen. Dort legst du über den + Button oben rechts eine neue Alexa Routine an. Du wirst zuerst gefragt ob die Routine bei einem bestimmten Befehl oder zu einer bestimmten Uhrzeit ausgeführt werden soll. Hier wählst du Ersteres. Jetzt wird abgefragt wie der Befehl lauten soll. In meinem Fall habe ich „Alexa, bis morgen“ gewählt. Danach gibst du an welche Aktion ausgeführt werden soll. Hierzu wählst du „Smart Home“ aus.
Danach suchst du den neu angelegten Schalter „Gute Nacht“. Du bekommst vorgeschlagen, dass dieser Schalter eingeschaltet wird – mit Ja bestätigen, die Aktion über „hinzufügen“ hinzufügen und am Ende die ganze Routine „erstellen“. Fertig ist die Routine. Es kann ein paar Minuten dauern bis die Routine per Sprachbefehl ausführbar ist. Danach kann die openHAB Regel mit dem Befehl „Alexa, bis morgen“ ausgeführt werden.
Auf diese Art kann sehr im Haus in wesentlich schönerer Sprechweise umgesetzt werden, als es ohne Routine der Fall wäre. Hier einige Beispiele, die ich in meinem Haus umgesetzt habe:
Alexa, wollen wir einen Film schauen?
Fernseher und Sound wird eingeschaltet, die Wohnzimmerbeleuchtung wird eingeschaltet und gedimmt, alle nicht benötigten Lichter werden ausgeschaltet.
Alexa, mach sauber
Startet meinen iRobot Roomba Saugroboter.
Alexa, guten Morgen
Fährt den Rolladen im Schalfzimmer hoch und schaltet den Fernseher auf NTV an.
Alexa, bis nachher
Schaltet alle Lichter aus, wenn ich das Haus verlasse und startet den iRobot Roomba Saugroboter.
Viel Spaß beim Umsetzen der Alexa Routinen 🙂 Ich freue mich auf Feedback und die gefundenen Umsetzungsmöglichkeiten.
Hallo,
woran könnte es liegen, dass meine Routine nicht auf der Alexa startet?
Gruß,
Daniel
Hallo Daniel,
hast du nähere Infos was du wie umgesetzt hast? Eventuell mit Codebeispielen.
Viele Grüße
Patrick
Das Item: String Echo_Wohnzimmer_StartRoutine „Start Routine“ (gAlexa_Wohnzimmer) {channel=“amazonechocontrol:echo:account1:echo1:startRoutine“}
In der Rule: Echo_Wohnzimmer_startRoutine.sendCommand(„Daniel ist da“)
Die Rule funktioniert auch wunderbar mit Commands oder TTS.
Natürlich ist in der App eine Routine mit entsprechendem Namen angelegt, die auch über den Sprachbefehl funktioniert.
UND da habe ich soeben den Fehler entdeckt. Ich habe in der Rule startRoutine klein geschrieben.
Danke! 😀
🙂 hehe, perfekt. Dann viel Spaß mit deiner Routine.
Hey, dein Beitrag ist schon etwas her, hoffentlich antwortest du mir trotzdem 🙂
Ich möchte mir gerne eine Routine erstellen, bei der z.B. jeden Wochentag morgens um 7 das Licht angeht, Diese möchte ich beginnen mit den Worten „Alexa, ich muss wieder arbeiten“. Das ganze soll dann z.B. über mehrere Wochen aktiv bleiben, bis ich sage „Alexa, ich habe Urlaub“.
Lässt sich so ein langfristiges und regelmäßiges Einschalten auch mit der Alexa-OpenHub Kombination lösen?
Liebe Grüße
Hallo Lisa,
klar bekommst du eine Antwort 🙂
Das sollte recht einfach zu lösen sein, indem du in openHAB eine Regel anlegst und diese mit Hilfe eines Dummy Items aktivierst oder deaktivierst.
Im ersten Schritt legst du in einer .items Datei (ich habe eine dummy.items Datei für genau diese Schalter) einen Dummy Switch an.
Switch Licht_Regel "Dummy Switch Regel ["Lighting"]
Dann erstellst du in einer .rules Datei eine passende Regel für das Licht, welches geschaltet werden soll.
rule "Licht unter der Woche"
when
Time cron "0 0 7 ? * MON,TUE,WED,THU,FRI"
then
if (Licht_Regel.state ==ON)
{
Licht.sendCommand(ON)
}
end
In der Alexa App sollte über die Suche der neue Schalter erkannt werden. Diesen kannst du dann ganz normal wie im Artikel beschrieben über die Routine ansprechen.
Die Regel macht dann Folgendes: die Regel löst grundsätzlich immer Montag-Freitag um 07:00 Uhr aus. Jedoch prüft die if Abfrage, ob der Dummy Schalter auf AN steht. Ist das der Fall, dann wird auch tatsächlich das Licht angeschaltet (Licht wäre zu ersetzen durch dein gewünschtes Item, das geschaltet werden soll).
Ich hoffe das hilft dir weiter 🙂
Viele Grüße
Patrick
Hallo, versuche gerade meinen Roomba einzubinden, kannst du mir vielleicht deine Regel posten, damit ich das nachbauen kann? 🙂
Lg
bob
Hallo Bob,
klar, schicke ich dir gerne. Kannst du mit deiner Harmony Fernbedienung deinen iRobot schon starten? Falls nicht, musst du das Gerät erst in der Harmony anlegen. Bei mir war es so, dass die normalen Einstellungen nicht funktioniert haben. Ich habe die Befehle dann über die original iRobot Infrarot Fernbedienung anlernen müssen. Sobald du dann mit deiner Harmony den iRobot steuern kannst, geht es in openHAB weiter.
Zuerst musst du ein entsprechendes Item anlegen, um über die Harmony kommunizieren zu können. Ich habe hierfür eine eigene „harmony.items“ angelegt.
String Harmony_iRobot "iRobot" (gharmony) {channel="harmonyhub:device:HarmonyWohnzimmer:49002326:buttonPress"}
Der Channel wird bei dir anders heißen. Hierzu rufst du http://openhabianpi:8080/rest/channel-types auf, um das passende herauszufinden. Am besten du benutzt Firefox. Dort bekommst du JSON gleich lesbar formatiert.
Nun habe ich noch einen Dummy Switch angelegt, um die Regel zum Einschalten steuern zu können. Diesen Dummy Switch habe ich ebenfalls in der „harmony.items“ hinterlegt.
Switch Harmony_iRobot_Power "iRobot" (gharmony) ["Switchable"]
Das [„Switchable“] ist notwendig, damit Alexa den Switch später findet.
Jetzt nur noch die Regel. Hierfür habe ich wieder eine eigene Datei angelegt: „irobot.rules“.
rule "saugen"
when
Item Harmony_iRobot_Power received command
then
if(receivedCommand==ON)
{
Harmony_iRobot.sendCommand("PowerToggle")
Thread::sleep(300)
Harmony_iRobot.sendCommand("PowerToggle")
}
else if(receivedCommand==OFF)
{
Harmony_iRobot.sendCommand("Dock")
Thread::sleep(300)
Harmony_iRobot.sendCommand("Dock")
}
end
Das wars. Den Rest kannst du wie im Artikel beschrieben umsetzen. Ich hoffe das hilft dir weiter 🙂
Viele Grüße
Patrick