Benutzer-Werkzeuge

Webseiten-Werkzeuge


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

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:siemens_td3511 [2016/10/17 19:08] – Vereinheitlicht jauhardware:channels:meters:power:edl-ehz:siemens_td3511 [2023/05/29 13:51] (aktuell) – korrektur Tippfehler gregor.wolf
Zeile 2: Zeile 2:
 {{ :hardware:channels:meters:power:siemens:td-3511.png?200|TD-3511}} {{ :hardware:channels:meters:power:siemens:td-3511.png?200|TD-3511}}
 Beim TD-3511 von Siemens  handelt sich um Zweirichtungszähler mit IR-Schnittstelle. Der Zähler besitzt auch noch einen frei zugänglichen Steckplatz für einen M-Bus Adapter.\\ Beim TD-3511 von Siemens  handelt sich um Zweirichtungszähler mit IR-Schnittstelle. Der Zähler besitzt auch noch einen frei zugänglichen Steckplatz für einen M-Bus Adapter.\\
-<note important>User in Oberösterreich müssen sich neuerdings beim Energielieferanten registrieren:\\ +<note important>User in Oberösterreich nutzen diese Anleitung:\\ [[/hardware/channels/meters/power/edl-ehz/siemens_td3511_in_oberoesterreich|Siemens TD-3511 in Oberösterreich]]\\ 
-http://strom.netzgmbh.at/eag_at/page/284094835607631929_0_1060376991645160446,de.html \\ +</note>
-um den Zähler per IR-Schnittstelle auszulesen. Der notwendige AES-Schlüssel muss beim Netzbetreiber beantragt werden.\\ +
-Siehe auch den Thread im [[http://www.photovoltaikforum.com/volkszaehler-org-f131/siemens-td-3511-auslesen-t107784-s30.html|Photovoltaikforum]] </note>+
  
 ===== Hardware ===== ===== Hardware =====
Zeile 11: Zeile 9:
  
 ===== Kommunikation ===== ===== Kommunikation =====
 +Die Datenübertragung erfolgt gemäß Hersteller-Anleitung per IEC 62056-21 in Mode "C".\\
 +Das im vzlogger zu konfigurierende Protokoll ist "d0".\\
 +Der Zähler arbeitet im Pull-Modus, d.h. er sendet die Daten erst nach Anforderung.
 +
 +<note important>Die initiale Kommunikation muss mit einer baudrate 300Bit/s erfolgen, erst nach dem vom Zähler gesendeten Identifikationstelegramm kann per Quittierungs-/Optionsauswahltelegramm auf eine höhere Baudrate umgestellt werden.</note>
 +
 +----
 +
 Der Zähler erwartet die Initialisierungssequenz Der Zähler erwartet die Initialisierungssequenz
-<code>/?!\r\n</code> +<code>/?!\r\n (hex 2F 3F 21 0D 0A)</code> 
-nach Startsequenz +und antwortet mit seinem Identifikationstelegramm. 
-<code>\x06\x30\x35\x31\x0D\x0A + 
-\x06050\r\n</code> +Nach der an den Zähler gesendeten Startsequenz ("Optionsauswahltelegramm") "ACK 0 Z 0 CR LF" 
-sendet er die Daten mit 9600bd.+<code> ACK0<Z><Y>\r\n (hex 06 30 zz yy 0D 0A)</code> 
 +sendet er bei Option "Y" = 0 ("Daten auslesen") die Daten in der mit "Z" ausgewählten Baudrate.\\ 
 +Beispiel: "ACK050\r\n" (hex 06 30 35 30 0D 0A) --> Daten werden vom Zähler mit 9.600Bit/s gesendet. 
 + 
 + 
 +Ausschnitt aus der Hersteller-Anleitung (s. Quellen - Benutzerhandbuch (Siemens AG Österreich)): 
 +>Folgende Bitraten in Abhängigkeit des Wertes des Zeichens "Z" sind im Mode "C" definiert: 
 +><code> 
 +Code Übertragungsrate 
 +0      300 Bit/s 
 +1      600 Bit/s 
 +2    1.200 Bit/s 
 +3    2.400 Bit/s 
 +4    4.800 Bit/s 
 +5    9.600 Bit/s 
 +6   19.200 Bit/s 
 +9  115.200 Bit/s 
 +</code> 
 +>Der Zähler meldet sich aus Kompatibilitätsgründen mit der normkonformen Baudratenkennung "6"Eine maximal mögliche Baudrate von 115.200 Bd wird unterstützt. 
 + 
 +----
  
 Wahrscheinlich funktionieren auch die Befehle des [[hardware:channels:meters:power:edl-ehz:elster_AS1440]]. Die Umschaltung der Geschwindigkeit auf 19200bps funktioniert auf jeden Fall, dazu die Startsequenz verwenden: Wahrscheinlich funktionieren auch die Befehle des [[hardware:channels:meters:power:edl-ehz:elster_AS1440]]. Die Umschaltung der Geschwindigkeit auf 19200bps funktioniert auf jeden Fall, dazu die Startsequenz verwenden:
 <code>\x06060\r\n</code> <code>\x06060\r\n</code>
  
-===== Beispielkonfiguration vzlogger ===== +---- 
-Vzlogger ist in der Lage diesen Zähler auszulesen+<note tip>Je nach Messstellenbetreiber kann auch eine niedrigere, als die vom Hersteller angegebene, maximal mögliche Baudrate parametriert sein.\\ 
-<code> +Falls die Kommunikation bei einer höheren Baudrate nicht funktioniert, sollte in der Startsequenz manuell die niedrigste Baudrate von 300Bit/s eingestellt werden (automatische Erkennung deaktivieren).</note> 
-   "meters":+ 
-        // example for OMS based device+ 
 +---- 
 + 
 + 
 +===== Beispielkonfiguration ===== 
 +<note tip>Im Gegensatz zu anderen Zählern müssen beim TD-3511 die OBIS-Kennzahlen in der Form "C.D.E" (Bsp: 1.7.0) und nicht in der Form "A-B:C.D.E" (Bsp: 1-1:1.7.0) eingetragen werden. 
 +</note> 
 + 
 + 
 +<code base vzlogger.conf
 +
 +  "verbosity": 10, 
 +  "log": "/var/log/vzlogger/vzlogger.log", 
 +  "retry": 30, 
 +  "local":
 +    "enabled": false, 
 +    "port": 8081, 
 +    "index": true, 
 +    "timeout": 0, 
 +    "buffer": -1 
 +  }, 
 +  "meters":
 +    { 
 +      "enabled": true, 
 +      "allowskip": false, 
 +      "protocol": "d0", 
 +      "device": "/dev/ttyAMA0", 
 +      "aggtime": -1, 
 +      "interval": 10, 
 +      "pullseq": "2F3F210D0A",        // "/?!\r\n" = 2F 3F 21 0D 0A 
 +      "ackseq": "063034300D0A",       //needs to be in accordance to parameter 'baudrate_read' 
 +                                      //"auto" for auto detection 
 +      "baudrate": 300, 
 +      "baudrate_read": 4800, 
 +      "baudrate_change_delay": 300, 
 +      "parity": "7e1", 
 +      "use_local_time": false, 
 +      "read_timeout": 10,             //?? 2200ms according to manual? 
 +      "dump_file": "/home/pi/D0_pullSeq.txt", 
 +      "channels": [
         {         {
-            "enabled": true+          "identifier": "1.7.0"     //Positive active instantaneous power (A+) [kW] 
-            "protocol": "oms", +          "uuid": "00000000-0000-0000-0000-000000000000", 
-            "device": "/dev/ttyUSB0", +          "api": "influxdb", 
-            "key": "123456789012345667890", +          "host": "http://localhost:8086", 
-            "channel": { +          "database": "vzlogger", 
-                "uuid": "a7b84340-249d-11e5-b65e-f13edf25e0a4", +          "measurement_name": "vz_measurement", 
-                "identifier": "1.7.0", +          "duplicates": 600, 
-                "middleware": "http://localhost/middleware.php", +          "username": "<username>", 
-                } +          "password": "<password>" 
-        },+        }, 
 +          "identifier": "1.8.1",      //Positive active energy (A+) in tariff T1 [kWh] 
 +          "uuid": "00000000-0000-0000-0000-000000000000", 
 +          "api": "influxdb", 
 +          "host": "http://localhost:8086", 
 +          "database": "vzlogger", 
 +          "measurement_name": "vz_measurement", 
 +          "duplicates": 600, 
 +          "username": "<username>", 
 +          "password": "<password>" 
 +        }, { 
 +          "identifier": "2.8.1",      //Negative active energy (A+) in tariff T1 [kWh] 
 +          "uuid": "00000000-0000-0000-0000-000000000000", 
 +          "api": "influxdb", 
 +          "host": "http://localhost:8086", 
 +          "database": "vzlogger", 
 +          "measurement_name": "vz_measurement", 
 +          "duplicates": 600, 
 +          "username": "<username>", 
 +          "password": "<password>" 
 +        } 
 +      ] 
 +    } 
 +  ] 
 +}
 </code> </code>
  
-===== Auslesen per PHP =====+ 
 +---- 
 + 
 + 
 +===== Auslesen mit anderen Methoden als vzlogger ===== 
 + 
 +==== Auslesen per PHP ====
 Dieses Script übergibt die Daten ganz normal an die Middleware. Dieses Script übergibt die Daten ganz normal an die Middleware.
 Das Script verwendet als Geschwindigkeit 9600. Wer 19200 möchte muss die beiden Zeilen im Script einkommentieren. Das Script verwendet als Geschwindigkeit 9600. Wer 19200 möchte muss die beiden Zeilen im Script einkommentieren.
-<code>+<code php>
 <?php <?php
  
Zeile 186: Zeile 281:
 </code> </code>
  
-===== Auslesen per C zu MySQL =====+==== Auslesen per C zu MySQL ====
 Das folgende C Programm kann alle Daten mit dem [[hardware:controllers:ir-schreib-lesekopf-usb-ausgang|USB-IR-Schreib-Lesekopf]] empfangen und in eine MySQL-Datenbank speichern.\\ Das folgende C Programm kann alle Daten mit dem [[hardware:controllers:ir-schreib-lesekopf-usb-ausgang|USB-IR-Schreib-Lesekopf]] empfangen und in eine MySQL-Datenbank speichern.\\
 Dabei wird die Übertragungsrate auf 9600bps erhöht.\\ Dabei wird die Übertragungsrate auf 9600bps erhöht.\\
 Das Programm kann über PHP mit pclose(popen("cmd.exe /c C:/Pfad/programm.exe", 'r')); aufgerufen werden. Das Programm kann über PHP mit pclose(popen("cmd.exe /c C:/Pfad/programm.exe", 'r')); aufgerufen werden.
  
-<code>+<code c>
 #include <windows.h> #include <windows.h>
 #include <stdio.h> #include <stdio.h>
Zeile 365: Zeile 460:
 </code> </code>
  
-===== Test mit HTerm  =====+==== Test mit HTerm  ====
 Zum Testen kann [[http://www.der-hammer.info/terminal/|hterm]] verwendet werden.\\ Zum Testen kann [[http://www.der-hammer.info/terminal/|hterm]] verwendet werden.\\
 Einzustellen sind:\\ Einzustellen sind:\\
Zeile 376: Zeile 471:
 Auf "Connect" klicken, dann im Eingabefeld "/?!" (ohne Anführungszeichen) eingeben und Enter drücken. Dann sollte der Zähler sofort mit seiner Seriennummer antworten. Nach 2-3 Sekunden fängt der Zähler dann an, Daten auszugeben. Auf "Connect" klicken, dann im Eingabefeld "/?!" (ohne Anführungszeichen) eingeben und Enter drücken. Dann sollte der Zähler sofort mit seiner Seriennummer antworten. Nach 2-3 Sekunden fängt der Zähler dann an, Daten auszugeben.
  
-===== Test mit Perl-Script+hterm ====+==== Test mit Perl-Script ==== 
-Das folgende Perlscript automatisiert die manuelle Bearbeitung des Zählers mit hterm. +<code perl>
-<code>+
 #!/usr/bin/perl #!/usr/bin/perl
- 
 # #
-# (m)ein Stromzähler mit IR-Schnittstelle blubbert nach einem "Anforderung-+# (m)ein Stromzähler mit IR-Schnittstelle blubbert nach einem "Aufforderung-
 # telegramm" Daten raus. Das Telegramm ist mit 300 Baud, 7 Bit, 1 Stoppbit # telegramm" Daten raus. Das Telegramm ist mit 300 Baud, 7 Bit, 1 Stoppbit
 # und gerader Parität zu senden. Das ist der Initialmodus von Geräten, # und gerader Parität zu senden. Das ist der Initialmodus von Geräten,
Zeile 391: Zeile 484:
 # Datum: 20120302 # Datum: 20120302
 # #
- +# 20171230: Andreas Schulze: speed :-)
-my $PORT='/dev/ttyUSB0'; +
-my $anforderungstelegramm = "\n/?!\r\n";+
  
 use warnings; use warnings;
Zeile 399: Zeile 490:
 use utf8; use utf8;
 use Device::SerialPort; use Device::SerialPort;
 +use Time::HiRes qw(usleep);
  
-my $tty = new Device::SerialPort($PORT|| die "can't open $PORT: $!"+# functions 
-$tty->baudrate(300     || die 'fail setting baudrate'+sub tty_init($); 
-$tty->databits(7       || die 'fail setting databits'+sub tty_baudrate($$); 
-$tty->stopbits(1       || die 'fail setting stopbits'+sub tty_close($); 
-$tty->parity("even"    || die 'fail setting parity'; +sub send_telegram($$); 
-$tty->write_settings     || die 'fail write settings'; +sub receive_line($);
-#$tty->debug(1);+
  
-my $num_out = $tty->write($anforderungstelegramm); +# global vars 
-die "write failed\n" unless ($num_out); +my $PORT='/dev/ttyUSB0'; 
-die "write inclomplete\n" unless ($num_out == length($anforderungstelegramm)); +my $aufforderung = "/?!"; 
-print "$num_out Bytes written\n";+my $speed = chr(6) . "090"; 
 +my $tty
 +my $answer; 
 + 
 +# main 
 +$tty = tty_init($PORT); 
 +send_telegram($tty, $aufforderung); 
 +print receive_line($tty); 
 + 
 +usleep(250*1000); 
 + 
 +send_telegram($tty, $speed); 
 +usleep(250*1000); 
 +tty_baudrate($tty, 115200); 
 + 
 +do { 
 +  $answer = receive_line($tty); 
 +  print $answer; 
 +} until $answer eq "!\r\n"
 + 
 +tty_close($tty); 
 +exit(0); 
 + 
 +# parameter: tty name 
 +# return   : a tty handle 
 +# on error : die 
 +sub tty_init($) { 
 +  my ($device) @_; 
 +  my $tty new Device::SerialPort($device|| die "can't open $device: $!"; 
 +  $tty->baudrate(300                      || die 'fail setting baudrate'
 +  $tty->databits(7)                         || die 'fail setting databits'; 
 +  $tty->stopbits(1)                         || die 'fail setting stopbits'; 
 +  $tty->parity("even"                     || die 'fail setting parity'; 
 +  $tty->write_settings                      || die 'fail write settings'; 
 +  $tty->read_const_time(10); 
 +  #$tty->debug(1);
  
-my ($num_read, $s); +  $tty;
-$tty->read_const_time(10); +
-while(1) { +
-  ($num_read, $s) = $tty->read(1); +
-  print $s if $s;+
 } }
  
-$tty->close || die "can't close $PORT: $!"; +# parameter: a tty handle 
-</code>+# on error : die 
 +# return   : - 
 +sub tty_close($) { 
 +  my ($tty) = @_; 
 +  $tty->close || die "can't close tty: $!"; 
 +}
  
 +# parameter: a tty handle
 +# parameter: new baudrate
 +# return   : -
 +# on error : die
 +sub tty_baudrate($$) {
 +  my ($tty, $baudrate) = @_;
 +  $tty->baudrate($baudrate) || die 'fail setting baudrate';
 +  $tty->write_settings      || die 'fail write settings';
 +};
  
 +# parameter: a tty handle
 +# parameter: string to send
 +# return   : -
 +# on error : die
 +sub send_telegram($$) {
 +  my ($tty,$telegram) = @_;
 +
 +  print "send '$telegram' ...\n";
 +  $telegram .= "\r\n";
 +  my $num_out = $tty->write($telegram);
 +  die "write failed\n" unless ($num_out);
 +  die "write inclomplete\n" unless ($num_out == length($telegram));
 +  print "$num_out Byte written ...\n";
 +}
 +
 +# parameter: a tty handle
 +# return   : received string including the final "\n"
 +# on error : -
 +sub receive_line($) {
 +  my ($tty) = @_;
 +
 +  my ($line, $num_read, $c);
 +  do {
 +    ($num_read, $c) = $tty->read(1);
 +    $line .= $c;
 +  } until !defined($c) || $c eq "\n";
 +  
 +  $line;
 +}
 +</code>
  
 +===== Quellen =====
 +[[https://www.ng-o.com/kunden/downloads/netzkunden/messwesen/strom/Bedienungsanleitung_Siemens_Smart_Meter.pdf|Benutzerhandbuch]] (Netze NGO)\\
 +{{:hardware:channels:meters:power:siemens:AMIS_TD-351x_BHBK.pdf|Benutzerhandbuch}} (Siemens AG Österreich)\\
hardware/channels/meters/power/edl-ehz/siemens_td3511.1476724092.txt.gz · Zuletzt geändert: 2016/10/17 19:08 von jau