Was muss ich machen, damit ich ein klickbares Icon erhalte für on und off?
defmod Test DOIF (["$SELF:mybutton: on"]) (set Schreibtisch on)\
\
DOELSEIF (["$SELF:mybutton: off"]) (set Schreibtisch off)
attr Test cmdIcon mybutton:on:on mybutton:off:off
attr Test cmdState on|off
attr Test readingList mybutton
attr Test room 1
attr Test setList mybutton:on,off
attr Test webCmd mybutton
Ich schätze mal, dass es geht, finde aber die Lösung nicht.
Danke im Voraus.
Nachtrag: Das Auswahlfeld soll natürlich weg. Ich möchte nur das Icon.
Das wird das selbe Problem wie bei dem devStateIcon sein. (Hatte ich vor ein paar Tagen auch schon mal gefragt). Hier war eventMap die Lösung:
https://forum.fhem.de/index.php/topic,64340.0.html
Den Beitrag hatte ich gefunden und gelesen. Auch den Link. Komme aber nicht klar damit und du hast ja deine Lösung dazu nicht gepostet. Könntest du das bitte noch nachholen?
Habs gefunden.
defmod Test DOIF (["$SELF:mybutton: on"]) (set Schreibtisch on)\
\
DOELSEIF (["$SELF:mybutton: off"]) (set Schreibtisch off)
attr Test cmdState on|off
attr Test devStateIcon on:on:mybutton_off off:off:mybutton_on
attr Test eventMap /mybutton on:mybutton_on/mybutton off:mybutton_off/
attr Test readingList mybutton
attr Test room 1
attr Test setList mybutton:on,off
attr Test webCmd mybutton
Nachtrag:
attr Test webCmd mybutton
muss weg, dann ist die Auswahlliste auch weg.
Ich habe folgendes beobachtet, was die Nutzung des DevStateIcons fast unmöglich macht.
Dabei interessiert mich, ob man die Probleme beseitigen kann und wie.
Folgendes DOIF funktioniert. Startet man aber fhem neu, oder ändert das DOIF, steht da initialize und das Icon ist weg, bis man mybutton auf on setzt.
defmod Test DOIF (["$SELF:mybutton: on"]) (set Schreibtisch on)\
\
DOELSEIF (["$SELF:mybutton: off"]) (set Schreibtisch off)
attr Test cmdIcon mybutton:on:on mybutton:off:off
attr Test cmdState on|off
attr Test readingList mybutton
attr Test room 1
attr Test setList mybutton:on,off
attr Test webCmd mybutton
Folgendes DOIF funktioniert überhaupt nicht mit dem DevStateIcon, wahrscheinlich weil die Ausführungsteile geklammert sind, um wait einsetzen zu können:
defmod DI_Fernseher DOIF (["$SELF:mybutton: on"]) \
(IF ([Giga] ne "on") (set Giga on)) \
(IF ([HiFi] ne "on") (set HiFi on)) \
(IF ([TV] ne "on") (set TV on)) \
(IF ([Giga:input] ne "tv") (set Giga input tv)) \
DOELSEIF (["$SELF:mybutton: off"])\
(set HiFi off)\
(set TV off) \
(IF ([Giga:input] eq "tv" and [PC] eq "off") (set Giga shutdown)) \
(IF ([Giga:input] eq "tv" and [PC] eq "on") (set Giga off)) \
attr DI_Fernseher alias Fernseher
attr DI_Fernseher devStateIcon on:on:mybutton_off off:off:mybutton_on
attr DI_Fernseher do always
attr DI_Fernseher eventMap /mybutton on:mybutton_on/mybutton off:mybutton_off/
attr DI_Fernseher readingList mybutton
attr DI_Fernseher room 1
attr DI_Fernseher setList mybutton:on,off
attr DI_Fernseher wait 0,0,0,90
attr DI_Fernseher webCmd mybutton
Weiss jemand Rat?
Natürlich kann ich wieder auf Dummys ausweichen, aber das wäre ja nicht so toll.
Vermutlich existiert eine Lösung und ich sehe sie nicht. Nur der Schöpfer selbst kennt sich in den dunklen Tiefen der Seele eines DOIF aus. Lacht.
Zitat von: Invers am 15 Januar 2017, 23:57:12Startet man aber fhem neu, oder ändert das DOIF, steht da initialize und das Icon ist weg, bis man mybutton auf on setzt.
Habe ich so gelöst:
attr Test devStateIcon on:on:mybutton_off initialize|off:off:mybutton_on
Korrekt wäre ein eigenes Icon und Aktionen für
initialize, aber für meinen Zweck reicht obriges aus.
Danke für den Tipp!
Nun benötigen wir "nur" noch eine Lösung für das zweite, grössere Problem.
Da du mit den einzelnen (IF) Befehlsabfolgen Zwischenzustände produzierst, so musst du für jeden Zwischenzustand einen Status definieren:
attr Test cmdState on,on,on,on|off,off,off,off
allerding statt wait 0,0,0,90 kannst du wait 0,90 angeben und die ersten drei Zustände zusammenfassen
(IF ([Giga] ne "on") (set Giga on), IF ([HiFi] ne "on") (set HiFi on), IF ([TV] ne "on") (set TV on))
(IF ([Giga:input] ne "tv") (set Giga input tv))
für den zweiten DOELSEIF hast du kein wait definiert, da kannst du alle zu einem Kommando zusammenfassen.
Und statt IF
IF ([Giga] ne "on") (set Giga on)
kannst du FILTER nehmen
set Giga:FILTER=STATE!=on on
@Damian
Danke dir, das werde ich einbauen. Ich wäre nie auf die Idee gekommen, dass die IFs daran die Schuld haben. Bist du sofort darauf gekommen? Ich freue mich jedenfalls, dass es eine Lösung gibt.
Die Zusammenfassung der IFs - bringt das irgendeinen Vorteil?
@Per
Auch an dich vielen Dank.
Ich kann das machen, aber ich verstehe es leider nicht. Werde mal unter FILTER nachlesen/nachforschen.
Zitat von: Invers am 16 Januar 2017, 21:31:16
@Damian
Danke dir, das werde ich einbauen. Ich wäre nie auf die Idee gekommen, dass die IFs daran die Schuld haben. Bist du sofort darauf gekommen? Ich freue mich jedenfalls, dass es eine Lösung gibt.
Die Zusammenfassung der IFs - bringt das irgendeinen Vorteil?
@Per
Auch an dich vielen Dank.
Ich kann das machen, aber ich verstehe es leider nicht. Werde mal unter FILTER nachlesen/nachforschen.
Das hat nichts mit den IFs zu tun, sondern mit der Unterteilung der Befehle:
(set bla1 on, set bla2 on, set bla3 on) ist ein Zustand
(set bla1 on) (set bla2 on) (set bla3 on) sind aber drei Zustände
Leuchtet ein, danke.
Zitat von: Invers am 16 Januar 2017, 21:31:16Werde mal unter FILTER nachlesen/nachforschen.
Hier (https://fhem.de/commandref_DE.html#devspec)
Super Service. Danke.