Wissen

Raspberry Pi mit Alexa (Amazon Echo) steuern -Anleitung

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.

Raspberry Pi 3 Model B ARM-Cortex-A53 4x 1,2GHz, 1GB RAM, WLAN, Bluetooth, LAN, 4x USB

blank

Preis: 44,12 €

Bewertung: blank
von 0 Kunden

28 gebraucht & neu verfügbar
ab 33,44 €


Jetzt bei Amazon kaufen

 

Raspberry Pi Zero W Starter Set

blank

Preis: ---

Bewertung: blank
von 0 Kunden

0 gebraucht & neu verfügbar
ab


Jetzt bei Amazon kaufen

 

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

blank

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

YouTube

Mit dem Laden des Videos akzeptieren Sie die Datenschutzerklärung von YouTube.
Mehr erfahren

Video laden

 

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

Ähnliche Artikel

39 Kommentare

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

  2. 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?

  3. mir schmeißt er ständig die meldung
    >>ValueError: unknown url type: ‚python /home/pi/test3.py‘
    an den Kopf

  4. 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!

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

  6. 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?

  7. 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 :(

  8. Vielen Dank! Hat super geklappt. @Melf, einen Syntaxfehler bekommst du wenn du das Script nicht mit der korrekten Python Version ausführst.

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

  10. 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“
    }
    ]
    }
    }
    }

  11. 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?

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

  13. 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?

  14. 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?

  15. @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

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

  17. 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?

  18. kann mir keiner weiter helfen, wie das genau funktioniert, dass die Alexa-App auch diese virtuellen Switches findet?
    Wäre um Hilfe dankbar.

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

  20. 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?

  21. Hallo bei mir kommt auch immer der Fehler:
    TypeError: Can’t instantiate abstract class CommandLinePlugin with abstract methods get_state

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

  23. man sollte auf das -vvv im autostart verzichten, wenn man es nicht braucht… es spammt sonst die daemon.log sinnlos zu.

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

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

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

  27. 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….

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

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

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

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

  32. 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
    }
    ]
    }
    }

    }

  33. Ü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.

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

Kommentar verfassen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Schaltfläche "Zurück zum Anfang"