[FHEM-Tablet-UI] WeekdayTimer Widget

Begonnen von svenson08, 24 Januar 2016, 18:39:21

Vorheriges Thema - Nächstes Thema

hollyghost

Sag mal Jürgen- musst du in deinem Montagsbeispiel nicht einfach nur Montag und !we aktivieren? Dann sollte der Schaltvorgang doch wie gewünscht ausgeführt werden.
Für deinen konkreten Fall Mo-Do und !we aktiv (angeklickt) sollten doch auch zum Ziel führen?
Grüße Holger


Gesendet von iPhone mit Tapatalk

juemuc

Hallo Holger,

leider nein. !WE bedeutet wirklich alles außer WE und Feiertage. Somit wird das, was bei !WE definiert wird, von Mo-Fr ausgeführt.

Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

hollyghost

Ok - verstanden. we wird hier analog zum Weekdaytimer verwendet (Tag 8). Ich hatte die Vorstellung, dass das Widget nur die Wochentage in der Definition des WT setzt und dann innerhalb des Kommandos auf we bzw. !we prüft.
Da man die einzelnen Tage im Widget einfach durch Anklicken setzen bzw. zurücksetzen kann, würde das aus meiner Sicht auch mehr Sinn machen.
Grüße Holger


Gesendet von iPad mit Tapatalk

juemuc

Hallo Holger,

so ist es bei mir ja auch aktuell eingestellt. Mo-Do ist angehakt. Allerdings wird die Schaltung dann unabhängig von einem Feiertag ausgeführt. Dies möchte ich aber gerne vermeiden.

Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

eki

#529
Hallo Jürgen, könntest Du mir bitte mal Deine aktuelle FHEM weekdaytimer Definition schicken.

Nochmal um Dein Beispiel richtig zu verstehen mein Verständnis dessen, was Du willst:

Mo-Do: Aktion 1 soll ausgeführt werden (z.B. Ausschalten einer Lampe um 20:00)
Feiertag oder Wochenende: Aktion 2 soll ausgeführt werden (z.B. Ausschalten einer Lampe um 20:30)
Feiertag/Wochendende soll Prio haben (also wenn gleichzeitig Mo-Do und Feiertag ist also z.B. ein Feiertag am Mittwoch, dann soll die Aktion 2 erfolgen)

Grundsätzlich kann das Widget allerdings nur das, was auch der weekdaytimer in FHEM kann, und daran kann ich auch nichts ändern. Aber irgendwie kriegt man das schon hin.

juemuc

Hallo Eki,

nicht ganz. Ich möchte eine Aktion nur Mo-Do oder ggf. auch in einer anderen Kombination ausführen, wenn ein dieser Tag ein Wochentag (Mo-Fr) ist aber kein Feiertag.

Hier meine WT-Definition.
defmod Nachtlampe_WT WeekdayTimer FBDECT_FB_08761_0230141 de 1234560|22:15|on 1234560|{sunrise_abs(0,"00:00","23:59")}|off
attr Nachtlampe_WT commandTemplate set $NAME  $EVENT
attr Nachtlampe_WT devStateStyle style="text-align:right"
attr Nachtlampe_WT disable 0
attr Nachtlampe_WT event-on-change-reading .*
attr Nachtlampe_WT group Schaltzeitpunkte
attr Nachtlampe_WT room Schaltzentrale,Statuszentrale

Es wird halt auch am Ostermontag geschaltet.

Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

Ulm32b

Zitat von: eki am 30 April 2019, 14:43:37
...
Grundsätzlich wäre es ziemlich einfach solche Dinge mit einzubauen. Ob ich das tun sollte, stelle ich hier mal zur Diskussion.

Wenn man sich die Umsetzung von WE und !WE in FHEM anschaut, wird sichtbar, dass die einzelnen Tage 0...6 und 7,8 (=$WE,!$WE) quasi nebeneinanderstehen. Insofern ist es folgerichtig, dass sie logisch durch ein "oder" verknüpft sind. Aus der Sicht von FHEM gibt es auch keinen Bedarf, am (FHEM-)WeekdayTimer etwas zu ändern. Jeglicher Konfigurationswunsch ist über einen Perl-Code umsetzbar.

Jetzt kann man natürlich darüber nachdenken, im FTUI-Widget alternativ eine "und"- bzw. "oder"-Verknüpfung anzubieten und die dann über Perl an FHEM weiterzugeben. Ich glaube aber, dass man dabei ein sehr großes Fass aufmachen würde. Das Widget soll ja nicht nur eine korrekte Konfiguration an FHEM senden, sondern auch in FHEM programmierte Logiken richtig interpretieren.

Insgesamt tendiere ich dazu, die Sache schlank zu halten und im Widget keine Kombinationslogiken zu implementieren. Die Lösung lautet Perl. Zugegebenermaßen ist das nicht so bequem wie eine Klick-Kombination. Meine Meinung.

ext23

Zitat von: Ulm32b am 03 Mai 2019, 00:36:01
Zugegebenermaßen ist das nicht so bequem wie eine Klick-Kombination. Meine Meinung.

Mag sein aber genau darum geht es ja im TabletUI.

/Daniel
HM, KNX, FS20, 1-Wire, PanStamp, AVR-NET-IO, EM1000EM, PCA301, EC3000, HM-LAN, CUL868, RFXtrx433, LGW, DMX @Ubuntu-Server (Hauptsystem) & Raspberry Pi (Satellit)

juemuc

Zitat von: Ulm32b am 03 Mai 2019, 00:36:01
Wenn man sich die Umsetzung von WE und !WE in FHEM anschaut, wird sichtbar, dass die einzelnen Tage 0...6 und 7,8 (=$WE,!$WE) quasi nebeneinanderstehen. Insofern ist es folgerichtig, dass sie logisch durch ein "oder" verknüpft sind. Aus der Sicht von FHEM gibt es auch keinen Bedarf, am (FHEM-)WeekdayTimer etwas zu ändern. Jeglicher Konfigurationswunsch ist über einen Perl-Code umsetzbar.

Jetzt kann man natürlich darüber nachdenken, im FTUI-Widget alternativ eine "und"- bzw. "oder"-Verknüpfung anzubieten und die dann über Perl an FHEM weiterzugeben. Ich glaube aber, dass man dabei ein sehr großes Fass aufmachen würde. Das Widget soll ja nicht nur eine korrekte Konfiguration an FHEM senden, sondern auch in FHEM programmierte Logiken richtig interpretieren.

Insgesamt tendiere ich dazu, die Sache schlank zu halten und im Widget keine Kombinationslogiken zu implementieren. Die Lösung lautet Perl. Zugegebenermaßen ist das nicht so bequem wie eine Klick-Kombination. Meine Meinung.

Hallo Ulm32b,

wie müsste dann der Perlcode lauten, wenn ein Zustandswechsel an einem Wochentag (z.B. Mo-Do) stattfinden soll, solange dieser Tag kein Feiertag ist?

Viele Grüße
Jürgen

3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

Ulm32b

Zitat von: juemuc am 04 Mai 2019, 20:16:26
Hallo Ulm32b,

wie müsste dann der Perlcode lauten, wenn ein Zustandswechsel an einem Wochentag (z.B. Mo-Do) stattfinden soll, solange dieser Tag kein Feiertag ist?

Viele Grüße
Jürgen

Zunächst müssen die Feiertage als WE (=Wochenende) definiert werden, siehe https://wiki.fhem.de/wiki/Wochenende,_Feiertage_und_Schulferien .

Dann wird eine Condition in runden (!) Klammern an das Ende der FHEM-Konfiguration des WeekdayTimers gesetzt, z.B.:
defmod Geigenwarnung_Timer WeekdayTimer Geigenwarnung de 1234|10:00|on 1234|10:59|off (!$we)

Du kannst Dir dann im Widget anschauen, dass die Condition als Code angezeigt wird. Die Schaltbefehle werden nur unter der Voraussetzung ausgeführt, dass (!$we) true ist.

juemuc

Hallo Ulm32,

danke für den Tipp.

Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

juemuc

Hallo Ulm32b,

hast Du auch einen Tipp, wie man zwar das Eiinschalten immer durchführen kann, aber das Ausschalten nur an einen Werktag? Ich würde gerne die Bedigung an die Definition des Schaltvorganges hängen. Aktuell sehe ich hier nur die Möglichkeit mehrere WTs zu definieren.

Viele Grüße
Jürgen

3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

Ulm32b

Zitat von: juemuc am 05 Mai 2019, 18:20:00
hast Du auch einen Tipp, wie man zwar das Eiinschalten immer durchführen kann, aber das Ausschalten nur an einen Werktag? Ich würde gerne die Bedigung an die Definition des Schaltvorganges hängen. Aktuell sehe ich hier nur die Möglichkeit mehrere WTs zu definieren.
Hierzu könnte man den Zustand des geschalteten devices in die Condition einbeziehen. Der Schaltbefehl ("on" oder "off") soll dann und nur dann ignoriert werden, wenn das device "on" ist und $we = "true"
Dies müsste mit folgender Condition gehen:
(!((ReadingsVal("Geigenwarnung","state,"off") eq "on") && ("$we")))
Disclaimer: Eigentlich habe ich keine Ahnung, schon gar nicht von Programmierung. Der Code ist auch nicht getestet. Wahrscheinlich sind da auch nicht alle Klammern erforderlich. Und wahrscheinlich geht das auch eleganter.  ...

Jedenfalls ist das ein schönes Beispiel dafür, dass vermutlich jeder mit vertretbarem Aufwand entwickelte Ansatz, einen in FHEM mit Perl formulierten Schaltbefehl so zu interpretieren, dass er über Schaltflächen im Widget korrekt wiedergegeben wird, falsifiziert werden kann. Deshalb bleibe ich bei meiner Einschätzung, dass diese Baustelle gar nicht erst eröffnet werden sollte. Allenfalls denkbar wäre, dass nur das reine (... UND "$we"), (... UND "!$we"), (... ODER "$we"), (... ODER "!$we") klicki-bunti-mäßig wiedergegeben und in allen anderen Fällen die weiße Fahne gehisst wird, indem einfach der eingegebene Code zur Anzeige kommt.

eki

#538
Alternativ zu der Bedingung in "()" kann man auch beliebigen Code in "{}" verwenden. Im Code kann man auch das Kommando in der Variable $EVENT und das Device, das gerade ansteht, über $NAME abfragen. Mein Vorschlag für die gewünschte Funktione wäre:

defmod Nachtlampe_WT WeekdayTimer FBDECT_FB_08761_0230141 de 1234|22:15|on 1234|{sunrise_abs(0,"00:00","23:59")}|off {if (($EVENT eq "on") or !we) {fhem("set $NAME $EVENT")};;}

Zur Erklärung:
in den {} nach der Definition der Profile wird zunächst abgefragt ob entweder das anstehende Kommando "on" heißt oder ein Werktag ist. In beiden Fällen wird das Kommando ($EVENT) für das entsprechend anstehende Device ($NAME) ausgeführt, ansonsten passiert nichts. Wenn also das Kommando "on" ist, wird der Befehl immer ausgeführt, wenn das Kommando nicht "on" ist, wird das Kommando nur im Fall !we ausgeführt.

juemuc

Hallo eki,

danke für den Tipp. Ich werde es am Wochenende testen.

Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).