Zusätzliche Befehle /States für FS20-Device definieren

Begonnen von trasrik, 31 Januar 2017, 14:54:36

Vorheriges Thema - Nächstes Thema

trasrik

Hallo zusammen,

vorab: ich habe hierzu selbstverständlich Google und die Foren-Suche bemüht, aber bin nicht fündig geworden. Vielleicht waren es auch einfach die falschen Suchbegriffe.
Und nun zu meiner eigentlichen Frage: ich will für eine FS20 Rolladensteuerung zusätzliche Befehle definieren, die dann auch in das Reading state geschrieben werden.

Vielleicht wird das an einem Beispiel deutlicher: "set FS20_Device on" wäre ein normaler Befehl. Ich würde gerne zum Beispiel den Befehl "set FS20_Device AutoOn" definieren (der so ja erstmal nicht akzeptiert wird). Der Befehl soll an dem Device zunächst keine Aktion auslösen (aber das Device soll den Status "AutoOn" annehmen), sondern durch ein DoIf abgefragt und bearbeitet werden. Dann wird aufgrund diverser Bedingungen (UserReadings etc.) entschieden, ob das Device auch wirklich auf "On" schalten soll.
Ist so etwas möglich? Gibt es so etwas wie "UserCommands"?
Als Workaround habe ich schonmal das Array in der 10_FS20.pm erweitert, aber das kann ja nicht der Sinn der Veranstaltung sein (und wird beim nächsten Update überschrieben). Aktuell mappe ich "AutoUp" und "AutoDown" über eventMap auf andere, für meinen Aktor nicht genutzte, Befehle. Finde ich aber als Lösung unschön, da es solche ungenutzten Befehle sicher nicht für jeden möglichen Aktor gibt.

Ich hoffe, das war halbwegs verständlich ausgedrückt.

Danke und Gruß
Joachim

marvin78

Man kann ein dummy zwischenschalten oder ggf. hilft auch readingsProxy bei dem "Problem".

justme1968

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

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

trasrik

Hallo zusammen,

danke für Eure Antworten. Ich habe jetzt doch die auch von Marvin empfohlene Variante mit dem Dummy-Device gewählt. Das wollte ich zwar eigentlich vermeiden (um weniger Device-Definitionen pflegen zu müssen und eine übersichtlichere Config zu haben), aber es hat auch Vorteile: so ändert sich nämlich der Status des Aktors nicht, wenn eine deaktivierte Automatikschaltung ausgelöst wird.
Hier mal der Vollständigkeit halber mein Code:

define FS20_Shutter_01 FS20 fca3 01
attr FS20_Shutter_01 model fs20rsu
attr FS20_Shutter_01 alias B_Rolladen
attr FS20_Shutter_01 IODev CUL_0
attr FS20_Shutter_01 userattr room_map structexclude
attr FS20_Shutter_01 group Shutter
attr FS20_Shutter_01 room 51_OG_Buero,Shutters
attr FS20_Shutter_01 devStateIcon Up:rolladen_auf PartialUp:rolladen_schlitz Down:rolladen_zu on:rolladen_auf off:rolladen_zu
attr FS20_Shutter_01 eventMap /on-for-timer 3:PartialUp/off:Down/on:Up/
attr FS20_Shutter_01 webCmd Up:PartialUp:Down

define FS20_Shutter_Auto_01 dummy
attr FS20_Shutter_Auto_01 room Shutters
attr FS20_Shutter_Auto_01 group ShutterControl
attr FS20_Shutter_Auto_01 webCmd AutoUp:AutoDown

define FS20_Shutter_01_DoIf_AutoUpDown DOIF (([FS20_Shutter_Auto_01] eq "AutoUp") and ([?FS20_Shutter_01:ConfigAutoUp] eq "On") and ([?FS20_Shutter_01:ConfigPartialUp] eq "Off")) (set FS20_Shutter_01 Up, set FS20_Shutter_Auto_01 Rdy)\
DOELSEIF (([FS20_Shutter_Auto_01] eq "AutoUp") and ([?FS20_Shutter_01:ConfigAutoUp] eq "On") and ([?FS20_Shutter_01:ConfigPartialUp] eq "On")) (set FS20_Shutter_01 PartialUp, set FS20_Shutter_Auto_01 Rdy)\
DOELSEIF (([FS20_Shutter_Auto_01] eq "AutoDown") and ([?FS20_Shutter_01:ConfigAutoDown] eq "On")) (set FS20_Shutter_01 Down, set FS20_Shutter_Auto_01 Rdy)\
DOELSE (set FS20_Shutter_Auto_01 Rdy)
attr FS20_Shutter_01_DoIf_AutoUpDown room Shutters
attr FS20_Shutter_01_DoIf_AutoUpDown group Automatic
attr FS20_Shutter_01_DoIf_AutoUpDown do always


Wie gesagt: danke nochmal!

Gruß
Joachim