FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: roman1528 am 29 Oktober 2017, 20:21:47

Titel: [gelöst] DOIF Zeitsteuerung mit Datum?
Beitrag von: roman1528 am 29 Oktober 2017, 20:21:47
Moin.

Ich habe leider nichts dazu gefunden oder ich habe es tatsächlich übersehen.

Kann ich im Anführungsteil mit Datum und Zeit arbeiten? Wenn ja wie?

Danke

Grüße^^
Titel: Antw:DOIF Zeitsteuerung mit Datum?
Beitrag von: Ellert am 29 Oktober 2017, 23:33:51
Zitat von: roman1528 am 29 Oktober 2017, 20:21:47
Moin.

Ich habe leider nichts dazu gefunden oder ich habe es tatsächlich übersehen.

Kann ich im Anführungsteil mit Datum und Zeit arbeiten? Wenn ja wie?

Danke

Grüße^^
Ja, mit den üblichen Funktionen, siehe FHEM Referenz PERL Besonderheiten und in perldoc z.B. die Perlfunktionen time, localtime, timelocal, strftime usw.
Titel: Antw:DOIF Zeitsteuerung mit Datum?
Beitrag von: roman1528 am 30 Oktober 2017, 10:33:22
Zitat von: Ellert am 29 Oktober 2017, 23:33:51
Ja, mit den üblichen Funktionen, siehe FHEM Referenz PERL Besonderheiten und in perldoc z.B. die Perlfunktionen time, localtime, timelocal, strftime usw.

Danke.

Also nur in Perl... schade, dachte das gäbe es auch in einfach.

Grüße^^
Titel: Antw:DOIF Zeitsteuerung mit Datum?
Beitrag von: Ellert am 30 Oktober 2017, 15:24:21
Was meinst Du mit  "einfach"?

Gib mal ein Beispiel.
Titel: Antw:DOIF Zeitsteuerung mit Datum?
Beitrag von: roman1528 am 30 Oktober 2017, 18:52:16
Zitat von: Ellert am 30 Oktober 2017, 15:24:21
Gib mal ein Beispiel.

Moin.
Na so in der Art wie es mit der Uhrzeit bzw. relativen Zeitangaben auch ist.
Nur Zeit:
([08:00]) (set lampe on)

Mit Datum: meinetwegen auch an Perl bzw. ISO8601 angelehnt.
([2017-12-31 08:00]) (set lampe on)
Am 31.12.2017 um 8 Uhr "lampe" an.

bzw. relativ (in Sekunden):
([2017-12-31 +3600]) (set lampe on)
Also am 31.12.2017 3600 Sekunden nach 0 Uhr... folglich um 1 Uhr.

oder eben nach ISO8601 mit Trenner: 2017-12-31T08:00

Gern natürlich auch in unserem Datumsformat... 31.12.2017 ::)

Grüße^^
Titel: Antw:DOIF Zeitsteuerung mit Datum?
Beitrag von: Ellert am 30 Oktober 2017, 19:21:23
Ich bin etwas verwirrt, was meinst Du mit
Zitat von: roman1528 am 29 Oktober 2017, 20:21:47
... Anführungsteil ...

Deine Beispiele spielen alle im Bedingungsteil, Beispiel dafür gibts im Wiki https://wiki.fhem.de/wiki/DOIF/Zeitspanne_zwischen_zwei_Terminen_schalten#Zeitspanne_zwischen_zwei_Terminen
Titel: Antw:DOIF Zeitsteuerung mit Datum?
Beitrag von: roman1528 am 30 Oktober 2017, 20:05:49
Zitat von: Ellert am 30 Oktober 2017, 19:21:23
Ich bin etwas verwirrt, was meinst Du mit
Zitat von: roman1528 am 29 Oktober 2017, 20:21:47
...Anführungsteil...
*Ironie an*
Das mag an meinen stark ausgeprägten Fachkenntnissen liegen, welche das Programmieren betreffen :P
*Ironie aus*
Ich entschuldige mich dafür! Natürlich muss es Bedingungsteil heißen.

Zitat von: Ellert am 30 Oktober 2017, 19:21:23
...Beispiel dafür gibts im Wiki https://wiki.fhem.de/wiki/DOIF/Zeitspanne_zwischen_zwei_Terminen_schalten#Zeitspanne_zwischen_zwei_Terminen (https://wiki.fhem.de/wiki/DOIF/Zeitspanne_zwischen_zwei_Terminen_schalten#Zeitspanne_zwischen_zwei_Terminen)
Das ist stark verwirrend... zumindest für mich. Aber vielleicht verstehe ich das richtig:

Ich sage also nicht:
DOIF ([DATUM UHRZEIT]) (mach die lampe an)
was mit der Uhrzeit ja so funktioniert... einfach funktioniert

sonder ich prüfe manuell ob heute dieses Datum ist und die Uhrzeit dient als Trigger:
DOIF ([UhrZeit] and [?DEVICE:JahrREADING] == "DiesesJahr" and [?DEVICE:MonatREADING] == "DieserMonat" and [?DEVICE:TagREADING] == "DieserTag") (mach die lampe an)
Die paar Fragezeichen vor die Jahr/Monat/Tag Abfrage, weil diese nicht als Trigger dienen sollen...

Richtig? Wenn ja ist das logisch aber auch irgendwie sau umständlich XD

Noch 'ne Frage für "Dummies": Mit $SELF weiß das DOIF-Device, dass es selbst gemeint ist?

Grüße^^
Titel: Antw:DOIF Zeitsteuerung mit Datum?
Beitrag von: Frank_Huber am 30 Oktober 2017, 21:12:53
Mit Fragezeichen wird  die Bedingung nur abgefragt wenn eine andere Bedingung wahr wird.

Z. B.
Bewegungsmelder and ?Helligkeitswert = dunkel

Nur der Bewegungsmelder triggert.

Gesendet von meinem S3_32 mit Tapatalk

Titel: Antw:DOIF Zeitsteuerung mit Datum?
Beitrag von: roman1528 am 30 Oktober 2017, 21:15:56
Zitat von: Frank_Huber am 30 Oktober 2017, 21:12:53
Mit Fragezeichen wird  die Bedingung nur abgefragt wenn eine andere Bedingung wahr wird.
Z. B.
Bewegungsmelder and ?Helligkeitswert = dunkel
Nur der Bewegungsmelder triggert.

Danke  :)
Das hatte ich bis jetzt auch so verstanden... aber deine Erklärung ist klarer.

Grüße^^
Titel: Antw:DOIF Zeitsteuerung mit Datum?
Beitrag von: Frank_Huber am 30 Oktober 2017, 21:21:45
Lol, das sollte in nen anderen thread, passt aber zufällig auch hier.
;-)

Btw, ja $self ist das doif selbst.

Gesendet von meinem S3_32 mit Tapatalk

Titel: Antw:DOIF Zeitsteuerung mit Datum?
Beitrag von: roman1528 am 30 Oktober 2017, 21:58:42
Danke Frank.

Ich habe da jetzt mal was zusammen geschustert und es läuft tatsächlich. Umständlich ist es dennoch  :P

define bad_doif_heizung_extra DOIF ([[$SELF:time]] and [?$SELF:year] == $year and [?$SELF:month] == $month and [?$SELF:day] == $mday) (set bad_WT_Climate desired-temp [$SELF:temp])

Internals:
   CFGFN
   DEF        ([[$SELF:time]] and [?$SELF:year] == $year and [?$SELF:month] == $month and [?$SELF:day] == $mday) (set bad_WT_Climate desired-temp [$SELF:temp])
   NAME       bad_doif_heizung_extra
   NR         56616
   NTFY_ORDER 50-bad_doif_heizung_extra
   STATE      disabled
   TYPE       DOIF
   READINGS:
     2017-10-30 21:32:07   day             30
     2017-10-30 21:41:33   last_cmd        initialize
     2017-10-30 21:41:33   mode            disabled
     2017-10-30 21:32:10   month           10
     2017-10-30 21:41:33   state           disabled
     2017-10-30 21:27:29   temp            off
     2017-10-30 21:34:16   time            12:00
     2017-10-30 21:39:30   timer_01_c01    31.10.2017 12:00:00
     2017-10-30 20:53:11   year            2017


Danke für die Hilfe
Titel: Antw:[gelöst] DOIF Zeitsteuerung mit Datum?
Beitrag von: Frank_Huber am 30 Oktober 2017, 22:15:22
Time / day usw setzt du als reading selbst ins  doif?
Wenn ja könnte man das  evtl vereinfachten.

Gesendet von meinem S3_32 mit Tapatalk

Titel: Antw:[gelöst] DOIF Zeitsteuerung mit Datum?
Beitrag von: roman1528 am 30 Oktober 2017, 22:25:52
Zitat von: Frank_Huber am 30 Oktober 2017, 22:15:22
Time / day usw setzt du als reading selbst ins  doif?
Wenn ja könnte man das  evtl vereinfachten.

ja genau so mach ich das... im FTUI-Frontend per select-widget.

dennoch bin ich auf deinen vorschlag gespannt.

Grüße^^
Titel: Antw:[gelöst] DOIF Zeitsteuerung mit Datum?
Beitrag von: Frank_Huber am 31 Oktober 2017, 14:07:08
Hi,

Ich dachte an eine Vereinfachung mit nur einem Reading für das Datum.

([[$SELF:time]] and [?$SELF:date] eq "$mday.$month.$year") (set bad_WT_Climate desired-temp [$SELF:temp])

dann müsste das reading date mit z.B. 31.10.2017 gefüttert sein.
Ist allerdings ungetestet. evtl anderer Syntax für die Punkte.

Grüße
Titel: Antw:[gelöst] DOIF Zeitsteuerung mit Datum?
Beitrag von: roman1528 am 31 Oktober 2017, 20:51:05
Moin.

Das ist gut, aber für mich so nicht umsetzbar.

In FTUI müsste ich das Reading an einem Stück übergeben, da es 3-teilig ist... ich kann in FTUI nämlich nur 2 Parameter zu einem Reading zusammen fasssen. Der 3. Wäre das Device selbst. Oder ich müsste das Datum manuell in ein Textfeld eingeben.
Ich möchte aber Tag, Monat und Jahr aus  DropDownMenü's auswählen. Deswegen setze ich die Readings einzeln.

Alternativ könnte ich das noch über ein userReading zusammen bauen.. aber ist ja irgendwie auch nur doppelt gemoppelt...

Läuft aber super so wie es jetzt ist.
Danke.

Grüße^^
Titel: Antw:[gelöst] DOIF Zeitsteuerung mit Datum?
Beitrag von: nils_ am 07 November 2017, 14:45:19
https://wiki.fhem.de/wiki/FTUI_Widget_Datetimepicker  ::)
Titel: Antw:[gelöst] DOIF Zeitsteuerung mit Datum?
Beitrag von: daedalus0815 am 20 November 2018, 16:24:21
In meiner persönlichen 99_myUtils.pm:
######################
## Rückgabewert ist String !!  Code ist bestimmt verbesserungswürdig  :o

package main;
use strict;
use warnings;
use POSIX;

sub heute{
      my $heute = shift;
      my $mday = shift;
      my $year = shift;
      my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
      my $heute = sprintf('%02d.%02d.%04d', $mday, $mon+1, $year+1900);
      return $heute;
}


...und jetzt mein zugehöriges DOIF:

(  [06:00] and    heute() eq    "09.12.2018"   )
   (set Heizung 19.0)

DOELSEIF
(  [10:00] and    heute() eq   "09.12.2018" ) 
   (set Heizung 22.2)


....die Uhrzeit triggert den TagesTest

Titel: Antw:[gelöst] DOIF Zeitsteuerung mit Datum?
Beitrag von: Damian am 20 November 2018, 17:28:50
Mein persönlicher Favorit ohne myUtils:

DOIF ([06:00] and $ymd eq "2018-12-09") (....


oder mit Zeitintervallen

DOIF ([06:00] and $ymd ge "2018-12-01" and $ymd le "2018-12-26") (set es weihnachtet)

Die Datumsangaben können natürlich auch aus Readings kommen.
Titel: Antw:[gelöst] DOIF Zeitsteuerung mit Datum?
Beitrag von: daedalus0815 am 29 November 2018, 23:12:25
...coole Lösung Damian ,,,,Danke...so lernt man täglich was hinzu    ;)
Titel: Antw:[gelöst] DOIF Zeitsteuerung mit Datum?
Beitrag von: ch.eick am 05 November 2021, 12:48:05
EDIT: Ups, das $ymd mosert rum

2021.11.05 12:41:53.312 1: ERROR evaluating { $ymd }: Global symbol "$ymd" requires explicit package name (did you forget to declare "my $ymd"?) at (eval 331142) line 1.

Ich verwende DOIF im Perl Modus, was muss ich denn da noch machen?



Zitat von: Damian am 20 November 2018, 17:28:50
Mein persönlicher Favorit ohne myUtils:

DOIF ([06:00] and $ymd eq "2018-12-09") (....


oder mit Zeitintervallen

DOIF ([06:00] and $ymd ge "2018-12-01" and $ymd le "2018-12-26") (set es weihnachtet)

Die Datumsangaben können natürlich auch aus Readings kommen.
Vielen Dank,
das brauchte ich gerade :-)


and [[Abfall_Abfuhr:Kiaheizen_connect_time]]               ## nimmt die Zeit aus dem reading und setzt den Timer
and [Abfall_Abfuhr:Kiaheizen_connect_date] eq $ymd       ## holt das Datum aus dem reading und vergleicht mit heute


Bei folgenden Terminen im Kalender wird dann durch den Trigger im DOIF der Timer neu gesetzt und das Datum wird ja separat verglichen.
Somit schaut DOIF jeden Tag um die Timer Zeit nach, ob es an dem tag gültig ist.

Okay, den Kalendernamen sollte ich generischer benennen :-)

VG
   Christian
Titel: Antw:[gelöst] DOIF Zeitsteuerung mit Datum?
Beitrag von: Damian am 05 November 2021, 16:36:57
ich habe keine Probleme:

Internals:
   CFGFN     
   DEF        { if ($ymd eq "2021-11-05") {set_State($ymd)}}
   FUUID      61854e68-f33f-c0d4-5b3c-a6d8e11b340cf08e
   MODEL      Perl
   NAME       di_ymd
   NOTIFYDEV  global
   NR         1124
   NTFY_ORDER 50-di_ymd
   STATE      2021-11-05
   TYPE       DOIF
   VERSION    24905 2021-09-01 18:35:54
   READINGS:
     2021-11-05 16:36:02   block_01        executed
     2021-11-05 16:35:57   mode            enabled
     2021-11-05 16:36:02   state           2021-11-05
   Regex:
     accu:
     collect:
   condition:
     0           if ($ymd eq "2021-11-05") {set_State($ymd)}
   helper:
     DEVFILTER  ^global$
     NOTIFYDEV  global
     globalinit 1
     last_timer 0
     sleeptimer -1
   perlblock:
     0          block_01
   uiState:
   uiTable:
Attributes:
Titel: Antw:[gelöst] DOIF Zeitsteuerung mit Datum?
Beitrag von: ch.eick am 05 November 2021, 16:53:03
Zitat von: Damian am 05 November 2021, 16:36:57
ich habe keine Probleme:
Wo wird den $ymd gesetzt? Muss da was in die 99_myutils?
Titel: Antw:[gelöst] DOIF Zeitsteuerung mit Datum?
Beitrag von: Damian am 05 November 2021, 18:21:25
Zitat von: ch.eick am 05 November 2021, 16:53:03
Wo wird den $ymd gesetzt? Muss da was in die 99_myutils?

Das macht DOIF intern.
Titel: Antw:[gelöst] DOIF Zeitsteuerung mit Datum?
Beitrag von: ch.eick am 05 November 2021, 18:54:54
Zitat von: Damian am 05 November 2021, 18:21:25
Das macht DOIF intern.
Komisch, ich habe die gleiche Versionsnummer und et tut nicht.
Titel: Antw:[gelöst] DOIF Zeitsteuerung mit Datum?
Beitrag von: Damian am 05 November 2021, 18:57:51
Was liefert

DOIF {set_State($ymd)}

wenn du es mit set block_01 ausführst?
Titel: Antw:[gelöst] DOIF Zeitsteuerung mit Datum?
Beitrag von: ch.eick am 06 November 2021, 07:09:22
Zitat von: Damian am 05 November 2021, 18:57:51
Was liefert

DOIF {set_State($ymd)}

wenn du es mit set block_01 ausführst?
2021-11-06
Titel: Antw:[gelöst] DOIF Zeitsteuerung mit Datum?
Beitrag von: Damian am 06 November 2021, 08:46:28
Zitat von: ch.eick am 06 November 2021, 07:09:22
2021-11-06

Dann funktioniert es, wie programmiert. In uiTable gibt es allerdings kein $ymd.
Titel: Antw:[gelöst] DOIF Zeitsteuerung mit Datum?
Beitrag von: ch.eick am 06 November 2021, 10:15:07
Zitat von: Damian am 06 November 2021, 08:46:28
Dann funktioniert es, wie programmiert. In uiTable gibt es allerdings kein $ymd.
Es ist sooo lustig :-) :-) man muss nur drüber reden und schon geht's .

Und abermals Dank für Deine Geduld
     Christian