ich bâu mir einen dummy - z.b. defmod LS_Umschalten dummy
attr LS_Umschalten setList state:toggle
attr LS_Umschalten webCmd toggle
ich hab ein doif(????????)
(
set Handy_Lichter_Gross visibility show;
set Tablet_Lichter_Gross visibility show;
set Tablet_Rollos_Gross visibility hide;
)
DOELSEIF
(???????)
(
set Handy_Lichter_Gross visibility hide;
set Tablet_Lichter_Gross visibility hide;
set Tablet_Rollos_Gross visibility show;
set WZ_Terrasse_Rollo statusRequest; set WZ_Strasse_Rollo statusRequest; set SZ_Terrasse_Rollo statusRequest;
)
und komm nicht dahinter, wie ich das nun togglen soll. und ich weiß, das sollte ganz simpel sein .... kann mir wer das brett vorm kopf entfernen bitte?
Aus der Hüfte geschossen...
(Bedingung and [?Device] eq "on")(set Device off)
DOELSEIF
(Bedingung and [?Device] eq "off")(set Device on)
attr DOIF do always
Geht sicher auch noch einfacher.
so leider eben nicht. er schaltet 1 mal dann nimma
Gerade eben getestet. Bei mir funktioniert das. Hast Du das Attribut "do always" gesetzt?
ja, hab ich
das dumme ist scheints, dass es den toggle nicht mitbekommt.
drum dachte ich, ich frag den timestamp ab [LS_Umschalten:state:sec] <1
funzt auch nicht
meine 2 cmd-fälle schauen also derzeit so aus:
([LS_Umschalten:state:sec] <1 and [?Tablet_Rollos_Gross:visibility] eq "hide")
([LS_Umschalten:state:sec] <1 and [?Tablet_Rollos_Gross:visibility] eq "show")
der vollständigkeit halber:
ich schalte 2 readingsgroups damit sichtbar/unsichtbar - also keine lampen, oder so simples zeug *g*
diese rg's wehren sich mit händen und füßen, brauchbar geschaltet zu werden.
Mit Deiner Dummy-Definition von oben
defmod LS_Umschalten dummy
attr LS_Umschalten setList state:toggle
attr LS_Umschalten webCmd toggle
und einer DOIF-Definition
([LS_Umschalten])(Ausführungsteil)
attr LS_Umschalten do always
MÜSSTE Dein DOIF aber eigentlich bei jedem Schalten Deines Dummy triggern.
Ansonsten würde ich mich langsam rantasten. Erst das DOIF mit einfacher Bedingung, ohne zusätzliche Statusabfrage des Schaltzustandes, definieren. Wenn das läuft, dann die zusätzliche Abfrage des Schaltzustandes.
Mach doch mal ein list vom Dummy und dem DOIF.
bitte:Internals:
CFGFN
NAME LS_Umschalten
NR 4341
STATE toggle
TYPE dummy
Readings:
2017-04-18 13:43:46 state toggle
Attributes:
DbLogExclude .*
devStateIcon .*:taster:toggle
group ratPlan
icon taster
room Allgemein
setList state:toggle
webCmd toggle
Internals:
CFGFN
DEF ([LS_Umschalten:state:sec] <1 and [?Tablet_Rollos_Gross:visibility] eq "hide")
(
set Handy_Lichter_Gross visibility hide;
set Tablet_Lichter_Gross visibility hide;
set Tablet_Rollos_Gross visibility show;
set WZ_Terrasse_Rollo statusRequest; set WZ_Strasse_Rollo statusRequest; set SZ_Terrasse_Rollo statusRequest;
)
DOELSEIF
([LS_Umschalten:state:sec] <1 and [?Tablet_Rollos_Gross:visibility] eq "show")
(
set Handy_Lichter_Gross visibility show;
set Tablet_Lichter_Gross visibility show;
set Tablet_Rollos_Gross visibility hide;
)
NAME Tablet_Toggle_Logik2
NR 5470
NTFY_ORDER 50-Tablet_Toggle_Logik2
STATE initialized
TYPE DOIF
Readings:
2017-04-18 13:43:46 Device LS_Umschalten
2017-04-18 13:41:26 cmd 0
2017-04-18 13:43:46 e_LS_Umschalten_state toggle
2017-04-18 13:41:26 state initialized
Condition:
0 ReadingSecDoIf('LS_Umschalten','state') <1 and ReadingValDoIf($hash,'Tablet_Rollos_Gross','visibility') eq "hide"
1 ReadingSecDoIf('LS_Umschalten','state') <1 and ReadingValDoIf($hash,'Tablet_Rollos_Gross','visibility') eq "show"
Devices:
0 LS_Umschalten
1 LS_Umschalten
all LS_Umschalten
Do:
0:
0 set Handy_Lichter_Gross visibility hide; set Tablet_Lichter_Gross visibility hide; set Tablet_Rollos_Gross visibility show; set WZ_Terrasse_Rollo statusRequest; set WZ_Strasse_Rollo statusRequest; set SZ_Terrasse_Rollo statusRequest;
1:
0 set Handy_Lichter_Gross visibility show; set Tablet_Lichter_Gross visibility show; set Tablet_Rollos_Gross visibility hide;
2:
Helper:
event toggle
globalinit 1
last_timer 0
sleeptimer -1
triggerDev LS_Umschalten
triggerEvents:
toggle
triggerEventsState:
state: toggle
Internals:
Itimer:
Readings:
0 LS_Umschalten:state
1 LS_Umschalten:state
all LS_Umschalten:state
Regexp:
0:
1:
All:
State:
Trigger:
Attributes:
DbLogExclude .*
alias Licht / Rollos Umschalter Logik2
do always
group ratPlan
icon helper_doif
room Allgemein
Guten Morgen,
ich habe Deine Dummy/Doif Kombi gerade mal mit einigen meiner Lampen nachgestellt. Funktioniert bei mir problemlos. Und das Ganze auch ohne auf den Timestamp des Toggle zu triggern.
Du sagtest, dass Du versuchst, ReadingsGroups ein- und ausblendest. Kann es sein, dass beim ersten Toggle der Befehl
set Tablet_Rollos_Gross visibility show
schon gar nicht ausgeführt wird? Dann würde der zweite Druck auf Toggle schon nicht mehr funktionieren, weil die Bedingungen für cmd2 nicht wahr wären.
Hast Du bei Deinen ReadingsGroups das Attribut "visibility" denn gesetzt? Ansonsten funktioniert das Ein- und Ausblenden schon nicht.
Dann bin ich aber auch schon am Ende mit meinem Latein.
Oli
servus,
ja, das attribut is angelegt und immer aktuell.
das lustige - wenn ich nicht einfach nur togglen will, sondern nen schalter mit on/off mache, schaltet mir alles korrekt.
ich wollt aber toggle haben, weil durch das schalten auf mehreren tablets/handys die schaltzustände mit der realität nicht mehr übereinstimmen und man dann mehrfach drücken muß, bis die rg's umgeschaltet werden.
das gabze is sowieso lustig - zumindest am floorplan.
die unsichtbare readingsgroup kriegt z.b. nicht alle werte mit - so hast du dann z.b. slider die immer links stehen (drum der statusrequest), egal welchen wert sie stehen haben und lauter solch lustiger sachen.
Wie gesagt, mehr Ideen habe ich leider nicht. Vielleicht muss dann mal ein Profi ran.
Wenn dein Dummy immer nur toggle-Events produziert, dann kannst du definieren:
([LS_Umschalten:"toggle"] and $cmd==2) (set lampe off) DOELSE (set Lampe on)
Meine ReadingsGroups haben nur ein Attribut 'visibility' und kein Reading, welches du aber auswerten möchtest.
Ich bin mir nicht sicher ob DOIF auch direkt mit Attributen arbeiten kann - seit Ostern gibts da ja neue Features, mit denen hab ich mich aber noch nicht beschäftigt...
hiermit könnte es funzen:
[<device>:<reading>,<default value>]
[heating,AttrVal("mydevice","myattr","")]
also übersetzt:
[?Tablet_Rollos_Gross:visibility,AttrVal("Tablet_Rollos_Gross","visibility",""] eq "hidden"
da es das Reading visibility nicht gibt, wird mit AttrVal ein Ersatzwert genommen. habs bei mir getestet.
EDIT:
das Attribut kannst du nicht wirklich nehmen, da es seinen Wert zwar verändert, allerdings immer wieder auf die Voreinstellung zurück springt.
ich hab ein reading, glaub mirs *g*
allerdings stell ich grade fest, dass selbiges auf "o" steht, nicht auf visible oder hidden, wie es sein sollte ...
@damian
thx, das probier ich dann gleich
nachtrag: funzt
ich brauch somit auch nix mehr prüfen - ENDLICH!
thx an euch alle!
Also meine ReadingsGroups haben definitiv keine Readings - hab grad nochmal nen Update gemacht - wirklich nicht!
Das Reading bei deiner ReadingsGroup wurde offenbar durch das DOIF erzeugt.
Ich hab seit dem Test nämlich ein Reading '1' mit dem Wert '0', da ich in meinem TestDOIF auf '[<ReadingsGroup>:1,AttrVal....]' geprüft hatte.
Das Reading erscheint erst nach einem FHEM-Neustart. Ob das nun ein Bug ist oder was auch immer kann ich dir nicht sagen.
Und wenn das die Lösung war:
([LS_Umschalten:"toggle"] and $cmd==2) (set lampe off) DOELSE (set Lampe on)
dann hast du aber ganz schön kompliziert angefangen... 8)
Ich hab seit dem Test nämlich ein Reading '1' mit dem Wert '0', da ich in meinem TestDOIF auf '[<ReadingsGroup>:1,AttrVal....]' geprüft hatte.
Ist wohl ein Bug, wird beim nächsten Update mit Aggregationsfunktion (dort war dieses Problem auch aufgefallen) behoben.
([LS_Umschalten:"toggle"] and $cmd==2) (set lampe off) DOELSE (set Lampe on)
[/quote]
Oh Mann, ich liebe dieses Modul!
jau, das doif-ding kann schon was ... da hat damian nicht gekleckert *g*
schad nur, dass ich scheints viel zu umständlich denke. oder eher: viel zu un-programmiererisch.
nur zu meiner ehrenrettung @automatisierer
das ganze umschaltgedöns stellt sich am floorplan zumindest als gar ned so einfach dar. da wird nicht alles upgedatet nur weils unsichtbar is. das verwirrt den geneigten otto-normal-user. nach viel probieren hatte ichs dann endlich mit on/off gelöst gehabt. drum die "altlasten". nur war on/off auch ned grade die lösung, wenn du von mehreren geräten aus arbeitest.