<?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>Odroid &#8211; bubuxblog</title>
	<atom:link href="https://www.bubuxblog.de/category/odroid/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bubuxblog.de</link>
	<description></description>
	<lastBuildDate>Sun, 06 Oct 2019 09:57:49 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<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 fetchpriority="high" 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="(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 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="(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 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="(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>
<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>
<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>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>

<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>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>Odroid C2 &#8211; Update 1 (Gas- und Wasserzähler)</title>
		<link>https://www.bubuxblog.de/odroid-c2-update-1-gas-und-wasserzaehler/</link>
					<comments>https://www.bubuxblog.de/odroid-c2-update-1-gas-und-wasserzaehler/#comments</comments>
		
		<dc:creator><![CDATA[diefenbecker]]></dc:creator>
		<pubDate>Wed, 25 Jan 2017 16:02:06 +0000</pubDate>
				<category><![CDATA[Heimautomatisierung]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Odroid]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Hausautomatisierung]]></category>
		<category><![CDATA[Homeautomation]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://blog.bubux.de/?p=1299</guid>

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

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