FHEM Forum

FHEM - Hausautomations-Systeme => EnOcean => Thema gestartet von: kubuntufan am 07 September 2014, 12:31:22

Titel: Bugfix Keycard F6-04-01
Beitrag von: kubuntufan am 07 September 2014, 12:31:22
Hallo,

Ich habe mal das Profile F6-04-01 überarbeitet.
Sollte jetzt vollständig unterstützt werden.

Im Anhang die Patch Datei.

Gruß Kubuntufan
Titel: Antw:Bugfix Keycard F6-04-01
Beitrag von: klaus.schauer am 07 September 2014, 19:54:09
Mit welchem Gerät wurde der Patch getestet?


    } elsif ($st eq "keycard") {
      if ($db[0] == 0x70 && $status == 30){
$msg = "keycard_inserted";
      } elsif ($db[0] == 0x00 && $status == 20){
        $msg = "keycard_removed";
      }


Ich halte es nicht für sinnvoll, auf das gesamte Status-Byte statt auf das NU-Bit zu prüfen. Das Statusbyte enthält zusätzlich das Feld T21 und Repeater Count. Außerdem müsste dann nicht auf 0x20 und 0x30 abgefragt werden?

Was funktionierte denn bisher nicht?
Titel: Antw:Bugfix Keycard F6-04-01
Beitrag von: kubuntufan am 07 September 2014, 20:25:24
Hallo,

Im Original werde beide Zustände bei einem NU von 0 abgefragt.
Falls ich das richtig interpretiere,

   if ($nu) {
      # Theoretically there can be a released event with some of the A0,BI
      # pins set, but with the plastic cover on this wont happen.
      $msg  = $EnO_ptm200btn[($db[0] & 0xE0) >> 5];
      $msg .= ",".$EnO_ptm200btn[($db[0] & 0x0E) >> 1] if ($db[0] & 1);
      $msg .= " released" if (!($db[0] & 0x10));
      push @event, "3:buttons:" . ($db[0] & 0x10 ? "pressed" : "released");

    } else {
      if ($db[0] == 112) {
        # Key Card, not tested
        $msg = "keycard inserted";

      } elsif ($db[0] & 0xC0) {
        # Only a Mechanical Handle is setting these bits when nu=0
        $msg = "closed"           if ($db[0] == 0xF0);
        $msg = "open"             if ($db[0] == 0xE0);
        $msg = "tilted"           if ($db[0] == 0xD0);
        $msg = "open from tilted" if ($db[0] == 0xC0);

      } else {
        if($st eq "keycard") {
          $msg = "keycard removed";
        }
        else {
          $msg = (($db[0] & 0x10) ? "pressed" : "released");
        }
      }
      push @event, "3:buttons:" . ($db[0] & 0x10 ? "pressed" : "released");
    }


Das mit dem T21 und dem Repeater Level hatte ich nicht bedacht.
Mein Fehler.

Ich hatte die Abfrage mit 0x20 und 0x30 getestet führte aber nicht zu erfolg.

Naja ich habe gegen die EEP Spezifikationen gestestet.

Gruß Kubuntufan