Hallo,

ich möchte Euch kurz vorstellen, wie man Sensoren schnell und einfach in shNG einbinden kann. Das Ganze basiert auf der Verwendung eines ESP8266 (bspw. Wemos D1 mini), der Firmware ESPEasy und des shNG Webservices-Plugins.

Die Firmware ESPEasy bietet viele Konfigurationsmöglichkeiten, dies betrifft sowohl Sensoren also auch Kommunikationsschnittstellen.

Teil 0: Allgemeine Informationen

  • ESPEasy arbeitet auch im Github.
  • Die Liste der unterstützten Sensoren gibt es hier.
  • Bei ESPEasy wird jede Nacht automatisch ein Release erzeugt. Diese sind hier zu finden. Es gibt 2 Ausführungen der ESPEasy: A) Released aktuell in der Version 2.0 und B) Develop. als mit mehr Plugins aber auch noch in der Testphase.

Teil 1: Flashen der Firmware

  • Download des letzten (Pre-)Releases der V2.0 von hier als zip (heute wäre das Release v2.0-20180321)
  • Entpacken des ZIP. Darin sind diverse Binaries und das Flashtool selbst.
    Zu den Binaries: Hier gibt es 3 Ausbaustufen und das ganze für 2 SpeicherGrößen: normal – enthält nur die getesteten und freigegebenen Teile von ESPeasy; test – enthält zusätzlich noch die getesteten; dev – enthält zusätzlich noch die sich in Entwicklung befindlichen; Die Speichergrößen sind 1MB und 4MB. Der erwähnte WEMOS D1 mini hat 4MB Speicher.
  • Verbinde den ESP via USB mit einem Windows PC.
  • Firmware mit Hilfe des Flashtools auf dem ESP schreiben, dabei Serielle Schnittstelle (COM-Port) und das entsprechende Binary auswählen. Ich nutze immer die Dev-Version. Die COM Schnittstelle kann man auch über den Windows-Gerätemanager in Erfahrung bringen.

  • Neustart des ESP (Reset Taste).
  • Der ESP öffnet einen WLAN AccessPoint „ESP_Easy_0“; Passwort: configesp
    Wenn man nicht automatisch zur Anmeldeseite kommt, dann nach 192.168.4.1 browsen
  • In der Config seine eigenen WLAN-Daten eingeben und den ESP wieder neu starten. Nun sollte er sich in eigenen Netzwerk anmelden.
    (Über den Weg, das fertige Binary der Firmware zu flashen, muss man immer den Weg über den Hotspot zur Konfiguration und damit zu Einbindung in das eigene Netzwerk machen.)
  • Eine detaillierte Beschreibung ist hier
  • Nun ist der ESP vorbereitet und kann konfiguriert werden

Teil 2: Verbinden der Sensoren mit dem ESP8266 (Wemos D1 Mini)

  • Der verwendetete Sensor DHT22 wird wie folgt mit dem Wemos D1 Mini verbunden:

    Den verwendeten GPIO könnt ihr frei wählen. Er muss später in ESPEasy angegeben werden. Hier im Bild ist D0 (GPIO16) verwendet.

Teil 3: Konfiguration in ESPEasy

  • Mit dem Aufruf der IP des ESP kommt man zur Konfigurationsseite
  • Die Möglichkeiten der Konfiguration sind hier beschrieben.
  • Auf der Seite Devices muss der entsprechende Sensor konfiguriert werden. Dabei wird definiert, welcher Sensor an welchem Eingang angeschlossen wurde.
  • In meinem Beispiel ist es ein DHT22 an GPIO16 (D0).

    Im Beispiel sendet er seine Werte an den 3. definierten Controller mit einer Verzögerung von 30sec. Es werden 2 Werte übermittelt, Termperatur und Humidity, jeweils mit 1 Dezimalstelle.
  • Auf der Seite Controller wird die Schnittstelle konfiguriert.
    Im Beispiel sind 3 Controller (also Schnittstellen definiert), wobei nur die dritte aktiv ist.
  • Wir nutzen „Generic HTTP“, tragen als Controller IP die IP-Adresse von shNG ein und bei Controller Port den Port, den wir für das Webservices-Plugin nutzen.
    Bei Controller Publish setzen wir:
    /shNG/ws/items/ESP_Easy.%sysname%.%tskname%.%valname%/%value%
  • Verwendet wird das einfachere „Simple Webservices“ HTTP-Interface, bei dem der eigentliche Wert Teil der HTTP-Adresse ist (kein Payload).
  • Zur Erklärung von /shNG/ws/items/ESP_Easy.%sysname%.%tskname%.%valname%/%value%:
    • /shNG/: wird von ESPEasy beim Versenden verschluckt und dient somit nur als „Futter“
    • /ws/items/: Wird vom WebservicePlugin erwartet, um den Inhalt einem Item zuzuordnen
    • /ESP-Easy/: verwende ich als „root“ des Items, so dass alle folgenden Items Kinder von ESP-Easy sind.
    • %sysname%: Name des ESP8266, definiert im Reiter „Config“ unter „Unit Name“  (Im Beispiel: „Wemos_1“)
    • %tskname%: Name des Sensors, definiert im Reiter „Devices“ unter „Name“ (Im Beispiel: „Umwelt“)
    • %valname%: Name des Wertes des Sensors, definiert im Reiter „Devices“ unter „Value“ (Im Beispiel: „Temperature“)
    • %value%: ist der eigentliche Wert
      Damit ergibt sich das Item: ESP_Easy.Wemos_1.Umwelt.Temperature. Der Wert selbst ist 17.36

Teil 4: Konfiguration shNG

  • Damit wir in shNG auch etwas empfangen, muss das Webservices-Plugin aktiviert und konfiguriert werden. Man kann die Standardkonfiguration, wie in der Anwenderdokumentation beschrieben, verwenden, d.h. der Port ist 8384.
  • Dazu gibt es auch bereits einen Blog-Artikel.
  • Nach der Aktivierung und Konfiguration des Plugins sowie einem Neustart müssten im Logfile bereits die Items und Werte sichtbar sein.
    Bspw.: CP Server Thread-19 192.168.2.25 - - [18/Apr/2018:21:41:48] "GET /ws/items/ESP_Easy.Wemos_1.Umwelt.Humidity/64.0 HTTP/1.1" 200 80 "" ""
  • Nun noch die Items in einer yaml-Datei im Ordner /items/ definieren: (Beispiel: ESP-Easy.Wemos_1.Umwelt.Temperatur) und shNG neu starten.
    
    ESP_Easy:
        Wemos_1:
            Umwelt:
                Temperature:
                    type: num 
                Humidity:
                    type: num
    
  • Nun müssten über das „Simple Webservices“ HTTP-Interface des Webservices-Plugins den Items die Werte zugwiesen werden.

Viel Spaß beim Anwenden!


2 Kommentare

Patrick · 19. August 2021 um 14:46

Hallo, ich habe das mit einem Relais versucht wie du es beschrieben hast aber das funktioniert leider nicht ! Glaubst könntest mir einen Tipp geben!

Hendrik Friedel · 17. Juni 2019 um 20:05

Hallo,

danke für den Beitrag!
ich halte die Kommunikation per mqtt für robuster, da hier dafür gesorgt wird, dass bei einer unterbrochenen Kommunikation die Kommunikation ’nachgeholt‘ wird

Wer den umgekehrten Weg gehen will (einen GPIO am ESP steuern) will, macht es so:

Beispiel:
Der ESP-Easy heißt KWP-PWM
Das mqtt-Plugin ist in sh.py und in esp-easy aktiv
Der GPIO ist Nr. 14.

Dann ist nur noch dieses Item nötig:
stufe:
type: num

com_obj:
type: str
eval: ‚“PWM,14,“+ str(round( sh….stufe()*4096/100))‘
eval_trigger: …stufe
mqtt_topic_out: ‚/KWL-PWM/cmd‘

Über ‚Stufe‘ (0-100) kann nun der GPIO gesteuert werden

Gruß,
Hendrik

Schreibe einen Kommentar

Avatar-Platzhalter

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert