Änderung von Dummy wirkt auf Timer

Begonnen von Tipetan, 10 Februar 2018, 11:41:02

Vorheriges Thema - Nächstes Thema

Tipetan

Hallo zusammen,
ich bitte euch mal um eure Hilfe.
Ich definiere in meinem Projekt mehrer Weekdaytimer über die ich die An-/Ausschaltzeit meiner Gartenbeleuchtung realisiere.
define A.Gart.Flie.Licht2.Timer_ WeekdayTimer A.Gart.Flie.Licht2 So-Do|{Value("A.Gart.Deko.Zeit__.An____.Werkta")}|on So-Do|{Value("A.Gart.Deko.Zeit__.Aus___.Werkta")}|off Fr-Sa|{Value("A.Gart.Deko.Zeit__.An____.W_Ende")}|on Fr-Sa|{Value("A.Gart.Deko.Zeit__.Aus___.W_Ende")}|off
  attr A.Gart.Flie.Licht2.Timer_ commandTemplate set $NAME  $EVENT
  attr A.Gart.Flie.Licht2.Timer_ devStateIcon auf:black_up.png runter:black_down.png
  attr A.Gart.Flie.Licht2.Timer_ disable 0


Über Dummys gebe ich die An-/Ausschaltzeit für alle Timer vor.
define A.Gart.Deko.Zeit__.An____.Werkta dummy
  attr A.Gart.Deko.Zeit__.An____.Werkta setList state:time
  attr A.Gart.Deko.Zeit__.An____.Werkta webCmd state

 
Wenn ich nun die Zeit ändere wirkt sich diese nicht auf den Timer aus.
Der Workaround geht so:
Um die Zeit im Timer zu Übernehmen muss ich in der Device Übersicht auf DEF klicken und anschließend - ohne was zu ändern - auf modify.

Frage 1: Gibt es Kommandos den klick auf DEF und modify zu tätigen oder eine andere Möglichkeit? Hab ein bisschen was über defmod gelesen aber nicht verstanden wie ich das implementiere, weil ich ja eigentlich nichts ändere.

Frage 2: Wie könnte das notify mit den möglichen Platzhaltern aussehen?

Danke
Tipetan
 
>-> Eine NULL kann ein bestehendes Problem verzehnfach <-<
Raspberry Pi 2 Model B | FHEM 5.6 | CUL V3.4 (culfw 1.58 + Insta) | HMLAN | Berker (INSTA) Funkkomponenten
Entwicklung auf Raspberry Pi 2 B+

rudolfkoenig

define n notify A.Gart.Deko.Zeit__.An____.Werkta { fhem("modify A.Gart.Flie.Licht2.Timer_ ". $defs{"A.Gart.Flie.Licht2.Timer_"}{DEF}) }

Tipetan

Hallo!
Danke Rudolf es funktioniert!

Ich habe eben versucht deinen Code für meherer Timer zu Kombinieren. Dazu wollte ich den Namen des Devices wie folgt anpassen:
A.Gart.*.Licht2.Timer_  ODER  A.Gart.(Flie|Gabi).Licht2.Timer_
define n notify A.Gart.Deko.Zeit__.An____.Werkta { fhem("modifyA.Gart.*.Licht2.Timer_ ". $defs{"A.Gart.*.Licht2.Timer_"}{DEF}) }
      ODER
define n notify A.Gart.Deko.Zeit__.An____.Werkta { fhem("modify A.Gart.(Flie|Gabi).Licht2.Timer_ ". $defs{"A.Gart.(Flie|Gabi).Licht2.Timer_"}{DEF}) }

Funktioniert aber nicht.
Wobei das funktioniert
define n notify A.Gart.Deko.Zeit__.An____.Werkta { fhem("modify A.Gart.Flie.Licht2.Timer_ ". $defs{"A.Gart.Flie.Licht2.Timer_"}{DEF});; fhem("modify A.Gart.Gabi.Licht2.Timer_ ". $defs{"A.Gart.Gabi.Licht2.Timer_"}{DEF});; }

Bei 2-3 Devices ist es ja nicht so schlimm aber bei 10-20 wirds doof
Gibt es eine Möglichkeit den Devicenamen dynamischer zu machen?
Ich bin leider RegEx-Legastheniker.
Danke
Tipetan
>-> Eine NULL kann ein bestehendes Problem verzehnfach <-<
Raspberry Pi 2 Model B | FHEM 5.6 | CUL V3.4 (culfw 1.58 + Insta) | HMLAN | Berker (INSTA) Funkkomponenten
Entwicklung auf Raspberry Pi 2 B+

rudolfkoenig

ZitatGibt es eine Möglichkeit den Devicenamen dynamischer zu machen?
Sicher, perl ist Turing-vollstaendig :)
Wenn du bei der Namensvergabe geschickt bist (z.Bsp. gehoert dummy XXX.Zeit immer zu XXX.Timer), dann ist es relativ einfach:
define n notify .*Zeit { $NAME =~ s/Zeit/Timer/;; fhem("modify $NAME ". $defs{$NAME}{DEF}) }


ZitatIch bin leider RegEx-Legastheniker.
Verstehe, F81.7 :)
Wenn du vor hast mit FHEM mehr zu machen, dann solltest du daran arbeiten, ueben kann man sowohl online, wie auch "offline" (formerly known as "Buch").

Tipetan

Hallo Rudolf,
danke für deinen Ratschlag (RegExp) ich werde ihn mir zu Herzen nehmen und mich weiterbilden.

Dein Lösungsvorschlag ist bei mir nicht ganz implementierbar. Du hast mir aber den Schubs in die richtige Richtung gegeben. Mit dem Code define A.Gart.Deko.Zeit__.notify notify A.Gart.Deko.Zeit__.* { \
fhem("modify A.Gart.Flie.Licht2.Timer_ ". $defs{"A.Gart.Flie.Licht2.Timer_"}{DEF});; \
fhem("modify A.Gart.Gabi.Licht2.Timer_ ". $defs{"A.Gart.Gabi.Licht2.Timer_"}{DEF});; }
kann ich mit einem notify alle 4 Zeit-Dummys überwachen und bei Änderung die Timer aktualisieren.

Für mein Vorhaben müsste ich mir vermutlich eine Art Schleife basteln die mehrer Timer ändert. Alle wie folgt definiert:(Zeilenumbrüche dienen hier nur der besseren Lesbarkeit.
define A.Gart.Flie.Licht2.Timer_ WeekdayTimer A.Gart.Flie.Licht2
  So-Do|{Value("A.Gart.Deko.Zeit__.Werkta.An____")}|on
  So-Do|{Value("A.Gart.Deko.Zeit__.Werkta.Aus___")}|off
  Fr-Sa|{Value("A.Gart.Deko.Zeit__.W_Ende.An____")}|on
  Fr-Sa|{Value("A.Gart.Deko.Zeit__.W_Ende.Aus___")}|off

Der Anfang des Timer beginnt mit "A.Gart." und endet auf ".Timer_". Der dynamische Mittelteil besteht aus einem Ort (Flie|Gabi|BamV|BamH) und dem Gerät (Licht1|Licht2|Licht3|Licht4). Pro Ort jeweils 4 Geräte.
Würde so etwas funktionieren?
define A.Gart.Deko.Zeit__.notify notify A.Gart.Deko.Zeit__.* { \
fhem("modify A.Gart.*.Timer_ ". $defs{"A.Gart.*.Timer_"}{DEF});; }

Danke.
Gruß
Andreas
>-> Eine NULL kann ein bestehendes Problem verzehnfach <-<
Raspberry Pi 2 Model B | FHEM 5.6 | CUL V3.4 (culfw 1.58 + Insta) | HMLAN | Berker (INSTA) Funkkomponenten
Entwicklung auf Raspberry Pi 2 B+