Einen ESP8266/ESP32 mit Hilfe von Alexa steuern

In den letzten Tage und Wochen habe ich mich etwas mit dem Thema beschäftigt, wie man mit Hilfe von Alexa (*) einen ESP8266 oder ESP32 ansteuern kann.

Da das Thema etwas unübersichtlich ist, hier mein Versuch das Thema zu strukturieren.

Grob  kann man zwei Fälle unterscheiden:

  • Der ESP8266/ESP32 simuliert ein anderes Gerät, welches von Alexa unterstützt wird
  • Es wird ein externer Dienst genutzt, der von Alexa unterstützt wird
Simulation eines Gerätes Externer Dienst
Vor- und Nachteile:
👍 Läuft ohne zusätzliche Dienste 👎 externe Dienste und/oder Skills sind notwendig
👎 Beschränkter Funktionsumfang (An, Aus, Prozent) 👍 Größerer Funktionsumfang (siehe Funktionsumfang von Alex-Nachrichten)
👍 Einfache Sprachebefehle 👎 Vor dem Befehl, muss man Alexa mitteilen, welcher Skill genutzt wird “Alexa verwende XXX und …”
 

Beispiele:

esp8266-alexa-wemo-emulator oder Fauxmoesp

 

Diese Lösung simuliert ein Belkin WeMo(*) Gerät. Der ESP kann 16 virtuelle Geräte/Funktionen bereitstellen. Leider nur mit An und Aus Funktionalität.

Sinric

 

Diese Lösung erfordert eine Anmeldung und die Installation eines Skills.

Danach werden diverse Geräte/Funktionen bereitgestellt. Z.B. können Ein- und Ausschalter, Lampen, Thermostate oder Fernseher bereitgestellt werden und dann über die  passenden Sprachbefehle gesteuert werden.

 

Espalexa

Espalexa simuliert eine Philips Hue Bridge (*). Der ESP kann 20 virtuelle Geräte/Funktionen bereitstellen. Neben An und Aus, unterstützt dieser Anzahl auch Helligkeitsstufen von 0% bis 100%.

 

Für mich hat der Funktionsumfang von “Simulation eines Gerätes” nicht gereicht. Ich wollte aber auch nicht neben Amazon noch einen zusätzlichen Dienstleister nutzen.

Ich habe mir also meinen Skill selber zusammengestellt. Da mir die AWS Lambda Function irgendwie nicht gefallen habe, habe ich mich für die Web-Service Variante entschiedenen. Hierbei werden die Informationen vom Skill an den eigenen Server weitergeleitet. Hierfür nutze ich im Moment eine ziemlich gepatchte Version von Alexa-PHP-Endpoint. Ich habe einige der Pull-Requests eingespielt und noch die eine oder andere Änderung vorgenommen.

Da ich Alexa für die Heim-Automatisierung nutze, werden die Daten direkt in MQTT gespeichert.

Druckerstatus in Node-Red

Trotz intensiven Suchens habe ich keine fertige Lösung gefunden, wie man den Status eines Netzwerkdruckers (IPP-Supprt vorausgesetzt) innerhalb von Node-Red abfragen könnte.

Also selber ans Werk.

Nach einigen Suchen bin auf das Tool ipptool (sudo apt install cups-ipp-utils) gestoßen. Mit Hilfe von diesem Tool kann man den Status eines Druckers über IPP abfragen. Die folgende Bash-Datei (“printerstatus”) ruft den Status den Druckers (in meinem Fall IP 192.168.2.123) ab. Wenn der Drucker nicht erreichbar ist, wird ein Offline Status zurückgeliefert.

#!/bin/bash
/usr/bin/ipptool -T 5 -c -t -v ipp://192.168.2.123/ipp/ get-printer-attributes.test || echo " printer-state-message (textWithoutLanguage) = Offline"

Ich habe die Datei unter “/home/pi/bin/printerstatus” abgelegt.

In Node-Red ist es keine große Herausforderung mehr. Die Datei regelmäßig aufrufen, die Ausgabe zeilenweise splitten, nach der Zeile “printer-state-message” suchen und das Ergebnisse ausgeben.

Node-Red Flow

[{"id":"71745fbb.535e1","type":"exec","z":"379c0ed1.2ef2da","command":"/home/pi/bin/printerstatus","addpay":false,"append":"","useSpawn":"false","timer":"10","oldrc":false,"name":"Ipptool","x":270,"y":660,"wires":[["9afc54de.945c4"],[],[]]},{"id":"f6207655.510128","type":"inject","z":"379c0ed1.2ef2da","name":"30 sec","topic":"","payload":"","payloadType":"str","repeat":"30","crontab":"","once":false,"onceDelay":0.1,"x":100,"y":660,"wires":[["71745fbb.535e1"]]},{"id":"9afc54de.945c4","type":"split","z":"379c0ed1.2ef2da","name":"Split \\n","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":460,"y":740,"wires":[["cdc67f9b.25fd5"]]},{"id":"cdc67f9b.25fd5","type":"switch","z":"379c0ed1.2ef2da","name":"Filter State","property":"payload","propertyType":"msg","rules":[{"t":"cont","v":"printer-state-message","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":640,"y":740,"wires":[["85cef94c.6ec2c8"]]},{"id":"41376012.1d44b","type":"ui_text","z":"379c0ed1.2ef2da","group":"2ca42408.15cfac","order":0,"width":"4","height":"1","name":"","label":"Status: ","format":"{{msg.payload}}","layout":"row-spread","x":690,"y":840,"wires":[]},{"id":"85cef94c.6ec2c8","type":"change","z":"379c0ed1.2ef2da","name":"Remove Prefix","rules":[{"t":"change","p":"payload","pt":"msg","from":"printer-state-message (textWithoutLanguage) =","fromt":"str","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":460,"y":840,"wires":[["41376012.1d44b"]]},{"id":"2ca42408.15cfac","type":"ui_group","z":"","name":"Geräte-Steuerung","tab":"d60df41e.ae9c2","order":1,"disp":true,"width":"6","collapse":false},{"id":"d60df41e.ae9c2","type":"ui_tab","z":"","name":"Geräte-Steuerung","icon":"dashboard","order":3}]

 

Das ipptool unterstützt auch eine XML-Ausgabe, da aber XML nicht gut in Node-Red zu verarbeiten ist, habe ich die Text-Ausgabe genutzt.

Gehäuse für DPS5005

Nachdem ich mir letztens ein DPS5005 gekauft habe, stellt sich die Frage nach einer Stromversorgung und einem Gehäuse.

Da der DPS5005 hauptsächlich für kleine Basteleien gedacht ist, habe ich mich für ein altes Laptop-Netzteil entschieden. 65W und 20 Volt sollte für die meisten meiner Anwendungsfälle erst reichen.

Für das Gehäuse habe ich mich für eine Eurobox von Reichelt entschiedenen. Gehäuse für DPS5005 weiterlesen

10 Platinen (10x10cm) für unter 5€

Bei allpcb(*) kann man sich zur Zeit seine eigenen Platinen zu einem super Preis fertigen lassen.

10x Platinen mit einer maximalen Größe von 10 x 10 cm kann man im Moment zu einem Preis von 5,49$ also knapp 4,62€ bestellen.

Eckdaten

  • 10 Stück
  • max. 10×10 cm groß
  • FR4
  • Doppelseitig inkl. Durchkontaktierungen
  • beidseitiger Bestückungsdruck
  • Lötstoplack (grün & weiß)

Die Platinen kosten 5$, Paypal Gebühren 0,49$ und im Moment kostenlosen Versand.

Geliefert wird per TNT. Lieferzeit inkl. Fertigung liegt so bei 7 Tagen.

ESP8285 ESP-M3 flashen

Die Tage habe ich meinen ersten ESP8285 ESP-M3(*) erhalten:

Wer den ESP8285 noch nicht kennt:

Der ESP8285 ist im Prinzip ein ESP8266, jedoch ist ein 1MB größer Flashspeicher integriert worden. Hierdurch sind im Vergleich zum ESP8266 platzsparendere Boards möglich.

Im folgenden eine kurze Anleitung, wie man den ESP-M3 flasht.

In der jeweiligen Entwicklungumgebung sollten folgende Einstellungen gewählt werden:

  • Board: 8285 (Gerneric)
  • Flash-Size: 1M / 64 K SPIFF

Benötigt werden:

  • einige “Testhaken” + Kabel
  • ein USB-Serial Wandler mit 3,3 Volt

Verbindungen:

GND

ESP-M3 USB-Serial
VCC 3,3 V
GND  GND
RXD TXD
TXD RXD

Vorgehen:

  • USB-Serial und ESP-M3 gemäß Tabelle verbinden
  • GPIO0 mit GND verbinden
  • USB-Serial Konverter in den USB-Buchse stecken
  • GPIO0 von GND trennen
  • Wie gewohnt, den ESP-M3 flashen

 

Bei mir sah die ganze Aktion so aus:

 

H-Bridge L298N

Eine einfache H-Bridge mit einem L298N. Obwohl der L298N schon uralt und nicht gerade effizient ist, wird er immer noch gerne genommen.
Eckdaten sind max. 46 Volt und max. 4 Ampere für beide Ausgänge zusammen. Wie immer sind dies die maximalen Werte und somit nicht in dieser Höhe für einen Dauerbetrieb geeignet.

Besonders schön an dem L298N ist, dass es fertige Platinen schon ab 1,30€ gibt, wenn man die langen Lieferzeiten in Kauf nimmt. Wer es schneller haben will, sollte auf Amazon oder Ebay zurückgreifen:

Bezugsquellen:

USB Logic Analyzer

Dieser wirklich sehr einfache 8 Kanal Logic Analyzer, der deutlich unter 10€ kostet, hat mir jetzt schon in vielen Fällen geholfen.

Sei es bei der Analyse der Ausgänge eines ESP8266 ….

… oder der Auswertung eines DCC-Signales bei der Modelleisenbahn

Zu beachten ist, dass es zwischen dem Logic Analyzer und dem USB-Anschluss keine galvanisch Trennung gibt. Der USB-Anschluss des Computer kann also bei Fehlbenutzung beschädigt werden. Der Logic Analyzer ist für max. 5,25 Volt ausgelegt.

Bezugsquellen: