DPT14 Implementation in EIB.PM

Begonnen von Olaf, 21 November 2012, 17:48:59

Vorheriges Thema - Nächstes Thema

Olaf

                                             

Nach Anschaffung eine EDL21-Stromzählers mit Lingg & Janke-EHZ-FW-REG EHZ
KNX Schnittstelle war ich auf das Problem gestoßen, daß die Schnittstelle
die Wirkleistung als 32bit IEEE 754 Gleitkommazahl ausgibt. Das entspricht
dem EIB-dpt14 Datenformat.
Allerdings habe ich die untenstehende Lösung auf das Nötigste beschränkt:
+/- unendlich und 0 werden nicht betrachtet, da der Stromzähler nicht dahin
kommen wird.
Falls noch jemand Interesse am Code hat oder es in die EIB.pm eingebaut
werden soll, ist er unten mit Vor- und Nachlauf angehängt, damit er
entsprechend in die EIB.pm eingeordnet werden kann.
Da meine Fritzbox mit der direkten Umwandlung wegen Integerüberlauf nicht
zureecht kam, berechne ich den Wert in Blöcken. Das sollte aber auch auf
jedem anderen Prozessor laufen.



...
  # 4-Octet unsigned value (handled as dpt7)
  "dpt12"         => {"CODE"=>"dpt7", "UNIT"=>""},
 
*  # 4-Octet single precision float
  "dpt14"         => {"CODE"=>"dpt14", "UNIT"=>""},
*...
 );




...
    } elsif ($code eq "dpt11")
    {
        # Date
        my $fullval = hex($value);
        my $day = ($fullval & 0x1F0000)>>16;
        my $month  = ($fullval & 0x0F00)>>8;
        my $year  = ($fullval & 0x7F);
        #translate year (21st cent if <90 / else 20th century)
        $year += 1900 if($year>=90);
        $year += 2000 if($year<90);
        $transval = sprintf("%02d.%02d.%04d",$day,$month,$year);
               
        Log(5,"EIB $code parse $value = $fullval day: $day month: $month
year: $year translated: $transval");
       
*    } elsif ($code eq "dpt14")
    {
        # 4 byte single precision float
        my $byte0 = hex(substr($value,0,2));
        my $sign = ($byte0 & 0x80) ? -1 : 1;

        my $bytee = hex(substr($value,0,4));
        my $expo = (($bytee & 0x7F80) >> 7) - 127;

        my $bytem = hex(substr($value,2,6));
        my $mant = ($bytem & 0x7FFFFF | 0x800000);

        $transval = $sign * (2 ** $expo) * ($mant / (1 <<23));
               
        Log(5,"EIB $code parse $value translated: $transval");
*        
    } elsif ($code eq "dptxx") {
...

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Hi Badner,

ein sehr willkommener Post.
Werde die Ergänzung in EIB.pm aufnehmen.
vg
Maz

Am Mittwoch, 21. November 2012 17:48:59 UTC+1 schrieb BadnerBub:
>
> Nach Anschaffung eine EDL21-Stromzählers mit Lingg & Janke-EHZ-FW-REG EHZ
> KNX Schnittstelle war ich auf das Problem gestoßen, daß die Schnittstelle
> die Wirkleistung als 32bit IEEE 754 Gleitkommazahl ausgibt. Das entspricht
> dem EIB-dpt14 Datenformat.
>
>

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Hi Badner,

kannst Du bitte ein paar Beispiel-Telegramme mit zugehörigem Wert posten,
damit ich die Integration testen kann?
Danke
Maz

Am Donnerstag, 22. November 2012 22:53:54 UTC+1 schrieb Maz:
>
> Hi Badner,
>
> ein sehr willkommener Post.
> Werde die Ergänzung in EIB.pm aufnehmen.
> vg
> Maz
>
> Am Mittwoch, 21. November 2012 17:48:59 UTC+1 schrieb BadnerBub:
>>
>> Nach Anschaffung eine EDL21-Stromzählers mit Lingg & Janke-EHZ-FW-REG EHZ
>> KNX Schnittstelle war ich auf das Problem gestoßen, daß die Schnittstelle
>> die Wirkleistung als 32bit IEEE 754 Gleitkommazahl ausgibt. Das entspricht
>> dem EIB-dpt14 Datenformat.
>>
>>

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Olaf

                                             

Hier ein paar Beispieltelegramme:
B0008w300145347000: Wert 45347000 = 2887
B0008w3002431c0000: Wert 431c0000 = 156
B0008w30034426c000: Wert 4426c000 = 667
B0008w300443cc0000: Wert 43cc0000 = 408

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com