ESP8266 Wetterstation Außenposten für den Raspberry Pi

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:

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:

dht,file,gpio,http,net,node,sjson,tmr,uart,wifi

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:

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:

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:

ESP8266 wetterstation VisJS

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 DNS Server sehr gut dafür geeignet.

80 Kommentare

  1. 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

    Antworten
    • 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 😉

      Antworten
  2. Hey Felix, das NodeJS Script scheint nicht korrekt zu funktionieren. Die Luftfeuchtigkeit/Humidity wird nicht Angezeigt.

    Antworten
    • Hallo,
      habe das gleiche Problem. Haben ich dort was falsch gemacht? In der MySQL Datenbank sind die Daten vorhanden.

      Antworten
  3. 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?

    Antworten
  4. 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?

    Antworten
  5. 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 ?

    Antworten
    • 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.

      Antworten
    • 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

      Antworten
    • 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?

      Antworten
      • 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!

  6. 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

    Antworten
  7. 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?

    Antworten
    • Jein: Wenn du willst, dass etwas nach dem Neustart ausgeführt werden soll (bspw. das eigentliche Skript gestartet werden soll), dann ja.

      Antworten
      • Ich hatte deinen Hinweis im Tutorial zur init.lua vorher leider nicht gesehen, damit klappt nun alles wunderbar =) vielen Dank

  8. 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)

    Antworten
    • 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 =)

      Antworten
      • 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 ?

  9. 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 ‚ +

    Antworten
  10. 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

    Antworten
    • 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.

      Antworten
  11. 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?

    Antworten
      • 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.

  12. 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

    Antworten
    • Nutzt du einen „Originalen“ ESP oder China Klon? Ich hatte ein ähnliches Problem auch bei einem ESP-01. Vielfaches neu-flashen hat letztendlich geholfen.

      Antworten
  13. 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

    Antworten
  14. 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

    Antworten
  15. 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

    Antworten
  16. 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.

    Antworten
    • 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?

      Antworten
  17. Hallo, erstmal danke für die tollen Tutorials.
    Kann ich an einem NodeMCU ESP-12 mehrere Sensoren parallel betreiben, also den DHT22 und BMP180?

    Antworten
  18. 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!

    Antworten
  19. 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

    Antworten
  20. 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

    Antworten
  21. 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

    Antworten
    • 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

      Antworten
  22. 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.

    Antworten
  23. 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.

    Antworten
    • 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.

      Antworten
  24. 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?

    Antworten
  25. 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 ?

    Antworten
  26. 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!

    Antworten
  27. 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?

    Antworten
  28. 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?

    Antworten
  29. 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

    html
      head
        title='Temperatur Diagram'
        script(src='scripts/vis.js')
        link(href='scripts/vis.css', rel='stylesheet' type='text/css')
        style.
          body, html {
            font-family: sans-serif;
          }
      body
        div#visualization
        script.
          var container = document.getElementById('visualization');
          var items = !{data}
          items.map(function(e){e.x=new Date(e.x); return e;})
    
          
          var groups = new vis.DataSet();
          groups.add({
            id: 'humid',
            content: "Humidity",
            options: {
                yAxisOrientation: 'right',
              drawPoints: {
                style: 'square'
              }
          }});
          groups.add({
            id: 'temp',
            content: "Temperatur",
            options: {
              yAxisOrientation: 'left',
              drawPoints: {
                style: 'square'
              },
              shaded: {
                orientation: 'bottom' // top, bottom
              }
          }});
          var dataset = new vis.DataSet(items);
    
          var options = {
            legend: {enabled: true},
    	
          };
          var graph2d = new vis.Graph2d(container, dataset, groups, options);
    
    Antworten
  30. 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.

    Antworten
    • 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.

      Antworten
      • 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!

  31. 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

    Antworten
    • 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

      Antworten
  32. 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?

    Antworten
    • 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!

      Antworten

Hinterlasse einen Kommentar

Deine Email Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Blog abonnieren

Abonniere Raspberry Pi Tutorials, um kein Tutorial mehr zu verpassen!