Um Wetterdaten von mehreren Positionen zu sammeln und diese zu speichern ist es nicht geschickt viele einzelne Raspberry Pi’s zu nehmen. Besser ist es einen Raspberry Pi als Herzstück zu nehmen und mit dem ESP8266 Wetterstationen-Außenposten zu bilden, die Daten an den zentralen Pi senden.
Das hat den Vorteil, dass jede kleine NodeMCU ESP8266 Wetterstation noch einmal weniger Strom als ein Raspberry Pi (Zero) braucht, weshalb diese auch mittels Akku länger durchhalten. Bei einer Stromversorgung über ein Solarpanel ist diese Lösung auch definitiv die bessere.
Wie man den Raspberry Pi Server und den Code für die ESP8266 Wetterstation für den Außenbereich aufspielt, wird in diesem Tutorial gezeigt. Darüber hinaus können wir anschließend die gesammelten Daten über den Browser visualisiert in einem Diagramm ansehen.
Zubehör
Dieses Tutorial besteht aus zwei Teilen, wobei der Pi nichts weiter als eine WLAN Verbindung braucht. Beim Model 3 ist der Adapter schon auf der Platine, ältere Modelle benötigen einen Wifi Stick.
Folgendes Zubehör habe ich verwendet:
- Raspberry Pi 3
- mind. 1x ESP8266 (bspw. NodeMCU ESP-12)
- DHT22 Temperatur / Leuftfeuchte Sensor
- 10kΩ Widerstand
- Breadboard
Ich habe sowohl den DHT11 als auch den DHT22 ausprobiert und der Vorteil des weißen DHT22 ist, dass dieser u.a. genauere Werte zur Temperatur und Luftfeuchtigkeit sowie ebenfalls Nachkommastellen liefert. Der blaue DHT11 ist allerdings aufgrund des nicht so großen Preisunterschied zum DHT22 auch nicht zu empfehlen. Dennoch können beide mit diesem Tutorial genutzt werden.
Daneben können auch andere Sensoren wie bspw. der BMP180 Luftdrucksensor o.ä. zum Auslesen angeschlossen werden. Da es für diese Sensoren ebenfalls Module gibt, ist die Inbetriebnahme sehr einfach, wenn die Basics dieses Tutorials verstanden wurden (im Speziellen die kabellose Verbindung zum Raspberry Pi).
Zusätzlich kann eine Powerbank o.ä. genutzt werden, womit der ESP auch ohne feste Stromversorgung Daten liefern kann. In einem späteren Tutorial gehen wir auf die Stromversorgung über ein Solarpanel ein.
MySQL Datenbank erstellen – Wetterdaten-Tabelle
Als Datenspeicher nehmen wir eine MySQL Datenbank auf dem Raspberry Pi. Falls du noch keinen MySQL Server installiert hast, kannst du dies wie hier beschrieben tun:
sudo apt-get update sudo apt-get install mysql-server --yes
Nun musst du das Passwort eingeben, bestätigen und Neustarten. Das Passwort brauchen wir gleich noch.
Nach dem Neustart verbinden wir uns mit der MySQL Konsole:
mysql -u root -p
Gib das Passwort ein und danach folgenden Befehl, womit die Datenbank sowie eine Tabelle für die Temperaturwerte erstellt wird:
CREATE DATABASE weather_station; USE weather_station; CREATE TABLE temperature ( id int NOT NULL AUTO_INCREMENT, sender_id VARCHAR(20), datum DATETIME, temp FLOAT, humidity FLOAT, PRIMARY KEY(id) ); exit;
Mehr Informationen zum MySQL Datenlogger am Raspberry Pi findest du ebenfalls in einem vorherigen Tutorial, wo wir den DHT22 Sensor direkt am Raspberry Pi per Python ausgelesen haben.
Node.JS Datenserver auf dem Raspberry Pi
Um das folgende Programm nutzen zu können, muss auf deinem Raspberry Pi ein Node.JS Server installiert sein. Falls dies noch nicht der Fall ist, installiere es bitte zunächst wie im verlinkten Tutorial erklärt ist.
Anschließend können wir uns die Dateien aus Github herunterladen:
sudo apt-get install git git clone https://github.com/tutRPi/Raspberry-Pi-ESP8266-Weather-Logger cd Raspberry-Pi-ESP8266-Weather-Logger
Darin müssen wir zunächst die benötigten Abhängigkeiten mit dem Node Package Manager installieren:
npm install
Öffne nun die Datei „index.js“ und gib dein vorher gewähltes Passwort für root an (Zeile 11):
sudo nano index.js
Gespeichert wird mit STRG+O, geschlossen wird mit STRG+X.
Bevor wir nun den Webservice starten, finden wir noch die IP Adresse des Raspberry Pi’s im lokalen Netzwerk heraus. Die brauchen wir auch gleich beim Einstellen des ESP8266 NodeMCU.
Gib dazu folgendes in die Konsole des Raspberry Pi’s ein:
ifconfig
Je nachdem wie der Pi mit dem Netzwerk verbunden ist (bei mir ist es per onBoard Wifi Adapter), sieht es so aus.
pi@raspberrypi:~/Raspberry-Pi-ESP8266-Weather-Logger $ ifconfig wlan0 Link encap:Ethernet HWaddr b8:27:eb:6f:37:fd inet addr:192.168.1.80 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::5c5d:4000:b4d5:bb75/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:103415 errors:0 dropped:40 overruns:0 frame:0 TX packets:136597 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:5320723 (5.0 MiB) TX bytes:115360614 (110.0 MiB)
Unter „inet addr“ findest du die lokale IP-Adresse (bei mir 192.168.1.80). Darüber wird gleich auch der Abruf über den Browser stattfinden.
Zunächst starten wir allerdings den Node.JS Server. Dies geht ohne Root-Rechte, solange ein Port größer als 1000 genommen wird. In dem Beispiel habe ich den Port 8000 genommen. Der Standardport ist 80, welcher automatisch vom Browser gewählt wird, sofern keiner angegeben wurde. Möchtest du diesen ändern, kannst du dies durch Bearbeiten der „index.js“ Datei.
Gestartet wird mit:
node index.js
Im anderen Tutorial habe ich eine Möglichkeit aufgezeigt, wie man sein NodeJS Projekt auch dauerhaft (Autostart) verfügbar machen kann.
Gehe nun (von einem PC im gleichen Netzwerk) auf die Seite (IP anpassen): „http://192.168.1.80:8000“
Das Diagramm sollte erscheinen, auch wenn noch keine Daten sichtbar sind. Ich habe für die Visualisierung das Javascript Package VisJS genutzt, was viele Funktionen hat und auch individuell angepasst werden kann. So wäre es bspw. auch möglich die Daten später live anzuzeigen, sobald diese von den ESP8266’s gesendet werden.
Einrichten des ESP8266 Wetterstation Außenposten
Falls du noch keine / wenig Erfahrung mit dem NodeMCU, der Programmiersprache Lua und dem ESPlorer Tool hast, empfehle ich zunächst dieses Tutorial anzusehen, um so einen besseren Überblick zu bekommen:
Einführung & Programmierung des ESP8266 NodeMCU Boards
Wir beginnen mit der Verkabelung. Dafür wird der DHT Sensor an 3.3V und GND wie folgt angeschlossen. Der Datenpin wird zum einen über den Widerstand an die 3.3V Spannung angeschlossen und ebenfalls an den GPIO2 (Beschriftung auf NodeMCU Board: D4):
Das Senden und Empfangen bzw. der allgemeine Datenaustausch zwischen Raspberry Pi und ESP8266 wurde auch bereits vorher gezeigt.
Als erstes erstellen wir nun die NodeMCU Custom Firmware mit folgenden Modulen:
Um die Firmware auch einfach direkt herunter zu laden, habe ich sie hier auch bereit gestellt (ebenso im Github Repository vorhanden). Spiele die Firmware gemäß diesem Tutorial auf.
Nun öffne den ESPlorer, verbinde dich mit dem ESP und erstelle eine Datei namens „dht_esp8266.lua“ mit folgendem Inhalt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
local SSID = "WIFI-NAME" local SSID_PASSWORD = "WIFI-PASSWORD" local SIGNAL_MODE = wifi.PHYMODE_N DHT_PIN = 4 INTERVAL = 30 -- seconds RASPBERRY_PI_URL = "http://192.168.1.80:8000/esp8266_trigger" SERVER_PASSWORD = "tutorials-raspberrypi.de" function wait_for_wifi_conn ( ) tmr.alarm (1, 1000, 1, function ( ) if wifi.sta.getip ( ) == nil then print ("Waiting for Wifi connection") 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 ( )) end end) end function transmit_msg(data) -- send http request to Raspberry Pi ok, json = pcall(sjson.encode, data) if ok then http.post(RASPBERRY_PI_URL, 'Content-Type: application/json\r\n', json, function(code, data) if (code < 0) then print("HTTP request failed") --else -- print(code, data) end end) else return false end end function readDHTValues() status, temp, humi, temp_dec, humi_dec = dht.read(DHT_PIN) if status == dht.OK then return {temperature= temp, humidity= humi} else return false end end function main() for i=1,10 do data = readDHTValues() if data ~= false then data["sender_id"] = wifi.ap.getmac() data["password"] = SERVER_PASSWORD transmit_msg(data) break end end end -- Configure the ESP as a station (client) wifi.setmode(wifi.STATION) wifi.setphymode(SIGNAL_MODE) --wifi.sta.config(SSID, SSID_PASSWORD) wifi.sta.config {ssid=SSID, pwd=SSID_PASSWORD} wifi.sta.autoconnect(1) -- Hang out until we get a wifi connection before the httpd server is started. wait_for_wifi_conn ( ) tmr.alarm(2, INTERVAL * 1000, tmr.ALARM_AUTO, function () main() end) |
Hier musst du den Namen und das Passwort deines WLAN Netzwerks, sowie die IP Adresse des Raspberry Pi’s entsprechend angeben. Ebenso habe ich ein Passwort definiert, welches beim Aufruf an den Node.JS Server mit angegeben wird, sodass nicht jeder innerhalb des Netzwerks Daten senden kann. Solltest du das Passwort ändern, so musst du dies ebenfalls in der „index.js“ Datei auf dem Raspberry Pi.
Speichere die Datei und übertrage sie mittels „Save to ESP“.
Damit diese Datei nun bei jedem Neustart aufgerufen wird, erstellen wir eine zweite „init.lua“ Datei mit folgendem Inhalt, welche nach dem Speichern mittels „Save As init“ im linken Bildschirm des ESPlorer übertragen wird:
1 |
dofile("dht_esp8266.lua"); |
Die beiden Dateien sind auch noch einmal im oben verlinkten Github Verzeichnis im Ordner „esp8266“ enthalten.
Aufruf per Weboberfläche
Zunächst solltest du etwas Warten, bis einige Daten gesendet wurden. Je nach Intervall (ich habe 30 Sekunden voreingestellt), solltest du wenigstens 5 Minuten warten. Hol dir einen Kaffee, der Großteil ist geschafft 😉
Danach kannst du einfach die URL von vorhin erneut aufrufen bzw. aktualisieren und solltest nun bereits Daten angezeigt bekommen:
In diesem Diagramm repräsentiert jeder Datenpunkt eine Messung. Ich habe lediglich einen ESP8266 verwendet, aber VisJS kann auch so eingestellt werden, dass bspw. mehrere Werte gruppiert oder übereinander dargestellt werden. Die individuellen Veränderungen dabei sind jedem frei vorzunehmen. Du kannst dazu z.B. das Repository in GitHub forken und verändern. Die HTML Template Datei befindet sich unter „views/index.pug“, wobei die PugJS Template Engine genutzt wird (falls dich das Format wundert).
Jedes Gerät im Netzwerk kann den Raspberry Pi Server ansprechen. Falls auch Geräte außerhalb deines Heimnetzwerks dies dürfen sollen, musst du in deinem Router „Portforwarding“ für die entsprechende IP und Port freischalten. Daneben solltest du aber einige Sicherheitskriterien erfüllen (Standard Passwort ändern, Software aktuell halten, etc.)
Falls du dies vor hast, ist ein dynDNS Server sehr gut dafür geeignet.
111 Kommentare
Hallo Felix,
erst einmal danke für deine tollen Tutorials. Die Wetterstation ist genau das was ich gesucht habe und mein erster ESP8266 ist schon auf dem weg.
Da ich in Hardware-Fragen allerdings ein kompletter Anfänger bin hoffe ich das du mir hier weiterhelfen kannst:
– Kann man den ESP8266 auch mit einer Batterie (nicht Akku) betreiben, also z.B. hiermit:
http://ebay.de/itm/371379409607 (wenn ja, was für ein Batteriehalter muss es sein und wo/wie muss ich
ihn anschließen?)
– Wenn ich anstatt des „nackten“ DHT-22 ein Board benutze spare ich mir doch den Widerstand,
oder ? (z.B. ebay.de/itm/201763504100)
Außerdem habe ich noch eine Frage zur Programmierung.
Wenn ich es richtig gesehen habe benutzt du für das Intervall einen einfachen Timer. Es gibt beim ESP8266 doch einen sog. DeepSleep Modus. Hat dieser irgendwelche Nachteile oder wird er implizit benutzt?
Wegen den Batterien suche ich natürlich nach dem energieeffizientesten Lösung ?
Danke schon mal für deine Hilfe!
Gruß
JD
Du kannst natürlich auch Batterien benutzen, aber solltest dazu einen LM2596 o.ä. nutzen (dazu habe ich bereits ein Tutorial für den Raspberry Pi veröffentlicht). Auch das DHT Board ist natürlich kompatibel.
Auf Deep Sleep wird im nächsten Tutorial eingegangen 😉
Perfekt!
Freue mich schon auf das nächste Tutorial.
Danke
Hallo, wird es villeicht nochmal ein Tutorial geben wie man sowas mit Batterien umsetzt? Ich bin bei dem Thema neu und kenne mich deshalb leider noch so gut wie garnicht aus. 🙂
Ich habe etwas mit einem Solarpanel (+Batterie) geplant 🙂
Hey Felix, das NodeJS Script scheint nicht korrekt zu funktionieren. Die Luftfeuchtigkeit/Humidity wird nicht Angezeigt.
Hallo,
habe das gleiche Problem. Haben ich dort was falsch gemacht? In der MySQL Datenbank sind die Daten vorhanden.
Hi Felix,
ist es möglich die Daten direkt auf thingspeak.com zu laden ohne auf dem Raspberry eine Datenbank zu haben? Ich habe einen DHT22 welcher an der RPI angesteckt ist und Daten direkt auf thingspeak.com läd, hierzu hattest du ja schon ein Tutorial gemacht.
Jetzt hätte ich gerne in jedem Raum die Klimaüberwachung Anbindung per Funk oder WLAN ist egal nur Batteriebetrieben soll alles gehen. Was empfiehlst du hier?
Schau mal auf http://sloiot.pressbooks.com
Ja, klar. Das ist analog zu diesem Tutorial (nur das thingspeak anstelle von RPi IP aufgerufen wird).
Hey Felix
Wie kann ich eine Fehleranalyse machen?
Ich bekomme zwar ein Html Seite mit Tabelle angezeigt aber ohne Daten.
Wie kann ich herausfinden ob es am ESP8266 oder am RPi liegt?
Schließ den ESP per USB an und lasse dir die prints z.B. per ESPlorer ausgeben.
Hallo Felix,
bei mir beendet sich der Webserver sobald ich die entsprechende Adresse des Raspberry im Browser aufrufe, mit folgenden Meldungen:
/home/pi/Raspberry-Pi-ESP8266-Weather-Logger/index.js:36
if (error) throw error;
^
Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by serv er; consider upgrading MariaDB client
at Handshake.Sequence._packetToError (/home/pi/Raspberry-Pi-ESP8266-Weather-Logger/node_modules/ mysql/lib/protocol/sequences/Sequence.js:52:14)
at Handshake.ErrorPacket (/home/pi/Raspberry-Pi-ESP8266-Weather-Logger/node_modules/mysql/lib/pr otocol/sequences/Handshake.js:103:18)
at Protocol._parsePacket (/home/pi/Raspberry-Pi-ESP8266-Weather-Logger/node_modules/mysql/lib/pr otocol/Protocol.js:279:23)
at Parser.write (/home/pi/Raspberry-Pi-ESP8266-Weather-Logger/node_modules/mysql/lib/protocol/Pa rser.js:76:12)
at Protocol.write (/home/pi/Raspberry-Pi-ESP8266-Weather-Logger/node_modules/mysql/lib/protocol/ Protocol.js:39:16)
at Socket. (/home/pi/Raspberry-Pi-ESP8266-Weather-Logger/node_modules/mysql/lib/Conne ction.js:103:28)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
at readableAddChunk (_stream_readable.js:176:18)
at Socket.Readable.push (_stream_readable.js:134:10)
——————–
at Protocol._enqueue (/home/pi/Raspberry-Pi-ESP8266-Weather-Logger/node_modules/mysql/lib/protoc ol/Protocol.js:145:48)
at Protocol.handshake (/home/pi/Raspberry-Pi-ESP8266-Weather-Logger/node_modules/mysql/lib/proto col/Protocol.js:52:23)
at Connection.connect (/home/pi/Raspberry-Pi-ESP8266-Weather-Logger/node_modules/mysql/lib/Conne ction.js:130:18)
at Connection._implyConnect (/home/pi/Raspberry-Pi-ESP8266-Weather-Logger/node_modules/mysql/lib /Connection.js:461:10)
at Connection.query (/home/pi/Raspberry-Pi-ESP8266-Weather-Logger/node_modules/mysql/lib/Connect ion.js:206:8)
at /home/pi/Raspberry-Pi-ESP8266-Weather-Logger/index.js:34:16
at Layer.handle [as handle_request] (/home/pi/Raspberry-Pi-ESP8266-Weather-Logger/node_modules/e xpress/lib/router/layer.js:95:5)
at next (/home/pi/Raspberry-Pi-ESP8266-Weather-Logger/node_modules/express/lib/router/route.js:1 37:13)
at Route.dispatch (/home/pi/Raspberry-Pi-ESP8266-Weather-Logger/node_modules/express/lib/router/ route.js:112:3)
at Layer.handle [as handle_request] (/home/pi/Raspberry-Pi-ESP8266-Weather-Logger/node_modules/e xpress/lib/router/layer.js:95:5)
Was ist falsch bei mir ?
Hallo Juergen,
das gleich Problem habe ich auch. Ich habe grade mit dem Projekt begonnen und muss mich erst einmal ein bisschen damit beschäftigen. Aber vielleicht gibt’s ja schon einen Hinweis…
Ich habe übrigens Raspbian Stretch installiert. Ich vermute das Problem liegt hier, es gibt ja ehe schon so einige Abweichungen.
Ich habe das selbe Problem…. Gibt’s eine Lösung?
MfG
Hallo Zusammen,
Eine Lösung zu diesem Problem würde mich auch brennend interessieren. Habe ebenfalls Stretch drauf. Mit dieser Software geht vieles was du in deinen Tutorials schön übersichtlich aufbereitet hast nicht mehr :/
Mysql wird nicht mehr unterstützt . Es wurde auf mariadb gewechselt, auch gab es beim nodejs Server Probleme bzgl. der npm installation. Mariadb lässt sich ja genauso programmieren wie du es oben beschrieben hast.
Muss bei Verwendung der mariadb die index.js angepasst werden? Man hangelt sich im Moment von Problem zu Problem und verliert langsam den überblick, was noch geht und was nicht.
Würde das echt gern unter Debian 9.1 zum laufen bekommen, aber für mich als Anfänger sind da im Moment zu viele Hürden bzgl. nicht funktionierender Updates ,Upgrades und nötiger Pakete.
VG Thomas
Genau das selbe Problem! Bis dahin tolle Anleitung, auch wenn es einige Schwierigkeiten durch das Stretch gab. Der HTTP request vom ESP wird bei mir mit dem Fehlercode 403 abgewiesen. Auch bei mir beendet sich der Webserver, wenn ich ihn über die IP Adresse aufrufe. Gibt es Abhilfe?
Problem gelöst, Dank der Antwort von Kai:
mittels:
mysql -u root -p
mit der MySQL installation verbinden. Dann einen neuen USER anlegen:
CREATE USER ‚benutzer’@’localhost‘ IDENTIFIED BY ‚passwort‘;
Diesem User dann die vollen Rechte für die weather_station DB zuweisen:
CREATE DATABASE ‚weather_station‘;
Benutzernamen und Passwort dann in die index.js auf dem Raspberry eintragen, Server starten und schon funktioniert es.
Fehler: Rechtevergabe für den neu angelegten MySQL Nutzer wird mit:
GRANT ALL PRIVILEGES ON ‚Datenbankname‘ . * TO ‚benutzer’@’localhost‘;
durchgeführt!
Hi Felix 🙂
Erst mal vorweg: Es ist wieder ein klasse Tutorial. 🙂
Ich hätte dazu allerdings auch noch ein paar Anmerkungen.
Die folgenden Dinge sind da sicher meiner fehlenden Erfahrung mit LUA geschuldet, aber da ich mal davon ausgehe das Du da viel mehr Erfahrung hast… 😉
1.) Im Zuge der gesicherten Übertragung von Daten bietet der ESP ja auch noch ein crypt Modul um die Daten selber auch verschlüsselt zu übertragen.
(OK – hier vielleicht nicht ganz so wichtig, aber es könnten ja auch mal andere Dinge übertragen werden)
2.) Für den Batteriebetrieb soll es ja möglich sein den ESP zwischen den Messzyklen „schlafen“ zu legen um Strom zu sparen… (WIFI frist da doch recht viel) – Wie baut man das im LUA ein?
3.) Ich habe bereits einen Apachen mit SQL und PHP am laufen… Wie müsste denn der LUA Transmit der Daten lauten um dort direkt ein PHP Script mit den Daten zu versorgen ?
Als weiteren Hinweis… Ich habe es auch mal versucht das ganze statt auf „Jessie“ auf dem neuen Rasbian „Stretch“ zu installieren, nur leider gibt es da Probleme, da dort statt dem MySQL Server die MariaDB default installiert wird.
Normal ist die zwar mit der MySQL Version Befehls kompatible, aber es gibt dort z.B. normal kein Datenbank Root Passwort!
Man muss dort sich erst mit
sudo su
zum Root machen um dann mit
mysql -u root
in die Datenbank zu kommen… Verständlicherweise funtioniert dann auch Dein Server Script im NodeJS nicht…
Ich hab den Ansatz aber nicht weiter verfolgt – man müsste dann wohl in der Datenbank einen zweiten User mit vollen root Rechten einrichten und diesen dann in Deinem Script eintragen.)
Und als letzten Punkt hätte ich da auch noch einen Interessanten Kapazitiven Bodenfeuchtigkeits Sensor, der sicher auch Top mit dem ESP zusammen arbeiten könnte…
https://www.amazon.de/Kapazitiver-Feuchtigkeits-Temperatursensor-Interface-Schaltausgang/dp/B01MTDN6O6/ref=sr_1_1?ie=UTF8&qid=1505330999&sr=8-1
Grüssle Kai
1) Bei Interesse kann ich dazu mal ein gesondertes Tutorial machen.
2) Habe ich bereits umgesetzt: Monatelanger ESP8266 Batteriebetrieb mittels Deep-Sleep
3) Die Übertragung ist immer gleich – ob an einen NodeJS Server, Apache oder Webseite: Raspberry Pi + ESP8266 NodeMCU: Per WLAN Daten senden
Hallo,
wow ich bin begeistert, genau so etwas suche ich schon lange.
Die Sensoren für meine Raspberry Wetterstation mit den ELV Funksensoren wird langsam zu teuer *lach*.
Meine Frage, wenn ich BME280 Sensoren verbauen möchte, muss dafür viel angepasst werden?
Die Firmware müsste ich anklicken, um sie im Modul zu haben, beim Aufruf muss auf i2c eingestellt werden und beim abfragen müsste ich dann die BME280 spezifische abfrage verwenden.
Auf anderen Seiten habe ich das schon gefunden, nur statt LUA verwenden die ArduinoIDE kann ich die Begriffe davon übernehmen?
Nein, das ist nicht viel Aufwand. Du kannst dir auf der Doku Seite die Beispiele des BMP180 ansehen.
Hallo Felix,
benötige ich eine init.lua?
Jein: Wenn du willst, dass etwas nach dem Neustart ausgeführt werden soll (bspw. das eigentliche Skript gestartet werden soll), dann ja.
Ich hatte deinen Hinweis im Tutorial zur init.lua vorher leider nicht gesehen, damit klappt nun alles wunderbar =) vielen Dank
Ich erhalte nun folgenden Fehler:
NodeMCU 0.9.5 build 20150318 powered by Lua 5.1.4
lua: dht_esp8266.lua:67: attempt to call field ’setphymode‘ (a nil value)
Ich habe auf https://nodemcu-build.com/ ein aktuelles Build der Firmware heruntergeladen und auf den mcu geflashed. Dies hat geholfen. Scheinbar kam mein Board mit der von dir bereitgestellten Firmware nicht zurecht.
Wahrscheinlich liegt es daran, das ich einen nodemcu Klon aus China nutze (Lolin V3 ESP8266 ESP-12E CH340G)
Danke für das super Tutorial =)
Bei mir wird im Diagramm leider nur die Temperatur angezeit, aber nicht die Feuchtigkeit.
Auf deinem Bild sehe ich auch nur die Temperatur.
Gibt es noch irgendwo einen Fehler ?
In der index.js ist scheinbar ein Fehler:
connection.query(‚SELECT datum x, humidity y, sender_id, ‚humi‘ `group` FROM temperature ‚ +
Muss lautet:
connection.query(‚SELECT datum x, humidity y, sender_id, ‚humidity‘ `group` FROM temperature ‚ +
Hi Felix
Erst mal vorweg:
Es ist wieder ein klasse wie Du das Beschrieben hast.
Ich habe einproblem mit dem Flashen; Wenn ich den File:
nodemcu_float_0.9.6-dev_20150704.bin Lade, dann ist die blaue LED an der Antenne aus.
Im ESPlorer IDE im rechte Fenster kann ich alles lesen.
NodeMCU 0.9.6 build 20150704 powerd by Lua 5.1.4
…
Spiele ich irgendeine andere *.bin auf, auch die von der Seite hier, oder von
NodeMCU Custom Firmware gebaut
auf dann blinkt die blaue LED an der Antenne und
Im ESPlorer IDE im rechte Fenster sind nur noch „Steuerzeiche“
egal welche Geschwindikeit ich einstelle.
Board:
Ai Thinker
NodeMCU-Lua WIFI ESP8266-ESP12
Der NodeMCU ist leider manchmal etwas eigen, wenn es ums Flashen geht. Aus Erfahrung kann ich nur sagen: Weiter probieren. Ggf mal eine andere Firmware flashen und diese dann überschreiben.
Hallo Felix.
Ich verzweifle leider daran mehrere Graphen übereinander zu legen. In der Datenbank sind die Daten mit den verschiedenen Sender_IDs in der Tabelle eingetragen, aber ich habe keine Idee wie ich es hinbekomme, die Sensoren getrennt darzustellen. Kannst du mir ein Tutorial für das VisJS empfehlen?
Helfen dir die Beispiele in der Doku nicht?
Hallo Christian,
hast du es geschafft mehrere Graphen anzeigen zu lassen?
Ich bräuchte da auch mal Hilfe!
@Felix kannst du ggf etwas dazu sagen?
Viele Grüße
Daniel
Ich habe es nur mit einem Graphen implementiert, aber auf den ersten Blick sieht es nicht nach zu vielen Anpassungen aus, die nötig sind, um mehrere Graphen anzeigen zu lassen.
Hallo Felix
Erstmal vielen Dank für das hilfreiches Tutorial.
Beim Versuch das ganze zu realisien bin ich bei der Kommunikation zwischen ESP8266 und ESPlorer hängen geblieben. Jedesmal, wenn ich versuche einen Code in den ESP zu laden kommt folgende Fehlermeldung:
„Waiting answer from ESP – Timeout reached. Command aborted“
Ich habe jede Baudrate und verschiedene Firmware Versionen ausprobiert. Immer die gleiche Meldung. Wenn ich den ESP Resete kommt eine Ladung nicht interpretierbarer Zeichen also ist in irgendeiner Weise wohl schon eine Verbindung da.
Einen Code mit der Arduino IDE zu laden funktioniert seltsamerweise ohne Probleme.
Ich benutze einen ESP8266-01.
Kannst du mir da möglicherweise weiterhelfen?
Grüsse Daniel
Nutzt du einen „Originalen“ ESP oder China Klon? Ich hatte ein ähnliches Problem auch bei einem ESP-01. Vielfaches neu-flashen hat letztendlich geholfen.
Hallo Felix
Ich möchte gerne Deine Wetterstation nachbauen , nur scheiterte ich
schon beim erstellen der Datenbank ,da ich nach keinem Passwort gefragt
werde was ich ja brauche. Was mache ich falsch?
Danke Frank
Hallo Zusammen…
ich habe noch ein Problem mit dem JavaScript….
Starte ich die index.js manuell funktioniert alles wunderbar… Sobald ich die Index dann in den Autostart packe, (egal ob per rc.local oder per crontab) dann bekomme ich diesen Fehler auf der Seite:
Error: Failed to lookup view „index“ in views directory „/views“
Die übermittelten Datensätzen werden aber trotzdem in die DB geschrieben.
Woran liegt? Und wie krieg ich das hin?
MfG
Gib mal die Pfade überall absolut an.
Genau da liegt auch mein Problem. Was genau meint Du mit Pfade absolut angeben? In der Cron oder wo?
Hallo Danke für dieses Umfangreiche Tutorial.
Hat mir beim ersten Versuchsaufbau sehr geholfen.
Habe nun eine Frage bezüglich der Spannungsversorgung des DHT22.
Und zwar möchte ich zwei DHT22 auf meinem NodeMCU betreiben. Einer soll über ein längeres Kaben im Außenbereich angeschlossen werden (~10m), der andere innen (Kabellänge vernachlässigbar).
Das hier gefundene Datasheet zum Sensor http://akizukidenshi.com/download/ds/aosong/AM2302.pdf (Pkt 7.1) gibt an, dass bei 3.3V Spannung die Kabellänge des Sensors 1m nicht überschreiten soll. Sprich bei längerem Sensorkabel sollte er mit 5V betrieben werden.
Da ich Elektromäßig nicht so versiert bin, stellt sich für mich die Frage ob ich den Sensor an den normalen VIN Pin anschließen kann?
Betrieben wird mein NodeMCU an einem Standard USB Netzteil (für Handys) mit Kabel direkt in den MicroUSB Anschluss.
Liegt auf dem VIN die Spannung des Netzteils direkt an oder ist dieser auch geregelt, dass bei Schwankungen dieser konstant 5V liefert?
Falls nicht, was muss ich tun damit Spannungsschwankungen des Netzteils den Sensor nicht beeinflussen oder gar ins Nirvana befördern? Laut Spec verträgt der DHT22 5.5V und empfohlen werden 5V. Ich weiß aber nicht was passiert wenn das Netzteil mal 6V liefert.
Welchen Pullup Widerstand sollte ich bei einem 10m -15m Kabel verwenden?
Danke
Thomas
Danke für dies tolle Tut. Eventuell hilft meine Erfahrung noch anderen.
Ich wäre fast verzweifelt da nach dem Flashen und Reset keine Verbindung im ESPlorer zustande kam. Nachdem ich von 9600 auf 115200 umgeschaltet hatte lief alles wunderbar.
Hallo,
tolles Tutorial! Ich komme leider nicht weiter nachdem ich die LUA Scripte auf den ESP gespielt habe.
Der ESP verbindet sich mit dem Wifi und sobald er die Daten senden möchte kommt in der Console im ESPlorer folgende Fehlermeldung:
HTTP client: Port error http://MEINEIP:8000/esp8266_trigger
Weiß jemand zufällig, wie ich diesen Fehler beheben kann?
Hallo, erstmal danke für die tollen Tutorials.
Kann ich an einem NodeMCU ESP-12 mehrere Sensoren parallel betreiben, also den DHT22 und BMP180?
Dem sollte nichts im Wege stehen (solange genügend freie IO Pins zur Verfügung stehen).
Hallo und vielen Dank für das geniale Tutorial!
Der beschriebene Weg führte auf Anhieb zum gewünschten Ergebnis. Daher habe ich mich sofort an den nächsten Schritt gewagt und versucht einen BMP280 zu integrieren.
Das neue Setup liefert auch sofort wieder Temp und Humi Daten. Beim Anpassen des Lua Scripts zur Integration des BMP280 klappt allerdings etwas nicht.
Beim Aufruf von i2c.setup(0, sda, scl, i2c.SLOW) bekomme ich die Fehlermeldung:
„esp8266_dht_bmp.lua:6 attempt to index global ‚i2c‘ (a nil value)“
Ggf. irgendeine Idee woran das liegen kann?
Vielen Dank!
Hallo und vielen dank für die ganze Arbeit.
Ich würde gerne den Akkustand über meine Basisstation angezeigt bekommen. Ist es möglich den Akkustand abzufragen und zu übertragen?
Danke
Eric
Hallo,
vorweg, ich bin ein absoluter Anfänger. Meine Frage: Ich kann leider in dem Script „dht_esp8266.lua“ die Schnittstelle vom ESP8266 zu MYSQL nicht sehen. Wie kommen die Daten vom ESP in eine MYSQL-db auf dem Raspberry?
Die Daten werden hier doch „nur“ an NodeJS übergeben, oder?
Vielen Dank und LG
Waldemar
Richtig, die Daten werden an den Node.JS Server am Pi gesendet, der diese in eine MySQL DB speichert.
Wo genau geschieht das (Node.JS speichert in MySQL DB)? Es wäre für mich wichtig, denn ich verwende den DS18b20 und muss daher einige Anpassungen vornehmen. Ich kann die Scripte nicht einfach 1 zu 1 übernehmen.
Viele Dank und einen schönen Sonntag!
Zeile 76: https://github.com/tutRPi/Raspberry-Pi-ESP8266-Weather-Logger/blob/master/index.js#L76
Hallo,
mysql -u root -p und das war’s dann,
keine aufforderung zur passworteingabe, einige scheinen da kein problem zu haben?
gibts ne Lösung
thks
seit einer woche am verzweifeln, passwort scheint geklärt, sehe aber nur raster ohne daten, finden leider keine aktuelle lösung zu sehen ob was in der db steht (erklärungen oft veraltet „bevor die Tinte trocken“ bzw. ob esp8266 sendet (led blinkt im inervall) kennt wer ein tutorial das aktuell zum laufen kommt
lg
thanks
Nachdem ich jetzt 3 RPi’s zum Laufen gebracht habe wollte ich kurz meine Erkenntnisse weitergeben. Vielleicht helfen sie dem Einen oder Anderen.
Ich habe die Wetterstation jetzt erfolgreich auf einem RPi 3 (hier war es am Einfachsten), dann auf einem RPi Model B+ von 2014 (das war ein wenig komplizierter) und vorhin sogar auf einem der allerersten RPi’s von 2011 (also wahrscheinlich Model A) zum Laufen gebracht.
Anfangs (also schon beim RPi 3) hatte ich das Problem der leeren Grafik. Der Fehler bei mir war, dass der Sensor gar keine Spannung hatte… Wenn man das sklavisch so steckt, wie es in der Fritzing-Darstellung gezeigt ist und das Breadboard intern so verdrahtet ist, wie meines, wird es nicht laufen. In meinem Fall sind die beiden oberen und unteren ‚Zeilen‘ NICHT durchkontaktiert und dadurch wird der Sensor nicht mit den 3,3V versorgt. Bei mir sind immer nur die 5 nebeneinander liegenden Buchsen durchkontaktiert. Kann man leicht feststellen, wenn man mit einem Voltmeter mal schaut, ob am Sensor die 3,3V anliegen. Nachdem das korrigiert war hat sich auch die Tabelle ordentlich gefüllt, d.h. es wurden Daten übertragen und die mysql-Tabelle hat sich mit Daten gefüllt. Es war eindeutig mein Fehler, denn ich habe nicht zum ersten Mal mit dem Breadboard gearbeitet und hätte es von Beginn an besser wissen müssen. Insofern ist das keine Kritik an der Projektbeschreibung.
Da der Uralt-RPi für mich die größte Herausforderung war möchte ich nur grob skizzieren, unter welchen Bedingungen er letztlich läuft:
– Raspbian-2017- 07-05
– mysql-server: 5.5.59-0+deb8u1 (installiert über sudo apt-get install mysql-server –yes)
– nodejs: node-v4.0.-linux-armv6l (von https://nodejs.org/dist/v4.0.0/node-v4.0.0-linux-armv6l.tar.gz)
Der Trick ist offensichtlich, die richtige Node.js-Version zu erwischen, die auf diesem RPi läuft und das war letztlich die v4.0.0.
Der Vollständigkeit halber: auf dem RPi Model B läuft das neueste Raspbian-2017-12-01. Mysql liess sich ohne Probleme installieren und Node.JS 4.8.2 war nach sudo apt-get upgrade automatisch vorhanden und musste nicht nachinstalliert werden. Lediglich npm habe ich noch installiert (sudo npm install latest@npm -g).
Bei allen 3 RPi’s war es notwendig, in mysql einen zusätzlichen User anzulegen, ihm alle Rechte zu geben und diesen User samt Passwort in der index.js nachzutragen.
Falls jemand mehr Infos benötigt, bitte melden. Allerdings bin ich auch Anfänger, habe aber alle Schritte relativ präzise dokumentiert.
Hallo Klaus,
Danke für deine Ausführliche Beschreibung. Ich selbst benutze einen RPi Model B+ und habe die selben Schwierigkeiten. Ich bin selbst auch Anfänger. Ich würde mich freuen wenn du mir mehr infos zu deiner Lösung geben würdest( Mit dem zweiten User einrichten).
LG
Hi Felix,
erst mal Danke für die Ausführlichen Beschreibungen. In den letzten 4 Tagen hatte ich mir so manche Stunden (gewollt) um die Ohren geschlagen und habe soweit alles hin bekommen, aber zwei Punkte habe ich die ich nicht schaffe.
1. Ich habe einen Raspberry Pi 3 mit dem Repository „openhabianpi-raspbian“ aufgesetzt, ist auch alles gut. Und ich habe eine Abgesetzte Wetterstation basierend auf einen NodeMUC Amica V2 Modul. Soweit so gut. Die Daten werden auch Übertragen aber ich muss um diese abzufragen die den Befehl: „node index.js“ starten der sich im Raspberry Ordner: „/home/openhabian/Raspberry-Pi-ESP8266-Weather-Logger“ befindet. In dem Artikel: „ https://tutorials-raspberrypi.de/raspberry-pi-nodejs-webserver-installieren-gpios-steuern/ „ hast du das beschrieben aber selbst wenn ich das auf meine Werte ändere bekomme ich das nicht hin.
2. Wie bekomme ich das hin wenn ich den Artikel unter: „ https://tutorials-raspberrypi.de/esp8266-wetterstation-aussenposten-nodemcu-raspberry-pi/ „ folge zwei oder noch mehr Außenposten zu installieren. Im jetzigen fall ist es so das dann die Anzeigen in der Grafik mit den werten aus beiden Außenposten zusammen geschrieben werden und nicht getrennt in zwei Grafiken.
Du müsstest einen anderen Graphen erstellen, der nur die Daten des zweiten Außenposten anzeigt.
Hi Felix,
gibt es dazu Vielleicht auch eine Anleitung in Form eines Tutorial? Oder hast du noch einen Tip wo und an Welcher stelle ich bei einem bestehenden Turorial einspringen muss/sollte.
Du müsstest die index.pug bearbeiten (Javascript): https://github.com/tutRPi/Raspberry-Pi-ESP8266-Weather-Logger/blob/master/views/index.pug
Die eingelesenen Daten kommen von hier.
Hi Felix,
sorry das ich so oft schreibe, aber „nöööö“ ich bin schon wieder seit 17:30 dran und bekomme es einfach nicht hin! Mal abgesehen das die Daten von mysql an NODE.JS übergeben werden, wäre es nicht schöner gewesen die Daten wie auch in der Beschreibung von
“ https://tutorials-raspberrypi.de/raspberry-pi-wetterstation-bauen-openhab2/ “
mit an den Phyton3 zu geben und auch mit OpenHAB auszulesen ?
Das Tutorial ist vor dem OpenHAB Tutorial entstanden, daher wurde es ein wenig anders gelöst. In Zukunft kommen Abfragen an den NodeMCU per MQTT.
Das hört sich super an. ich habe gesehen das es in OpenHAB eine MQTT Persistence gibt.
Heißt das dann können die Übertragungen vom NodeMUC auch gleich an OpenHAB übergeben werden?
Wenn ja weißt du schon wann das kommen soll?
Jap, der ESP wird die Daten direkt senden können.
Es kommt vorraussichtlich (ich hoffe) im nächsten Monat.
Hi Felix,
ich verstehe es einfach nicht. Du hattest geschrieben das die Daten die von der index.js kommen === res.render(‚index‘, { data: results }); === an die index.pug übergeben werden. Das habe ich soweit Verstanden. Dort muss ich dann soweit ich das Verstanden habe einen zweiten Visualisierungs Block einfügen der dann jeweils mit der ersten sender_id auf den ersten Block und mit der zweiten sender_id auf den zweiten Block ausliefert. Aber ich bekomme es einfach nicht hin.
Wärst du noch einmal so freundlich zu helfen ?
Hi,
selbes Problem, hast du es lösen können??
muss auch sagen bin ein absoluter java Anfänger.
Hallo zusammen,
ich bin langsam am Verzweifeln und weiß leider nicht weiter. Meine Datenbank besteht, der index.js läuft auch, im Browser kann ich die Grafik ohne Werte sehen. Mein ESP ist im WLAN, gibt keinerlei Fehlermeldungen von sich und zeigt über die LED auch regelmäßig eine Aktivität an. Allerdings werden über den Browser auch nach 30 min keine Werte angezeigt.
Ich habe bereits den DTH22 sowie den ESP8266 jeweils durch einen anderen getauscht, um Defekte auszuschließen. Allerdings weiß ich nicht, ob mein Außenposten (liegt noch neben mir) jetzt keine Daten sendet, oder ob diese nicht in die Datenbank geschrieben werden.
Könnt ihr mir sagen, wie ich hier vorgehen sollte?
Noch ein kleiner hinweis, ich finde zwar einige Fehlerquellen, bin aber ein ziemlicher Neuling was LUA und mysql angeht. Ich sizte jetzt schon ein paar Stunden daran und komme einfach nicht merh weiter 🙁
Danke für eure Hilfe!
Du kannst die URL mal manuell (oder mit Postman etc.) aufrufen und schauen, ob du so Werte einfügen kannst.
Hallo,
es müssten doch eigentlich möglich sein, beide Sensoren (DHT22 Temperatur / Luftfeutchtigkeit und BMP180 Luftdruck) gleichzeitig anzuschließen und auszulesen? Oder muss ich dafür nochmal eine Station mit dem WLAN Modul bauen?
Und wenn ja, wie würde ich das machen?
Hi, bei mir zeigt sich ein, für mich unerklärliches verhalten:
Ich bekomme nach dem laden erst mal einen Timeout des DHT und erst wenn ich „GND“ löse und wieder einstecke bekomme ich vom DHT Werte eingelesen.
Irgendjemand eine Erklärung was ich hier falsch gemacht haben könnte?
Ich habe das gleiche Problem. Hat jemand eine Idee woher das kommt und was ich da machen kann?
Hi,
gab es zu dem Problem eine Lösung?
Ich hatte das gleich Problem. Erstmal vielen Dank für den Hinweise: Ohne deinen Hinweis hätte ich den DHT Sensor für defekt gehalten.
Was mir geholfen hat: In verschiedenen Forenbeiträgen habe ich gesehen, dass das Problem immer wieder auftritt und dass eine zu geringe Spannung das Problem sein kann. Anderen Usern hat es geholfen statt 3.3V 5V zu verwenden. 5V stellt meines Wissens nach das Board nicht zur Verfügung. Durch den Hinweis mit der Spannung habe ich dann den ESP8266 mal nicht über den PC per USB mit Strom versorgt sondern über ein über einen normalen Handyadapater direkt an die Steckdose angeschlossen (gleiches USB Kabel). Nun sendet der ESP8266 die Informationen direkt wie gewünscht, ohne dass ich GND lösen und wieder einstecken muss.
Hey felix,
kann es sein das sich die Grafik zur visualisierung nicht so ganz passt?
ich habe das seltene phänomen, dass ich nur eine y-Achse habe und ich den namen von der feuchtigkeit nicht anpassen kann, der ist bei mir standardmäsig auf „deafaulthumidity“.
ich habe keine möglichkeit, weder die yachse noch den namen über die index.pug anzupassen
Hi Felix,
habe eine Powerbank (10.000 mAh) genommen um den ESP8266 inkl. Deepsleep (alle 10 Minuten messen und senden) zu versorgen.
Nun ist das Problem, das wohl die Powerbank bei zuwenig „Verbrauch“ komplett den Saft abdreht. Aka der ESP8266 hat keinen Saft mehr. Vielleicht einen Tipp was man noch machen könnte?
Vielleicht probiere ich auch einfachaus wie lange der ESP ohne Deepsleep durchhält.
Ich denke da wird nur der Griff zu einer anderen Powerbank helfen (die von mir genutzte kann ich nur empfehlen). Ansonsten evtl. ein Lipo Akku.
Hi Felix, sorry, vielleicht bin ich gerade etwas blind: Welche Powerbank nutzt du den?
Ich habe bisher drei verschiedene ausprobiert und alle schalten nach ungefähr 2-3 Minuten den Strom ab.
Aktueller Deepsleep ist erstmal auf 10 Minuten eingestellt.
Ansonsten wünsche ich dir ein schönes Osterfest!
Ich hab eine von Intenso mit 10.000 mAh.
Lg, Felix
Hallo zusammen
Ich hoffe, mir kann jemand helfen. Wenn ich alles gemäss Tutoril mache, kommt beim Aufrufen der Website immer folgender Fehler:
Error: Failed to lookup view „index“ in views directory „/home/pi/views“
at Function.render (/home/pi/node_modules/express/lib/application.js:580:17)
at ServerResponse.render (/home/pi/node_modules/express/lib/response.js:1008:7)
at Query._callback (/home/pi/Raspberry-Pi-ESP8266-Weather-Logger/index.js:40:13)
at Query.Sequence.end (/home/pi/node_modules/mysql/lib/protocol/sequences/Sequence.js:88:24)
at Query._handleFinalResultPacket (/home/pi/node_modules/mysql/lib/protocol/sequences/Query.js:139:8)
at Query.EofPacket (/home/pi/node_modules/mysql/lib/protocol/sequences/Query.js:123:8)
at Protocol._parsePacket (/home/pi/node_modules/mysql/lib/protocol/Protocol.js:279:23)
at Parser.write (/home/pi/node_modules/mysql/lib/protocol/Parser.js:76:12)
at Protocol.write (/home/pi/node_modules/mysql/lib/protocol/Protocol.js:39:16)
at Socket. (/home/pi/node_modules/mysql/lib/Connection.js:103:28)
Ich denke, das Problem liegt irgendwo bei „app.use“
Besten Dank für eure Hilfe
Hi,
ich konnte das lösen, indem ich den vollständigen Pfad in die app.use der index.js genommen habe und daneben auch ein
app.set(‚views‘, ‚/home/user/Raspberry-Pi-ESP8266-Weather-Logger/views‘)
eingefügt hatte
Hallo zusammen,
ich komme aktuell nicht mehr weiter und brauche einen Rat bei folgender Fehlermeldung:
> wifi.setphymode(SIGNAL_MODE)
stdin:1: bad argument #1 to ’setphymode‘ (number expected, got nil)
stack traceback:
[C]: in function ’setphymode‘
stdin:1: in main chunk–wifi.sta.config(SSID, SSID_PASSWORD)wifi.sta.config {ssid=SSID, pwd=SSID_PASSWORD}
stdin:1: bad argument #1 to ‚config‘ (ssid required)
stack traceback:
[C]: in function ‚config‘
stdin:1: in main chunkwifi.sta.autoconnect(1)– Hang out until we get a wifi connection before the httpd server is started.
> wait_for_wifi_conn ( )
> ESP8266 mode is: 1
Ich habe alles wie beschrieben vorgenommen. Die MySql DB ist angelegt (aber noch leer), der Webserver läuft, die (leere) Grafik zur Visualisierung kann ich im Browser aufrufen, der ESP8266 ist geflasht worden und in der Lage die Temperatur zu messen und die Lua Skripte habe ich an den ESP8266 gesendet. Leider scheinen keine Daten zwischen dem Pi und dem ESP8266 gesendet werden. Wenn ich das Skript manuell absende, gibt es die Rückmeldung von oben. Hat hier jemand eine Idee, woran es liegen könnte?
Hallo,
ich hatte genau das gleiche Problem und bin auf einen Artikel gestoßen der meinte, dass wifi.sta.config mittlerweile veraltet wäre. ( https://github.com/nodemcu/nodemcu-firmware/issues/2082 )
Ich habe nun stattdessen folgenden Code verwendet (ich habe die alten Befehle vorerst drin gelassen, aber auskommentiert)
— Configure the ESP as a station (client)
wifi.setmode(wifi.STATION)
wifi.setphymode(SIGNAL_MODE)
station_cfg={}
station_cfg.ssid=SSID
station_cfg.pwd=SSID_PASSWORD
station_cfg.save=true
wifi.sta.config(station_cfg)
–wifi.sta.config(SSID, SSID_PASSWORD)
–wifi.sta.config {ssid=SSID, pwd=SSID_PASSWORD}
wifi.sta.autoconnect(1)
Das hat dann einwandfrei funktioniert und seit dem sendet der ESP8266 auch Daten an den Raspberry und speichert es korrekt in der Datenbank.
@Felix: Kannst du mir sagen, wie ich nun die Daten, aus der MySQL Datenbank in OpenHAB2 rein bekomme und ebenfalls darstellen kann?
Danke!
Hallo,
top einfach nur wieder schön.
kann ich den ganzen code eigentlich auch für ESP32 nehmen?
Lars
Bild ist irreführend, dachte ihr baut eine alte Wetterstation um 😀
Tut mir leid, sollte nur als „Symbolbild“ dienen 😀
Moin,
wie baut man sich am besten dafür ein sinnvolles Gehäuse? So plain kann man die Wetterstation ja nicht einfach raus stellen; Aber wenn man das alles einpackt, verfälscht man die Daten. Hast Du (oder jemand anderes :D) eine Idee dafür?
Das würde mich auch brennend interessieren.
Hallo Zusammen,
Ich habe ein Problem beim Abschnitt : Node.JS Datenserver auf dem Raspberry Pi
Das Problem ist wie folgt: wenn ich versuche eine Abhängigkeit herzustellen mit „npm install“ kommt die Fehlermeldung: „bash: npm: Kommando nicht gefunden.“.
Ich weiß echt nicht mehr weiter. Freue mich auf eure Hilfe denn dass hier ist ein sehr schönes Projekt.
LG
Das npm Problem hatte ich auch. Habe node nochmal nachinstalliert und dann npm auch noch einmal. Dann gab es bei der Ausführung des index.js noch etliche Fehler betr. fehlender Module. Diese habe ich dann einzeln nachinstalliert und dann ging es. Pug muss man auch nachinstallieren. Geht ales sobald npm läuft:
npm install pug z.B.
Ergänzung zu meinem Ersten Kommentar:
Ich benutze einen ESP32. Muss ich da noch irgendwas beachten bei der Software Installation?Denn ich habe gelesen das der ESP32 der direkte Nachfolger sein soll.
Danke im Vorraus!
Hallo Joris,
mich würde interessieren, ob Du das Projekt auch mit dem ESP32 umsetzen konntest. Wenn dem so wäre, würde ich den auch gerne nutzen da ich mir versehentlich den falschen ESP8266 geholt habe 🙁
Hey
Super Tutorial, hat fast alles auf Anhieb auf dem RAsp 3 B+ und dem ESP12 funktioniert. Datenbank füllt sich brav mit Werten, schon 2 Tage Störungsfrei.
nur :/ die Webseite bleibt leer :/ Kein 404 Fehler, sondern einfach keine Anzeige.
Demnach läuft der Node Server stabil auf Port 8000, aber irgendwie hakt es an der Verbindung zu mysql und den Grafiken. Hat da jemand eine Ahnung wie man das lösen kann ?
Muss VISjs installiert sein ? Evtl. Rechte an das Pug Verzeichnis vergeben ?
Klasse Tutorial, vielen Dank. Ein Traum wäre, das ganze auf den Feinstaubsensor SDS011 umzubauen bzw. diesen mit einzubauen. Leider komme ich bei dem LUA-Skript für den ESP8266 so gar nicht weiter. Wäre das nicht noch ein reizvolles Ergänzungs-Tutorial?
Hi Felix,
kurze Frage – ich habe vermutlich irgendwo einen Bug…
Wenn ich im putty per sudo nano index.js in Raspberry-Pi-ESP8266-Weather-Logger den NodeJS start, funktioniert die Chart-Darstellung im Browser ohne Probleme (daten kommen, werden dargestellt,…).
Aber:
– Ich verliere im putty den Promt – kann also nichts weiter mehr machen
– Schließe ich die putty session, stürzt offensichtlich auch der NodeJS ab.
Irgendeine Idee?
Viele Grüße und besten Dank! Ch.
Geht es denn diese Daten in OpenHAB anzeigen zu lassen?
Hi..:)
Danke für die schöne Anleitung.. problemlos und in meinem Fall mit dem die Änderung war kein großes Problem als ich meinen Fehler gefunden hatte..
Nun ich möchte den esp im Garten anbringen und per Akku betreiben.. dafür soll er in den Deepsleep.. wie das geht ist klar aber auch ohne deepsleep gibts Probleme in der Datenübertragung:
Konkret werden die Daten nicht übertragen wenn die wdh Schleife fehlt wenn die Init.lua via ausgeführt wird stattdessen gibts n http Fehler via esplorer. Wird jedoch die Datei selbst via dofile ausgeführt läufts..
Sooo jetzt bin ich auch nicht doof und habe mal sämtliche code aus der messdatei in Init.lua kopiert und den einstigen einzige Code in Form von dofile gelöscht.. hat aber leider nichts am Ergebnis die Schleife wieder dazu und schwups funktioniert’s problemlos..
Hast du irgend eine Idee?
Hallo,
ich hätte gerne den MCP9808 Temperatursensor verwendet. ich weiss zwar wie ich den auf den Raspi bzw den esp8266 anschließen muss aber welche Custom Software muss ich auf den esp8266 installieren.
Hat das einer von euch schon versucht ???
Wäre für einen Tipp dankbar.
Habe im Internet nicht viel brauchbares sprich verständliches gefunden.
Danke
Kann mann das ESP auch weg lassen ? da ich es gern per kabel zum fenster bedienen möchte da der pc daneben steht 🙂 ist sowas möglich auch mit dieser aufstellung und diagram anzeige
Kann man, aber dann ist es keine wirkliche Außenstation mehr…
ich hab mein esp jetzt liegen leider kann mann das tut nicht mehr nutzen da es mysql nicht mehr gibt sondern mariadb und da weiss ich nicht was mann da machen muss kann mann das tut neu aufsetzen ? damit ich das nachbasteln kann
Hallo, wollte per python die Werte Schreiben. Welche Seite müsste ich aufrufen? Könnte mir vielleicht einer den Link den ich erstellen muss?
mfg Michael
Hallo Felix,
Vorab Danke für das Tutorial – super Sache für Anfänger 🙂 Deine Aussenstation konnte ich nach einigen Hürden und viel googeln doch zum Laufen bringen :))
In meiner Datenbank habe ich allerdings jetzt ein paar Tage an „Aussetzern“, so das mir zwischendrin ein langer Strich angezeigt wird. Mein Gedanke dazu: ich lösche einfach die letzten Daten aus der Datenbank, dann siehts wieder hübsch aus 😉 Ja, beim „einfachen Gedanken“ ist es geblieben 😀
Leider scheinen dort Rechte vergeben zu sein (?), so das ich nicht in das Verzeichnis komme (/var/lib/mysql/weather_station) um Daten zu löschen. Setzen von anderen Rechten ist mir scheinbar auch nicht erlaubt?
Kannst Du mir da weiterhelfen, wie ich an „Deine Daten“ rankomme, damit ich Teile löschen kann und der Graph wieder gut aussieht?
Viele Grüße und vielen Dank,
Holger
Hi Holger,
hier findest du eine Anleitung, wie du MySQL Rechte vergeben kannst: https://chartio.com/resources/tutorials/how-to-grant-all-privileges-on-a-database-in-mysql/
Im professionellen Bereich arbeitet man mit service um Programme während des laufenden Betriebs neustarten zu können und auch mit dem System starten zu lassen.
man kann sich hier Ideen holen:
https://github.com/ether/etherpad-lite/wiki/How-to-deploy-Etherpad-Lite-as-a-service
sieht dann ungefähr so aus
cd /etc/systemd/system/
sudo nano wetter.service
Paste configurations below, between — .
—
[Unit]
Description=Temp. und Luftfeuchtgikeit in der DB speichern.
After=syslog.target network.target
[Service]
Type=simple
User=pi
Group=pi
WorkingDirectory=/home/pi/Raspberry-Pi-ESP8266-Weather-Logger
Environment=NODE_ENV=production
ExecStart=/usr/bin/nodejs /home/pi/Raspberry-Pi-ESP8266-Weather-Logger/index.js
Restart=always
[Install]
WantedBy=multi-user.target
—
sudo systemctl daemon-reload
sudo systemctl start wetter
sudo systemctl enable wetter
Check the service using command below.
sudo systemctl status wetter
hallo,
warum ist es nicht möglich, auf dem esp8266 die normale Arduino-C++-IDE/API zu verwenden? Ich nutze niemals Lua – gibt es dazu auch einen Arduino-IDE-Code für den ESP?
Klar, schau mal hier: ESP8266: Arduino IDE für den ESP32
Hallo Felix,
danke für das gute Tutorial, es funktionierte bei mir alles auf Anhieb.
Mir ist es allerdings bislang nicht gelungen, die Sensordaten mit dem Package VisJS (https://visjs.org/) auch live darzustellen, worauf im Tutorial hingewiesen wird. In Deinem Tutorial wird ja die Web-Site bei jedem Aufruf per Webserver node.js neu aufgebaut und die kompletten Daten der Datenbank angezeigt. Natürlich könnte man bei der SQL-Abfrage die Datenmenge per ORDER BY id DESC und Parameter LIMIT z.B. 10 immer auf die letzten 10 Datensätze beschränken und die Website periodisch aufrufen. Allerdings ist die live Darstellung im streaming 2D Beispiel auf VisJS viel eleganter. Allerdings werden beim vorgestellten und auch runterladbaren Beispiel die simulierten Daten (eine Kombination von sin- und cos-Funktion) im javascript der html-Seite selbst erzeugt. Man muß diese Daten aber natürlich von außen (also vom ESP8266) in das Script praktizieren. Mir ist das Hineinpraktizieren aber bislang nicht gelungen, weder die Daten der MySQL-DB direkt oder auch über das node.js Server-Script. Der nicht elegante Weg, die Daten im node.js-Script in einer Ascii-Datei zu speichern (funktioniert) und dann von der javascript-Datei der visjs-Beispiel-html-Seite einzulesen, funktioniert aber nicht, denn der javascript-Code der html-site kann ja prinzipiell nicht auf die Dateien des PC-Dateisystems zugreifen.
Hast du einen Tip, wie man das visjs-2D-streaming-Beispiel im Rahmen des in Deinem Tutorial besprochenen Datentransfers von ESP8266 in den node.js-server realisieren könnte?
Vielen Dank im voraus
Theo
> data streaming live (Frage vom 21.04.21)
Ich habe nun die streaming-Variante der live-Darstellung der Meßdaten im Browser auf der Basis des Node-Server-Scripts dieses Tutorials selber hingekriegt. Dabei bin ich vom Beispiel …/examples/graph2d/15_streaming_data.html der älteren visjs-Seite (https://almende.github.io/vis/) ausgegangen, die das Package vis nutzt und nicht die neuere Variante vis-timeline, die bei der Parameterwahl zur Achsen-Konfiguration einige Fehler aufweist.
Die live-Darstellung besorgt ein js-Script, welches in der html-Seite aufgerufen wird. Dabei wird die ganze Seite 15_streaming_data.html, so wie auch beim Tutorial mittels des pug-Seitengenerators im node.js-Server-Script erzeugt. Der Zugriff aus dem js-Script auf die Meßdaten im Serverscript geschieht nun – und das ist der entscheidende Schritt – mit der Methode XMLHttpRequest() entsprechend der AJAX-Technologie. Damit erstellt man eine GET-Anfrage an das Server-Script mit einem neuen Pfad, z.B. /trigger-data, die im Serverscript mit einer neuen Anweisung app.get(‚/trigger-data‘, function(req, res) {…}) über das res-Objekt der Callback-Funktion die im Server eingetroffenen Meßdaten an das aufrufende Script zurückgibt. Im js-Script des Beispiels 15_streaming_data.html muß man also die dortige Demo-Funktion durch die XMLHttpRequest()-Methode ersetzen.
Theo
Hallo Felix,
Danke für dein Tutorial, die ersten Daten kann ich auf meinem Webserver betrachten.
Jedoch habe ich Probleme mit dem ESP8266. Ich verwende ein ESP8266-12F Entwicklerboard von AZ-Delivery, das Amica V2. Geflasht habe ich es mit deiner Datei von github und auch dein LUA-Code habe ich soweit übernommen und auf mein W-Lan config etc angepasst, wie gesagt: Daten kommen an.
Allerdings kommen die Daten nur an solange ich nicht die Verbindung zum PC trenne, sobald ich es entferne und mit deinem USB Netzteil betreibe scheinen die Daten nicht mehr am Webserver an zu kommen. Die blaue LED jedoch blinkt. Auch wenn ich das Board nochmals am PC anschließe passiert nicht mehr. Erst wenn ich es mehrfach flashe und das Programm (dht_esp8266.lua und init.lua) kann ich glück haben das es wieder funktioniert.
Eventuell kannst mir jemand einen Tipp geben woran es liegen kann das die Daten nach Spannungsverlust nicht mehr ankommen? Das Programm scheint ja zu laufen, sonst würde die blaue LED am board nicht blinken, oder?
Vielen Dank
Andreas
Guten Tag aus Rathenow,
obiges Tut versuche ich umzusetzen. Leider bisher erfolglos. Mein RPI3+ läuft mit „strech“. Die Installationen sind gelaufen bis node. Dann kam:
root@raspberrypi:/home/pi# npm install rpio –save
npm ERR! code 1
npm ERR! path /home/pi/node_modules/rpio
npm ERR! command failed
npm ERR! command sh -c node-gyp rebuild
npm ERR! gyp info it worked if it ends with ok
npm ERR! gyp info using node-gyp@9.0.0
npm ERR! gyp info using node@16.15.1 | linux | arm
npm ERR! gyp ERR! find Python
npm ERR! gyp ERR! find Python Python is not set from command line or npm configuration
npm ERR! gyp ERR! find Python Python is not set from environment variable PYTHON
npm ERR! gyp ERR! find Python checking if „python3“ can be used
npm ERR! gyp ERR! find Python – executable path is „/usr/bin/python3“
npm ERR! gyp ERR! find Python – version is „3.5.3“
npm ERR! gyp ERR! find Python – version is 3.5.3 – should be >=3.6.0
npm ERR! gyp ERR! find Python – THIS VERSION OF PYTHON IS NOT SUPPORTED
npm ERR! gyp ERR! find Python checking if „python“ can be used
npm ERR! gyp ERR! find Python – executable path is „/usr/bin/python“
npm ERR! gyp ERR! find Python – version is „2.7.13“
npm ERR! gyp ERR! find Python – version is 2.7.13 – should be >=3.6.0
npm ERR! gyp ERR! find Python – THIS VERSION OF PYTHON IS NOT SUPPORTED
npm ERR! gyp ERR! find Python
npm ERR! gyp ERR! find Python **********************************************************
npm ERR! gyp ERR! find Python You need to install the latest version of Python.
npm ERR! gyp ERR! find Python Node-gyp should be able to find and use Python. If not,
npm ERR! gyp ERR! find Python you can try one of the following options:
npm ERR! gyp ERR! find Python – Use the switch –python=“/path/to/pythonexecutable“
npm ERR! gyp ERR! find Python (accepted by both node-gyp and npm)
npm ERR! gyp ERR! find Python – Set the environment variable PYTHON
npm ERR! gyp ERR! find Python – Set the npm configuration variable python:
npm ERR! gyp ERR! find Python npm config set python „/path/to/pythonexecutable“
npm ERR! gyp ERR! find Python For more information consult the documentation at:
npm ERR! gyp ERR! find Python https://github.com/nodejs/node-gyp#installation
npm ERR! gyp ERR! find Python **********************************************************
npm ERR! gyp ERR! find Python
npm ERR! gyp ERR! configure error
npm ERR! gyp ERR! stack Error: Could not find any Python installation to use
npm ERR! gyp ERR! stack at PythonFinder.fail (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/find-python.js:330:47)
npm ERR! gyp ERR! stack at PythonFinder.runChecks (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/find-python.js:159:21)
npm ERR! gyp ERR! stack at PythonFinder. (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/find-python.js:266:16)
npm ERR! gyp ERR! stack at PythonFinder.execFileCallback (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/find-python.js:297:7)
npm ERR! gyp ERR! stack at ChildProcess.exithandler (node:child_process:390:7)
npm ERR! gyp ERR! stack at ChildProcess.emit (node:events:527:28)
npm ERR! gyp ERR! stack at maybeClose (node:internal/child_process:1092:16)
npm ERR! gyp ERR! stack at Socket. (node:internal/child_process:451:11)
npm ERR! gyp ERR! stack at Socket.emit (node:events:527:28)
npm ERR! gyp ERR! stack at Pipe. (node:net:709:12)
npm ERR! gyp ERR! System Linux 4.19.66-v7+
npm ERR! gyp ERR! command „/usr/bin/node“ „/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js“ „rebuild“
npm ERR! gyp ERR! cwd /home/pi/node_modules/rpio
npm ERR! gyp ERR! node -v v16.15.1
npm ERR! gyp ERR! node-gyp -v v9.0.0
npm ERR! gyp ERR! not ok
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2022-06-15T12_01_33_778Z-debug-0.log
root@raspberrypi:/home/pi#
So ging es dann weiter:
root@raspberrypi:/home/pi/Raspberry-Pi-ESP8266-Weather-Logger# npm install
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE package: ‚raspberry-pi-esp8266-weather-logger@1.0.0‘,
npm WARN EBADENGINE required: { node: ‚4.0.0‘ },
npm WARN EBADENGINE current: { node: ‚v16.15.1‘, npm: ‚8.11.0‘ }
npm WARN EBADENGINE }
up to date, audited 143 packages in 3s
12 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
Das ist das derzeitige Ende:
root@raspberrypi:/home/pi/Raspberry-Pi-ESP8266-Weather-Logger# node index.js
/home/pi/Raspberry-Pi-ESP8266-Weather-Logger/index.js:36
if (error) throw error;
^
Error: Cannot enqueue Query after fatal error.
at Protocol._validateEnqueue (/home/pi/Raspberry-Pi-ESP8266-Weather-Logger/node_modules/mysql/lib/protocol/Protocol.js:212:16)
at Protocol._enqueue (/home/pi/Raspberry-Pi-ESP8266-Weather-Logger/node_modules/mysql/lib/protocol/Protocol.js:138:13)
at Connection.query (/home/pi/Raspberry-Pi-ESP8266-Weather-Logger/node_modules/mysql/lib/Connection.js:198:25)
at /home/pi/Raspberry-Pi-ESP8266-Weather-Logger/index.js:34:16
at Layer.handle [as handle_request] (/home/pi/Raspberry-Pi-ESP8266-Weather-Logger/node_modules/express/lib/router/layer.js:95:5)
at next (/home/pi/Raspberry-Pi-ESP8266-Weather-Logger/node_modules/express/lib/router/route.js:144:13)
at Route.dispatch (/home/pi/Raspberry-Pi-ESP8266-Weather-Logger/node_modules/express/lib/router/route.js:114:3)
at Layer.handle [as handle_request] (/home/pi/Raspberry-Pi-ESP8266-Weather-Logger/node_modules/express/lib/router/layer.js:95:5)
at /home/pi/Raspberry-Pi-ESP8266-Weather-Logger/node_modules/express/lib/router/index.js:284:15
at Function.process_params (/home/pi/Raspberry-Pi-ESP8266-Weather-Logger/node_modules/express/lib/router/index.js:346:12) {
code: ‚PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR‘,
fatal: false
}
root@raspberrypi:/home/pi/Raspberry-Pi-ESP8266-Weather-Logger#
Wass soll ich nun tun?
Mein Außenposten D1 mini scheint funktionsfähig zu sein.