Ankündigung

Einklappen
Keine Ankündigung bisher.

Installation der Software von volkszaehler.org möglich?

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

    Ganz ehrlich, ich hab mit den Leseköpfen am WireGate gemischte Erfahrungen.

    Mein erstes WireGate wollte irgendwann garnicht mehr mit den Leseköpfen.
    Das zweite mag die auch nur mit 300 Baud so richtig stabil.
    Das dritte (CloneGate, Alix1D) lag irgendwo dazwischen.

    Evtl. mal die USB2.0 Treiber deaktivieren, such mal im Forum hier nach FTDI, da sollte was auftauchen.

    Hier: https://knx-user-forum.de/wiregate/2...treiber-2.html
    Umgezogen? Ja! ... Fertig? Nein!
    Baustelle 2.0 !

    Kommentar


      Hallo zusammen,

      ich habe ein Problem mit diesem Plugin (Post JuMi2006 13.10.2012, 22:01).
      Bisher ist alles einwandfrei gelaufen, seit ein paar Tagen kommen keine Daten mehr an.

      Wenn ich das Skript über die Konsole starte bekomme ich das hier:
      root@wiregate249:/usr/local/bin# iec62056-meter.pl
      2015/08/07 12:15:38 socat[6142] E tcgetattr(3, 0xbfb09a2c): Inappropriate ioctl for device
      2015/08/07 12:15:39 socat[6146] E tcgetattr(3, 0xbfdc987c): Inappropriate ioctl for device
      2015/08/07 12:15:39 socat[6147] E tcgetattr(3, 0xbfd0222c): Inappropriate ioctl for device

      Folgende Quelle ist im Skript angegeben: my $device = "/dev/ttyUSB0"

      Wenn ich den anderen Test den ich im Forum gefunden habe laufen lasse, dann ist das hier das Ergebnis:
      root@wiregate249:~# socat -t1 - /dev/ttyUSB0,echo=0,crnl,b9600,parenb=0,cs8,cstopb=0 | od -tx1
      2015/08/07 12:07:18 socat[2437] E tcgetattr(3, 0xbfd9dfa0): Inappropriate ioctl for device
      0000000


      Ich habe auch schon mit dem Windows Testprogramm, den Lesekopf getestet. Alles bestens, es kommen Werte an. Nur mein Wiregate zickt rum.
      Kann es sein, dass der USB Anschluss nicht erkannt wird?
      Gibt es nicht einen Befehl, mit dem man die Anschlüsse checken kann?

      Danke
      Sascha


      Kommentar


        Nach Eingabe von "ls /dev" taucht das ttyUSB0 aber noch auf?

        Kommentar


          Kleiner Tipp: man sollte das - insbesondere bei mehreren - nicht mit "/dev/ttyUSBx" sondern mit "/dev/usbserial-x-y.z" ansprechen (PL2303) bzw. "/dev/usbserial-<Seriennummer>-x" (FTDI), aufm WireGate gibts dafür entsprechende udev-rules; weil Linux - ebenso wie Windows übrigens - das X bei /dev/ttyUSBx je nach Ansteck-Reihenfolge, reboot, Änderung von Hubs: gerne mal neu "auswürfelt".
          Beim FTDI hier kann man explizit auf die Seriennummer gehen..

          Makki
          EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
          -> Bitte KEINE PNs!

          Kommentar


            Zitat von geos Beitrag anzeigen
            Nach Eingabe von "ls /dev" taucht das ttyUSB0 aber noch auf?
            Ja taucht auf und ist weiß.

            Danke
            Sascha

            Kommentar


              Zitat von makki Beitrag anzeigen
              Kleiner Tipp: man sollte das - insbesondere bei mehreren - nicht mit "/dev/ttyUSBx" sondern mit "/dev/usbserial-x-y.z" ansprechen (PL2303) bzw. "/dev/usbserial-<Seriennummer>-x" (FTDI), aufm WireGate gibts dafür entsprechende udev-rules; weil Linux - ebenso wie Windows übrigens - das X bei /dev/ttyUSBx je nach Ansteck-Reihenfolge, reboot, Änderung von Hubs: gerne mal neu "auswürfelt".
              Beim FTDI hier kann man explizit auf die Seriennummer gehen..

              Makki
              Wie bekomme ich die Seriennummer raus, bzw. wie bekomme ich raus, welche Geräte am USB angeschlossen sind?

              Danke
              Sascha

              Kommentar


                Zum einen werden die alle im Webinterface aufgelistet (Seriell/LAN/Socketverbindungen, ganz unten), einfacher ist aber per SSH ("lsusb" für USB bzw "ls /dev/" für alles)

                Makki
                EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                -> Bitte KEINE PNs!

                Kommentar


                  Danke für die Hilfe!
                  Wenn ich das Skript aufführe, dann kommt keine Fehlermeldung mehr aber auch keine Erfolgsmeldung. Ich bekomme keine Werte auf den Bus (/var/log/eib.log) bzw. es verändern sich die RRD nicht.

                  Woran kann es jetzt noch liegen? Eigentlich habe ich doch nichts am System geändert...

                  Danke
                  Sascha

                  Folgenden Code setze ich ein:
                  Die auskommentierten ORBIS Werte stimmen, da diese mein Zähler (auch mit Test Tool unter Windows) nicht liefert.
                  Code:
                  #!/usr/bin/perl
                  # Zaehlerabfrage fuer Zaehler nach Protokoll IEC 62056-21 / OBIS
                  # Ein Anfrage-Telegramm ist mit 300 Baud, 7 Bit, 1 Stoppbit
                  # und gerader Paritaet zu senden. Das ist der Initialmodus von Geraeten,
                  # die das Protokoll IEC 62056-21 implementieren.
                  # Ein Wechsel der Geschwindigkeit ist umgesetzt.
                  # Basis des Scripts von volkszaehler.org / Autor: Andreas Schulze & Bugfix: Eric Schanze
                  # DPT9 sub: makki / www.knx-user-forum.de
                  # Baudwechsel: panzaeron / www.knx-user-forum.de
                  # Erweiterung um RRD,KNX-Anbindung und gezielte Wertsuche auf Wiregate: 
                  # JuMi2006 / www.knx-user-forum.de
                  # Version: 0.1.5
                  # Datum: 02.06.2012
                  
                  use warnings;
                  use strict;
                  use RRDs;
                  
                  ### KONFIGURATION ###
                  my $device = "/dev/usbserial-1-3.1.2";    #Port (z. B. /dev/ttyUSB...)
                  my $rrdpath = "/var/www/rrd";        #Pfad fuer RRDs
                  my $counterid = "Stromzaehler";        #Grundname fuer RRDs
                  my $baudrate = "300";            #Baudrate fuer Zaehlerauslesung
                  my %channels = (            #Obis-Zahl => Gruppenadresse
                          #"16.7"=>"0/7/1",    #akt. Leistung
                          #"32.7"=>"0/7/12",    #Spannung L1
                          #"52.7"=>"0/7/22",    #Spannung L2
                          #"31.7"=>"0/7/13",    #Stromstaerke L1
                          #"51.7"=>"0/7/23",    #Stromstaerke L2
                          #"71.7"=>"0/7/33",    #Stromstarke L3
                          #"72.7"=>"0/7/32",    #Spannung L3
                          "1.8.0"=>"0/7/0"    #Zaehlerstand gesamt
                                  );
                  my @countermodes = (5,15,60,1440);    #Aufloesungen fuer COUNTER RRDs in Minuten (1440 = Tagesverbrauch)
                  
                  ### ENDE KONFIGURATION ###
                  
                  my %speedrate = (            #Je nach Geschwindigkeit andere Befehel an Zaehler senden
                          "300"=>"'\x06\x30\x30\x30\x0d\x0a'",
                          "600"=>"'\x06\x30\x31\x30\x0d\x0a'",
                          "1200"=>"'\x06\x30\x32\x30\x0d\x0a'",
                          "2400"=>"'\x06\x30\x33\x30\x0d\x0a'",
                          "4800"=>"'\x06\x30\x34\x30\x0d\x0a'",
                          "9600"=>"'\x06\x30\x35\x30\x0d\x0a'"
                          );
                          
                  my $ack = $speedrate{$baudrate};
                  #print ($baudrate,"->",$ack);
                  
                  ### DATEN EMPFANGEN ###
                  my @buffer = qx(echo '\x2f\x3f\x21\x0d\x0a' | socat -T 1 - $device,raw,echo=0,b300,parenb=1,parodd=0,cs7,cstopb=0; sleep 1; echo $ack | socat -T 1 - $device,raw,echo=0,b300,parenb=1,parodd=0,cs7,cstopb=0; socat -T 1 - $device,raw,echo=0,b$baudrate,parenb=1,parodd=0,cs7,cstopb=0);
                  #print @buffer;
                  
                  foreach (@buffer)
                  {
                      foreach my $obis(%channels)
                      {
                      my $obiskey = $obis."\(";
                      if ($_ =~ /\Q$obiskey\E/)
                      {
                      $_  =~ m/[^(]+\(([^*]+)\*([^)]+)/;
                      my $value = $1;
                      my $unit = $2;
                      my $ga = $channels{$obis};
                      print ($obis,"\n");
                      print ($value,"\n");
                      print ($unit,"\n");
                      print ($ga,"\n");
                      if ($unit =~ /\Qh\E/)
                      {
                      &rrd_counter ($obis,$value)
                      }
                      else
                      {
                      &rrd_gauge ($obis,$value)
                      }
                      &knx_write ($ga,$value);
                      }
                      }
                  }
                  
                  ### SUBS ###
                  
                  sub rrd_counter
                  {
                  print ("COUNTER","\n");
                  foreach (@countermodes)
                  {
                  my $obisname = $_[0];
                  my $value = $_[1];
                  $obisname =~ tr/./-/;
                  my $rrdname = $counterid."_".$obisname."_".$_."\.rrd";
                  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
                  {
                  print ("GAUGE","\n");
                  my $obisname = $_[0];
                  my $value = $_[1];
                  $obisname =~ tr/./-/;
                  my $rrdname = $counterid."_".$obisname."\.rrd";
                  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
                  {
                  ### Wert in DPT9 umwandeln und in Konsole ausgeben
                  my @hexdec = encode_dpt9($_[1]);
                  my $hexval = sprintf("%x", $hexdec[0]) . " " . sprintf("%x", $hexdec[1]);
                  print ($hexval,"\n");
                  system("groupwrite ip:localhost $_[0] $hexval");
                  }
                  
                  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;
                  }

                  Kommentar

                  Lädt...
                  X