[gelöst] DOIF Zeitsteuerung mit Datum?

Begonnen von roman1528, 29 Oktober 2017, 20:21:47

Vorheriges Thema - Nächstes Thema

daedalus0815

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


Damian

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

daedalus0815

...coole Lösung Damian ,,,,Danke...so lernt man täglich was hinzu    ;)

ch.eick

#19
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
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Damian

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

ch.eick

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?
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Damian

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

ch.eick

Zitat von: Damian am 05 November 2021, 18:21:25
Das macht DOIF intern.
Komisch, ich habe die gleiche Versionsnummer und et tut nicht.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Damian

Was liefert

DOIF {set_State($ymd)}

wenn du es mit set block_01 ausführst?
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ch.eick

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
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Damian

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

ch.eick

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
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick