Mit dem Raspberry Pi kann kann man so ziemlich alles steuern, was man sich so vorstellen kann. Doch wie wäre es nun, wenn man mit Hilfe eines Amazon Echo Lautsprechers bzw. über Alexa diese Steuerungsaufgaben noch zusätzlich oder primär über die Sprache anstoßen könnte? Wir haben uns darüber Gedanken gemacht und wollen Euch nun die fertige Lösung dafür in dieser kleinen Anleitung zeigen. Doch bevor wir mit dem HowTo beginnen, die Punkte – welche für uns wichtig waren.
Aufgabenstellung:
– Alexa und RasPi (Raspberry Pi) direkt über einen Skill verbinden ohne einen eigenen Skill zu programmieren
– keine Verwendung von speziellen Schlagworten wie z.B. „trigger“ oder den Devicenamen
Lösungsansatz:
Wir simulieren auf dem Raspberry Pi „WeMo“ Endgeräte. Im speziellen einen WeMo Switch – dies ist eine Steckdose die es im Handel zu kaufen gibt und welche direkt von der Amazon App als „Endgerät / Schaltbare Steckdose“ gefunden wird. Bis zu 16 dieser Endgeräte lassen sich so virtuell auf dem Raspberry Pi erzeugen und mit Aufgaben bzw. Steuerungen hinterlegen. Wir ordnen hier im Schritt 1 den Befehlen ganz einfache Web-Aufrufe zu über welche man weitere Aktionen auslösen könnte. Im Schritt 2 binden wir danach die Möglichkeit ein, direkte Befehle auf der Konsole des Raspberry abzusetzen. Schon hier wäre es dann theoretisch möglich GPIO Pins direkt anzusprechen und darüber externe Aktionen auszulösen. Die einfachste Anwendung ist hier wohl ein Relais anzusprechen, welches dann direkt diverse Verbraucher anschalten und ausschalten kann. Wer in seine Automatisation noch mehr Funktionalität bringen möchte, kann wie wir hier zeigen auch weitere Pyhton Scripte einbinden, welche dann wiederum spezielle Dinge auslösen. So wäre es z.B. denkbar einen Ausgang mittels Script zum Taster zu machen, in dem man das Relais nur für eine bestimmte Zeit anzieht. Tja, und dann sind wir bei den Ausgängen wieder ganz offen und mittels dieser Schaltung zum Beispiel der Flurbeleuchtung einen weiteren Taster hinzufügen, welcher das Stromstoßrelais anziehen lässt. Und schon wäre eine ganz normale Beleuchtung in Alexa integriert. Man könnte jedoch dann auch solch eine Tasterfunktion einfach mit der Fernbedienung seines Garagen-Tor-Antriebs verbinden und schon könnte Alexa das Garagentor öffnen. Wie ihr sieht die Möglichkeiten sind danach ziemlich unbegrenzt. Denn in einem Script welches am Raspberry Pi startet, lässt sich so ziemlich alles unterbringen. So wäre es auch möglich Bluetooth Kommandos oder IR Schnittstellen auf das Kommando von Alexa hin zu steuern.
So, nun aber genug der vielen Worte!
Legen wir los!
Die Basis – ein Raspberry Pi mit einem frisch installierten Jessie LinuxLite System. Ich versuche meine Anleitungen immer möglichst so zu schreiben, dass diese direkt nach der Basisinstallation genutzt werden können und die Installation von weiteren Paketen einfach mal als Voraussetzung angenommen wird.
Welchen Pi ihr hier verwendet – spielt im Grunde keine Rolle. Wobei ich persönlich wahrscheinlich wegen der integrierten WLAN Unterstützung zum RPi 3 oder den aktuellen Raspberry Pi Zero greifen würde.
Daher fangen wir auch ganz vorne an:
Vorbereitungen des Pis
sudo apt-get update sudo apt-get upgrade sudo apt-get install git sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \ libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \ xz-utils tk-dev
Installation von Python 3.6.1 am Raspberry Pi mittels pyenv
PYENV ist ein Python Versions-Management-Tool, welches uns erlaubt, mehrere Python Versionen gleichzeitig zu betreiben und zu nutzen. Dieser Weg über dieses Tool muss nicht sein – ist aber wegen der einfacheren Handhabung und besseren Übersichtlichkeit kein falscher Ansatzpunkt.
sudo install -o $(whoami) -g $(whoami) -d /opt/pyenv git clone https://github.com/yyuu/pyenv /opt/pyenv echo 'export PYENV_ROOT="/opt/pyenv"' >> ~/.bashrc echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc echo 'eval "$(pyenv init -)"' >> ~/.bashrc source ~/.bashrc pyenv install 3.6.1
Nach dem letzten Kommando könnt ihr nun einen Kaffee trinken. Denn dieser nimmt etwas Zeit in Anspruch.
Fauxmo Installation
Fauxmo ist das Script auf dem der ganze Zauber beruht. Dieses ist für die Erstellung der virtuellen WeMo Geräte zuständig und hält die Kommunikation zu Alexa aufrecht.
"$(pyenv root)"/versions/3.6.1/bin/python3.6 -m pip install fauxmo
Die Installation liegt nun hier:
"$(pyenv root)"/versions/3.6.1/bin/fauxmo
Konfiguration erstellen
Jetzt sind wir schon fast durch und können mit der Konfiguration der Switche beginnen. Dafür legen wir uns ein Konfigurationsfile im Home Verzeichnis (/home/pi) des normalen Pi Nutzers ab. Ihr könnt hier natürlich auch jedes andere Verzeichnis wählen, müsst dann eben die Pfade und Aufrufe in den weiteren Schritten dieser Anleitung anpassen.
Config File erstellen:
cd ~ sudo nano config.json
In diese File tragen wir folgendes ein:
{ "FAUXMO": { "ip_address": "auto" }, "PLUGINS": { "SimpleHTTPPlugin": { "DEVICES": [ { "port": 12340, "on_cmd": "http://google.de", "off_cmd": "http://google.de", "method": "GET", "name": "Test" } ] } } }
Dies erstellt uns nun einen virtuellen Switch mit dem Namen Test.
Möchte man mehrere Switche erstellen, so kopiert man einfach den ersten, erhöht die Portnummer um einen Zähler – ändert den Namen und fügt dies getrennt mittels Komma ein.
Beispiel:
{ "FAUXMO": { "ip_address": "auto" }, "PLUGINS": { "SimpleHTTPPlugin": { "DEVICES": [ { "port": 12340, "on_cmd": "http://google.de", "off_cmd": "http://google.de", "method": "GET", "name": "Test" }, { "port": 12341, "on_cmd": "http://google.de", "off_cmd": "http://google.de", "method": "GET", "name": "Test2" } ] } } }
Jetzt starten wir das Script um es zu testen:
"$(pyenv root)"/versions/3.6.1/bin/python3.6 -m fauxmo.cli -c /home/pi/config.json -vvv
Jetzt könnt ihr in der Alexa App die nach den Endgeräten suchen und diese sollten dort gelistet werden.
Alexa App -> Smarthome –> Geräte –> Suche
oder einfach nur per Sprache!
Alexa – suche nach neuen Geräten.
Diese Endgeräte sollten dann in der App auftauchen1
STRG+C beendet das Script.
Solltet ihr hier nun Probleme haben, wisst ihr warum wir nun den Autostart definieren!
Autostart:
crontab -e
Folgende Zeile einfügen:
@reboot /opt/pyenv/versions/3.6.1/bin/python3.6 -m fauxmo.cli -c /home/pi/config.json -vvv
Neustart ausführen und testen!
So jetzt könnten wir mit dieser Konfiguration Dinge über URLs oder HTTP steuern!
Möchten wir die GPIOs über ALexa ansteuern, so müssen wir jetzt noch etwas Hand anlegen!
Zuerst müssen wir die GPIO Unterstützung installieren
sudo apt-get install python-dev sudo apt-get install python-rpi.gpio
Nun legen wir unsere Python Scripte zur Aufgabensteuerung an:
Ein Script startet unsere LED und das zweite Script schaltet die LED wieder ab.
Hier könnte man dann später natürlich auch ein Relais mit dem Raspberry Pi verbinden, welches diverse Schaltaufgaben übernimmt.
Info: Hier könnte man die GPIOs auch direkt aus dem Konfigurationsfile heraus starten. Aber ich gehe bewusst den Weg über die Python Scripte, da man dabei sieht, wie man hier vorgehen muss.
Nutzerverzeichnis home/pi – wir erstellen das File um ein GPIO anzuschalten.
cd ~ sudo nano test-an.py
Inhalt:
import RPi.GPIO as GPIO import time GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) GPIO.setup(4, GPIO.OUT) GPIO.output(4,True)
…und nun das gleiche Spiel um den Ausgang auf Low / Aus zu setzen.
sudo nano test-aus.py
Inhalt:
import RPi.GPIO as GPIO import time GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) GPIO.setup(4, GPIO.OUT) GPIO.output(4,False)
Wer möchte kann diese Scripte nun mittels einer LED und folgendem Kommando testen:
python test-an.py python test-aus.py
Wir verwenden dafür Ground und den GPIO Port 4.
—> Übersicht Raspberry Pi Pins
Die LED sollte nun ein- und ausgeschalten werden.
Damit unsere Konfiguration die Befehle auch direkt auf der Kommandozeile ausführen kann, müssen wir uns noch eine Erweiterung installieren.
CommandlinePlugin einrichten
sudo nano commandlineplugin.py
Folgender Inhalt:
"""restapiplugin.py Runs a `shlex`ed command using `subprocess.run`, keeping the default of `shell=False`. This is probaby frought with security concerns, which is why this plugin is not included by default in `fauxmo.plugins`. By installing or using it, you acknowledge that it could run commands from your config.json that could lead to data compromise, corruption, loss, etc. Consider making your config.json read-only. If there are parts of this you don't understand, you should probably not use this plugin. If the command runs with a return code of 0, Alexa should respond prompty "Okay" or something that indicates it seems to have worked. If the command has a return code of anything other than 0, Alexa stalls for several seconds and subsequently reports that there was a problem (which should notify the user that something didn't go as planned). Note that `subprocess.run` as implemented in this plugin doesn't handle complex commands with pipes, redirection, or multiple statements joined by `&&`, `||`, `;`, etc., so you can't just use e.g. `"command that sometimes fails || true"` to avoid the delay and Alexa's response. If you really want to handle more complex commands, consider using this plugin as a template for another one using `os.system` instead of `subprocess.run`, but realize that this comes with substantial security risks that exceed my ability to explain. """ from functools import partialmethod # type: ignore import shlex import subprocess from fauxmo.plugins import FauxmoPlugin class CommandLinePlugin(FauxmoPlugin): """Fauxmo Plugin for running commands on the local machine.""" def __init__(self, name: str, port: int, on_cmd: str, off_cmd: str) \ -> None: """Initialize a CommandLinePlugin instance. Args: name: Name for this Fauxmo device port: Port on which to run a specific CommandLinePlugin instance on_cmd: Command to be called when turning device on off_cmd: Command to be called when turning device off """ self.on_cmd = on_cmd self.off_cmd = off_cmd super().__init__(name=name, port=port) def run_cmd(self, cmd: str) -> bool: """Partialmethod to run command. Args: cmd: Will be one of `"on_cmd"` or `"off_cmd"`, which `getattr` will use to get the instance attribute. """ command_str = getattr(self, cmd) shlexed_cmd = shlex.split(command_str) process = subprocess.run(shlexed_cmd) return process.returncode == 0 on = partialmethod(run_cmd, "on_cmd") off = partialmethod(run_cmd, "off_cmd")
Prima – die Konfiguration ist nun fertig!
Jetzt ändern wir unser Konfigurations-File wie folgt ab:
sudo nano config.json
Inhalt:
"FAUXMO": { "ip_address": "auto" }, "PLUGINS": { "CommandLinePlugin": { "path": "/home/pi/commandlineplugin.py", "DEVICES": [ { "name": "test", "port": 49915, "on_cmd": "python /home/pi/test-an.py", "off_cmd": "python /home/pi/test-aus.py" } ] } } }
Jetzt starten wir den Raspberry neu und in der Zwischenzeit öffnen wir unsere Alexa App und entfernen die Geräte vom ersten Test. Hat der RasPi neu gebootet, wir eine erneute Suche nach Geräten durch geführt und siehe da – nun sollte erneut ein Test zu finden sein.
Wenn ihr nun sagt:
Alexa schalte „test“ ein
–> wird die LED zu leuchten beginnen
und wenn ihr sagt..
Alexa schalte „test“ aus
–> wird die LED erlöschen
Wir haben es geschafft!
Unsere Alexa steuert nun die Raspberry Pi Ausgänge wie wir es wünschen an!
Viel Spaß bei der Umsetzung!!
Fazit:
Diese Anleitung bietet Euch eine gute Grundlage für die Steuerung von Aufgaben mittels Alexa auf einem Raspberry Pi. Im Grunde kann man nun damit wirklich fast alles damit anstellen, was man mit einen umsetzen kann. Denn jeder Befehl ..oder jedes weitere Script, kann entweder direkt über die Command Line oder dann eben indirekt über ein Python Script aufgerufen werden.
Tags:
- google home steuert raspberry pi
- rasperry pi mit alex verbinden
- alexa integration raspberry pi
- Alexa Befehl und raspberry startet
- volumio alexa plugin
Hey,
vielen dank für deine Anleitung.
Kurze Frage:
Nach speicher und aufrufen des commandlineplugin.py schmeißt der mir den Fehler: „expected an indeted block“.
Hattest du den auch, und magst mir sagen wie du den behoben hast?
Gruß J
hi,
>>Nach speicher und aufrufen des commandlineplugin.py schmeißt der mir den Fehler: „expected an indeted block“.
>>Hattest du den auch, und magst mir sagen wie du den behoben hast?
Selbes Problem bei mir – gibt es dafür eine Lösung?
mir schmeißt er ständig die meldung
>>ValueError: unknown url type: ‚python /home/pi/test3.py‘
an den Kopf
hab das commandllineplugin von hier genommen:
https://github.com/n8henrie/fauxmo-plugins/blob/master/commandlineplugin.py
und dann in config.json mit python3 /home/…py aufgerufen
damit gehts bei mir.
Danke für die Anleitung!
Nach
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \ libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \ xz-utils tk-dev
Bekomme ich folgende Fehler:
Paketlisten werden gelesen… Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen…. Fertig
E: Paket libreadline-dev kann nicht gefunden werden.
E: Paket xz-utils kann nicht gefunden werden.
Wenn ich dann trotzdem versuche Python zu installieren:
pyenv install 3.6.1
Downloading Python-3.6.1.tar.xz…
-> https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz
Installing Python-3.6.1…
WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
WARNING: The Python readline extension was not compiled. Missing the GNU readline lib?
ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?
Please consult to the Wiki page to fix the problem.
https://github.com/pyenv/pyenv/wiki/Common-build-problems
BUILD FAILED (Raspbian 9.1 using python-build 1.1.5-44-g85a66a9)
Inspect or clean up the working tree at /tmp/python-build.20171204111610.1359
Results logged to /tmp/python-build.20171204111610.1359.log
Last 10 log lines:
upgrade) ensurepip=“–upgrade“ ;; \
install|*) ensurepip=““ ;; \
esac; \
./python -E -m ensurepip \
$ensurepip –root=/ ; \
fi
Collecting setuptools
Collecting pip
Installing collected packages: setuptools, pip
Successfully installed pip-9.0.1 setuptools-28.8.0
Hat jemand einen Tipp für mich? Danke!
Hi,
tolle Anleitung!
Vielen Dank dafür!
Leider findet Alexa mein virtuelles Device nicht.
Ich habe das config file (sieht genauso aus wie hier im Beispiel) erstellt, das Skript läuft auch (sowohl manueller Start und Autostart).
Wenn ich in der Alexa App (iOS) nach neuen Smart Home Geräten suche, bekomme ich nur die Meldung,
dass die Suche fehlgeschlagen ist (natürlich sind sowohl der Raspberry Pi, als auch das Iphone im gleichen WLAN).
Muss ich zuvor das Wemo Skill aktivieren? Das hat nämlich bei mir nicht geklappt, da man die MAC Adresse eines Wemo devices eingeben muss.
Kann das an Problem an irgendwelchen Sicherheitseinstellungen liegen?
Bin für jeden Rat dankbar.
Vielen Dank und viele Grüße
Daniel
Hallo!
Vorerstich bin absoluter laie, habe mich aber in ein paar Grundfunktionen eingearbeitet.
Bei mir klappt dein Turtorial leider nicht. Ich bekomme immer „syntaxfehler“
Muss das Jessie Linux installoert sein oder geht auch Raspian?
Hii,
Ich habe auch alles exakt nach Anleitung gemacht, nur geht bei mir die LED nicht an auch wenn ich das Python Script manuell ausführe :(
Vielen Dank! Hat super geklappt. @Melf, einen Syntaxfehler bekommst du wenn du das Script nicht mit der korrekten Python Version ausführst.
Hi,
ich bin auf der Suche nach einer Anleitung in dem ich meinen RPi 3 + Funksteckdose (über 433 Mhz Modul) und Google Home Sprachsteuerung schalte.
Ist dein Skript nur für Alexa oder kann man es auch für Google Assistenten verwenden?
Gruß Marc
Das ist eine super Anleitung und alles funktioniert nun prima. Ein kleiner Fehler aber große Wirkung, es fehlt eine offene Mengenklammer am Anfang der zweiten config.json Datei:
{
„FAUXMO“: {
„ip_address“: „auto“
},
„PLUGINS“: {
„CommandLinePlugin“: {
„path“: „/home/pi/commandlineplugin.py“,
„DEVICES“: [
{
„name“: „test“,
„port“: 49915,
„on_cmd“: „python /home/pi/test-an.py“,
„off_cmd“: „python /home/pi/test-aus.py“
}
]
}
}
}
Hallo,
ich möchte meinen PC via Wake on LAN von ALEXA starten lassen. Ich habe zwar viele Tutorials gefunden, die setzen aber ein Android Handy voraus. Jetzt hab ich mir überlegt, dass es doch eine Möglichkeit geben muss vom Pi ein Magic packet an meinen Rechner zu senden.
Ich habe bereits auf meinem Handy eine App, mit der geht das problemlos – aber eben nicht mit ALEXA. Lässt sich dein Script so ändern, dass der WeMo controler das WoL Signal schickt? Und wenn ja – wie?
Ich möchte einen Ausgang als Taster konfigurieren also nur kurz etwa 1 sec. ansprechen lassen. Wie wäre die taster.py und was muss ich in config.json eintragen. Danke übrigens für diese super Anleitung hier.
Hallo Dirk funktioniert das jetzt bei Dir? Ich bekomme das einfach nicht hin.
Vielen Dank zunächst mal für die gut geschriebene Anleitung.
Nun zum Problematischen:
Ich habe mich kleinlichst an die Anleitung gehalten,
Alexa findet auch die Teststeckdose, aber Alexa sagt nach einem Kommando:
„Das Gerät antwortet nicht. Bitte überprüfe Netzwerkverbindung und Stromversorgung des Geräts.“
Der Raspberry ist definitiv noch an den Strom und das Internet angeschlossen.
Was muss ich anpassen, damit das funktioniert?
Gleich bei dem vierten Commando bei der Vorbereitung des Pi bekomme ich den gleichen Fehler wie ein anderer Kommentator:
E: Unable to locate package libreadline-dev
E: Unable to locate package xz-utils
Weiß jemand hier eine Lösung?
@Wolfgang, @phil
In der Zeile zum Vorbereiten des Pis haben sich mehrere Fehler eingeschlichen…
denn nach dem „“ darf kein Leerzeichen sein:
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \xz-utils tk-dev
muss man einen Skill installieren, damit die Alexa-App diese „virtualen“ Devices findet? Ich kann es auf dem Pi starten jedoch findet die Alexa-App kein neues Gerät.
Hi, habe leider das gleiche Problem wie @Max, beim Versuch ein Kommando auszuführen bekomme ich folgende Meldung „Das Gerät antwortet nicht. Bitte überprüfe Netzwerkverbindung und Stromversorgung des Geräts.“. Hat jemand Ahnung woran das liegt?
Tim, wie hast du das hinbekommen, dass du diese „virtualen“ Devices in deiner Alexa-App gefunden hast?
@ Wolfgang
Du musst die Backslashes „\“ aus der Zeile rausnehmen.
kann mir keiner weiter helfen, wie das genau funktioniert, dass die Alexa-App auch diese virtuellen Switches findet?
Wäre um Hilfe dankbar.
Moin, ich bekomme es mit dem 2. Script einfach nicht zum laufen. Bei dem 1. ohne CommandLinePlugin läufts… Die fehlende Klammer hab ich ergänzt aber es will einfach nicht laufen. Hier mal das was mir der Pi auspuckt:
TypeError: Can’t instantiate abstract class CommandLinePlugin with abstract methods get_state
Moin Moin,
Vielen Dank für die Anleitung. Hat, auch mithilfe der Kommentare, auch gut funktioniert.
Nun habe ich lediglich das Problem dass Alexa beim einschalten sagt dass das Gerät sich nicht meldet, bzw. dass ein Problem vorliegt, aber die LED wird trotzdem geschaltet. Kann mir jemand erzählen woran das liegen könnte?
Hallo bei mir kommt auch immer der Fehler:
TypeError: Can’t instantiate abstract class CommandLinePlugin with abstract methods get_state
Hi,
super tolle Anleitung. Leider funktioniert es nicht ganz auf meinem Pi.
Nachdem ich fauxmo installiert habe und den Testschalter ausprobieren möchte geht irgendwas schief. Meine Alexa findet zwar den Schalter aber das Schalten geht leider nicht. Es kommt immer „es ist ein Problem aufgetreten“.
Auf dem Pi kann ich mit dem v-Modus auch nicht so viel anfangen.
2019-01-19 12:17:04 fauxmo:63 INFO request BasicEvent1
2019-01-19 12:17:04 fauxmo:137 INFO Attempting to get state for Test
2019-01-19 12:17:04 fauxmo:148 INFO Test state: unknown
und das immer wieder. Klingt irgendwie, als könnte er die Verbindung nicht aufbauen. Vielleicht ja jemand eine Idee dazu, woran das liegen könnte?
Viele Grüße
Dennis
man sollte auf das -vvv im autostart verzichten, wenn man es nicht braucht… es spammt sonst die daemon.log sinnlos zu.
Auch ich komme nicht weiter, selber Fehler wie schon einige hier. Eine Reaktion wäre sehr hilfreich!
TypeError: Can’t instantiate abstract class CommandLinePlugin with abstract methods get_state
Moin, Anleitung ist super, wenn auch etwas fehlerbehaftet. Schade, dass der Autor hier nicht nochmal nachbessert. Ansonsten habe ich den gleichen Fehler wie Finn, beim Einschaltbefehl sagt Alexa „Test reagiert gerade nicht“ und führt den Befehl aber dennoch korrekt aus. Beim Ausschaltbefehl quittiert sie korrekt mit „OK“ und macht wie ihr befohlen. Hat da nochmal jemand eine Lösung? Ich habe schon einiges probiert, aber bisher ohne Erfolg. Als System kommt Pi Zero W mit Debian 10 (Buster) und Python 3.7.4 zum Einsatz, alles andere ist ebenfalls auf dem aktuellen Stand. Vielen Dank.
das device wird von der alexa app gefuden zeigt in der app aber ein fehler an (server reagiert nicht)
der echo dot sagt mir wenn ich sage schalte test ein sagt sie mir test unterstüzt das nicht woran kann das liegen und bei mit startet das skript nicht über den cronjob gib es jemanden der hier bei behilflich sein kann
Habe den gleichen Fehler wie Deadman Shining. In den Skript für die Vorbereitung kommen schon Fehlermeldungen. So wie es aussieht werden einige benötigte Module nicht mehr gefunden.
Ist nur schade das der Autor diese Anleitung nicht aktualisiert. Denn das ist genau dass was ich gesucht habe.
Schade….
Hallo, ich habe das selbe Problem wie @Fabian und noch jemand weiter oben. Mein Echo Dot findet den Raspberry Pi nicht, gibt es dazu eine Lösung?
Ansonsten eine gelungene Anleitung, wenn auch mit Verbesserungshilfe in den Kommentaren.
Hallo Martin,
genial! Vielen Dank!!! Ist genau, was ich schon lange gesucht hatte und läuft prima.
Gibt es eine Möglichkeit, den Status noch für Alexa zur Verfügung zu stellen, damit in der Alexa App nicht permanent als Status „Gerät reagiert nicht“ angezeigt wird?
Vielen Dank!!!
Herzliche Grüße
Martin
Sorry – bitte kommentar als Unqualifiziert löschen :-)
Hab state_method, state_data und state_response_on / state_response_off in der Fauxmo doku gefunden…
Vielen lieben Dank
Hallo Martin,
Vielen Dank für die Anleitung.
Bei mir lief das Ganze zunächst nicht.
Pi400, Alexa-Dot (4.Generation), Python 3.7, Fauxmo 0.5.
Die Endgeräte wurden in der Alexa-App nicht gefunden.
Mit der „config-sample.json“ (https://github.com/n8henrie/fauxmo/blob/master/config-sample.json) wurde einzig der „fake Indigo switch“ gefunden.
Ich habe dann herausgefunden, dass dies an dem Eintrag „use_fake_state“: true liegt.
Nachdem ich diesen Eintrag an die jeweiligen Devices der „config.json“ angehängt hatte wurden alle Endgeräte wurden in der Alexa-App gefunden.
Herzliche Grüße und einen guten Rutsch.
Hallo zusammen,
ich habe mich inzwischen weiter mit Fauxmo beschäftigt. Es läuft bei mir inzwischen sehr gut.
Allerdings hatte ich einige Startschwierigkeiten (siehe vorherigen Beitrag).
Ich habe weiterhin herausgefunden woran das lag.
Es muss nämlich von jeder Device ein Status abgefragt werden können. Ist dies nicht möglich hilft beim simpleHTTP-Plugin der Eintrag „use_fake_state“: true
Will man allerdings über mehrere Kanäle ansteuern (ALEXA, OpenHAB, …) so wird der Schaltzustand wegen des fehlenden Status auf den anderen nicht aktualisiert.
Beim MQTT-Plugin half zunächst auch der Eintrag „use_fake_state“: true, allerdings musste ich noch das Plugin geändert. Es funktionierte dann für einige Minuten, danach waren die Devices nicht mehr ansprechbar.
Das Commandline-Plugin habe ich nicht verwendet, da ich einige Devices noch über eine Action-URL steuere.
Ich habe das Ganze nun so gelöst:
Beim simpleHTTP-Plugin steuere ich die Devices über ein php-Script z.B.:
Einschalten der Funksteckdose „pwr3Dein.php“:
dezimalcode [protokoll] [pulslänge]
$i = 1;
while ($i
Lesen des letzten Schaltzustandes der Funksteckdose mit „pwr3Dstatus.php“ :
Die config.json sieht dann so aus:
{
„FAUXMO“: {
„ip_address“: „auto“
},
„PLUGINS“: {
„SimpleHTTPPlugin“: {
„DEVICES“: [
{
„port“: 12340,
„name“: „treppenlicht“,
„on_cmd“: „http://192.168.178.11/pwr3Dein.php“,
„off_cmd“: „http://192.168.178.11/pwr3Daus.php“,
„method“: „GET“,
"state_cmd": "http://192.168.178.11/pwr3Dstatus.php",
"state_response_on": "on",
"state_response_off": "off"
}
]
},
"MQTTPlugin": {
"DEVICES": [
{
"port": 12350,
"name":"regallicht",
"on_cmd": [ "/myopenhab/regallicht", "1" ],
"off_cmd": [ "/myopenhab/regallicht", "0" ],
"mqtt_server": "192.168.178.13",
"state_cmd": "/myopenhab/regallicht",
"mqtt_port": 1883
}
]
}
}
}
schade da hat wohl der Spamfilter zugeschlagen.
Über das SimpleHTTP erkennt Alexa die Test’s als Steckdosen – dies aber nur mit dem Eintrag „use_fake_state“:true“
Mit dem neune File findet Alexa die Schalter nicht mehr.
Nur mit Hilfe des Eintrags „use_fake_state“.
Nun sagt Alexa aber das die Geräte nicht reagieren.
Die Lösung liegt wohl in dem Beitrag von Martin mit “ state_method, state_data und state_response_on / state_response_off“
Allerdings weiß ich leider Absolut nicht wie ich diese einsetzen soll und scheitere an diesem Punkt.
Mit dem Eintrag „use_fake_state“:true im CommandLinePlugin bekomme ich die info state : OFF
2022-02-02 17:09:28 fauxmo:114 DEBUG Handling action for plugin type CommandLinePlugin(on_cmd=’python /home/pi/test-an.py‘, off_cmd=’python /home/pi/test-aus.py‘, state_cmd=None, use_fake_state=True, _name=’Kaffee‘, _port=49915, _latest_action=’off‘)
2022-02-02 17:09:28 fauxmo:140 INFO Attempting to get state for Kaffee
2022-02-02 17:09:28 fauxmo:146 INFO Kaffee state: off
2022-02-02 17:09:28 fauxmo:182 DEBUG HTTP/1.1 200 OK
Mit dem Eintrag „state_cmd“
2022-02-02 17:12:49 fauxmo:114 DEBUG Handling action for plugin type CommandLinePlugin(on_cmd=’python /home/pi/test-an.py‘, off_cmd=’python /home/pi/test-aus.py‘, state_cmd=’python /home/pi/state_on.py‘, use_fake_state=False, _name=’Kaffee‘, _port=49915, _latest_action=’off‘)
2022-02-02 17:12:49 fauxmo:140 INFO Attempting to get state for Kaffee
2022-02-02 17:12:49 fauxmo:146 INFO Kaffee state: on
2022-02-02 17:12:49 fauxmo:182 DEBUG HTTP/1.1 200 OK
Dort steht nun das state:ON
Allerdings sobald ich in der Alexa app auf den Button klicke ist das Gerät nicht mehr erreichbar.
Beim versuch „get_state“ zu nutzen sagt er mir
TypeError: init() got an unexpected keyword argument ‚get_state‘
Egal was ich dort einfüge.