Benutzer-Werkzeuge

Webseiten-Werkzeuge


hardware:channels:meters:power:edl-ehz:itron_ace3000_type_260

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
hardware:channels:meters:power:edl-ehz:itron_ace3000_type_260 [2016/10/15 12:40] jarnsenhardware:channels:meters:power:edl-ehz:itron_ace3000_type_260 [2023/06/21 07:51] (aktuell) justinotherguy
Zeile 1: Zeile 1:
 ====== Itron ACE3000 Type 260 ====== ====== Itron ACE3000 Type 260 ======
  
-Ich möchte hier mein Projekt zum Auslesen eines Zweirichtungszählers Itron ACE3000 Type 260 mittels PHP vorstellen. Der Zähler wird als Bezugund Einspeisezähler oder als Zweitarifzähler von verschiedenen Stromversorgernz.B. E.ON Bayern montiert und zeichnet gleichzeitig den Bezug an Strom und den eingespeisten Ertrag einer Solaranlage auf+===== Hardware ===== 
 +Der ACE3000 hat eine Infrarot-Schnittstelle nach DIN EN 62056-21 Mode C-adie für die Auswertung mit einen [[hardware:controllers:ir-schreib-lesekopf|IR-Schreib-Lesekopf]] ausgelesen werden kann.\\
  
-Da für Solaranlagen ab 01.04.2012 keine Vergütung mehr für den Eingenverbrauch erfolgt, muß dieser nicht mehr separat gezählt werdenFür eine PV-Anlage sind daher keine weiteren Zähler mehr notwendig+Der Stromzähler gibt von sich aus gar keine oder nur S0-Impulse über Die Frontschnitttstelle ausDiese Impulse sind bei einem Zweirichtungszähler nicht sinnvoll auszuwerten, da keine Trennung zwischen Bezug und Einspeisung möglich ist.
  
-Ich kann aus meinem PV-Wechselrichter (Kostal piko) die Daten direkt auslesenso daß auch für die Ermittlung des Eigenverbrauches kein zweiter Zähler benötigt wird.+Für die Kommunikation mittels d0-Protokoll muss zuerst eine Initialisierungs-Sequenz "/?!" mit [[hardware:controllers:ir-schreib-lesekopf#grundlagen|300bd7E1]] und "LF+CR" geschickt werden, um ihn zum Antworten zu bewegen. Die Baudrate kann bei dem Zähler nicht geändert werden und bleibt bei 300bd.\\
  
-Der ACE3000 hat zwar einen S0-Ausgang, dieser ist allerdings normalerweise verplombt und nur gegen Gebühr zugänglich. Zudem sind die auslesbaren Impulse nicht sinnvoll auszuwerten, da keine Trennung zwischen Bezug und Einspeisung möglich ist.+Zusätzlich hat er einen rückseitigen S0-Ausgang, dieser ist allerdings normalerweise verplombt und nur gegen Gebühr zugänglich.
  
-Zusätzlich hat der Zähler eine Infrarot-Schnittstelle nach DIN EN 62056-21 Mode C-a, die für die Auswertung verwendet wurde.+===== Auslesen des Zählers mittels vzlogger ===== 
 +Das Auslesen des Zählers kann auf zwei Arten erfolgen:\\ 
 +  - durch Auslesen der d0-Daten.\\ 
 +  durch Erfassen der S0-Impulse.\\
  
-Benutzt hab ich dazu einen [[hardware:controllers:ir-schreib-lesekopf-ttl-ausgang|TTL-IR-Schreib-Lesekopf]] und den [[hardware:controllers:yport-node|YPORT-Node]] aus dem Projekt+Beide Arten können mit dem IR-Schreib-Lesekopf erfasst und mit vzlogger ausgewertet werden. Aber immer nur wahlweise.\\
  
-Udo hat mir freundlicherweise die Bauteile geliefert, die Teile auch gleich zusammengelötet und Ethersex mit den notwendigen Grundeinstellungen vorprogrammiertso daß ich mich auf den Softwareteil konzentrieren konnte und mich nicht mit der Hardware kämpfen mussteAn dieser Stelle vielen Dank dafür.+==== vzlogger.conf für d0-Daten==== 
 +Um die d0-Daten des ACE3000 an der IR-Schnittstelle mit vzlogger und einem IR-Schreib-Lesekopf abzufragenmuss die vzlogger.conf unter /etc/ wie folgt aussehen.\\ 
 +Im Frontend des Volkszaehlers muss ein Kanal mit den Einstellungen „El. Energie (Zählerstand)“Auflösung 1 und Style = „Steps“ für Bezug erstellt werden.\\ 
 +Weiter muss, bei Zweirichtungszählern, ein zweiter Kanal mit den Einstellungen „El. Energie (Zählerstand)“, Auflösung 1 und Style = „Steps“ für Einspeisung erstellt werden.\\ 
 +Die aktuellen Zählerstände unter 'Initialverbrauch' im entsprechenden Kanal eintragen.\\
  
 +<code base vzlogger.conf>
 +{
 +  "retry": 0,
 +  "verbosity": 15,
 +  "log": "/var/log/vzlogger/vzlogger.log",
 +  
 +"local": {
 +    "enabled": false,
 +    "port": 8081,
 +    "index": true,
 +    "timeout": 0,
 +    "buffer": 0
 +  },
 +  
 +"meters": [
 +    {
 +      "enabled": true,
 +      "allowskip": false,
 +      "interval": -1,
 +      "aggtime": -1,
 +      "aggfixedinterval": false,
 +      "channels": [
 +        {
 +          "uuid": "hier die UUID aus dem im Frontend erstellten Kanal für Bezug eintragen",
 +          "identifier": "1.8.0",
 +          "api": "volkszaehler",
 +          "middleware": "http://localhost/middleware.php",
 +          "aggmode": "none",
 +          "duplicates": 0
 +        },
 +        {
 +          "uuid": "hier die UUID aus dem im Frontend erstellten Kanal für Einspeisung eintragen",
 +          "identifier": "2.8.0",
 +          "api": "volkszaehler",
 +          "middleware": "http://localhost/middleware.php",
 +          "aggmode": "none",
 +          "duplicates": 0
 +        }
 +      ],
 +      "protocol": "d0",
 +      "device": "/dev/ttyUSB0",
 +      "pullseq": "2F3F210D0A",
 +      "baudrate": 300,
 +      "parity": "7e1",
 +      "read_timeout": 10
 +       }
 +  ]
 +}
 +</code>
  
-===== Konzept =====+==== vzlogger.conf für S0-Impulse ==== 
 +Um die S0-Impulse des ACE3000 an der IR-Schnittstelle mit vzlogger und einem IR-Schreib-Lesekopf abzufragen, muss die vzlogger.conf unter /etc/ wie folgt aussehen.\\ 
 +Im Frontend des Volkszaehlers muss ein Kanal mit den Einstellungen "El. Energie (S0-Impulse)", Auflösung 1000 und Style "Steps" erstellt werden.\\
  
-Ich möchte den Zähler auslesen und die Einzelwerte für Bezug und Einspeisung in eine vorhandene MySQL-Datenbank bei einem Webhoster speichernDazu benutze ich ein kleines PHP-Skript auf dem Webserver und einen Cronserviceder zyklisch alle fünf Minuten das Skript zum Auslesen der Daten aufruft.  +<code base vzlogger.conf> 
-Die Auswertung erfogt dann mit separaten Webseitendas Volkszähler-Frontend benutze ich zur Zeit noch nicht+
 +    "retry": 0           // how long to sleep between failed requests, in seconds 
 +    "verbosity": 15,         // between 0 and 15 
 +    "log": "/var/log/vzlogger/vzlogger.log",     // path to logfileoptional
  
 +    "local": {
 +        "enabled": false,   // should we start the local HTTPd for serving live readings?
 +        "port": 8081,       // the TCP port for the local HTTPd
 +        "index": true,      // should we provide a index listing of available channels if no UUID was requested?
 +        "timeout": 30,      // timeout for long polling comet requests, 0 disables comet, in seconds
 +        "buffer": 600       // how long to buffer readings for the local interface, in seconds
 +    },
  
-===== IR-Schreib-Lese-Kopf =====+    "meters": [
  
-Der Schreib-Lesekopf kann einfach auf den Itron aufgesetzt werden. Er hält mit dem Magnet sehr gut. Danach wird der Lesekopf mit dem YPORT verbunden+ { 
 +            "enabled": true,               // disabled meters will be ignored 
 +            "allowskip": false,                  // if enabled, errors when opening meter will lead to meter being ignored 
 +            "protocol": "s0", 
 +            "aggtime": -1, 
 +            "aggfixedinterval": false,                 
 +            "device": "/dev/ttyUSB0",   // oder /dev/ttyAMA0 
 +            "channel":
 +                "identifier": "Impulse",    // s0 meter knows "Impulse" and "Power" 
 +                "uuid": "hier die erzeugte UUID aus dem Kanal im Frontend eintragen", 
 +                "middleware": "http://localhost/middleware.php", 
 +                "aggmode": "none", 
 +                "duplicates":
 +            } 
 +        } 
 +     ] 
 + } 
 +</code>
  
 +===== Test mittels Hterm =====
 +In der Hterm-Konsole gibt man die Zeichen "/?!" (Schrägstrich+Fragezeichen+Ausrufezeichen, ohne Anführungszeichen) ein, dabei drauf achten, das in Hterm bei 'Send on Enter': CR+LF eingestellt ist. Danach sollte der Stromzähler antworten. Dies sieht in etwa so aus
  
-===== YPORT-Node =====+{{:hardware:channels:meters:power:edl-ehz:hterm_ace3000.jpg?900|}}
  
-Ist das erledigt, kann der YPORT mit dem Stromnetz und und dem Router im Heimnetzwerk verbunden werden.  +<note important>Da sich der ACE3000 nach der Intialisierungssequenz bemüßigt fühltS0-Impulse auf der Infrarot-Schnittstelle auszugeben, sollte nach Eingabe der Zeichen die <Enter>-Taste schnell gedrückt werdenansonsten kollidiert die Anfrage mit den S0-Impulsen und der Zähler gibt keine Antwort.</note>
- +
-Hierzu der obligatorische Hinweis: Wer kein Fachmann istsollte die Finger von der Netzspannung lassen und die 230V von einem Fachmann anschließen lassen. Merke: Strom macht bei falscher Anwendung kleinschwarz und häßlich.  +
- +
-Der YPORT-Node wurde in Standard-Ausführung direkt ans Heimnetz geklemmt und sollte bei Aufruf der IP-Adresse seine Webseite zeigen. Hat man das am Laufenkann man sich per PuTTY o.ä. direkt mit dem YPORT verbinden. +
- +
- +
-===== Den Itron ACE3000 Type 260 zum Antworten überreden ===== +
- +
-Der Stromzähler gibt von sich aus keinerlei Infrarot-Impulse aus, so daß zuerst eine Initialisierungs-Sequenz geschickt werden muß, um ihn zum Antworten zu bewegen. Dazu stellt man in dem Client, z.B. Hterm, 300bd, Frameformat 7E1 (Data: 7, Parity: Even, Stop: 1) ein. Die Baudrate kann bei dem Zähler nicht geändert werden und bleibt bei 300bd.\\ +
- +
-Tip: Die Impulse können mit einer Digitalkamera sichtbar gemacht werden, da Digicams im Gegensatz zum menschlichen Auge infrarotempfindlich sind. +
- +
-In der Hterm-Konsole gibt man die Zeichen "/?!" (Schrägstrich+Fragezeichen+Ausrufezeichen, ohne Anführungszeichen) ein, dabei drauf achten, das in Hterm bei 'Send on Enter': CR+LF eingestellt ist. Danach sollte der Stromzähler antworten. Dies sieht in etwa so aus+
  
 +==== Beispielantwort ====
 <code> <code>
 /?!  /?! 
Zeile 54: Zeile 130:
 ! !
 </code> </code>
-{{:hardware:channels:meters:power:edl-ehz:hterm_ace3000.jpg?400|}} 
  
 Die Ausgabe kann abweichen, da der Datenblock vom Hersteller auf die Wünsche des Netzbetreibers angepasst werden kann, näheres findet man im [[http://www.stromzaehler-shop.de/stromzaehler/files/ace3000_typ260_benutzerhandbuch.pdf | Handbuch auf Seite 27, Kapitel 4.3]] Die Ausgabe kann abweichen, da der Datenblock vom Hersteller auf die Wünsche des Netzbetreibers angepasst werden kann, näheres findet man im [[http://www.stromzaehler-shop.de/stromzaehler/files/ace3000_typ260_benutzerhandbuch.pdf | Handbuch auf Seite 27, Kapitel 4.3]]
  
-Hinweis: Da sich der ACE3000 nach der Intialisierungssequenz bemüßigt fühlt, S0-Impulse auf der Infrarot-Schnittstelle auszugeben, sollte nach Eingabe der Zeichen die <Enter>-Taste schnell gedrückt werden, ansonsten kollidiert die Anfrage mit den S0-Impulsen und der Zähler gibt keine Antwort.+===== PHP-Script =====
  
 +Das nachfolgende Scriptzeigt, wie man mit dem genannten Equipment die Daten des Zählers abfragen kann. Die Ausgabe benötigt ca. 6-10 Sekunden bis zur Anzeige. Die Variablenwerte können dann nach Wunsch in eigenen Projekten weiterverwendet werden.
  
-===== Routing ===== +<code php>
- +
-Funktioniert die manuelle Ausgabe, kann man sich an die externe Anbindung wagen. Dazu ist im Heimrouter ein Forwarding auf den YPORT anzulegen. Es muss dabei der Port 7970 weitergeleitet werden, die Weiterleitung von Port 80 ist nicht notwendig. Wie das geht, sollte im Benutzerhandbuch des Routers nachlesbar sein  +
- +
-===== PHP-Abfrage ===== +
- +
-Die nachfolgende Abfrage zeigt, wie man mit dem genannten Equipment die Daten des Zählers abfragen kann. Die Ausgabe benötigt ca. 6-10 Sekunden bis zur Anzeige. Die Variablenwerte können dann nach Wunsch in eigenen Projekten weiterverwendet werden. +
- +
-<code>+
 <?php <?php
   $zeilen = 8;                                                                    // es sollten soviele Zeilen abgefragt   $zeilen = 8;                                                                    // es sollten soviele Zeilen abgefragt
Zeile 106: Zeile 174:
 Das Auslesen einer fixen Anzahl von Zeilen hat gegenüber der ebenfalls möglichen Abfrage von Einzelzeichen den Vorteil, daß der Socket möglichst schnell wieder geschlossen wird. Bei mir ist die Abfrage nach 7 Sekunden erledigt. Das Auslesen einer fixen Anzahl von Zeilen hat gegenüber der ebenfalls möglichen Abfrage von Einzelzeichen den Vorteil, daß der Socket möglichst schnell wieder geschlossen wird. Bei mir ist die Abfrage nach 7 Sekunden erledigt.
  
-===== Abfrage mit Bash-Script =====+===== Bash-Script =====
  
 Hier ein Beispiel für die Abfrage mit einem Bash-Script und Berechnung der "virtuellen" Zähler Eigenverbrauch und Gesamtverbrauch. Hier ein Beispiel für die Abfrage mit einem Bash-Script und Berechnung der "virtuellen" Zähler Eigenverbrauch und Gesamtverbrauch.
Zeile 114: Zeile 182:
 Die Laufzeit für die Abfrage beider Zähler liegt zwischen 18 und 26s. Die Laufzeit für die Abfrage beider Zähler liegt zwischen 18 und 26s.
  
-<code>+<code bash>
 #!/bin/bash #!/bin/bash
  
Zeile 264: Zeile 332:
 ===== Python-Script für Testzwecke ===== ===== Python-Script für Testzwecke =====
 Hier noch ein Script eines Users: Hier noch ein Script eines Users:
-<code>+<code python>
 ### ###
 import serial import serial
Zeile 298: Zeile 366:
 ### ###
 </code> </code>
- 
-===== Auslesen des Zählers mittels vzlogger ===== 
- 
-Das Auslesen des Zählers kann auf zwei Arten erfolgen:\\ 
-1. durch Auslesen der d0-Daten.\\ 
-2. durch Erfassen der S0-Impulse.\\ 
- 
-Der Zähler muss aufgefordert werden um seine Daten per d0 zu senden. Baudrate: 300bd, Frameformat: 7E1\\ 
-Wird er nicht aufgefordert, sendet der Zähler automatisch S0-Impulse über die IR-Schnittstelle.\\ 
-Beide Arten können mit dem IR-Schreib-Lesekopf erfasst und mit vzlogger ausgewertet werden. Aber immer nur eine Art auf einmal.\\ 
-===== vzlogger.conf für d0-Daten===== 
-Um die d0-Daten des ACE3000 an der IR-Schnittstelle mit vzlogger und einem IR-Schreib-Lesekopf abzufragen, muss die vzlogger.conf unter /etc/ wie folgt aussehen. Darauf achten, dass hinter der letzten geschweiften Klammer kein Leerzeichen oder eine Leerzeile erzeugt wird. 
-Im Frontend des Volkszaehlers muss ein Kanal mit den Einstellungen „El. Energie (Zählerstand)“, Auflösung 1 und Style = „Steps“ für Bezug erstellt werden.\\ 
-Weiter muss ein zweiter Kanal mit den Einstellungen „El. Energie (Zählerstand)“, Auflösung 1 und Style = „Steps“ für Einspeisung erstellt werden.\\ 
-Nicht vergessen die aktuellen Zählerstände unter 'Initialverbrauch' im entsprechenden Kanal einzutragen.\\ 
-Die dadurch erstellten UUIDs (auf das (i) neben dem Kanal klicken um die UUID sichtbar zu machen) werden in die vzlogger.conf eingetragen.\\ 
-Dazu am Besten den im Image vorhandenen Editor 'nano' benutzen. Aufruf: 'sudo nano /etc/vzlogger.conf'.\\ 
-Nach Bearbeiten der vzlogger.conf immer ein 'sudo reboot'.\\ 
- 
-<code> 
-{ 
-  "retry": 0, 
-  "daemon": true, 
-  "verbosity": 15, 
-  "log": "/tmp/vzlogger.log", 
-   "local": { 
-    "enabled": false, 
-    "port": 8080, 
-    "index": true, 
-    "timeout": 0, 
-    "buffer": 0 
-  }, 
-  "meters": [ 
-    { 
-      "enabled": true, 
-      "allowskip": false, 
-      "interval": -1, 
-      "aggtime": -1, 
-      "aggfixedinterval": false, 
-      "channels": [ 
-        { 
-          "uuid": "hier die UUID aus dem im Frontend erstellten Kanal für Bezug eintragen", 
-          "identifier": "1.8.0", 
-          "api": "volkszaehler", 
-          "middleware": "http://localhost/middleware.php", 
-          "aggmode": "none", 
-          "duplicates": 0 
-        }, 
-        { 
-          "uuid": "hier die UUID aus dem im Frontend erstellten Kanal für Einspeisung eintragen", 
-          "identifier": "2.8.0", 
-          "api": "volkszaehler", 
-          "middleware": "http://localhost/middleware.php", 
-          "aggmode": "none", 
-          "duplicates": 0 
-        } 
-      ], 
-      "protocol": "d0", 
-      "device": "/dev/ttyUSB0", 
-      "pullseq": "2F3F210D0A", 
-      "baudrate": 300, 
-      "parity": "7e1", 
-      "read_timeout": 10, 
-       } 
-  ] 
-} 
-</code> 
-===== vzlogger.conf für S0-Impulse===== 
- 
-Um die S0-Impulse des ACE3000 an der IR-Schnittstelle mit vzlogger und einem IR-Schreib-Lesekopf abzufragen, muss die vzlogger.conf unter /etc/ wie folgt aussehen. Darauf achten, dass hinter der letzten geschweiften Klammer kein Leerzeichen oder eine Leerzeile erzeugt wird.\\ 
-Im Frontend des Volkszaehlers muss ein Kanal mit den Einstellungen "El. Energie (S0-Impulse)", Auflösung 1000 und Style = "Steps" erstellt werden.\\ 
-Nach Bearbeiten der vzlogger.conf immer ein 'sudo reboot'.\\ 
- 
-<code> 
- 
-{ 
-    "retry": 0,            // how long to sleep between failed requests, in seconds 
-    "daemon": true,        // run periodically 
-    "verbosity": 15,         // between 0 and 15 
-    "log": "/tmp/vzlogger.log",     // path to logfile, optional 
- 
-    "local": { 
-        "enabled": false,   // should we start the local HTTPd for serving live readings? 
-        "port": 8080,       // the TCP port for the local HTTPd 
-        "index": true,      // should we provide a index listing of available channels if no UUID was requested? 
-        "timeout": 30,      // timeout for long polling comet requests, 0 disables comet, in seconds 
-        "buffer": 600       // how long to buffer readings for the local interface, in seconds 
-    }, 
- 
-    "meters": [ 
- 
- { 
-            "enabled": true,               // disabled meters will be ignored 
-            "skip": false,                  // if enabled, errors when opening meter will lead to meter being ignored 
-            "protocol": "s0", 
-            "aggtime": 30,                 // aggregate all signals and give one update to middleware every 30 seconds 
-            "device": "/dev/ttyUSB0",   // oder /dev/ttyAMA0 
-            "channel": { 
-                "identifier": "Impulse",    // s0 meter knows "Impulse" and "Power" 
-                "uuid": "hier die erzeugte UUID aus dem Kanal im Frontend eintragen", 
-                "middleware": "http://localhost/middleware.php", 
-            } 
-        } 
-     ] 
- } 
- 
-</code> 
- 
  
hardware/channels/meters/power/edl-ehz/itron_ace3000_type_260.1476528038.txt.gz · Zuletzt geändert: 2016/10/15 12:40 von jarnsen