Montag, 2. Januar 2017

ESP8266 in FHEM

Der ESP8266 Baustein kann ziemlich einfach an FHEM angebunden werden. Das FHEM Modul wird zur Zeit in einem Entwicklerthread vorgestellt.

Vorbereitung

Das Modul braucht das debian Paket libjson-perl.

sudo apt-get update && sudo apt-get install libjson-perl

Seit März 2017 ist ESPEasy offiziell in FHEM enthalten, der folgende Befehl ist nicht mehr nötig.
 Es handelt sich um ein "Entwicklungsmodul" ist also nicht normaler Bestandteil der FHEM Installation. Es lässt sich aber einfach in unsere Installation einbinden, anstatt es nur einmal als Datei herunterzuladen und umständlich in den FHEM Ordner zu kopieren:
update add https://raw.githubusercontent.com/ddtlabs/ESPEasy/master/controls_ESPEasy.txt
update all https://raw.githubusercontent.com/ddtlabs/ESPEasy/master/controls_ESPEasy.txt
shutdown restart

In FHEM wird quasi ein kleiner Web Agent/Empfänger - die Bridge - auf Port 8383 bereitgestellt. Das Port ist natürlich "frei" wählbar.

define espBridge ESPEasy bridge 8383

Damit ist die das Modul empfangsbereit, alles weitere passiert weitestgehend automatisch. Die Bridge erzeugt die eigentlichen Geräte entsprechend der Konfiguration im ESP automatisch. Man braucht nur ein Bridge für mehrere ESP Module.
Das Modul enthält die Dokumentation, sie ist in der lokalen commandref zu finden. Das Modul wird durch diese Installation beim normalen update aktualisiert.

Installation ESP8266

Zunächst muss man auf dem Modul ESPEasy installieren/flashen. Die aktuelle Firmware findet man bei www.letscontrolit.com über diesen Link. Unbedingt den aktuelle release candidate nehmen, derzeit R147_RC8!

Update 07.03.2018
Mittlerweile gibt es eine ESP-Easy Version 2.0.0 und 3
In der Zip Datei ist jetzt das Tool FlashESP8266.exe, dort kann man COM Port und bin Datei (im gleichen Pfad) einfach per Drop Down auswählen. Das Konfigurationsnetzwerk meldet sich jetzt ESP_Easy_0. Die Weboberfläche ist leicht verändert.

Die zip Datei enthält ein paar Dateien und das Flash Programm.
Nach dem Anschluss des Moduls an den USB Anschluss müssen wir im Gerätemanager den COM Port herausfinden (Anschlüsse (COM & LPT) Bei mir COM5.
Es darf ab jetzt kein "serieller Monitor" auf die COM Schnittstelle zugreifen!
Jetzt wird die Datei flash.cmd gestartet, diese fragt zunächst die Parameter ab:

Comport -> nur die Zahl eingeben -> 5
Size - je nach Modul in kByte eingeben -> ESP12F -> 4096
Buildnummer -> R147_RC8 -> 147

Achtung: gern wird die Flashsize auch in kbit angegeben. Ein ESP01 hat 4096 kbit= 512 kByte. Ein ESP12F hat 4096 kByte=4 MByte.

Das Programm erwartet die Datei ESPEasy_R147_4096.bin im gleichen Pfad und startet mit dem esptool.exe den Flashvorgang. Hektisches Blinkern der blauen LED auf dem Modul zeigt die Datenübertragung an. Beim ersten Flashen mit ESPEasy wird nach dem Neustart zunächst der gesamte Flashspeicher gelöscht, dieser Vorgang dauert etwas. Also nicht unruhig werden wenn das Wlan ESP_0 nicht gleich sichtbar wird.
Dieser Flashvorgang löscht nicht jedesmal den kompletten Speicher, das Modul kann auf eine neue Version geflashed werden und die Konfiguration bleibt erhalten! (Der NodeMCU Flasher formatiert den Flashspeicher nach dem Neustart immer komplett.)

Einrichtung des ESP8266

Man sollte nach dem Flashen etwa eine Minute warten und dann den Reset Knopf am Modul drücken. Während dieser taucht ein offenes Wlan ESP_0xxxxx auf. Damit kann man m.M. nichts anfangen.
Es dauert ein paar Sekunden bis sich das Modul nach dem Start  mit einem eigenen verschlüsselten WLAN ESP_0 meldet. Hier findet man die Beschreibung.
Man verbindet sich am einfachsten mit dem Smartphone zu diesem WLAN, das WPA Kennwort ist configesp.
Normalerweise wird man nach der Verbindung sofort auf die Konfigseite des Moduls geleitet.

Dort trägt man seine WLAN Konfiguration in die Weboberfläche ein.

Falls es nicht automatisch passiert löst man die WLAN Verbindung mit dem Smartphone.
Es kann sein, dass das Wlan ESP_0 nach kurzer Unterbrechung wieder verbunden erscheint und man aufgefordert wird sich wieder anzumelden. Diese Anmeldung erfolgt nur für eine Sekunde und das Wlan ESP_0 verschwindet. Ich habe im seriellen Monitor beobachtet, dass man dies auch tun sollte. Erst dann wird er Flash geschrieben und der Baustein neu gestartet. Dies dauert wenige Sekunden.








Nach einem Neustart kann man sich nach kurzer Zeit zu http://newdevice verbinden.
Auf der config Seite konfiguriert man mindestens folgende Felder.

Name: <Eindeutiger Name> damit es im eigenen Netzwerk auffindbar ist.
Protocol: FHEM HTTP
Locate Controller: Auswahl entweder Name oder IP Adresse
Controller IP: <IPAdresse des FHEM Servers>
Controller Port:8383 (Das Gleiche wie beim define der Bridge)

Mit submit speichern!

Die blauen Fragezeichen verlinken ins Wiki, meist mit nützlichen Informationen.

Wenn man jetzt auf der Devices Seite ein Gerät konfiguriert sieht man das Ergebnis nach kurzer Zeit in FHEM.
Als Beispiel kann man dort System Info auswählen. Egal was man dort in der weiteren Klappleiste auswählt man sollte zumindest die Felder Name IDX und Value Name ausfüllen um sinnvolle Einträge zu bekommen.


Hier als Beispiel die RSSI Werte des WiFi Moduls:


Und so sieht es dann nach kurzer Zeit in FHEM aus ->







Tipps

Um die flash.cmd Datei gleich im richtigen Pfad zu öffnen, geht man in Windows auf den Ordner in dem die Datei liegt und drückt die Umschalttaste und gleichzeitig mit der rechten Maustaste das Context Menü - hier kann man den Punkt Eingabeaufforderung hier öffnen auswählen. Bei Windows 10 ab Version 1703 wird hier die Powershell angeboten. In dieser läuft die flash.cmd nicht -> einfach cmd & enter eintippen um die alte commandshell zu starten! Für häufigere Flashvorgänge sollte man sich eine angepasste Batchdatei erstellen.

Auf der Seite Tools kann man den Befehl reset absetzen, der löscht alle Einstellungen und versetzt das Modul wieder in den AP Modus - ohne das man neu flashen muss. Danach bootet das Modul von selbst wieder. Der Löschvorgang dauert etwa 1:40 min. Also nicht unruhig werden, wenn man darauf wartet, dass ESP_0 wieder erscheint.
Das funktioniert auch im Browser: http://<ESP Name>/tools?cmd=reset. Achtung wenn man diesen Befehl abgesetzt hat, bleibt das Fenster so stehen, wechselt man wieder in dieses Fenster oder drückt Refresh wird der Befehl sofort erneut gesendet.
Man kann "Factory Reset" auch per Hardware machen: Einfach RX und TX verbinden und neu starten. Den Trick habe ich hier  als Ausweg aus dem Deep Sleep gefunden.

Auf der Seite tools kann man auch die gesamte Konfiguration speichern und wiederherstellen. Der Dateiname endet zwar per default auf txt, es ist aber keine Textdatei. Man kann damit also nur die komplette Konfiguration übertragen, inklusive Gerätenamen usw. und leider nicht zwischendurch editieren.

Stromversorgung

Der verbreitete FTDI Chip darf laut Datenblatt 50 mA liefern, das ESP Modul kann bis zu 300 mA Spitzenstrom ziehen und verbraucht schon im normalen Modus ca. 50-70 mA. Die handelsüblichen FTDI Adapter ohne separaten Spannungsregler sind damit ohne externe 3,3 Volt Versorgung ungeeignet. Alle Developerboards haben separate Spannungsregler!

Fehlerquellen

Die Stromversorgung des ESP Bausteines ist nicht unkritisch. Häufig sieht alles gut aus, der Flashvorgang läuft durch aber anschließend funktioniert nicht alles -> Der Flashinhalt ist korrupt!
Ein billiger FTDI Adapter z.B. liefert nicht genügend Strom um den ESP zu betreiben. Ein zu langes mehrfach gestecktes USB Kabel kann sich als Fehlerquelle entpuppen.

Wenn sich der Baustein eigenartig verhält, ESP_0 nicht erscheint sondern ein anderes Wlan ESP_xxxx oder der Baustein nach korrektem Eintrag der SSID und Passwort und der Anmeldung im Wlan nicht als http://newdevice erreichbar ist -> unbedingt Stromversorgung des Bausteins prüfen!

15 Kommentare:

  1. Hallo Otto, wieder sehr gute Beschreibung! Ich scheitere jedoch schon vorher: Ich schaffe es nicht einen ComPort auf Win10 einzurichten. Natürlich habe ich es mit den beiden Treibern (CH341SER und CP210x) versucht - keinerlei Reaktion.

    AntwortenLöschen
  2. Hallo Walter, wird denn das Gerät im Gerätemanager erkannt/angezeigt? Eigentlich muss man dann nur dort Treiber aktualisieren und den Treiberpfad angeben. Ist in meinem anderen Post zum ESP8266 ganz unten beschrieben.

    AntwortenLöschen
  3. Hallo Otto, leider nein, wird nicht im Gerätemanager erkannt!

    AntwortenLöschen
    Antworten
    1. Dann würde ich sagen: USB Schnittstelle kaputt, kein Daten- sondern nur Ladekabel, USB Chip auf dem ESP Board kaputt?

      Löschen
  4. Hallo Otto!
    Dank deiner Anleitung läuft nun mein D1 mini mit fhem (mit deinen Wifi RSSI ausprobiert).
    Lösung für Problem siehe oben:
    ch341 Treiber laden, D1 mini anstecken, Gerätmanager öffnen und bei drücken der Resettatste am D1 erscheint der richtige Port. Beim flashen also auch die Resttaste drücken, dann enter und die Resettaste loslassen.
    Danke nochmals und LG aus Wien

    AntwortenLöschen
  5. Zusatz zum obigen Tipp:
    Dieser Vorgang verursacht jedoch im WIN10 etwas später meist einen Bluescreen (mit Bezug auf Treiber)

    AntwortenLöschen
  6. "D1 mini pro" lässt sich unter win10 problemlos ohne weitere Treiberinstallaton flashen (R147)

    AntwortenLöschen
  7. Dieser Kommentar wurde vom Autor entfernt.

    AntwortenLöschen
  8. Tolle Beschreibung. Super. Dankeschön.

    Bei mir war allerdings das Problem, dass sich das ESP8266 nicht an die FritzBox anmeldete. Ich habe es dann über eine andere Fritzbox (mit älterer Firmware 6.32 ?!)angemeldet und dann kurzerhand meine SSID mit Kennwort meiner Fritzbox (gleiches Modell - 7490 - nur neue Firmware 6.92) eingegeben. Dann hat es geklappt. Keine Ahnung woran das lag.
    Aber jetzt geht alles super.

    KBLc

    AntwortenLöschen
  9. Sehr coole Sache
    Ich habe zwei ESP8266, jeweils mit dem einfachen DHT22
    Ein WLAN Thermometer für knapp über 4€ :D


    AntwortenLöschen
  10. Hallo Otto,

    ich habe endlich den ESP nach Deiner Anleitung einbinden können (hätte ich sie nur früher entdeckt...). Danke für das gute "Kochrezept".
    Wenn ich allerdings den SignalDuino in FHEM einbinden will (gemäß WIKI) bekomme ich immer ein Disconnected und im LOG finde ich den folgenden Eintrag:
    2018.08.26 08:56:41 2: ESPEasy ESPBridge: Socket on port tcp/8383 closed
    2018.08.26 10:05:24 2: ESPEasy ESPBridge: Opening bridge port tcp/8383 (v1.39)
    2018.08.26 10:05:24 3: ESPBridge: port 8383 opened
    2018.08.26 10:06:08 2: ESPEasy ESPBridge: Autocreate ESPEasy_SignalDuino_WIFI ESPEasy 192.168.178.32 80 ESPBridge SignalDuino_WIFI
    2018.08.26 10:06:09 2: ESPEasy ESPBridge: Autosave is disabled: Do not forget to save changes.
    2018.08.26 10:14:41 3: Opening SignalDuinoWetter device 192.168.178.32:23
    2018.08.26 10:14:42 3: SignalDuinoWetter sduinoIdList: whitelistIds=
    2018.08.26 10:14:42 3: SignalDuinoWetter sduinoIdList: blacklistIds=
    2018.08.26 10:14:42 3: SignalDuinoWetter sduinoIdList: development=
    2018.08.26 10:14:42 3: SignalDuinoWetter: ID=74 skiped (developId=y)
    2018.08.26 10:14:42 3: SignalDuinoWetter: ID=p76.1 skiped (developId=p)
    2018.08.26 10:14:42 3: SignalDuinoWetter: ID=73 skiped (developId=y)
    2018.08.26 10:14:42 3: SignalDuinoWetter: ID=p76 skiped (developId=p)
    2018.08.26 10:14:42 3: SignalDuinoWetter: ID=63 skiped (developId=y)
    2018.08.26 10:14:42 3: SignalDuinoWetter: IDlist MS 0 1 13 14 15 17 2 22 23 25 3 3.1 32 33 35 38 4 41 51 55 6 68 7 72.1
    2018.08.26 10:14:42 3: SignalDuinoWetter: IDlist MU 13.1 16 20 21 24 26 27 28 29 30 31 36 37 39 40 44 44.1 45 46 48 49 5 50 56 59 60 61 62 64 65 66 67 69 70 71 72 75 8 9
    2018.08.26 10:14:42 3: SignalDuinoWetter: IDlist MC 10 11 12 18 43 47 52 57 58
    2018.08.26 10:14:42 1: SignalDuinoWetter: Can't connect to 192.168.178.32:23: 192.168.178.32: Connection refused
    2018.08.26 10:14:42 3: SIGNALduino SignalDuinoWetter: 192.168.178.32: Connection refused
    2018.08.26 10:14:42 3: SIGNALduino SignalDuinoWetter: 192.168.178.32: Connection refused
    2018.08.26 10:15:22 3: SignalDuinoWetter reset
    2018.08.26 10:15:22 3: Opening SignalDuinoWetter device 192.168.178.32:23
    2018.08.26 10:15:22 1: SignalDuinoWetter: Can't connect to 192.168.178.32:23: No such file or directory
    2018.08.26 10:15:22 1: SignalDuinoWetter: Can't connect to 192.168.178.32:23: 192.168.178.32: Connection refused
    2018.08.26 10:15:46 3: SignalDuinoWetter reset
    2018.08.26 10:15:46 3: Opening SignalDuinoWetter device 192.168.178.32:23
    2018.08.26 10:15:46 1: SignalDuinoWetter: Can't connect to 192.168.178.32:23: No such file or directory
    2018.08.26 10:15:46 1: SignalDuinoWetter: Can't connect to 192.168.178.32:23: 192.168.178.32: Connection refused
    2018.08.26 10:18:40 3: SignalDuinoWetter reset
    2018.08.26 10:18:40 3: Opening SignalDuinoWetter device 192.168.178.32:23
    2018.08.26 10:18:40 1: SignalDuinoWetter: Can't connect to 192.168.178.32:23: No such file or directory
    2018.08.26 10:18:40 1: SignalDuinoWetter: Can't connect to 192.168.178.32:23: 192.168.178.32: Connection refused

    Habe überhaupt keine Idee mehr an was das liegen könnte. Habe gefühlt 1000 Seiten im FHEM Forum/Wiki/Netz,... dazu gelesen und komme nicht weiter.
    Hast Du einen Tip, vielleicht sogar ne Lösung für mich?!

    Viele GRüße,

    Rainer

    AntwortenLöschen
  11. Sehr gute Anleitung Otto!

    Ich habe mit für ein ESP8244 mit CP2102 entschieden, da ich die Treiberproblematik mit CH340 umgehe.

    Läuft sehr stabil, Rückmeldungen kommen sehr schnell. Ich habe vier Relais und zwei Digital In definiert.

    Ich habe die Erfahrung gemacht, daß einige Pins nicht nutzbar sind, da mein Board dann abstürzt.

    https://smarthome.family.blog/2019/02/12/nodemcu-esp8266-mit-fhem-schalten-und-auslesen/

    Gruss Marc

    AntwortenLöschen
  12. Salve Otto , danke für die Anleitung. Bei mir will sich aber die XONOFF nicht beim Fhem melden. Die Devices werden nicht wie erwartet angelegt... hast Du eine Idee?

    AntwortenLöschen
    Antworten
    1. hat sich geklärt, bei der neuen Firmware gibt es "Send to Crontroller" .. das hatte ich nicht an... ;)

      Löschen
  13. Hallo Otto, vielen Dank für den Beitrag, mit dem ich die Anbindung FHEM - ESP8266 zum Laufen gebracht habe. Eine Ergänzung, falls FHEM passwortgeschützt ist - im Controllermenü ist unter Credentials der FHEM Login Name und das Passwort einzutragen. Sonst kommen die HTTP Pakete nicht an. Schönen Abend, Bernhard

    AntwortenLöschen