{"id":41,"date":"2014-01-02T18:40:57","date_gmt":"2014-01-02T17:40:57","guid":{"rendered":"https:\/\/www.skrue.de\/wp\/?p=41"},"modified":"2021-03-08T15:54:45","modified_gmt":"2021-03-08T14:54:45","slug":"s0-stromzaehler-am-raspberrypi","status":"publish","type":"post","link":"https:\/\/www.skrue.de\/wp\/?p=41","title":{"rendered":"S0-Stromz\u00e4hler am RaspberryPi"},"content":{"rendered":"\n<div class=\"wp-block-image\"><figure class=\"alignright\"><a href=\"https:\/\/www.skrue.de\/wp\/wp-content\/uploads\/2014\/01\/Raspi.png\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"185\" src=\"https:\/\/www.skrue.de\/wp\/wp-content\/uploads\/2014\/01\/Raspi.png\" alt=\"Raspi\" class=\"wp-image-45\"\/><\/a><\/figure><\/div>\n\n\n\n<p>Um den heimischen Energieverbrauch messen und auswerten zu k\u00f6nnen, habe ich mir einen RaspberryPi und einen Hutschienen-Stromz\u00e4hler mit S0-Ausgang besorgt. In den n\u00e4chsten Tagen und Wochen werde ich hier beschreiben, wie man<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>den Z\u00e4hler direkt am RaspberryPi ausliest, ohne eine S0-Adapterplatine zu verwenden<\/li><li>den Z\u00e4hler f\u00fcr h\u00f6here Genauigkeit modifiziert<\/li><li>die eingelesenen Werte abspeichert und visualisiert.<\/li><\/ol>\n\n\n\n<p>Als Z\u00e4hler habe ich den <a href=\"http:\/\/swissnox.de\/stromzahler\/swissnox-digitaler-wechselstromzahler-230v-5-50-a-1-phasig-fur-hutschienen-35mm-lcd.html\" target=\"_blank\" rel=\"noopener\">Swissnox S-Watt<\/a> gew\u00e4hlt, den es online f\u00fcr ca. 20,-\u20ac zu kaufen gibt. Der hat n\u00e4mlich die Eigenschaft, dass er sich mit geringem Aufwand so modifizieren l\u00e4sst, dass er ca. 400 bis 500x h\u00f6her aufl\u00f6st als er das von Haus aus tut. Mehr dazu in einem weiteren Artikel oder <a href=\"http:\/\/wiki.volkszaehler.org\/hardware\/channels\/meters\/power\/swissnox_s-watt\" target=\"_blank\" rel=\"noopener\">hier bei volkszaehler.org<\/a>. Aber nun mal los.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h1 class=\"wp-block-heading\">Anschluss des Z\u00e4hlers<\/h1>\n\n\n\n<p>Der S0-Ausgang des Z\u00e4hlers gibt im Standard 1000 Impulse pro kWh aus. Das kann man sich ungef\u00e4hr vorstellen wie einen Taster, der 1000x gedr\u00fcckt und wieder losgelassen wird. Die L\u00e4nge eines solchen Impulses betr\u00e4gt im Falle des Swissnox wohl ca. <a href=\"http:\/\/wiki.volkszaehler.org\/hardware\/channels\/meters\/power\/swissnox_s-watt#calibration\" target=\"_blank\" rel=\"noopener\">70-90ms.<\/a> Wir behandeln den S0-Ausgang also ab jetzt erst mal als &#8222;Taster&#8220; (im Z\u00e4hler \u00fcbernimmt ein Optokoppler diese Funktion).<\/p>\n\n\n\n<p>Um diesen &#8222;Taster&#8220; nun mit den GPIO-Anschl\u00fcssen des RaspberryPi zu verbinden, nehmen wir einen der Pins, die von Haus aus mit einem internen Pull-Up-Widerstand ausgestattet sind. Bei den Boards der Rev. 2 trifft das auf die Pins <a href=\"http:\/\/elinux.org\/RPi_Low-level_peripherals#General_Purpose_Input.2FOutput_.28GPIO.29\" target=\"_blank\" rel=\"noopener\"><strong>GPIO 2 und GPIO 3<\/strong><\/a> zu, wir w\u00e4hlen den Pin 3. Nat\u00fcrlich k\u00f6nnte man auch einen der anderen Pins nehmen und selbst einen Pull-Up-Widerstand hinzuf\u00fcgen, aber wir wollen uns ja nicht mehr Arbeit machen als n\u00f6tig.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignleft\"><a href=\"https:\/\/www.skrue.de\/wp\/wp-content\/uploads\/2014\/01\/S0-RasPi-wiring.png\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/www.skrue.de\/wp\/wp-content\/uploads\/2014\/01\/S0-RasPi-wiring-150x150.png\" alt=\"S0 RasPi wiring\" class=\"wp-image-59\"\/><\/a><\/figure><\/div>\n\n\n\n<p>Kurzer Einwurf: Der S0-Ausgang des Z\u00e4hlers funktioniert offiziell mit Spannungen von <strong>5-27VDC<\/strong>, der RaspberryPi arbeitet aber mit <strong>3.3V<\/strong>. Funktioniert aber genauso gut.<\/p>\n\n\n\n<p>Nun bleibt nur noch, den Pin <strong>GPIO 3 mit S0+<\/strong> des Z\u00e4hlers und <strong>GND mit S0-<\/strong> zu verbinden &#8211; fertig.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Impulse z\u00e4hlen mit wiringPi<\/h1>\n\n\n\n<p>Um die Impulse nun auch z\u00e4hlen zu k\u00f6nnen, werden wir uns der gro\u00dfartigen <a rel=\"noopener\" href=\"http:\/\/wiringpi.com\/\" target=\"_blank\">wiringPi<\/a> Library bedienen, die uns das Leben hier sehr leicht macht. Installationsanleitung f\u00fcr Raspbian <a rel=\"noopener\" href=\"http:\/\/wiringpi.com\/download-and-install\/\" target=\"_blank\">hier<\/a>. Praktischerweise ist auch direkt ein St\u00fcck Beispielsoftware dabei, n\u00e4mlich die Datei <a rel=\"noopener\" href=\"https:\/\/github.com\/ngs\/wiringPi\/blob\/master\/examples\/isr.c\" target=\"_blank\">ISR.c<\/a>, die bei jedem Interrupt (also jedem Impuls) eine Z\u00e4hlervariable hochsetzt. Wir m\u00fcssen jetzt noch die <strong>Pin-Nummer von 0 auf 9 anpassen<\/strong> (Achtung, die wiringPi Pin-Nummerierung unterscheidet sich von der normalen GPIO-Nummerierung, Tabelle <a rel=\"noopener\" href=\"http:\/\/wiringpi.com\/pins\/\" target=\"_blank\">hier<\/a>):<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#define        BUTTON_PIN        9<\/pre>\n<\/div><\/div>\n\n\n\n<p>Jetzt den Code kompilieren und ausf\u00fchren:<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">gcc -lwiringPi -o isr isr.c\nsudo .\/isr<\/pre>\n<\/div>\n<\/div>\n<\/div><\/div>\n\n\n\n<p>Nun kann der erste Test erfolgen: Der Counter sollte bei jedem Impuls um 1 erh\u00f6ht werden.<\/p>\n\n\n\n<p>Basierend auf diesem Beispielprogramm habe ich nun etwas C-Code geschrieben um die Impulse pro definiertem Zeitintervall zu z\u00e4hlen und im CSV-Format auszugeben. Mehr dazu und wie man daraus eine anschauliche Grafik erstellt, in einem der folgenden Beitr\u00e4ge.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Um den heimischen Energieverbrauch messen und auswerten zu k\u00f6nnen, habe ich mir einen RaspberryPi und einen Hutschienen-Stromz\u00e4hler mit S0-Ausgang besorgt. In den n\u00e4chsten Tagen und Wochen werde ich hier beschreiben, wie man den Z\u00e4hler direkt am RaspberryPi ausliest, ohne eine S0-Adapterplatine zu verwenden den Z\u00e4hler f\u00fcr h\u00f6here Genauigkeit modifiziert die eingelesenen Werte abspeichert und visualisiert. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":45,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-41","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-basteln"],"_links":{"self":[{"href":"https:\/\/www.skrue.de\/wp\/index.php?rest_route=\/wp\/v2\/posts\/41","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.skrue.de\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.skrue.de\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.skrue.de\/wp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.skrue.de\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=41"}],"version-history":[{"count":12,"href":"https:\/\/www.skrue.de\/wp\/index.php?rest_route=\/wp\/v2\/posts\/41\/revisions"}],"predecessor-version":[{"id":165,"href":"https:\/\/www.skrue.de\/wp\/index.php?rest_route=\/wp\/v2\/posts\/41\/revisions\/165"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.skrue.de\/wp\/index.php?rest_route=\/wp\/v2\/media\/45"}],"wp:attachment":[{"href":"https:\/\/www.skrue.de\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=41"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skrue.de\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=41"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skrue.de\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=41"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}