Schaltstatus clever auswerten (8-fach Schaltmodul)

Begonnen von uxtuner, 21 Januar 2018, 12:56:25

Vorheriges Thema - Nächstes Thema

uxtuner

Hallo,

ich hab das Esera Schaltmodul mit Tastereingängen (Art. 11228) im Einsatz.
Die Beleuchtung kann bei diesem Modul zusätzlich auch per einfachem Tasterdruck ein-/ausgeschaltet werden. Damit FHEM das auch mitbekommt und der Status gesetzt werden kann, muss ich das Reading auswerten, welches folgendermaßen aussieht:


2018-01-21_12:36:40 Controller 1.OWD8.3: 0       | Keine Lampe an
2018-01-21_12:36:40 Controller 1.OWD8.4: 0       | Keine Lampe an
2018-01-21_12:36:44 Controller 1.OWD8.1: 2       | Taste gedrückt - dezimal Wert Taste 2
2018-01-21_12:36:44 Controller 1.OWD8.2: 0.1    | Taste gedrückt -       hex Wert Taste 2
2018-01-21_12:36:49 Controller 1.OWD8.1: 0       | Taste nicht mehr gedrückt
2018-01-21_12:36:49 Controller 1.OWD8.2: 0       | Taste nicht mehr gedrückt
2018-01-21_12:36:49 Controller 1.OWD8.3: 2       | Lampe an - dezimal Wert Ausgang 2
2018-01-21_12:36:49 Controller 1.OWD8.4: 0.1    | Lampe an -       hex Wert Ausgang 2


Die Tastendrücke werden also an 1.OWD8.1 und 1.OWD8.2 signalisiert, die Schaltzustände an 1.OWD8.3 und 1.OWD8.4 mit der Wertigkeit (Eingang/Ausgang 1 = 1, Eingang/Ausgang 2 = 2, Eingang/Ausgang 3 = 4, Eingang/Ausgang 4 = 8, Eingang/Ausgang 5 = 16, Eingang/Ausgang 6 = 32, Eingang/Ausgang 7 = 64, Eingang/Ausgang 8 = 128) dargestellt.

Controller 1.OWD8.3: 130 bedeutet dann z.B. Lampe 2 und Lampe 8 sind an.

Wie würdet Ihr das in FHEM abbilden? Nur die Schalteingänge auswerten (und über notify den Status switchen) wäre vergleichsweise einfach, besser wäre IMHO 8.3/8.4 auszuwerten - er wie vermeide ich dass ich die 64 möglichen Schaltzustände einzeln auswerten muss  :-[
Viele Grüße
  Uwe

Intel NUC (VDR & FHEM), QNAP TS-453, OneWire (Temp. Sensor, 8-fach Schalter, Hub, Controller), Ebus (Wolf CGW-2, ISM7i), Fibaro (Flood Sensor, Wall Plug, 4 in 1 Sensor), Qubino (Flush 1D), Shelly (Plug S, H&T, 2.5, 1 PM), Tado (Thermostat V3+)

uxtuner

#1
komme erst am Wochenende dazu es auszuprobieren, aber so müßte es als notify DEF funktionieren:

Controller:1.OWD8.3.* {

my $owdno = 8;
my $statusno = (ReadingsNum("Controller","1.OWD8.3",0));
$statusno =~ s/\.//g;

my @lampstatus;
my $counter = 0;

while ($counter < 8) {
   $lampstatus[$counter] = "set Controller set owd out $owdno,$counter,0";
   $counter += 1;
}

while ($statusno > 0) {

      if ($statusno >= 128) {
            $statusno -= 128;
             $lampstatus[7] = "set Controller set owd out $owdno,7,1";
   } elsif ($statusno >= 64) {
            $statusno -= 64;
                $lampstatus[6] = "set Controller set owd out $owdno,6,1";
   } elsif ($statusno >= 32) { 
            $statusno -= 32;
                $lampstatus[5] = "set Controller set owd out $owdno,5,1";
   } elsif ($statusno >= 16) {
            $statusno -= 16;
                $lampstatus[4] = "set Controller set owd out $owdno,4,1";
   } elsif ($statusno >= 8) {   
            $statusno -= 8;
                $lampstatus[3] = "set Controller set owd out $owdno,3,1";
   } elsif ($statusno >= 4) { 
            $statusno -= 4;
                $lampstatus[2] = "set Controller set owd out $owdno,2,1";
   } elsif ($statusno >= 2) {   
            $statusno -= 2;
                $lampstatus[1] = "set Controller set owd out $owdno,1,1";
   } elsif ($statusno >= 1) {   
            $statusno -= 1;
                $lampstatus[0] = "set Controller set owd out $owdno,0,1";
   }
}

foreach (@lampstatus) {
   fhem("$_");
   }

}
Viele Grüße
  Uwe

Intel NUC (VDR & FHEM), QNAP TS-453, OneWire (Temp. Sensor, 8-fach Schalter, Hub, Controller), Ebus (Wolf CGW-2, ISM7i), Fibaro (Flood Sensor, Wall Plug, 4 in 1 Sensor), Qubino (Flush 1D), Shelly (Plug S, H&T, 2.5, 1 PM), Tado (Thermostat V3+)