Wandschalter/Dummies ohne States

Begonnen von mbl, 10 Januar 2017, 16:44:24

Vorheriges Thema - Nächstes Thema

mbl

Hallo HA-Freunde,
ich bin gerade dabei, relativ komplexe Szenen meiner Beleuchtung / Geräte mittels einem einfachen 4-Kanal Wandschalter (S4A-2) umzusetzen. Dazu würde ich mich gerne komplett vom STATE eines Dummies oder des Schalters an sich trennen. Das Problem, das ich nämlich mit States habe, ist folgendes (vereinfacht - und die S4A-2 ist auf Toggle konfiguriert):

Links Oben = Alle Lichter an
Rechts Unten = Alles aus

Komme ich nach Hause, drücke ich den linken, oberen Schalter. Alle Lichter an, alles gut. Der Schalter hat nun allerdings den State ON. Schalte ich nun alle Lichter aus (rechts unten), bleibt der State von Links Oben aber auf ON und zusätzlich schaltet sich der neue Schalter ebenfalls auf ON.

Komme ich dann also wieder nach Hause und drücke Links Oben, wird nichts passieren, denn der State hat sich nun erstmal auf OFF gesetzt. Erst ein erneuter Klick macht dann, wie erwartet, alle Lichter an.

Ich kam nun auf zwei Lösungen, die ich beide sehr wonky finde:
a) Ich setze bei einem Klick alle anderen Schalter auf OFF, damit sie beim nächsten Mal drücken funktionieren
b) Ich definiere für ON und OFF die gleichen DOIFs.

Ich würde mir wünschen:
Es gäbe einen Dummy bei FHEM, der lediglich als Trigger dient, sprich "One Click = One Action". Ohne State. Gibt es so etwas?

Ich bin leider nicht wirklich fündig geworden bei meiner Recherche und lebe momentan mit Option A, die ich aber schlichtweg unschön und schwer zu pflegen finde. Option B endet in 20 Zeilen langen DOIFs, die kaum noch überschaubar sind.

Option D wäre natürlich noch, "korrekt" mit dem Toggle zu arbeiten und entsprechend einfach Alles An / Alles aus auf den gleichen Schalter zu legen. Da wir aber z.B. gedimmtes Licht auf Schalter 2 haben - und man entsprechend nicht mehr weiß, in welchem State Schalter 1 ursprünglich war (evtl. hat man Schalter 1 nie zum anmachen benutzt), führte das schon ab und zu zu "Alle Lichter gehen nachts an" Situationen. Und da viele IT Steckdosen dabei sind, muss man erstmal 10s warten, bevor man wieder alles ausmachen kann.

Vielen Dank schonmal im Voraus und liebe Grüße!

Beta-User

Hallo fig8,

so ganz kann ich Dein Problem nicht nachvollziehen. Wenn der Druck auf einen bestimmten Schalter immer dieselbe Aktion oder Kette von Aktionen auslösen soll, kann man das doch als Alternativbedingung für EIN DOIF nehmen ("or"), wobei Du mal schauen könntest, ob nicht ein "einfaches" notify ausreichend wäre (ohne do always usw.). Den Status des Schalters brauchst Du ja in dieser Variante eigentlich nicht zu speichern.

Wenn der Taster sehr schnell reagiert, könnte eine weitere Variante sein, sequence in Verbidnung mit notify oder DOIF einzusetzen, und z.B. einen einfachen Tastendruck als Einschalter zu nutzen (partial_1 als Trigger für Dein DOIF/notify) , Doppeldruck als "Aus" und dreifach als "gedimmt", wobei ich bisher nicht getestet habe, ob sequenze auch mit alternativen Ereignissen umgehen kann. In der Commandref steht aber was von Wildcards, von daher sollte das gehen.

Wenn Dir das mit den Alternativbedingungen nicht so ganz klar ist, solltest Du es mal mit einer der bisher nicht vergebenen Tasten und dem regex-Editor versuchen, der für "notify"s vorgesehen ist (einfach mal ein notify definieren, dann die Optionen dazu in FHEMWEB austesten).

Viel Erfolg,

Beta-User
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Prof. Dr. Peter Henning

#2
Ein FS20 S4A hat in der Realität gar keinen "state" - er ist zustandslos. Das ist leider eine nicht ganz konsistente implementation in FHEM, die aber schon so lange existiert, dass man damit zu leben gelernt hat. Mit dem Erfolg, dass das FHEM-Device für den Schalter auch "on" sein kann, wenn der zugeordnete Aktor "off" ist.

Ich benutze diese einfachen Funkschalter seit Jahren mit einer Untoggle-Routine, die von einem notify aufgerufen wird:

#############################################################################
#
#  Untoggle 
#
#   define <name> notify <sensor> {Untoggle("<sensor>")}
#
##############################################################################

sub Untoggle($)
{
my ($obj) = @_;

if (Value($obj) eq "toggle"){
   if (OldValue($obj) eq "off") {
     Log 5, "Untoggle ".$obj." toggle -> on";
     fhem ("setstate ".$obj." on");
   }
   else {
     fhem ("setstate ".$obj." off");
     Log 5, "Untoggle ".$obj." toggle -> off";
   }
} else {
   fhem "setstate ".$obj." ".Value($obj);
}
}


Übrigens kann man auch ganz wunderbar dafür sorgen, dass ein langer Tastendruck (> 0,4 s) etwas Anderes auslöst, als ein kurzer Tastendruck (z.B. Lang => Alle an, kurz => Alle aus).

LG

pah