ESP8266 oder ESP32 als Home Assistant Schalter und Sensoren

In letzer Zeit experimentiere ich viel mit der Cloud-freien Heimautomatisierungssoftware Home Assistant. Bister habe ich viele Sensoren und Aktoren einzeln betrieben, quasi unabhängig von einem zentralen System. So loggte meine Wetterstation in eine Datenbank, ebenso mein Stromzähler in eine andere. Dafür gab es dann jeweils eine Visualisierung. Meine Bewässerungssteuerung wurde von einem Raspberry Pi mit einer selbst gebauten Oberfläche verwaltet. Nun jedoch möchte ich die Dinge zusammenführen und kosolidieren, um eine bessere Usability zu haben und den WAF zu verbessern.

Kürzlich habe ich daher bereits über meine Integration eines Stromzählers in Home Assistant geschrieben, nun stehen meine Bewässerungssteuerung bzw. meine Relaissteuerung auf dem Plan. Bisher habe ich dafür oben genannten Raspberry Pi verwendet – doch diesen mit einem Raspbian 99% des Tages nichts tun zu lassen halte ich für Verschwendung.

Deswegen kommt nun ein ESP8266-basierter Mikrocontroller (Wemos D1 mini) zum Einsatz, den ich mit der Arduino-IDE ein HTTP-Interface zum Setzen und Abrufen von Ausgängen und Eingängen ausgestattet habe. Beispielhaft für ein Wemos D1 mini mit dem offiziellen Relais-Schild werde ich den Code hier einmal zusammenfassen.

Arduino-Code

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>

#ifndef STASSID
#define STASSID "WLAN-NAME"
#define STAPSK  "WLAN-PASSWORT"
#endif

const char *ssid = STASSID;
const char *password = STAPSK;

ESP8266WebServer server(80);

void handleRoot() {
   server.send(200, "text/plain", String(analogRead(A0))); // Testweise den Analogwert ausgeben
}

void handleSet() {
  for (uint8_t i=0; i<server.args(); i++){
    if (server.argName(i)=="D1") { digitalWrite(D1, server.arg(i).toInt()); }
  }
  server.send(200, "text/plain","OK");
}

void handleGet() {
  for (uint8_t i=0; i<server.args(); i++){
    if (server.argName(i)=="D1") { server.send(200, "text/plain", String(digitalRead(D1))); }
    }
  server.send(200, "text/plain","OK");
}

void setup() {
  //IO
  pinMode(D1, OUTPUT);
  digitalWrite(D1, OFF);

  //WIFI
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }

  //HTTP
  server.on("/", handleRoot);
  server.on("/set", handleSet);
  server.on("/get", handleGet);
  server.begin();
}

void loop() {
  // put your main code here, to run repeatedly:
  server.handleClient();
  MDNS.update();
  ArduinoOTA.handle();
}

Home Assistant-Code

Hier wird Beispielhaft die IP des ESP als 192.168.178.77 angenommen – dies ist natürlich anzupassen.


#Aktor Wemos D1 mini mit Rückmeldung
switch:
  - platform: command_line 
    switches:
      esp_aktor_001_d1:
        friendly_name: "Aktor 001 D1"
        command_state: "/usr/bin/curl 192.168.178.77/get?D1"
        command_on: "/usr/bin/curl 192.168.178.77/set?D1=1"
        command_off: "/usr/bin/curl 192.168.178.77/set?D1=0"
        value_template: '{{ value == "1" }}'

#Sensor Wemos D1 mini
  - platform: command_line
    name: "Aktor 001 A0"
    command: "/usr/bin/curl 192.168.178.77/get?A0"

Auf diese Weise kann der Relais-Status geschrieben und gelesen werden. Auch den Analog-Eingang kann man auswerten.

Natürlich bleibt es einem überlassen, mehr Ein- oder Ausgänge zu implementieren. Ich beispielweise nutze den erwähnten Wemos mit einem 8-fach Relais-Board, was diesen beinahe auslastet. Mit einem D32 oder ähnlichem wäre da bei weitem mehr möglich.

Trust+ oder ESP bei SMART deaktivieren

Es kommt wieder die Winterzeit, und viele Fahrer der kleinen Spaßkugel erinnern sich an die Zeit im vorherigen Jahr, in der man manchmal nicht vom (rutschigen) Fleck kam, weil der SMART auskuppelte oder die Leitung von den Reifen nahm. Diese “Funktion” wird – je nach Modell und Baujahr – vom ESP (Elektronisches Stabilitätsprogramm) oder Trust+ (eine Art abgespecktes ESP) gesteuert. Und man kann sie mit einem kleinen Trick kurzzeitig ausschalten. WARNUNG: Dies sollte man nur machen, wenn man wirklich nicht vom Fleck kommt. In der STVO ist dies nämlich eigentlich nicht zugelassen – wenn es aber keinen anderen Weg gibt, kann man sich so mal behelfen.

WICHTIG: VORHER ZÜNDUNG AUSSCHALTEN!!!

Das benötigte Material ist einfach zu besorgen, es handelt sich um ein Stück Draht (5 bis 7cm lang), welches am besten an den Enden Verzinnt sein sollte (gibt mehr Stabilität). Damit verbindet man dann an der OBD II Schnittstelle auf der langen Seite die PINs 2 und 5 (siehe Bild).

Danach könne die Räder durchdrehen und man hat eine höhere Change, aus einer prikären Situation zu entweichen. Und mal nebenbei: Man kann damit ganz passabel Driften…

Hier nochmal eine Grafik aus dem SMART-FORUM die die PINs verbunden Zeig (sorry wegen Quali, aber ist ja nicht von mir…)

MfG Pascal

PS: Ich nehme wie immer keinerlei Garantie das die Anleitung richtig ist. Für Schäden hafte ich nicht.