{"id":530,"date":"2022-12-23T12:28:01","date_gmt":"2022-12-23T11:28:01","guid":{"rendered":"https:\/\/janscholten.de\/blog\/?p=530"},"modified":"2023-02-27T10:56:14","modified_gmt":"2023-02-27T09:56:14","slug":"volkszaehler-daten-aus-dem-stromzaehler-auslesen","status":"publish","type":"post","link":"https:\/\/janscholten.de\/blog\/2022\/12\/volkszaehler-daten-aus-dem-stromzaehler-auslesen\/","title":{"rendered":"Volksz\u00e4hler Daten aus dem Stromz\u00e4hler auslesen"},"content":{"rendered":"<p>Ziel auslesen eines Smartmeters (EMH-ED300L) -&gt; Vorbereitung f\u00fcr PV -&gt; Wieviel &#8222;Watt&#8220; brauchen wir denn und wie verteilt sich das?<br \/>\nIch habe genutzt:<br \/>\n&#8211; USB-IR Lesekopf (von hichi aus dem PV Forum)<br \/>\n&#8211; RasPi mit Volksz\u00e4hler Image<\/p>\n<p>Als erstes den PIN vom Versorger besorgt, damit die Infrarotschnittstelle Daten ausgibt.<br \/>\nMit einer Taschenlampe musste man den PIN eingeben &#8211; komisches Konstrukt, aber ber\u00fchrungslos. nichts f\u00fcr Leute mit zittrigen H\u00e4nden.<\/p>\n<p>Pi mit SD Karte und Volksz\u00e4hler Image (Download von der Webseite volkszaehler.org) schreiben mit dem Raspberry Imager.<\/p>\n<p>Feste DHCP IP vergeben und Erreichbarkeit getestet, Passwort ge\u00e4ndert, so muss ich nicht im Keller stehen um zu konfigurieren.<\/p>\n<p>USB Lesekopf an der Frontplatte anbringen und am Pi anschliessen.<br \/>\nUdev Rule erstellen, damit der Lesekopf immer unter einem bestimmten Namen<\/p>\n<pre>udevadm info --query=all --name=\/dev\/ttyUSB0<\/pre>\n<p>Uns interessiert die &#8222;Serial Short&#8220;<\/p>\n<pre>root@raspberrypi:\/home\/pi# udevadm info --query=all --name=\/dev\/ttyUSB0\nP: \/devices\/platform\/soc\/3f980000.usb\/usb1\/1-1\/1-1.1\/1-1.1.3\/1-1.1.3:1.0\/ttyUSB0\/tty\/ttyUSB0\nN: ttyUSB0\n[..]\nE: ID_MODEL_ENC=CP2102\\x20USB\\x20to\\x20UART\\x20Bridge\\x20Controller\nE: ID_MODEL_ID=ea60\nE: ID_REVISION=0100\nE: ID_SERIAL=Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001\nE: ID_SERIAL_SHORT=0001\n[..]<\/pre>\n<p>Udev Rule erstellen, dann wird der Lesekopf immer unter dem gleichen namen ansprechbar, auch wenn an einem anderen USB Port angesteckt:<\/p>\n<pre>vi \/etc\/udev\/rules.d\/99-usb-ir-lesekopf.rules\nSUBSYSTEM==\"tty\", ENV{ID_SERIAL_SHORT}==\"0001\", SYMLINK+=\"usb-ir-lesekopf0\"\n<\/pre>\n<p>Danach Volksz\u00e4hler konfigurieren &#8211; zum start erstmal eine minimal Config erstellen (meters -&gt; enabled, protocol sml  und verbosity auf 15) und schauen, ob was ankommt:<br \/>\n\/etc\/vzlogger.conf<\/p>\n<pre>{\n\"retry\" : 0,                \/* how long to sleep between failed requests, in seconds *\/\n\"verbosity\" : 15,           \/* between 0 and 15 *\/\n\"log\" : \"\/var\/log\/vzlogger\/vzlogger.log\",\/* path to logfile, optional *\/\n\"local\" : {\n        \"enabled\" : false,  \/* should we start the local HTTPd for serving live readings? *\/\n        \"port\" : 8081,      \/* the TCP port for the local HTTPd *\/\n        \"index\" : true,     \/* should we provide a index listing of available channels? *\/\n        \"timeout\" : 30,     \/* timeout for long polling comet requests, 0 disables comet, in seconds *\/\n        \"buffer\" : 600      \/* how long to buffer readings for the local interface, in seconds *\/\n},\n\"meters\" : [{\n        \"enabled\" : true,   \/* disabled meters will be ignored *\/\n        \"protocol\" : \"sml\", \/* use 'vzlogger -h' for list of available protocols *\/\n        \"device\" : \"\/dev\/usb-ir-lesekopf0\",\n        },\n]}<\/pre>\n<pre>systemctl start vzlogger\ntail -f \/var\/log\/vzlogger\/vzlogger.log\n[..]\nDec 22 15:26:26][]     Startup done.\n[Dec 22 15:26:26][mtr0] Config.local: 0\n[Dec 22 15:26:27][mtr0] Got 4 new readings from meter:\n[Dec 22 15:26:27][mtr0] Reading: id=1-0:1.8.0*255\/ObisIdentifier:1-0:1.8.0*255 value=70862637.00 ts=1671719187367\n[Dec 22 15:26:27][mtr0] Reading: id=1-0:1.8.1*255\/ObisIdentifier:1-0:1.8.1*255 value=36159417.50 ts=1671719187367\n[Dec 22 15:26:27][mtr0] Reading: id=1-0:1.8.2*255\/ObisIdentifier:1-0:1.8.2*255 value=34703219.50 ts=1671719187367\n[Dec 22 15:26:27][mtr0] Reading: id=1-0:16.7.0*255\/ObisIdentifier:1-0:16.7.0*255 value=1553.80 ts=1671719187367\n[Dec 22 15:26:28][mtr0] Got 4 new readings from meter:\n[Dec 22 15:26:28][mtr0] Reading: id=1-0:1.8.0*255\/ObisIdentifier:1-0:1.8.0*255 value=70862637.60 ts=1671719188732\n[Dec 22 15:26:28][mtr0] Reading: id=1-0:1.8.1*255\/ObisIdentifier:1-0:1.8.1*255 value=36159418.10 ts=1671719188732\n[Dec 22 15:26:28][mtr0] Reading: id=1-0:1.8.2*255\/ObisIdentifier:1-0:1.8.2*255 value=34703219.50 ts=1671719188732\n[Dec 22 15:26:28][mtr0] Reading: id=1-0:16.7.0*255\/ObisIdentifier:1-0:16.7.0*255 value=1560.00 ts=1671719188732\n[Dec 22 15:26:30][mtr0] Got 4 new readings from meter:\n[..]\n<\/pre>\n<p>-&gt; Es kommen sek\u00fcndlich neue Daten und mein Meter gibt folgende OBIS Codes aus.<\/p>\n<pre>1-0:1.8.0 (Gesamtz\u00e4hlerstand)\n1-0:1.8.1 Z\u00e4hlerstand HT\n1-0:1.8.2 Z\u00e4hlerstand NT\n1-0:16.7.0 Aktuelle Leistung in Watt\n<\/pre>\n<p>Kommt hier nichts muss man erstmal suchen -&gt; ggf die IR Diode nicht richtig platziert, debuggen nach volksz\u00e4hler wiki<\/p>\n<p>Jetzt muss man einen (oder mehrere) Kan\u00e4le anlegen, mich interessiert nur die Leistung, also lege ich im Frontend auf der Webseite (-&gt; http:\\\\IP_des_PI) einen Kanal an:<br \/>\n&#8222;Kanal hinzuf\u00fcgen&#8220; -&gt; Elektrische Energie (Leistungswerte) &#8211; \u00f6ffentlich -&gt; Stil Step, Name&#8220;Haus 1-0:16.7.0 Leistung&#8220;<br \/>\nEs wird eine UUID angezeigt (bekommt man auch nachtr\u00e4glich \u00fcber das blaue &#8222;i&#8220;) die ben\u00f6tigt man f\u00fcr die vzlogger.conf<\/p>\n<p>Man erg\u00e4nzt die in der vzlogger.conf: indem man hinter die device Zeile den\/die neuen Kan\u00e4le h\u00e4ngt:<\/p>\n<pre>{\n\"retry\" : 0, \/* how long to sleep between failed requests, in seconds *\/\n\"verbosity\" : 15 , \/* between 0 and 15 *\/\n\"log\" : \"\/var\/log\/vzlogger\/vzlogger.log\", \/* path to logfile, optional *\/\n\n\"local\" : {\n\"enabled\" : false, \/* should we start the local HTTPd for serving live readings? *\/\n\"port\" : 8081, \/* the TCP port for the local HTTPd *\/\n\"index\" : true, \/* should we provide a index listing of available channels if no UUID was requested? *\/\n\"timeout\" : 30, \/* timeout for long polling comet requests, 0 disables comet, in seconds *\/\n\"buffer\" : 600 \/* how long to buffer readings for the local interface, in seconds *\/\n},\n\n\"meters\" : [{\n         \"enabled\" : true, \/* disabled meters will be ignored *\/\n         \"protocol\" : \"sml\", \/* see 'vzlogger -h' for list of available prot$ *\/\n         \"device\" : \"\/dev\/usb-ir-lesekopf0\",\n         \"channels\": [{\n         \"uuid\" : \"f0014260-8295-11ed-aaad-e54ab8ec0d75 &lt;-UUID aus dem Frontend\",\n         \"middleware\" : \"http:\/\/localhost\/middleware.php\",\n         \"identifier\" : \"1-0:16.7.0\" \/* Leistung *\/\n         }]\n         }\n]}\n<\/pre>\n<p>nochmal starten und log anschauen:<\/p>\n<pre>systemctl start vzlogger\ntail -f \/var\/log\/vzlogger\/vzlogger.log\n[Dec 23 08:52:05][mtr0] Got 4 new readings from meter:\n[Dec 23 08:52:05][mtr0] Reading: id=1-0:1.8.0*255\/ObisIdentifier:1-0:1.8.0*255 value=70890821.30 ts=1671781925108\n[Dec 23 08:52:05][mtr0] Reading: id=1-0:1.8.1*255\/ObisIdentifier:1-0:1.8.1*255 value=36174328.40 ts=1671781925108\n[Dec 23 08:52:05][mtr0] Reading: id=1-0:1.8.2*255\/ObisIdentifier:1-0:1.8.2*255 value=34716492.90 ts=1671781925108\n[Dec 23 08:52:05][mtr0] Reading: id=1-0:16.7.0*255\/ObisIdentifier:1-0:16.7.0*255 value=1013.00 ts=1671781925108\n[Dec 23 08:52:05][chn0] Adding reading to queue (value=1013.00 ts=1671781925108)\n[Dec 23 08:52:05][chn0] ==&gt; number of tuples: 1\n[Dec 23 08:52:05][chn0] compare: 1671781923743 1671781925108\n[Dec 23 08:52:05][chn0] copied 1\/1 values for middleware transmission\n[Dec 23 08:52:05][chn0] JSON request body: [ [ 1671781925108, 1013 ] ]\n[Dec 23 08:52:05][chn0] CURL: Found bundle for host localhost: 0x74a07ed0 [serially]\n[Dec 23 08:52:05][chn0] CURL: Can not multiplex, even if we wanted to!\n[Dec 23 08:52:05][chn0] CURL: Re-using existing connection! (#0) with host localhost\n[Dec 23 08:52:05][chn0] CURL: Connected to localhost (::1) port 80 (#0)\n[Dec 23 08:52:05][chn0] CURL: Sent 27 bytes: '[ [ 1671781925108, 1013 ] ]'\n[Dec 23 08:52:05][chn0] CURL: upload completely sent off: 27 out of 27 bytes\n[Dec 23 08:52:05][chn0] CURL: Mark bundle as not supporting multiuse\n[Dec 23 08:52:05][chn0] CURL: Received 26 bytes: '{\"version\":\"0.3\",\"rows\":1}'\n[Dec 23 08:52:05][chn0] CURL: Connection #0 to host localhost left intact\n[Dec 23 08:52:05][chn0] CURL Request succeeded with code: 200\n[Dec 23 08:52:05][chn0] emptied all (1) values\n<\/pre>\n<p>Man sieht jetzt auch die CURL requests mit dem der Datenwert in die Datenbank\/an die Middleware) geschickt wird.<\/p>\n<p>In der Weboberfl\u00e4che kann man nach kuzer Zeit die ersten Daten bewundern.<br \/>\nDanach das logging im vzlogger.conf von &#8222;15&#8220; auf &#8222;0&#8220; stellen, da sonst sehr viel geloggt wird (schlecht f\u00fcr die Haltbarkeit der SSD). ggf testen ob der Pi auch einen Reboot \u00fcbersteht und die vzlogger dann automatisch anspringt<\/p>\n<p>Sehr geholfen hat mir:<br \/>\nhttps:\/\/wiki.volkszaehler.org\/howto\/emh_pv-anlage<br \/>\nhttps:\/\/wiki.volkszaehler.org\/howto\/debug<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ziel auslesen eines Smartmeters (EMH-ED300L) -&gt; Vorbereitung f\u00fcr PV -&gt; Wieviel &#8222;Watt&#8220; brauchen wir denn und wie verteilt sich das? Ich habe genutzt: &#8211; USB-IR Lesekopf (von hichi aus dem PV Forum) &#8211; RasPi mit Volksz\u00e4hler Image Als erstes den PIN vom Versorger besorgt, damit die Infrarotschnittstelle Daten ausgibt. Mit einer Taschenlampe musste man den &hellip; <a href=\"https:\/\/janscholten.de\/blog\/2022\/12\/volkszaehler-daten-aus-dem-stromzaehler-auslesen\/\" class=\"more-link\"><span class=\"screen-reader-text\">Volksz\u00e4hler Daten aus dem Stromz\u00e4hler auslesen<\/span> weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[52,66,65],"class_list":["post-530","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-linux","tag-stromzaehler","tag-vzlogger"],"_links":{"self":[{"href":"https:\/\/janscholten.de\/blog\/wp-json\/wp\/v2\/posts\/530","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/janscholten.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/janscholten.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/janscholten.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/janscholten.de\/blog\/wp-json\/wp\/v2\/comments?post=530"}],"version-history":[{"count":9,"href":"https:\/\/janscholten.de\/blog\/wp-json\/wp\/v2\/posts\/530\/revisions"}],"predecessor-version":[{"id":548,"href":"https:\/\/janscholten.de\/blog\/wp-json\/wp\/v2\/posts\/530\/revisions\/548"}],"wp:attachment":[{"href":"https:\/\/janscholten.de\/blog\/wp-json\/wp\/v2\/media?parent=530"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/janscholten.de\/blog\/wp-json\/wp\/v2\/categories?post=530"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/janscholten.de\/blog\/wp-json\/wp\/v2\/tags?post=530"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}