Update März 2016 – Einfacher geht es mit Easy ESP in meinem Beitrag Teil 2
Etwas ungewohnt die Überschrift. Als Zielgruppe spreche ich heute auch die Blog-Leser an, welche mal ein Wochenend-Projekt starten möchten. Das alles mit geringen Kenntnissen von Elektronik und Fhem, jedoch mit dem Ziel, ein schnelles Erfolgserlebnis zu bekommen.
Bei dem hier vorgestellten WLAN-Thermometer werden alle paar Minuten Temperaturdaten auf dem integrierten Webserver angezeigt und / oder gleichzeitig rübergeschubst zu Fhem.
Der Aufbau dieser Schaltung ist sehr einfach, man benötigt keinen Lötkolben und später nur eine 5V USB-Versorgungsspannung und das WLAN. Als Herz dieser Schaltung wird der NODEMCU-Microcontroller verwendet. Grund dafür ist, das er einen ESP8266-12 an Board hat, leicht zu programmieren ist von der Spannungsversorgung her mit 5 V USB betankt werden kann. Zur Temperaturmessung wird ein 18B20 1-Wire Chip benötigt, welcher sehr preisgünstig ist und auch mal einen Kurzsschluß oder eine Falschbeschaltung vertragen kann. Also auch ideal für Anfänger. Außerdem benötigt man noch ein 1 K-Ohm Widerstand, der als Pull-Up verwendet wird. Achtung: Wenn der 18B20 1-Wire Temperatur-Sensor über ein sehr langes Kabel (z. B. 60 m) angeschlossen werden soll, muss der Widerstand ausgetauscht werden! Blog-Leser Christian und ich haben damit einen netten Abend am Telefon verbracht, um seine 6 18B20-Temperaturmodule zum Rennen zu bekommen. Wir haben da einen 300 Ohm Widerstand verwendet. Jetzt läuft die Schaltung wie eine Uhr. Als kleine Besonderheit könnt ihr auch die Daten gleichzeitig (d. h. Abruf alle 30s) in Fhem übertragen. Wer kein Fhem hat, dann die Programmzeilen löschen und erhält über die IP den Temperaturwert auf der Website (s. Foto oben).
Den Programm-Code dieser Schaltung habe ich in den Grundzügen aus dem Github vom NodeMCU gezogen und leicht modifiziert.
Bei den LoLin-NodeMCUs (->LoLin NodeMCU bei eBay) die 5V Spannungsversorgung für den DS18B20 auf dem Pin VU (der dritte Pin links oben) abgreifen.
Die Bauteil-Liste:
- Breadboard (Steckbrett) (amazon: COM-FOUR® Zubehör für Breadboard Steckplatine (Breadboard)
) - Kabel (z. B. das Kabel-Set von amazon.de: Neuftech 3 in 1 kit „female-female “ „male-female“ „male-male“ jumper wire cable Kabel Steckbrücken Drahtbrücken für Arduino Raspberry pi
- NodeMCU: amazon.de Verschiedene Anbieter
- 18B20-Thermosensor (Meß-Temperaturbereich von -55 – +125 Celsius (amazon: 10 × DS18B20 Digital Temperature Sensor Thermperatursensor TO92 – 55°C – +125°C
) - ggf. Heißkleber, damit klebe ich einfach alles :-), z.b. bei amazon.de: Pattex Hot Pistol Starter Set-Hobby, 1425723
- Widerstand, hier 1 K-Ohm, abhängig von der Leitungslänge! Wer später noch viel basteln möchte, der sollte gleich ein Sortiment bestellen, z.b sowas: KOHLESCHICHT-WIDERSTANDS-SORTIMENT 390ST
Aktion: ich habe noch die Bauteile komplett als Set hier liegen. Wer zuschlagen möchte, für 21,45 Euro inkl. Versand könnte ich Euch ein Set abgeben. Das Set beinhaltet den original NodeMCU (kein Fake), Kabel, 1 x DS18B20-Temperaturmodul und ein 1 K-Ohm Widerstand. Gegen Aufpreis noch ein Breadboard.
Bitte per e-Mail kontaktieren oder unten in den Kommentaren anfragen!
Ihr könnt die Schaltung auch fliegenderweise zusammenstecken und später mit Heißkleber fixieren, siehe Foto.
Software:
Da manche NodeMCU-Bausteine nicht geflashed sind, würde hier hier erst mal die Firmware flashen, Windows: https://github.com/nodemcu/nodemcu-flasher
Einstellungen (Advanced Tab): 921600 Baud, 4MByte Flash size, 80 MHz Flash speed, SPI Mode: DIO
Auf dem Tab „Config“ hier die Float-Variante auswählen (https://github.com/nodemcu/nodemcu-firmware/releases) , Ziel-Adresse 0x00000
Hinweis: die Geschwindigkeit von 921600 baud ist wohl nicht auf jedem Rechner (besonders auf virtualisierten Systemen) machbar.
In diesem Fall die baud rate auf 57600 runternehmen, besser langsam flashen als gar nicht
Die Software stammt ursprünglich aus dem Github und ich habe sie nur an einigen Stellen modifiziert, warum das Rad zwei mal erfinden? Ich habe sie leicht modifiziert. Jetzt können die Temperaturdaten auch gleichzeitig (bzw. alle 30s) an Fhem übertragen werden. Als Entwicklungsumgebung nehme ich die auf JAVA-basierte Version von Esplorer.
init.lua
--init.lua
wifi.setmode(wifi.STATION)
wifi.sta.config("DeineSSID","DeinPasswort")
wifi.sta.connect()
tmr.alarm(1, 1000, 1, function()
if wifi.sta.getip()== nil then
print("IP unavaiable, Waiting...")
else
tmr.stop(1)
print("ESP8266 mode is: " .. wifi.getmode())
print("The module MAC address is: " .. wifi.ap.getmac())
print("Config done, IP is "..wifi.sta.getip())
dofile ("fhem.lua")
end
end)
fhem.lua
--fhem.lua
require('ds18b20')
-- ESP-01 GPIO Mapping
pin =1
ds18b20.setup(pin)
t=ds18b20.read()
print("Temp:" .. ds18b20.read() .. " C\n")
if(t==nil) then
t=0
end
-- übergabe der Temperatur in Fhem
-- IP entsprechend korrigieren
-- fhem start
tmr.alarm(3, 300000, 1, function() sendDatafhem() end )
function sendDatafhem()
print ("fhem!")
t=ds18b20.read()
conn=net.createConnection(net.TCP, 0)
conn:on("receive", function(conn, payload) print(payload) end )
conn:connect(8083,"DeineFhemIP")
conn:send('GET /fhem?cmd=setreading%20esp82662%20state%20T:%20' ..t.. '\r\n HTTP/1.1\r\nHost: www.local.lan\r\n".."Connection: keep-alive\r\nAccept: */*\r\n\r\n"')
end
-- Anzeige auf Website
srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
conn:on("receive",function(conn,payload)
print(payload)
conn:send(t)
end)
end)
--- Get temp and send data to thingspeak.com
--https://thingspeak.com/channels/xxxxx/private_show
function sendData()
--ds18b20.read()
t1=ds18b20.read()
t2=23.0
--t1 = lasttemp / 10000
--t2 = (lasttemp >= 0 and lasttemp % 10000) or (10000 - lasttemp % 10000)
print("Temp:"..t1 .. "."..string.format("%04d", t2).." C\n")
-- conection to thingspeak.com
print("Sending data to thingspeak.com")
conn=net.createConnection(net.TCP, 0)
conn:on("receive", function(conn, payload) print(payload) end)
-- api.thingspeak.com 184.106.153.149
conn:connect(80,'184.106.153.149')
conn:send("GET /update?key=DeinApiKey&field1="..t1.."."..string.format("%04d", t2).." HTTP/1.1\r\n")
conn:send("Host: api.thingspeak.com\r\n")
conn:send("Accept: */*\r\n")
conn:send("User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)\r\n")
conn:send("\r\n")
conn:on("sent",function(conn)
print("Closing connection")
conn:close()
end)
end
-- send data every X ms to thing speak
tmr.alarm(0, 600000, 1, function() sendData() end )
ds18b20.lua (aus dem Github)
In fhem dann folgendes eintragen:
define esp8266temp CUL_WS 4
attr esp8266temp alias esp8266 Testmodul NodeMCU
attr esp8266temp event-min-interval state:1200
attr esp8266temp model KS300
attr esp8266temp room Plots
define FileLog_esp8266temp FileLog ./log/esp8266temp-%Y.log esp8266temp:T:.*
define SVG_FileLog_esp8266temp_1 SVG FileLog_esp8266temp:SVG_FileLog_esp8266temp_1:CURRENT
define SVG_FileLog_esp8266temp_2 SVG FileLog_esp8266temp:SVG_FileLog_esp8266temp_2:CURRENT
attr SVG_FileLog_esp8266temp_2 label "WLAN-Thermo min.: $data{min1} °C, max: $data{max1} °C, Letzte: $data{currval1} °C"
attr SVG_FileLog_esp8266temp_2 room Plots
Das Ergebnis in Fhem (Plot) sieht dann beispielsweise so aus:
Hardware:
Installation:
Als Entwicklungsumgebung nehme ich die auf JAVA-basierte Version von Esplorer. Hier werden nach und nach folgende Dateien init.lua, fhem.lua und ds18b20.lua auf dem NodeMcu übertragen.
Fazit: Mit nur 3 Bauteilen könnt ihr euch ein WLAN-Thermometer bauen. Mit einem eigenen Webserver on Board, den ihr mit jedem Browser in Eurem Netzwerk aufrufen könnt. Fhem-Benutzer erhalten die Temperatur-Daten alle 30 s in ihrer Fhem-Umgebung und können dann natürlich dort lustige Sachen machen:
- Temperaturplots und Listen
- Eine Aktion starten, wenn die Temperatur unter- oder überschritten ist
Software verbessern? Kein Problem, selber machen!
Hallo Robin,
nachdem ich mit Deinem Projekt mit der Olympia-Anlage angefangen habe und das als zweites Projekt etwas erweitert habe um über Fhem eine 4-fach-Einzel-Steckdosenleiste fürs Aquarium zu bauen, wollte ich eigentlich nicht wieder mit einer anderen Programmier-Variante weitermachen zumal es ja schon zu 90% läuft.
Einen Plot bekomme ich jetzt auch (im Plot Editor war bei Input „Regexp“ voreingestellt, musste in „esp8266temp.T:“ geändert werden).
Kannst Du mir noch einen Tip geben, warum der Code für das Label keine Wirkung hat?
Und warum kommen Werte fast immer alle 25 Minuten, obwohl es laut Deinem Text 30s sein sollten (wobei 300000 ms doch eigentlich 300s=5min sein sollten)?
2017-01-15_15:10:38 esp8266temp T: 0.375
2017-01-15_15:35:38 esp8266temp T: 0.3125
2017-01-15_16:00:38 esp8266temp T: 0.3125
2017-01-15_16:25:38 esp8266temp T: 0.25
2017-01-15_16:50:38 esp8266temp T: 0.125
Hallo Stephan,
wenn Du die Bauteile schon hast, verwende lieber das
https://blog.moneybag.de/einfaches-wlan-thermometer-fuer-fhem-mit-nodemcu-ohne-loeten-teil-2/
ist einfacher…
Habe ich am Anfang des Beitrages auch so geschrieben.
LG
/robin
Hallo,
habe dieses Thermometer gerade meinem langsam wachsenden Fhem-Zoo dazugefügt, habe aber einige Fragen (bin in FHEM-Programmierung nicht fit):
Laut Script kommt in die fhem.lua:
conn:send(‚GET /fhem?cmd=setreading%20esp82662%20state%20T:%20‘ ..t.. ‚\r\n HTTP/1.1\r\nHost: http://www.local.lan\r\n“..“Connection: keep-alive\r\nAccept: */*\r\n\r\n“‚)
Das ergibt aber einen „please define esp82662 first“-Fehler. Da ist doch eine 2 zuviel? Aber selbst ohne die 2 zeigt fhem „please define“, nur wenn ich „setreading%20esp8266temp…“ schreibe, dann geht es und das FileLog wird tatsächlich mit Werten gefüllt.
Allerdings bleibt die entsprechende Grafik leer (keine Werte) und auch das Label wird nicht geschrieben.
Hat jemand Tips?
Hallo,
ich hatte das gleiche Problem wie Michael.
Error–> ds18b20.lua:114: malformed number near ‚1.8‘
Es liegt an der falschen NodeMCU- Firmware man muss die float Version draufspielen.
Mit der „nodemcu_float_0.9.6-dev_20150704.bin“ läuft es bei mir
Gruß
Termi
Hallo
möchte zwei Temperaturen vom Pufferspeicher über Wlan abrufen.
Kann ich die dazu benötigten Bauteile von Ihnen erwerben und zu welchen Preis.
Das Wlan liegt im Keller an.
MfG
Schnabel
Hallo Robin,
Ich verfolge deinen Blog nun schon einige Monate und bin von deinen Arbeiten begeistert.
Mach weiter so!
Hast du das Set noch zum Verkauf?
Gruß Andy
Nach dem Konfigurieren auf Deine SSID fährt der NodeMCU wieder hoch und loggt sich in Deinem WLAN ein. Wir sprechen aber hier von Easy ESP (Teil 2) von meinem Blog-Beitrag. Ansonsten hat er wohl ein Problem da was zu speichern.
ja. Deshalb weiß ich ja nicht weiter. Vielleicht macht der ESP einen reset beim ziehen der USB-Verbindung?
Hallo Reinhold,
Versuche erst mal das Image von Teil 2 zu flashen. Das ist bedienerfreundlicher.
LG
/robin
Was ich meinte: Wenn ich eine Stromversorgung anschließe und den Computer abtrenne habe ich auf dem Smartphone leider keine HTML-Seite mehr. In der Fritz-Box ist der ESP noch da.
Hallo Reinhold,
arbeite erst mal mit Teil 2 weiter: https://blog.moneybag.de/einfaches-wlan-thermometer-fuer-fhem-mit-nodemcu-ohne-loeten-teil-2/
Besorge dir ein Handy-Netzteil, die haben 5 V und ein USB-Micro kabel und schließe es an dem NodeMCU an. Der NodeMCU hat ein Spannungswandler, regelt also von 5V auf 3,3 V runter.
Eine Batterie kann ich nicht empfehlen, da diese sofort leer ist (70 mA braucht der ESP 8266).
LG
/robin
Danke, gute Anleitung! Wenn alles mit USB-Anschluss am Computer funktioniert, wie kann man jetzt den NodeMCU auf dem Balkon montieren? wenn man eine Batterie an den 3.3 V Anschluss anschließt und USB abtrennt sendet der ESP nicht mehr, oder was macht er?
Pingback: Einfaches WLAN-Thermometer für Fhem mit NodeMCU ohne Löten (Teil 2) | Robins Blog – Technik und Multimedia
Hi Robin,
das ist auch cool, wäre sicher eine meiner nächsten Fragen gewesen 😉
Aber ich meine nicht als Output sondern als Input, d.h. z.B. ein Klingelknopf, der über FHEM dann irgendwas auslöst. MCUs habe ich gerade bekommen, nun müßte ich nur noch wissen, wie ich das realisiere. Ich würde dann auch gerne mehrere Eingänge abfragen, also z.B. Klingel, Türkontakt,…. Also im Prinzip immer ein Kurzschlussschalter, der über Funk abgefragt wird und bei Kontakt dann an FHEM sendet.
Hast Du da ein Beispiel ?
Hallo Christian,
meinst du sowas?
https://blog.moneybag.de/olympia-protect-9061-wlan-switch/
LG
/robin
Hallo,
das ist eine prima Anleitung. Frage: Wenn ich statt der Sensorik einfache Schalter abfragen möchte (möglichst mehrere), wie muss ich dann die Skripte ändern ?
Gruß Christian S.
Ha, funktioniert fast auf anhieb.
Hatte auch den Fehler :ds18b20.lua:114: malformed
Für alle die diesen Fehler auch habe, einfach ein Komma statt dem Punkt setzen, dann gehts.
Jetzt muss ich nur noch rausfinden wie ich mehrere DS18s anschließe um die Vorlauftemeratur der Heizung zu kontrollieren.
Schonmal vielen Dank Robin für die vielen interessanten Projekte im Blog.
Weiter so 🙂
Hallo Lars,
ich habe das Script angepasst, sollte jetzt klappen.
LG
/robin
Hallo Robin,
erstmal vielen Dank für deine Anleitung. Ich bin immer wieder fasziniert was man mit so wenig Sachen machen kann.
Ich bin deiner Anleitung, wenn auch mit dem ein oder anderen Problem, gefogt aber komme an einem bestimmten Punkt nicht weiter.
zum einen bekomme ich Fehlermeldung wenn ich über ESPlorer die fhem.lua auf das NodeMCU lade… ich habe den Part von dir übernommer wie es beschrieben ist und bekomme nach dem Upload folgende Meldung für die fhem.lua
fhem.lua:27: unfinished string near ‚“‚
Des Weiteren bekomme ich folgende Meldung wenn ich die ds18b20.lua aus dem GitHub übertrage….
ds18b20.lua:114: malformed number near ‚1.8‘
Kannst du mir helfen?!
Gruß
Michael
Hallo Robin,
ich möchte mich zunächst mal für Deinen Blog bedanken.
Ich tummel mich öfter mal hier herum und hole mir Anregungen und Tips 🙂
Beim einfachen WLAN Thermometer scheitere ich allerdings.
Die drei .lua Dateien habe ich erstellt und auf den NodeMCU hochgeladeen.
Die WLAN Verbindung wird korrekt hergestellt, allerdings bekomme ich dann die folgende Fehlermeldung :
PANIC: unprotected error in call to Lua API (fhem.lua:27: unfinished string near ‚“‚)
PANIC: unprotected error in call to Lua API (attempt to call a string value)
Zeile 27 bezieht sich auf diesen Teil :
conn:send(“
“ .. t ..“
„) end) end)
Hast Du eine Idee woran das liegen könnte ?
Vielen dank,
Lars
Hallo Manfred,
ja sicher schafft das die Hardware! Möglicherweise muss man sich noch einen anderen Pin für den 18B20 Sensor aussuchen. Aber von der Performance her langweilt der sich. Hardware kann ich dir zusammenbauen.
LG
/robin
Hallo Robin,
die Sauna sollte in maximal 1m Höhe die 80 Grad für den Feuchtigkeitssensor nicht überschreiten. Weiter oben ist dann ein zusätzlicher zweiter Sensor für die Temperaturmessung bis 125 Grad mehr als ausreichend. Eventuell kann dann ein 18B20-Thermosensor noch den Ruhebereich außerhalb der Sauna messen. Schafft das der NodeMCU?
Die Software bekomme ich im Gegensatz zur Elektronik inklusive Aufbau/Montage sicher hin.
Viele Dank für den Blog und die Rückmeldungen!
Manfred
Hallo Manfred,
ein passender Feuchtigkeitssensor, der zufälligerweise auch noch Temperaturen messen kann, ist der DTH-22, siehe amazon.de: http://www.amazon.de/gp/product/B00W99D0UM/ref=as_li_tl?ie=UTF8&camp=1638&creative=19454&creativeASIN=B00W99D0UM&linkCode=as2&tag=robbi
Misst aber nur bis 80 Grad. Software. Software unter LUA gibt es auch, siehe hier: https://github.com/javieryanez/nodemcu-modules/tree/master/dht22 .Da muss man aber ein wenig scripten können.
LG
/robin
Laut Deiner Angabe und Amazon hat der 18B20-Thermosensor einen Meß-Temperaturbereich von -55 – +125 Celsius, sollte also auch in der Sauna funktionieren. Was wäre denn ein passender Feuchtesensor und wo schließt man den an?
Löten kann ich leider nicht.
Hallo Manfred,
1) ausprobieren. Im Netz kursieren ein paar Anleitungen, wie man noch etwas Draht an die Leiterbahn lötet um die Empfangsweite zu vergrößern.
2) ja, altes Smartphone-Ladegerät reicht
3) ausprobieren. Abhängig vom Querschnitt und Länge (Innenwiderstand des Drahtes).
4) Nein, ich wünsche mir aber auch einen 3D-Drucker. Sei kreativ und schaue dich bei Reichelt und Conrad um.
-> achte bei dem DS18B20 auf die maximalen Temperaturangaben (Spezifikation). Ich weiß nicht, ob der 120 Grad mitmacht. Den NodeMCU würde ich sowieso außerhalb legen.
LG
/robin
Schon lange bin ich auf der Suche nach Sensoren für die Anbindung meiner Sauna an fhem und habe bisher nur den Bausatz HM-WDS30-OT2-SM gefunden, bin aber kein Bastler. Deine Lösung könnte meine Erlösung werden. 🙂
Aber ich habe noch ein paar Fragen:
(1) Kannst Du etwas zur WLAN-Reichweite des NodeMCU ohne Antenne sagen?
(2) Passt ein normales USB-Ladegerät und wenn ja welche Leistung sollte dieses haben?
(3) Ab welcher Länge muss der Widerstand verkleinert werden und kann man das berechnen?
(4) Hast Du vielleicht auch noch eine Anleitung, wie man zusätzlich einen Feuchtesensor unterbringt?
(5) Ist für den langfristigen Einsatz ein Geäuse für den NodeMCU erforderlich und gibt es überhaupt fertige zu kaufen?
Hallo Ronny,
technisch möglich. Der Widerstand in der Hardware und der LUA-Sketch muss dann geändert werden. Ich bin in LUA aber nicht fit, da gibt es hier bessere Leute, die das können. Bedenke: Die DS18B20 Temperatursensoren können nur Temperaturen messen, keine Luftfeuchtigkeit.
LG
/robin
Hallo Robin,
ist es in diesem Aufbau auch möglich mehrere Temperatursensoren an den NodeMCU zu hängen und auszulesen? Wären ggf. 10 Sensoren möglich und wie wären die lua-Dateien dann anzupassen?
Gruß
Ronny
Hallo tr,
oder du gehst auf dem Flohmarkt, kaufst ein Airwick-Freshmatic und baust einen MySensors-Transceiver ein, so wie ich es gemacht habe 🙂
https://blog.moneybag.de/fhem-airwick-freshmatic-compact-als-geruchs-sensor-mit-mysensors-umgebaut/
Hat mich ingesamt 6 Euro gekostet und sieht gut aus.
LG
/robin
Jetzt noch statt Temperatur nen MQ Sensor, und wir haben einen bezahlbaren kabellosen Luftqualitätsensor 😉
Hallo Robin,
hast du noch ein Set? – bin interessiert
Friedrich Kessler
Hallo Dirk,
danke für den Hinweis, mache ich fertig und füge es in dem Blog ein.
LG
/robin
klingt sehr interessant, und einfach, könntest du evtl. noch eine verdrahtungsanleitung dazu geben ?
Hallo,
ich bin Neuling in Sachen Fhem und bin auf deinen Blog gestoßen, tolle Arbeit, danke.
Dieses Thermometer habe ich vor 2 Wochen selber zusammen gesucht, leider wusste ich nicht, dass du eine so schöne, übersichtliche und vollständige Anleitung erstellst.
Was ich noch nicht verstehe, wie gesagt, ich habe mir den Code auch nur zusammengeklaut, der ESP-Code ist identisch:
Du hast das Device in Fhem so definiert, dadurch wird ein spezieller Treiber verwendet:
define esp8266temp CUL_WS 4
In meinem Beispiel wird ein dummy benutzt.
define esp8266temp dummy
Funktionieren tut es auch, aber warum, wo ist der Unterschied?