Basteleien

ESP8266-01-WLAN-Thermostat mit ESP8266-01-WLAN-Relais für Stellantrieb Fußbodenheizung

Inhalt

 

1. WLAN-Thermostat mit DS18B20 Temperaturfühler an ESP8266-01

1.1.0 Flashen der Firmware mit nodemcu

Zunächst muß der esp8266-01 mit der nodemcu-firmware geflasht werden.Dazu benötigt man den nodemcu flasher-master.

Diese Software kann hier: nodemcu-flasher heruntergeladen werden.

In der Software die Com-Schnittstelle des FTDI-Programmierers einstellen und unter config die firmware an der Adresse 0x00000 auswählen. Vorne mit dem Kreuz diese Adresse markieren. Dann unter Operation den ESP8266-01 flashen. Als Firmware wähle ich, diese scheint mir am stabilsten zu sein: nodemcu_integer_0.9.5_20150318.bin.

Damit der esp8266-01 geflasht werden kann muß  GPIO 00 mit GND verbunden werden.

Schaltbild ESP8266-01 – Flashen

Pin-Belegung ESP8266-01

ESP8266-01-Thermostat im Gehäuse mit 5V Mikro-USB-Anschluß

 

 

1.1.1 Flashen der Firmware mit espeasy mega 2.0

Zunächst ist auf den Typ der ESP8226-01 Module zu achten. Die blauen Module verfügen über eine Speicherkapazität von 512k, die schwarzen Module über eine Speicherkapazität von 1024k. Nur die schwarzen Module sind für espeasy mega 2.0 tauglich.

Damit das Modul mit der espeasy Firmware geflasht werden kann, muß zunächst die zip-Datei: ESPEasy_mega-20200204.zip in ein beliebiges Verzeichnis heruntergeladen werden. Der Anschluß des FTDI-Programmierers erfolgt genauso wie im Abschnitt 1.1.0 beschrieben, bei dem ESP8266-01 Modul muß GND mit GPIO0 zum flashen verbunden werden (siehe oben: Schaltbild ESP8266-01 – Flashen).

In der zip-Datei ESPEasy_mega-20200204.zip befindet sich unter anderem das flashtool flashesp8266.exe und eine große Auswahl an firmware-Dateien im Verzeichnis bin. Für den schwarzen ESP8266-01 ist die bin-Datei: ESP_Easy_mega-20200204_normal_ESP8266_1M.bin interessant, diese muß als firmwaredatei ausgewählt werden.

Nach erfolgreichem flashen den FTDI-Programmierer entfernen, die Verbindung GPIO-GND des ESP8266-01 entfernen und das Modul durch kurze Unterbrechung der Stromversorgung (3,3V) neu starten. Das Modul startet jetzt als Accesspoint und ist unter  dem Namen ESP_Easy_0 zu sehen. Um sich mit dem Access Point zu verbinden muß das Paswort: configesp eingegeben werden.

Jetzt kann die log-in-Seite des Access Points über die IP-Adresse: 192.168.4.1 im Browser aufgerufen werden. Auf dieser log-in-Seite muß nun der entsprechende WLAN-Account ausgewählt werden und das entsprechende Passwort dafür eingegeben werden. Das ESP8266-01 Modul verbindet sich nun mit dem entsprechenden hauseigenen WLAN. Sollte dies nicht automatisch der Fall sein, so ist die Stromversorgung kurz zu unterbrechen. Mit einem IP-Scanner kann dann die neue IP-Adresse des Moduls – es heisst ESP_Easy_0 – heraus gefunden werden. Mit dieser IP-Adresse kann nun die Startseite des Moduls im Browser aufgerufen werden.

Startsetie des mit Espeasy geflashten Moduls ESP8266-01

 

1.2.0 Programmieren des Thermostat-ESP8266-01 mit lua-skripten

Der ESP8266 kann mit Hilfe der Software Esplorer programmiert werden ( Nach dem flashen kurz die Stromversorgung unterbrechen, sonst gibt es keine Verbindung über den Esplorer).

Die Software kann hier heruntergeladen werden: ESPlorer.

Damit der ESP8266 als Thermostat fungieren kann ist ein Temperaturfühler DS18B20 erforderlich. Der Temperaturfühler wird wie folgt an den ESP8266 angeschlossen:

Schaltplan ESP8266-01-DS18B20

 

Esplorer-Reiter Skript

 

Mit „Save to ESP“ werden die lua Dateien auf dem ESP8266 gespeichert. Die init.lua ist eine autostartdatei, sie wird sofort beim start des ESP8266 ausgeführt. Deshalb empfiehlt es sich zum ausprobieren die init.lua z.Bsp. in test.lua umzubenennen, auf dem ESP8266 zu speichern und über den Button Run zu starten. Erst wenn man weiß, daß alles funktioniert die test.lua wieder löschen und als init.lua auf dem ESP8266 zu speichern. Diese Prozedur vermeidet, daß der ESP8266 in versehentlich programmierte Endlosschleifen läuft, diese sind dann, wenn überhaupt nur sehr mühsam wieder zu beseitigen.

Esplorer-Reiter Command

Hier der Reiter Commands des Esplorer. Hier können verschiedene Befehle an den ESP8266 abgesetz werden (Restart, ChipID, List files und nicht zu vergessen der Befehl „compile send.lua to .lc“ – dies gilt natürlich für jedes andere auf dem esp8266 gespeichert lua-skript also „compilie xxx.lua to .lc“. Dies kann interessant sein, wenn es Speicherplatzprobleme gibt, denn die compilierten .lc skripte benötigen meistens nicht so viel Speicherplatz. Nach dem compilieren kann man dann die entsprechende lua-Datei vom ESP8266 löschen.

1.2.1 Lua-Dateien des WLAN-Thermostat-ESP8266-01 und ihre Funktionen

Insgesamt sind vier .lua Dateien erforderlich: init.lua, ds18b20.lua, send.lua, ds.lua.

Die Datei init.lua erzeugt einen webserver für die Einstellung der Solltemperatur und Anzeige der Ist-Temperatur Die Webseite (smartphonegerecht dimensioniert) kann von jedem Browser, sofern er sich im eigenen privaten LAN-Netz befindet mit der Adresse (hier 192.168.178.110, das ist die IP-Adresse des Web-Servers des ESP8266-01) aufgerufen werden:

Webseite esp8266-Thermostat

ESP8266-01-Thermostat im Gehäuse mit mikro-USB Anschluß für die 5V Stromversorgung

 

Beim Start des ESP8266 wird die Standard-Soll-Temperatur von 21 Grad Celsius eingestellt (stemp=21, am Anfang der Datei init.lua). Über einen timer wird alle 30 Sekunden die Dateien ds.lua und send.lua ausgeführt. Die Datei ds.lua sorgt dafür, daß – durch den timer alle 30 sek- die Temperatur gemessen wird (temp). Die Datei send.lua – durch den timer alle 30 sekunden – sendet die Ist-Temperatur und die eingestellte Soll-Temperatur an eine php-datei in einem Webserver eines RaspberryPi (temp_vergleich.php).Wichtig ist natürlich, daß sowohl in der Datei send.lua als auch in der Datei temp_vergleich die richtigen IP-Adressen eingetragen werden (IP-Adresse des Webservers des RaspberryPi in der Datei send.lua, IP-Adresse des zweiten ESP8266 mit Relais in der Datei temp_vergleich.php. Auch muß in der Datei init.lua das richtige WLAN-Netz mit dem entsprechenden Passwort eingetragen werden (Zeile8: wifi.sta.config(„name_wlan_netz“,“passwort_wlan_netz“). In der Datei init.lua wird eine feste IP-Adresse erzeugt (Zeile 10:wifi.sta.setip({ip=“192.168.178.110″,netmask=“255.255.255.0″,gateway=“192.168.178.1″}).

In dieser Datei (temp_vergleich.php) werden Soll-und Ist-Temperatur miteinander verglichen. Abhängig vom Ergebnis des Vergleiches sendet die php-Datei temp_vergleich.php den Befehl „0x“ oder „1x“ an den ESP8266-01 mit Relais.

Ist die Ist-Temperatur grösser als die Solltemperatur wird das Signal „0x“ – was gleichbedeutend mit Ausschalten ist – an einen weiteren ESP8266-01, der ein Relais ansteuert, gesendet. Die Stellantriebe der Fußbodenheizung werden ausgeschaltet.

Ist die Ist-Temperatur kleiner als die Solltemperatur wird das Signal „1x“ – was gleichbedeutend mit einschalten ist – an den ESP8266-01 mit Relais gesendet. Die Stellantriebe der Fußbodenheizung werden eingeschaltet.

Möchte man die Standardeinstellung der Solltemperatur von 21 Grad Celsius verändern, so muß lediglich einer der Buttons 18, 18.5, 19.5, 20, 20.5, 21, 21.5 22, 22.5, 23, 23.5, 24 gedrückt werden, die Solltemperatur ändert sich entsprechend dieses Wertes. Genauso wie die Ist-Temperatur alle 30 sek per Timer an den Webserver des RaspberryPi gesendet wird, so wird auch die Solltemperatur alle 30 sek an den Raspi gesendet, in der Datei temp_vergleich.php auf dem Web-Server des RaspberryPi mit der Ist-Temperatur verglichen und der zweite ESP8266-01 mit Relais entspechend den Werten geschaltet.

1.3.0 WLAN-Thermostat mit Espeasy und Nodered

Auch hier wird der DS18B20 Temperaturfühler wie im obigen Schaltplan ESP8266-01-DS18B20 zu sehen mit dem ESP8266-01 Modul verbunden. Zunächst werden die Devices temp_wz/TempWZ (Environment DS18b20) und Solltemp_Dev/Solltemp (Dummy Device) eingerichtet. temp_wz=Device Name, TempWZ=value; Solltemp_Dev=Device Name, Solltemp=Value. Mit dem Device temp_wz – eingerichtet als Environment DS 18B20 – wird die Temperatur  im Wohnzimmer im Abstand von 30 Sekunden gemessen (Interval: 30). Mit dem Device Solltemp_Dev  – eingerichtet als Generic Dummy Device – wird die eingestellte Solltemperatur festgelegt. Innerhalb des Reiters config wird die Unit Number auf 0 gesetzt, außerdem kann der Name des Moduls hier verändert werden. Die Solltemperatur wird über eine Benutzeroberfläche von Nodered – Nodered Dashboard –  eingestellt (Raspberry 4 – Nodered: http://192.168.178.101:1880/ui/). Natürlich muß nodered auf diesem Rechner installiert sein und laufen. Installation von nodered auf dem raspberry siehe: https://nodered.org/docs/getting-started/raspberrypi . Nodered ist ein von IBM entwickeltes grafisches Entwicklungswerkzeug (https://de.wikipedia.org/wiki/Node-RED).

Einstellung der Solltemperatur in Nodered

Devices temp_wz und Solltemp im ESP8266-01 Modul Temperatur Wohnzimmer

     

Im nächsten Schritt müssen der Controller OpenHAP MQTT  Port 1883 und – sofern man überDomoticz verfügt – der Controller Domoticz HTTP Port 8080 angelegt mit seinen entsprechenden IP-Adressen angelegt werden (Hier: OpenHAP MQTT 192.168.178.101 und Domoticz HTTP 192.168.178.54).

Controller in Espeasy

Die Werte für die Temperatur im Wohnzimmer temp_wz werden alle 30 Sekunden über MQTT übertragen (Controller OpenHAP MQTT  Port 1883). Der Wert für die Solltemperatur wird alle 60 sek (Interval Device Solltemp_Dev/Solltemp) über MQTT übertragen. Voraussetzung dafür ist, daß in den beiden Devices die Übertragung an die Controller angekreuzt ist.

       

Damit die Werte für die Solltemperatur und die Temperatur im Wohnzimmer per MQTT an den Rechner mit der IP-Adresse 192.168.178.101 übertragen werden können, muß auf diesem – es ist ein Rasberry 4 mit Raspian –  das Softwaremodul mosquitto installiert sein und  der mosquitto daemon laufen (Installation von mosquitto siehe: https://www.instructables.com/id/Installing-MQTT-BrokerMosquitto-on-Raspberry-Pi/ ).

Die Stellantriebe der Fußbodenheizung  werden über ein 230 V Relais – das ebenfalls über ein ESP8266-01 Modul angesteuert wird – geschaltet. Damit das auch funktioniert ist es wichtig, daß in beiden ESP8266-01 Modulen die UDP-Ports eingerichtet sind. Das erfolgt über den Reiter Tools über den dortigen Menupunkt advanced :

Tools/Advanced

Hier gibt es einen Abschnitt Serial Settings, dort muß der Menupunkt Enable Serial Settings angehakt sein, als Baudrate 115200 eingetragen werden und im Abschnitt Inter Espeasy Network für den UDP-Port 65335 eingetragen werden:

Tools/Advanced/Serial Settings

1.3.1 Rules für den Vergleich von temp_wz und Solltemp mit Aktionen für das Schaltrelais der Stellantriebe

Damit überhaupt der Reiter Rules in Espeasy erscheint, muß dieser erst aktiviert werden. Das erfolgt über den Reiter Tools innerhalb des Menüpunktes Advanced. Dort muß unter  Rules Settings Rules und Old Engine angehakt werden.

Im Reiter Rules wird dann die Solltemperatur (Solltemp_Dev#SollTemp) mit der Wohnzimmertemperatur (temp_wz#TempWZ) verglichen.

on temp_wz#TempWZ do
if [temp_wz#TempWZ] > [Solltemp_Dev#SollTemp]
event,TurnOff
endif
endon

In diesem Abschnitt wird sobald alle 30 Sekunden die Wohnzimmer-Temperatur gemessen wird, diese mit der Solltemperatur verglichen. Wenn die Wohnzimmer-Temperatur grösser als die Solltemperatur ist, wird das event TurnOff ausgelöst

on TurnOff do
sendTo 2,event,RelaisOff
endon

Mit dem event turnoff wird der Befehl sendTo 2,event,RelaisOff ausgelöst. sendTo 2 bedeutet: Sende zur Unit 2 (Unit 2 ist das ESP8266-01 Modul für das Schaltrelais), event RelaisOff bedeutet: führe dort – also im Esp8266-01 Modul für das Schaltrelais Stellmotor Fussbodenheizung – das event Relais off aus (Damit alles funktioniert, muß im Reiter config des ESP8266-01 Moduls für das Schaltrelais die UnitNumber auf 2 gesetzt sein).

  

Rules im Modul ESP8266-01 für das Schaltrelais

on RelaisOff do
TaskValueSet 1,1,0
gpio,2,1
endon

Dies ist das event RelaisOff in den Rules des ESP8266-01 Moduls, das das Schaltrelais für den Stellmotor Fussbodenheizung ansteuert. TaskValueSet 1,1,0 bedeutet: Setze im Device 1=Heizungsstatus (erste 1), den ersten Wert (zweite 1) auf 0. gpio,2,1 bedeutet: gpio2 wird auf HIGH gesetzt.

Anlaoges passiert, wenn die Wohnzimmertemperatur kleiner als die Solltemperatur ist. Das event TurnOn wird ausgelöst, welches wiederum das envent RelaisOn  im ESP8266-01 Modul für das Schaltrelais auslöst – das Schlatrelais wird geschlossen und der Stellmotor der Fussbodenheizung öffnet das Ventil.

Rules im ESP8266-01 Modul Temperatur Wohnzimmer:

on temp_wz#TempWZ do
if [temp_wz#TempWZ] < [Solltemp_Dev#SollTemp]
event,TurnOn
endif
endon

on TurnOn do
sendTo 2,event,RelaisOn
gpio,12,0
endon

Rules im ESP8266-01 Modul Schaltrelais:

on RelaisOn do
TaskValueSet 1,1,1
gpio,2,0
endon

TaskValueSet 1,1,1 bedeutet: Setze im Device 1=Heizungsstatus (erste 1), den ersten Wert (zweite 1) auf 1. gpio,2,0 bedeutet: gpio2 wird auf LOW gesetzt.

1.3.2 Einstellung der Solltemperatur über Nodered und Protokollierung der Temperaturen und Schaltvorgänge mit mysql

Wie bereits erwähnt wird die Soltemperatur über ein auf dem Raspberry 4 laufenden nodered eingestellt. Diese Funktionsfähigkeit wird in nodered mit der Einrichtung eines sogenannten Flows ereicht:

Dieses nodered-flow sorgt letzendlich dafür, daß die Solltemperatur eingestellt werden kann (im nodered-Dashboard), die aktuelle Wohnzimmertemperatur angezeigt wird und  abhängig von den Temperaturverhältnissen Solltemp/temp_wz angezeigt wird, ob die Heizung aus oder an ist. Eine grobe Erklärung des Flows:

Das   Symbol hier:

/EOH_Thermostat_WZ/temp_wz/TempWZ, /EOH_Thermostat_WZ/Solltemp_Dev/SollTemp, /ESP_Relais/relais/HeizungStatus, temp_thermostat

steht für en Empfang der aktuellen Wohnzimmertemperatur, der aktullen Solltemperatur und den Empfang des Heizungsstatus (Heizung an, Heizung aus) über MQTT von den ESP8266-01 Devices temp_wohnzimmer.

Über das Gauge   Solltemp wird im Dashboard die Solltemperatur eingestellt :

Mit der Funktion  Funktion Solltemp an espeasy_Thermostat wird die aktuelle Solltemperatur an das ESP8266-01 Modul Thermostat Wohnzimmer gesendet:

var solltemp=msg.payload;
msg.url=“http://192.168.178.78/control?cmd=TaskValueSet 2,1,“;
//var solltemp=24;
msg.url=msg.url + solltemp;
return msg;

Die IP-Adresse 192.168.178.78 ist die IP-Adresse des ESP8266-01 Moduls Thermostat Wohnzimmer, TaskValueSet 2,1, setzt das Device Solltemp auf die eingestellte Solltemperatur.

Andere Funktionen sorgen dafür, daß aktuelle Solltemperaturwerte und Wohnszimmertemperaturen in eine mysql Datenbank geschrieben werden, oder von dort ausgelesen werden, damit sie im Nodered Dashboard angezeigt werden können, z.Bsp: Funktion mysql insert, mysql select tab_heizungs_relais.

var temperature=msg.payload;
msg.topic=“INSERT INTO temp_test (temperature) VALUES (‚“ + temperature + „‚)“;
return msg;

jetzt = new Date();
jetzt.toLocaleDateString(‚en-US‘, { year: ’numeric‘, month: ‚long‘, day: ’numeric‘ });
var gesetzt = new Date();
var tage = 8;

gesetzt.setDate(jetzt.getDate() – tage);
var datum=gesetzt.toLocaleDateString(’se-SE‘, { year: ’numeric‘, month: ‚2-digit‘, day: ‚2-digit‘ });

msg.topic=“SELECT id, DATE_FORMAT(datum_zeit,’%d.%m.%Y %H:%i‘) AS datum_zeit, heizung_relais AS hzg, temp_thermostat,solltemp FROM tab_heizung_relais where date_format(datum_zeit,’%Y-%m-%d‘) >= ‚“ + datum + „‚ ORDER BY datum_zeit DESC“;
return msg;

Das Symbol  bezeichnt die mysql Datenbank: Hier wird der Datenbankname, die IP-Adresse des mysql-Servers auf dem raspberry und das passwort der Datenbank eingetragen.

Das komplettte Nodered-flow kann hier nodered-flow Thermostat/Relais heruntergeladen werden.

 

 

 

 

2. WLAN-Thermostat-Relais mit einem ESP8266-01

Da der ESP8266-01-Thermostat-Relais im Heizungsraum untergebracht wird, muß natürlich sichergestellt werden, daß für diesen ESP8266 auch WLAN-Empfang gewährleistet ist.

Der ESP8266-01 für das Thermostat-Relais wird  im Grundsatz beschaltet wie der ESP8266-Thermostat. Anstelle des Temperaturfühlers DS18B20 wird das Relais angeschlossen.  Das Schaltbild des 5V/220v Relais sieht folgendermaßen aus:

Relais Prinzipschaltplan

 

ESP8266-01-Thermostat-Relais-Schaltplan

 

2.1 Lua-Dateien des ESP8266-01 Thermostat-Relais

 

Für den ESP8266-01-Thermostat-Relais sind zwei Dateien erforderlich: init.lua, antwort_r.lua

Die Datei init.lua versorgt den ESP8266 mit einer IP-Adresse aus dem privaten Netz. Hier wurde eine feste IP-Adresse .109 gewählt.

Weiterhin ist der ESP8266 mit der IP-adresse 192.168.178.109:9274 auf Port 9274 empfangsbereit für Befehle.

Bekommt der ESP8266 von der Datei temp_vergleich.php den Befehl „0x“, so wird der Pin GPIO02 auf HIGH=3,3V geschaltet. Das Relais schaltet den Stellantrieb aus. Die Heizung ist aus.

Bekommt der ESP8266 von der Datei temp_vergleich.php den Befehl „1x“, so wird der Pin GPIO02 auf LOW=0V=GND geschaltet. Das Relais schaltet den Stellantrieb an. Die Heizung ist an.

Mit Hilfe der Datei antwort_r.lua wird eine Webseite erzeugt, die den Zustand des ESP8266-Thermostat-Relais anzeigt, „Heizung ist AUS“ oder „Heizung ist AN“. Darüber hinaus kann mit Hilfe eines Buttons der Zustand des Relais manuell abgefragt werden.

 

 

Webseite Thermostat-Relais

2.2 Thermostat Relais mit Espeasy

Die Devices des ESP8266-01 Moduls für das Thermostat Relais sind relais/Heizungsstatus (Dummy Device)  und heizung/Switch (Switch Input Switch). relais=Device Name, Heizungsstatus=Value; heizung=Device Name, Switch=Value. Die Rules für das ESP8266-01 Relaismodul siehe Abschnitt 1.3.1.

Die Controller dieses Moduls sind die gleichen wie im ESP8266-01 Modul für das Thermostat: OpenHAP MQTT  Port 1883 und – sofern man überDomoticz verfügt – der Controller Domoticz HTTP Port 8080.

 

 

 

Thermostat-Relais im Einsatz an der Heizung