<?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>Raspberry Pi &#8211; bubuxblog</title>
	<atom:link href="https://www.bubuxblog.de/category/raspberry-pi/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bubuxblog.de</link>
	<description></description>
	<lastBuildDate>Sat, 15 Mar 2025 09:52:58 +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>PV-Überschuss zu Warmwasser</title>
		<link>https://www.bubuxblog.de/pv-ueberschuss-zu-warmwasser/</link>
					<comments>https://www.bubuxblog.de/pv-ueberschuss-zu-warmwasser/#respond</comments>
		
		<dc:creator><![CDATA[diefenbecker]]></dc:creator>
		<pubDate>Fri, 27 Dec 2024 13:56:51 +0000</pubDate>
				<category><![CDATA[Eigenbau]]></category>
		<category><![CDATA[Energieeinsparung]]></category>
		<category><![CDATA[Haustechnik]]></category>
		<category><![CDATA[Heimautomatisierung]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[Heizstab]]></category>
		<category><![CDATA[Powerfox]]></category>
		<category><![CDATA[PV-Überschuss]]></category>
		<category><![CDATA[Shelly]]></category>
		<category><![CDATA[Warmwasser]]></category>
		<guid isPermaLink="false">http://blog.bubux.de/?p=2314</guid>

					<description><![CDATA[Meine Eltern haben eine PV-Anlage ohne Batteriespeicher. Durch Selbstaufbau mit Freunden auf einem Schuppendach war das eine sehr kostengünstige Anlage, die an sonnigen Tagen tagsüber den vom Haus benötigten Strom komplett liefert. Seit Inbetriebnahme wird Wäsche nur gewaschen, wenn auch die Sonne scheint 😉 Insgesamt wird aber im Sommer meistens zu viel Strom produziert und [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Meine Eltern haben eine PV-Anlage ohne Batteriespeicher. Durch Selbstaufbau mit Freunden auf einem Schuppendach war das eine sehr kostengünstige Anlage, die an sonnigen Tagen tagsüber den vom Haus benötigten Strom komplett liefert. Seit Inbetriebnahme wird Wäsche nur gewaschen, wenn auch die Sonne scheint <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Insgesamt wird aber im Sommer meistens zu viel Strom produziert und für 8 Cent eingespeist.</p>



<p>Auf der Suche nach einer Möglichkeit den Eigenverbrauch zu erhöhen, fiel ein Batteriespeicher aufgrund der hohen Anschaffungskosten raus. Was tun?</p>



<p>Vor einigen Jahren wurde der Kachelofen mit Wassertasche vom Schornsteinfeger wegen Umweltauflagen still gelegt (sehr schade drum). Dadurch ist aber noch der Warmwasserspeicher im Heizungsraum vorhanden. Diese hatte nach der Stilllegung des Kachelofen keine weitere Wärmequelle als die Ölheizung. Solarthermie ist leider nicht vorhanden und auch für eine Neu-Installation zu aufwändig.</p>



<p>Wir dachten dann über einen Heizstab nach. Der Wasserspeicher hat die Möglichkeit einen Heizstab von oben einzuschrauben. Leider ist es aber sehr schwierig, Heizstäbe mit entsprechend langer heiz-freier Zone zu bekommen, da das Wasser im Wasserspeicher ja nicht randvoll gefüllt ist. Bei anderen Herstellern von Warmwasserspeichern kann man den Heizstab seitlich einschrauben. Und der Heizstab vom Hersteller des Wasserspeichers ist leider raus, da er zu lang ist und wir den Warmwasserspeicher hätten kippen müssen. Es musste also eine andere Lösung her.</p>



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



<h2 class="wp-block-heading">Wärmekreislauf im Selbstbau</h2>



<p>Ein guter Freund meines Vaters ist Heizungsbauer und hat eine Vorrichtung gebaut, die analog der Wassertasche des alten Kachelofen das Wasser mittels Umwälzpumpe, an einem Heizstab vorbei, in den Warmwasserspeicher pumpt. Die Pumpe war noch vom Kachelofen vorhanden und der Heizstab ist ein günstiger ~ 2KW Heizstab mit 1 1/2 Zoll Gewinde. Dieser steckt nun in einem Eisenrohr/T-Stück mit entsprechendem Gewinde und ist über Kupferleitungen an den Warmwasserspeicher angeschlossen. Zudem wurde dieser Kreislauf noch an das Ausdehnungsgefäß des normalen Heizkreislauf angeschlossen, damit wir uns ein zweites Ausdehnungsgefäß sparen konnten.</p>



<figure class="wp-block-image size-full"><a href="http://blog.bubux.de/wp-content/uploads/2024/12/threema-20240830-184619200.jpg"><img fetchpriority="high" decoding="async" width="768" height="1024" src="http://blog.bubux.de/wp-content/uploads/2024/12/threema-20240830-184619200.jpg" alt="" class="wp-image-2315" srcset="https://www.bubuxblog.de/wp-content/uploads/2024/12/threema-20240830-184619200.jpg 768w, https://www.bubuxblog.de/wp-content/uploads/2024/12/threema-20240830-184619200-225x300.jpg 225w" sizes="(max-width: 768px) 100vw, 768px" /></a></figure>



<p>Im Bild erkennt man den Heizstab, der senkrecht in dem Eisenrohr steckt, die grüne Umwälzpumpe und die entsprechende Verrohrung. Später wurde die Konstruktion noch isoliert.</p>



<p>Jetzt soll der Heizstab aber nur eingeschaltet werden, wenn auch PV-Überschuss vorhanden ist. Kauflösungen wie z.B. &#8222;intelligente&#8220; Heizstäbe von ELWA kosten > 500 €. Soviel wollten wir aber nicht ausgeben, da die Ausbeute und der Wirkungsgrad um Wasser mit elektrischer Energie mittels Heizstab zu erhitzen nicht sehr effizient ist und sich schlecht amortisiert. Eine kleine Wärmepumpe schied übrigens vorerst aus Kostengründen auch aus.</p>



<h2 class="wp-block-heading">Die Daten&#8230;woher bekommen?</h2>



<p>So, wie kommt man nun an die Daten wann die Anlage Überschuss produziert? Der SMA-Wechselrichter ist ohne &#8222;Sunny Boy&#8220; nicht wirklich auskunftsfreudig (es war ja ein Low-Budget-Selbstbau-Anlage). Aber welche Daten werden denn benötigt?</p>



<ul class="wp-block-list">
<li>den <strong>Eigenverbrauch </strong>des Hauses und</li>



<li>die <strong>aktuelle Leistung</strong>, die durch die Solaranlage geliefert wird</li>
</ul>



<p>Die Werte für den Eigenverbrauch hatten wir schon relativ schnell nach Inbetriebnahme der Solaranlage durch Einbau eines <a href="https://shop.powerfox.energy/" data-type="link" data-id="https://shop.powerfox.energy/" target="_blank" rel="noreferrer noopener">Powerfox </a>am digitalen Stromzähler erledigt. Dieser misst am Energiezähler die aktuell benötigte Leistung, sowie die elektrische Energie des Verbrauchs und der Einspeisung. Den Powerfox kann jeder einfach anbringen, da er nur mittels Magnet an der entsprechenden Stelle am Zähler befestigt wird. Hier sind keine Arbeiten im Stromkasten notwendig. Der Powerfox ist mit den meisten digitalen Stromzählern kompatibel. Ggf. in die Modell-Liste von Powerfox schauen. Ich selber nutze hier eine Selbstbaulösung, aber der Powerfox ist &#8222;adminfreundlicher&#8220;.</p>



<p>Die Messung der Leistung der Solaranlage kam dann etwas später durch den Einbau eines <a href="https://www.shelly.com/de/products/shelly-3em" target="_blank" rel="noreferrer noopener">Shelly 3EM</a> mit drei Stromzangen im Stromkasten dazu. Die Stromzangen werden einfach um die drei Phasen gelegt, die vom Wechselrichter kommen. Der 3EM kommt auf die Hutschiene im Stromkasten und benötigt noch Versorgungsspannung. Für den Einbau ggf. besser einen Elektriker zu Rate ziehen!</p>



<p>Damit hatte mein Vater schon vor der Idee mit dem Heizstab alle wichtigen Informationen der Solaranlage und des Hausverbrauches zur Verfügung. Allerdings über zwei unterschiedliche Apps und ohne zentrale Einheit wie ein Smart-Home-Server.</p>



<p>Zurück zum Heizstab. Alle Infos, um den Heizstab bei PV-Überschuss anzuschalten waren also schon vorhanden. Um nun aus diesen Infos den eigentlich Überschuss zu berechnen und den Heizstab zu schalten, kam ich nicht mehr drumherum, einen kleinen Server mit entsprechender Software aufzusetzen.</p>



<h2 class="wp-block-heading">Die Steuerung</h2>



<p>Das Erste was mir als Software in den Sinn kam war <a href="https://openwb.de/main/" target="_blank" rel="noreferrer noopener">openWB</a>. Ich habe eine openWB-Wallbox und nutze sie schon zum Überschussladen des E-Autos und hatte mich auch schon mal in das von mir nicht genutzte SmartHome-Menü der openWB verirrt. Die Software selber kann auch ohne Wallbox-Funktionalitäten auf einem RaspberryPI betrieben werden. Ich hatte noch einen Pi 3 hier liegen und die Software war schnell installiert. Der Powerfox und der Shelly 2EM (sowie andere Produkte von Shelly) werden bereits von openWB unterstützt. Die Integration funktioniert einfach mit Eingabe der Shelly-IP bzw. der Powerfox-Cloud-Daten über die Weboberfläche der OpenWB.</p>



<figure class="wp-block-image size-large"><a href="http://blog.bubux.de/wp-content/uploads/2024/12/Screenshot_20241227-133900_Chrome-1.jpg"><img decoding="async" width="538" height="1024" src="http://blog.bubux.de/wp-content/uploads/2024/12/Screenshot_20241227-133900_Chrome-1-538x1024.jpg" alt="" class="wp-image-2318" srcset="https://www.bubuxblog.de/wp-content/uploads/2024/12/Screenshot_20241227-133900_Chrome-1-538x1024.jpg 538w, https://www.bubuxblog.de/wp-content/uploads/2024/12/Screenshot_20241227-133900_Chrome-1-158x300.jpg 158w, https://www.bubuxblog.de/wp-content/uploads/2024/12/Screenshot_20241227-133900_Chrome-1-768x1463.jpg 768w, https://www.bubuxblog.de/wp-content/uploads/2024/12/Screenshot_20241227-133900_Chrome-1-806x1536.jpg 806w, https://www.bubuxblog.de/wp-content/uploads/2024/12/Screenshot_20241227-133900_Chrome-1-1075x2048.jpg 1075w, https://www.bubuxblog.de/wp-content/uploads/2024/12/Screenshot_20241227-133900_Chrome-1.jpg 1080w" sizes="(max-width: 538px) 100vw, 538px" /></a></figure>



<p>Danach zeigt die Startseite der openWB die gemessenen Werte an. Im Screenshot aktuell sehr wenig Sonne und relativ viel Hausverbrauch.</p>



<figure class="wp-block-image size-large"><a href="http://blog.bubux.de/wp-content/uploads/2024/12/Screenshot_20241227-133811_Chrome.jpg"><img decoding="async" width="535" height="1024" src="http://blog.bubux.de/wp-content/uploads/2024/12/Screenshot_20241227-133811_Chrome-535x1024.jpg" alt="" class="wp-image-2319" srcset="https://www.bubuxblog.de/wp-content/uploads/2024/12/Screenshot_20241227-133811_Chrome-535x1024.jpg 535w, https://www.bubuxblog.de/wp-content/uploads/2024/12/Screenshot_20241227-133811_Chrome-157x300.jpg 157w, https://www.bubuxblog.de/wp-content/uploads/2024/12/Screenshot_20241227-133811_Chrome-768x1471.jpg 768w, https://www.bubuxblog.de/wp-content/uploads/2024/12/Screenshot_20241227-133811_Chrome-802x1536.jpg 802w, https://www.bubuxblog.de/wp-content/uploads/2024/12/Screenshot_20241227-133811_Chrome-1069x2048.jpg 1069w, https://www.bubuxblog.de/wp-content/uploads/2024/12/Screenshot_20241227-133811_Chrome.jpg 1080w" sizes="(max-width: 535px) 100vw, 535px" /></a></figure>



<p>Verschiedene Smart-Home-Geräte (unter die auch der zukünftige Heizstab fällt) können nun in der openWB konfiguriert werden und mit Aktionen hinterlegt werden. Der Heizstab selber ist natürlich nicht &#8222;Smart&#8220;. Ein- und ausgeschaltet werden soll er über einen <a href="https://www.shelly.com/de/products/shelly-plug-s-gen3" target="_blank" rel="noreferrer noopener">Shelly Plug S</a>. Den Shelly sieht man auch auf dem ersten Bild oben links. Daran angeschlossen ist der Heizstab und die Umwälzpumpe. Auch dieser Shelly wird von openWB als Smart-Home-Gerät unterstützt. </p>



<p>Was jetzt noch bleibt, sind verschiedene Einstellung am Smart-Home-Gerät:</p>



<ul class="wp-block-list">
<li>Schwellenwerte (in Watt) zum Ein- und Ausschalten, </li>



<li>Nachlaufzeiten (in Sekunden) damit der Stab nicht ständig an- und ausgeht wenn Wolken aufziehen, </li>



<li>Zeiträume und Gesamtdauer pro Tag in denen überhaupt geschaltet wird (zur Sicherheit falls die openWB den Shelly Plug aus irgendwelchen Gründen nicht ausschaltet) </li>



<li>und einige andere Einstellungen. </li>
</ul>



<p>Das ist natürlich abhängig vom Heizstab, dem Warmwasserspeicher und der gesamten PV-Anlage. Hier muss ein bisschen ausprobiert werden welche Werte für die jeweilige Anlage am besten passen.</p>



<p>Zur Sicherheit wird der Shelly Plug an Pumpe und Heizstab auch noch täglich mit Sonnenuntergang durch die Shelly-App ausgeschaltet und der Heizstab besitzt noch ein eigenes Thermostat, wodurch er sich selber ab einer einstellbaren Temperatur ausschaltet. Mit diesen Mitteln und den Einstellungen in der openWB sollte ein überhitzen bzw. zu langes laufen des Heizstabes ausgeschlossen sein.</p>



<figure class="wp-block-image size-large"><a href="http://blog.bubux.de/wp-content/uploads/2024/12/Screenshot_20241227-133932_Chrome.jpg"><img loading="lazy" decoding="async" width="562" height="1024" src="http://blog.bubux.de/wp-content/uploads/2024/12/Screenshot_20241227-133932_Chrome-562x1024.jpg" alt="" class="wp-image-2320" srcset="https://www.bubuxblog.de/wp-content/uploads/2024/12/Screenshot_20241227-133932_Chrome-562x1024.jpg 562w, https://www.bubuxblog.de/wp-content/uploads/2024/12/Screenshot_20241227-133932_Chrome-165x300.jpg 165w, https://www.bubuxblog.de/wp-content/uploads/2024/12/Screenshot_20241227-133932_Chrome-768x1400.jpg 768w, https://www.bubuxblog.de/wp-content/uploads/2024/12/Screenshot_20241227-133932_Chrome-842x1536.jpg 842w, https://www.bubuxblog.de/wp-content/uploads/2024/12/Screenshot_20241227-133932_Chrome.jpg 1080w" sizes="auto, (max-width: 562px) 100vw, 562px" /></a></figure>



<p>Die Apparatur läuft seit dem Herbst 2024. Die Tage, an denen Sonne war und der Schwellwert für den PV-Überschuss in der openWB erreicht wurde, schaltete den Heizstab und die Umwälzpumpe über den Shell Plug einwandfrei ein und aus. Den Status des Heizstabes (An/Aus) sowie die aktuell benötigte Leistung und die pro Tag in den Heizstab geflossene Energie zeigt die openWB auch auf der Startseite an.</p>



<p>Grundsätzlich funktioniert das also. Wirklich viel PV-Überschuss gab es aber leider nicht, so das wir das nächste Frühjahr abwarten müssen.</p>



<p>Wunder wird der kleine Heizstab im Warmwasserspeicher nicht vollbringen, aber auch im Sommer wird warmes Wasser benötigt und es sollte dann Wärme produziert werden, die mehr als 8 Cent wert ist. Die Ausgaben hielten sich auch sehr in Grenzen. Eigentlich war es nur der Heizstab für &lt; 100 € und der Shelly Plug für 23 €. Der Rest war schon vorhanden (Powerfox und Shelly 3EM) bzw. lag irgendwo herum (Raspi, Umwälzpumpe). Das Installations-Material kostete ein Feierabendbier.</p>



<p>Ich werde mal berichten wie das Ganze im Sommer funktioniert.</p>



<p>Gruß<br>Chris</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bubuxblog.de/pv-ueberschuss-zu-warmwasser/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Now Spinning &#8211; Now Playing</title>
		<link>https://www.bubuxblog.de/now-spinning-now-playing/</link>
					<comments>https://www.bubuxblog.de/now-spinning-now-playing/#comments</comments>
		
		<dc:creator><![CDATA[diefenbecker]]></dc:creator>
		<pubDate>Sun, 29 Oct 2023 17:28:18 +0000</pubDate>
				<category><![CDATA[Eigenbau]]></category>
		<category><![CDATA[ESP8266]]></category>
		<category><![CDATA[Haustechnik]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[Now PLaying]]></category>
		<category><![CDATA[Raspberry PI]]></category>
		<category><![CDATA[Schallplatten]]></category>
		<category><![CDATA[Vinyl]]></category>
		<guid isPermaLink="false">http://blog.bubux.de/?p=2106</guid>

					<description><![CDATA[Wohin mit der Hülle der Vinylplatte während diese auf dem Plattenspieler dreht? Bisher lag die Hülle neben dem Plattenspieler. An sich ein guter Platz und kein Problem, aber es gibt ja auch schicke Halter im Internet. Diese zeigen meistens den Schriftzug "Now playing" oder "Now spinning" und halten die Platte mittels eines entsprechend geformten Holz-, Acryl- oder Metall-Konstruktes an der Wand, auf dem Sideboard oder wo auch immer. Das fand ich langweilig und daher musste eine andere Lösung her.]]></description>
										<content:encoded><![CDATA[
<p>Bei Hipstern und Männern zwischen 45 und 54 sind Vinyl-Schallplatten ja schon länger wieder voll angesagt. Als alter CD-Sammler (und vorher auch schon Schallplatten) bin auch irgendwann wieder dazu gekommen. Aber eher zufällig (oder weil ich zur zweiten Gruppe gehöre?). Über Kleinanzeigen hatte ich ein altes Röhrenradio gekauft (Blaupunkt &#8222;Wunschklang&#8220;) und der Verkäufer hatte noch einen Technics-Plattenspieler in der Ecke stehen den ich dort nicht stehen lassen konnte. Der war technisch etwas lädiert aber nach Reinigung der verharzten Mechanik, dem Einbau eines neuen Tonabnehmers und der Einstellung des Tonarms funktioniert er wieder einwandfrei.</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color">Aber nun die drängende Frage: </mark>Wohin mit der Hülle der Vinylplatte während diese auf dem Plattenspieler dreht? Bisher lag die Hülle neben dem Plattenspieler. An sich ein guter Platz und kein Problem, aber es gibt ja auch schicke Halter im Internet. Diese zeigen meistens den Schriftzug &#8222;Now playing&#8220; oder &#8222;Now spinning&#8220; und halten die Platte mittels eines entsprechend geformten Holz-, Acryl- oder Metall-Konstruktes an der Wand, auf dem Sideboard oder wo auch immer. Das fand ich langweilig und daher musste eine andere Lösung her.</p>



<p>Wenn schon so ein Halter da rum steht, kann der auch was tun während keine Schallplattenhülle drin steht. Was liegt da näher als mal wieder einen Mikrocontroller mit einem Display zu bemühen. Heraus gekommen ist ein erster Prototyp meines &#8222;Now Spinning&#8220;-Plattenhalters.</p>



<figure class="wp-block-image size-large"><a href="http://blog.bubux.de/wp-content/uploads/2023/10/20231028_171031-scaled.jpg"><img loading="lazy" decoding="async" width="1024" height="768" src="http://blog.bubux.de/wp-content/uploads/2023/10/20231028_171031-1024x768.jpg" alt="" class="wp-image-2109" style="object-fit:cover" srcset="https://www.bubuxblog.de/wp-content/uploads/2023/10/20231028_171031-1024x768.jpg 1024w, https://www.bubuxblog.de/wp-content/uploads/2023/10/20231028_171031-300x225.jpg 300w, https://www.bubuxblog.de/wp-content/uploads/2023/10/20231028_171031-768x576.jpg 768w, https://www.bubuxblog.de/wp-content/uploads/2023/10/20231028_171031-1536x1152.jpg 1536w, https://www.bubuxblog.de/wp-content/uploads/2023/10/20231028_171031-2048x1536.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>Genutzt habe ich wieder einen NodeMCU mit ESP8266 und acht MAX7219 LED 8&#215;8 Matrix-Module. Mittels Taster, der von der eingestellten Schallplattenhülle gedrückt bleibt, wird die Anzeige auf einen dauerhaften Text (bei mir &#8222;NOW SPINNING&#8220;) gesetzt. Das folgende kurze Video zeigt die Funktion des Tasters (Entschuldigung für die Focus-Probleme&#8230;ich werde in diesem Leben kein You-Tuber mehr&#8230;):</p>



<figure class="wp-block-video"><video height="1080" style="aspect-ratio: 1920 / 1080;" width="1920" controls src="https://www.bubuxblog.de/wp-content/uploads/2023/10/now_playing_2.mp4"></video></figure>



<p>Wird der Taster nicht betätigt (also die Platte wieder woanders verstaut), werden auf dem Display verschiedene Informationen angezeigt deren Anzeige im 5-Sekunden-Takt wechselt. Das wäre einmal die Innentemperatur die mittels BME280-Sensor erfasst wird und dann noch verschiedene weitere Daten die nicht lokal gemessen werden, sondern durch den Aufruf eines HTTP-Endpunktes des NodeMCUs an diesen &#8222;von aussen&#8220; übergeben werden.</p>



<p>Dieser HTTP-Post erfolgt durch ein einfaches PHP-Script welches per Cron auf einem Raspberry Pi aufgerufen wird. Die anzuzeigenden Daten werden von diesen Script aus meinem FHEM (ja, ich nutze immer noch FHEM und bin weiterhin sehr zufrieden damit) ausgelesen und die URL des NodeMCUs mit den zu übergebenen Daten aufgerufen. Aktuell werden fünf übergebene Argumente verarbeitet:</p>



<ul class="wp-block-list has-vivid-cyan-blue-color has-text-color">
<li style="font-style:italic;font-weight:200">Aussentemperatur</li>



<li style="font-style:italic;font-weight:200">Akkustand der PV-Anlage</li>



<li style="font-style:italic;font-weight:200">Aktuelle Leistung der PV-Anlage</li>



<li style="font-style:italic;font-weight:200">Temperatur des Wasserpuffers oben</li>



<li style="font-style:italic;font-weight:200">Temperatur des Wasserpuffers unten</li>
</ul>



<p>Der Aufruf der URL und die Übergabe der Daten an den NodeMCU schaut beispielhaft wie folgt aus:</p>



<pre class="wp-block-code alignwide"><code>&lt;ip_des_nodemcu&gt;/receivedata?aussentemperatur=17.3&amp;akkustand=67&amp;pv=1.5&amp;pufferoben=70&amp;pufferunten=56</code></pre>



<p>Das folgende Video zeigt den Wechsel der Daten:</p>



<figure class="wp-block-video"><video height="1080" style="aspect-ratio: 1920 / 1080;" width="1920" controls src="https://www.bubuxblog.de/wp-content/uploads/2023/10/now_playing_1-2.mp4"></video></figure>



<p class="has-text-align-left has-white-color has-vivid-cyan-blue-background-color has-text-color has-background"><strong>PHP-Script zum übermitteln der Messwerte</strong></p>



<p>Im PHP-Script (<em>nowspinning.php</em>) werden die Reading-Daten aus FHEM per <em>CURL </em>abgefragt, dann die URL mit den Messwerten zusammen gebaut und anschliesend wiederum per <em>CURL </em>vom NodeMCU aufgerufen. Warum PHP: Weil´s für mich am schnellsten ging. Wenn ich mal Muße habe ändere ich es nach Python. Es funktioniert jedenfalls bisher völlig unproblematisch.</p>



<pre class="wp-block-code alignwide has-black-color has-text-color has-background" style="background-color:#fafafa"><code><code data-enlighter-language="php" class="EnlighterJSRAW">&lt;?php
function getFhemReading($readingName, $fhemUrl) {
    $fhemCmd = "list $readingName";
    $cmd = "curl -s \"$fhemUrl/fhem?cmd=".urlencode($fhemCmd)."&amp;XHR=1\"";    
    $output = shell_exec($cmd);
    $value = null;
    $match=explode(" ", $output);
    $match=array_filter($match);
    return str_replace(array("\r","\n"),'',end($match));
}

$fhemUrl = "http://&lt;url_zum_fhem&gt;:&lt;fhem_port&gt;";

$aussentemperatur = round(getFhemReading("Aussenthermometer temperature", $fhemUrl),1);
$akkustand = round(getFhemReading("MQTT2_openWB_Client SOC",$fhemUrl),1);
$pvleistung = round(getFhemReading("MQTT2_openWB_Client SolarPower",$fhemUrl)/1000,1);
$pufferoben = round(getFhemReading("HeizungPufferOben state",$fhemUrl),1);
$pufferunten = round(getFhemReading("HeizungPufferUnten state",$fhemUrl),1);

$cmd = "curl -s \"http://&lt;ip_nodemcu&gt;/receivedata?aussentemperatur=".$aussentemperatur."&amp;akkustand=".$akkustand."&amp;pvleistung=".$pvleistung."&amp;pufferoben=".$pufferoben."&amp;pufferunten=".$pufferunten."\"";

shell_exec($cmd);
?&gt;</code></code></pre>



<p>Hier der Aufruf des Scriptes in der Crontab alle 3 Minuten:</p>



<pre class="wp-block-code alignwide"><code>*/3 * * * * php /usr/local/bin/nowspinning.php</code></pre>



<p class="has-white-color has-vivid-cyan-blue-background-color has-text-color has-background"><strong>Code für den NodeMCU</strong></p>



<p>Der Code für den NodeMCU ist bisher relativ schnörkelfrei. Die WLAN-Zugangsdaten müssen aktuell noch fest im Code vergeben werden. Für das MAX7219 nutze ich die <em>Parola</em>-Bibliothek . Für den BME280 die Bibliothek von <em>Adafruit</em>. Der Schalter hängt an D0 und GND.</p>



<pre class="wp-block-code alignwide has-black-color has-text-color has-background" style="background-color:#fafafa"><code><code data-enlighter-language="cpp" class="EnlighterJSRAW">#include &lt;MD_Parola.h&gt;
#include &lt;MD_MAX72xx.h&gt;
#include &lt;SPI.h&gt;
#include &lt;Wire.h&gt;
#include &lt;Adafruit_Sensor.h&gt;
#include &lt;Adafruit_BME280.h&gt;
#include &lt;ESP8266WebServer.h&gt;

//WLAN
const char* ssid = "&lt;wlan_ssid&gt;";
const char* pass = "&lt;wlan_passwort&gt;";
ESP8266WebServer server(80);

// Hardwaretyp des MAX7219
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW

// PINs und Anzahl der MAX-Elemente
#define MAX_DEVICES 8
#define CS_PIN 15

MD_Parola display = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);

// BME280
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme; // I2C

//Schalter um Platte zu erkennen
int pinNowSpinning = D0; 

//Warteschleifen
unsigned long startMillisTemp;
unsigned long currentMillisTemp;
unsigned long startMillisWechsel;
unsigned long currentMillisWechsel;

//Externe Daten deklarieren
String aussentemperatur = "keine Daten";
String akkustand = "keine Daten";
String puffer = "keine Daten";
String pvleistung = "keine Daten";

//Sonstiges
int anzeigennummer=0;

void setup() {

  Serial.begin(115200); 

  display.begin();
  display.setIntensity(0);
  display.displayClear();
  display.setTextAlignment(PA_CENTER);
  
  pinMode(pinNowSpinning, INPUT); 

  bool status;
  status = bme.begin(0x76);  
  if (!status) {
    Serial.println("Kann BME Sensor nicht finden. Verkabelung prüfen!");
    while (1);
  }

  startMillisTemp = millis();
  startMillisWechsel = millis();

  //WLAN
  Serial.print("Verbinde zu: ");
  Serial.println(ssid);
  display.print("Verbinde Wifi");
  WiFi.begin(ssid, pass);
   
  while(WiFi.status() != WL_CONNECTED){
    delay(500); 
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi verbunden");
  Serial.print("IP-Adresse des ESP8266: ");  
  Serial.println(WiFi.localIP());
  display.displayClear();
  display.print(WiFi.localIP());
  delay(3000);

  //Webendpunkte
  server.on("/",handleRoot);
  server.on("/receivedata", receiveData);

  server.begin();
}

void loop() {
  //Client-Anfragen abfragen
  server.handleClient(); 

  if (digitalRead(pinNowSpinning) == HIGH) {
    //Text wenn eine Platte abgestellt ist    
    display.print("NOW SPINNING");
    Serial.println("Now Spinning");  
  } else {
    currentMillisWechsel = millis();    
    if (currentMillisWechsel - startMillisWechsel &gt;= 5000) {
      startMillisWechsel = currentMillisWechsel;
      anzeigennummer++;
      Serial.print("Anzeigenummer: ");
      Serial.println(anzeigennummer);
      switch (anzeigennummer) {
        case 1:
          //Temperatur alle 30 Sekunden abfragen
          currentMillisTemp = millis();        
          if (currentMillisTemp - startMillisTemp &gt;= 10000) {
            startMillisTemp = currentMillisTemp;
            String temperatur = String(bme.readTemperature());
            display.print("&gt; "+temperatur.substring(0,temperatur.length()-1)+" \"C");

            Serial.print("Temperatur: ");
            Serial.print(bme.readTemperature());
            Serial.println(" °C");

            Serial.print("Luftfeuchte: ");
            Serial.print(bme.readHumidity());
            Serial.println(" %");
          }
          break;
        case 2:
          display.print(aussentemperatur);
          Serial.println(aussentemperatur);          
          break;
        case 3:
          display.print(akkustand);
          Serial.println(akkustand);          
          break;
        case 4:
          display.print(pvleistung);
          Serial.println(pvleistung);          
          break;
        case 5:
          display.print(puffer);
          Serial.println(puffer);          
          break;
        default:
          // statements
          break;
      }
      if (anzeigennummer&gt;=5) { 
        anzeigennummer=0; 
        Serial.println("Anzeigenummer reset");
      }
    }  
  }
}

void handleRoot() {
  String message="&lt;h1&gt;Now Spinning&lt;/h1&gt;";
  message += "Das ist die lieblose Webseite des 'Now Spinning'-Anzeigers&lt;/br&gt;&lt;/br&gt;";
  message += "Temperatur: ";
  message += bme.readTemperature();
  message += " °C&lt;br&gt;";
  message += "Luftfeuchte: ";
  message += bme.readHumidity();
  message += " rel%&lt;br&gt;";
  server.send(200, "text/html", message);
}

void receiveData() {
  String message="&lt;h1&gt;Empfange Daten&lt;/h1&gt;";
  message += "Daten werden empfangen...&lt;/br&gt;&lt;/br&gt;";
  server.send(200, "text/html", message);

  Serial.println("Daten empfangen...");
 
  //Aussentemperatur
  Serial.print(server.argName(0));
  Serial.print(F(": "));
  Serial.println(server.arg(0));
  aussentemperatur="&lt; " + server.arg(0) + " \"C";

  //Akkustand
  Serial.print(server.argName(1));
  Serial.print(F(": "));
  Serial.println(server.arg(1));
  akkustand="Akku "+ server.arg(1) + "%";

  //PV Leistung
  Serial.print(server.argName(2));
  Serial.print(F(": "));
  Serial.println(server.arg(2));
  pvleistung="PV "+ server.arg(2) + "KW";

  //Puffer oben u. unten
  Serial.print(server.argName(3));
  Serial.print(F(": "));
  Serial.println(server.arg(3));
  Serial.print(server.argName(4));
  Serial.print(F(": "));
  Serial.println(server.arg(4));
  puffer = "- " + server.arg(3) + "  _ " + server.arg(4); 
}</code></code></pre>



<p>Schaltungsplan von <em>Fritzing </em>kommt noch und wenn ich mal Zeit finde, packe ich den Code auch noch nach Github.</p>



<p class="has-white-color has-vivid-cyan-blue-background-color has-text-color has-background"><strong>Holzarbeiten</strong></p>



<p></p>



<p>Hier hat mir dankenswerterweise Arnim (der immer mit meinen Kritzeleien zurecht kommen muss) sehr geholfen und hat mir einen ersten Prototyp aus Fichte gebaut.</p>



<figure class="wp-block-image size-large"><a href="http://blog.bubux.de/wp-content/uploads/2023/10/20231029_170436-scaled.jpg"><img loading="lazy" decoding="async" width="1024" height="368" src="http://blog.bubux.de/wp-content/uploads/2023/10/20231029_170436-1024x368.jpg" alt="" class="wp-image-2143" srcset="https://www.bubuxblog.de/wp-content/uploads/2023/10/20231029_170436-1024x368.jpg 1024w, https://www.bubuxblog.de/wp-content/uploads/2023/10/20231029_170436-300x108.jpg 300w, https://www.bubuxblog.de/wp-content/uploads/2023/10/20231029_170436-768x276.jpg 768w, https://www.bubuxblog.de/wp-content/uploads/2023/10/20231029_170436-1536x552.jpg 1536w, https://www.bubuxblog.de/wp-content/uploads/2023/10/20231029_170436-2048x735.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>Die Nut um die Platte zu halten, wurde mit leicht schräg gestelltem Sägeblatt der Tischkreissäge angefertigt und ist etwa 1 cm breit. Der vordere Ausschnitt um den NodeMCU und das Display unter zu bringen ist mit der Oberfräse gefräst. </p>



<p>Den Taster hab ich von unten in ein zweistufig gebohrtes Loch mit Heißkleber befestigt. Im Bild unten ist der Taster als kleines schwarzes Ding zu erkennen. Die Kabel des Schalters sind dann schräg nach vorne in die Ausfräsung verlegt.</p>



<p>Das Anschlusskabel verläuft duch eine Bohrung unter der Nut für die Platte und dann auch schräg nach oben in die Ausfräsung. Hier hab ich ein normales Micro-USB-Kabel genutzt, kurzerhand durchgeschnitten und wieder zusammengelötet.</p>



<p>Für die Unterbringung des Temperatursensors brauche ich noch eine gute Lösung. Dieser liegt aktuell einfach mit in der Ausfräsung in der Ecke. Ich kann mir aber vorstellen, dass dort durch das Display und den NodeMCU die Messung verfälscht wird.</p>



<figure class="wp-block-image size-large"><a href="http://blog.bubux.de/wp-content/uploads/2023/10/20231029_150153-scaled.jpg"><img loading="lazy" decoding="async" width="768" height="1024" src="http://blog.bubux.de/wp-content/uploads/2023/10/20231029_150153-768x1024.jpg" alt="" class="wp-image-2123" style="aspect-ratio:0.75;object-fit:cover" srcset="https://www.bubuxblog.de/wp-content/uploads/2023/10/20231029_150153-768x1024.jpg 768w, https://www.bubuxblog.de/wp-content/uploads/2023/10/20231029_150153-225x300.jpg 225w, https://www.bubuxblog.de/wp-content/uploads/2023/10/20231029_150153-1152x1536.jpg 1152w, https://www.bubuxblog.de/wp-content/uploads/2023/10/20231029_150153-1536x2048.jpg 1536w, https://www.bubuxblog.de/wp-content/uploads/2023/10/20231029_150153-scaled.jpg 1920w" sizes="auto, (max-width: 768px) 100vw, 768px" /></a></figure>



<p class="has-white-color has-vivid-cyan-blue-background-color has-text-color has-background has-medium-font-size"><strong>Todo´s</strong></p>



<p>Es ist ja der erste Prototyp des &#8222;Now spinning&#8220;-Plattenhüllenhalters und an der Software als auch an der Hardware (für den Mikorcontroller und den Halter selber) ist noch ein bisschen was zu tun. Spontan fällt mir da noch folgendes ein:</p>



<ul class="wp-block-list">
<li style="font-style:italic;font-weight:200"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color">Acrylfront (dunkelrot oder milchig&#8230;muss ich mal testen) und Frage der Befestigung</mark></li>



<li style="font-style:italic;font-weight:200"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color">Helligkeitssensor mittels simplem LDR (wenn dunkel, dann dunkler. wenn Heller, dann heller)</mark></li>



<li style="font-style:italic;font-weight:200"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color">Uhrzeit (entweder per POST mit den anderen Messwerten übergeben oder Echtzeituhr-Modul)</mark></li>



<li style="font-style:italic;font-weight:200"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color">Übergabe der Messwerte etwas flexibler gestalten (ohne das bei neuen Werten der Code des NodeMCU geändert werden muss sondern nur beim Aufruf der URL)</mark></li>



<li style="font-style:italic;font-weight:200"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color">Maximalzeit nach der &#8222;Now Spinning&#8220; wieder zu der Anzeige der anderen Daten wechselt</mark></li>



<li style="font-style:italic;font-weight:200"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color">&#8222;Now spinning&#8220; abwechselnd mit einen Spektrum Analyzer (FFT) per Mikrofon aufgenommen</mark></li>



<li style="font-style:italic;font-weight:200"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color">Einen besseren Platz für den internen Temperatur-Sensor</mark></li>



<li style="font-style:italic;font-weight:200"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color">Den Halter aus Eiche anstatt Fichte (Grüße an die Fräser)</mark></li>



<li style="font-style:italic;font-weight:200"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color">Die Luftfeuchte vom BME280 anzeigen</mark></li>



<li style="font-style:italic;font-weight:200"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color">Befestigung des Temperatursensors</mark></li>
</ul>



<p>Das war´s erstmal. Falls ihr Den Plattenhalter nachbauen wollt, würde ich mich über Erfahrungen, Verbesserungen, weitere Ideen und Bilder freuen. Bis dahin</p>



<p>Gruß Chris</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bubuxblog.de/now-spinning-now-playing/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		<enclosure url="https://www.bubuxblog.de/wp-content/uploads/2023/10/now_playing_2.mp4" length="22293629" type="video/mp4" />
<enclosure url="https://www.bubuxblog.de/wp-content/uploads/2023/10/now_playing_1-2.mp4" length="58765390" type="video/mp4" />

			</item>
		<item>
		<title>Netzwerkweit Werbung blockieren mit Pi-hole</title>
		<link>https://www.bubuxblog.de/werbung-blockieren-mit-pi-hole/</link>
					<comments>https://www.bubuxblog.de/werbung-blockieren-mit-pi-hole/#comments</comments>
		
		<dc:creator><![CDATA[diefenbecker]]></dc:creator>
		<pubDate>Sun, 06 Oct 2019 12:37:52 +0000</pubDate>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Odroid]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[Adblocker]]></category>
		<category><![CDATA[Pi-hole]]></category>
		<category><![CDATA[Raspberry PI]]></category>
		<category><![CDATA[RaspberryPI]]></category>
		<category><![CDATA[Werbung]]></category>
		<guid isPermaLink="false">http://blog.bubux.de/?p=1199</guid>

					<description><![CDATA[Habt ihr genug von flackernden Werbebannern die mehr Raum einnehmen als der eigentliche Seiteninhalt oder gefühlte 100 Ad-Server die beim Öffnen einer einzigen Webseite kontaktiert werden? Adblock &#38; Co. sind eine gute Sache, allerdings auf den Webbrowser beschränkt auf dem das Plugin installiert ist. Android oder iOS waren da meistens außen vor. Auf der Suche [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a href="http://blog.bubux.de/wp-content/uploads/2016/08/pihole_logo.png"><img loading="lazy" decoding="async" class="size-full wp-image-1222 alignleft" src="http://blog.bubux.de/wp-content/uploads/2016/08/pihole_logo.png" alt="pihole_logo" width="240" height="240" srcset="https://www.bubuxblog.de/wp-content/uploads/2016/08/pihole_logo.png 240w, https://www.bubuxblog.de/wp-content/uploads/2016/08/pihole_logo-150x150.png 150w" sizes="auto, (max-width: 240px) 100vw, 240px" /></a>Habt ihr genug von flackernden Werbebannern die mehr Raum einnehmen als der eigentliche Seiteninhalt oder gefühlte 100 Ad-Server die beim Öffnen einer einzigen Webseite kontaktiert werden? Adblock &amp; Co. sind eine gute Sache, allerdings auf den Webbrowser beschränkt auf dem das Plugin installiert ist. Android oder iOS waren da meistens außen vor. Auf der Suche nach einem weiteren Beschäftigungsfeld für meinen Raspberry Pi bin ich auf ein nettes Projekt gestoßen!</p>
<p><span style="color: #ff6600;"><strong>Das ist ein Update des ursprünglichen Artikels da sich ein paar wichtige Dinge geändert haben und ich auch einen DNS-Loop eingebaut hatte&#8230;<br />
</strong></span></p>
<h1>Installation</h1>
<p>Mit einer Zeile ist er auf dem Raspberry Pi installiert: der <a href="https://pi-hole.net/" target="_blank" rel="noopener noreferrer">Werbeblocker Pi-hole</a></p>
<h1><span style="color: #0000ff;">curl -L https://install.pi-hole.net | bash</span><span id="more-1199"></span></h1>
<p><!--more-->Während der Installation wird die Konfiguration von Pi-hole durch eine grafische Oberfläche erleichtert. Die meisten Voreinstellungen kann man ohne Änderung abnicken.</p>
<p>Nach erfolgreicher Installation ist die Weboberfläche des Pi-hole unter der Adresse <em>http://&lt;servername&gt;:&lt;port&gt;/admin</em> zu erreichen.</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2016/05/pihole1.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1207" src="http://blog.bubux.de/wp-content/uploads/2016/05/pihole1.png" alt="" width="820" height="577" srcset="https://www.bubuxblog.de/wp-content/uploads/2016/05/pihole1.png 820w, https://www.bubuxblog.de/wp-content/uploads/2016/05/pihole1-300x211.png 300w, https://www.bubuxblog.de/wp-content/uploads/2016/05/pihole1-768x540.png 768w" sizes="auto, (max-width: 820px) 100vw, 820px" /></a></p>
<h1>&nbsp;</h1>
<h1>Wichtige Einstellungen</h1>
<p>Unter anderem ist als DNS-Server der von Google voreingestellt. Diese Einstellung kann nach Abschluss der Installation nachträglich in der Pi-hole-Oberfläche angepasst werden. Dazu dort einloggen und unter <em>Settings -&gt; DNS</em> einen anderen voreingestellten DNS auswählen oder auf der rechten Seite einen frei wählbaren DNS-Server eintragen. Natürlich kann die Einstellung auch auf dem Google-DNS belassen werden.</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2016/08/pihole_DNS_server.png"><img loading="lazy" decoding="async" class="alignnone size-large wp-image-1823" src="http://blog.bubux.de/wp-content/uploads/2016/08/pihole_DNS_server-1024x685.png" alt="" width="768" height="514" srcset="https://www.bubuxblog.de/wp-content/uploads/2016/08/pihole_DNS_server-1024x685.png 1024w, https://www.bubuxblog.de/wp-content/uploads/2016/08/pihole_DNS_server-300x201.png 300w, https://www.bubuxblog.de/wp-content/uploads/2016/08/pihole_DNS_server-768x514.png 768w, https://www.bubuxblog.de/wp-content/uploads/2016/08/pihole_DNS_server.png 1992w" sizes="auto, (max-width: 768px) 100vw, 768px" /></a></p>
<p>Neben der Weboberfläche können die Einstellungen auch über die Konsole in der Konfigurationsdatei mit</p>
<pre class="">sudo vim /etc/dnsmasq.d/01-pihole.conf</pre>
<p>angepasst werden.</p>
<h1>&nbsp;</h1>
<h1>Pi-hole als DNS im eigenen Netzwerk nutzen</h1>
<p>Damit nun der Pi-hole auch netzwerkweit als DNS genutzt wird, muss z.B. in der FritzBox unter &#8222;<em>Internet-&gt; Zugangsdaten</em>&#8220; im Reiter &#8222;<em>DNS-Server</em>&#8220; noch die IP des Pi-hole-Rechners als lokaler DNS-Server eintragen werden. Hier im Bild für IPv4 und IPv6 dargestellt. Die IPv6-Adresse des Pi-hole findet ihr u.a. auf der Weboberfläche unter <em>Settings</em> im Reiter <em>&#8222;System</em>&#8222;.</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2019/10/fritzbox_dns.png"><img loading="lazy" decoding="async" class="alignnone size-large wp-image-1826" src="http://blog.bubux.de/wp-content/uploads/2019/10/fritzbox_dns-1024x499.png" alt="" width="768" height="374" srcset="https://www.bubuxblog.de/wp-content/uploads/2019/10/fritzbox_dns-1024x499.png 1024w, https://www.bubuxblog.de/wp-content/uploads/2019/10/fritzbox_dns-300x146.png 300w, https://www.bubuxblog.de/wp-content/uploads/2019/10/fritzbox_dns-768x375.png 768w, https://www.bubuxblog.de/wp-content/uploads/2019/10/fritzbox_dns.png 1105w" sizes="auto, (max-width: 768px) 100vw, 768px" /></a></p>
<h1>&nbsp;</h1>
<h1>Lokale Namensauflösung</h1>
<p>Die meisten werden Pi-hole nicht als DHCP-Server nutzen, sondern DHCP dem DSL-Router überlassen. Damit der Pi-hole auch die Namensauflösung im lokalen Netzwerk kennt, muss der lokale Router unter <em>Settings-&gt;DNS</em> im Breich &#8222;<em>Conditional Forwarding</em>&#8220; eingetragen werden. Im Bild ist die entsprechende Konfiguration für eine FritzBox zu sehen. Nun sollte auch die Namensauflösung im lokalen Netzwerk wieder funktionieren.</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2016/08/pihole_conditiional_forwarding.png"><img loading="lazy" decoding="async" class="alignnone size-large wp-image-1822" src="http://blog.bubux.de/wp-content/uploads/2016/08/pihole_conditiional_forwarding-1024x292.png" alt="" width="768" height="219" srcset="https://www.bubuxblog.de/wp-content/uploads/2016/08/pihole_conditiional_forwarding-1024x292.png 1024w, https://www.bubuxblog.de/wp-content/uploads/2016/08/pihole_conditiional_forwarding-300x85.png 300w, https://www.bubuxblog.de/wp-content/uploads/2016/08/pihole_conditiional_forwarding-768x219.png 768w, https://www.bubuxblog.de/wp-content/uploads/2016/08/pihole_conditiional_forwarding.png 1930w" sizes="auto, (max-width: 768px) 100vw, 768px" /></a></p>
<h1>&nbsp;</h1>
<h1>Geschafft!</h1>
<p>Soviel zur Installation und Konfiguration von Pi-hole! Es kann ein paar Minuten dauern bis die Hostnamen im lokalen Netz wieder aufgelöst werden. Ab nun laufen die DNS-Anfragen aller im Heimnetz eingebundenen Geräte (LAN oder WLAN) über den Pi-hole und alles ist werbefrei!</p>
<h1>&nbsp;</h1>
<h1>Portkonflikt</h1>
<p>Die Weboberfläche von Pi-hole erreicht man standardmäßig über den HTTP-Port 80. Da bei mir auf dem Raspberry aber parallel noch ein Apache werkelt, konnt der lighttpd nicht auf Port 80 gestartet werden. Eine entsprechende Fehlermeldung kam am Ende der Installation. Daher musste ich den Port des lighttpd noch ändern. Dazu die Konfiguration des lighttpd mit</p>
<pre class="">sudo vim /etc/lighttpd/lighttpd.conf</pre>
<p>editieren (nach &#8222;80&#8220; suchen und den Wert hinter <em>server.port</em> auf den gewünschten Port stellen). Anschliessend den lighttpd-Service mit folgendem Befehl neu starten:</p>
<pre class="">sudo service lighttpd restart</pre>
<p>Leider muss diese Änderung aktuell nach jedem Update gemacht werden da die Konfiguration standardmäßig wieder den Port 80 nutzt.</p>
<h1>&nbsp;</h1>
<h1>Daten per JSON abfragen</h1>
<p>Verschiedene der in der Adminoberfläche angezeigten Information können auch sehr einfach über eine JSON-Schnittstelle abgefragt werden. Die Adresse ist http://&lt;servername&gt;:&lt;port&gt;/admin/api.php. Hier ein kurzes Beispiel um diese Abfrage in PHP zu realsieren und ein Screenshot der Implementierung in meiner Hausübersicht (links unten).</p>
<p>&nbsp;</p>
<pre class="">$json = file_get_contents('http://&lt;servername&gt;:&lt;port&gt;/admin/api.php');
$data = json_decode($json);
print "Domains blockiert: ".$data-&gt;{'domains_being_blocked'};
print "DNS-Abfragen: ".$data-&gt;{'dns_queries_today'};
print "Blockierte Werbung: ".$data-&gt;{'ads_blocked_today'};
print "Prozentuale Werbung: ".$data-&gt;{'ads_percentage_today'};</pre>
<p><a href="http://blog.bubux.de/wp-content/uploads/2016/08/pihole_heimnetz.png"><img loading="lazy" decoding="async" class="alignnone size-large wp-image-1230" src="http://blog.bubux.de/wp-content/uploads/2016/08/pihole_heimnetz-1024x635.png" alt="pihole_heimnetz" width="768" height="476" srcset="https://www.bubuxblog.de/wp-content/uploads/2016/08/pihole_heimnetz-1024x635.png 1024w, https://www.bubuxblog.de/wp-content/uploads/2016/08/pihole_heimnetz-300x186.png 300w, https://www.bubuxblog.de/wp-content/uploads/2016/08/pihole_heimnetz-768x476.png 768w, https://www.bubuxblog.de/wp-content/uploads/2016/08/pihole_heimnetz.png 1053w" sizes="auto, (max-width: 768px) 100vw, 768px" /></a></p>
<h1>&nbsp;</h1>
<h1>Konsole anstatt Weboberfläche</h1>
<p>Neben der Weboberfläche kann man auch auf der Konsole mittels <em>pihole [option]</em> verschiedene Funktionen aufrufen.</p>
<p>So kann zum Beispiel die Liste der Werbe-Domains aktualisiert werden:</p>
<pre class="">pihole -g</pre>
<p>Update des Pi-hole:</p>
<pre class="">pihole -up</pre>
<p class="">Zeigt alle möglichen Optionen:</p>
<pre class="">pihole -h</pre>
<p>&nbsp;</p>
<p>So, und nun viel Spaß mit einem größtenteil werbefreien Internet!</p>
<p>&nbsp;</p>
<p>Gruß</p>
<p>Chris</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bubuxblog.de/werbung-blockieren-mit-pi-hole/feed/</wfw:commentRss>
			<slash:comments>1</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>Feinstaub messen &#8211; NodeMCU und SDS011</title>
		<link>https://www.bubuxblog.de/feinstaub-messen-nodemcu-und-sds011/</link>
					<comments>https://www.bubuxblog.de/feinstaub-messen-nodemcu-und-sds011/#comments</comments>
		
		<dc:creator><![CDATA[diefenbecker]]></dc:creator>
		<pubDate>Sun, 26 Feb 2017 15:53:00 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[ESP8266]]></category>
		<category><![CDATA[Odroid]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[Feinstaub]]></category>
		<category><![CDATA[Feinstaubsensor]]></category>
		<category><![CDATA[PM10]]></category>
		<category><![CDATA[PM2.5]]></category>
		<category><![CDATA[Umwelt]]></category>
		<guid isPermaLink="false">http://blog.bubux.de/?p=1337</guid>

					<description><![CDATA[Ein Artikel aus der Make: IoT Special 1/2017 erregte mein Interesse. Es ging um die Feinstaubmessung mittels Raspberry Pi und einem entsprechenden Sensor. Der dort genutzte Sensor ist ein Nova PM SDS011 den man für ~23 € in China bekommt. Recht teuer im Vergleich zu den sonstigen Artikel aus China. Der Sensor saugt mit der [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Ein Artikel aus der <a href="https://shop.heise.de/katalog/make-iot-special" target="_blank">Make: IoT Special 1/2017</a> erregte mein Interesse. Es ging um die Feinstaubmessung mittels Raspberry Pi und einem entsprechenden Sensor. Der dort genutzte Sensor ist ein Nova PM SDS011 den man für ~23 € in China bekommt. Recht teuer im Vergleich zu den sonstigen Artikel aus China. Der Sensor saugt mit der Hilfe eines Lüfters Luft in eine Kammer welche dann mittels Laser &#8222;beschossen&#8220; wird. Durch die Streuung des zurückgeworfenen Laserlichtes werden die Luftpartikel (Größe und Menge) gemessen.</p>
<p>Der Sensor kann zwei Partikelgrößen parallel messen:<br />
&#8211; PM<sub>10</sub>, inhalierbarer Feinstaub mit 10µm Durchmesser<br />
&#8211; PM<sub>2,5</sub>, lungengängiger (alveolengängiger) Feinstaub mit im Mittel 2,5 µm Durchmesser</p>
<p>Mehr zu diesem Thema gibt&#8217;s im <a href="https://de.wikipedia.org/wiki/Feinstaub" target="_blank">Wikipedia-Artikel</a>.</p>
<p>Also, Sensor bestellt und drei Wochen später ohne Zollprobleme frei Haus geliefert bekommen.</p>
<p>Der Sensor kommt mit USB-Adapter für den einfachen Anschluss am Odroid (oder auch am Raspberry Pi wie im Artikel beschrieben). Im Make-Artikel wird ein Shellscript vorgestellt, mit dem die Sensordaten gelesen und verarbeitet werden. Ich habe am Ende des Scriptes nur noch eine Zeile zum Speichern der Daten in meine MySQL-Datenbank eingefügt. D.h. nach 10 Minuten Bastelei lief schon alles&#8230;das war fast zu einfach. Das Script wurde dann alle 10 Minuten per Cron aufgerufen um die gemessenen Daten in meine MySQL-Tabelle zu schreiben. Der Lüfter des Sensors läuft bei dieser Lösung durchgehend (dazu unten mehr).</p>
<p><span id="more-1337"></span></p>
<p>Jetzt konnte ich die Feinstaubbelastung im Heizungsraum bestimmen. Irgendwie musste der Sensor nun noch nach draußen. Da ich kein Loch in den Fensterrahmen bohren wollte, stellte sich das als Problem heraus.</p>
<p>Auf der Suche nach einer kabellosen Lösung und mit einem <a href="http://www.nodemcu.com/index_en.html" target="_blank">NodeMcu</a> in der Schublade, bin ich nach kurzer Internet-Recherche auf die Webseite <a href="http://luftdaten.info" target="_blank">http://luftdaten.info</a> aus Stuttgart gestoßen. Dort wird eine sehr einfache <a href="http://luftdaten.info/feinstaubsensor-bauen/" target="_blank">Selbstbaulösung</a> zur Feinstaubmessung auf Basis des NodeMcu vorgestellt. Es werden verschiedenen Sensoren zur Feinstaubmessung und Temperatur- und Luftfeuchtemessung unterstützt. Unter anderem ist dort auch der im Make-Artikel verwendete SDS011-Feinstaubsensor integriert. Die Firmware gibt es als Bin auf der Webseite zum Download und die Quellen bei <a href="https://github.com/opendata-stuttgart" target="_blank">Github</a>. Die Lösung mit den HT-Rohren als Gehäuse fand ich auch sehr gelungen und günstig. Das Aufspielen der Firmware, die Verkabelung und Verstauung der wenigen Teile im HT-Rohr sind in wenigen Minuten erledigt.</p>
<p><figure id="attachment_1343" aria-describedby="caption-attachment-1343" style="width: 768px" class="wp-caption alignnone"><a href="http://blog.bubux.de/wp-content/uploads/2017/02/feinstaubsensor_nodemcu.jpg"><img loading="lazy" decoding="async" class="wp-image-1343 size-large" src="http://blog.bubux.de/wp-content/uploads/2017/02/feinstaubsensor_nodemcu-1024x576.jpg" alt="SDS011-Sensor mit NodeMCU" width="768" height="432" srcset="https://www.bubuxblog.de/wp-content/uploads/2017/02/feinstaubsensor_nodemcu-1024x576.jpg 1024w, https://www.bubuxblog.de/wp-content/uploads/2017/02/feinstaubsensor_nodemcu-300x169.jpg 300w, https://www.bubuxblog.de/wp-content/uploads/2017/02/feinstaubsensor_nodemcu-768x432.jpg 768w" sizes="auto, (max-width: 768px) 100vw, 768px" /></a><figcaption id="caption-attachment-1343" class="wp-caption-text">SDS011-Sensor mit NodeMCU</figcaption></figure></p>
<p><figure id="attachment_1346" aria-describedby="caption-attachment-1346" style="width: 254px" class="wp-caption alignright"><a href="http://blog.bubux.de/wp-content/uploads/2017/02/lufdateninfo_karte.png"><img loading="lazy" decoding="async" class="wp-image-1346 size-medium" src="http://blog.bubux.de/wp-content/uploads/2017/02/lufdateninfo_karte-254x300.png" alt="luftdaten.info Map" width="254" height="300" srcset="https://www.bubuxblog.de/wp-content/uploads/2017/02/lufdateninfo_karte-254x300.png 254w, https://www.bubuxblog.de/wp-content/uploads/2017/02/lufdateninfo_karte-768x908.png 768w, https://www.bubuxblog.de/wp-content/uploads/2017/02/lufdateninfo_karte.png 827w" sizes="auto, (max-width: 254px) 100vw, 254px" /></a><figcaption id="caption-attachment-1346" class="wp-caption-text">luftdaten.info Map</figcaption></figure></p>
<p>Nach Anschluss des NodeMcu an ein herkömmliches USB-Netzteil ist der NodeMcu als Access Point (AP) unter der Standardadresse <em>http://192.168.4.1/</em> eines ESP8266 erreichbar. Dort können dann unter anderem die Zugangsdaten für das eigene Wifi-Netzwerk eingerichtet werden. Zudem können die angeschlossenen Sensoren ausgewählt werden sowie die Übertragung der ermittelten Daten an verschiedene Datenbanken z.B. zur Aufnahme in die <a href="http://deutschland.maps.luftdaten.info/" target="_blank">Karte</a> de/aktiviert werden. Hier gibt es auch die Möglichkeit eine API zur eigenen Verarbeitung der Daten anzusprechen. Das funktionierte bei mir leider nicht, so das ich im ersten Anlauf die vom NodeMCU generierte Webseite parsen musste um die Daten in meine MySQL-Tabelle zu speichern. Schon ein paar Tage später konnte man aber mittels der neuen Firmware (die OTA ausgeliefert wird, wenn aktiviert) die Sensordaten per JSON abfragen. Das ist komfortabler und zukunftssicherer als das Parsen der HTML-Seite.</p>
<p>Hier ein PHP-Beispiel zum parsen der JSON-Daten welches z.B. auch per Cron aufgerufen werden kann:</p>
<pre class="">
<?
$json = file_get_contents('http://<url_zum_modemcu>/data.json');
$json_ergebnis=json_decode($json);

$PM10=$json_ergebnis->sensordatavalues[0]->value;
$PM25=$json_ergebnis->sensordatavalues[1]->value;
?>
</pre>
<p>Die Lösung aus Stuttgart unterstützt den Sleep-Mode des Sensors der in der Lösung der Make nicht genutzt wurde. D.h. die Messung und der Lüfter werden nur alle ~30 Sekunden gestartet anstatt dauerhaft zu laufen. Das erhöht die Lebenserwartung des Sensors die mit 8000 Betriebsstunden angesetzt ist. Nach dem Sommer werde ich mal die Luftkammer des Sensors öffnen und schauen was sich dort so angesammelt hat.</p>
<p>Die mittels JSON in einer Datenbank gesammelten Daten werte ich auf meiner Webseite aus. Das schaut dann wie folgt aus (zweimal war der Sensor nicht aktiv):</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2017/02/feinstaub_webseite.png"><img loading="lazy" decoding="async" class="alignnone size-large wp-image-1336" src="http://blog.bubux.de/wp-content/uploads/2017/02/feinstaub_webseite-1024x497.png" alt="" width="768" height="373" srcset="https://www.bubuxblog.de/wp-content/uploads/2017/02/feinstaub_webseite-1024x497.png 1024w, https://www.bubuxblog.de/wp-content/uploads/2017/02/feinstaub_webseite-300x145.png 300w, https://www.bubuxblog.de/wp-content/uploads/2017/02/feinstaub_webseite-768x372.png 768w" sizes="auto, (max-width: 768px) 100vw, 768px" /></a></p>
<p>Die Weltgesundheitsorganisation (WHO) hat folgende Richtwerte für Feinstaubgrenzwerte heraus gegeben:</p>
<p>
<table id="tablepress-2" class="tablepress tablepress-id-2">
<tbody class="row-striping row-hover">
<tr class="row-1">
	<td class="column-1">Jahresmittel PM<sub>10</sub></td><td class="column-2">20 µg/m³</td>
</tr>
<tr class="row-2">
	<td class="column-1">Jahresmittel PM<sub>2,5</sub></td><td class="column-2">10 µg/m³</td>
</tr>
<tr class="row-3">
	<td class="column-1">Tagesmittel PM<sub>10</sub></td><td class="column-2">50 µg/m³ ohne zulässige Tage, an denen eine Überschreitung möglich ist</td>
</tr>
<tr class="row-4">
	<td class="column-1">Tagesmittel PM<sub>2,5</sub></td><td class="column-2">25 µg/m³ ohne zulässige Tage, an denen eine Überschreitung möglich ist</td>
</tr>
</tbody>
</table>
<!-- #tablepress-2 from cache --></p>
<p>Somit sind wir hier trotz plattem Land schon recht nah (bzw. darüber -> Tagesmittel PM<sub>2,5</sub>) an den Werten der WHO dran. </p>
<p>Die Initiative aus Stuttgart zur einfachen Feinstaubmessung finde ich eine super Sache! Vielleicht findet sich ja noch der ein oder andere Nachbauer um die Karte zu füllen.</p>
<p>Gruß Chris</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bubuxblog.de/feinstaub-messen-nodemcu-und-sds011/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
			</item>
		<item>
		<title>Amazon Kindle als Statusdisplay</title>
		<link>https://www.bubuxblog.de/kindle-status-display/</link>
					<comments>https://www.bubuxblog.de/kindle-status-display/#comments</comments>
		
		<dc:creator><![CDATA[diefenbecker]]></dc:creator>
		<pubDate>Wed, 16 Mar 2016 20:33:06 +0000</pubDate>
				<category><![CDATA[Heimautomatisierung]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[FHEM]]></category>
		<category><![CDATA[Homeautomation]]></category>
		<category><![CDATA[Kindle]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Raspberry PI]]></category>
		<category><![CDATA[RaspberryPI]]></category>
		<category><![CDATA[Snippet]]></category>
		<category><![CDATA[Statusdisplay]]></category>
		<category><![CDATA[Wetter]]></category>
		<guid isPermaLink="false">http://blog.bubux.de/?p=1123</guid>

					<description><![CDATA[Die Anzeige aller im Haus gesammelter Daten über eine Webseite ist nett (siehe Screenshot), benötigt aber einen Rechner, Handy, Tablet etc. wo diese Seite im Browser anzeigt wird. Unschön dabei ist, das wenn man schnell die Außentemperatur wissen will, immer erst das Gerät anschalten oder aufwecken muss, einen Webbrowser öffnen muss, die Webseite aufruft und [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><figure id="attachment_1137" aria-describedby="caption-attachment-1137" style="width: 351px" class="wp-caption alignright"><a href="http://blog.bubux.de/wp-content/uploads/2016/03/startseite_intranet.png" rel="attachment wp-att-1137"><img loading="lazy" decoding="async" class="wp-image-1137" src="http://blog.bubux.de/wp-content/uploads/2016/03/startseite_intranet-1024x525.png" alt="startseite_intranet" width="351" height="180" srcset="https://www.bubuxblog.de/wp-content/uploads/2016/03/startseite_intranet-1024x525.png 1024w, https://www.bubuxblog.de/wp-content/uploads/2016/03/startseite_intranet-300x154.png 300w, https://www.bubuxblog.de/wp-content/uploads/2016/03/startseite_intranet-768x394.png 768w, https://www.bubuxblog.de/wp-content/uploads/2016/03/startseite_intranet.png 1029w" sizes="auto, (max-width: 351px) 100vw, 351px" /></a><figcaption id="caption-attachment-1137" class="wp-caption-text">Webseite &#8211; Übersicht</figcaption></figure></p>
<p>Die Anzeige aller im Haus gesammelter Daten über eine Webseite ist nett (siehe Screenshot), benötigt aber einen Rechner, Handy, Tablet etc. wo diese Seite im Browser anzeigt wird. Unschön dabei ist, das wenn man schnell die Außentemperatur wissen will, immer erst das Gerät anschalten oder aufwecken muss, einen Webbrowser öffnen muss, die Webseite aufruft und wartet bis die Seite geöffnet wird. Das ist für einen kurzen Blick auf die Temperatur eher unpraktisch.</p>
<p>Es musste eine Anzeigemöglichkeit für die wichtigsten Daten her, welche immer angeschaltet ist. Nach kurzer Recherche im Internet stellte sich ein Amazon Kindle als Statusdisplay aufgrund des E-Paper-Displays als stromsparender Anwärter auf diesen Job heraus. Also schnell einen Kindle 4 (kein Touch) im Internet für ~ 30€ besorgt (da ich bisher keinen besaß).</p>
<h3>Lösungsansätze</h3>
<p>Es gibt verschiedene Ansätze den Kindle als Statusdisplay (z.B. für Wetterinformationen) zu nutzen. Es gibt Lösungen wie <a href="http://www.mobiflip.de/kindl-eink-info-display/" target="_blank">hier</a> beschrieben die den Browser des Kindle nutzen. Besser gefielen mir aber die Lösungen die den Bildschirmschoner des Kindle zur Anzeige eines Statusbildes nutzen. Das macht unter anderem die <a href="http://www.fhemwiki.de/wiki/Kindle_Display" target="_blank">Lösung für FHEM</a>, als auch die Lösung von <a href="https://mpetroff.net/2012/09/kindle-weather-display/" target="_blank">Matthew Petroff</a> (von dem die FHEM-Lösung wahrscheinlich auch abgeleitet ist). Basierend auf dieser Lösung ist ausserdem <a href="http://www.shatteredhaven.com/2012/11/1347365-kindle-weather-display.html" target="_blank">diese hier</a> mit weiterführenden Erklärungen der nötigen Schritte.<br />
Ich bevorzuge anstelle der FHEM-Lösung die ursprüngliche Version, da ich nicht nur Daten aus FHEM anzeigen will, sondern auch Daten aus meiner MySQL-Datenbank und zusätzliche Informationen die direkt aus dem Internet stammen.</p>
<p>Den Kindle habe ich übrigens mittels <a href="http://avm.de/ratgeber/sicherheit/rundum-geschuetzt-mit-der-kindersicherung/" target="_blank">&#8222;Kindersicherung&#8220; der FritzBox</a> vom Internet gekappt falls Amazon auf komische Gedanken kommt und mir mit einem gutgemeinten Online-Update irgendwas zerschießt.</p>
<p>Die Lösung, den Bildschirmschoner des Kindle mit einem im Netzwerk bereitgestelltem Bild zu nutzen, benötigt verschiedene Anpassungen des Kindle als auch einige Komponenten die auf einem Server bereit gestellt werden müssen (bei mir der Raspberry PI).</p>
<h3>Beschreibung</h3>
<p>Die Beschreibung der nötigen Schritte und die benötigte Software sind <a href="https://mpetroff.net/2012/09/kindle-weather-display/" target="_blank">hier</a> (<em>ursprüngliche Idee</em>), <a href="http://www.shatteredhaven.com/2012/11/1347365-kindle-weather-display.html" target="_blank">hier</a> (<em>erweiterte Anleitung</em>) und <a href="http://fnordig.de/2015/05/14/using-a-kindle-for-status-information/" target="_blank">hier</a> (<em>ausführliche Anleitung</em>) erklärt. Aus diesem Grund liste ich die nötigen Arbeitsschritte hier nur Stichpunktartig auf:</p>
<p><em><strong>Kindle:</strong></em></p>
<ul>
<ul>
<li><a href="http://wiki.mobileread.com/wiki/Kindle4NTHacking" target="_blank">Jailbreak</a> des Kindle damit man damit auch anständig arbeiten kann</li>
<li>SSH für Kindle (<a href="http://www.mobileread.com/forums/showthread.php?t=88004" target="_blank">USBNetwork Hacks</a>)
<ul>
<li><a href="https://www.sven.de/kindle/" target="_blank">Root-Passwort</a> für den Kindle ermitteln</li>
</ul>
</li>
<li>Kite <a href="http://www.mobileread.com/forums/showthread.php?t=168270" target="_blank">installieren</a> um nach dem Starten des Kindle das Init-Script (<em>init_daten.sh</em>) ausführen zu lassen
<ul>
<li>Stoppen von <em>powerd</em>
<ul>
<li>das ist nötig, da im Sleep-Mode der Cronjob nicht ausgeführt wird</li>
<li>(&#8222;@reboot&#8220; in crontab funktioniert leider auf dem Kindle nicht)</li>
</ul>
</li>
<li>Stoppen von <em>framework</em></li>
</ul>
</li>
<li>Cronjob einrichten um alle x Minuten/Stunden ein aktualisiertes Bild per wget zu laden
<ul>
<li><em>vi /etc/crontab/root</em></li>
<li><em>*/10 5-22 * * * /mnt/us/anzeige/zeige_daten.sh</em> (alle 10 Minuten zwischen 5 und 22 Uhr</li>
</ul>
</li>
</ul>
</ul>
<p><em><strong>Server:</strong></em></p>
<ul>
<ul>
<ul>
<li>Python-Script anpassen
<ul>
<li>Das Python-Script sammelt die Daten, ersetzt die Platzhalter im SVG und erstellt daraus das PNG mittels <em>rsvg-convert</em> und <em>pngcrush</em></li>
</ul>
</li>
<li>Cronjob zur Ausführung des Python-Script anlegen
<ul>
<li><em>*/3 * * * * /var/www/kindle/daten-script.sh &amp;&gt; /dev/null</em></li>
</ul>
</li>
<li>SVG-Template anpassen (mit Editor und/oder <a href="https://inkscape.org/de/" target="_blank">Inkscape</a>)
<ul>
<li><a href="http://blog.bubux.de/wp-content/uploads/2016/03/daten_script_preprocess.svg" target="_blank">hier</a> mein SVG für die Datenanzeige und</li>
<li><a href="http://blog.bubux.de/wp-content/uploads/2016/03/sleep_preprocess.svg" target="_blank">hier</a> für zwischen 23 und 5 Uhr</li>
<li><em>bei Änderungen mit Inkscape nicht im &#8222;Inkscape-Format&#8220; abspeichern sondern als &#8222;Normales SVG&#8220;</em></li>
</ul>
</li>
<li><a href="http://developer.gnome.org/rsvg/stable/" target="_blank">rsvg-convert</a> installieren (<em>sudo apt-get install librsvg2-bin</em>)</li>
<li><a href="http://en.wikipedia.org/wiki/Pngcrush" target="_blank">pngcrush</a> installieren (<em>sudo apt-get install pngcrush</em>)</li>
</ul>
</ul>
</ul>
<p>(Achtung! Die Dateinamen der Scripte in den Cron-Beispielen und die Dateinamen der SVG´s sind anders als in den oben verlinkten Anleitungen)</p>
<h3>Python-Script</h3>
<p>Das ursprüngliche Python-Script holt das Wetter von einer Webseite aus den USA. Das Wetter dort hat mich nicht wirklich interessiert und so habe ich das Script etwas angepaßt und verschiedene Wetterdaten und Statusinformationen aus meinen eigenen Quellen (FHEM und MySQL) gezogen.<br />
Zur Anzeige der Wettericons nutze ich teilweise die Bilder aus dem ursprünglichen SVG. Einige habe ich allerdings gelöscht da ich hier z.B. keinen Blizzard erwarte. Die Werte für den Luftdruck und die Windstärke sowie die Auswahl des aktuellen Wetter-Icon erfolgt über die &#8222;condition&#8220; des <a href="http://www.fhemwiki.de/wiki/Weather" target="_blank">FHEM-Yahoo-Wetter-Moduls</a>.</p>
<p>Mein Pythonscript sieht wie folgt aus:</p>
<p><strong>Bitte das Update im <a href="http://blog.bubux.de/amazon-kindle-als-statusdisplay-update/">nachfolgendem Artikel</a> beachten!!</strong></p>
<pre class="lang:python theme:twilight">
#!/usr/bin/python2

import codecs
import telnetlib
import MySQLdb
from datetime import datetime, time

################
# Hole FHEM data
################
tnet_host= "localhost"
tnet_port= 7072
def fhem_task(fcmd):
    tc= telnetlib.Telnet(tnet_host,tnet_port)
    tc.write(fcmd)
    erg= tc.read_until( "\n" )
    tc.close()
    return erg

# Abwesenheit
if "off" in fhem_task("list ABWESENHEIT STATE\r\n"):
    abwesenheit="nicht gesetzt"
if "on" in fhem_task("list ABWESENHEIT STATE\r\n"):
    abwesenheit="gesetzt"

# Fenster
anz_fenster_offen=0;
if "open" in fhem_task("get FensterHeizung param STATE\r\n"):
    anz_fenster_offen += 1
if "open" in fhem_task("get FensterKeller param STATE\r\n"):
    anz_fenster_offen += 1
if "open" in fhem_task("get FensterGaestezimmer1 param STATE\r\n"):
    anz_fenster_offen += 1
if "open" in fhem_task("get FensterGaestezimmer2 param STATE\r\n"):
    anz_fenster_offen += 1
if "open" in fhem_task("get FensterBuero1 param STATE\r\n"):
    anz_fenster_offen += 1
if "open" in fhem_task("get FensterBuero2 param STATE\r\n"):
    anz_fenster_offen += 1
if "open" in fhem_task("get FensterWohnen1 param STATE\r\n"):
    anz_fenster_offen += 1
if "open" in fhem_task("get FensterWohnen2 param STATE\r\n"):
    anz_fenster_offen += 1
if "open" in fhem_task("get FensterWohnen3 param STATE\r\n"):
    anz_fenster_offen += 1
if "open" in fhem_task("get FensterWohnen4 param STATE\r\n"):
    anz_fenster_offen += 1
if "open" in fhem_task("get FensterGaestebad param STATE\r\n"):
    anz_fenster_offen += 1
if "open" in fhem_task("get FensterSpind param STATE\r\n"):
    anz_fenster_offen += 1
if "open" in fhem_task("get FensterBad1 param STATE\r\n"):
    anz_fenster_offen += 1
if "open" in fhem_task("get Garagentor param STATE\r\n"):
    stat_garage="offen"
else:
    stat_garage="geschlossen"

# Wetter
try:
    condition=str.split(fhem_task("get MeinWetter condition\r\n"))
    if len(condition)==5:
        wetter_icon=condition[3] + " " + condition[4]
    else:
        wetter_icon=condition[3]
except:
    wetter_icon="Fehler"


luftdruck=str.split(fhem_task("get MeinWetter pressure\r\n"))
tendenz=str.split(fhem_task("get MeinWetter pressure_trend_txt\r\n"))
wind=str.split(fhem_task("get MeinWetter wind_speed\r\n"))

####################
# Datenbank auslesen
####################
db = MySQLdb.connect(host="localhost", user="<benutzer>", passwd="<password>", db="<dbname>")        		
cur = db.cursor()
cur.execute("SELECT MIN(aussentemperatur), MAX(aussentemperatur) FROM temperaturen WHERE timestamp >= DATE(NOW()) ORDER BY timestamp")
for row in cur.fetchall():
    mintemp=round(row[0],2)
    maxtemp=round(row[1],2)

db.close()


################
# Preprocess SVG
################
now = datetime.now()
now_time = now.time()
if time(5,50) <= now.time() <= time(22,50):  
    # Open SVG to process
    output = codecs.open('daten_script_preprocess.svg', 'r', encoding='utf-8').read()
    # Insert icons and temperatures
    output = output.replace('ICON_ONE',wetter_icon.decode("utf-8"))
    output = output.replace('WETTER_BESCHR',wetter_icon.decode("utf-8"))
    output = output.replace('TEMP_A',fhem_task("get Aussenthermometer param temperature\r\n"))
    output = output.replace('LUFT_A',fhem_task("get Aussenthermometer param humidity\r\n"))
    output = output.replace('MIN_TEMP',str(mintemp))
    output = output.replace('MAX_TEMP',str(maxtemp))
    output = output.replace('DRUCK_A',luftdruck[3])
    output = output.replace('TENDENZ',tendenz[3])
    output = output.replace('WIND_A',wind[3])
    output = output.replace('ANZ_FENSTER',str(anz_fenster_offen))
    output = output.replace('STAT_ABWESENHEIT',abwesenheit)
    output = output.replace('STAT_GARAGE',stat_garage)
    output = output.replace('DATUM_UHRZEIT',datetime.strftime(datetime.now(), '%d.%m.%Y %H:%M:%S'))
    # Write output
    codecs.open('daten_script_output.svg', 'w', encoding='utf-8').write(output)
else:
    # Open SVG to process
    output = codecs.open('sleep_preprocess.svg', 'r', encoding='utf-8').read()
    output = output.replace('DATUM_UHRZEIT',datetime.strftime(datetime.now(), '%d.%m.%Y %H:%M:%S'))
    # Write output
    codecs.open('daten_script_output.svg', 'w', encoding='utf-8').write(output)
</pre>
<p>Es werden verschiedene Information aus FHEM mittels Telnet abgefragt und Daten aus einer MySQL-Datenbank (min/max-Werte) ermittelt. Neben Temperaturwerten zeige ich z.B. auch noch den Status der Fenster, des Garagentores und der Abwesenheitssteuerung an. Zwischen 5:50 und 22:50 Uhr wird alle 10 Minuten ein aktualisiertes Bild der Statusinformationen angezeigt, in der anderen Zeit ein Bild eines schlafenden Männchens. In dieser Zeit fragt der Kindle auch kein neues Bild per <em>wget</em> ab.</p>
<h3>Ergebnis</h3>
<p>Im Ergebnis schaut es dann so aus:</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2016/03/kindle_statusdisplay-e1457800839248.jpg" rel="attachment wp-att-1125"><img loading="lazy" decoding="async" class="alignnone wp-image-1125" src="http://blog.bubux.de/wp-content/uploads/2016/03/kindle_statusdisplay-e1457800839248-768x1024.jpg" alt="kindle_statusdisplay" width="610" height="813" srcset="https://www.bubuxblog.de/wp-content/uploads/2016/03/kindle_statusdisplay-e1457800839248-768x1024.jpg 768w, https://www.bubuxblog.de/wp-content/uploads/2016/03/kindle_statusdisplay-e1457800839248-225x300.jpg 225w, https://www.bubuxblog.de/wp-content/uploads/2016/03/kindle_statusdisplay-e1457800839248.jpg 1944w" sizes="auto, (max-width: 610px) 100vw, 610px" /></a></p>
<p>Und hier die Anzeige für Nachts:</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2016/03/kindle_statusdisplay2.jpg" rel="attachment wp-att-1152"><img loading="lazy" decoding="async" class="alignnone wp-image-1152 " src="http://blog.bubux.de/wp-content/uploads/2016/03/kindle_statusdisplay2-e1458156959657-768x1024.jpg" alt="kindle_statusdisplay2" width="610" height="813" srcset="https://www.bubuxblog.de/wp-content/uploads/2016/03/kindle_statusdisplay2-e1458156959657-768x1024.jpg 768w, https://www.bubuxblog.de/wp-content/uploads/2016/03/kindle_statusdisplay2-e1458156959657-225x300.jpg 225w, https://www.bubuxblog.de/wp-content/uploads/2016/03/kindle_statusdisplay2-e1458156959657.jpg 1944w" sizes="auto, (max-width: 610px) 100vw, 610px" /></a></p>
<p>Als Erweiterung werde ich evtl. noch während der Heizperiode mit dem Kachelofen oder abhängig der Puffertemperatur, die obere und untere Temperatur des Pufferspeichers anstelle des Luftdruckes und der Windinformation anzeigen. Die Puffertemperatur ist in der Regel unser Maßstab ob Holz nachgelegt werden muss oder nicht.</p>
<p>Es könnte z.B. auch eine Display füllende Information ausgegeben werden wenn eine der Batterien der Fensterkontakte leer ist oder ein Warnhinweis falls die Heizung eine Störung oder anstehende Wartung anzeigt. Im Python-Script würde ich dann analog dem "Schlaf-Bild" ein spezielles PNG aus einem weiteren SVG erzeugen.<br />
&nbsp;</p>
<p>Chris</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bubuxblog.de/kindle-status-display/feed/</wfw:commentRss>
			<slash:comments>16</slash:comments>
		
		
			</item>
		<item>
		<title>Raspberry PI 24/7 operation &#8211; Update</title>
		<link>https://www.bubuxblog.de/raspberry-pi-247-operation-update/</link>
					<comments>https://www.bubuxblog.de/raspberry-pi-247-operation-update/#respond</comments>
		
		<dc:creator><![CDATA[diefenbecker]]></dc:creator>
		<pubDate>Sat, 21 Mar 2015 16:32:55 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<guid isPermaLink="false">http://blog.bubux.de/?p=893</guid>

					<description><![CDATA[Nach den Anpassungen für den Neustart des Netzwerkinterfaces wie in Artikel &#8222;Stabiler 24/7 Betrieb des Raspberry&#8220; beschrieben, läuft der Minirechner heute genau seit 100 Tagen. Sehr gut! After the adjustments to restart the network interface as described in post &#8222;Stabiler 24/7 Betrieb des Raspberry&#8222;, the Raspberry PI runs just fine for 100 days now. Very [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Nach den Anpassungen für den Neustart des Netzwerkinterfaces wie in Artikel &#8222;<span style="text-decoration: underline;"><a title="Stabiler 24/7 Betrieb des Raspberry – Netzwerk neu starten" href="http://blog.bubux.de/?p=631">Stabiler 24/7 Betrieb des Raspberry</a></span>&#8220; beschrieben, läuft der Minirechner heute genau seit 100 Tagen. Sehr gut!</p>
<p id="tw-target-text" class="tw-data-text vk_txt tw-ta tw-text-small" dir="ltr" data-placeholder="Übersetzung"><span style="color: #003366;">After the adjustments to restart the network interface as described in post &#8222;<span style="text-decoration: underline;"><a style="color: #003366; text-decoration: underline;" title="Stabiler 24/7 Betrieb des Raspberry – Netzwerk neu starten" href="http://blog.bubux.de/?p=631">Stabiler 24/7 Betrieb des Raspberry</a></span>&#8222;, the Raspberry PI runs just fine for 100 days now. Very good!</span></p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2015/03/raspi_uptime.jpg"><img loading="lazy" decoding="async" class="alignnone wp-image-892 size-full" src="http://blog.bubux.de/wp-content/uploads/2015/03/raspi_uptime.jpg" alt="Raspberry Pi Uptime" width="675" height="425" srcset="https://www.bubuxblog.de/wp-content/uploads/2015/03/raspi_uptime.jpg 675w, https://www.bubuxblog.de/wp-content/uploads/2015/03/raspi_uptime-300x189.jpg 300w" sizes="auto, (max-width: 675px) 100vw, 675px" /></a></p>
<p>Chris</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bubuxblog.de/raspberry-pi-247-operation-update/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>
		<item>
		<title>M-BUS &#8211; Wasserzähler</title>
		<link>https://www.bubuxblog.de/m-bus-wasserzaehler/</link>
					<comments>https://www.bubuxblog.de/m-bus-wasserzaehler/#comments</comments>
		
		<dc:creator><![CDATA[diefenbecker]]></dc:creator>
		<pubDate>Sat, 13 Dec 2014 15:17:02 +0000</pubDate>
				<category><![CDATA[Haustechnik]]></category>
		<category><![CDATA[Heimautomatisierung]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[Hausautomatisierung]]></category>
		<category><![CDATA[M-Bus]]></category>
		<category><![CDATA[Meter-Bus]]></category>
		<category><![CDATA[Raspberry PI]]></category>
		<category><![CDATA[RaspberryPI]]></category>
		<category><![CDATA[Wärmemengenzähler]]></category>
		<category><![CDATA[Wasserzähler]]></category>
		<guid isPermaLink="false">http://blog.bubux.de/?p=663</guid>

					<description><![CDATA[Von einem Freund habe ich einen M-Bus (Meter-Bus) Wasserzähler und einen Wärmemengenzähler bekommen. Der M-BUS ist ein Feldbus der über eine Zweidrahtleitung über sehr lange Strecken genutzt werden kann. Ein M-BUS Master fragt dabei alle Slaves im Strang oder Stern ab. Die Slaves werden teilweise vom M-Bus-Master mit Spannung versorgt. Mehr Details im Wiki. Der [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Von einem Freund habe ich einen M-Bus (Meter-Bus) Wasserzähler und einen Wärmemengenzähler bekommen. Der M-BUS ist ein Feldbus der über eine Zweidrahtleitung über sehr lange Strecken genutzt werden kann. Ein M-BUS Master fragt dabei alle Slaves im Strang oder Stern ab. Die Slaves werden teilweise vom M-Bus-Master mit Spannung versorgt. Mehr Details im <a title="M-BUS Wikipedia" href="http://de.wikipedia.org/wiki/M-Bus_%28Feldbus%29" target="_blank">Wiki</a>.</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2014/11/IMG_7712.jpg"><img loading="lazy" decoding="async" class="alignnone wp-image-653 size-medium" src="http://blog.bubux.de/wp-content/uploads/2014/11/IMG_7712-300x200.jpg" alt="Techem Wärmemengenzähler" width="300" height="200" srcset="https://www.bubuxblog.de/wp-content/uploads/2014/11/IMG_7712-300x200.jpg 300w, https://www.bubuxblog.de/wp-content/uploads/2014/11/IMG_7712-1024x682.jpg 1024w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a> <a href="http://blog.bubux.de/wp-content/uploads/2014/11/IMG_7715.jpg"><img loading="lazy" decoding="async" class="alignnone wp-image-652 size-medium" src="http://blog.bubux.de/wp-content/uploads/2014/11/IMG_7715-300x200.jpg" alt="Techem Wasserzähler" width="300" height="200" srcset="https://www.bubuxblog.de/wp-content/uploads/2014/11/IMG_7715-300x200.jpg 300w, https://www.bubuxblog.de/wp-content/uploads/2014/11/IMG_7715-1024x682.jpg 1024w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Der M-Bus-Master sollte in meinem Fall aus dem Raspberry und einem Pegelwandler bestehen. Pegelwandler gibt es fertig von verschiedenen Herstellen (<a href="http://www.relay.de/de/produkte/m-bus-master.html" target="_blank">Relay</a>, <a href="http://www.wachendorff-prozesstechnik.de/gateways-und-protokollwandler/m-bus/pegelwandler-seriell/Gateway-Protokollwandler-M-Bus-seriell-RS232-RS485-HD67021-HD67022.html" target="_blank">Wachendorff</a>). Diese sind aber, je nachdem für wieviele Slaves sie ausgelegt sind, relativ teuer.</p>
<p>Mein erster Ansatz war daher der Selbstbau eines Pegelwandlers inkl. RS232-Schnittstelle zum Anschluss an den Raspberry Pi. Im Netz gibt es verschiedene Beschreibungen einer<a href="http://www.m-bus.de/pw1.html" target="_blank"> einfachen Schaltung</a> und einige wenige Forumseinträge die sich mit dem Selbstbau eines Pegelwandlers bzw. generell mit M-Bus beschäftigen. Leider habe ich in keinem Forum eine Diskussion gefunden die bis zu einem funktionierenden System verfolgt wurde. Egal, ich habe es trotzdem mal versucht&#8230;</p>
<h3>&nbsp;</h3>
<h3>Selbstbau Pegelwandler</h3>
<p>Auf der Platine ist der Pegelwandler inkl. einer RSA232 Schnittstelle die aus einem MAX3232 besteht. Die +/-15 Volt für den Pegelwandler habe ich mittels DCDC-Wandler IH0515S der Fa. XP Power erzeugt. Dieses Bauteil kann man z.B. bei <a href="http://de.farnell.com/xp-power/ih0515s/wandler-dc-dc-2w--15v/dp/8727929" target="_blank">Farnell</a> beziehen. Dann das Ganze auf Lochraster zusammen gelötet und mit dem Raspi und dem Wärmemengenzähler verbunden.</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2014/12/IMG_7707.jpg"><img loading="lazy" decoding="async" class="alignnone wp-image-664 size-medium" src="http://blog.bubux.de/wp-content/uploads/2014/12/IMG_7707-300x200.jpg" alt="IMG_7707" width="300" height="200" srcset="https://www.bubuxblog.de/wp-content/uploads/2014/12/IMG_7707-300x200.jpg 300w, https://www.bubuxblog.de/wp-content/uploads/2014/12/IMG_7707-1024x682.jpg 1024w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a> <a href="http://blog.bubux.de/wp-content/uploads/2014/12/IMG_7708.jpg"><img loading="lazy" decoding="async" class="alignnone wp-image-665 size-medium" src="http://blog.bubux.de/wp-content/uploads/2014/12/IMG_7708-300x200.jpg" alt="IMG_7708" width="300" height="200" srcset="https://www.bubuxblog.de/wp-content/uploads/2014/12/IMG_7708-300x200.jpg 300w, https://www.bubuxblog.de/wp-content/uploads/2014/12/IMG_7708-1024x682.jpg 1024w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2014/12/max3232.png"><img loading="lazy" decoding="async" class="alignnone wp-image-662 size-medium" src="http://blog.bubux.de/wp-content/uploads/2014/12/max3232-300x232.png" alt="max3232" width="300" height="232" srcset="https://www.bubuxblog.de/wp-content/uploads/2014/12/max3232-300x232.png 300w, https://www.bubuxblog.de/wp-content/uploads/2014/12/max3232.png 694w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><a href="http://blog.bubux.de/wp-content/uploads/2014/12/IMG_7716.jpg"><img loading="lazy" decoding="async" class="alignnone wp-image-688 size-medium" src="http://blog.bubux.de/wp-content/uploads/2014/12/IMG_7716-300x200.jpg" alt="Lochrasterplan" width="300" height="200" srcset="https://www.bubuxblog.de/wp-content/uploads/2014/12/IMG_7716-300x200.jpg 300w, https://www.bubuxblog.de/wp-content/uploads/2014/12/IMG_7716-1024x682.jpg 1024w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Damit der Raspberry das M-Bus Protokoll versteht bzw. auch den Pegelwandler korrekt anspricht, habe ich die Bibliotheken von <a title="rSCADA" href="http://www.rscada.se/libmbus/" target="_blank">rSCADA</a> genutzt. Die Quellen liessen sich problemlos auf dem Raspberry kompilieren. Im Ergebnis wurden verschiedene Binaries erzeugt um mit Slaves im Bus zu kommunizieren.</p>
<p>Meine ersten Versuche waren jedoch nicht von Erfolg gekrönt. Es wurde kein M-Bus-Gerät gefunden. Bei der Fehlersuche habe ich zuerst die serielle Schnittstelle separat getestet und mit Minicom über den Raspberry mit einem anderen Linux-Rechner kommuniziert. Das hat funktioniert. Die weitere Fehlersuche z.B. am M-Bus-Ausgang sind allerdings am fehlenden Oszilloskop gescheitert, da das Multimeter mich nicht wirklich weiter brachte.</p>
<p>Etwas niedergeschlagen habe ich dann nach drei Tagen erfolgloser Fehlersuche nochmal nach fertigen Pegelwandlern gesucht und ein relativ preiswertes Gerät gefunden und kurzerhand gekauft. Damit fiel die Fehlerquelle &#8222;Pegelwandler&#8220; schon mal weg.</p>
<h3>&nbsp;</h3>
<h3>Versuch mit gekauftem Pegelwandler</h3>
<p>Der neue Pegelwandler benötigt zum Anschluss an den Raspberry Pi auch eine RS232 Schnittstelle. Um mir diesmal das Löten zu ersparen, hab ich erstmal den kompletten Versuchsaufbau auf einem Breadboard gesteckt. Der Pegelwandler läuft mit einer Spannung von 12-24 V DC weshalb ich den DCDC-Wandler aus dem ersten Versich auch nicht benötige.</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2014/11/IMG_7739.jpg"><img loading="lazy" decoding="async" class="alignnone size-large wp-image-650" src="http://blog.bubux.de/wp-content/uploads/2014/11/IMG_7739-1024x682.jpg" alt="IMG_7739" width="768" height="511" srcset="https://www.bubuxblog.de/wp-content/uploads/2014/11/IMG_7739-1024x682.jpg 1024w, https://www.bubuxblog.de/wp-content/uploads/2014/11/IMG_7739-300x200.jpg 300w" sizes="auto, (max-width: 768px) 100vw, 768px" /></a></p>
<p>Die Binaries von rSCADA unterscheiden zwischen TCP- und seriell angeschlossenen M-Bus-Pegelwandlern. Da meiner seriell angeschlossen ist, benutze ich &#8222;mbus-serial-scan&#8220; um nach angeschlossenen Slaves im Bus zu suchen.<br />
Als Argumente übergebe ich &#8222;-d&#8220; für den Debugmodus, &#8222;-b 2400&#8220; um 2400 Baud zu nutzen und &#8222;/dev/ttyAMA0&#8220; als serielle Schnittstelle des Pi.</p>
<p>Zu meiner Überraschung wurde direkt ein Slave (der Wasserzähler) erkannt. Sehr schön&#8230;</p>
<pre>pi@raspberry2 ~/libmbus-0.8.0/bin $ ./mbus-serial-scan -d -b 2400 /dev/ttyAMA0
Scanning primary addresses:
0 [2014-12-13 13:59:21] SEND (005): 10 40 00 40 16
[2014-12-13 13:59:21] RECV (001): E5

Found a M-Bus device at address 0
1 [2014-12-13 13:59:22] SEND (005): 10 40 01 41 16
2 [2014-12-13 13:59:22] SEND (005): 10 40 02 42 16
3 [2014-12-13 13:59:22] SEND (005): 10 40 03 43 16
4 [2014-12-13 13:59:22] SEND (005): 10 40 04 44 16
5 [2014-12-13 13:59:23] SEND (005): 10 40 05 45 16
6 [2014-12-13 13:59:23] SEND (005): 10 40 06 46 16
7 [2014-12-13 13:59:23] SEND (005): 10 40 07 47 16
...
</pre>
<p>Hat man alle angeschlossenen M-Bus-Geräte per Scan identifiziert, können mit einem weiteren Programm die Daten des Gerätes ausgelesen werden. Auch hier gibt es wieder das Argument &#8222;-d&#8220; für den Debugmodus, &#8222;-b&#8220; zur Einstellung der Baudrate, das Device der seriellen Schnittstelle und die vom Scan ermittelte Device-Nummer. Im Fall meines Wasserzählers ist das die &#8222;0&#8220;. Die Daten der Slaves werden in einer einfachen XML-Struktur zurück geliefert.</p>
<pre class="">./mbus-serial-request-data -d -b 2400 /dev/ttyAMA0 0
[2014-12-13 14:06:46] SEND (005): 10 5B 00 5B 16
[2014-12-13 14:06:47] RECV (084): 68 4E 4E 68 08 00 72 12 37 16 46 68 50 49 07 B6 00 00 00 0C 14 53 42 00 00 8C 10 12 35 53 42 00 0B 3B 00 00 00 8C 20 14 53 42 00 00 8C 30 14 00 00 00 00 04 6D 21 0F CD 1C 4C 14 02 00 00 00 42 6C BF 1C 42 EC 7E DF 1C 0A 92 2A 00 10 0A 92 2B 00 10 3E 16
mbus_frame_print: Dumping M-Bus frame [type 4, 84 bytes]: 68 4E 4E 68 08 00 72 12 37 16 46 68 50 49 07 B6 00 00 00 0C 14 53 42 00 00 8C 10 12 35 53 42 00 0B 3B 00 00 00 8C 20 14 53 42 00 00 8C 30 14 00 00 00 00 04 6D 21 0F CD 1C 4C 14 02 00 00 00 42 6C BF 1C 42 EC 7E DF 1C 0A 92 2A 00 10 0A 92 2B 00 10 3E 16
<MBusData>

<SlaveInformation>
<Id>46163712</Id>
<Manufacturer>TCH</Manufacturer>
<Version>73</Version>
<ProductName></ProductName>
<Medium>Water</Medium>
<AccessNumber>182</AccessNumber>
<Status>00</Status>
<Signature>0000</Signature>
</SlaveInformation>

<DataRecord id="0">
<Function>Instantaneous value</Function>
<Unit>Volume (1e-2&nbsp; m^3)</Unit>
<Value>4253</Value>
<Timestamp>2014-12-13T14:06:47</Timestamp>
</DataRecord>

<DataRecord id="1">
<Function>Instantaneous value</Function>
<Unit>Volume (1e-4&nbsp; m^3)</Unit>
<Value>425335</Value>
<Timestamp>2014-12-13T14:06:47</Timestamp>
</DataRecord>
...
</pre>
<p>Da es auf Anhieb funktioniert hat, habe ich die serielle Schnittstelle auf Lochraster gebannt und der Pegelwandler wird mittels kleinem 12V-Netzteil betrieben. Dann Raspberry Pi, Pegelwandler und Platine im Netzwerkschrank verstauen&#8230;</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2014/12/IMG_7742.jpg"><img loading="lazy" decoding="async" class="alignnone size-large wp-image-661" src="http://blog.bubux.de/wp-content/uploads/2014/12/IMG_7742-1024x670.jpg" alt="MAX3232" width="768" height="502" srcset="https://www.bubuxblog.de/wp-content/uploads/2014/12/IMG_7742-1024x670.jpg 1024w, https://www.bubuxblog.de/wp-content/uploads/2014/12/IMG_7742-300x196.jpg 300w" sizes="auto, (max-width: 768px) 100vw, 768px" /></a></p>
<h3>&nbsp;</h3>
<h3>Software</h3>
<p>Den Stand des Wasserzählers protokolliere ich nun einmal täglich um 23:59 Uhr. Das wird per Cronjob und einem kleinen PHP-Script erledigt. Warum PHP? Weil ich zu ungeduldig war und das schnell umsetzen wollte und schon das ein oder andere ähnliche PHP-Script fertig hatte.</p>
<p>Das Script ruft das Binary wie oben erklärt per <em>shell_exec</em> auf. Ab dem XML-Teil parse ich die Ausgabe und extrahiere die relevanten Informationen die dann in eine MySQL-Tabelle geschrieben werden.</p>
<p>[cc lang=&#8220;php&#8220;]<br />
<?
//***********************************
//Wasserzaehler mit der ID:0 auslesen
//***********************************
$output = shell_exec("sudo /home/odroid/libmbus-0.7.0/bin/mbus-serial-request-data -d -b 2400 /dev/ttyS1 0");
$xmloutput=substr($output,strpos($output,'<MBusData>&#8218;));<br />
$xmloutput = new SimpleXMLElement($xmloutput);<br />
$zaehlerID=$xmloutput->SlaveInformation->Id;<br />
$zaehlerStand=$xmloutput->DataRecord[1]->Value/10000;</p>
<p>$mysqlhost=&#8220;&#8220;;<br />
$mysqluser=&#8220;&#8220;;<br />
$mysqlpwd=&#8220;&#8220;;<br />
$connection=mysql_connect($mysqlhost,$mysqluser,$mysqlpwd) or die (&#8222;Verbindungsversuch fehlgeschlagen&#8220;);<br />
$mysqldb=&#8220;&#8220;;<br />
mysql_select_db($mysqldb,$connection) or die(&#8222;Konnte die Datenbank nicht waehlen.&#8220;);<br />
$sql = &#8222;INSERT INTO wasserzaehler (timestamp,zaehlerid,zaehlerstand) VALUES (CURRENT_TIMESTAMP,$zaehlerID,$zaehlerStand)&#8220;;<br />
$query = mysql_query($sql) or die(&#8222;Anfrage 1 nicht erfolgreich&#8220;);<br />
?>;<br />
[/cc]</p>
<p>Da ich auf meiner Webseite aber nicht nur den absoluten Wasserverbrauch darstellen möchte sondern auch den Tagesverbrauch, kommt folgendes SQL zum Einsatz. Hier werden die Einträge aus zwei aufeinanderfolgenden Zeilen subtrahiert um die Differenz zum Vortag zu bestimmen.</p>
<pre>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
   )
ORDER BY wz1.timestamp
</pre>
<p>Das Ergbnis sieht dann wie folgt aus. Ich war etwas erschreckt wieviel Wasser man an machen Tagen verbraucht!</p>
<p><a href="http://blog.bubux.de/wp-content/uploads/2014/12/wasserzaehler_screenshot.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-682" src="http://blog.bubux.de/wp-content/uploads/2014/12/wasserzaehler_screenshot.png" alt="wasserzaehler_screenshot" width="544" height="513" srcset="https://www.bubuxblog.de/wp-content/uploads/2014/12/wasserzaehler_screenshot.png 544w, https://www.bubuxblog.de/wp-content/uploads/2014/12/wasserzaehler_screenshot-300x282.png 300w" sizes="auto, (max-width: 544px) 100vw, 544px" /></a></p>
<h3>&nbsp;</h3>
<h3>Selbstgebauter Pegelwandler</h3>
<p>Da ich ja nun weiß das es generell funktioniert und der Fehler meiner ersten Lösung definitiv im selbstgebauten Pegelwandler liegt, werde ich den Versuch mit dem Selbstbau demnächst nochmal angehen.</p>
<p>&nbsp;</p>
<p>Sobald der Wärmemengenzähler in den Wasserlauf des Kachelofens eingebaut ist, werde ich nochmal einen kurzen Beitrag schreiben. Das Prinzip des Auslesens ist ja analog zum Wasserzähler aber vielleicht gibt es in den zurückgelieferten Daten unterschiede.</p>
<p>&nbsp;</p>
<p>Viel Spaß mit dem M-Bus!</p>
<p>Chris</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bubuxblog.de/m-bus-wasserzaehler/feed/</wfw:commentRss>
			<slash:comments>21</slash:comments>
		
		
			</item>
		<item>
		<title>Stabiler 24/7 Betrieb des Raspberry &#8211; Netzwerk neu starten</title>
		<link>https://www.bubuxblog.de/stabiler-247-betrieb-des-raspberry-netzwerk-neu-starten/</link>
					<comments>https://www.bubuxblog.de/stabiler-247-betrieb-des-raspberry-netzwerk-neu-starten/#comments</comments>
		
		<dc:creator><![CDATA[diefenbecker]]></dc:creator>
		<pubDate>Sun, 23 Nov 2014 15:19:16 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[Raspberry PI]]></category>
		<category><![CDATA[RaspberryPI]]></category>
		<guid isPermaLink="false">http://blog.bubux.de/?p=631</guid>

					<description><![CDATA[Zum Thema stabiler 24/7-Betrieb des Raspberry PI´s gibt es viele gute Blogeinträge die sich mit dem richtigen Netzteil, dem korrektem Umgang von Linux mit der SD-Karte, evtl. Hitzeprobleme und Netzwerkproblemen aufgrund zu hoher Last beschäftigen. Siehe z.B.: hier oder hier Unter anderem wird auch immer wieder der Hardware-Watchdog des PI genannt. Diesen Watchdog hab ich [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Zum Thema stabiler 24/7-Betrieb des Raspberry PI´s gibt es viele gute Blogeinträge die sich mit dem richtigen Netzteil, dem korrektem Umgang von Linux mit der SD-Karte, evtl. Hitzeprobleme und Netzwerkproblemen aufgrund zu hoher Last beschäftigen.</p>
<p>Siehe z.B.: <a href="http://www.datenreise.de/raspberry-pi-stabiler-24-7-dauerbetrieb/" target="_blank">hier</a> oder <a href="http://elinux.org/R-Pi_Troubleshooting#Networking" target="_blank">hier</a></p>
<p>Unter anderem wird auch immer wieder der Hardware-Watchdog des PI genannt. Diesen Watchdog hab ich auch aktiviert, da ich in der Vergangenheit immer wieder Probleme mit dem Netzwerk (Stichwort <a title="Raspberry Forum" href="http://www.raspberrypi.org/forums/viewtopic.php?t=11971&amp;p=129570http://" target="_blank">smsc95xx errors</a> und weiterführende Links) hatte. Dies äusserte sich immer wieder mit dem Einfrieren des PI. Der Watchdog machte im Fehlerfall einen Restart und gut war. Nach den letzten Firmwareupdates hat sich die Frequenz der Restarts auch stark verringert.</p>
<p>Dann aber war mein Raspi plötzlich per SSH nicht mehr erreichbar und auch die Webseite wurde nicht mehr angezeigt. Seltsamerweise erfolgte kein Neustart durch den Watchdog. Da ich den Raspi Headless betreibe, blieb mir nicht viel anderes übrig als ihn einfach vom Strom zu trennen und wieder anzuschliessen. Danach lief alles wieder einwandfrei. Leider häuften sich diese Probleme so das es mir zu nervig wurde, ständig den Strom zu kappen. Schliesslich ist mein Raspi ja ein Server und soll gescheit laufen.</p>
<p>Nach den Neustarts ist mir aber auch aufgefallen, das die Daten der Leseköpfe lückenlos in die Datenbank geschrieben wurden. Anscheind lief der Raspi noch und nur das Netzwerk war nicht verfügbar.</p>
<p>Das Problem war teilweise im Message-Log zu sehen:</p>
<p><code><br />
Nov 22 12:51:10 raspberrypi kernel: [1279051.095475] usb 1-1: USB disconnect, device number 10<br />
Nov 22 12:51:10 raspberrypi kernel: [1279051.095493] usb 1-1.1: USB disconnect, device number 11<br />
Nov 22 12:51:10 raspberrypi kernel: [1279051.095887] smsc95xx 1-1.1:1.0 eth0: unregister 'smsc95xx' usb-bcm2708_usb-1.1, smsc95xx USB 2.0 Ethernet<br />
Nov 22 12:51:10 raspberrypi kernel: [1279051.095954] smsc95xx 1-1.1:1.0 eth0: hardware isn't capable of remote wakeup<br />
Nov 22 12:51:10 raspberrypi kernel: [1279051.136136] usb 1-1.2: USB disconnect, device number 12<br />
Nov 22 12:51:10 raspberrypi kernel: [1279051.136650] cp210x ttyUSB0: cp210x converter now disconnected from ttyUSB0<br />
Nov 22 12:51:10 raspberrypi kernel: [1279051.136748] cp210x 1-1.2:1.0: device disconnected<br />
Nov 22 12:51:10 raspberrypi kernel: [1279051.137275] usb 1-1.3: USB disconnect, device number 13<br />
Nov 22 12:51:10 raspberrypi kernel: [1279051.137769] ftdi_sio ttyUSB1: FTDI USB Serial Device converter now disconnected from ttyUSB1<br />
Nov 22 12:51:10 raspberrypi kernel: [1279051.137876] ftdi_sio 1-1.3:1.0: device disconnected<br />
Nov 22 12:51:10 raspberrypi kernel: [1279051.295583] Indeed it is in host mode hprt0 = 00021501<br />
Nov 22 12:51:11 raspberrypi kernel: [1279051.575374] usb 1-1: new full-speed USB device number 14 using dwc_otg<br />
Nov 22 12:51:11 raspberrypi kernel: [1279051.575636] Indeed it is in host mode hprt0 = 00021501<br />
Nov 22 12:51:11 raspberrypi kernel: [1279051.825598] usb 1-1: not running at top speed; connect to a high speed hub<br />
Nov 22 12:51:11 raspberrypi kernel: [1279051.825950] usb 1-1: New USB device found, idVendor=0424, idProduct=9512<br />
Nov 22 12:51:11 raspberrypi kernel: [1279051.825971] usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0<br />
Nov 22 12:51:11 raspberrypi kernel: [1279051.836520] hub 1-1:1.0: USB hub found<br />
Nov 22 12:51:11 raspberrypi kernel: [1279051.836765] hub 1-1:1.0: 3 ports detected<br />
Nov 22 12:51:11 raspberrypi kernel: [1279052.115374] usb 1-1.1: new full-speed USB device number 15 using dwc_otg<br />
Nov 22 12:51:11 raspberrypi kernel: [1279052.215553] usb 1-1.1: not running at top speed; connect to a high speed hub<br />
Nov 22 12:51:11 raspberrypi kernel: [1279052.215947] usb 1-1.1: New USB device found, idVendor=0424, idProduct=ec00<br />
Nov 22 12:51:11 raspberrypi kernel: [1279052.215973] usb 1-1.1: New USB device strings: Mfr=0, Product=0, SerialNumber=0<br />
Nov 22 12:51:11 raspberrypi kernel: [1279052.219107] smsc95xx v1.0.4<br />
Nov 22 12:51:11 raspberrypi kernel: [1279052.280966] smsc95xx 1-1.1:1.0 eth0: register 'smsc95xx' at usb-bcm2708_usb-1.1, smsc95xx USB 2.0 Ethernet, b8:27:eb:bd:01:0b<br />
Nov 22 12:51:12 raspberrypi kernel: [1279052.375552] usb 1-1.2: new full-speed USB device number 16 using dwc_otg<br />
Nov 22 12:51:12 raspberrypi kernel: [1279052.477284] usb 1-1.2: New USB device found, idVendor=10c4, idProduct=ea60<br />
Nov 22 12:51:12 raspberrypi kernel: [1279052.477318] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3<br />
Nov 22 12:51:12 raspberrypi kernel: [1279052.477334] usb 1-1.2: Product: CP2104 USB to UART Bridge Controller<br />
Nov 22 12:51:12 raspberrypi kernel: [1279052.477349] usb 1-1.2: Manufacturer: Silicon Labs<br />
Nov 22 12:51:12 raspberrypi kernel: [1279052.477362] usb 1-1.2: SerialNumber: 0065B522<br />
Nov 22 12:51:12 raspberrypi kernel: [1279052.479039] cp210x 1-1.2:1.0: cp210x converter detected<br />
Nov 22 12:51:12 raspberrypi kernel: [1279052.479519] usb 1-1.2: cp210x converter now attached to ttyUSB0<br />
Nov 22 12:51:12 raspberrypi kernel: [1279052.491197] smsc95xx 1-1.1:1.0 eth0: hardware isn't capable of remote wakeup<br />
Nov 22 12:51:12 raspberrypi kernel: [1279052.535606] smsc95xx 1-1.1:1.0 eth0: hardware isn't capable of remote wakeup<br />
Nov 22 12:51:12 raspberrypi kernel: [1279052.555550] usb 1-1.3: new full-speed USB device number 17 using dwc_otg<br />
Nov 22 12:51:12 raspberrypi kernel: [1279052.640093] smsc95xx 1-1.1:1.0 eth0: hardware isn't capable of remote wakeup<br />
Nov 22 12:51:12 raspberrypi kernel: [1279052.661511] usb 1-1.3: New USB device found, idVendor=0403, idProduct=6001<br />
Nov 22 12:51:12 raspberrypi kernel: [1279052.661547] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3<br />
Nov 22 12:51:12 raspberrypi kernel: [1279052.661563] usb 1-1.3: Product: FT232R USB UART<br />
Nov 22 12:51:12 raspberrypi kernel: [1279052.661577] usb 1-1.3: Manufacturer: FTDI<br />
Nov 22 12:51:12 raspberrypi kernel: [1279052.661590] usb 1-1.3: SerialNumber: A4009G5A<br />
Nov 22 12:51:12 raspberrypi kernel: [1279052.664914] ftdi_sio 1-1.3:1.0: FTDI USB Serial Device converter detected<br />
Nov 22 12:51:12 raspberrypi kernel: [1279052.665117] usb 1-1.3: Detected FT232RL<br />
Nov 22 12:51:12 raspberrypi kernel: [1279052.665314] usb 1-1.3: Number of endpoints 2<br />
Nov 22 12:51:12 raspberrypi kernel: [1279052.665337] usb 1-1.3: Endpoint 1 MaxPacketSize 64<br />
Nov 22 12:51:12 raspberrypi kernel: [1279052.665353] usb 1-1.3: Endpoint 2 MaxPacketSize 64<br />
Nov 22 12:51:12 raspberrypi kernel: [1279052.665367] usb 1-1.3: Setting MaxPacketSize 64<br />
Nov 22 12:51:12 raspberrypi kernel: [1279052.667714] usb 1-1.3: FTDI USB Serial Device converter now attached to ttyUSB1<br />
Nov 22 12:51:13 raspberrypi kernel: [1279054.248030] smsc95xx 1-1.1:1.0 eth0: link up, 100Mbps, full-duplex, lpa 0xC5E1<br />
</code></p>
<p>An dem Raspi hängt der Lesekopf für den Stromzähler und für die Heizung. Der Raspi scheint die USB-Ports aus irgendwelchen Gründen unmotiviert neu zu starten. Das funktioniert für die USB-Ports immer erfolgreich, aber das Netzwerk blieb dabei gelegentlich auf der Strecke (obwohl in der letzten Zeile gegenteiliges behauptet wird). Das hängt anscheinend immer noch mit Fehlern im smsc95xx zusammen.</p>
<h2>Neustart des Netzwerkinterfaces</h2>
<p>Nun gut&#8230;dann muss das Netzwerk halt nochmal gestartet werden. Folgendes Bash-Script rufe ich alle 10 Minuten per Cron auf. Ist das Netzwerk verfügbar, passiert nichts. Ist das Netzwerk nicht verfügbar wird versucht des Interface neu zu starten. Gelingt auch das nicht, wird der Raspi rebootet. Mittels <em>logger</em> wird der Neustart in /var/log/messages geloggt.</p>
<p>[cc lang=&#8220;bash&#8220; lines=&#8220;40&#8243;]<br />
#!/bin/sh<br />
IP_TO_TEST=&#8220;<ip_die_testweise_gepingt_werden_soll>&#8220;<br />
PING_COUNT=1<br />
PING=&#8220;/bin/ping&#8220;<br />
IFUP=&#8220;/sbin/ifup&#8220;<br />
IFDOWN=&#8220;/sbin/ifdown &#8211;force&#8220;<br />
INTERFACE=&#8220;eth0&#8243;  #Device angeben welches geprüft werden soll<br />
LOCKF=&#8220;/opt/lockf&#8220;<br />
$PING -c $PING_COUNT $IP_TO_TEST > /dev/null 2> /dev/null<br />
if [ $? -ge 1 ]<br />
then<br />
    logger &#8222;$INTERFACE scheint unten zu sein, versuche restart&#8230;&#8220;<br />
        if [ -e $LOCKF]<br />
        then<br />
                logger &#8222;$INTERFACE immer noch unten, NEUSTART&#8230;&#8220;<br />
                rm -f $LOCKF 2>/dev/null<br />
                sudo reboot<br />
        else<br />
                touch $LOCKF<br />
                logger $(sudo $IFDOWN $INTERFACE)<br />
                sleep 10<br />
                logger $(sudo $IFUP $INTERFACE)<br />
        fi<br />
else<br />
    #logger &#8222;$INTERFACE laueft&#8220;<br />
    rm -f $LOCKF 2>/dev/null<br />
fi<br />
[/cc]</p>
<p>Im Log sieht man dann den erfolgreichen Neustart des Netzwerkinterfaces durch das obige Bach-Script.</p>
<p><code><br />
Nov 22 12:51:12 raspberrypi kernel: [1279052.665353] usb 1-1.3: Endpoint 2 MaxPacketSize 64<br />
Nov 22 12:51:12 raspberrypi kernel: [1279052.665367] usb 1-1.3: Setting MaxPacketSize 64<br />
Nov 22 12:51:12 raspberrypi kernel: [1279052.667714] usb 1-1.3: FTDI USB Serial Device converter now attached to ttyUSB1<br />
Nov 22 12:51:13 raspberrypi kernel: [1279054.248030] smsc95xx 1-1.1:1.0 eth0: link up, 100Mbps, full-duplex, lpa 0xC5E1<br />
Nov 22 13:00:02 raspberrypi logger: eth0 scheint unten zu sein, versuche restart...<br />
Nov 22 13:00:09 raspberrypi kernel: [1279589.925658] smsc95xx 1-1.1:1.0 eth0: hardware isn't capable of remote wakeup<br />
Nov 22 13:00:09 raspberrypi kernel: [1279590.124240] smsc95xx 1-1.1:1.0 eth0: hardware isn't capable of remote wakeup<br />
Nov 22 13:00:09 raspberrypi logger: Stopping NTP server: ntpd. Starting NTP server: ntpd.<br />
Nov 22 13:00:11 raspberrypi kernel: [1279591.726167] smsc95xx 1-1.1:1.0 eth0: link up, 100Mbps, full-duplex, lpa 0xC5E1<br />
Nov 22 13:00:32 raspberrypi logger: Stopping NTP server: ntpd. Starting NTP server: ntpd.<br />
</code></p>
<p>Seitdem läuft mein PI seit 16 Tagen durch. Mal sehen wie lange er ohne Neustart durchhält!</p>
<p>Gruß<br />
Chris</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bubuxblog.de/stabiler-247-betrieb-des-raspberry-netzwerk-neu-starten/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
