{"id":3420,"date":"2015-03-06T11:00:36","date_gmt":"2015-03-06T10:00:36","guid":{"rendered":"http:\/\/haus.woerstenfeld.de\/?p=3420"},"modified":"2015-03-07T01:52:53","modified_gmt":"2015-03-07T00:52:53","slug":"elektronische-haushaltszahler-auslesen-mit-raspberrypi-und-php","status":"publish","type":"post","link":"https:\/\/haus.woerstenfeld.de\/?p=3420","title":{"rendered":"Elektronische Haushaltsz\u00e4hler auslesen mit RaspberryPi und PHP"},"content":{"rendered":"<p>Nachdem ich ja nun inzwischen den Loxone Miniserver benutze und mir mein RaspberryPi Dateisystem zerschossen wurde, als ich die USV getestet habe aber der RaspberryPi an der falschen Steckdose hing, habe ich mich entschieden volkszaehler.org nicht wieder einzusetzen.<br \/>\nIch hatte mit dem Betrieb und der Einrichtung zu viele Probleme und mir was das auch alles viel zu viel des Guten.<br \/>\nDa ich einfach nur noch die Werte haben wollte, habe ich mir ein kleines PHP Script gebastelt, welche mit einer PHP-Klasse f\u00fcr den seriellen Zugriff auf die USB-Lesek\u00f6pfe die Daten ausliest.<\/p>\n<p>Einen Projekt-Thread findet ihr hier: <a href=\"http:\/\/forum.loxone.com\/dede\/software\/faqs-tutorials-and-howtos\/9044-elektronische-haushaltszahler-ehz-auslesen-raspberry-pi-php.html\" title=\"Loxone Forum\" target=\"_blank\">Loxone-Forum<\/a><\/p>\n<p>Installation von Null angefangen:<br \/>\n1) Download Raspbian Image: http:\/\/www.raspberrypi.org\/downloads\/<br \/>\n2) Download Win32DiskImager Binary Version: http:\/\/sourceforge.net\/projects\/win32diskimager\/files\/Archive\/<br \/>\n3) Beide Downloads entpacken.<br \/>\n4) Raspbian Image mit dem Win32DiskImager auf die SD\/microSD Karte kopieren. (Der RaspberryPI 1B hat einen SD und der 1B+ einen microSD Slot!)<\/p>\n<p>Man landet nach dem Start im Setup. (sudo raspi-config)<br \/>\n(Mehr Details auf <a href=\"http:\/\/www.datenreise.de\/raspberry-pi-inbetriebnahme-howto\/\" title=\"Datenreise.de\" target=\"_blank\">Datenreise.de<\/a>)<br \/>\n5) 1 Expand Filesystem<br \/>\n6) 2 Passwort anpassen<br \/>\n7) 3 Booten zur &#8222;Command line&#8220;<br \/>\n8) 4 Internationalisierung<br \/>\n  I1 &#8211; Locale -> de_DE.UTF-8<br \/>\n  I2 &#8211; Timezone -> Europe &#038; Berlin<br \/>\n9) 8 Advanced Options<br \/>\n  A2 &#8211; Hostname<br \/>\n  A3 &#8211; GPU memory -> 16<br \/>\n  A4 &#8211; SSH -> Enable<br \/>\n  A0 &#8211; Update (oder: sudo apt-get update;sudo apt-get dist-upgrade)<br \/>\n10) Finish<br \/>\n11) sudo reboot<\/p>\n<p>12) SSH auf Keys umstellen um vom Raspberry auf andere Maschinen und auf den Raspberry zu kommen ohne immer ein PW einzugeben<br \/>\nF\u00fcr jeden User: ssh-keygen -b 4096 -t dsa<br \/>\nDann immer den Inhalt der lokalen ~\/.ssh\/id_rsa.pub auf dem Zielsystem zum Inhalt der ~\/.ssh\/authorized_keys des entsprechenden Benutzers hinzuf\u00fcgen.<br \/>\nGegebenenfalls ist die Datei authorized_keys im Heimatverzeichnisses des Benutzers anzulegen: touch ~\/.ssh\/authorized_keys<\/p>\n<p>13) Webserver installieren: sudo apt-get install apache2 php5<br \/>\n14) Scripte installieren<br \/>\n<code>  sudo su<br \/>\n  mkdir \/var\/www\/sml<br \/>\n  cd \/var\/www\/sml<br \/>\n  wget http:\/\/woerstenfeld.de\/sml\/SML_read_emh_ehz.zip -O .\/SML_read_emh_ehz.zip<br \/>\n  unzip SML_read_emh_ehz.zip<br \/>\n  rm -f unzip SML_read_emh_ehz.zip<br \/>\n  chown -R www-data:www-data \/var\/www\/sml<br \/>\n  chmod -R 644 \/var\/www\/sml<br \/>\n  chmod 755 \/var\/www\/sml<\/code><\/p>\n<p>15) Webserver konfigurieren<br \/>\n  <code>vi \/etc\/apache2\/sites-enabled\/000-default<\/code><br \/>\n  Mit dem Cursor zur Zeile mit &#8222;CustomLog ${APACHE_LOG_DIR}\/access.log combined&#8220; gehen und i# eingeben.<br \/>\n  Dann mit <ESC>:wq den Editor beenden<\/p>\n<p>16) Lesek\u00f6pfe einrichten<br \/>\n   Mit \/sbin\/udevadm info &#8211;query=all &#8211;name=\/dev\/ttyUSB0 |grep SERIAL_SHORT<br \/>\n   und \/sbin\/udevadm info &#8211;query=all &#8211;name=\/dev\/ttyUSB1 |grep SERIAL_SHORT<br \/>\n   habe ich meine zwei Seriennummern 0072D0B2 und 0072D0B0 der K\u00f6pfe ausgelesen<br \/>\n   und in die Datei \/etc\/udev\/rules.d\/99-lesekopf.rules geschrieben:<br \/>\n<code>SUBSYSTEM==\"tty\", ATTRS{product}==\"CP2104 USB to UART Bridge Controller\", ATTRS{serial}==\"0072D0B0\", SYMLINK+=\"lesekopf0\"<br \/>\nSUBSYSTEM==\"tty\", ATTRS{product}==\"CP2104 USB to UART Bridge Controller\", ATTRS{serial}==\"0072D0B2\", SYMLINK+=\"lesekopf1\"<\/code><\/p>\n<p>Falls sich der Product Code ge\u00e4ndert hat, mit folgendem Kommando pr\u00fcfen:<br \/>\n<code>udevadm info --name=\/dev\/ttyUSB0 --attribute-walk |grep product<\/code><\/p>\n<p>Neustarten der Device-Rules:<br \/>\n<code>udevadm trigger<br \/>\n<\/code><br \/>\nJetzt sollte es die Ger\u00e4te \/dev\/lesekopf0 und ggf. \/dev\/lesekopf1 geben.<\/p>\n<p>Rechte anpassen:<br \/>\n<code> chmod 777 \/dev\/lesekopf*<br \/>\n chown www-data:www-data \/dev\/lesekopf*<br \/>\n<\/code><\/p>\n<p>Serielle Einstellungen festlegen (9600 8N1):<br \/>\n<code> stty -F \/dev\/lesekopf0 1:0:8bd:0:3:1c:7f:15:4:5:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0<br \/>\n stty -F \/dev\/lesekopf1 1:0:8bd:0:3:1c:7f:15:4:5:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0<\/code><\/p>\n<p>Daten anfordern:<br \/>\n<code> echo $'\\x2f\\x3f\\x21\\x0d\\x0a' >\/dev\/lesekopf0<br \/>\n echo $'\\x2f\\x3f\\x21\\x0d\\x0a' >\/dev\/lesekopf1<\/code><\/p>\n<p>Und schon sprudelt es:<br \/>\n<code>root@pi:\/home\/pi# cat  \/dev\/lesekopf0|hd<br \/>\n00000000  2b c8 1b 1b 1b 1b 01 01  01 01 76 07 00 07 00 0a  |+.........v.....|<br \/>\n00000010  01 01 63 9a 05 00 76 07  00 07 00 0a 07 01 00 62  |..c...v........b|<br \/>\n00000020  0a ff 01 01 01 01 b7 59  be 01 77 07 01 00 01 08  |.......Y..w.....|<br \/>\n00000030  02 ff 01 01 62 1e 52 ff  56 00 00 00 00 00 01 77  |....b.R.V......w|<br \/>\n00000040  07 01 00 10 07 00 ff 01  01 62 1b 52 ff 55 00 00  |.........b.R.U..|<br \/>\n00000050  02 28 01 77 07 81 81 c7  82 05 ff 01 72 62 01 65  |.(.w........rb.e|<br \/>\n00000060  02 c8 0c db 01 01 83 02  92 be 25 0b ed 52 38 a9  |..........%..R8.|<br \/>\n00000070  ff 7a f6 f3 20 0c 50 08  3e 6c eb a5 e8 6f e1 2e  |.z.. .P.>l...o..|<br \/>\n00000080  0f 06 6d f0 80 4a 9e 6f  3e 49 b4 c2 68 72 c4 81  |..m..J.o>I..hr..|<br \/>\n00000090  c7 5e 0a 6c 34 e7 77 01  01 01 63 44 21 00 76 07  |.^.l4.w...cD!.v.|<\/code><\/p>\n<p>Jetzt kann man die Daten mit http:\/\/name-oder-ipadresse-des-raspberry.pi\/sml\/SML_read_emh_ehz.php?device=lesekopf0 abfragen.<br \/>\nNat\u00fcrlich kann man die SML_read_emh_ehz.php nach index.php umbenennen und dann statt \/sml\/SML_read_emh_ehz.php?device=lesekopf0 nur \/sml\/?device=lesekopf0 schreiben.<\/p>\n<p>Viel Spa\u00df!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nachdem ich ja nun inzwischen den Loxone Miniserver benutze und mir mein RaspberryPi Dateisystem zerschossen wurde, als ich die USV getestet habe aber der RaspberryPi an der falschen Steckdose hing, habe ich mich entschieden volkszaehler.org nicht wieder einzusetzen. Ich hatte mit dem Betrieb und der Einrichtung zu viele Probleme und mir was das auch alles [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[81],"tags":[119,123],"_links":{"self":[{"href":"https:\/\/haus.woerstenfeld.de\/index.php?rest_route=\/wp\/v2\/posts\/3420"}],"collection":[{"href":"https:\/\/haus.woerstenfeld.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/haus.woerstenfeld.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/haus.woerstenfeld.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/haus.woerstenfeld.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3420"}],"version-history":[{"count":9,"href":"https:\/\/haus.woerstenfeld.de\/index.php?rest_route=\/wp\/v2\/posts\/3420\/revisions"}],"predecessor-version":[{"id":3432,"href":"https:\/\/haus.woerstenfeld.de\/index.php?rest_route=\/wp\/v2\/posts\/3420\/revisions\/3432"}],"wp:attachment":[{"href":"https:\/\/haus.woerstenfeld.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3420"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/haus.woerstenfeld.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3420"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/haus.woerstenfeld.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3420"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}