Nach längerer Recherche habe ich alle Informationen zu einer interessanten Kombination: ESP8266 mit einem Regensensor - ohne Arduino.
Bei mir ergab sich die Notwendigkeit, ein Kippfenster mit Motor zu öffnen / schließen. Kein Problem - ein Motor bei http://www.windowdrives.com/ bestellt und mit einer HomeMatic - Rolladensteuerung versehen, funktioniert ohne Probleme.
Aus Kostengründen habe ich aber nicht den 450,00€ Motor mit Regensensor gewählt. Also neues Problem: Wenn es regnet muss das Fenster zu! Mit dem ESP8266 habe ich schon längere Zeit probiert - insbesondere mit NodeMCU, also der Firmware auf LUA-Basis. Wie man einen ESP8266 auf NodeMCU bringt, ist überall beschrieben. Jetzt zur konkreten Aufgabe: per ESP8266 einen Regensensor (http://www.amazon.de/Luftfeuchtigkeit-Regentropfen-Erkennung-Sensor-Arduino/dp/B00EEWHHEM - gibt es in HongKong billiger ) an FHEM per MQTT binden. Man will ja nicht wissen welche Regenmenge kommt, sondern ob es regnet, damit das Fenster geschlossen wird. Das Modul hat einen "analogen" - (ADC 0-1024)A usgang und einen"digitalen Hi-LOW " Ausgang. Hier verwende ich den digitalen Ausgang!
MQTT setzt voraus, dass man einen MQTT - Server (bei mir auf einem BananPi mit FHEM unter Debian 7 ) installiert hat:
MQTT ist das Protokoll des "IOT" - Internet der Dinge -genaueres gibt es hier: http://mqtt.org/ -
In FHEM ist die Unterstützung des MQTT - Protokolls bereit implementiert - Vorraussetzung sind ein eingerichteter MQTT - Server und die Perl-Unterstützung für MQTT ("Mosquitto" - ist hier die erste Wahl)
Repository des Mosquitto laden:
wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
danach Repository einlesen:
apt-get update
danach Mosquitto und CPAN (für Perl) installieren:
apt-get install mosquitto
cpan -i Net-MQTT
nach einem Update auf Debian 8 musste auch noch ein perl-Modul installiert werden, sonst wird gemeldet, dass das Modul MQTT nicht geladen werden kann:
apt-get install libmodule-pluggable-perl
Für den ESP8266-1 habe ich folgende 3 Scripte gefunden und geändert:
-- init.lua
-- Configures WiFi and door sensor
dofile("wifi-cfg.lua")
tmr.alarm(1, 5000, 0, function() dofile("sensor.lua") end)
-- wifi-cfg.lua
ssid = "SSID des privaten WLAN"
password = "Password des WLAN"
print("Configuring WiFi")
wifi.setmode(wifi.STATION)
wifi.sta.config(ssid, password)
tmr.alarm(0, 2000, 0, function() print("Connected with IP Address: " .. wifi.sta.getip()) end
-- sensor.lua
-- IP des MQTT Server
broker = "192.168.0.100"
port = 1883
keepalive = 120
username = ""
password = ""
clientid = "rain"
topic = "fhem/Dach/Regen"
gpio2 = 4
-- Regensensor:
function switchcb(level)
if level == 0 then
state = "Rain"
else
state = "Sunny"
end
-- Publish a message on each change in state
tmr.alarm(2, 250, 0, function() m:publish(topic, state, 0, 0, function(conn) print("sent") end) end)
end
-- Create an MQTT client instance and connect to the broker
m = mqtt.Client(clientid, keepalive, username, password)
m:connect(broker, port, 0, function(conn) print("connected") end)
-- Configure GPIO2 as an interrupt with a pullup
gpio.mode(gpio2, gpio.INT, gpio.PULLUP)
-- Set GPIO2 to call our handler on both edges
gpio.trig(gpio2, "both", switchcb)
Nach erfolgreicher Installation des MQTT erhält man nach dem Upload auf den ESP im Programm "Esplorer" - http://esp8266.ru/esplorer/ - (wenn man damit arbeitet - kann ich nur empfehlen ) ein "connected".
Nun mal den GPIO2 auf "Null" ziehen. Danach sollte im Log des "Esplorer" ein "sent" stehen.
Im FHEM müssen nun folgende Einträge in fhem.cfg gemacht werden:
define mqtt MQTT 127.0.0.1:1883 # lokaler MQTT Server lauscht auf Port 1883
define mqtt_rain MQTT_DEVICE rain # defeniert Regensensor
attr mqtt_rain subscribeReading_state fhem/Dach/Regen # Das Wort "_state" ergibt sich aus dem "state" des "sensor.lua" - "state" und sollte danach "Rain" oder "Sunny" sein.
Bei jeder Änderung an GPIO2 des ESP wird ein Datensatz an FHEM gesendet:
MQTT arbeitet hier nur im "read" Modus - Es wird nichts geschaltet.
Der Sensor wird mit seinem digitalen Ausgang an GPIO2 angeschlossen und funktioniert auch bei 3,3V ( der Betriebsspannung des ESP-8266).
Hier, wie immer: Wer Rechtschreibfehler findet, darf sie behalten !
super Beschreibung, scheint ja alles dabei zu sein was gebraucht wird.
Werde ich auf jeden Fall nachbauen, hab die Teile zum Glück schon alle da :-)
aber leider fehlt die Zeit im Moment
Hallo, das ist ein alter Thread,
aber hättest du mal eine Bild der Realsiserung?
Wo liegt der Sensor?
Wie ist der Einbau?
Das wäre super.
Danke T