[erledigt] knopf im kopf ... toggle mit doif

Begonnen von the ratman, 18 April 2017, 12:22:13

Vorheriges Thema - Nächstes Thema

the ratman

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?
→do↑p!dnʇs↓shit←

OliS.

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.
FHEM in Debian VM auf DS720+, HMLAN und HMUARTLGW, RFXTRX, Conbee II, Homebridge, Alexa
Geräte: Homematic, Tradfri, Shelly, IT, ESA2000, VU+, Denon-AVR, Sonos, Fritz!Box, Harmony Hub, IP-Cams, Roborock, Automower

the ratman

so leider eben nicht. er schaltet 1 mal dann nimma
→do↑p!dnʇs↓shit←

OliS.

Gerade eben getestet. Bei mir funktioniert das. Hast Du das Attribut "do always" gesetzt?
FHEM in Debian VM auf DS720+, HMLAN und HMUARTLGW, RFXTRX, Conbee II, Homebridge, Alexa
Geräte: Homematic, Tradfri, Shelly, IT, ESA2000, VU+, Denon-AVR, Sonos, Fritz!Box, Harmony Hub, IP-Cams, Roborock, Automower

the ratman

#4
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.
→do↑p!dnʇs↓shit←

OliS.

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.
FHEM in Debian VM auf DS720+, HMLAN und HMUARTLGW, RFXTRX, Conbee II, Homebridge, Alexa
Geräte: Homematic, Tradfri, Shelly, IT, ESA2000, VU+, Denon-AVR, Sonos, Fritz!Box, Harmony Hub, IP-Cams, Roborock, Automower

the ratman

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
→do↑p!dnʇs↓shit←

OliS.

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
FHEM in Debian VM auf DS720+, HMLAN und HMUARTLGW, RFXTRX, Conbee II, Homebridge, Alexa
Geräte: Homematic, Tradfri, Shelly, IT, ESA2000, VU+, Denon-AVR, Sonos, Fritz!Box, Harmony Hub, IP-Cams, Roborock, Automower

the ratman

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.
→do↑p!dnʇs↓shit←

OliS.

Wie gesagt, mehr Ideen habe ich leider nicht. Vielleicht muss dann mal ein Profi ran.
FHEM in Debian VM auf DS720+, HMLAN und HMUARTLGW, RFXTRX, Conbee II, Homebridge, Alexa
Geräte: Homematic, Tradfri, Shelly, IT, ESA2000, VU+, Denon-AVR, Sonos, Fritz!Box, Harmony Hub, IP-Cams, Roborock, Automower

Damian

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)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

automatisierer

#11
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.



the ratman

#12
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!
→do↑p!dnʇs↓shit←

automatisierer

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)

Damian

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.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF