ESP8266 zur Heizungsüberwachung und anderes

Begonnen von Toshi, 17 November 2015, 14:54:21

Vorheriges Thema - Nächstes Thema

Toshi

@Franz,

ich sehe da überhaupt kein Problem. Im nächsten Teil werde ich das Programm für den ESP hochladen. Derzeit kann es bis zu 8 Sensoren abfragen, aber man kann die Anzahl sehr einfach erhöhen. Ich verwende aber 2-Wire (also 3 Leitungen), es sollte aber auch als OneWire laufen.

Solar-Rücklauf ? Kann der nicht sehr warm werden ?

Franz Tenbrock

ja kann mal 90 Grad werden :-)
hat bisher immer gut mit 1 wire geklappt
wenn ich das aber mit einem esp machen könnte dann wäre es einfacher,
habe schon max homematic und fs20

Brauche leider immer noch gute Anleitungen da ich einfach zu wenig Zeit habe mich über einen längeren Zeitraum mal in die ganze Thematik tief einzuarbeiten.
Aber einiges hab ich ja trotzdem schon laufen.
werde weiter hier am Ball bleiben, Hardeware hab ich zum Glück schon und könnte das dann schnell nachbauen
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

Toshi

#17
Teil 3 - Programmierung ESP

Werkseitig wird der ESP mit einer Software ausgeliefert, die ihn zum Modem degradiert. Diese SW nützt uns gar nichts und muss durch was eigenes ersetzt werden.

Variante 1
Der Hersteller bietet eine Entwicklungsumgebung und Software zum Flashen an. Da ich Variante 3 so gut fand, habe diese IDE nie wirklich getestet.

Variante 2
Insbesondere die nodeMCUs werden mit einem LUA-Interpreter ausgeliefert. Wie bei jedem Interpreter geht hier viel Zeit verloren und timing ist beim ESP leider wichtig. Ausserdem stellt der Interpreter nur sehr wenig Speicher zur Verfügung und scheint nicht sehr stabil zu laufen. Einfach zu bedienen aber m.E. für coole Projekte nur bedingt geeignet.

Variante 3
Die IDE des Arduino wurde um einen Boardmanager für ESP8266 sowie viele Libraries erweitert. Es wird der ESP direkt programmiert, ein Arduino ist nicht erforderlich.
Ein großes Lob an die Arduino-Leute, es ist unglaublich was die Libs alles zur Verfügung stellen, und zu jeder Funktion gibts ein Beispiel. Die Lernkurve ist extrem steil und es bsteht durchaus Suchtgefahr.
Bitte einfach nach arduino, ide und esp8266 suchen und man findet die IDE und viele Anleitungen zum installieren.
Dann den 8266 zum FLashen an den USB-Port anschliessen, das begelegte Script kompilieren und hochladen.
Vor dem Kompilieren müssen aber noch die Werte für SSID, Password, der Name des FHEM device und IP-Adresse des FHEM-Servers eingetragen werden.
Das Programm ist ein Prototyp und noch nicht ins Reine Programmiert, ebenso ist die Doku unzureichend aber so kompliziert ist es dann doch nicht.

Der 8266 durchläuft nach dem Boot einmal die function setup() und danach unendlich die function loop(). Die CPU benötigt aber auch noch Zeit für interne Prozesse. Als Anwender muss man also der CPU durch regelmäßiges Aufrufen von delay() oder yield() etwas Zeit geben um z.B. die WLAN-Verbindung aufrechtzuhalten.

Im Setup wird zuerst die serielle Verbindung aufgebaut, damit man über den seriellen Monitor den verfolgen kann. Danach folgen WLAN und der Web-Server. Über den Aufruf von http://IP_des_8266/status kann man sich die letzten Temperaturen und Details über die Sensoren anzeigen lassen.
Zuletzt wird der One-Wire gescannt und alle Adressen und Typen in eine Tabellen geschrieben. Derzeit ist die Tabelle auf 8 Einträge begrenzt, kann aber erweitert werden.

In der Loop werden nun alle Sensoren entsprechend der Tabelle ausgelesen. Der Typ wird benötigt, da die Sensoren unterschiedlich Auflösungen haben, die unterschiedlich berechnet werden. Wurde die Tabelle vollständig abgearbeitet, wird ein String zusammengebaut, der einen http-Request mit eingefügten Messwerten ans FHEM schickt.
Da man den String selber zusammenbauen kann, hat man die vollständige Freiheit der Gestaltung.
Um die Größe meines Log-Files gering zu halten, wollte ich nur eine Zeile pro Timestamp, aber man genauso auch für jeden Sensor eine eigene Zeile mit eigenem Devicenamen generieren.

Große Teile entstammen den unterschiedlichsten Beispielen der Arduino-ESP8266 Erweiterung.





 

Kuzl

Hallo Toshi,

evtl wär hier auch MQTT intressant. Damit kannst du die einzelnen Werte getrennt und auch in einem "richtigen" Device an FHEM senden.

Gruß,
Kuzl

scuba

Danke für den Tipp! Das mit der DIY Optokoppler Lösung gefällt mir sehr gut!! Ist sicherlich auch in anderen Bereichen (Lichtstatus usw.) eine günstige Alternative!
Meine ESPs sind auf jedenfall schon unterwegs aus China  ;D

AxelSchweiss

Zum Abfragen von 230V Stati meiner Heizung verwende ich seit ca. einem Jahr diese Schaltung:
http://www.mikrocontroller.net/articles/230V#Galvanisch_getrenntes_Abfragen_von_230V_Wechselspannung
Kann ich nur empfehlen ... läuft einwandfrei.
Habe mir sogar ein paar Platinen auf Vorrat gebaut da man die überall verwenden kann.


SpenZerX

Zitat von: AxelSchweiss am 20 November 2015, 08:39:10
Kann ich nur empfehlen ... läuft einwandfrei.

Hi,

Funktion ist nicht alles. Verbraucht die Schaltung nicht zu viel Strom für ein modernes Design?

AxelSchweiss

Nun ja ... das Ganze läuft mit vier von diesen Schaltungen und einem Homematic Sendemodul jetzt seit einem Jahr an einer 9-Volt Blockbatterie die damals schon nicht ganz taufrisch war.
Es sind mindestens 16 Schaltung on/off pro Tag.

Auf der Primärseite hast du ja 230Volt .... und auf der Sekundärseite nur den Fototransistor ( die anderen Komponenten habe ich da nicht gebraucht)

Toshi

Teil 4 - Programmierung  FHEM und Hardware mit nodeMCU

Im Vergleich zu der Firmware-Programmierung aus Teil 3 ist der FHEM-Teil dieses Projekts relativ einfach.

Hier der Auszug aus meiner fhem.cfg

----------------------------------
define 8266_Heizung CUL_WS 4
attr 8266_Heizung event-min-interval state:290
attr 8266_Heizung room Plots_Heizung
define FileLog_8266_Heizung FileLog ./log/8266_Heizung-%Y.log 8266_Heizung
attr FileLog_8266_Heizung room Logs
define SVG_FileLog_8266_Heizung_1 SVG FileLog_8266_Heizung:SVG_FileLog_8266_Heizung_1:CURRENT
attr SVG_FileLog_8266_Heizung_1 room Plots_Heizung
define SVG_FileLog_8266_Heizung_2 SVG FileLog_8266_Heizung:SVG_FileLog_8266_Heizung_2:CURRENT
attr SVG_FileLog_8266_Heizung_2 room Plots_Heizung
define SVG_FileLog_8266_Heizung_3 SVG FileLog_8266_Heizung:SVG_FileLog_8266_Heizung_3:CURRENT
attr SVG_FileLog_8266_Heizung_3 room Plots_Heizung
-------------------------------------------------

Zuerst wird das Device Heizung_8266 definiert. Dieser Name entspricht dem Wert, den ihr in der Firmware (siehe Teil 3) eingetragen habt.
Der Name kann natürlich frei gewählt werden.
Diesem Device wird noch ein Log-File zugeordnet.
Danach werden nur noch die Plot-Definitionen angelegt, die aber alle drei auf dasselbe Log-File zugreifen.
Format der Dateien wurden vorher schon dargestellt.
Das einzige Problem :
Meine fünf Sensor-Werte werden als T1 bis T5 im Log-dargestellt. Die Reihenfolge ergibt sich aus dem ersten Scan der DS1820 auf dem Bus. Die Zuordnung zu Heizung oder Warmwasser etc. muss also manuell durch Kontrollmessung und Beobachtung erfolgen. Es ist aber einfacher als es klingt. Die Raum-Temp ist meist stabil und Vor- und Rücklauf folgen einander doch sehr deutlich, sodaß eine sichere Zuordnung möglich ist. Dann können in den Definitionen die richtigen Spalten ausgewählt werden.


Schaltung mit NodeMCU :

Die Beschaltung ist sehr simpel. PIN D4 entspricht I/O-Port 2, wie in der Firmware gewählt. Bild im Anhang
Die Stromversorgung erfolgt über ein MicroUSB-Steckernetzteil, welches direkt an das NodeMCU angeschlossen wird.

Und damit ist euer Sensor fertig :-)
Das Material gibts bei Ali für unter 8€. In D müsste man es aber für unter 20€ bekommen.

Viel Spaß damit

PS.:
Schaltung für das "pure 07" kommt später, ich muss noch erst ein Bauteil für Fritzing bauen




ckbln

Hallo Toshi

damit der ESP an fhem sendet mus ja noch die IP vom fhem Server eingetragen werden.
Ist das so richtig?

byte server[]  = { 192, 168, 2, 54 };    /// ****** Hier IP des FHEM-Servers


Muss auch noch die IP vom fhem Server angegebn werden?
Also das  www.local.lan nach http://192.168.2.54 ändern?

client.print("Host: www.local.lan\r\n");

Guß
Christof

Toshi

Hi Christoph,

das sieht richtig aus, wichtig ist nur dass die Kommata nicht durch Punkte ersetzt werden, da es sich hier um members eines arrays handelt.

Die "Host"-Zeile läuft bei mir genauso, obwohl der Namen nichts mit meinem Netz zu tun hat und auch nicht lokal aufgelöst werden kann.
Eigentlich müsste da die Host-Uri drin stehen. Aber FHEM-Pi scheint der verkehrte Eintrag nicht zu stören.
Ich finde die Aussagen des W3C dazu sehr kryptisch
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html und dort unter Host suchen.
Solltest du basic auth zum übertragen verwenden, könnte der Eintrag vielleicht gebraucht werden. Vielleicht weiss hier ja jemand mehr dazu

VG
Toshi

Prof. Dr. Peter Henning

#26
DS18B20 Temperatursensoren in Edelstahlhülse kosten weniger als 2 € - dafür lötet niemand das von Hand.

Gerade in einem Heizungskeller benötigt man noch andere Daten, als nur Temperaturen. Beispiel: Zirkulationspumpensteuerung
http://www.fhemwiki.de/wiki/1W-WPump. Dazu kommen bei mir noch solarthermische Durchflussmessung und PV-Anlage.

Empfehlenswert ist also, einen ordentlichen 1-Wire Busmaster zu verwenden. Den kann man entweder per USB-Extender (bis zu 20 m) an sein FHEM koppeln, oder den 1-Wire-Bus so anschließen:

http://www.fhemwiki.de/wiki/1W-IF-ETH oder
http://www.fhemwiki.de/wiki/1W-IF-WIFI

(geht inzwischen auch ohne socat).

Bei mir steht dort ein separater Raspberry Pi mit Hochsleistungs WLAN-Antenne, weil ich auch die Heizungssteuerung darüber abwickele.

LG

pah




ckbln

Hallo Toshi,
leider funktioniert die Datenübermittlung an fhem nur sporadisch.
Heute morgen habe ich den ESP gestartet und bis jetzt sind nur 7 Meldungen agekommen.

2015-11-23_10:12:53 8266_Heizung T1: 23.37
2015-11-23_10:31:37 8266_Heizung T1: 23.44
2015-11-23_11:01:49 8266_Heizung T1: 23.87
2015-11-23_12:04:51 8266_Heizung T1: 23.37
2015-11-23_13:38:31 8266_Heizung T1: 23.62
2015-11-23_14:46:43 8266_Heizung T1: 23.81
2015-11-23_15:09:59 8266_Heizung T1: 23.87

Auf der seriellen Console kommen die Temperaturwerte regelmäßig zur Ausgabe.
Bei 3 Datenübertragungen an fhem hat der ESP wohl einen Reset gemacht?
wdt reset
load 0x4010f000, len 1264, room 16
tail 0
chksum 0x42
csum 0x42
~ld

.......
Connected to 7390chk24
IP address: 192.168.2.67
MDNS responder started
HTTP server started
  Chip = DS18B20
ROM =28E5F7E0400FC
  Data = 1 76 1 4B 46 7F FF A 10 79  CRC=79
  Temperature = 23.37 Celsius


Hast du eine Idee warum die Übergabe an fhem nicht regelmäßig funktioniert?



Viele Grüße
Christof

Toshi

#28
@ Christoph
schreib mir mal bitte, was für ein Modul und mit welchem Setup Du es benutzt.
---------

Zu meiner Überraschung habe ich dieses Problem des zum Teil sehr sporadischen Transmits auch. Es fiel bisher nur nicht so sehr auf, da der Sensor alle 30 Sekunden senden soll und FHEM das Logging sowieso auf alle 5min begrenzte.

Ich habe die letzten Tage mit viel Recherche und Testen verbracht.
Während der Entwicklung habe ich ein nodeMCU verwendet und es gab keine Probleme. Für den Produktiveinsatz dagegen habe ich ein einzelnes 8266-07 verwendet.

Nach allgemeiner Auffassung gibt es mehrere Ursachen, die zum regelmäßigen reboot durch den WatchdogTimer oder andere Gründe führen können.

1. Software-Design
Bekommen die Hintergrundprozesse nicht genügend CPU-Zeit oder kommt das User-Programm in eine Endlosschleife so wird ein Reboot ausgeführt.
Ich habe deshalb die Schleifen im Programm nochmal überarbeitet und die Delays angepasst. Zusätzlich habe ich an zwei m.E. kritischen Stellen den WatchdogTimer direkt zurückgesetzt.
Leider hat es bei mir die Situation nicht verbessert, die SW sieht jetzt aber schöner aus und liefert jetzt auch noch Angaben zur Flash-Size etc.

2. Speicher
Nach mehrmaligem Flashen soll der Speicher im Modul sehr schnell Fehler aufweisen. Anscheinend kann es bei schlechter Qualität schon nach 20maligen Flashen zu Problemen kommen. Der Speicher auf NodeMCUs soll im allgemeinen besser sein. Für Bastler mit Geduld und ruhigen Fingern besteht aber die Möglichkeit, den Flash auch durch einen neuen, besseren Typ zu ersetzen. Bei knapp 2€ pro Modul macht das nicht unbedingt Sinn und ist nur gut fürs Ego :-)

3. Spannungsversorgung
Je nach verwendetem Netzteil nahm die Häufigkeit des Reboots zu oder ab. Netzteile mit höherer Leistung waren nicht unbedingt besser. Im Moment tut ein 1.5A NoName-Netzteil gute Dienste. Ich verwende ein1117-Modul als Spannungswandler, welches schon einige Kondensatoren beinhaltet, habe jetzt aber zusätzlich noch einmal auf der 3.3V-Seite ein 470microF-Elko zur Stabilisierung eingebaut.

4. Pin-Belegung
Man sollte sich vielleicht doch an allgemeine Empfehlungen halten. Mein RST-Pin wurde durch einen Taster bei Reset auf GND gezogen, war aber ansonsten floating. Ich habe jetzt den Pin durch einen zusätzlichen 10K-Widerstand gegen Vcc hochgezogen.

5. Compiler
Ich verwende ja die Arduino-IDE und habe die SW bisher als generic 8266 kompiliert und hochgeladen. Jetzt verwende ich als Board-Einstellung nodeMCU 12e, obwohl es sich um ein einfaches 07-Modul handelt.


Seit den Anpassungen entsprechend 4. und 5. scheint es jetzt seit etlichen Stunden stabil in der Produktivumgebung zu laufen.

Anhang
aktuelle Schaltung des 07-Moduls
aktuelle Firmware

Entsprechend dem Hinweis von Friedrich (siehe unten)  :
DER 78XL ist nur symbolisch dargestellt, da er am ehesten dem von mir verwendeten Modell enstpricht. Bitte Polung für GND und 5V beachten !!!
Mein 1117-Modul verwendet GND 3,3V 5V in der Reihenfolge.





Omega-5

Hallo Toshi,

ich nehme mal an du hast nicht den im Bild gezeigten Spannungsregler im TO-220 Gehäuse. Bei dem würden die Anschlüsse falsch verdrahtet sein.
Auf die Beschriftungsseite gesehen von links nach rechts --> Input - GND - Output. Du solltest auch auf der Inputseite einen kleinen Kondensator anschließen und direkt am Modul noch einen kleinen keramischen 100nF zum abblocken der HF. Der Widerstand am Reset ist auf jedenfalls von Vorteil evtl. auch noch ein Ko. 100nF nach Masse, das macht alles noch ein wenig störfester.

Gruß Friedrich
RaspberryPi2, nanoCUL, 3x DS18B20, FS20: 4x Funk-Schalter ST-4, LaCrosseGW,
HomeMatic: HMLAN, HM-WDS10-TH-O, HM_MYS_RelaisBoard,
I2C: HYT221 über modifiziertes Modul I2_I2C_SHT21.pm (Q&D),