SetExtensions und toggle

Begonnen von Thorsten Pferdekaemper, 11 Juni 2017, 22:35:33

Vorheriges Thema - Nächstes Thema

Thorsten Pferdekaemper

Hi,

ich habe die Anregung bekommen, für HM-Wired die SetExtensions zu verwenden (https://forum.fhem.de/index.php/topic,72776.0.html). Die Idee finde ich an sich gut, aber ich habe ein kleines Problemchen mit der Toggle-Implementierung.
Bei HMW gibt es u.A. Dimmer und Rollladenaktoren. Die haben zwar ein "set on" und "set off", aber in state steht nie "on" oder "off". Ich habe in SetExensions.pm eine Sonderlocke gesehen für "state ~ dim...", die hilft mir aber wenig. In der Regel steht im state sowas wie "level_42", aber es kann im Prinzip alles mögliche drinstehen.
Außerdem: Selbst bei einfachen ein/aus-Aktoren steht nach einem "set on" erst einmal "set_on" im state. Erst nach einer Rückmeldung schaltet das auf "on". "Meine" eigene toggle-Implementierung macht daher auch dann ein "set off", wenn state nur auf "set_on" steht.

Ich fände es etwas hässlich, die SetExtensions zu benutzen und dann in einigen Fällen bei toggle seltsame Effekte zu haben. Hat dazu jemand eine Idee?
Natürlich könnte ich jetzt erst einmal tatsächlich für alles, was on/off hat auch ein toggle implementieren. Das ist aber allgemein gar nicht so einfach, da ich bei HMW (spätestens seit "Homebrew") auf alles gefasst sein sollte. D.h. ich weiß im Allgemeinen gar nicht, welchen state ich als "on" interpretieren sollte.

Gruß,
   Thorsten
 
FUIP

justme1968

du kannst auch bei verwendung der SetExtensions dein eigenes toggle weiter verwenden. du rufst die SetExtensions ja dann auf wenn kein anderes set kommando gegriffen hat. wenn du toggle vorher selbst behandelst bleibt dann für toggle alles beim alten.

@rudi: unabhängig davon wäre es vielleicht gut die SetExtensions so zu erweitern das alles was nicht off enthält als on gewertet wird. das müsste den fs20 dim fall genauso abdecken wie devices die set_.. verwenden.

der rollladen fall wird hier nicht abgedeckt. da ist aber auch on und off schon nicht passend. ohne on und off gibt es auch über die SetExtensions kein toggle.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

rudolfkoenig

ZitatD.h. ich weiß im Allgemeinen gar nicht, welchen state ich als "on" interpretieren sollte.
Ist das ein indirekt ausgesprochener Vorschlag, um toggle in SetExtensions optional nicht anzubieten? Ich habe nichts dagegen, das muss aber explizit bestellt werden. :)

Zitatalles was nicht off enthält als on gewertet wird.
die Logik ist jetzt: dim X in STATE wird zu off, falls X==0, sonst zu on.
off senden, falls STATE mit on anfaengt (on, on-for-timer, on-till), sonst on.

Vorschlag:
Falls STATE in einem Zahl endet: STATE wird zu off, falls die Zahl 0 ist, sonst zu on.
Falls STATE off enthaelt, wir on gesendet, sonst off.

Thorsten Pferdekaemper

Zitat von: justme1968 am 11 Juni 2017, 23:19:43
du kannst auch bei verwendung der SetExtensions dein eigenes toggle weiter verwenden. du rufst die SetExtensions ja dann auf wenn kein anderes set kommando gegriffen hat. wenn du toggle vorher selbst behandelst bleibt dann für toggle alles beim alten.
Das ist schon klar. Eine Möglichkeit wäre tatsächlich, dass ich überall, wo es ein on/off gibt das Toggle selbst implementiere (wie schon gesagt). Das Problem ist allerdings, dass ich das vielleicht gar nicht kann. Es ist ohne Weiteres möglich, ein HMW-Gerät zu definieren, das on/off hat, aber im state z.B. dann gar nicht oder mit etwas wie "plumpaquatsch_abc" reagiert.
Ich kann einigermaßen sicher feststellen, ob "toggle" sinnvoll verwendet werden kann oder nicht. D.h. für manche Geräte (die on/off haben) weiß ich, dass "toggle" nicht wirklich sinnvoll ist. In so einem Fall will ich aber trotzdem z.B. on-for-timer ermöglichen, aber eben kein "toggle".

Zitat@rudi: unabhängig davon wäre es vielleicht gut die SetExtensions so zu erweitern das alles was nicht off enthält als on gewertet wird. das müsste den fs20 dim fall genauso abdecken wie devices die set_.. verwenden.
Ich glaube, dass das mein Problem nicht wirklich lösen würde.

Zitat
der rollladen fall wird hier nicht abgedeckt. da ist aber auch on und off schon nicht passend. ohne on und off gibt es auch über die SetExtensions kein toggle.
"Meine" Rollladenaktoren verstehen on/off.

Zitat von: rudolfkoenig am 12 Juni 2017, 07:19:56
Ist das ein indirekt ausgesprochener Vorschlag, um toggle in SetExtensions optional nicht anzubieten? Ich habe nichts dagegen, das muss aber explizit bestellt werden. :)
Bisher war das erst einmal nur als Diskussion gedacht, um die für alle beste Lösung zu finden. Wenn ich der einzige bin, der da Sonderlocken braucht, dann kann ich mir das schon irgendwie hinbasteln. Schöner wäre halt eine allgemeingültige Lösung. "Toggle" optional nicht anzubieten wäre eine Möglichkeit.

Zitat
Vorschlag:
Falls STATE in einem Zahl endet: STATE wird zu off, falls die Zahl 0 ist, sonst zu on.
Falls STATE off enthaelt, wir on gesendet, sonst off.
Möglicherweise würde das alle vernünftigen Szenarien abdecken. Ich muss mir das nochmal durch den Kopf gehen lassen.

Gruß,
   Thorsten
FUIP

Thorsten Pferdekaemper

Hi,
ich habe das inzwischen für mich (also in 10_HM485) folgendermaßen gelöst:

1. Es wird irgendein "set" aufgerufen, dass das Gerät selbst kann:
In dem Fall wird das von meinem Modul direkt erledigt. Das schließt "toggle" mit ein für die Geräte, die das können.

2. Es wird "set toggle" aufgerufen, aber das Gerät kann kein toggle:
In dem Fall übergebe ich das an die SetExtensions, aber als Kommando schreibe ich "irgendeinenBlödsinn" rein. SetExtenions liefert dann eine Meldung zurück, aus der ich "toggle" rausfiltere und dann "irgendeinenBlödsinn" durch "toggle" ersetze.

3. Es wird irgendwas aufgerufen, dass das Gerät selbst nicht kann, aber nicht "toggle":
Das wird ganz normal an die SetExtensions weitergegeben. Aus der zurückgebenen Meldung wird "toggle" herausgefiltert, falls das Gerät kein "toggle" kann.

Das ganze ist etwas umständlich, aber es funktioniert.

Gruß,
   Thorsten

FUIP