FHEM & ESP8266 - Regensensor - Nur mit ESP8266-01

Begonnen von bananas, 16 August 2015, 00:09:33

Vorheriges Thema - Nächstes Thema

bananas

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 !






Franz Tenbrock

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
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

riker1

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
FHEM    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox