{"id":1805,"date":"2017-06-11T18:34:32","date_gmt":"2017-06-11T17:34:32","guid":{"rendered":"https:\/\/www.my-it-brain.de\/wordpress\/?p=1805"},"modified":"2017-06-17T19:36:09","modified_gmt":"2017-06-17T18:36:09","slug":"wer-viel-misst-misst-viel-mist","status":"publish","type":"post","link":"https:\/\/www.my-it-brain.de\/wordpress\/wer-viel-misst-misst-viel-mist\/","title":{"rendered":"Wer viel misst, misst viel Mist"},"content":{"rendered":"<p>Im Falle dieses Artikels bezieht sich der Titel auf das Messen von Temperatur und relativer Luftfeuchtigkeit mit einem <a href=\"https:\/\/www.sparkfun.com\/datasheets\/Sensors\/Temperature\/DHT22.pdf\">DHT22-Sensor<\/a> (AM2302).<\/p>\n<p>Im Rahmen eines kleinen Wochenend-Projekts m\u00f6chte ich mit Hilfe des genannten Sensors, der Open-Source-Plattform <a href=\"https:\/\/en.wikipedia.org\/wiki\/NodeMCU\">NodeMCU V3<\/a> und einem Raspberry Pi eine Raumklima\u00fcberwachung f\u00fcr unsere Wohnung basteln. Der NodeMCU V3 mit aufgesetztem <a href=\"https:\/\/en.wikipedia.org\/wiki\/ESP8266\">ESP8266<\/a> scheint dazu gut geeignet, da er dank integriertem WLAN die aufgezeichneten Messdaten direkt an eine zentrale Instanz \u00fcbertragen kann. An dieser Stelle beschreibe ich, wie ich dabei vorgegangen bin, welche Komponenten zum Einsatz kamen, wie der Prototyp funktioniert, welche Erkenntnisse ich dabei gewonnen habe und was ich damit in Zukunft anzustellen gedenke.<\/p>\n<h2>Vorwort zum Prototyp<\/h2>\n<p>F\u00fcr meine Bastelei verwende ich am liebsten den DHT22-Sensor. Dieser ist g\u00fcnstig und liefert eine hinreichende Genauigkeit. Mir ist jedoch in der Vergangenheit aufgefallen, dass einzelne Exemplare in ihren Messwerten teils deutlich nach oben oder unten ausrei\u00dfen.<\/p>\n<p>Um nun herauszufinden, ob sich in der j\u00fcngsten Charge wieder ein paar Ausrei\u00dfer befinden, habe ich mich f\u00fcr einen demokratischen Ansatz entschieden. Dabei schlie\u00dfe ich mehrere Sensoren an den gleichen Mikrocontroller an und messe mit ihnen am gleichen Ort. Theoretisch d\u00fcrfen die Messwerte nur in dem angegebenen Toleranzbereich von maximal +\/- 5% RH und +\/- 0,5 \u00b0C abweichen. Mit der parallelen Anordnung von vier Sensoren kann ich erkennen, ob einer aus der Reihe tanzt.<\/p>\n<h2>Vorbereitung der Plattform<\/h2>\n<p>Als Firmware f\u00fcr den ESP8266 habe ich <a href=\"https:\/\/www.letscontrolit.com\/wiki\/index.php\/ESPEasy\">ESPEasy<\/a> ausgew\u00e4hlt. Das Projekt verf\u00fcgt \u00fcber ein gut strukturiertes Wiki, welches in englischer Sprache erkl\u00e4rt, wie man die Firmware auf den ESP8266 installiert.<\/p>\n<h2>Aufbau des Prototyps<\/h2>\n<p>F\u00fcr den Aufbau habe ich zwei k\u013aeine Steckbretter und ein <a href=\"https:\/\/en.wikipedia.org\/wiki\/NodeMCU\">NodeMCU V3<\/a> verwendet. Der Aufbau wird im folgenden Bild dargestellt. Da dies mein erster Versuch war, einen Aufbau zu modellieren, bitte ich um etwas Nachsicht.<\/p>\n<div id=\"attachment_1807\" style=\"width: 265px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2017\/06\/NodeMCU_V3_with_4_DHT22_Sketch_Steckplatine.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1807\" class=\"size-medium wp-image-1807\" src=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2017\/06\/NodeMCU_V3_with_4_DHT22_Sketch_Steckplatine-255x300.png\" alt=\"dht22-on-esp8266\" width=\"255\" height=\"300\" srcset=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2017\/06\/NodeMCU_V3_with_4_DHT22_Sketch_Steckplatine-255x300.png 255w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2017\/06\/NodeMCU_V3_with_4_DHT22_Sketch_Steckplatine-768x902.png 768w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2017\/06\/NodeMCU_V3_with_4_DHT22_Sketch_Steckplatine-681x800.png 681w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2017\/06\/NodeMCU_V3_with_4_DHT22_Sketch_Steckplatine-624x733.png 624w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2017\/06\/NodeMCU_V3_with_4_DHT22_Sketch_Steckplatine.png 876w\" sizes=\"auto, (max-width: 255px) 100vw, 255px\" \/><\/a><p id=\"caption-attachment-1807\" class=\"wp-caption-text\">Aufbau des Prototypen<\/p><\/div>\n<p>Es wurden Pull-Up-Widerst\u00e4nde mit einem Widerstand von 10k Ohm verwendet und an die GPIO-PINs 12, 13, 14 und 16 angeschlossen.<\/p>\n<p>Eine \u00dcbersicht \u00fcber alle zur Verf\u00fcgung stehenden PINs bietet das folgende Bild:<\/p>\n<div id=\"attachment_1810\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2017\/06\/NODEMCU-DEVKIT-INSTRUCTION-EN.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1810\" class=\"size-medium wp-image-1810\" src=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2017\/06\/NODEMCU-DEVKIT-INSTRUCTION-EN-300x252.png\" alt=\"\" width=\"300\" height=\"252\" srcset=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2017\/06\/NODEMCU-DEVKIT-INSTRUCTION-EN-300x252.png 300w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2017\/06\/NODEMCU-DEVKIT-INSTRUCTION-EN-768x644.png 768w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2017\/06\/NODEMCU-DEVKIT-INSTRUCTION-EN-800x671.png 800w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2017\/06\/NODEMCU-DEVKIT-INSTRUCTION-EN-624x523.png 624w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2017\/06\/NODEMCU-DEVKIT-INSTRUCTION-EN.png 1344w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-1810\" class=\"wp-caption-text\">PIN-Belegung des NodeMCU<\/p><\/div>\n<p>Wurde die Schaltung wie im obigen Bild aufgebaut, verbindet man sich mit der Weboberfl\u00e4che des ESPEasy und konfiguriert diesen entsprechend. Eine ausf\u00fchrliche Dokumentation zum Webinterface findet man unter der URL <a href=\"https:\/\/www.letscontrolit.com\/wiki\/index.php\/ESP_Easy_web_interface\">https:\/\/www.letscontrolit.com\/wiki\/index.php\/ESP_Easy_web_interface<\/a>.<\/p>\n<p>In meinem Aufbau erscheinen die Sensoren nach erfolgreicher Konfiguration wie folgt unter &#8222;Devices&#8220; im Webinterface.<\/p>\n<div id=\"attachment_1811\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2017\/06\/esp8266_devices.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1811\" class=\"size-medium wp-image-1811\" src=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2017\/06\/esp8266_devices-300x137.png\" alt=\"\" width=\"300\" height=\"137\" srcset=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2017\/06\/esp8266_devices-300x137.png 300w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2017\/06\/esp8266_devices-768x350.png 768w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2017\/06\/esp8266_devices-800x365.png 800w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2017\/06\/esp8266_devices-624x284.png 624w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2017\/06\/esp8266_devices.png 998w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-1811\" class=\"wp-caption-text\">Devices im Webinterface des ESPEasy<\/p><\/div>\n<p>Die meisten Schritte sind intuitiv zu bearbeiten. Lediglich zur Konfiguration des Template-Strings, welcher zur \u00dcbertragung der Messwerte an einen Webserver verwendet wird, habe ich etwas l\u00e4nger gebraucht. Ich verwende dazu folgenden Publish-Template-String, welcher unter Tools -&gt; Advanced -&gt; Publish Template eingetragen wird.<\/p>\n<p><code>import.php?name=%sysname%&amp;task=%tskname%&amp;valuename=%valname%&amp;value=%value%<\/code><\/p>\n<p>Das folgende Listing zeigt, wie die HTTP-GET-Anfragen beim Webserver ankommen:<br \/>\n<code><br \/>\n192.168.x.x 192.168.x.x - [07\/Jun\/2017:20:44:05 +0200] \"GET \/import.php?name=esp8266%5fdht22%5f2&amp;task=DHT22%2d1&amp;valuename=Temperature&amp;value=22.00 HTTP\/1.1\" 200 411 \"-\" \"-\"<br \/>\n192.168.x.x 192.168.x.x - [07\/Jun\/2017:20:44:06 +0200] \"GET \/import.php?name=esp8266%5fdht22%5f2&amp;task=DHT22%2d1&amp;valuename=Humidity&amp;value=43.60 HTTP\/1.1\" 200 411 \"-\" \"-\"<br \/>\n192.168.x.x 192.168.x.x - [07\/Jun\/2017:20:44:07 +0200] \"GET \/import.php?name=esp8266%5fdht22%5f2&amp;task=DHT22%2d2&amp;valuename=Temperature&amp;value=22.00 HTTP\/1.1\" 200 411 \"-\" \"-\"<br \/>\n192.168.x.x 192.168.x.x - [07\/Jun\/2017:20:44:08 +0200] \"GET \/import.php?name=esp8266%5fdht22%5f2&amp;task=DHT22%2d2&amp;valuename=Humidity&amp;value=44.30 HTTP\/1.1\" 200 411 \"-\" \"-\"<br \/>\n192.168.x.x 192.168.x.x - [07\/Jun\/2017:20:44:09 +0200] \"GET \/import.php?name=esp8266%5fdht22%5f2&amp;task=DHT22%2d3&amp;valuename=Temperature&amp;value=22.10 HTTP\/1.1\" 200 411 \"-\" \"-\"<br \/>\n192.168.x.x 192.168.x.x - [07\/Jun\/2017:20:44:10 +0200] \"GET \/import.php?name=esp8266%5fdht22%5f2&amp;task=DHT22%2d3&amp;valuename=Humidity&amp;value=55.20 HTTP\/1.1\" 200 411 \"-\" \"-\"<br \/>\n192.168.x.x 192.168.x.x - [07\/Jun\/2017:20:44:11 +0200] \"GET \/import.php?name=esp8266%5fdht22%5f2&amp;task=DHT22%2d4&amp;valuename=Temperature&amp;value=22.00 HTTP\/1.1\" 200 411 \"-\" \"-\"<br \/>\n192.168.x.x 192.168.x.x - [07\/Jun\/2017:20:44:12 +0200] \"GET \/import.php?name=esp8266%5fdht22%5f2&amp;task=DHT22%2d4&amp;valuename=Humidity&amp;value=44.30 HTTP\/1.1\" 200 411 \"-\" \"-\"<br \/>\n<\/code><\/p>\n<p>Der Aufbau des Prototyps ist damit im Wesentlichen abgeschlossen.<\/p>\n<h2>Erstellung der import.php<\/h2>\n<p>In meinem Heimnetzwerk befindet sich bereits ein Raspberry Pi, auf welchem ein kleiner Webserver (lighttpd) l\u00e4uft. F\u00fcr diesen erstelle ich ein kleines Import-Skript, welches die Messdaten einsammelt und in eine Datei schreibt.<\/p>\n<p>F\u00fcr die Erstellung der Datei &#8222;import.php&#8220; nehme ich an, dass die Ergebnisse der vier Sensoren stets in der gleichen Reihenfolge \u00fcbermittelt werden. Da jeweils Temperatur und Luftfeuchtigkeit gemessen werden, \u00fcbertr\u00e4gt der ESP8266 acht Werte pro Messintervall. Diese sollten mit einem Zeitstempel in eine Zeile einer CSV-Datei geschrieben werden. Daf\u00fcr kommt aktuell das folgende Skript zum Einsatz:<br \/>\n<code><\/code><\/p>\n<p>switch ($_GET[&#8222;task&#8220;]) {<br \/>\ncase &#8222;DHT22-1&#8220;:<br \/>\nif ($_GET[&#8222;valuename&#8220;] == &#8218;Temperature&#8216;) {<br \/>\n$data = date(&#8218;Y-m-d&#8216;). &#8222;T&#8220; . date(&#8218;H:i:s&#8216;, time()) . &#8222;,&#8220; . $_GET[&#8222;value&#8220;] . &#8222;,&#8220;;<br \/>\n} else {<br \/>\n$data = $_GET[&#8222;value&#8220;] . &#8222;,&#8220;;<br \/>\n}<br \/>\nbreak;<br \/>\ncase &#8222;DHT22-2&#8220;:<br \/>\nif ($_GET[&#8222;valuename&#8220;] == &#8218;Temperature&#8216;) {<br \/>\n$data = $_GET[&#8222;value&#8220;] . &#8222;,&#8220;;<br \/>\n} else {<br \/>\n$data = $_GET[&#8222;value&#8220;] . &#8222;,&#8220;;<br \/>\n}<br \/>\nbreak;<br \/>\ncase &#8222;DHT22-3&#8220;:<br \/>\nif ($_GET[&#8222;valuename&#8220;] == &#8218;Temperature&#8216;) {<br \/>\n$data = $_GET[&#8222;value&#8220;] . &#8222;,&#8220;;<br \/>\n} else {<br \/>\n$data = $_GET[&#8222;value&#8220;] . &#8222;,&#8220;;<br \/>\n}<br \/>\nbreak;<br \/>\ncase &#8222;DHT22-4&#8220;:<br \/>\nif ($_GET[&#8222;valuename&#8220;] == &#8218;Temperature&#8216;) {<br \/>\n$data = $_GET[&#8222;value&#8220;] . &#8222;,&#8220;;<br \/>\n} else {<br \/>\n$data = $_GET[&#8222;value&#8220;] . &#8222;\\n&#8220;;<br \/>\n}<br \/>\nbreak;<br \/>\n}<\/p>\n<p>print($data);<br \/>\nfile_put_contents(&#8218;\/var\/www\/dht22data.csv&#8216;, $data, FILE_APPEND);<\/p>\n<p>&nbsp;<\/p>\n<h2>Erste Erkenntnisse<\/h2>\n<p>Im aktuellen Aufbau werden die Messwerte alle 5 Minuten an den Webserver \u00fcbertragen. Die empfangenen Daten habe ich mit LibreOffice Calc ge\u00f6ffnet und etwas aufbereitet:<\/p>\n<div id=\"attachment_1817\" style=\"width: 659px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2017\/06\/dht22_ergebnisse.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1817\" class=\"size-full wp-image-1817\" src=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2017\/06\/dht22_ergebnisse.png\" alt=\"\" width=\"649\" height=\"323\" srcset=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2017\/06\/dht22_ergebnisse.png 649w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2017\/06\/dht22_ergebnisse-300x149.png 300w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2017\/06\/dht22_ergebnisse-624x311.png 624w\" sizes=\"auto, (max-width: 649px) 100vw, 649px\" \/><\/a><p id=\"caption-attachment-1817\" class=\"wp-caption-text\">Erste Messergebnisse (aufbereitet)<\/p><\/div>\n<p>Die Messwerte wurden auf ganze Zahlen gerundet. Es l\u00e4sst sich erkennen, dass tats\u00e4chlich ein Sensor aus der Reihe tanzt. Der DHT22-3 weicht bei der Luftfeuchtigkeit um 9-11 Prozentpunkte nach oben ab. Das ist erstmal nicht weiter schlimm, jedoch gut zu wissen. Ich werde die n\u00e4chste Zeit beobachten, wie sich diese Abweichung bei wechselnden Temperaturen entwickelt.<\/p>\n<p>Entweder passe ich die gemessenen Werte an, indem ich in der Weboberfl\u00e4che einen festen Faktor zu den gemessenen Werten hinzurechne bzw. abziehe oder ich sondere den Sensor aus, sollte die Abweichung zu stark schwanken.<\/p>\n<h2>Ausblick<\/h2>\n<p>Die n\u00e4chsten Tage werde ich den Prototyp in seiner aktuellen Konfiguration weiterlaufen lassen. Anschlie\u00dfend beschaffe ich mir ein paar kleine Geh\u00e4use, um jeweils einen Sensor mit einem Controller zusammen einzusetzen und in der Wohnung aufzustellen. So wei\u00df ich in Zukunft schon vorher, ob es sich lohnt, die Wohnung zu betreten oder ich lieber gleich in den Garten gehe.<\/p>\n<p>Dar\u00fcber hinaus habe ich noch eine Handvoll weiterer DHT22-Sensoren. Diese werde ich ebenfalls auf einem Steckbrett anordnen und sie an einen Raspberry Pi anschlie\u00dfen. Ich werde bei diesen das gleiche Verfahren anwenden, um Ausrei\u00dfer erkennen zu k\u00f6nnen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im Falle dieses Artikels bezieht sich der Titel auf das Messen von Temperatur und relativer Luftfeuchtigkeit mit einem DHT22-Sensor (AM2302). Im Rahmen eines kleinen Wochenend-Projekts m\u00f6chte ich mit Hilfe des genannten Sensors, der Open-Source-Plattform NodeMCU V3 und einem Raspberry Pi eine Raumklima\u00fcberwachung f\u00fcr unsere Wohnung basteln. Der NodeMCU V3 mit aufgesetztem ESP8266 scheint dazu gut<span class=\"continue-reading\"> <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/wer-viel-misst-misst-viel-mist\/\">[Weiterlesen&#8230;]<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_metis_text_type":"","_metis_text_length":0,"_post_count":0,"footnotes":""},"categories":[57],"tags":[459,460,461,462,430,305],"class_list":["post-1805","post","type-post","status-publish","format-standard","hentry","category-wochenend-projekte","tag-dht22","tag-esp8266","tag-espeasy","tag-generic-http","tag-osbn","tag-planet"],"_links":{"self":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/1805","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/comments?post=1805"}],"version-history":[{"count":13,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/1805\/revisions"}],"predecessor-version":[{"id":1822,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/1805\/revisions\/1822"}],"wp:attachment":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/media?parent=1805"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/categories?post=1805"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/tags?post=1805"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}