Ankündigung

Einklappen
Keine Ankündigung bisher.

Wiregated.pl-Patch für DPT3

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [WireGate-Plugin] Wiregated.pl-Patch für DPT3

    Hallo zusammen,

    Für die korrekte (vorzeichenrichtige) Behandlung von 4bit-signed-Werten in DPT3 (Dim/Jalousien):
    EDIT: DPT2 (signed 2bit) auch noch gleich hinzugefügt.

    Wieder mal der Disclaimer: EXPERIMENTAL - kein Support, kein Mitleid :-)

    Wer das ausprobiert, kennt sich bitte mit der Linux-Kommandozeile aus, macht vorher ein Backup seines wiregated.pl, und kann diff und patch bedienen.

    Der Code ist nur grob getestet, sollte aber bei den Mini-Edits überschaubar sein...

    Code:
    --- wiregated.pl.mod-2012-04-28 2012-04-30 23:57:08.000000000 +0200
    +++ wiregated.pl        2012-05-01 16:59:26.000000000 +0200
    @@ -176,6 +176,16 @@
         return $data >> 8, $data & 0xff;
     }
     
    +sub decode_dpt2 { #2bit "signed bit"
    +    my $val=hex(shift) & 0x03;
    +    return $val > 1 ? $val-4 : $val;
    +}
    +
    +sub decode_dpt3 { #4bit signed integer
    +    my $val=hex(shift) & 0x0f;
    +    return $val > 7 ? 8-$val : $val;
    +}
    +
     sub decode_dpt4 { #1byte char
         return sprintf("%c", hex(shift));
     }
    @@ -289,8 +299,8 @@
                 when (/^20/)      { $value = decode_dpt510($data); }
                 when (/^\d\d/)    { return; } # other DPT XX 15 are unhandled
                 when (/^1/)       { $value = int($data); }
    -            when (/^2/)       { $value = int($data); } # somehow wrong 2bit
    -            when (/^3/)       { $value = int($data); } # somehow wrong 4bit
    +            when (/^2/)       { $value = decode_dpt2($data); } 
    +            when (/^3/)       { $value = decode_dpt3($data); } 
                 when (/^4/)       { $value = decode_dpt4($data); } 
                 when ([5,'5.001'])  { $value = decode_dpt5($data); }
                 when (['5.004','5.005','5.010']) { $value = decode_dpt510($data); }
    @@ -435,8 +445,8 @@
               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 (/^[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 (/^6/)              { $bytes = pack ("CCc", 0, $apci, $value); }
    VG, Fry

    #2
    In kurz, danke, ist mit commit #301 in PL32 mit drin

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

    Kommentar


      #3
      100%if sicher bin ich mir übrigens noch nicht, was die vorzeichenrichtige Konversion bei DPT2/3 angeht - sowohl beim Lesen als auch beim Schreiben. Werde das korrigieren, sobald ich Probleme bemerke.
      VG, Fry

      Kommentar


        #4
        Makki,

        Übrigens DANKE fürs Übernehmen der verschiedenen Patches! Das nenne ich mal Herstellersupport einer ganz neuen Güteklasse!

        Damit kann ich alle meine Plugins auch ein wenig kürzer machen (sie müssen %eibgaconf nicht mehr prüfen und indizieren).

        VG,
        Fry

        Kommentar


          #5
          Nun, da Du auch eine so gute Vorarbeit leistest und es für alle sinnvoll ist. nehmen wir das gerne. Merci

          Das Wiregate Multifunktionsgateway war auch immer so gedacht, dass die Community daran mitarbeitet, was auch schon exzellent funktioniert.

          LG und weiter so bitte

          Kommentar

          Lädt...
          X