(ERLEDIGT) Advent==0 wird nicht ständig überwacht...

Begonnen von misux, 21 Dezember 2021, 06:03:13

Vorheriges Thema - Nächstes Thema

misux

Hi!

Ich habe ein Weihnachten DOIF welches mir einen Dummy ein oder ausschaltet wenn Advent ist...

Das DOIF ist relativ einfach gestrickt, allerdings funktioniert es nur zum Adventzeitpunkt oder wenn ich checkall durchführe... Wenn ich aber mal Fhem neustarte oder der Adventzeitpunkt , warum auch immer verpasst wurde schaltet das doif nicht...
Hat jemand eine Idee wie dieses Advent==0 immer überwachen lassen kann? Also , ich meine quasi so wie ein Lichtsensor der den Status immer überprüft...

Dankeschön!

Hier das List:
nternals:
   DEF        (Advent==0) (set Weihnachten off)
DOELSEIF
(Advent==1) (set Weihnachten on)
   FUUID      603dea9d-f33f-e7ed-c4ec-596ed337d2ab6877
   MODEL      FHEM
   NAME       DOIFWeihnachten
   NOTIFYDEV  global
   NR         158
   NTFY_ORDER 50-DOIFWeihnachten
   STATE      cmd_2
   TYPE       DOIF
   VERSION    24905 2021-09-01 18:35:54
   READINGS:
     2021-12-21 05:35:32   cmd             2
     2021-12-21 05:35:32   cmd_event       DOIFWeihnachten
     2021-12-21 05:35:32   cmd_nr          2
     2021-03-02 08:36:40   mode            enabled
     2021-12-21 05:35:32   state           cmd_2
   Regex:
     accu:
     collect:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          Advent==0
     1          Advent==1
   do:
     0:
       0          set Weihnachten off
     1:
       0          set Weihnachten on
     2:
   helper:
     DEVFILTER  ^global$
     NOTIFYDEV  global
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   
     timerevent
     timerevents
     timereventsState
     triggerDev
   perlblock:
   uiState:
   uiTable:
Attributes:
   do         always
   room       DOIF


Die Berechnung ob Advent ist oder nciht übernimmt ein code im 99myUtils:

######## Adventberechnung 1. Advent ############

use strict;
use warnings;
use POSIX;
use HTTP::Date;

sub Advent() {
my ($Sekunde, $Minute, $Stunde, $Monatstag, $Monat, $Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
    my $adv=0;
    $Jahr+=1900;
    if($Monat<1) {
     if ($Monatstag<7) {$adv=1;}
    }
else
{      my $time = str2time("$Jahr-12-25");
  my $wday = (localtime($time))[6];
  $wday = $wday ? $wday : 7;
  $time -= ($wday+22)*86400;
  $adv=1 if ($time<time)
}
    return $adv;
}






1;

rabehd

Auch funktionierende Lösungen kann man hinterfragen.

misux

Ich bin mir nicht sicher ob er ihn verliert oder einfach nicht checkt das der auf ==1 steht...

jedenfalls musste ich einen checkall durchführen obwohl ==1 schon seit wochen feststeht...

Verstehe es nicht wirklich...

Damian

Wer soll denn dein DOIF triggern ?

Advent ist eine Routine, die macht das bestimmt nicht. ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

misux

 :o hmm.... das ist ja mal ne Aussage... irgendwie kan mir das nicht in den Sinn...

Also am besten einen Dummy erstellen den diese Advent routine schaltet und dann einen DOIFF auf das dummy triggern... Klingt nach einem Plan! 8)

Damian

Zitat von: misux am 21 Dezember 2021, 08:00:28
:o hmm.... das ist ja mal ne Aussage... irgendwie kan mir das nicht in den Sinn...

Also am besten einen Dummy erstellen den diese Advent routine schaltet und dann einen DOIFF auf das dummy triggern... Klingt nach einem Plan! 8)

Leider nein. Dann hast du immer noch keinen Trigger.

Bevor wir hier noch lange diskutieren. Du nimmst einfach mit and einen Zeittrigger in deine DOIF-Definition mit auf.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rabehd

Vielleicht beschreibst Du mal was überhaupt der UseCase ist.

Wofür brauchst Du das DOIF, den Dummy?


Ich habe auch einen Dummy Weihnachtszeit, der wirdauf ja und am Ende auf nein geschaltet (auch überein DOIF).
Seine Änderung aktiviert, bzw. deaktiviert Routinen.
Auch funktionierende Lösungen kann man hinterfragen.

misux

Hmm.. ja, irgendwie war es etwas dumm von mir gedacht...

Ich wollte damit eigentlich meinen Weihnachtsbaum steuern.. Problem ist nur das dieser anunterschiedlichen Zeiten aufgestellt wird... naja, habe es jetzt anders gelöst... Habe mir einfach nen Dummy erstellt (Weihnachten) den ich manuell einschalte sobald der Weihnachtsbaum steht. Darauf reagiert dan ein DOIF und tut seinen Dienst. Die Advent==0 o.1 steuert dann meine Weihnachtsbeleuchtung am Haus. Da ist ja der Anfangs- und End- Zeitpunkt immer gleich.

Trotzdem Vielen Dank!

rabehd

Zitat von: misux am 23 Dezember 2021, 05:14:41
Hmm.. ja, irgendwie war es etwas dumm von mir gedacht...

Ich wollte damit eigentlich meinen Weihnachtsbaum steuern.. Problem ist nur das dieser anunterschiedlichen Zeiten aufgestellt wird... naja, habe es jetzt anders gelöst... Habe mir einfach nen Dummy erstellt (Weihnachten) den ich manuell einschalte sobald der Weihnachtsbaum steht. Darauf reagiert dan ein DOIF und tut seinen Dienst. Die Advent==0 o.1 steuert dann meine Weihnachtsbeleuchtung am Haus. Da ist ja der Anfangs- und End- Zeitpunkt immer gleich.

Trotzdem Vielen Dank!

Warum nutzt Du das Attribut "disable" des DOIF nicht direkt?
Auch funktionierende Lösungen kann man hinterfragen.

misux

Denke wegen der einfachen übersichtigkeit. Habe den Dummy auch im FTUI eingebunden... Ja würde auch ohne dummy gehen aber so ist es auf einen Schlag sichtbar...