FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: the ratman am 18 April 2017, 12:22:13

Titel: [erledigt] knopf im kopf ... toggle mit doif
Beitrag von: the ratman am 18 April 2017, 12:22:13
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?
Titel: Antw:knopf im kopf ... toggle mit doif
Beitrag von: OliS. am 18 April 2017, 12:49:30
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.
Titel: Antw:knopf im kopf ... toggle mit doif
Beitrag von: the ratman am 18 April 2017, 13:14:51
so leider eben nicht. er schaltet 1 mal dann nimma
Titel: Antw:knopf im kopf ... toggle mit doif
Beitrag von: OliS. am 18 April 2017, 13:43:43
Gerade eben getestet. Bei mir funktioniert das. Hast Du das Attribut "do always" gesetzt?
Titel: Antw:knopf im kopf ... toggle mit doif
Beitrag von: the ratman am 18 April 2017, 13:49:49
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.
Titel: Antw:knopf im kopf ... toggle mit doif
Beitrag von: OliS. am 18 April 2017, 14:30:03
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.
Titel: Antw:knopf im kopf ... toggle mit doif
Beitrag von: the ratman am 18 April 2017, 14:43:38
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
Titel: Antw:knopf im kopf ... toggle mit doif
Beitrag von: OliS. am 19 April 2017, 06:34:13
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
Titel: Antw:knopf im kopf ... toggle mit doif
Beitrag von: the ratman am 19 April 2017, 07:17:49
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.
Titel: Antw:knopf im kopf ... toggle mit doif
Beitrag von: OliS. am 19 April 2017, 08:17:51
Wie gesagt, mehr Ideen habe ich leider nicht. Vielleicht muss dann mal ein Profi ran.
Titel: Antw:knopf im kopf ... toggle mit doif
Beitrag von: Damian am 19 April 2017, 08:48:42
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)
Titel: Antw:knopf im kopf ... toggle mit doif
Beitrag von: automatisierer am 19 April 2017, 09:08:37
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.


Titel: Antw:knopf im kopf ... toggle mit doif
Beitrag von: the ratman am 19 April 2017, 09:43:30
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!
Titel: Antw:[erledigt] knopf im kopf ... toggle mit doif
Beitrag von: automatisierer am 19 April 2017, 10:09:00
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)
Titel: Antw:[erledigt] knopf im kopf ... toggle mit doif
Beitrag von: Damian am 19 April 2017, 10:13:57
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.

Titel: Antw:knopf im kopf ... toggle mit doif
Beitrag von: OliS. am 19 April 2017, 10:25:29
([LS_Umschalten:"toggle"] and $cmd==2) (set lampe off) DOELSE (set Lampe on)
[/quote]

Oh Mann, ich liebe dieses Modul!
Titel: Antw:[erledigt] knopf im kopf ... toggle mit doif
Beitrag von: the ratman am 19 April 2017, 10:43:27
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.