FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: juemuc am 31 Dezember 2017, 16:47:46

Titel: [GELÖST] Doif schaltet nicht wie gewünscht
Beitrag von: juemuc am 31 Dezember 2017, 16:47:46
Hallo,

ich habe ein doif zum Schalten einer Lampe definiert. Hierbei soll die Lampe in Abhängigkeit vom Sonnenuntergang schalten, allerdings nur, wenn eine bestimmte Uhrzeit nicht überschritten wird. Aktuell schaltet aber die Lampe bei der definierten Uhrzeit, wenn diese vor dem Sonnenuntergang liegt.
Hier meine Definitionen:
doif:
defmod Vogellampe_an_DOIF DOIF ([{sunset("REAL",0,"","[Vogellampe_aus_UZ]")}]) \
(set FBDECT_FB_08761_0234719:FILTER=state=off on;;\
set Vogellampe_an [Vogellampe_an_DOIF:timer_01_c01])
attr Vogellampe_an_DOIF do always
attr Vogellampe_an_DOIF room TEST

und der dummy
defmod Vogellampe_aus_UZ dummy
attr Vogellampe_aus_UZ devStateStyle style="text-align:right"
attr Vogellampe_aus_UZ group Schaltzeitpunkte
attr Vogellampe_aus_UZ icon off-for-timer
attr Vogellampe_aus_UZ room Schaltzentrale,Statuszentrale,TEST
attr Vogellampe_aus_UZ setList state:time
attr Vogellampe_aus_UZ webCmd state

Aktueller Sonnenuntergang ist 16:23 Uhr. Wenn ich den Dummy auf 16:00 Uhr stelle, schaltet die Lampe um 16:00 Uhr  :( (sichtbar am Dummy Vogellampe_an).
Wo liegt mein Fehler?
Viele Grüße und allen einen guten Rutsch
Jürgen
Titel: Antw:Doif schaltet nicht wie gewünscht
Beitrag von: Per am 31 Dezember 2017, 17:49:59
Schau dir mal die Funktion sunset an. Du sagt damit, dass die Lampe spätestens zu "Vogellampe_aus_UZ" ausgeschaltet werden soll. Genau das macht das DOIF.
Für das von dir gewünsche Ergebnis musst du sunset mit time < 16:00 und-Verknüpfen.

Nebenbei: innerhalb des DOIF ist das Komma das Trennzeichen zwischen Befehlen, nicht das (doppelte) Semikolon.
Titel: Antw:Doif schaltet nicht wie gewünscht
Beitrag von: juemuc am 01 Januar 2018, 17:42:44
Erst einmal allen ein gutes Neues Jahr.

Danke für Deinen Hinweise. Ich habe das DOIF nun mit einer IF-Abfrage ergänzt. Dies war für mich besser als ein on-till, da ich so für einen Anzeige-dummy unterschiedliche Werte setzen kann.
defmod Vogellampe_an_DOIF DOIF ([[Sonnenuntergang_fuer_Vogellampe]])\
(IF ([Uhrzeit] lt [Vogellampe_aus_UZ])\
  (set FBDECT_FB_08761_0234719:FILTER=state=off on,\
   set Vogellampe_an [Vogellampe_an_DOIF:timer_01_c01])\
ELSE\
  (set Vogellampe_an "nicht aktiv!"))


Jetzt würde ich gerne noch den Vergleichswert "Vogellampe_aus_UZ" für diese Abfrage um 30 Minuten reduzieren.
(IF ([Uhrzeit] lt [Vogellampe_aus_UZ]-00:30) funktioniert leider nicht. Ich benötige noch einen Tipp.

Viele Grüße
Jürgen
Titel: Antw:Doif schaltet nicht wie gewünscht
Beitrag von: Per am 01 Januar 2018, 18:06:15
Auch wenn der Fehler tiefer liegen dürfte: lt ist für Strings, < für Zahlen.
Titel: Antw:Doif schaltet nicht wie gewünscht
Beitrag von: Ellert am 01 Januar 2018, 18:25:36
[Vogellampe_aus_UZ]-00:30 das ist keine gültige Syntax im IF-Befehl, da geht nur, was in de Commandref beschrieben ist. Die Berechnung einer Uhrzeit funktioniert nicht in der HH:MM-Darstellung, das müsstest Du in Sekunden umrechnen.
Titel: Antw:Doif schaltet nicht wie gewünscht
Beitrag von: juemuc am 01 Januar 2018, 18:57:03
Zitat von: Per am 01 Januar 2018, 18:06:15
Auch wenn der Fehler tiefer liegen dürfte: lt ist für Strings, < für Zahlen.
Den Hinweis verstehe ich nicht. Die Uhrzeit besteht aus einem String hh:mm  8) bei "<" im IF gibt es einen Perl-Hinweis  ;D
Viele Grüße
Jürgen
Titel: Antw:Doif schaltet nicht wie gewünscht
Beitrag von: juemuc am 01 Januar 2018, 18:58:25
Zitat von: Ellert am 01 Januar 2018, 18:25:36
[Vogellampe_aus_UZ]-00:30 das ist keine gültige Syntax im IF-Befehl, da geht nur, was in de Commandref beschrieben ist. Die Berechnung einer Uhrzeit funktioniert nicht in der HH:MM-Darstellung, das müsstest Du in Sekunden umrechnen.
ok. Danke
Das hatte ich befürchtet. Dann werde ich wohl erst mit einer Variablen den Wert ermitteln müssen.

Und hier das neue DOIF, falls jemand vor der gleichen Problematik steht.
defmod Vogellampe_an_DOIF DOIF ([[Sonnenuntergang_fuer_Vogellampe]]) \
({my $Time = Value("Vogellampe_aus_UZ");;\
  my  $Offset = -30;;\
  my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime;; \
  my $Timenum = mktime(0,substr($Time,3,2),substr($Time,0,2),$mday,$month,$year,$wday,$yday,$isdst);; \
  my $NewTime = $Timenum + $Offset * 60;;\
  my ($Psec,$Pmin,$Phour,$Pmday,$Pmonth,$Pyear,$Pwday,$Pyday,$Pisdst) = localtime($NewTime);;\
  my $NewTimeHM = $Phour.':'.$Pmin;;\
  my $Timeakt = Value("Uhrzeit");;\
  if ($Timeakt lt $NewTimeHM)\
   {fhem("set FBDECT_FB_08761_0234719:FILTER=state=off on");;\
    fhem("set Vogellampe_an [Vogellampe_an_DOIF:timer_01_c01]")}\
  else\
   {fhem("set Vogellampe_an 'nicht aktiv!'")}})


Die Berechnung der Zeit erfolgte in Anlehnung an
https://forum.fhem.de/index.php/topic,9083.msg49235.html#msg49235 (https://forum.fhem.de/index.php/topic,9083.msg49235.html#msg49235)

Viele Grüße
Jürgen