Easymeter Seriell(ESY5Q3DB1024 V3.04)

Begonnen von Crawler, 29 Dezember 2015, 01:25:09

Vorheriges Thema - Nächstes Thema

Crawler

Hi
Ich bräuchte mal ein wenig Hilfe für mein Modul.
Habe schon mit Perl und folgendem Script gute Daten empfangen und sortiert
#!/usr/bin/perl -w
package main;
use strict;
use Device::SerialPort;

my $serial = Device::SerialPort->new("/dev/ttyAMA0");
$serial->baudrate(9600);
$serial->databits(7);
$serial->parity("even");
$serial->stopbits(1);
$serial->purge_all();

my ($count, $data) = undef;
my $charcount = 0;
my $buffer = "";
my $delay = 60;
my $nexttime =(time + $delay);
my $time = time;
my $lasttime = (time + 300);
# Read response

   while(1) {
        ($count, $data)=$serial->read(297); # Telgegramm mit einer länge von 297 empfangen
$buffer.= $data; # Buffer füllen
$charcount += $count; # Anzahl Zeichen zählen
if ($charcount >= 297) { # Wenn 297 Zeichen empfangen sind
  #print "count >= 290\r\n"; # debug sleep(1); # debug print
  #"$buffer"; # debug
if (index($buffer,'/') == 0 && index($buffer,'!') >= 290) {
  print "$buffer";
  my $referenceindex = index($buffer, '1-0:1.8.0*255(') + 15;
          my $reference = substr($buffer, $referenceindex, 15);
          $reference =~ s/\G0//g;

  my $feedindex = index($buffer, '1-0:2.8.0*255(') + 15;
      my $feed = substr($buffer, $feedindex, 15);
  $feed =~ s/\G0//g;

  my $L1index = index($buffer, '1-0:21.7.0*255(') + 16;
  my $L1 = substr($buffer, $L1index, 8);
  $L1 =~ s/\G0//g;

          my $L2index = index($buffer, '1-0:41.7.0*255(') + 16;
  my $L2 = substr($buffer, $L2index, 8);
  $L2 =~ s/\G0//g;

  my $L3index = index($buffer, '1-0:61.7.0*255(') + 16;
  my $L3 = substr($buffer, $L3index, 8);
  $L3 =~ s/\G0//g;

  my $Lallindex = index($buffer, '1-0:1.7.0*255(') + 15;
  my $Lall = substr($buffer, $Lallindex, 8);
  $Lall =~ s/\G0//g;

        print "Bezug = $reference\r\n";
  print "Einspeisung = $feed\r\n";
  print "L1 = $L1\r\n";
  print "L2 = $L2\r\n";
  print "L3 = $L3\r\n";
  print "Lall = $Lall\r\n";
          $charcount = 0;
  $buffer = "";
  exit;
}
}

  }
 



Mein Problem besteht jetzt darin davon ein Modul zu machen
bin des Perls leider nicht wirklich mächtig.

#Muss ich DeviceIO nutzen um die Daten von der Seriellen Schnittstelle zu empfangen?
Ich benötige ja 7E1 statt 8N1

#startet fhem zeitabhängig das sub Read?
FHEM auf Raspi + HMLan + 14 Aktoren + OBIS(Strom) über GPIO