Hauptmenü

DOIF: neue Zeit-Features

Begonnen von Damian, 29 März 2015, 22:16:05

Vorheriges Thema - Nächstes Thema

andies

Oh Mist, das hatte ich doch gerade gelesen mit dem do always und dem Streit darüber...

@damian: Könnte man das nicht immer setzen? Oder spricht da etwas dagegen?
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

kumue

Zitat von: andies am 18 Dezember 2017, 14:13:54
Oh Mist, das hatte ich doch gerade gelesen mit dem do always und dem Streit darüber...

@damian: Könnte man das nicht immer setzen? Oder spricht da etwas dagegen?

wenn all deine DOIFs z.B. mit DO_ anfangen, könntest du auf global defined triggern...
define no1 notify global:DEFINED.DO_.* attr $EVTPART1 do always

Wasserwerk33

Hallo Leute habe mir die Schreibweise von der ersten Seite genommen. Aber glaube nicht das ich es so richtig geschrieben habe. Den er sagt ich habe auch einen Fehler. Denke auch in den Klammern. Aber welche sind den falsch oder ejar zu viel.

([?20:00-03:30]
and
[avr:power] eq "off")
(set Erdgeschoss_Licht off )
DOELSEIF
([([22:30]+int(rand(1800))) |Mo Di Mi Do So]) or ([([22:20]+int(rand(7200)))] |Fr Sa])
and
[Eltern] eq "absend"
and
[Babysitter] eq "weg")
(set Erdgeschoss_Licht off )

Damian

([?20:00-03:30]
and
[avr:power] eq "off")
(set Erdgeschoss_Licht off )
DOELSEIF
(([([22:30]+int(rand(1800))) |Mo Di Mi Do So] or [([22:20]+int(rand(7200)))|Fr Sa])
and
[Eltern] eq "absend"
and
[Babysitter] eq "weg")
(set Erdgeschoss_Licht off )
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Pfriemler

Je nachdem woher der Wert für [Eltern] kommt, könnte es sein, dass sie nie "absend" sind...  ;)
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Wasserwerk33

@Damian
Danke für den Code werde ihn mal ausprobieren.

@Pfriemler

Sind unsere Handys die über die Fritzbox laufen und in einer Strucrure untergebracht sind. Das hat eigentlich immer funktoniert. Wieso meinst du den das das nicht funkoniert?

Pfriemler

Structures bekommen die Werte in der Regel anderweitig zugeliefert. Und abwesende Geräte sind i.d.R. absent, es sei denn Du hast selbst eine Umbenennung eingebaut
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Wasserwerk33

#127
So habe es nochmal probiert habe das mit den Eltern auch rausgenommen und habe es durch mich und Frau auf present geändert.
Es schaltet nun aber dauerhaft obwohl wir zuhause sind und AVR:power on ist.

Internals:
   CFGFN     
   DEF        ([?20:00-03:30]
and
[avr:power] eq "off" and [Stefan] eq "present" or [Christin] eq "present")
(set Erdgeschoss_Licht off )
DOELSEIF
(([([22:00]+int(rand(1800))) |Mo Di Mi Do So]) or ([([22:20]+int(rand(7200))) |Fr Sa])
and
[Stefan] eq "absent" and [Christin] eq "absent"
and
[avr:power] eq "off")
(set Erdgeschoss_Licht off )
   FUUID      5ec6df24-f33f-faf7-3710-eae47bcededb8c02
   MODEL      FHEM
   NAME       Licht_steuerung
   NOTIFYDEV  global,Stefan,Christin,avr
   NR         16776
   NTFY_ORDER 50-Licht_steuerung
   STATE      cmd_1
   TYPE       DOIF
   VERSION    20811 2019-12-22 17:45:08
   READINGS:
     2020-05-24 22:45:12   Device          Christin
     2020-05-24 22:44:09   cmd             1
     2020-05-24 22:44:09   cmd_event       Stefan
     2020-05-24 22:44:09   cmd_nr          1
     2020-05-24 22:45:12   e_Christin_STATE present
     2020-05-24 22:45:09   e_Stefan_STATE  present
     2020-05-24 22:43:58   mode            enabled
     2020-05-24 22:44:09   state           cmd_1
     2020-05-24 22:43:58   timer_01_c01    25.05.2020 20:00:00
     2020-05-24 22:43:58   timer_02_c01    25.05.2020 03:30:00
     2020-05-24 22:43:58   timer_03_c02    25.05.2020 22:26:12|MoDiMiDoSo
     2020-05-24 22:43:58   timer_04_c02    24.05.2020 22:52:32|FrSa
   Regex:
     accu:
     cond:
       Christin:
         0:
           &STATE     ^Christin$
         1:
           &STATE     ^Christin$
       Stefan:
         0:
           &STATE     ^Stefan$
         1:
           &STATE     ^Stefan$
       avr:
         0:
           power      ^avr$:^power:
         1:
           power      ^avr$:^power:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::DOIF_time($hash,0,1,$wday,$hms)  and  ::ReadingValDoIf($hash,'avr','power') eq "off" and ::InternalDoIf($hash,'Stefan','STATE') eq "present" or ::InternalDoIf($hash,'Christin','STATE') eq "present"
     1          (::DOIF_time_once($hash,2,$wday,"MoDiMiDoSo")) or (::DOIF_time_once($hash,3,$wday,"FrSa"))  and  ::InternalDoIf($hash,'Stefan','STATE') eq "absent" and ::InternalDoIf($hash,'Christin','STATE') eq "absent"  and  ::ReadingValDoIf($hash,'avr','power') eq "off"
   days:
     2          MoDiMiDoSo
     3          FrSa
   do:
     0:
       0          set Erdgeschoss_Licht off
     1:
       0          set Erdgeschoss_Licht off
     2:
   helper:
     DEVFILTER  ^global$|^Stefan$|^avr$|^Christin$
     NOTIFYDEV  global|Stefan|avr|Christin
     event      present,presence: present
     globalinit 1
     last_timer 4
     sleeptimer -1
     timerdev   Christin
     timerevent present,presence: present
     triggerDev Christin
     timerevents:
       present
       presence: present
     timereventsState:
       state: present
       presence: present
     triggerEvents:
       present
       presence: present
     triggerEventsState:
       state: present
       presence: present
   internals:
     all         Stefan:STATE Christin:STATE
   interval:
     0          -1
     1          0
   intervalfunc:
   localtime:
     0          1590429600
     1          1590370200
     2          1590438372
     3          1590353552
   readings:
     all         avr:power
   realtime:
     0          20:00:00
     1          03:30:00
     2          22:26:12
     3          22:52:32
   time:
     0          20:00:00
     1          03:30:00
     2          ([22:00]+int(rand(1800)))
     3          ([22:20]+int(rand(7200)))
   timeCond:
     0          0
     1          0
     2          1
     3          1
   timer:
     0          0
     1          0
     2          0
     3          0
   timers:
     1           2  3
   trigger:
   triggertime:
     1590353552:
       localtime  1590353552
       hash:
     1590370200:
       localtime  1590370200
       hash:
     1590429600:
       localtime  1590429600
       hash:
     1590438372:
       localtime  1590438372
       hash:
   uiState:
   uiTable:
Attributes:
   room       Licht


Irgendwo habe ich einen schreibfehler? Oder nimmt der einen wert irgendwo falsch??
Selbst wenn ich Set checkall ausführe. Er springt dann in CMD1 da dürfte er doch eigentlich nicht reinspringen.

danke

amenomade

#128
([?20:00-03:30] and [avr:power] eq "off" and [Stefan] eq "present" or [Christin] eq "present")


and or Vorrang.  Was Du geschrieben hast, ist wie:
(
([?20:00-03:30] and [avr:power] eq "off" and [Stefan] eq "present")
or [Christin] eq "present"
)


Jedes mal wenn Christin "present" meldet, ist die Bedingung 1 wahr, egal den Rest.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Wasserwerk33

@ amenomade
Ich habe es geändert wie du es mir geschrieben hast. Leider nicht geklappt. Und ja du hast recht er meldet die ganze Zeit Christin present.
Und schaltet daher.

amenomade

Ich habe überhaupt keine Lösung geschrieben. Ich habe nur deinen Fehler anders dargestellt, um besser zu zeigen, warum es ein Fehler ist. Beide "code" Abschnitte in meinem vorherigen Post sind absolut gleichwertig und führen zum gleichen Ergebnis.

Natürlich musst Du die Klammern anders setzen, damit es funktioniert:
xxx and xxx and (xxx or xxx)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

cRossi

Zitat von: Damian am 29 März 2015, 22:16:05



define Zeit dummy
set Zeit 10:00

DOIF ([([Zeit]+int(rand(600)))]) (set bla on)


oder relative Angaben: hier wird alle 5 Minuten getriggert

set Zeit 00:01

DOIF ([+([Zeit]+[00:04])]) (set bla on)


Hier eine Kombination mit Zeitintervallen: Hier von 09:55 bis 10:05 am Freitag

set Zeit 10:00

DOIF ([([Zeit]-[00:05]) - ([Zeit]+[00:05])]|5]) (set bla on)



Man kann beliebig Zeitangaben mit Perlfunktionen und Readings bzw. Stati kombinierten. Da auch hier der Perlinterpreter zum Zuge kommt, sind die Möglichkeiten Zeit zu berechnen unbegrenzt.


Ich habe versucht das anzuwenden:


define Wecker dummy
setreading Wecker alarm 05:45:00

([[Wecker:alarm]|AT]
and [?[Wecker:alarm]-{sunrise_abs(1800)}]) (
set blabla on
)


aber das funktioniert leider nicht richtig


timer_01_c01    25.06.2020 05:45:00|AT
timer_02_c01    24.06.2020 05:45:00


Der Timer aus dem reading bleibt immer eine Tag in der Vergangenheit hängen, während sunrise mit dem neuen Datum rechnet - somit ist das Intervall [?[Wecker:alarm]-{sunrise_abs(1800)}] immer wahr.  :(

Wie funktioniert das richtig...?


Danke und Gruß
cRossi

RasPi 3B+
HM-MOD-RPI-PCB
FHEM

Damian

Das ist alles ok, der Trigger kommt jeden Tag, das Setzen beider Grenzen bei Zeitintervallen wird immer erst am Ende des Zeitintervalls gesetzt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

cRossi

Hmm, ist irgendwie nicht ganz mein Verständnis, dass hier das Datum in der Zeitberechnung enthalten ist - denn wenn ich anstelle des Readings die Zeit "05:45" direkt eingebe funktioniert das Spiel ja komischer Weise richtig...  ???

Wie bekomme ich das denn dann hin das der Wecker nur vor Sonnenaufgang angeht und zwar immer zu einer bestimmten Zeit die ich über ein Reading ändern kann?

Danke und Gruß
cRossi
RasPi 3B+
HM-MOD-RPI-PCB
FHEM

Damian

Zitat von: cRossi am 26 Juni 2020, 10:29:35
Hmm, ist irgendwie nicht ganz mein Verständnis, dass hier das Datum in der Zeitberechnung enthalten ist - denn wenn ich anstelle des Readings die Zeit "05:45" direkt eingebe funktioniert das Spiel ja komischer Weise richtig...  ???

Wie bekomme ich das denn dann hin das der Wecker nur vor Sonnenaufgang angeht und zwar immer zu einer bestimmten Zeit die ich über ein Reading ändern kann?

Danke und Gruß
cRossi

Das, was ich gesagt habe, gilt nur für Zeitintervalle. Beim normalen Zeittrigger wird die neue Zeit zum Triggerzeitpunkt berechnet.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF