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 :-[
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("$_");
}
}