Ankündigung

Einklappen
Keine Ankündigung bisher.

Zählerabfrage als Wiregate Plugin

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Ich warte jetzt mal das log ab. Hoffentlich tritt der Fehler noch mal auf. Es gibt nichts besch***eideneres als nicht reproduzierbare Fehler.
    Aber wenn es an einem unsinnigen Wert liegt, kann man das ganze wahrscheinlich mit einer einfachen "wenn > x dann ignoriere" Abfrage lösen.

    Inzwischen habe ich einfach die sinnlosen Werte aus dem rrd gelöscht.

    rrdtool dump -n ${rrd} >/tmp/${rrdname}.xml
    rrdtool restore -f /tmp/${rrdname}.xml ${rrd}

    Kommentar


      mit /home/user/killsml.sh

      läuft es-manuell in cron gestartet ein mal durch (also<1Minute)-So beobachte ich das im Busmonitor.

      Was muss ich nun machen, damit es ständig läuft?

      Danke und Grüße,
      Lio

      Kommentar


        mal noch eine andere Frage:
        Ich benutzte den volkszähler.org Lesekopf.
        Wie lange darf denn das Kabel vom Lesekopf bis zum RS232-Wandler sein?
        sind 2,5m zu lange?

        Kann es sein, dass es daran liegt?

        Danke und GRüße,
        Lio

        Kommentar


          Schönen Guten Morgen!

          Also, der Fehler mit dem Ausreißer ist die Nacht wieder aufgetreten.
          Im logfile war nichts auffällig. Kein Wert der irgendwie nach oben weggedriftet ist.
          Also habe ich mir mal parallel den DERIVE Graphen anzeigen lassen. Und siehe da, hier ist alles in bester Ordnung.
          Nun, wo mag der Fehler herkommen?
          dd
          Auf der Seite RRDtool steht zu COUNTER folgendes:

          The COUNTER data source assumes that the counter never decreases, except when a counter overflows. The update function takes the overflow into account. The counter is stored as a per-second rate. When the counter overflows, RRDtool checks if the overflow happened at the 32bit or 64bit border and acts accordingly by adding an appropriate value to the result.
          Zu DERIVE steht da:

          Internally, derive works exactly like COUNTER but without overflow checks. So if your counter does not reset at 32 or 64 bit you might want to use DERIVE and combine it with a MIN value of 0.
          Und weiter:

          NOTE on COUNTER vs DERIVE
          by Don Baarda <don.baarda@baesystems.com>
          If you cannot tolerate ever mistaking the occasional counter reset for a legitimate counter wrap, and would prefer "Unknowns" for all legitimate counter wraps and resets, always use DERIVE with min=0. Otherwise, using COUNTER with a suitable max will return correct values for all legitimate counter wraps, mark some counter resets as "Unknown", but can mistake some counter resets for a legitimate counter wrap.
          For a 5 minute step and 32-bit counter, the probability of mistaking a counter reset for a legitimate wrap is arguably about 0.8% per 1Mbps of maximum bandwidth. Note that this equates to 80% for 100Mbps interfaces, so for high bandwidth interfaces and a 32bit counter, DERIVE with min=0 is probably preferable. If you are using a 64bit counter, just about any max setting will eliminate the possibility of mistaking a reset for a counter wrap.
          Ich vermute also, wenn ich den Text richtig deute, dass intern ein Overflow stattfindet von 32 auf 64 bit und deshalb die Werte ins utopische steigen. Wenn es mit dem Umstieg von COUNTER auf DERIVE getan ist, wunderbar.
          Angehängte Dateien

          Kommentar


            Kannst Du das mal weiter beobachten? Ich habe hier seit knapp 1.5 Jahren keine Probleme damit. Mich würde interessieren ob das reproduzierbar ist.
            Umgezogen? Ja! ... Fertig? Nein!
            Baustelle 2.0 !

            Kommentar


              Hallo zusammen,

              ich habe seit heute auch ein etwas krudes Phänomen. Und zwar liest das Script die Daten vom Zähler korrekt aus, verarbeitet diese seit heute aber nicht mehr korrekt. So werden die Werte auf die GAs geschrieben, allerdings scheinbar zweimal, so dass der zuerst korrekt geschriebene Wert mit einer falschen Info überschrieben wird. Siehe auch die Ausgaben anbei.

              Ausgabe vom Zähler mittes Script

              Endzeichen war dabei

              RUNS = 1

              Endzeichen war dabei

              RUNS = 2
              !
              /ACE5ACE4KGPRS

              0-0:96.1.0*255()
              1-0:1.8.0*255(005458.922*kWh)
              1-0:1.8.1*255(001058.285*kWh)
              1-0:1.8.2*255(004400.637*kWh)
              1-0:2.8.0*255(000000.226*kWh)
              1-0:2.8.1*255(000000.226*kWh)
              1-0:2.8.2*255(000000.000*kWh)
              0-0:96.14.0*255(01)
              1-0:15.7.0*255(000000*W)
              0-0:17.0.0*255(0085*A)
              0-0:96.3.10*255(1)
              0-1:96.1.0*255(0505514284426548)
              1-1:1.8.0*255(002571.858*kWh)(13-11-01 11:00:23)
              1-1:1.8.1*255(002571.858*kWh)(13-11-01 11:00:23)
              1-1:1.8.2*255(000000.000*kWh)(13-11-01 11:00:23)
              1-1:1.8.3*255(000000.000*kWh)(13-11-01 11:00:23)
              1-1:1.8.4*255(000000.000*kWh)(13-11-01 11:00:23)
              1-1:2.8.0*255(000000.000*kWh)(13-11-01 11:00:23)
              1-1:2.8.1*255(000000.000*kWh)(13-11-01 11:00:23)
              1-1:2.8.2*255(000000.000*kWh)(13-11-01 11:00:23)
              1-1:2.8.3*255(000000.000*kWh)(13-11-01 11:00:23)
              1-1:2.8.4*255(000000.000*kWh)(13-11-01 11:00:23)
              0-1:96.14.0*255(01)(13-11-01 11:00:23)
              1-1:15.7.0*255(000000*W)(13-11-01 11:00:23)
              0-1:17.0.0*255(0000*A)
              0-1:96.3.10*255(1)
              !


              Zähler 1-0 Kennzahl 1.8.1 Wert: 001058.285 kWh.
              COUNTER
              Name1 obisname
              001058.285 value
              Name1_5.rrd
              Name1 obisname
              001058.285 value
              Name1_15.rrd
              Name1 obisname
              001058.285 value
              Name1_60.rrd
              Name1 obisname
              001058.285 value
              Name1_1440.rrd
              Name1 obisname
              001058.285 value
              Name1_10080.rrd
              GA:0/7/201 Wert:001058.285 DPT:12
              Zähler 1-0 Kennzahl 1.8.2 Wert: 004400.637 kWh.
              COUNTER
              Name2 obisname
              004400.637 value
              Name2_5.rrd
              Name2 obisname
              004400.637 value
              Name2_15.rrd
              Name2 obisname
              004400.637 value
              Name2_60.rrd
              Name2 obisname
              004400.637 value
              Name2_1440.rrd
              Name2 obisname
              004400.637 value
              Name2_10080.rrd
              GA:0/7/202 Wert:004400.637 DPT:12
              Zähler 1-0 Kennzahl 1.8.1 Wert: 002571.858 kWh.
              COUNTER
              Name1 obisname
              002571.858 value
              Name1_5.rrd
              Name1 obisname
              002571.858 value
              Name1_15.rrd
              Name1 obisname
              002571.858 value
              Name1_60.rrd
              Name1 obisname
              002571.858 value
              Name1_1440.rrd
              Name1 obisname
              002571.858 value
              Name1_10080.rrd
              GA:0/7/201 Wert:002571.858 DPT:12
              Zähler 1-1 Kennzahl 1.8.1 Wert: 002571.858 kWh.
              COUNTER
              Name3 obisname
              002571.858 value
              Name3_5.rrd
              Name3 obisname
              002571.858 value
              Name3_15.rrd
              Name3 obisname
              002571.858 value
              Name3_60.rrd
              Name3 obisname
              002571.858 value
              Name3_1440.rrd
              Name3 obisname
              002571.858 value
              Name3_10080.rrd
              GA:0/7/203 Wert:002571.858 DPT:12
              Zähler 1-0 Kennzahl 1.8.2 Wert: 000000.000 kWh.
              COUNTER
              Name2 obisname
              000000.000 value
              Name2_5.rrd
              Name2 obisname
              000000.000 value
              Name2_15.rrd
              Name2 obisname
              000000.000 value
              Name2_60.rrd
              Name2 obisname
              000000.000 value
              Name2_1440.rrd
              Name2 obisname
              000000.000 value
              Name2_10080.rrd
              GA:0/7/202 Wert:000000.000 DPT:12

              Der Code vom Script lautet

              Code:
              #!/usr/bin/perl
              # Autor: JuMi2006 / www.knx-user-forum.de
              # knx_write sub: makki / www.knx-user-forum.de
              # Version: für Mikeyy / www.knx-user-forum.de
              # Datum: 20.02.2013
              # Ein Zähler nach IEC 62056 der Werte von 2 Zählern übermittelt und ähnlich SML selbstständig sendet
              # INCREDIBLE !!! ;)
              
              use warnings;
              use strict;
              use Device::SerialPort;
              use feature "switch";
              use EIBConnection;
              use RRDs;
              
              ### KONFIGURATION ###
              
              my $eib_url = "local:/tmp/eib";     #for local eibd "local:/tmp/eib" for eibd in LAN: "ip:192.168.2.220:6720"
              my $rrdpath = "/var/www/rrd";
              my $debug = "1";
              my $device = "/dev/ttyS0";    #Port
              my $endsign = "!";            #Letztes Zeichen im Protokoll vom Zaehler
              
              my @zaehler = ("1-1","1-0","0-0");        #Auszulesende Zähler
              
              my @obis;
              #push @obis,{znr => "0-0", obis=>"17.0.0", ga =>"0/7/200", dpt => 9 , rrd_name => "Name0",};
              push @obis,{znr => "1-0", obis=>"1.8.1", ga =>"0/7/201", dpt => 12 , rrd_name => "Name1",};
              push @obis,{znr => "1-0", obis=>"1.8.2", ga =>"0/7/202", dpt => 12 , rrd_name => "Name2",};
              push @obis,{znr => "1-1", obis=>"1.8.1", ga =>"0/7/203", dpt => 12 , rrd_name => "Name3",};
              
              my @countermodes = (5,15,60,1440,10080);    #Aufloesungen fuer COUNTER RRDs in Minuten (1440 = Tagesverbrauch)
              
              ### ENDE KONFIGURATION ###
              
              ### EINLESEN
              #my $file = "/root/mike";
              #open (IN,'<',$file);
              #my @data = <IN>;
              
              ### Seriellen Port initialisieren
              ####START 300baud
              my $port = new Device::SerialPort($device) || die "can't open $device: $!";
              $port->baudrate(9600)      || die 'fail setting baudrate';
              $port->databits(7)        || die 'fail setting databits';
              $port->stopbits(1)        || die 'fail setting stopbits';
              $port->parity("even")     || die 'fail setting parity';
              $port->dtr_active(1);
              $port->rts_active(1);
              $port->read_char_time(500);     # 0.5 seconds for each character
              $port->read_const_time(1000);   # 1 second per unfulfilled "read" call
              $port->write_settings     || die 'fail write settings';
              
              ### AUSLESEN 
              
              my $STALL_DEFAULT=15; # how many seconds to wait for new input
              my $timeout=$STALL_DEFAULT; 
              my $chars=0;
              my $runs = 0;
              my $buffer="";
              
              while ($runs < 2 or $timeout < 0) {
              my ($count,$saw)=$port->read(25); # Liest 25 Zeichen je Durchlauf aus
              if ($count > 0) {
              $chars+=$count;
              $buffer.=$saw;
              #print ("saw: ".$saw."\n"); # Ausgabe der eingelesenen Daten 
              if ($saw =~ /\Q$endsign\E/) # \Q \E entwertet alle Sonderzeichen dazwischen
              {
              print "\n Endzeichen war dabei \n";
              $runs++;
              print "\n RUNS = $runs \n";
              }
              } else {
              $timeout--;
              } if ($timeout<=0) { 
              print "Waited $STALL_DEFAULT seconds and never saw what I wanted\n";
              last;}
              }
              
              
              
              
              
              
              $port->close || die "can't close $device: $!";   
              
              #$buffer =~ m/$endsign(.*?)$endsign/;
              $buffer =~ /($endsign(.*?)$endsign)/s;
              $buffer = $1;
              if ($debug==1){print $buffer."\n\n\n"};        #Nur zur Kontrolle
              my @data = split(/\r?\n/,$buffer);
              
              
              
              ############
              ### MAIN ###
              ############
              
              foreach my $line (@data){
                  chomp $line;
                  foreach my $obis (@obis){
                      if ($line =~ m/$obis->{obis}/ && $line =~ m/$obis->{znr}/){
                      chomp $line;
                      $line  =~ m/[^(]+\(([^*]+)\*([^)]+)/;
                      my $val = $1;
                      my $unit = $2;
                      if ($debug==1){print "Zähler $obis->{znr} Kennzahl $obis->{obis} Wert: $val $unit. \n"};
                  
                  #RRDS
                  if ($unit =~ /\Qh\E/)
                     { &rrd_counter ($obis->{rrd_name},$val)
                     }
                     else
                     {
                         &rrd_gauge ($obis->{rrd_name},$val)
                     }
                  #KNX 
                  &knx_write ($obis->{ga},$val,$obis->{dpt});
                  if ($debug==1){print "GA:".$obis->{ga}." Wert:".$val." DPT:".$obis->{dpt}."\n"};
              }
                  
              }
              }
              
              
              
              ### SUBS ###
              
              sub rrd_counter
              {
                  if ($debug==1){print ("COUNTER","\n")};
                  foreach (@countermodes)
                  {
                      my $obisname = $_[0];
                      if ($debug==1){print $obisname." obisname \n";}
                      my $value = $_[1];
                      if ($debug==1){print $value." value \n";}
                      my $rrdname = $obisname."_".$_."\.rrd";
                      if ($debug==1){print ($rrdname,"\n")};
                      my $rrdfile = $rrdpath."\/".$rrdname;
                      unless (-e $rrdfile)
                      {
                          RRDs::create ($rrdfile,"DS:value:COUNTER:".(($_*60)+600).":0:10000000000","RRA:AVERAGE:0.5:1:365","RRA:AVERAGE:0.5:7:300","-s ".($_*60));
                      }
                      my $countervalue = int($value*$_*60);
                      RRDs::update("$rrdfile", "N:$countervalue");
                  }
              }
              
              sub rrd_gauge
              {
                  if ($debug==1){print ("GAUGE","\n")};
                  my $obisname = $_[0];
                  if ($debug==1){print $obisname." obisname \n";}
                  my $value = $_[1];
                  if ($debug==1){print $value." value \n";}
                  my $rrdname = $obisname."\.rrd";
                  if ($debug==1){print ($rrdname,"\n")};
                  my $rrdfile = $rrdpath."\/".$rrdname;
                  unless (-e $rrdfile)
                  {
                      RRDs::create ($rrdfile,"DS:value:GAUGE:900:0:10000000000","RRA:AVERAGE:0.5:1:2160","RRA:AVERAGE:0.5:5:2016","RRA:AVERAGE:0.5:15:2880","RRA:AVERAGE:0.5:60:8760");
                  }
                  RRDs::update("$rrdfile", "N:$value");
              }
              
              
              
              sub knx_write {
                  my ($dst,$value,$dpt,$response,$dbgmsg) = @_;
                  my $bytes;
                  my $apci = ($response) ? 0x40 : 0x80; # 0x40=response, 0x80=write
                  #     DPT 1 (1 bit) = EIS 1/7 (move=DPT 1.8, step=DPT 1.7)
                  #     DPT 2 (1 bit controlled) = EIS 8
                  #     DPT 3 (3 bit controlled) = EIS 2
                  #     DPT 4 (Character) = EIS 13
                  #     DPT 5 (8 bit unsigned value) = EIS 6 (DPT 5.1) oder EIS 14.001 (DPT 5.10)
                  #     DPT 6 (8 bit signed value) = EIS 14.000
                  #     DPT 7 (2 byte unsigned value) = EIS 10.000
                  #     DPT 8 (2 byte signed value) = EIS 10.001
                  #     DPT 9 (2 byte float value) = EIS 5
                  #     DPT 10 (Time) = EIS 3
                  #     DPT 11 (Date) = EIS 4
                  #     DPT 12 (4 byte unsigned value) = EIS 11.000
                  #     DPT 13 (4 byte signed value) = EIS 11.001
                  #     DPT 14 (4 byte float value) = EIS 9
                  #     DPT 15 (Entrance access) = EIS 12
                  #     DPT 16 (Character string) = EIS 15
                  # $dpt = $eibgaconf{$dst}{'DPTSubId'} unless $dpt; # read dpt from eibgaconf if existing
                  given ($dpt) {
                      when (/^12/)             { $bytes = pack ("CCL>", 0, $apci, $value); }  #EIS11.000/DPT12 (4 byte unsigned)
                      when (/^13/)             { $bytes = pack ("CCl>", 0, $apci, $value); }
                      when (/^14/)             { $bytes = pack ("CCf>", 0, $apci, $value); }
                      when (/^16/)             { $bytes = pack ("CCa14", 0, $apci, $value); }
                      when (/^17/)             { $bytes = pack ("CCC", 0, $apci, $value & 0x3F); }
                      when (/^20/)             { $bytes = pack ("CCC", 0, $apci, $value); }
                      when (/^\d\d/)           { return; } # other DPT XX 15 are unhandled
                      when (/^[1,2,3]/)        { $bytes = pack ("CC", 0, $apci | ($value & 0x3f)); } #send 6bit small
                      when (/^4/)              { $bytes = pack ("CCc", 0, $apci, ord($value)); }
                      when ([5,5.001])         { $bytes = pack ("CCC", 0, $apci, encode_dpt5($value)); } #EIS 6/DPT5.001 1byte
                      when ([5.004,5.005,5.010]) { $bytes = pack ("CCC", 0, $apci, $value); }
                      when (/^5/)              { $bytes = pack ("CCC", 0, $apci, $value); }
                      when (/^6/)              { $bytes = pack ("CCc", 0, $apci, $value); }
                      when (/^7/)              { $bytes = pack ("CCS>", 0, $apci, $value); }
                      when (/^8/)              { $bytes = pack ("CCs>", 0, $apci, $value); }
                      when (/^9/)              { $bytes = pack ("CCCC", 0, $apci, encode_dpt9($value)); } #EIS5/DPT9 2byte float
                      default                  { LOGGER('WARN',"None or unsupported DPT: $dpt sent to $dst value $value"); return; }
                  }
                  my $leibcon = EIBConnection->EIBSocketURL($eib_url) or return("Error opening con: $!");
                  if ($leibcon->EIBOpenT_Group(str2addr($dst),1) == -1) { return("Error opening group: $!"); }
                  my $res=$leibcon->EIBSendAPDU($bytes);
                  $leibcon->EIBClose();
                  return $res;
                  
                  # str2addr: Convert an EIB address string in the form "1/2/3" or "1.2.3" to an integer
                  sub str2addr {
                      my $str = $_[0];
                      if ($str =~ /(\d+)\/(\d+)\/(\d+)/) { # logical address
                          return ($1 << 11) | ($2 << 8) | $3;
                      } elsif ($str =~ /(\d+)\.(\d+)\.(\d+)/) { # physical address
                          return ($1 << 12) | ($2 << 8) | $3;
                      } else {
                          #bad
                          return;
                      }
                  }
                  
              }
              
              sub encode_dpt9
              {
                  # 2byte signed float
                  my $state = shift;
                  my $data;
                  my $sign = ($state <0 ? 0x8000 : 0);
                  my $exp  = 0;
                  my $mant = 0;
                  $mant = int($state * 100.0);
                  while (abs($mant) > 2047)
                  {
                      $mant /= 2;
                      $exp++;
                  }
                  $data = $sign | ($exp << 11) | ($mant & 0x07ff);
                  return $data >> 8, $data & 0xff;
              }
              und im EIB Wiregate Log sieht man die Änderungen auch noch mal schön

              2013-11-01 10:45:32.281,A_GroupValue_Write,1.1.254,0/7/201,00 00 04 22,1058,,12.001,0,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:45:32.357,A_GroupValue_Write,1.1.254,0/7/201,00 00 04 22,1058,,12.001,1,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:45:32.397,A_GroupValue_Write,1.1.254,0/7/201,00 00 04 22,1058,,12.001,1,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:45:32.426,A_GroupValue_Write,1.1.254,0/7/201,00 00 04 22,1058,,12.001,1,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:45:32.872,A_GroupValue_Write,1.1.254,0/7/201,00 00 0A 0B,2571,,12.001,0,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:46:54.892,A_GroupValue_Write,1.1.254,0/7/201,00 00 04 22,1058,,12.001,0,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:46:55.539,A_GroupValue_Write,1.1.254,0/7/201,00 00 0A 0B,2571,,12.001,0,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:46:55.712,A_GroupValue_Write,1.1.254,0/7/201,00 00 0A 0B,2571,,12.001,1,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:55:17.581,A_GroupValue_Write,1.1.254,0/7/201,00 00 04 22,1058,,12.001,0,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:55:18.205,A_GroupValue_Write,1.1.254,0/7/201,00 00 0A 0B,2571,,12.001,0,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:55:18.294,A_GroupValue_Write,1.1.254,0/7/201,00 00 0A 0B,2571,,12.001,1,low,7,T_DATA_XXX_REQ,0

              2013-11-01 10:45:32.548,A_GroupValue_Write,1.1.254,0/7/202,00 00 11 30,4400,,12.001,0,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:45:33.047,A_GroupValue_Write,1.1.254,0/7/202,00 00 00 00,0,,12.001,0,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:46:55.139,A_GroupValue_Write,1.1.254,0/7/202,00 00 11 30,4400,,12.001,0,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:46:55.231,A_GroupValue_Write,1.1.254,0/7/202,00 00 11 30,4400,,12.001,1,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:46:55.267,A_GroupValue_Write,1.1.254,0/7/202,00 00 11 30,4400,,12.001,1,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:46:55.301,A_GroupValue_Write,1.1.254,0/7/202,00 00 11 30,4400,,12.001,1,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:46:55.769,A_GroupValue_Write,1.1.254,0/7/202,00 00 00 00,0,,12.001,0,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:55:17.759,A_GroupValue_Write,1.1.254,0/7/202,00 00 11 30,4400,,12.001,0,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:55:17.799,A_GroupValue_Write,1.1.254,0/7/202,00 00 11 30,4400,,12.001,1,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:55:18.355,A_GroupValue_Write,1.1.254,0/7/202,00 00 00 00,0,,12.001,0,low,7,T_DATA_XXX_REQ,0

              2013-11-01 10:45:32.981,A_GroupValue_Write,1.1.254,0/7/203,00 00 0A 0B,2571,,12.001,0,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:46:55.464,A_GroupValue_Write,1.1.254,0/7/203,00 00 0A 0B,2571,,12.001,0,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:55:18.076,A_GroupValue_Write,1.1.254,0/7/203,00 00 0A 0B,2571,,12.001,0,low,7,T_DATA_XXX_REQ,0 2013-11-01 10:56:01.164,A_GroupValue_Write,1.1.254,0/7/203,00 00 0A 0B,2571,,12.001,0,low,7,T_DATA_XXX_REQ,0

              Hat jemand eine Idee? :-)

              Danke & Grüße,
              Mike

              Kommentar


                Guten Abend,
                Sorry wenn ich mich einfach in die Diskussion reinhänge. Ich hätte da mal ne Frage zu meinem Zähler Elster AS1440. Das ich eine Infrarot Schnittstelle brauche weiß ich von der Volkszähler Seite. Werde ich mir auch bestellen, nur weiß ich nicht, mit welchen Ausgang (USB oder RS232).

                Wie kriege ich die Daten auf mein KNX Bus? Ich habe leider kein Wiregate. Ich hätte da noch eine RS232 KNX Schnittstelle (Busch Jäger 6186/20), kann ich die dazu missbrauchen?

                Kann da jemand helfen?
                Oder muss ich die Daten per USB auf meinen Rechner kriegen und dann über LAN in den Bus jagen? Leider bin ich nicht so fortgeschritten, um mir das alles selber zu beantworten.

                Würde mir das gerne auf meiner zukünftigen Xhome Visu darstellen.

                Danke vorab

                Kommentar


                  @mikey:
                  Ich hab schon ein paar mal draufgeschaut, sehe aber keinen Fehler warum das Parsing dermaßen schief läuft.

                  @Holyham:
                  Du benötigst dazu zwingend einen Linux-PC (WireGate, RaspberryPi oder halt irgendwas das mit Linux läuft). Von da aus dann über Netzwerk/KNX.
                  Die Kombination Lesekopf<->BJ6186 funktioniert nicht.
                  Umgezogen? Ja! ... Fertig? Nein!
                  Baustelle 2.0 !

                  Kommentar


                    ok danke für die Info. Würde da auch ein Synology NAS DS412 reichen? Ist meiner Meinaung auch Linux drauf.

                    Hab gerade von Lingg + Janke die eHZ KNX Schnittstelle gesehen, Könnte das für meinen Zähler auch funktionieren?

                    Kommentar


                      Zitat von JuMi2006 Beitrag anzeigen
                      @mikey:
                      Ich hab schon ein paar mal draufgeschaut, sehe aber keinen Fehler warum das Parsing dermaßen schief läuft.
                      Hallo JuMi
                      danke für die Rückinfo. Kruder Zufall. Klappt seit heute wieder. Die letzten Tage wurde nix am WG geändert. Als ob der Zähler nicht ganz korrekt die Werte geliefert hat. Da das Teil ja über einen GSM Empfänger verfügt, über den die Zählerdaten an meine Stadtwerke übermittelt werden, kann der vielleicht auch aus der Ferne aktualisiert werden. Vielleicht wurde hier aus der Ferne was "gebastelt"

                      Beste Grüße,
                      Mike

                      Kommentar


                        @mikeeyy
                        Ich habe gestern den Volkszähler zusammengebastelt und der Einfachheit halber das letzte gepostete Script von Dir, mikeeyy verwendet. Es funktioniert nicht, da die if-Abfrage nie zutrifft, obwohl Zählernummer und ID passen. Wenn ich die Daten als hex ausgebe, sehe ich Daten, die ich mit der Hilfe unter Volkszähler sinnvoll dekodieren kann.

                        Ich kann nur rudimentär Perl, aber ich verstehe nicht, wie die If-abfrage "matchen" soll.
                        Die Daten haben binäre Form, aber es wird gegen einen ASCII-String verglichen? D.h. einerseits binär "0x01 0x08 0x01" aber dagegen ein Text "1.8.1"? Oder ist die Mustersuche schlauer, als ich denke?

                        Code:
                        ...
                        push @obis,{znr => "1-0", obis=>"1.8.1", ga =>"0/7/201", dpt => 12 , rrd_name => "Name1",};
                        ...
                        if ($line =~ m/$obis->{obis}/ && $line =~ m/$obis->{znr}/){
                        ...
                        Gibt es ansonsten ein Referenzscript irgendwo im Thread vergraben, ich habe nur quergelesen und gesucht?

                        Kommentar


                          Versuchs mal hiermit....klingt nach SML-Protokoll, oder den Thread mal nach SML durchsuchen.

                          Open Automation / Code / [r1702] /tools/sml-meter/sml_meter.pl
                          Umgezogen? Ja! ... Fertig? Nein!
                          Baustelle 2.0 !

                          Kommentar


                            Danke! Damit funzt es .

                            Kommentar


                              Es scheint, daß je nach Granularität bei rrd_counter ein zeitlicher Versatz auftritt, z.B. hier bei 5 und 60 Minuten. Liegt das an der Anlage der rrd-Datei oder an der Anzeige?
                              Angehängte Dateien

                              Kommentar


                                Irgendwo war da mal was ... sieh Dir doch mal die RRDs mit rrdtool fetch an.
                                Umgezogen? Ja! ... Fertig? Nein!
                                Baustelle 2.0 !

                                Kommentar

                                Lädt...
                                X