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^^
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.
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^^
Was meinst Du mit "einfach"?
Gib mal ein Beispiel.
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^^
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
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^^
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
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^^
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
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
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
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^^
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
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^^
https://wiki.fhem.de/wiki/FTUI_Widget_Datetimepicker ::)
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
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.
...coole Lösung Damian ,,,,Danke...so lernt man täglich was hinzu ;)
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
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:
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?
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.
Zitat von: Damian am 05 November 2021, 18:21:25
Das macht DOIF intern.
Komisch, ich habe die gleiche Versionsnummer und et tut nicht.
Was liefert
DOIF {set_State($ymd)}
wenn du es mit set block_01 ausführst?
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
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.
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