<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Hausautomatisierung &#8211; bubuxblog</title>
	<atom:link href="https://www.bubuxblog.de/tag/hausautomatisierung/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bubuxblog.de</link>
	<description></description>
	<lastBuildDate>Sat, 24 Jan 2026 14:06:39 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>Gasverbrauch mit ESP8266 messen &#8211; neue Version 1008</title>
		<link>https://www.bubuxblog.de/gasverbrauch-mit-esp8266-messen-neue-version-1008/</link>
					<comments>https://www.bubuxblog.de/gasverbrauch-mit-esp8266-messen-neue-version-1008/#respond</comments>
		
		<dc:creator><![CDATA[diefenbecker]]></dc:creator>
		<pubDate>Sat, 24 Jan 2026 14:06:39 +0000</pubDate>
				<category><![CDATA[Eigenbau]]></category>
		<category><![CDATA[ESP8266]]></category>
		<category><![CDATA[Heimautomatisierung]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Hausautomatisierung]]></category>
		<category><![CDATA[Homeautomation]]></category>
		<guid isPermaLink="false">https://www.bubuxblog.de/?p=2361</guid>

					<description><![CDATA[Die Messung unseres Gasverbrauches per Reedkontakt und NodeMCU mit seinem ESP8266 funktioniert schon seit langen sehr gut und zuverlässig. Eigentlich bestand keine Notwendigkeit daran etwas zu ändern. Kleine Probleme Einzig meine gewohnte Freiluftverdrahtung mit einem Gummi der den Reedkontakt am Zähler festhält (der die Klebeband-Halterung ablöste) wurde regelmäßig porös und der Reedkontakt fiel runter. Meistens [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Die Messung unseres Gasverbrauches per Reedkontakt und NodeMCU mit seinem ESP8266 funktioniert schon seit langen sehr gut und zuverlässig. Eigentlich bestand keine Notwendigkeit daran etwas zu ändern.</p>



<p class="has-medium-font-size">Kleine Probleme</p>



<p>Einzig meine gewohnte Freiluftverdrahtung mit einem Gummi der den Reedkontakt am Zähler festhält (der die Klebeband-Halterung ablöste) wurde regelmäßig porös und der Reedkontakt fiel runter. Meistens merkte ich das erst Tage später. Da ich mir Ende letzten Jahres einen 3D-Drucker angeschafft habe, wollte ich bei diesem Projekt mein erstes ordentliches Gehäuse für meine Sensoren erstellen wo mal nichts irgendwo einfach nur herum baumelt.</p>



<figure class="wp-block-image size-large is-style-default"><a href="https://www.bubuxblog.de/wp-content/uploads/2026/01/halter-scaled.jpg"><img fetchpriority="high" decoding="async" width="1024" height="768" src="https://www.bubuxblog.de/wp-content/uploads/2026/01/halter-1024x768.jpg" alt="Gehäuse für den Wemos und den Reed" class="wp-image-2362" srcset="https://www.bubuxblog.de/wp-content/uploads/2026/01/halter-1024x768.jpg 1024w, https://www.bubuxblog.de/wp-content/uploads/2026/01/halter-300x225.jpg 300w, https://www.bubuxblog.de/wp-content/uploads/2026/01/halter-768x576.jpg 768w, https://www.bubuxblog.de/wp-content/uploads/2026/01/halter-1536x1152.jpg 1536w, https://www.bubuxblog.de/wp-content/uploads/2026/01/halter-2048x1536.jpg 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>Bei Makerworld, Printables &amp; Co gibt es sehr viele fertige Modelle für entsprechende Halterungen. Danke an die kreativen Designer! Manche sind für den NodeMCU inklusive Reedkontakt, manche für einen Wemos D1 inklusive Reedkontakt und manche nur für verschiedene Reedkontakte alleine. Ich habe ein Gehäuse für beides gesucht. Nachdem ich ein passendes Model gefunden und ausgedruckt hatte, ging es an die Montage. Die meisten dieser fertig designten Gehäuse nutzen einen axialen Reedkontakt. Diese haben meistens nur einen simplen Glaskörper. Hier war schon mein erstes Problem das diese Glasreeds echt empfindlich sind wenn man mal an den Beinchen biegt. Ich bin wahrscheinlich zu grobmotorisch aber sie sind ja billig&#8230;</p>



<p>Das größere Problem war aber, dass diese Reedkontakte nicht oder <strong>unzuverlässig</strong> anziehen wenn der Magnet des Zählers vorbei kommt da dieser recht schwach ist (Stichwort Anzugsempfindlichkeit). Auch hundertmaliges Ausrichten in der Öffnung des Zählers, Ausrichten des Reedkontaktes parallel zum Magneten, testen verschiedene andere Reedkontakte (aus zylinderförmig eingegossene Exemplare) etc. war nicht zielführend und raubte mir den letzten Nerv weil alles ja schon mal gut funktionierte. <strong>Nur mein alter Meder MK471 funktionierte zuverlässig</strong>. </p>



<figure class="wp-block-image size-full"><a href="https://www.bubuxblog.de/wp-content/uploads/2026/01/Bildschirmfoto-vom-2026-01-24-14-46-01.png"><img decoding="async" width="377" height="218" src="https://www.bubuxblog.de/wp-content/uploads/2026/01/Bildschirmfoto-vom-2026-01-24-14-46-01.png" alt="Meder MK471" class="wp-image-2364" srcset="https://www.bubuxblog.de/wp-content/uploads/2026/01/Bildschirmfoto-vom-2026-01-24-14-46-01.png 377w, https://www.bubuxblog.de/wp-content/uploads/2026/01/Bildschirmfoto-vom-2026-01-24-14-46-01-300x173.png 300w" sizes="(max-width: 377px) 100vw, 377px" /></a></figure>



<span id="more-2361"></span>



<p class="has-medium-font-size">Das neue Gehäuse</p>



<p>Der MK471 passt aber in fast alle fertigen Gehäusedesigns <strong>nicht</strong> rein. Und die wenigen Gehäuse die den MK471 beherbergen können, passten nicht an meinen Gaszähler. Also hab ich mir ein schönes Gehäuse für den Wemos D1 Mini als Basis gesucht und mit FreeCad (ich komme mit dem 3D-Drucker eh nicht drumherum das zu lernen) entsprechende Anpassungen gemacht damit anstatt einem axialen Reedkontakt der MK471 rein passt. Das war nicht wirklich schwer und sehr viel Mühe hab ich auch nicht rein gesteckt. Die STL-Datei muss in Freecad einen Festkörper gewandelt werden und danach einfach die Aufnahme für den axialen Reedkontakt mittels &#8222;Pocket&#8220; mit einem passenden Rechteck aus dem Sketch &#8222;durchbohrt&#8220;. Da klemmt sich der MK471 jetzt ohne Probleme fest.</p>



<figure class="wp-block-image size-large"><a href="https://www.bubuxblog.de/wp-content/uploads/2026/01/freecad.png"><img decoding="async" width="1024" height="645" src="https://www.bubuxblog.de/wp-content/uploads/2026/01/freecad-1024x645.png" alt="Resultat des Gehäuse in Freecad" class="wp-image-2363" srcset="https://www.bubuxblog.de/wp-content/uploads/2026/01/freecad-1024x645.png 1024w, https://www.bubuxblog.de/wp-content/uploads/2026/01/freecad-300x189.png 300w, https://www.bubuxblog.de/wp-content/uploads/2026/01/freecad-768x484.png 768w, https://www.bubuxblog.de/wp-content/uploads/2026/01/freecad-1536x968.png 1536w, https://www.bubuxblog.de/wp-content/uploads/2026/01/freecad.png 1562w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="has-medium-font-size">Neue Softwareversion</p>



<p>Neben dem Gehäuse hab ich dann doch noch ein bisschen den Quellcode erneuert. Ich musste ja noch die LED die im Gehäuse vorgesehen ist einprogrammieren. Bisher blinke nur die interne LED des Mikrocontrollers. Aber die sieht man ja im Gehäuse nicht mehr. Dazu gab es noch ein paar andere kleine Korrekturen und Verbesserungen. <strong>Die LED muss mit Vorwiderstand an D3, der Reedkontakt bleibt wie gehabt an D4 wo jetzt per Software auch der interne Pullup aktiviert wird.</strong> Einen Plan für die Verdrahtung hab ich dafür hier nicht gemacht.</p>



<p>Aber <strong>wirklich schlecht</strong> <strong>implementiert</strong> hatte ich das Senden der Impulse an den MQTT-Server. Hier hatte ich bei jedem Impuls eine neue Verbindung zum Server geöffnet und dann das Publish gesendet. Das dauerte gefühlt immer ewig und war auch der Grund warum in der Vergangenheit der ein oder andere Impuls in Richtung MQTT verschluckt wurde.</p>



<p>Der neue Ansatz baut nun einmal bei Start die Verbindung zum MQTT auf, prüft im Loop ob diese Verbindung noch besteht und macht ggf. ein Reconnect. Bei einem Impuls durch den Reedkontakt wird dann nur noch der Impuls per Publish an den MQTT-Server gesendet. Viel besser <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p>Den aktuellen Quellcode für die Version 1008 inkl. vorkompiliertem Binary gibt es wie immer auf Github:</p>



<p><a href="https://github.com/diefenbecker/opengasmeter">https://github.com/diefenbecker/opengasmeter</a></p>



<p>Viel Spaß damit<br>Gruß Chris</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bubuxblog.de/gasverbrauch-mit-esp8266-messen-neue-version-1008/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Kleines Update für den Gaszähler-Sensor</title>
		<link>https://www.bubuxblog.de/kleines-update-fuer-den-gaszaehler-sensor/</link>
					<comments>https://www.bubuxblog.de/kleines-update-fuer-den-gaszaehler-sensor/#respond</comments>
		
		<dc:creator><![CDATA[diefenbecker]]></dc:creator>
		<pubDate>Fri, 19 Jan 2024 15:50:51 +0000</pubDate>
				<category><![CDATA[Energieeinsparung]]></category>
		<category><![CDATA[ESP8266]]></category>
		<category><![CDATA[Heimautomatisierung]]></category>
		<category><![CDATA[Hausautomatisierung]]></category>
		<category><![CDATA[Homeautomation]]></category>
		<guid isPermaLink="false">http://blog.bubux.de/?p=2185</guid>

					<description><![CDATA[Mit der Version 1006 gibt es nun ein kleines Update für den ESP 8266 Gaszähler-Sensor. Was ich bis vor ein paar Tagen noch nicht wusste ist, dass die Gaszähler den Magneten nicht alle an der gleichen Nachkommastelle befestigt haben. Unser Zähler zählt die Impulse alle 0,01m³, Es gibt aber auch Geräte, die nur alle 0,1m³ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Mit der Version 1006 gibt es nun ein kleines Update für den ESP 8266 Gaszähler-Sensor. Was ich bis vor ein paar Tagen noch nicht wusste ist, dass die Gaszähler den Magneten nicht alle an der gleichen Nachkommastelle befestigt haben. Unser Zähler zählt die Impulse alle <strong>0,01m³</strong>, Es gibt aber auch Geräte, die nur alle <strong>0,1m³</strong> einen Impuls zählen. Am Zähler sieht man das wie folgt im roten Kringel:</p>



<figure class="wp-block-image size-large"><a href="http://blog.bubux.de/wp-content/uploads/2024/01/gaszaehler-scaled.jpg"><img loading="lazy" decoding="async" width="1024" height="508" src="http://blog.bubux.de/wp-content/uploads/2024/01/gaszaehler-1024x508.jpg" alt="" class="wp-image-2187" srcset="https://www.bubuxblog.de/wp-content/uploads/2024/01/gaszaehler-1024x508.jpg 1024w, https://www.bubuxblog.de/wp-content/uploads/2024/01/gaszaehler-300x149.jpg 300w, https://www.bubuxblog.de/wp-content/uploads/2024/01/gaszaehler-768x381.jpg 768w, https://www.bubuxblog.de/wp-content/uploads/2024/01/gaszaehler-1536x761.jpg 1536w, https://www.bubuxblog.de/wp-content/uploads/2024/01/gaszaehler-2048x1015.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>In den Einstellungen des Sensors gibt es daher nun die Möglichkeit das entsprechend zu konfigurieren zu können.</p>



<figure class="wp-block-image size-full"><a href="http://blog.bubux.de/wp-content/uploads/2024/01/konfig_impulsgeber.png"><img loading="lazy" decoding="async" width="506" height="95" src="http://blog.bubux.de/wp-content/uploads/2024/01/konfig_impulsgeber.png" alt="" class="wp-image-2191" srcset="https://www.bubuxblog.de/wp-content/uploads/2024/01/konfig_impulsgeber.png 506w, https://www.bubuxblog.de/wp-content/uploads/2024/01/konfig_impulsgeber-300x56.png 300w" sizes="auto, (max-width: 506px) 100vw, 506px" /></a></figure>



<p>Zudem hatte ich noch in geistiger Umnachtung, den Namen/IP des Rechners, den Port und den Endpunkt zum Aufruf der eigenen API hart mit einer internen URL von mir verdrahtet. Immerhin hatte ich mir einen Kommentar im Quellcode geschrieben, dass das noch geändert werden muss. Hat nix geholfen, ist aber jetzt auch korrigiert.</p>



<hr class="wp-block-separator has-text-color has-vivid-red-color has-alpha-channel-opacity has-vivid-red-background-color has-background is-style-wide"/>



<p><strong>Hier die aktuelle bin-Datei in der Version 1006:</strong></p>



<p><a href="http://www.bubux.de/heimautomatisierung/ota/gaszaehler_aktuell.bin" data-type="URL" data-id="http://www.bubux.de/heimautomatisierung/ota/gaszaehler_aktuell.bin" target="_blank" rel="noreferrer noopener">http://www.bubux.de/heimautomatisierung/ota/gaszaehler_aktuell.bin</a></p>



<hr class="wp-block-separator has-text-color has-vivid-red-color has-alpha-channel-opacity has-vivid-red-background-color has-background is-style-wide"/>



<p>Für die Installation, weitere Erklärungen etc. gilt noch <a href="http://blog.bubux.de/gasverbrauch-mit-esp8266-messen/" data-type="post" data-id="2070">die Beschreibung aus dem ursprünglichen Artikel</a>. Zudem der Artikel zum <a href="http://blog.bubux.de/gasverbrauch-graphisch-darstellen/" data-type="post" data-id="2162">Auswerten der Impulse in Grafana</a>.</p>



<p>Gruß Chris</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bubuxblog.de/kleines-update-fuer-den-gaszaehler-sensor/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Zisternenfüllstandsmessung mit Time Of Flight-Sensor (die Zweite mit Version 1029)</title>
		<link>https://www.bubuxblog.de/zisternenfuellstandsmessung-mit-time-of-flight-sensor-die-zweite-mit-version-1029/</link>
					<comments>https://www.bubuxblog.de/zisternenfuellstandsmessung-mit-time-of-flight-sensor-die-zweite-mit-version-1029/#comments</comments>
		
		<dc:creator><![CDATA[diefenbecker]]></dc:creator>
		<pubDate>Sun, 16 Jan 2022 12:32:08 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Eigenbau]]></category>
		<category><![CDATA[Energieeinsparung]]></category>
		<category><![CDATA[ESP8266]]></category>
		<category><![CDATA[Heimautomatisierung]]></category>
		<category><![CDATA[Cistern]]></category>
		<category><![CDATA[Hausautomatisierung]]></category>
		<category><![CDATA[Homeautomation]]></category>
		<category><![CDATA[Time of Flight]]></category>
		<category><![CDATA[ToF]]></category>
		<category><![CDATA[VL53L0X]]></category>
		<category><![CDATA[VL53L1X]]></category>
		<category><![CDATA[Zisterne]]></category>
		<guid isPermaLink="false">http://blog.bubux.de/?p=2022</guid>

					<description><![CDATA[Es ist leider mal wieder lange nix passiert hier im Blog. Das letzte Jahr war nicht so prickelnd und ich hab meine Arbeit an meinen Bastelprojekten quasi eingestellt. Offensichtlich waren aber die dunklen Wintermonate bei einigen Leuten Ansporn, um ihre Heimautomatisierung und Sensorik zu überarbeiten. Es gab viele Einträge im Blog und ich bekam viele [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Es ist leider mal wieder lange nix passiert hier im Blog. Das letzte Jahr war nicht so prickelnd und ich hab meine Arbeit an meinen Bastelprojekten quasi eingestellt.</p>



<p>Offensichtlich waren aber die dunklen Wintermonate bei einigen Leuten Ansporn, um ihre Heimautomatisierung und Sensorik zu überarbeiten. Es gab viele Einträge im Blog und ich bekam viele Anfragen per Mail bzgl. des Time Of Flight-Sensor <em>VL53L0X </em> als möglicher Ersatz des Ultraschallsensors <em>HC-SR04</em>. Ich hatte ja auch bei der Version <a rel="noreferrer noopener" href="http://blog.bubux.de/zisternenfuellstandsmessung-mit-time-of-flight-sensor/" data-type="post" data-id="1993" target="_blank">1028 </a>nach fleißigen Testern und Rückmeldungen gefragt. Vielen Dank euch dafür! Das hat mich auch motiviert mal wieder was an dieser Front zu tun.</p>



<p>Auch wenn mein Ultraschallsensor für seine 2,50€ seit 3 Jahren tadellos seine Arbeit in der Zisterne verrichtet und ich bisher keine Notwendigkeit sehe diesen zu ersetzen, habe ich mir einen weiteren Sensor zu Testzwecken beschafft und in die Software implementiert. Ergebnis ist die Version 1029 der Software.</p>



<p>Neben dem ToF <em>VL53L0X </em> kann nun auch der <em>VL53L1X  </em>angeschlossen und genutzt werden. Zu den Unterschieden der beiden Sensoren findet man einiges im Internet. Welcher Sensor nun im jeweiligen Anwendungsfall die bessere Wahl ist, muss jeder selber herausfinden bzw. freue ich mich auch wieder auf Rückmeldungen im Blog oder per Mail bzgl. eurer Erfahrungen.</p>



<span id="more-2022"></span>



<p>Zu den beiden ToF-Sensoren nur ganz kurz folgende Zeichnung bzgl. der Öffnungskegel in Abhängigkeit zum Messabstand. Dazu aber noch weiter unten ein bisschen mehr Details da es anscheinend bei den möglichen Abständen etc. nicht verallgemeinert werden kann, welcher Sensor die bessere Wahl ist. Ich habe dazu auch (bisher) keine Tests gemacht!</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><a href="http://blog.bubux.de/wp-content/uploads/2022/01/abstands-kegel.jpeg"><img loading="lazy" decoding="async" width="842" height="391" src="http://blog.bubux.de/wp-content/uploads/2022/01/abstands-kegel.jpeg" alt="" class="wp-image-2033" srcset="https://www.bubuxblog.de/wp-content/uploads/2022/01/abstands-kegel.jpeg 842w, https://www.bubuxblog.de/wp-content/uploads/2022/01/abstands-kegel-300x139.jpeg 300w, https://www.bubuxblog.de/wp-content/uploads/2022/01/abstands-kegel-768x357.jpeg 768w" sizes="auto, (max-width: 842px) 100vw, 842px" /></a></figure></div>



<p>Der Anschluss des <em>VL53L1X </em>erfolgt analog des <em>VL53L0X</em>. Die notwendigen PINs zum Anschluss sind u.a. in der Applikation angegeben. Hier aber nochmal schnell das Anschlussschema für die beiden ToF-Sensoren.</p>



<div class="wp-block-image"><figure class="aligncenter size-full is-resized"><a href="http://blog.bubux.de/wp-content/uploads/2022/01/anschluss_vl53l0x.png"><img loading="lazy" decoding="async" src="http://blog.bubux.de/wp-content/uploads/2022/01/anschluss_vl53l0x.png" alt="" class="wp-image-2030" width="448" height="451" srcset="https://www.bubuxblog.de/wp-content/uploads/2022/01/anschluss_vl53l0x.png 896w, https://www.bubuxblog.de/wp-content/uploads/2022/01/anschluss_vl53l0x-298x300.png 298w, https://www.bubuxblog.de/wp-content/uploads/2022/01/anschluss_vl53l0x-150x150.png 150w, https://www.bubuxblog.de/wp-content/uploads/2022/01/anschluss_vl53l0x-768x773.png 768w" sizes="auto, (max-width: 448px) 100vw, 448px" /></a><figcaption>Anschlussschema für VL53L0X und VL53L1X</figcaption></figure></div>



<p>Die Version 1029 unterstützt weiterhin den Ultraschallsensor sowie die Displays und den Temperatursensor. Für das komplette Anschluss-Schema schaut bitte in den älteren Blog-Eintrag <a rel="noreferrer noopener" href="http://blog.bubux.de/update-fuellstandsanzeige-zisterne-v1026/" data-type="post" data-id="1964" target="_blank">hier</a>.</p>



<p>Die beiden ToF-Sensoren unterstützen seitens der API noch verschiedene Einstellungen die ich in der ersten Version 1028 nicht implementiert hatte und für den VL53L0X nur die Nutzung der Default-Einstellungen möglich war. In der neuen Version habe ich im ersten Anlauf zumindest ein paar wenige Einstellungsmöglichkeiten implementiert.</p>



<p>Dazu gehört für beide ToF-Sensoren die Möglichkeit den Abstandsmodus anzupassen. Hier holt man auch aus dem <em>VL53L0X </em>noch mehr heraus als im Datenblatt angegeben ist und muss bei größeren Abständen nicht zwingend auf den VL53L1X wechseln. Zudem habe ich beim <em>VL53LoX </em>noch die mögliche Anpassung des Timings implementiert. Hier kann zwischen dem Default-Wert auch noch High-Accuracy (hohe Genauigkeit) und High-Speed gewählt werden. Auch hier gibt es anscheinend kein Patentrezept um gute Messwerte zu erreichen und ausprobieren scheint die Devise.</p>



<p>Da ich diese Werte im &#8222;Setup&#8220; setze, ist nach Änderung in der WebUI ein Neustart des Sensors notwendig damit die neu eingstellten Werte greifen. Beim <em>VL53L1X </em>muss man den ESP auch ggf. mal vom Strom trennen. Der scheint da etwas zickig was ich auch schon erfahren musste als es nur seltsame Werte bei der Messung gab.</p>



<div class="wp-block-image"><figure class="aligncenter size-full is-resized"><a href="http://blog.bubux.de/wp-content/uploads/2022/01/zisterne_sensoren.png"><img loading="lazy" decoding="async" src="http://blog.bubux.de/wp-content/uploads/2022/01/zisterne_sensoren.png" alt="" class="wp-image-2026" width="714" height="186" srcset="https://www.bubuxblog.de/wp-content/uploads/2022/01/zisterne_sensoren.png 714w, https://www.bubuxblog.de/wp-content/uploads/2022/01/zisterne_sensoren-300x78.png 300w" sizes="auto, (max-width: 714px) 100vw, 714px" /></a><figcaption>Auswahl der Sensoren in der WebUI</figcaption></figure></div>



<p>Die weiteren Einstellmöglichkeiten des VL53L1X muss ich mir noch genauer anschauen und implementiere sie dann ggf. in einem nächsten Update. Hier gibt es z.B. noch die Möglichkeit zur Anpassung des Timings (ähnlich dem VL53L0X was ich dort bereits implementiert habe), die Anpassung der Größe des Empfangs-Arrays (SPAD) sowie der Anpassung der Region of Interest (ROI) und Definition eines Offsets. Mit diesen Parametern kann man u.a. &#8222;spielen&#8220;, falls der Sensor hinter eine Glasscheibe verbannt werden soll.</p>



<p></p>



<figure class="wp-block-image size-large"><a href="http://blog.bubux.de/wp-content/uploads/2022/01/20220116_122004-scaled.jpg"><img loading="lazy" decoding="async" width="1024" height="576" src="http://blog.bubux.de/wp-content/uploads/2022/01/20220116_122004-1024x576.jpg" alt="" class="wp-image-2029" srcset="https://www.bubuxblog.de/wp-content/uploads/2022/01/20220116_122004-1024x576.jpg 1024w, https://www.bubuxblog.de/wp-content/uploads/2022/01/20220116_122004-300x169.jpg 300w, https://www.bubuxblog.de/wp-content/uploads/2022/01/20220116_122004-768x432.jpg 768w, https://www.bubuxblog.de/wp-content/uploads/2022/01/20220116_122004-1536x864.jpg 1536w, https://www.bubuxblog.de/wp-content/uploads/2022/01/20220116_122004-2048x1152.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption>Aktueller Zoo an möglichen Senoren</figcaption></figure>



<p></p>



<p><strong>Den Download der neuesten Version gibt es hier:</strong></p>



<p><a href="http://www.bubux.de/heimautomatisierung/ota/zisterne_aktuell.bin">http://www.bubux.de/heimautomatisierung/ota/zisterne_aktuell.bin</a></p>



<p></p>



<p></p>



<p>Gruß Chris</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bubuxblog.de/zisternenfuellstandsmessung-mit-time-of-flight-sensor-die-zweite-mit-version-1029/feed/</wfw:commentRss>
			<slash:comments>16</slash:comments>
		
		
			</item>
		<item>
		<title>Webseite zur Darstellung der Sensordaten</title>
		<link>https://www.bubuxblog.de/webseite-zur-darstellung-der-sensordaten/</link>
					<comments>https://www.bubuxblog.de/webseite-zur-darstellung-der-sensordaten/#respond</comments>
		
		<dc:creator><![CDATA[diefenbecker]]></dc:creator>
		<pubDate>Mon, 09 Apr 2018 18:08:04 +0000</pubDate>
				<category><![CDATA[Haustechnik]]></category>
		<category><![CDATA[Heimautomatisierung]]></category>
		<category><![CDATA[Odroid]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[Gaszähler]]></category>
		<category><![CDATA[Hausautomatisierung]]></category>
		<category><![CDATA[Homeautomation]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Sensordaten anzeigen]]></category>
		<category><![CDATA[Webseite]]></category>
		<guid isPermaLink="false">http://blog.bubux.de/?p=1526</guid>

					<description><![CDATA[Da ich in der letzten Zeit sehr oft bezüglich der Erstellung einer Webseite zur Darstellung der Sensordaten (Heizung, Strom, Wasser, Gas, &#8230;) angesprochen wurde, habe ich mich entschlossen eine abgespeckte Variante meiner internen Webseite zu veröffentlichen. Die Webseite nutzt eine ältere Version der Metro UI-Oberfläche als &#8222;Framework&#8220; zur Darstellung der HTML-Seiten, sowie pChart zum Zeichnen [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Da ich in der letzten Zeit sehr oft bezüglich der Erstellung einer Webseite zur Darstellung der Sensordaten (Heizung, Strom, Wasser, Gas, &#8230;) angesprochen wurde, habe ich mich entschlossen eine abgespeckte Variante meiner internen Webseite zu veröffentlichen. Die Webseite nutzt eine ältere Version der <a href="https://metroui.org.ua/" target="_blank" rel="noopener">Metro UI-Oberfläche</a> als &#8222;Framework&#8220; zur Darstellung der HTML-Seiten, sowie <a href="http://www.pchart.net/" target="_blank" rel="noopener">pChart</a> zum Zeichnen der Graphen in den Detailansichten.</p>
<p>Meine Implementierung ist schon etwas älter und auch mit der Zeit gewachsen. Da es sich bei dieser Webseite um ein recht überschaubares Projekt handelt und ich mit dem Ergebnis zufrieden bin, habe ich mir nie die Mühe gemacht die Seite generischer zu gestalten. Daher muss bei nötigen Anpassungen der Code direkt geändert werden und es gibt auch keine Trennung von HTML und PHP, keine durchgehende allumfassende Fehlerbehandlung, evtl. &#8222;unschönes&#8220; HTML usw.</p>
<p>Der Code soll als <strong>Anregung und Grundlage</strong> für eine eigene Seite dienen&#8230;nicht mehr, nicht weniger. Wem´s ausreicht kann es natürlich auch 1:1 übernehmen. Positiv an meiner Lösung finde ich immer noch die Flexibilität in den Auswertungen die direkt auf der Datenbank mittels SQL ausgeführt werden können.</p>
<h3>Die Startseite</h3>
<p><a href="http://blog.bubux.de/wp-content/uploads/2018/04/index.png"><img loading="lazy" decoding="async" class="alignnone wp-image-1537 size-large" src="http://blog.bubux.de/wp-content/uploads/2018/04/index-1024x538.png" alt="Übersicht Webseite Sensordaten" width="768" height="404" srcset="https://www.bubuxblog.de/wp-content/uploads/2018/04/index-1024x538.png 1024w, https://www.bubuxblog.de/wp-content/uploads/2018/04/index-300x158.png 300w, https://www.bubuxblog.de/wp-content/uploads/2018/04/index-768x404.png 768w, https://www.bubuxblog.de/wp-content/uploads/2018/04/index.png 1397w" sizes="auto, (max-width: 768px) 100vw, 768px" /></a></p>
<p>Die Startseite wird mittels &#8222;Meta-Refresh&#8220; alle 180 Sekunden neu geladen und dient der Übersicht der wichtigsten Sensordaten. Mit Klick auf die (verlinkten) Boxen gelangt man jeweils zu einer detaillierteren Übersicht der Sensordaten. In der Übersicht werden keine komplizierten Datenbankauswertungen gemacht. Hier werden die Snapshot-Tabellen mit den aktuellen Werten ausgelesen und einige SQL-Aggregat-Funktionen genutzt. Das ging auch auf einem alten Raspi einigermaßen schnell. Das hängt natürlich von den Tabellengrößen in den Datenbanken ab. Da bei mir einige Tabellen mit den Jahren relativ groß geworden sind (~500k Zeilen), bin ich irgendwann auf einen <a href="http://blog.bubux.de/odroid-c2-vs-raspberry-pi-2/">Odroid</a> umgestiegen.</p>
<p><span id="more-1526"></span></p>
<h3>Übersicht der Außentemperaturen</h3>
<p><a href="http://blog.bubux.de/wp-content/uploads/2018/04/aussentemperatur.png"><img loading="lazy" decoding="async" class="alignnone wp-image-1541 size-large" src="http://blog.bubux.de/wp-content/uploads/2018/04/aussentemperatur-1024x606.png" alt="AUssentemperatur Webseite" width="768" height="455" srcset="https://www.bubuxblog.de/wp-content/uploads/2018/04/aussentemperatur-1024x606.png 1024w, https://www.bubuxblog.de/wp-content/uploads/2018/04/aussentemperatur-300x178.png 300w, https://www.bubuxblog.de/wp-content/uploads/2018/04/aussentemperatur-768x455.png 768w, https://www.bubuxblog.de/wp-content/uploads/2018/04/aussentemperatur.png 1395w" sizes="auto, (max-width: 768px) 100vw, 768px" /></a></p>
<p>Die Übersicht der Außentemperatur wird aus den Daten des Außenfühlers der Viessmann-Heizung generiert. Die Übersichten für anderen Sensoren sehen analog dieser Ansicht aus.</p>
<p>&nbsp;</p>
<h3>Die Übersicht der Heizungsdaten</h3>
<p><a href="http://blog.bubux.de/wp-content/uploads/2018/04/heizung.png"><img loading="lazy" decoding="async" class="alignnone size-large wp-image-1543" src="http://blog.bubux.de/wp-content/uploads/2018/04/heizung-1024x610.png" alt="" width="768" height="458" srcset="https://www.bubuxblog.de/wp-content/uploads/2018/04/heizung-1024x610.png 1024w, https://www.bubuxblog.de/wp-content/uploads/2018/04/heizung-300x179.png 300w, https://www.bubuxblog.de/wp-content/uploads/2018/04/heizung-768x458.png 768w, https://www.bubuxblog.de/wp-content/uploads/2018/04/heizung.png 1393w" sizes="auto, (max-width: 768px) 100vw, 768px" /></a></p>
<p>Die Übersicht der Heizungsdaten stellt verschiedene Daten dar die mittels <a href="https://github.com/openv/openv/wiki">openv</a> aus der Heizung ausgelesen werden. Aktuell lese ich mit openv nur aus und setze keine Werte (z.B. Sommer-/Winterumschaltung).</p>
<p>&nbsp;</p>
<h3>Voraussetzung und Grundlagen</h3>
<p>Details zum Auslesen der verschiedenen Sensordaten findet ihr in vorangegangenen Artikeln hier im Blog:</p>
<ul>
<li><a href="http://blog.bubux.de/viessmann-heizung-auslesen/">Viessmann Heizung mittels openv auslesen</a></li>
<li><a href="http://blog.bubux.de/m-bus-wasserzaehler/">M-Bus Wasserzähler auslesen</a></li>
<li><a href="http://blog.bubux.de/gaszaehler-auslesen/">Gaszähler mit Reed auslesen</a></li>
<li><a href="http://blog.bubux.de/raspberry-pi-ehz-auslesen/">Stromzähler mit optischem Lesekopf auslesen</a></li>
</ul>
<p>Die Webseite liest die Datenbanken des Wasserzähler, des Gaszählers, der Heizung und des Stromzählers aus. Folgend nochmal eine Übersicht der Tabellenstrukturen welche auch in den Artikel oben zu finden sind. In MySQL (bzw. MariaDB) habe ich zwei Datenbanken angelegt (vito, haus) mit verschiedenen Tabellen.</p>
<h4>Die Tabellen der Datenbank &#8222;vito&#8220;:</h4>
<pre class=""> CREATE TABLE `brenner` (
 `timestamp` datetime NOT NULL,
 `brennerstarts` float NOT NULL,
 `brennerstunden` float NOT NULL,
 `brennerstatus` int(11) NOT NULL,
 KEY `timestamp` (`timestamp`)
 ) ENGINE=InnoDB DEFAULT CHARSET=latin1</pre>
<pre class="">CREATE TABLE `snapshot` (
 `timestamp` datetime NOT NULL,
 `brennerstatus` float NOT NULL,
 `brennerstarts` float NOT NULL,
 `brennerstunden` float NOT NULL,
 `solarstunden` float NOT NULL,
 `solarleistung` float NOT NULL,
 `aussentemperatur` float NOT NULL,
 `warmwasser` float NOT NULL,
 `speicher_unten` float NOT NULL,
 `kollektor` float NOT NULL,
 `kesseltemperatur` float NOT NULL,
 `vorlauftemperaturM2` float NOT NULL,
 `vorlaufsolltemperaturM2` float NOT NULL,
 `raumsolltemperaturM1` float NOT NULL,
 `raumsolltemperaturM2` float NOT NULL,
 `raumsolltemperaturredM1` float NOT NULL,
 `raumsolltemperaturredM2` float NOT NULL,
 `warmwassersoll` float NOT NULL,
 `kesseltemperatursoll` float NOT NULL,
 `pumpestatusM1` float NOT NULL,
 `pumpestatusSP` float NOT NULL,
 `pumpestatussolar` float NOT NULL,
 `statusstoerung` varchar(100) CHARACTER SET latin1 COLLATE latin1_german1_ci NOT NULL,
 `systemzeit` varchar(100) CHARACTER SET latin1 COLLATE latin1_german1_ci NOT NULL,
 `error0` varchar(500) CHARACTER SET latin1 COLLATE latin1_german1_ci NOT NULL,
 `BetriebArt` varchar(20) NOT NULL,
 `BetriebArtM2` varchar(20) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1</pre>
<pre class="">CREATE TABLE `solar` (
 `timestamp` datetime NOT NULL,
 `solarstunden` float NOT NULL,
 `solarleistung` float NOT NULL,
 `solarpumpe` int(11) NOT NULL,
 KEY `timestamp` (`timestamp`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1</pre>
<pre class="">CREATE TABLE `temperaturen` (
 `timestamp` datetime NOT NULL,
 `aussentemperatur` float NOT NULL,
 `warmwasser` float NOT NULL,
 `speicher_unten` float NOT NULL,
 `kollektor` float NOT NULL,
 `vorlaufsolltemperaturM2` float NOT NULL,
 KEY `timestamp` (`timestamp`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1</pre>
<h3>&nbsp;</h3>
<h4>Die Tabellen der Datenbank &#8222;haus&#8220;:</h4>
<pre class="">CREATE TABLE `gaszaehler` (
 `timestamp` datetime NOT NULL,
 `zaehlerstand` float NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1</pre>
<pre class="">CREATE TABLE `stromzaehler` (
 `timestamp` datetime NOT NULL,
 `public_key` varchar(100) NOT NULL,
 `zaehlerstand` float DEFAULT NULL,
 `active_power` float NOT NULL,
 KEY `strom_index` (`timestamp`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1</pre>
<pre class="">CREATE TABLE `strom_snapshot` (
 `zeitstempel` date NOT NULL,
 `zaehlerstand` float NOT NULL,
 `wirkleistung` float NOT NULL,
 `aktuelles_jahr` float NOT NULL,
 `aktueller_monat` float NOT NULL,
 `aktueller_tag` float NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1</pre>
<pre class="">CREATE TABLE `wasserzaehler` (
 `timestamp` datetime NOT NULL,
 `zaehlerid` int(11) NOT NULL,
 `zaehlerstand` float NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1</pre>
<pre class="">CREATE TABLE `wasser_snapshot` (
 `timestamp` date NOT NULL,
 `zaehlerstand` float NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1</pre>
<h3>&nbsp;</h3>
<h3>&#8222;Installation&#8220;</h3>
<p>Einen funktionierenden Webserver (z.B. Apache) mit PHP und eine MySQL oder MariaDB vorausgesetzt, muss das unten verlinkte tar.gz in ein beliebiges Verzeichnis im www-Verzeichnis des Webservers entpackt werden.</p>
<p>Das funktioniert mit&nbsp;</p>
<pre class="toolbar:2 nums:false lang:default decode:true ">tar -xvzf webseite_sensordaten.tar.gz</pre>
<h3>&nbsp;</h3>
<h3>Konfiguration</h3>
<p>In der Datei config.inc müssen ein paar wenige Einstellungen vorgenommen werden. Folgende Einstellungen werden für die Verbindung zur Datenbank benötigt:</p>
<pre class="toolbar:2 nums:false lang:default decode:true">$mysqlhost="&lt;hostname&gt;";
$mysqluser="&lt;username&gt;";
$mysqlpwd="&lt;passwort&gt;";
$mysqldbvito="&lt;name_der_db_mit_den_vito_tabellen&gt;";
$mysqldbhaus="&lt;name_der_db_mit_den_haus_tabellen&gt;";</pre>
<p>Die folgenden Werte dienen der Auswertung des Gaszählers. Da dieser per Reed-Kontakt ausgelesen keinen Gesamtstand ausgibt und nur die einzelnen Impulse zählt, kann hier ein Startwert definiert. Auch die Werte zur Umrechnung von m³ in KW werden hier eingetragen. Diese Informationen gibt es beim Gaslieferanten.</p>
<p>Zudem kann noch definiert werden wie viel Tage in der Übersicht angezeigt werden sollen. Entsprechender Werte gibt es auch für den Wasserzähler und den Stromzähler.</p>
<pre class="toolbar:2 nums:false lang:default decode:true">$gas_startwert="2311650";
$brennwert_gas=10.097;
$zustandszahl_gas=0.9309;
$anz_tage_gas=7;

$anz_tage_wasser=7;

$anz_tage_strom=7;</pre>
<p>&nbsp;</p>
<p><strong>Wichtiger und letzter Schritt:</strong> Das Verzeichnis &#8222;tmp&#8220; muss schreibbar für den Webserver sein. Dort werden die generierten Graphen als PNG gespeichert. Das war es schon!</p>
<p><strong>Fehlt nur noch das Paket mit den PHP-Seiten: <a href="http://blog.bubux.de/wp-content/uploads/2018/04/webseite_sensordaten.tar.gz">webseite_sensordaten.tar.gz</a></strong></p>
<p>&nbsp;</p>
<p>Viel Spaß mit</p>
<p>Chris</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bubuxblog.de/webseite-zur-darstellung-der-sensordaten/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Windsensor TX20 mit ESP8266</title>
		<link>https://www.bubuxblog.de/windsensor-tx20-mit-esp8266/</link>
					<comments>https://www.bubuxblog.de/windsensor-tx20-mit-esp8266/#comments</comments>
		
		<dc:creator><![CDATA[diefenbecker]]></dc:creator>
		<pubDate>Fri, 05 May 2017 17:38:56 +0000</pubDate>
				<category><![CDATA[Eigenbau]]></category>
		<category><![CDATA[ESP8266]]></category>
		<category><![CDATA[Heimautomatisierung]]></category>
		<category><![CDATA[Hausautomatisierung]]></category>
		<category><![CDATA[TX20]]></category>
		<category><![CDATA[Windsensor]]></category>
		<guid isPermaLink="false">http://blog.bubux.de/?p=1372</guid>

					<description><![CDATA[Update am 28.05.2018 (Rot gekennzeichnet) Heute nochmal was zum Thema Hausautomatisierung bzw. Messung von Umweltdaten. Von Homematic gibt es eine komplette Wetterstation die wahrscheinlich ohne größeres Zutun in meine bestehende FHEM-Installation integriert werden kann. Allerdings ist das Ding recht teuer und schaut dafür noch nach viel Plastik aus. Auf der Suche nach einem günstigeren Windsensor [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><strong><span style="color: #ff0000;">Update am 28.05.2018 (Rot gekennzeichnet)<br />
</span></strong></p>
<p>Heute nochmal was zum Thema Hausautomatisierung bzw. Messung von Umweltdaten.</p>
<p>Von Homematic gibt es eine komplette <a href="http://www.eq-3.de/produkte/homematic/wetter-und-umwelt/hm-wds100-c6-o-2.html" target="_blank" rel="noopener noreferrer">Wetterstation</a> die wahrscheinlich ohne größeres Zutun in meine bestehende <a href="http://blog.bubux.de/raspberry-pi-heimautomatisierung-mit-coc-und-fhem/" target="_blank" rel="noopener noreferrer">FHEM-Installation</a> integriert werden kann. Allerdings ist das Ding recht teuer und schaut dafür noch nach viel Plastik aus. Auf der Suche nach einem günstigeren Windsensor bin ich über den TechnoLine TX20 gestolpert (auch Plastik, aber weniger und preislich günstiger). Diesen gibt es ab 30€ im Netz. Allerdings ist der Sensor zum kabelgebundenen Anschluss an eine Wetterstation gedacht (z.B. WS 2300, WS 2307, WS 2350).</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2017/04/20170423_115418.jpg"><img loading="lazy" decoding="async" class="alignnone size-large wp-image-1395" src="http://blog.bubux.de/wp-content/uploads/2017/04/20170423_115418-1024x576.jpg" alt="" width="768" height="432" srcset="https://www.bubuxblog.de/wp-content/uploads/2017/04/20170423_115418-1024x576.jpg 1024w, https://www.bubuxblog.de/wp-content/uploads/2017/04/20170423_115418-300x169.jpg 300w, https://www.bubuxblog.de/wp-content/uploads/2017/04/20170423_115418-768x432.jpg 768w" sizes="auto, (max-width: 768px) 100vw, 768px" /></a></p>
<p><span id="more-1372"></span></p>
<p>Ich wollte meinen zukünftigen Windsensor aber irgendwie kabellos in meine bestehende Infrastruktur integrieren, entweder per Funk oder per WLAN. Da ich noch ein paar <a href="https://de.wikipedia.org/wiki/ESP8266" target="_blank" rel="noopener noreferrer">ESP8266</a> von der letzten China-Bestellung im Keller liegen hatte, habe ich mich auf die Suche nach der Anbindung des TX20 Windsensors an den ESP8266 gemacht. Im ersten Schritt half die folgende Webseite wo der Kollege aus Neuseeland viel Arbeit in die Auswertung des Kommunikationsprotokoll des TX20 gesteckt hat:</p>
<blockquote class="wp-embedded-content" data-secret="dd9KLPMdqS"><p><a href="https://www.john.geek.nz/2011/07/la-crosse-tx20-anemometer-communication-protocol/">La Crosse TX20 Anemometer Communication Protocol</a></p></blockquote>
<p><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  src="https://www.john.geek.nz/2011/07/la-crosse-tx20-anemometer-communication-protocol/embed/#?secret=dd9KLPMdqS" data-secret="dd9KLPMdqS" width="600" height="338" title="&#8220;La Crosse TX20 Anemometer Communication Protocol&#8221; &#8212; john.geek.nz" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p>
<p>Die Integration des oben herausgefundenen Protokolls des TX20 für den ESP8266 ist auf folgender Webseite zu finden: <a href="http://fabrizio.zellini.org/decoding-la-crosse-tx20-anemometer-with-arduino" target="_blank" rel="noopener noreferrer">http://fabrizio.zellini.org/decoding-la-crosse-tx20-anemometer-with-arduino</a>. Das Beispielscript von dieser Seite kann man direkt mittels <a href="https://www.arduino.cc/" target="_blank" rel="noopener noreferrer">Arduino IDE</a> auf den ESP8266 laden. Wie das funktioniert und was sonst noch so beim ESP zu beachten ist, findet man unter anderem in diesem <a href="https://www.heise.de/developer/artikel/Arduino-goes-ESP8266-3240085.html" target="_blank" rel="noopener noreferrer">Heise-Artikel</a>.</p>
<p>In dem Beispielscript fehlte für meine Zwecke nur noch die WLAN-Funktionalität und eine komfortable Möglichkeit an die Messdaten für die weitere Nutzung zu gelangen. Das unten stehende angepasste Script ermöglicht beides. Aber zuerst ein paar Worte über die Anpassungen:</p>
<h2>Integration von WLAN</h2>
<p>Die Zugangsdaten für ein bestehendes WLAN werden fest im Code eingegeben. Der ESP verbindet sich mit diesem ein paar Sekunden nach Anschluss der Betriebsspannung. Die Konfiguration der WLAN-Zugangsdaten über einen vom ESP erstellten Access Point (AP) ist noch nicht implementiert (siehe Todo).</p>
<h2>Zugriff auf Messdaten</h2>
<p>Ich hatte drei Möglichkeiten zum Zugriff auf die Messdaten implementiert. Im Beispielscript sind alle Möglichkeiten aktiv. Das Script sollte also entsprechend des genutzten Zugriffes auf die Messdaten angepasst werden.</p>
<h3>1. Webseite</h3>
<p><strong><span style="color: #ff0000;">Darstellung der Webseite nur im alten Script!</span></strong></p>
<p>Zum einen stellt der ESP8266 nun eine einfache Webseite zur Verfügung. Neben der Windgeschwindigkeit und der Windrichtung werden auch noch verschiedene andere Daten des ESP8266 ausgelesen und dargestellt. Unter anderem auch die Betriebsspannung des Mikrocontrollers welche beim Betrieb mit Batterien auf deren Zustand zurück schließen lässt. Die Seite einfach im Webbrowser mittels IP oder Hostnamen des ESP8266 öffnen.</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2017/04/windsensor_webseite.png"><img loading="lazy" decoding="async" class="alignnone wp-image-1377" src="http://blog.bubux.de/wp-content/uploads/2017/04/windsensor_webseite-300x200.png" alt="" width="458" height="305" srcset="https://www.bubuxblog.de/wp-content/uploads/2017/04/windsensor_webseite-300x200.png 300w, https://www.bubuxblog.de/wp-content/uploads/2017/04/windsensor_webseite-768x512.png 768w, https://www.bubuxblog.de/wp-content/uploads/2017/04/windsensor_webseite.png 940w" sizes="auto, (max-width: 458px) 100vw, 458px" /></a></p>
<h3>2. JSON</h3>
<p><strong><span style="color: #ff0000;">Implementierung von JSON nur im alten Script!</span></strong></p>
<p>Um die Daten einfacher automatisiert weiter verarbeiten zu können, wird beim Anhängen von <em>/json</em> an die URL ein JSON-String zurück geliefert. Dieser schaut wie folgt aus:</p>
<p><i>{&#8222;Windgeschwindigkeit&#8220;:61,&#8220;Windrichtung&#8220;:2}</i></p>
<p>Mit PHP funktioniert das Auswerten des JSON-Strings wie folgt. Solch ein Script könnte z.B. zeitgesteuert per Cronjob aufgerufen werden und die extrahierten Daten in eine Datenbank schreiben oder anderweitig darauf reagieren.</p>
<p>[cclN_php]<br />
<!--?php $json = file_get_contents('http://esp8266-windsensor/json'); $json_ergebnis=json_decode($json); $windgeschwindigkeit=$json_ergebnis-&gt;Windgeschwindigkeit;&lt;br ?--> $windrichtung=$json_ergebnis-&gt;Windrichtung;</p>
<p>// hier kann die weitere Verarbeitung der Daten erfolgen&#8230;<br />
?&gt;<br />
[/cclN_php]</p>
<p>&nbsp;</p>
<h3>3. Scriptaufruf durch den ESP8266</h3>
<p>Die beiden oberen Varianten bedürfen einen aktiven Aufruf durch einen Client (Webbrowser) oder den Aufruf der Webseite durch ein Script. Nachteil dieser Variante ist, das der ESP immer aktiv sein muss da er den Zeitpunkt der Abfrage nicht kennt. Um Strom zu sparen ist eine aktive Datenübermittlung durch den ESP vorteilhafter. D.h der ESP kann in definierten Intervallen messen, die Daten übermitteln und sich wieder schlafen legen. Die aktive Übermittlung der Daten wird durch den Aufruf einer Webseite (die auf einem Server hinterlegt ist) durch den ESP realisiert. Der entsprechende Host (Zeile 8) und URL (Zeile 235) sind im Programm für den ESP fest hinterlegt.</p>
<p>Hier ein beispielhaftes PHP-Script welches auf einem Webserver liegt und durch den ESP aufgerufen wird, die Daten auswertet und diese dann in eine Textdatei auf dem Server schreibt:</p>
<p><span style="color: #ff0000;"><strong>Update am 28.05.2018 (nur für neues ESP-Script mit Boe-Funktion)<br />
</strong></span></p>
<pre class="lang:php decode:true">&lt;?php
//*************************
// Uebergebene Daten des
// ESP-Aufrufes auslesen
//*************************
$windgeschwindigkeit=$_GET["windgeschwindigkeit"];
$windgeschwindigkeit=$windgeschwindigkeit/10*3.6;
$windrichtung=$_GET["windrichtung"];
$boe=$_GET["boe"];
$boe=$boe/10*3.6;
$vcc=$_GET["vcc"];

//*************************
// Werte in Datei schreiben
//*************************
$datum = date("d.m.Y H:i");
$handle = fopen ('tmp/wind.txt', 'a');
fwrite ($handle, $datum.",".$windgeschwindigkeit.",".$windrichtung.",".$boe.",".$vcc."\n");
fclose ($handle);
?&gt;</pre>
<p>&nbsp;</p>
<h2>Hier nun das Programm für den ESP8266</h2>
<p><span style="color: #ff0000;"><strong>Update am 28.05.2018 mit Boe-Funktion und ohne eigene Webseite &amp; ohne JSON<br />
</strong></span></p>
<pre class="height-set:true height:700 toolbar:1 lang:c decode:true ">#include &lt;ESP8266WiFi.h&gt;
#include &lt;WiFiManager.h&gt;

#define DEBUG true

// WLAN Zugangsdaten
const char* ssid      = "&lt;ssid_eingeben&gt;";
const char* password  = "&lt;passwort_eingeben&gt;";
// Host wo Daten hingesendet werden soll
const char* datahost  = "&lt;ip_des_hosts&gt;";

unsigned long previousMillis = 0;
const long interval = 600000; // 600000ms = 10 Minuten Intervall

WiFiServer server(80);
ADC_MODE(ADC_VCC);

const byte DATAPIN=2;
volatile boolean TX20IncomingData = false;

unsigned char chk;
unsigned char sa,sb,sd,se;
unsigned int sc,sf,pin;
String tx20RawDataS = "";

int boe=0;
// Zaehlerfür Mittelwert
int counter=0;
long summe=0;
float mittelw=0;
String mittelw2string = "";

void isTX20Rising() {
  if (!TX20IncomingData) {
    TX20IncomingData = true;
  }
}


// Verbindung zum WLAN aufbauen
void verbinden() {
  if(DEBUG) {
    delay(10);
    Serial.println("");
    Serial.print(F("Verbinde zu WLAN-Netzwerk '"));
    Serial.print(ssid);
    Serial.print("' ");
  }
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }
 
  if(DEBUG) {
    Serial.println(F("-&gt; Verbunden"));  
    Serial.print(F("IP-Adresse: "));
    Serial.print(WiFi.localIP());
    Serial.println("");
  }
  //sendData();
}


void setup() {
  boe=0;
  pinMode(DATAPIN, INPUT);
  attachInterrupt(digitalPinToInterrupt(DATAPIN), isTX20Rising, RISING);
  Serial.begin(115200);
  delay(10);
  
  Serial.println();
  Serial.println();
  
  verbinden();
}


boolean readTX20() {
  int bitcount=0;
  
  sa=sb=sd=se=0;
  sc=0;sf=0;
  tx20RawDataS = "";

  for (bitcount=41; bitcount&gt;0; bitcount--) {
    pin = (digitalRead(DATAPIN));
    if (!pin) {
      tx20RawDataS += "1";      
    } else {
      tx20RawDataS += "0";      
    }
    if ((bitcount==41-4) || (bitcount==41-8) || (bitcount==41-20)  || (bitcount==41-24)  || (bitcount==41-28)) {
      tx20RawDataS += " ";
    }      
    if (bitcount &gt; 41-5){
      // start, inverted
      sa = (sa&lt;&lt;1)|(pin^1);
    } else
    if (bitcount &gt; 41-5-4){
      // wind dir, inverted
      sb = sb&gt;&gt;1 | ((pin^1)&lt;&lt;3);
    } else
    if (bitcount &gt; 41-5-4-12){
      // windspeed, inverted
      sc = sc&gt;&gt;1 | ((pin^1)&lt;&lt;11);
    } else
    if (bitcount &gt; 41-5-4-12-4){
      // checksum, inverted
      sd = sd&gt;&gt;1 | ((pin^1)&lt;&lt;3);
    } else 
    if (bitcount &gt; 41-5-4-12-4-4){
      // wind dir
      se = se&gt;&gt;1 | (pin&lt;&lt;3);
    } else {
      // windspeed
      sf = sf&gt;&gt;1 | (pin&lt;&lt;11);
    } 
        
    delayMicroseconds(1200);    
  }
  chk= ( sb + (sc&amp;0xf) + ((sc&gt;&gt;4)&amp;0xf) + ((sc&gt;&gt;8)&amp;0xf) );chk&amp;=0xf;
  delayMicroseconds(2000);
  TX20IncomingData = false;  

  if (sa==4 &amp;&amp; sb==se &amp;&amp; sc==sf &amp;&amp; sd==chk){      
    return true;
  } else {
    return false;      
  }
}


void loop() {

  if (TX20IncomingData) {

    char a[90];
    boolean validData = readTX20();
    Serial.println(tx20RawDataS);
    sprintf(a, "ID: %d\t%d\n", sa, B00100);
    Serial.write (a);
    sprintf(a, "Windrichtung: %d\t%d\n", sb, se);
    Serial.write (a);
    sprintf(a, "Windgeschwindigkeit: %d\t%d\n", sc, sf);
    Serial.write (a);

    // #################################################################
    // boe feststellen
    // Speichert den Maximalwert eines Messzyklus in der variablen boe
    // #################################################################
    if (sc&gt;boe){
      boe=sc;
    }
    if (boe&gt;1000){
      boe=0;
    }
    Serial.write("Windboe= ");
    Serial.println(boe);
    
    // 4095 im eeprom ??
    if (sc&gt;1000){
      sc=0;
    }
    
    // #####################################################
    // Zur Mittelwertberechnung durchschnittlichen 
    // Windgeschwindigkeit während des Messzyklus
    // 8 Messwerte pro Minute
    // #####################################################
    counter = counter +1;
    Serial.write("Messinterval= ");
    Serial.println(counter);
    summe=summe+sc;
    float mittelw = summe/counter;
    
    mittelw2string = String(mittelw);
    Serial.write("Summe aller Messwerte = ");
    Serial.println(summe);
    Serial.write("Mittelwert= ");
    Serial.println(mittelw2string);
      
    sprintf(a, "Pruefsumme: %d\t%d\n", sd, chk);
    Serial.write (a);
    if (validData){
      Serial.println("OK");
    } else {
      Serial.println("Fehler");
    }
    Serial.println("");

  }  

  unsigned long currentMillis = millis();   
  if(currentMillis - previousMillis &gt;= interval) 
  {
    previousMillis = currentMillis;
    sendData();
    counter=0;
    summe=0;
    boe=0;
  }
  
}


// Verbindung zu Host herstellen und Sensordaten übermitteln
void sendData() 
{
  Serial.println("");
  Serial.print(F("Verbinde zu '"));
  Serial.print(datahost);
  Serial.print("'");
   
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(datahost, httpPort)) {
    Serial.println(F(" Fehler beim Verbinden zum Host"));
    return;
  }

  // Batteriespannung auslesen
  float vcc = ESP.getVcc() / 1000.0;

 
  String url = "/umwelt/windsensor.php";
  url += "?windgeschwindigkeit=";
  url += mittelw2string;
  url += "&amp;windrichtung=";
  url += sb;
  url += "&amp;boe=";
  url += boe;
  url += "&amp;vcc=";
  url += vcc;

  Serial.println("");
  Serial.print("URL-Anfrage: ");
  Serial.println(url);
   
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + datahost + "\r\n" + 
               "Connection: close\r\n\r\n");
  unsigned long timeout = millis();
  while (client.available() == 0) {
    if (millis() - timeout &gt; 5000) {
      Serial.println("[Client Timeout]");
      client.stop();
      return;
    }
  }
   
  // Lese alle Daten aus der Antwort des Servers
  while(client.available()){
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }
  Serial.println("");
  Serial.print(F("Verbindung zu '"));
  Serial.print(datahost);
  Serial.println(F("' beendet."));
}</pre>
<p>&nbsp;</p>
<p><strong>Altes Script:</strong></p>
<pre class="height-set:true height:200 toolbar:1 lang:default decode:true">#include &lt;ESP8266WiFi.h&gt;
#include &lt;WiFiManager.h&gt;


// WLAN Zugangsdaten
const char* ssid      = "&lt;ssid&gt;";
const char* password  = "&lt;passwort&gt;";
// Host wo Daten hingesendet werden soll
const char* datahost  = "&lt;ip_des_hosts&gt;";


unsigned long previousMillis = 0;  
//const long interval = 30000;       // 30sek Interval beim Senden
const long interval = 60000;       // 1min Interval beim Senden


WiFiServer server(80);
ADC_MODE(ADC_VCC);

const byte DATAPIN=2;
volatile boolean TX20IncomingData = false;

unsigned char chk;
unsigned char sa,sb,sd,se;
unsigned int sc,sf, pin;
String tx20RawDataS = "";

int boe=0;
int counter=0;
long summe=0;
float mittelw=0;
String mittelw2string = "";


void isTX20Rising() {
  if (!TX20IncomingData) {
    TX20IncomingData = true;
  }  
}

void setup() {
  //boe=0;
  pinMode(DATAPIN, INPUT);
  attachInterrupt(digitalPinToInterrupt(DATAPIN), isTX20Rising, RISING);
  Serial.begin(115200);
  delay(10);
  
  Serial.println();
  Serial.println();

  Serial.println("Los geht es...");
  Serial.println();

  WiFiManager wifiManager;

  // AP deaktivieren
  WiFi.softAPdisconnect();
  WiFi.disconnect();
  WiFi.mode(WIFI_STA);
  delay(100);
  
  Serial.print("Verbindung zu... ");
  Serial.println(ssid);  
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi verbunden");
  server.begin();
  Serial.println("Server gestartet");
  Serial.println(WiFi.localIP());
}

boolean readTX20() {
    int bitcount=0;
    
    sa=sb=sd=se=0;
    sc=0;sf=0;
    tx20RawDataS = "";

    for (bitcount=41; bitcount&gt;0; bitcount--) {
      pin = (digitalRead(DATAPIN));
      if (!pin) {
        tx20RawDataS += "1";      
      } else {
        tx20RawDataS += "0";      
      }
      if ((bitcount==41-4) || (bitcount==41-8) || (bitcount==41-20)  || (bitcount==41-24)  || (bitcount==41-28)) {
        tx20RawDataS += " ";
      }      
      if (bitcount &gt; 41-5){
        // start, inverted
        sa = (sa&lt;&lt;1)|(pin^1);
      } else
      if (bitcount &gt; 41-5-4){
        // wind dir, inverted
        sb = sb&gt;&gt;1 | ((pin^1)&lt;&lt;3);
      } else
      if (bitcount &gt; 41-5-4-12){
        // windspeed, inverted
        sc = sc&gt;&gt;1 | ((pin^1)&lt;&lt;11);
      } else
      if (bitcount &gt; 41-5-4-12-4){
        // checksum, inverted
        sd = sd&gt;&gt;1 | ((pin^1)&lt;&lt;3);
      } else 
      if (bitcount &gt; 41-5-4-12-4-4){
        // wind dir
        se = se&gt;&gt;1 | (pin&lt;&lt;3);
      } else {
        // windspeed
        sf = sf&gt;&gt;1 | (pin&lt;&lt;11);
      } 
          
      delayMicroseconds(1200);    
    }
    chk= ( sb + (sc&amp;0xf) + ((sc&gt;&gt;4)&amp;0xf) + ((sc&gt;&gt;8)&amp;0xf) );chk&amp;=0xf;
    delayMicroseconds(2000);  // just in case
    TX20IncomingData = false;  

    if (sa==4 &amp;&amp; sb==se &amp;&amp; sc==sf &amp;&amp; sd==chk){      
      return true;
    } else {
      return false;      
    }
}

void loop() {
 
  if (TX20IncomingData) {
    char a[90];
    boolean validData = readTX20();
    Serial.println(tx20RawDataS);
    sprintf(a, "ID: %d\t%d\n", sa, B00100);
    Serial.write (a);
    sprintf(a, "Windrichtung: %d\t%d\n", sb, se);
    Serial.write (a);
    sprintf(a, "Windgeschwindigkeit: %d\t%d\n", sc, sf);
    Serial.write (a);
    
    // #################################################################
    // Boe feststellen
    // Speichert den Maximalwert eines Messzyklus in der variablen boe
    // #################################################################
    if (sc&gt;boe){
      boe=sc;
    }
    if (boe&gt;1000){
      boe=0;
    }
    Serial.write("Windboe= ");
    Serial.println(boe);
    
    // 4095 im eeprom ??
    if (sc&gt;1000){
      sc=0;
    }

    // ############################################################
    // Mittelwertberechnung 
    // Durchschnittliche Windgeschwindigkeit während des Messzyklus
    // 8 Messwerte pro Minute
    // ############################################################
    counter = counter +1;
    Serial.write("Messinterval= ");
    Serial.println(counter);
    summe=summe+sc;
    float mittelw = summe/counter;
    
    mittelw2string = String(mittelw);
    Serial.write("summe aller Messwerte = ");
    Serial.println(summe);
    Serial.write("Mittelwert= ");
    Serial.println(mittelw2string);


    sprintf(a, "Pruefsumme: %d\t%d\n", sd, chk);
    Serial.write (a);
    if (sd=chk){      
      Serial.println("OK");
    } else {
      Serial.println("Fehler");
      
    }
    Serial.println("");


    // Pruefen ob sich ein Client verbunden hat
    WiFiClient client = server.available();
    if (!client) {
      return;
    }
    
    // Warten bis der Client Daten sendet
    Serial.println("neuer Client");
    while(!client.available()){
      delay(1);
    }

    // Lese die erste Zeile der Anfrage
    String req = client.readStringUntil('\r');
    Serial.println(req);
    client.flush();

    // WIFI Signalstaerke auslesen
    long rssi = WiFi.RSSI();
    Serial.print("RSSI:");
    Serial.println(rssi);

    // Batteriespannung auslesen
    float vcc = ESP.getVcc() / 1000.0;


    // Webseite aufrufen um Sensordaten zu übergeben
    unsigned long currentMillis = millis();  
    if(currentMillis - previousMillis &gt;= interval &amp;&amp; sc &gt;= 5000) 
    {
      previousMillis = currentMillis;
      sendData();
    }

    
    // Anfrage beantworten
    int val;
    String content;
    if (req.indexOf("/json") != -1) {
      // Sensordaten als JSON zurueck liefern
      // http://&lt;url_zum_esp&gt;/json
      Serial.println("JSON");
      content = "HTTP/1.1 200 OK\r\nContent-Type: application/json\r\n\r\n";
      content += "{\"Windgeschwindigkeit\":";
      content += sc;
      content += ",\"Mittelwert\":";
      content += mittelw2string;
      content += ",\"Boe\":";
      content += boe;
      content += ",\"Windrichtung\":";
      content += sb;
      content += "}\n";
    } else {
      // Sensordaten als Webseite anzeigen
      Serial.println("HTML");
      content = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n&lt;!DOCTYPE HTML&gt;\r\n&lt;html&gt;&lt;head&gt;&lt;title&gt;Windsensor&lt;/title&gt;&lt;/head&gt;&lt;body style=\"font-family:verdana;\"&gt;\r\n";
      content += "&lt;p style='font-size:18px;font-weight:bold;'&gt;Windsensor&lt;/p&gt;&lt;br&gt;";
      content += "&lt;table&gt;";
      content += "&lt;tr&gt;&lt;td&gt;Windgeschwindigkeit (aktuell)&lt;/td&gt;&lt;td&gt;";
      content += sc;
      content += "&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Windgeschwindigkeit (Mittelwert)&lt;/td&gt;&lt;td&gt;";
      content += mittelw2string;
      content += "&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Windgeschwindigkeit (Boe)&lt;/td&gt;&lt;td&gt;";
      content += boe;
      content += "&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Windrichtung&lt;/td&gt;&lt;td&gt;";
      content += sb;
      content += "&lt;/td&gt;&lt;/tr&gt;";
      content += "&lt;tr&gt;&lt;td&gt;&lt;br&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;";
      content += "&lt;tr&gt;&lt;td&gt;WIFI-Signal&lt;/td&gt;&lt;td&gt;";
      content += rssi;
      content += " dBm&lt;/td&gt;";
      content += "&lt;tr&gt;&lt;td&gt;Signal Qualit&amp;auml;t&lt;/td&gt;&lt;td&gt;";
      content += 2 * (rssi + 100);
      content += "%&lt;/td&gt;&lt;/tr&gt;";
      content += "&lt;tr&gt;&lt;td&gt;Batteriespannung&lt;/td&gt;&lt;td&gt;";
      content += vcc;
      content += " V&lt;/td&gt;&lt;/tr&gt;";
      content += "&lt;/table&gt;";
      content += "&lt;/body&gt;&lt;/html&gt;\n";
    }
   
    // Senden der Antwort zum Webserver
    client.print(content);
    delay(1);
    Serial.println("Client Verbindung beendet");
    
  }
  
}

// Verbindung zu Server herstellen und Sensordaten übermitteln
void sendData() 
{
  
  if ( WiFi.status() != WL_CONNECTED ) {
    Serial.println ("kein connect –&gt; reconnect");
  
    Serial.print("Verbinden zu ");
    Serial.println(ssid);
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
      WiFi.hostname("ESP-wind");
      delay(500);
      Serial.print(".");
    }
  }


  
  Serial.println("");
  Serial.print(F("Verbinde zu '"));
  Serial.print(datahost);
  Serial.print("'");
   
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(datahost, httpPort)) {
    Serial.println(F(" Fehler beim verbinden zum Host"));
    return;
  }
 
  String url = "/umwelt/windsensor.php";
  url += "?windgeschwindigkeit=";
  url += sc;
  url += "&amp;windrichtung=";
  url += sb;
 
  Serial.print("URL-Anfrage: ");
  Serial.println(url);
   
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + datahost + "\r\n" + 
               "Connection: close\r\n\r\n");
  unsigned long timeout = millis();
  while (client.available() == 0) {
    if (millis() - timeout &gt; 5000) {
      Serial.println("[Client Timeout]");
      client.stop();
      return;
    }
  }
   
  // Read all the lines of the reply from server and print them to Serial
  while(client.available()){
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }
  Serial.println("");
  Serial.print(F("Verbindung zu '"));
  Serial.print(datahost);
  Serial.println(F("' beendet."));
}</pre>
<p>&nbsp;</p>
<p>Die vom Sensor ausgelesenen Werte müssen noch &#8222;konvertiert&#8220; werden. Auf der Seite von <a href="https://www.john.geek.nz/2011/07/la-crosse-tx20-anemometer-communication-protocol/" target="_blank" rel="noopener">John</a> ist eine entsprechende Tabelle zur Umwandlung der 15 nummerischen Werte für die Windrichtung in deren &#8222;Himmelsrichtungen&#8220;, als auch die Einheit der Windgeschwindigkeit zu finden.</p>
<h2>Aufbau</h2>
<p>Anstatt einer Freiluftverdrahtung habe ich diesmal eine kleine Platine zur Aufnahme des ESP, einer Steckerleiste für den FTDI (oder für den Batteriehalter) sowie den Anschluss des Windsensors gelötet. Aktuell hängt es noch an der &#8222;langen Leine&#8220; durchs geschlossene Fenster, später soll die Platine aber in ein Kistchen in die Nähe des Sensors. Der Jumper setzt den GPIO_0 zum programmieren des ESP auf Masse. WICHTIG: Das FTDI muss 3,3V unterstützen da der ESP keine 5V verträgt.</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2017/04/20170423_115317.jpg"><img loading="lazy" decoding="async" class="alignnone size-large wp-image-1397" src="http://blog.bubux.de/wp-content/uploads/2017/04/20170423_115317-1024x576.jpg" alt="" width="768" height="432" srcset="https://www.bubuxblog.de/wp-content/uploads/2017/04/20170423_115317-1024x576.jpg 1024w, https://www.bubuxblog.de/wp-content/uploads/2017/04/20170423_115317-300x169.jpg 300w, https://www.bubuxblog.de/wp-content/uploads/2017/04/20170423_115317-768x432.jpg 768w" sizes="auto, (max-width: 768px) 100vw, 768px" /></a></p>
<p>Das Ganze dann nochmal von unten&#8230;</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2017/04/20170423_115331.jpg"><img loading="lazy" decoding="async" class="alignnone size-large wp-image-1396" src="http://blog.bubux.de/wp-content/uploads/2017/04/20170423_115331-1024x576.jpg" alt="" width="768" height="432" srcset="https://www.bubuxblog.de/wp-content/uploads/2017/04/20170423_115331-1024x576.jpg 1024w, https://www.bubuxblog.de/wp-content/uploads/2017/04/20170423_115331-300x169.jpg 300w, https://www.bubuxblog.de/wp-content/uploads/2017/04/20170423_115331-768x432.jpg 768w" sizes="auto, (max-width: 768px) 100vw, 768px" /></a></p>
<p>&#8230;und der schematische Aufbau zum Anschluss des FTDI an den ESP</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2017/04/esp_ftdi.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1402" src="http://blog.bubux.de/wp-content/uploads/2017/04/esp_ftdi.png" alt="" width="640" height="555" srcset="https://www.bubuxblog.de/wp-content/uploads/2017/04/esp_ftdi.png 640w, https://www.bubuxblog.de/wp-content/uploads/2017/04/esp_ftdi-300x260.png 300w" sizes="auto, (max-width: 640px) 100vw, 640px" /></a></p>
<p>Der Anschluss des Windsensors ist wie folgt (den ursprünglichen Western-Stecker am Windsensor habe ich abgeschnitten):</p>
<p>
<table id="tablepress-3" class="tablepress tablepress-id-3">
<thead>
<tr class="row-1">
	<th class="column-1">Anschluss Windsensor</th><td class="column-2"></td>
</tr>
</thead>
<tbody class="row-striping row-hover">
<tr class="row-2">
	<td class="column-1">Gelb</td><td class="column-2">Masse (GND)</td>
</tr>
<tr class="row-3">
	<td class="column-1">Grün</td><td class="column-2">Masse (DTR)</td>
</tr>
<tr class="row-4">
	<td class="column-1">Rot</td><td class="column-2">3,3V (Vcc)</td>
</tr>
<tr class="row-5">
	<td class="column-1">Schwarz</td><td class="column-2">GPIO_2 (TxD)</td>
</tr>
</tbody>
</table>
<!-- #tablepress-3 from cache --></p>
<p>Ist der grüne Anschluss (DTR) auf Masse gelegt, sendet der Sensor alle zwei Sekunden Daten. Das kann bzgl. des Stromverbrauchs und dem Ansatz unter Punkt 3) evtl. noch auf einen GPIO des ESP gelegt werden.</p>
<h2>Wofür das Ganze?</h2>
<p>Weil es Spaß gemacht hat! Einen wirklichen Einsatz für den Windsensor habe ich noch nicht. Eigentlich war das nur die Gelegenheit, etwas mit dem ESP experimentieren zu können. Vielleicht steuere ich damit später mal die aktuell noch nicht vorhandene Markise oder ich weiß wie stark der Wind war, wenn nochmal unser Sonnenschirm von einer Windhose zerstückelt wird.</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2017/05/20140810_192933.jpg"><img loading="lazy" decoding="async" class="alignnone wp-image-1576 size-thumbnail" src="http://blog.bubux.de/wp-content/uploads/2017/05/20140810_192933-150x150.jpg" alt="" width="150" height="150"></a></p>
<h2>Probleme</h2>
<ul>
<li>Wenn die Betriebsspannung sinkt bzw. nicht genug Strom geliefert wird (z.B. beim Betrieb an Batterien), sind die Messdaten nicht korrekt (Prüfsumme falsch)</li>
</ul>
<h2>Todo</h2>
<ul>
<li>Sensor schlafen legen</li>
<li>Mit Batterieversorgung experimentieren</li>
<li>Update mittels <a href="https://esp8266.github.io/Arduino/versions/2.0.0/doc/ota_updates/ota_updates.html" target="_blank" rel="noopener noreferrer">OTA</a></li>
<li>WLAN-Konfig über Access Point (AP), dann Station (STA) einrichten</li>
<li>Konfiguration des URL zur aktiven Übergabe der Daten über Webseite</li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bubuxblog.de/windsensor-tx20-mit-esp8266/feed/</wfw:commentRss>
			<slash:comments>53</slash:comments>
		
		
			</item>
		<item>
		<title>Odroid C2 &#8211; Update 1 (Gas- und Wasserzähler)</title>
		<link>https://www.bubuxblog.de/odroid-c2-update-1-gas-und-wasserzaehler/</link>
					<comments>https://www.bubuxblog.de/odroid-c2-update-1-gas-und-wasserzaehler/#comments</comments>
		
		<dc:creator><![CDATA[diefenbecker]]></dc:creator>
		<pubDate>Wed, 25 Jan 2017 16:02:06 +0000</pubDate>
				<category><![CDATA[Heimautomatisierung]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Odroid]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Hausautomatisierung]]></category>
		<category><![CDATA[Homeautomation]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://blog.bubux.de/?p=1299</guid>

					<description><![CDATA[Ich habe zwei Raspberry Pi´s laufen. Einer &#8222;spricht&#8220; mit der Heizung, ließt den Stromzähler aus, beherbergt die MySQL-Datenbanken und präsentiert die Daten auf einer Webseite. Der zweite Raspi ließt den Wasserzähler aus, zählt die Umdrehungen des Gaszählers, beherbergt den Werbeblocker Pi-Hole und ist Videorecorder mit tvheadend im Backend. Einer der beiden Raspis soll nun dem [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Ich habe zwei Raspberry Pi´s laufen. Einer &#8222;spricht&#8220; mit der <a href="http://blog.bubux.de/viessmann-heizung-auslesen/" target="_blank">Heizung</a>, ließt den <a href="http://blog.bubux.de/raspberry-pi-ehz-auslesen/" target="_blank">Stromzähler</a> aus, beherbergt die MySQL-Datenbanken und präsentiert die Daten auf einer Webseite. Der zweite Raspi ließt den <a href="http://blog.bubux.de/m-bus-wasserzaehler/" target="_blank">Wasserzähler</a> aus, zählt die Umdrehungen des <a href="http://blog.bubux.de/gaszaehler-auslesen/" target="_blank">Gaszählers</a>, beherbergt den Werbeblocker <a href="http://blog.bubux.de/werbung-blockieren-mit-pi-hole/" target="_blank">Pi-Hole</a> und ist Videorecorder mit <a href="https://tvheadend.org/" target="_blank">tvheadend</a> im Backend.</p>
<p>Einer der beiden Raspis soll nun dem neuen Odroid weichen. Dabei entschied ich mich für den zweiten Raspi, da die ganzen PHP-Scripte erstmal nicht anzupassen sind. Das scheint mir der meiste Aufwand zu werden.<br />
<span id="more-1299"></span></p>
<h2>Pi-Hole umziehen</h2>
<p>Auch wenn &#8222;Pi&#8220; im Namen steckt, läuft die Installation mit dem curl-Script auf den Odroid genauso problemlos wie auf dem Raspberry. Daher ist der <a href="http://blog.bubux.de/werbung-blockieren-mit-pi-hole/" target="_blank">Artikel über Pi-Hole</a> auch für den Odroid soweit noch aktuell. Eine positive Anmerkung ist, das man neben den bereits vorkonfigurierten DNS-Servern aus der Installationsroutine, in der aktuellen Version von Pi-Hole jetzt auch die eigene Fritzbox als DNS in den Einstellungen der Pi-Hole-Oberfläche bequem eingeben kann. Damit entfällt die manuelle Anpassung in der Datei <em><span class="crayon-o">/</span><span class="crayon-v">etc</span><span class="crayon-o">/</span><span class="crayon-v">dnsmasq</span><span class="crayon-sy">.</span><span class="crayon-v">d</span><span class="crayon-o">/</span><span class="crayon-cn">01</span><span class="crayon-o">&#8211;</span><span class="crayon-v">pihole</span><span class="crayon-sy">.</span></em><span class="crayon-v"><em>conf</em>.</span></p>
<p><span class="crayon-v">Beim Aufbau der Pi-Hole-Oberfläche ist der Odroid auch spürbar schneller als der Raspberry Pi. Im Netz merkt man keinen Unterschied.<br />
</span></p>
<p><figure id="attachment_1311" aria-describedby="caption-attachment-1311" style="width: 300px" class="wp-caption alignnone"><a href="http://blog.bubux.de/wp-content/uploads/2017/01/pi_hole_dns.png"><img loading="lazy" decoding="async" class="wp-image-1311 size-medium" src="http://blog.bubux.de/wp-content/uploads/2017/01/pi_hole_dns-300x183.png" alt="DNS-EInstellungen Pi-Hole" height="183" width="300" srcset="https://www.bubuxblog.de/wp-content/uploads/2017/01/pi_hole_dns-300x183.png 300w, https://www.bubuxblog.de/wp-content/uploads/2017/01/pi_hole_dns.png 470w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-1311" class="wp-caption-text">DNS-Einstellungen Pi-Hole</figcaption></figure></p>
<h2>&nbsp;</h2>
<h2>Das Script für den Gaszählers umziehen</h2>
<p>Beim Gaszähler nutze ich ein <a href="http://blog.bubux.de/gaszaehler-auslesen/" target="_blank">Python-Script</a>, welches die Schließimpulse eines Reed-Kontaktes mitzählt. Also einfach mal Pythonscript kopiert, gestartet und &#8230; Fehlermeldungen angeschaut! Das Python auf dem Odroid hat die von mir genutzte RPi.GIOP-Klasse angemeckert was auch verständlich ist. Auf dem Odroid muss das gegen WiringPi2 getauscht werden.</p>
<p>1. WiringPi 2 für Python installieren</p>
<pre class="code">git clone https://github.com/hardkernel/WiringPi2-Python.git
cd WiringPi2-Python
git submodule init
git submodule update</pre>
<p>2. Bauen &amp; Installieren</p>
<pre class="code">sudo python setup.py install</pre>
<p>Das angepaßte Script zum Auslesen des Gaszählers schaut dann für den Odroid wie folgt aus:</p>
<p>[cc lang=&#8220;python&#8220; tab_size=&#8220;2&#8243; lines=&#8220;50&#8243;]<br />
import wiringpi2 as wpi<br />
import time<br />
import MySQLdb<br />
import sys</p>
<p>wpi.wiringPiSetupPhys()<br />
# GPIO definieren<br />
REED_gas = 21<br />
# definierten GPIO als Eingang setzen<br />
# 0 output, 1 input, 2 PWM mode<br />
wpi.pinMode(REED_gas,0)</p>
<p>lt = time.localtime()<br />
dateiname=&#8220;gaszaehler_&#8220;+time.strftime(&#8222;%Y%m%d&#8220;,lt) +&#8220;.log&#8220;</p>
<p>logger = open(dateiname,&#8220;w&#8220;)<br />
logger.write(&#8222;gestartet&#8230;&#8220;+&#8220;\n&#8220;)<br />
logger.close()</p>
<p>status_alt=1<br />
while True:<br />
    try:<br />
        dateiname=&#8220;gaszaehler_&#8220;+time.strftime(&#8222;%Y%m%d&#8220;,lt) +&#8220;.log&#8220;<br />
        logger = open(dateiname,&#8220;a&#8220;)<br />
        status_aktuell = wpi.digitalRead(REED_gas)<br />
        # KONTAKT -&gt; geoeffnet<br />
        if status_aktuell == 1:<br />
            #logger.write(&#8222;Kontakt offen&#8220;+&#8220;\n&#8220;)<br />
            status_alt=wpi.digitalRead(REED_gas)<br />
            # KONTAKT -&gt; geschlossen<br />
        elif status_aktuell==0:<br />
            logger.write(&#8222;Kontakt geschlossen&#8220;+&#8220;\n&#8220;)<br />
            if status_alt!=status_aktuell:<br />
                logger.write(&#8222;Impuls&#8220;+&#8220;\n&#8220; )<br />
                status_alt=wpi.digitalRead(REED_gas)<br />
                # Datenbankverbindung<br />
                db = MySQLdb.connect(host=&#8220;&#8220;, user=&#8220;&#8220;, passwd=&#8220;&#8220;, db=&#8220;&#8220;)<br />
                # Impuls in Datenbank eintragen<br />
                cursor = db.cursor()<br />
                cursor.execute(&#8222;&#8220;&#8220;INSERT INTO gaszaehler (timestamp,zaehlerstand) VALUES (CURRENT_TIMESTAMP,1)&#8220;&#8220;&#8220;)<br />
                db.commit()<br />
                cursor.close()<br />
                logger.close()<br />
        except:<br />
            e = sys.exc_info()[0]<br />
            dateiname=&#8220;gaszaehler_&#8220;+time.strftime(&#8222;%Y%m%d&#8220;,lt) +&#8220;.log&#8220;<br />
            logger = open(dateiname,&#8220;a&#8220;)<br />
            logger.write(&#8222;Es ist ein Fehler aufgetreten: %s&#8220; % e)<br />
            logger.close()<br />
            time.sleep(1)<br />
[/cc]</p>
<p>Neben WiringPi habe ich auch die Verbindung zur DB in die while-Schleife gepackt. Vorher wurde die Verbindung einmal am Anfang hergestellt und in der Schleife nur noch die Daten per Insert eingetragen. Es zeigt sich aber, das der Odroid oder die Datenbank die noch auf dem anderen Pi läuft die Verbindung nach einer Zeit kappt und es zu Fehlern kam. Auch das Logging habe ich etwas abgeändert, da während das while lief nur Blockweise wenn gerade Zeit war in die Datei geschrieben wurde. Das störte bei der Fehlersuche.</p>
<p>Hier auch nochmal die Pinbelegung des Odroid C2 und deren Zusammenhang mit den PinModes von WiringPi2:</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2017/01/odroid_c2_gpio.png"><img loading="lazy" decoding="async" class="alignnone size-large wp-image-1309" src="http://blog.bubux.de/wp-content/uploads/2017/01/odroid_c2_gpio-1024x724.png" alt="" height="543" width="768" srcset="https://www.bubuxblog.de/wp-content/uploads/2017/01/odroid_c2_gpio-1024x724.png 1024w, https://www.bubuxblog.de/wp-content/uploads/2017/01/odroid_c2_gpio-300x212.png 300w, https://www.bubuxblog.de/wp-content/uploads/2017/01/odroid_c2_gpio-768x543.png 768w, https://www.bubuxblog.de/wp-content/uploads/2017/01/odroid_c2_gpio.png 1246w" sizes="auto, (max-width: 768px) 100vw, 768px" /></a></p>
<p>Das war es schon für die Anpassungen des Scriptes für den Gaszähler. Bei diesem Script gibt es keine Performanceunterschiede im Vergleich wenn es auf dem Raspi lief.</p>
<p></p>
<h2>Das Script für den Wasserzähler umziehen</h2>
<p>Als nächstes kam der <a href="http://blog.bubux.de/m-bus-wasserzaehler/" target="_blank">Wasserzähler mit M-BUS</a> an die Reihe. Hier habe ich mir die Quellen in der Version 0.8.0 von <a href="http://www.rscada.se/libmbus/" target="_blank">rScada</a> gezogen und anschliessend versucht diese zu bauen. Dies führte schon beim<em> ./configure</em> zu Fehlermeldungen. Die Quellen waren zu alt und konnten die Prozessorarchitektur des Odroid (ARM) nicht ermitteln. Um das zu beheben benötigt man aktuelle Versionen der Dateien<em> config.guess</em> und <em>config.sub</em>. Diese sind unter den beiden folgenden Links zu finden.</p>
<p><a href="http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD" target="_blank">http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD</a></p>
<p><a href="http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD" target="_blank">http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD</a></p>
<p>Die beiden Dateien einfach gegen die bereit vorhanden ersetzen und<em> ./configure</em> läuft durch. <em>make</em> und <em>make install</em> laufen dann auch fehlerfrei durch wie im <a href="http://blog.bubux.de/m-bus-wasserzaehler/" target="_blank">Artikel </a>beschrieben.</p>
<p>Die Pins zum zum Anschluss des M-BUS-Master (Tx &amp; Rx) sind gleich belegt wie auf dem Raspberry.</p>
<p>Die Scripte von rScada funktionieren identisch wie vorher. Mit<em> mbus-serial-scan</em> wurde der Wasserzähler auf fehlerfrei erkannt. Leider scheiterte anschliessend der Versuch mit <em><span class="crayon-v">mbus</span><span class="crayon-o">&#8211;</span><span class="crayon-v">serial</span><span class="crayon-o">&#8211;</span><span class="crayon-v">request</span><span class="crayon-o">&#8211;</span><span class="crayon-v">data</span></em> die Daten aus dem vorher erkannten Zähler auszulesen. Nahc den ersten ausgelesenen Bytes verabschiedete sich <em><span class="crayon-v">mbus</span><span class="crayon-o">&#8211;</span><span class="crayon-v">serial</span><span class="crayon-o">&#8211;</span><span class="crayon-v">request</span><span class="crayon-o">&#8211;</span><span class="crayon-v">data</span></em> mit einem Segmentation Fault. In den Systemlogs war nicht wirklich rauszufinden warum dem so ist. Nach ein kurzer Analyse dachte ich ein Versuch mit der vorherigen Version 0.7.0 kann nicht schaden. Damit tat es dann auch fehlerfrei. Was nun genau das Problem des Segfaults war, weiß ich nicht. Die Unterschiede zur Version 0.8.0 sind auch anscheinend nicht relevant da alles wie gewünscht funktioniert.</p>
<p>Soviel zu den ersten beiden &#8222;Umzügen&#8220;. Fehlen noch der DVB-S Empfänger mit tvheadend und dann geht´s schon an die Dinge die aktuell noch auf dem anderen Raspberry Pi laufen.</p>
<p>&nbsp;</p>
<p>Gruß</p>
<p>Chris</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bubuxblog.de/odroid-c2-update-1-gas-und-wasserzaehler/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Odroid C2 (vs Raspberry PI 2)</title>
		<link>https://www.bubuxblog.de/odroid-c2-vs-raspberry-pi-2/</link>
					<comments>https://www.bubuxblog.de/odroid-c2-vs-raspberry-pi-2/#comments</comments>
		
		<dc:creator><![CDATA[diefenbecker]]></dc:creator>
		<pubDate>Mon, 02 Jan 2017 11:28:44 +0000</pubDate>
				<category><![CDATA[Heimautomatisierung]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Odroid]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Hausautomatisierung]]></category>
		<category><![CDATA[MariaDB]]></category>
		<category><![CDATA[MySQL]]></category>
		<guid isPermaLink="false">http://blog.bubux.de/?p=1257</guid>

					<description><![CDATA[Zuerst einmal noch ein frohes neues Jahr an alle! Die Tage habe ich ein neues Spielzeug bekommen (nein, nicht zu Weihnachten). Es ist ein Odroid C2 mit eMMC-Speicherkarte. Den gab es im Komplettpaket mit Odroid, eMMC, Gehäuse und Netzteil für 70€. Der Odroid besitzt einen Quad-Core mit 1,5 GHz, 2 GB RAM und ein Gigabit-LAN [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Zuerst einmal noch ein frohes neues Jahr an alle!</p>
<p>Die Tage habe ich ein neues Spielzeug bekommen (nein, nicht zu Weihnachten). Es ist ein Odroid C2 mit eMMC-Speicherkarte. Den gab es im Komplettpaket mit Odroid, eMMC, Gehäuse und Netzteil für 70€. Der Odroid besitzt einen Quad-Core mit 1,5 GHz, 2 GB RAM und ein Gigabit-LAN welches er sich, im Gegensatz zur Raspberry-Architektur, nicht mit den USB-Ports teilen muss. Somit sollte die Gesamtleistung in allen Belangen deutlich höher ausfallen als die des Raspberry 2 oder 3. Auf der eMMC war ein Ubuntu 16.04 LTS mit Mate Desktop vorinstalliert.</p>
<p><figure id="attachment_1259" aria-describedby="caption-attachment-1259" style="width: 768px" class="wp-caption alignnone"><a href="http://blog.bubux.de/wp-content/uploads/2016/12/IMG_9477.jpg"><img loading="lazy" decoding="async" class="wp-image-1259 size-large" src="http://blog.bubux.de/wp-content/uploads/2016/12/IMG_9477-e1482917785552-1024x739.jpg" alt="Odroid Oberseite" width="768" height="554" srcset="https://www.bubuxblog.de/wp-content/uploads/2016/12/IMG_9477-e1482917785552-1024x739.jpg 1024w, https://www.bubuxblog.de/wp-content/uploads/2016/12/IMG_9477-e1482917785552-300x216.jpg 300w, https://www.bubuxblog.de/wp-content/uploads/2016/12/IMG_9477-e1482917785552-768x554.jpg 768w" sizes="auto, (max-width: 768px) 100vw, 768px" /></a><figcaption id="caption-attachment-1259" class="wp-caption-text">Odroid Oberseite</figcaption></figure></p>
<p><span id="more-1257"></span></p>
<h2>Schneller Test versus schlampige Programmierung</h2>
<p>Ein erster schneller Test sollte die Geschwindigkeitsmessung bei der Anzeige meiner Intranet-Seite für die mitgeloggten Daten (Temperaturen, Gasverbrauch, Stromverbrauch, &#8230;) sein. Die Tabellen sind in den letzten 3 Jahren teilweise doch recht groß geworden und der Raspberry 2 tut sich mit der Anzeige der ein oder anderen Auswertung merklich schwer. Zum Beispiel dauert die Abfrage des wöchentlichen Wasserverbrauches rund 38 Sekunden&#8230;nichts für ungeduldige Gemüter.</p>
<p><figure id="attachment_1261" aria-describedby="caption-attachment-1261" style="width: 300px" class="wp-caption alignleft"><a href="http://blog.bubux.de/wp-content/uploads/2016/12/IMG_9485-e1482920354556.jpg"><img loading="lazy" decoding="async" class="wp-image-1261 size-medium" src="http://blog.bubux.de/wp-content/uploads/2016/12/IMG_9485-e1482920354556-300x216.jpg" alt="Odoid Unterseite" width="300" height="216" srcset="https://www.bubuxblog.de/wp-content/uploads/2016/12/IMG_9485-e1482920354556-300x216.jpg 300w, https://www.bubuxblog.de/wp-content/uploads/2016/12/IMG_9485-e1482920354556-768x554.jpg 768w, https://www.bubuxblog.de/wp-content/uploads/2016/12/IMG_9485-e1482920354556-1024x738.jpg 1024w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-1261" class="wp-caption-text">Odroid Unterseite mit der eMMC-Karte (roter Aufkleber)</figcaption></figure></p>
<p>Also MySQL, Apache und PHP installiert. Dabei ließ sich MySQL nach der Installation nicht starten. Da scheint es einen bekannten <a href="https://bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1573279" target="_blank">Fehler</a> zu geben. Ich habe mich dann einen halben Tag mit Versuchen rumgeschlagen es ans laufen zu bekommen. Letztendlich habe ich mich dann geschlagen gegeben und MariaDB installiert. MariaDB funktionierte auf Anhieb inkl. des Datenimportes der Daten aus der MySQL-Datenbank des Raspberrys. Die Installation von Apache und PHP 7 funktionierte auf Anhieb. Dann die PHP-Scripte auf den Odroid kopiert, einen Browser geöffnet und &#8230; nichts gesehen außer einer weißen Seite. Nach kurzem Blick in das Apache-Log dann die Ernüchterung: Einfach die Scripte kopieren ist nicht, da ich in der Vergangenheit schlampig programmiert hatte. So unterstützt PHP 7 unter anderem nur noch M<em>ySQLi</em> (<a href="http://php.net/manual/de/book.mysqli.php" target="_blank"><em>i</em> wie improved</a>). So hatte ich mir das nicht vorgestellt, aber es ist ein guter Anlass um den kompletten Code zu überarbeiten. Und ein Downgrade auf PHP 5.x ist wohl auch <a href="https://www.heise.de/newsticker/meldung/Ende-des-aktiven-Supports-fuer-PHP-5-3583353.html" target="_blank">keine Alternative mehr</a>.</p>
<h2>Code-Korrektur</h2>
<p>Um trotzdem die Geschwindigkeit testen zu können, habe ich die Seite zur Anzeige des wöchentlichen Wasserverbrauches PHP 7-tauglich gemacht. In dieser Seite wird eine kleine Datenbanktabelle mit ~ 700 Zeilen ausgelesen (den Wasserzähler habe ich noch nicht so lange). Die beiden SQL-Statements die im Script verwendet werden sehen folgendermaßen aus:</p>
<p>Folgendes Select liest den Gesamtzählerstand aus:</p>
<pre class="">SELECT zaehlerstand FROM wasserzaehler</pre>
<p>Das etwas länglichere Select liest den Verbrauch der letzten 7 Tage, gruppiert nach Wochentag, aus:</p>
<pre class="">SELECT
CASE DATE_FORMAT(wz1.timestamp,'%w')
WHEN 0 THEN 'Sonntag'
WHEN 1 THEN 'Montag'
WHEN 2 THEN 'Dienstag'
WHEN 3 THEN 'Mittwoch'
WHEN 4 THEN 'Donnerstag'
WHEN 5 THEN 'Freitag'
WHEN 6 THEN 'Samstag'
ELSE 'fehler' END,
wz1.zaehlerstand - IFNULL(wz2.zaehlerstand, 0) AS verbrauch
FROM wasserzaehler wz1
LEFT JOIN wasserzaehler wz2
ON wz2.timestamp = (
SELECT MAX(timestamp) FROM wasserzaehler wz3 WHERE wz3.timestamp &lt; wz1.timestamp
)
WHERE DATE(wz1.timestamp) &gt;= DATE_SUB(NOW(),INTERVAL 7 DAY) GROUP BY day(wz1.timestamp)
ORDER BY wz1.timestamp";</pre>
<p>Das Ergebnis ist eine Übersicht des Gesamtverbrauch und des Wasserverbrauches der letzten 7 Tage:</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2016/12/wasserzähler.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1263" src="http://blog.bubux.de/wp-content/uploads/2016/12/wasserzähler.png" alt="" width="818" height="462" srcset="https://www.bubuxblog.de/wp-content/uploads/2016/12/wasserzähler.png 818w, https://www.bubuxblog.de/wp-content/uploads/2016/12/wasserzähler-300x169.png 300w, https://www.bubuxblog.de/wp-content/uploads/2016/12/wasserzähler-768x434.png 768w" sizes="auto, (max-width: 818px) 100vw, 818px" /></a></p>
<h2>Warpgeschwindigkeit</h2>
<p>Der Raspberry 2 benötigt bis zur Anzeige dieser Seite geschlagene 38 Sekunden. Der Odroid etwas mehr als 1 Sekunde! Diesen eklatanten Geschwindigkeitsunterschied hätte ich nicht erwartet. Allerdings weiß ich auch nicht, was den Raspberry bei der Auswertung dieser kleinen Tabelle genau überfordert. Es ist jedenfalls mal ein dicker Pluspunkt für den Odroid. Mal sehen wie er sich mit den anderen Abfragen schlägt sobald ich die restlichen PHP-Scripte angepasst habe.</p>
<p>Das wird allerdings neben der PHP-Problematik noch ein steiniger Weg werden, da ich die komplette <a href="http://blog.bubux.de/raspberry-pi-heimautomatisierung-mit-coc-und-fhem/" target="_blank">FHEM-Implementierung</a> irgendwie vom Raspberry auf den Odroid bekommen muss. Problem ist dabei wahrscheinlich weniger FHEM selber, sondern die COC-Hardware die auf den GPIOs des Raspberry sitzt und die GPIOs des Raspberry nicht kompatibel mit denen des Odroid sind. Dazu aber mehr, wenn es soweit ist.</p>
<p>Nebenbei habe ich bei dieser Gelegenheit auch noch kurz den Leistungsmesser dazwischen gehangen. Im Leerlauf (die Abfrage des Wasserzählers kann man nicht als mehr bezeichnen) konsumiert der Odroid etwa 3 Watt.</p>
<p>&nbsp;</p>
<p>Gruß Chris</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bubuxblog.de/odroid-c2-vs-raspberry-pi-2/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Gaszähler auslesen &#8211; Darstellung der Daten</title>
		<link>https://www.bubuxblog.de/gaszaehler/</link>
					<comments>https://www.bubuxblog.de/gaszaehler/#respond</comments>
		
		<dc:creator><![CDATA[diefenbecker]]></dc:creator>
		<pubDate>Tue, 19 Jan 2016 20:46:35 +0000</pubDate>
				<category><![CDATA[Heimautomatisierung]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Snippet]]></category>
		<category><![CDATA[Gaszähler]]></category>
		<category><![CDATA[Hausautomatisierung]]></category>
		<category><![CDATA[Homeautomation]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">http://blog.bubux.de/?p=1035</guid>

					<description><![CDATA[Jedes Jahr im Januar ist es wieder soweit &#8211; die Daten des Gaszähler müssen an den Lieferanten übermittelt werden. Dabei ist mir aufgefallen, das meine Darstellung der Daten aus der MySQL-Datenbank noch verbesserungswürdig sind. So hatte ich z.B. nur den Verbrauch der letzten 7 Tage wie im Artikel http://blog.bubux.de/gaszaehler-auslesen/ beschrieben ausgewertet. Da fehlt doch noch [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Jedes Jahr im Januar ist es wieder soweit &#8211; die Daten des Gaszähler müssen an den Lieferanten übermittelt werden. Dabei ist mir aufgefallen, das meine Darstellung der Daten aus der MySQL-Datenbank noch verbesserungswürdig sind. So hatte ich z.B. nur den Verbrauch der letzten 7 Tage wie im Artikel <a href="http://blog.bubux.de/gaszaehler-auslesen/" target="_blank">http://blog.bubux.de/gaszaehler-auslesen/</a> beschrieben ausgewertet. Da fehlt doch noch eine monatliche und jährliche Übersicht!</p>
<p>Nochmal zur Erinnerung: Ich speichere jede gezählte Umdrehung des Gaszählers als separate Zeile in einer MySQL-Datenbank.</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2016/01/gaszaehler_mysql.png" rel="attachment wp-att-1042"><img loading="lazy" decoding="async" class="alignnone wp-image-1042 size-full" src="http://blog.bubux.de/wp-content/uploads/2016/01/gaszaehler_mysql.png" alt="Gaszaehler mySQL Datenbank" width="625" height="161" srcset="https://www.bubuxblog.de/wp-content/uploads/2016/01/gaszaehler_mysql.png 625w, https://www.bubuxblog.de/wp-content/uploads/2016/01/gaszaehler_mysql-300x77.png 300w" sizes="auto, (max-width: 625px) 100vw, 625px" /></a></p>
<p>Daher müssen die einzelnen Zeilen nach den jeweiligen Kriterien gruppiert und dann das Ergebnis der Spalte &#8222;zaehlerstand&#8220; summiert werden. Beim <a href="http://blog.bubux.de/raspberry-pi-ehz-auslesen/" target="_blank">Stromzähler </a> wird hingegen immer der aktuelle Gesamtverbrauch in die Datenbank geschrieben und aus den Datenbankeinträgen für die Tages-, Monats- und Jahresverbräuche die Differenz gebildet um entsprechende Auswertungen zu erzeugen.</p>
<h3>Auswertung der letzten 12 Monate</h3>
<p>Folgendes SQL-Statement ermittelt aus den einzelnen Datenbankeinträgen die Summe gruppiert nach Jahr und Monat. Dabei werden die letzten 12 Monate mittels &#8222;INTERVAL&#8220; betrachtet.</p>
<pre class="">SELECT
     CASE DATE_FORMAT(timestamp,'%m')
          WHEN 1 THEN 'Jan'
          WHEN 2 THEN 'Feb'
          WHEN 3 THEN 'Mär'
          WHEN 4 THEN 'Apr'
          WHEN 5 THEN 'Mai'
          WHEN 6 THEN 'Jun'
          WHEN 7 THEN 'Jul'
          WHEN 8 THEN 'Aug'
          WHEN 9 THEN 'Sep'
          WHEN 10 THEN 'Okt'
          WHEN 11 THEN 'Nov'
          WHEN 12 THEN 'Dez'
     ELSE 'fehler' END as Monat,
     year(timestamp), sum(zaehlerstand)
FROM gaszaehler WHERE year(timestamp) >= YEAR(CURRENT_DATE - INTERVAL 12 MONTH) AND  month(timestamp) >= month(CURRENT_DATE - INTERVAL 12 MONTH)
GROUP BY month(timestamp), year(timestamp) ORDER BY timestamp;
</pre>
<h3>Auswertung der Jahresverbräuche</h3>
<p>Fehlt noch der jährliche Verbrauch. Das SQL-Statement ist einfacher aufgebaut als vorheriges und summiert den Verbrauch pro Jahr für alle in der Datenbank enthaltenen Daten an.</p>
<pre class="">SELECT 
     year(timestamp), sum(zaehlerstand) 
FROM gaszaehler
GROUP BY year(timestamp) ORDER BY timestamp;
</pre>
<p>Im Ergebnis sieht das Ganze dann wie folgt aus. Die Grafik zur Anzeige der Daten der letzten 12 Monate erstelle ich wie in <a href="http://blog.bubux.de/viessmann-heizung-auslesen/" target="_blank">diesem Artikel</a> beschrieben</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2016/01/gaszaehler_uebersicht.png" rel="attachment wp-att-1036"><img loading="lazy" decoding="async" class="alignnone wp-image-1036 size-large" src="http://blog.bubux.de/wp-content/uploads/2016/01/gaszaehler_uebersicht-1024x661.png" alt="Gaszaehler Uebersicht" width="768" height="496" srcset="https://www.bubuxblog.de/wp-content/uploads/2016/01/gaszaehler_uebersicht-1024x661.png 1024w, https://www.bubuxblog.de/wp-content/uploads/2016/01/gaszaehler_uebersicht-300x194.png 300w, https://www.bubuxblog.de/wp-content/uploads/2016/01/gaszaehler_uebersicht-768x495.png 768w, https://www.bubuxblog.de/wp-content/uploads/2016/01/gaszaehler_uebersicht.png 1217w" sizes="auto, (max-width: 768px) 100vw, 768px" /></a></p>
<p>Viel Spaß bei der Kontrolle des Gasverbrauchs <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Gruß</p>
<p>Chris</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bubuxblog.de/gaszaehler/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>c´t Schlagseite 8/2015</title>
		<link>https://www.bubuxblog.de/ct-schlagseite-82015/</link>
					<comments>https://www.bubuxblog.de/ct-schlagseite-82015/#respond</comments>
		
		<dc:creator><![CDATA[diefenbecker]]></dc:creator>
		<pubDate>Fri, 20 Mar 2015 16:23:26 +0000</pubDate>
				<category><![CDATA[Haustechnik]]></category>
		<category><![CDATA[Heimautomatisierung]]></category>
		<category><![CDATA[Hausautomatisierung]]></category>
		<category><![CDATA[Homeautomation]]></category>
		<guid isPermaLink="false">http://blog.bubux.de/?p=854</guid>

					<description><![CDATA[Eben lag die neue c´t im Briefkasten. Die Schlagseite ist mal wieder wunderbar und paßt gut zu den Themen in diesem Blog. Über Sinn und Unsinn bei der Heimautomatisierung kann man ja vortrefflich diskutieren. Wenn für das Aufwecken des Tablet/Handy, dem Öffnen der App oder Intranet-Seite und anschliessendem Klick auf &#8222;Licht Wohnzimmer an&#8220; mehr Zeit [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Eben lag die neue c´t im Briefkasten. Die <a href="  http://www.heise.de/ct/schlagseite/2015/8/gross.jpg" title="c´t Schlageseite" target="_blank">Schlagseite</a> ist mal wieder wunderbar und paßt gut zu den Themen in diesem Blog.</p>
<p>Über Sinn und Unsinn bei der Heimautomatisierung kann man ja vortrefflich diskutieren. Wenn für das Aufwecken des Tablet/Handy, dem Öffnen der App oder Intranet-Seite und anschliessendem Klick auf &#8222;Licht Wohnzimmer an&#8220; mehr Zeit benötigt wird als den Lichtschalter an der Wand zu betätigen, ist man meistens schon am Ziel der (intelligenten) Hausautomation vorbei geschossen&#8230;</p>
<p><img decoding="async" src="http://www.heise.de/ct/schlagseite/2015/8/gross.jpg" title="c´t Schlagseite" width=600px></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bubuxblog.de/ct-schlagseite-82015/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Vor- und Rücklauf vom Kachelofen mittels 1-wire Temperatursensoren messen</title>
		<link>https://www.bubuxblog.de/vorlauf-und-ruecklauf-vom-kachelofen-mittels-1-wire-temperatursensoren/</link>
					<comments>https://www.bubuxblog.de/vorlauf-und-ruecklauf-vom-kachelofen-mittels-1-wire-temperatursensoren/#comments</comments>
		
		<dc:creator><![CDATA[diefenbecker]]></dc:creator>
		<pubDate>Sun, 08 Mar 2015 13:22:11 +0000</pubDate>
				<category><![CDATA[Haustechnik]]></category>
		<category><![CDATA[Heimautomatisierung]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[Hausautomatisierung]]></category>
		<category><![CDATA[Raspberry PI]]></category>
		<category><![CDATA[RaspberryPI]]></category>
		<guid isPermaLink="false">http://blog.bubux.de/?p=744</guid>

					<description><![CDATA[Unser Kachelofen von Brunner hat einen Wärmetauscher (HKD2.2) und versorgt damit den Wasserspeicher im Keller mit warmem Wasser. Aus diesem wird dann die Fußbodenheizung und das Warmwasser versorgt. Die Steuerung des Kachelofens übernimmt die EAS (Elektronische Abbrandsteuerung). Leider hat Brunner in der EAS keine mir bekannte Schnittstelle um die verschiedenen Temperaturen, die Statis der Abbrandsteuerung [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Unser Kachelofen von Brunner hat einen Wärmetauscher (HKD2.2) und versorgt damit den Wasserspeicher im Keller mit warmem Wasser. Aus diesem wird dann die Fußbodenheizung und das Warmwasser versorgt. Die Steuerung des Kachelofens übernimmt die <a title="Ofensteuerung Brunner" href="http://www.brunner.de/de/Produkte/Steuerungen/Ofensteuerungen" target="_blank">EAS</a> (Elektronische Abbrandsteuerung). Leider hat Brunner in der EAS keine mir bekannte Schnittstelle um die verschiedenen Temperaturen, die Statis der Abbrandsteuerung oder den Schalter der Kachelofentüre abzufragen.</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2015/03/IMG_5564.jpg"><img loading="lazy" decoding="async" class="alignnone size-large wp-image-750" src="http://blog.bubux.de/wp-content/uploads/2015/03/IMG_5564-1024x683.jpg" alt="IMG_5564" width="768" height="512" srcset="https://www.bubuxblog.de/wp-content/uploads/2015/03/IMG_5564-1024x683.jpg 1024w, https://www.bubuxblog.de/wp-content/uploads/2015/03/IMG_5564-300x200.jpg 300w" sizes="auto, (max-width: 768px) 100vw, 768px" /></a></p>
<p>Die Abbrandsteuerung selber ist unabhängig von der eigentlichen Hydraulik zum Anschluss des Kachelofens an den Warmwasserspeicher. Hier nutzen wir eine Steuerung der Fa. ÖkoCentro mit einer SHR 10-Steuerung von EnergieControl. Aber auch diese hat keine mir bekannte Schnittstelle die man einfach abfragen kann.</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2015/03/IMG_7931.jpg"><img loading="lazy" decoding="async" class="alignnone size-large wp-image-761" src="http://blog.bubux.de/wp-content/uploads/2015/03/IMG_7931-1024x683.jpg" alt="IMG_7931" width="768" height="512" srcset="https://www.bubuxblog.de/wp-content/uploads/2015/03/IMG_7931-1024x683.jpg 1024w, https://www.bubuxblog.de/wp-content/uploads/2015/03/IMG_7931-300x200.jpg 300w" sizes="auto, (max-width: 768px) 100vw, 768px" /></a></p>
<p>Als eine einfache Möglichkeit zumindest schon mal die Vorlauf- und Rücklauftemperatur zu messen, dachte ich an 1-Wire Temperatursensoren der Firma DALLAS (DS18B20). Diese sind günstig (z.B. 1,85€ bei Reichelt) und einfach am Raspberry PI zu implementieren. Die Vorbereitungen zur Nutzung der 1-Wire Sensoren ist nicht aufwändig und schnell passiert.</p>
<p>Sollen die 1-wire Sensoren nur parasitär versorgt werden, folgendes in der Shell eingeben um das entsprechende Kernelmodul zu laden:</p>
<pre>sudo modprobe w1-gpio</pre>
<p>oder wenn ein Pullup zur externen Stromversorgung genutzt wird, folgendes Kommando:</p>
<pre>sudo modprobe w1-gpio pullup=1</pre>
<p>Sollen Temperaturen über 70°C gemessen werden, wird zwecks der Genauigkeit der Sensoren die zusätzliche Stromversorgung mittels Pullup-Widerstand angeraten.<br />
Mehr zum Thema Anschlussarten gibt es z.B. <a href="http://www.msxfaq.de/verschiedenes/bastelbude/raspi-1wire.htm" title="Anschlussarten Raspi 1-wire" target="_blank">hier</a>.</p>
<p>Unabhängig ob Pull-Up oder nicht wird noch ein weiteres Kernelmodul benötigt:</p>
<pre>sudo modprobe w1-therm</pre>
<p>Ab der Kernelversion 3.18.3 muss noch eine Anpassung gemacht werden. Die Kernelversion wird wie folgt bestimmt:</p>
<pre>uname -r</pre>
<p>Ist die Kernelversion &gt; 3.18.3 muss in der Datei</p>
<pre>/boot/config.txt</pre>
<p>folgende Zeile eingefügt werden</p>
<pre># activating 1-wire with pullup
dtoverlay=w1-gpio-pullup
</pre>
<p>Ich habe die Sensoren mit separater Versorgung am Raspberry Pi angeschlossen. Wie das funktioniert, ist im <a title="Google Bildersuche 1-wire" href="https://www.google.de/search?q=1-wire&amp;source=lnms&amp;tbm=isch&amp;sa=X&amp;ei=NUf8VMz6GaTIyAPWt4CYDw&amp;ved=0CAgQ_AUoAg&amp;biw=1920&amp;bih=1089#tbm=isch&amp;q=1-wire+raspberry" target="_blank">Internet</a> in verschiedensten Foren etc. zu lesen. Ich hatte mal eine kleine Platine <a title="rs232_raspi.fzz" href="http://blog.bubux.de/wp-content/uploads/2015/03/rs232_raspi.fzz">rs232_raspi.fzz</a> mit einem MAX3232 für eine RS232-Schnittstelle für das <a href="http://blog.bubux.de/?p=663" title="M-BUS – Wasserzähler">M-Bus-Projekt</a> in Fritzing aufgebaut. Da hat auch noch der eine 4.7K Widerstand und eine Steckerleiste für 1-wire drauf gepaßt (oben Links zu sehen).</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2015/03/fritzing_1wire_rs232.png"><img loading="lazy" decoding="async" class="alignnone wp-image-762 size-medium" src="http://blog.bubux.de/wp-content/uploads/2015/03/fritzing_1wire_rs232-300x293.png" alt="fritzing_1wire_rs232" width="300" height="293" srcset="https://www.bubuxblog.de/wp-content/uploads/2015/03/fritzing_1wire_rs232-300x293.png 300w, https://www.bubuxblog.de/wp-content/uploads/2015/03/fritzing_1wire_rs232.png 920w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Sind die Kernelmodule geladen, alle Konfigurationen gemacht und alles angeschlossen, sollten die 1-wire Sensoren nach einem Neustart des Raspberry PI unter</p>
<pre>cd /sys/bus/w1/devices</pre>
<p>auftauchen.</p>
<p>Die Sensoren werden z.B. per &#8222;cat&#8220; mit folgendem Befehl ausgelesen</p>
<pre>cat 28-000005db9cea/w1_slave</pre>
<p>Das Ergebnis sollte dann ähnlich wie folgt aussehen:</p>
<p class="code">08 03 4b 46 7f ff 08 10 9e : crc=9e YES<br />
08 03 4b 46 7f ff 08 10 9e t=48500</p>
<p>Die Temperatur wird hinter dem &#8222;t=&#8220; in der zweiten Zeile ausgegeben. Um diese Temperatur z.B. mit PHP abzufragen und für weitere Verarbeitung nutzen zu können, folgendes PHP-Code-Schnipsel</p>
<p>[cc lang=&#8220;php&#8220;]<br />
<?
$ausgabe= shell_exec("cat /sys/bus/w1/devices/28-000005db9cea/w1_slave");
preg_match("/t=([0-9]{5})/",$ausgabe,$ergebnis);
$temperatur=round($ergebnis[1]/1000,1);
print $temperatur;
?><br />
[/cc]</p>
<p>Die Temperatur schreibe ich dann per Script, welches 10-minütig per Cron aufgerufen wird, in eine MySQL-Datenbank und stelle das Ergebnis in einer Webseite dar.</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2015/03/kachelofen_webseite.png"><img loading="lazy" decoding="async" src="http://blog.bubux.de/wp-content/uploads/2015/03/kachelofen_webseite.png" alt="kachelofen_webseite" width="475" height="281" class="alignnone size-full wp-image-774" srcset="https://www.bubuxblog.de/wp-content/uploads/2015/03/kachelofen_webseite.png 475w, https://www.bubuxblog.de/wp-content/uploads/2015/03/kachelofen_webseite-300x177.png 300w" sizes="auto, (max-width: 475px) 100vw, 475px" /></a></p>
<p>Soviel zum Thema 1-wire. Die größere Herausforderung wird es aber, an die Werte der EAS heran zu kommen. Diese sind in soweit auch interessanter, als das diese Steuerung den Abbrand überwacht und informiert ob das Feuer heiß genug ist (&gt;450°C) um den geregelten Abbrand zu starten, zu heiß (&gt;750°C) und eine Gewisse Panik zu erzeugen, der Abbrand beendet ist und Holz nach gelegt werden könnte oder die Türe des Kachlofens nicht richtig geschlossen ist.</p>
<p>Ein Anfang ist aber gemacht und die EAS eine neue Herausforderung.</p>
<p>Gruß<br />
Chris</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bubuxblog.de/vorlauf-und-ruecklauf-vom-kachelofen-mittels-1-wire-temperatursensoren/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
	</channel>
</rss>
