fhem: Lampe und Temperatur mit ESPeasy
Ich brauche eine einfache WLAN Steckdose und möchte nicht 30 und mehr Euro dafür ausgeben. Ausserdem soll nur eine minimale Anzahl an Bauteilen verwwendet werden. Da ich noch einen ESP-01 hier habe, wollte ich diesen als WLAN Schalter verwenden. Dazu braucht es nur noch einen Transistor, ein Relais (5V, 220V/10A), ein paar Widerstände und Kondensatoren, einen 3.3V Spannungsregler und ein 5V Netzteil (habe hier noch eins rumliegen).
Als Software habe ich ESPeasy gewählt (siehe auch FHEM Forum). ESPeasy ein MQTT Publisher und kann über einfache http Posts auch GPIO schalten. Das Web-Interface und die HTTP Schnittstelle sind einfach zu bedienen und das Web GUI wird später gar nicht gebraucht.
Ich habe also den ESP-01 mit einem LM2940 und Kleinzeugs erst mal auf einem Steckboard aufgebaut. Vor dem Flashen der ESPeasy R048 habe ich direkt die WLAN Parameter meines Netzwerks in den Code eingetragen (Arduino IDE 1.6.5 unter Debian 8). Nach dem Flashen in einer anderen Schaltung (die von meinem ESPlink) hat isch ESPeasy direkt am WLAN angemeldet und eine IP Adresses vom Router bekommen. Die IP habe ich dann auch gleich für diesen ESP reserviert.
Da es so einach ist und zum Testen ganz hilfreich, habe ich noch einen DS18B20 drangehängt. Zuerst kamen aber keine Updates in FHEM (MQTT in FHEM) an. Erst nachdem ich den ESP einmal neu gestartet habe, wurden die Messwerte übertragen.
In FHEM trägt man folgendes ein:
# Device DS18b20 definieren #define ESP8266 MQTT_DEVICE DS18B20 #attr ESP8266 IODev MyBroker #attr ESP8266 room Aussen #attr ESP8266 stateFormat Temperatur: Temperature°C #attr ESP8266 subscribeReading_Temperature /hooks/devices/1/SensorData/temperature define MyBroker MQTT 192.168.0.40:1883 attr MyBroker room MQTT define ESP8266 MQTT_DEVICE DS18B20 attr ESP8266 IODev MyBroker attr ESP8266 room Aussen,MQTT attr ESP8266 stateFormat Temperatur: Temperature°C attr ESP8266 subscribeReading_Temperature /hooks/devices/1/SensorData/temperature
Als MQTT Vermittler habe ich mosquitto auf dem Debian 8 Server installiert, auf dem auch FHEM läuft.
Bei der Subscription unbedingt darauf achten, dass man exakt das gleiche Reading (valuename) angibt! Ich hatte auch erst in ESPeasy “Temperature” und in FHEM “temperature” stehen. Das funktioniert dann nicht.
Für das Schalten habe ich zuerst nur eine LED angeschlossen. Ich musste dann feststellen, dass für das Schalten selbst gar kein MQTT benötigt wird:
fhem.cfg für das Schalten (siehe auch ESPeasy Relais):
define myLamp1 dummy attr myLamp1 room Aussen,MQTT attr myLamp1 webCmd on:on off:off define myLamp1_ein_aus notify myLamp1 { \ if ("$EVENT" eq "on") { \ system "wget -O /dev/null -q http://192.168.0.106/control?cmd=GPIO,2,1&" \ }0;;\ if ("$EVENT" eq "off") { \ system "wget -O /dev/null -q http://192.168.0.106/control?cmd=GPIO,2,0&" \ }0;;\ }
Damit kann ich nun wunderbar die LED direkt über FHEM schalten. Später bau ich dann noch das Relais an…