Hauptmenü

DOIF: neue Zeit-Features

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

Vorheriges Thema - Nächstes Thema

Ralli

Hallo Damian,

in Sachen Zeit-Features hätte ich noch eine Idee:

Ich möchte in verschiedenen DOIFs die Abfrage einbauen, ob seit dem Zeitpunkt der letzten Aktualisierung eines Readings bis jetzt eine Zeit von mehr oder weniger als XX Sekunden vergangen ist. Zur Zeit kann ich das m.E. nur durch eine Perl-Funktion realisieren, was ich auch tue.

Toll wäre aber, wenn das direkt in der DOIF-Definition mit eingebaut werden könnte nach folgendem Beispiel (hier steht die # für das Alter des Zeitstempels in Sekunden vom aktuellen Zeitpunkt - hier dann inkl. Trigger-Auslösung):


define Aktion DOIF ([IrgendeinEvent] and [#Mein_Device] > 30) (set Lampe on)


bzw. ohne Triggerauslösung


define Aktion DOIF ([IrgendeinEvent] and [?#Mein_Device] > 30) (set Lampe on)


Damit könnte man bei alleinigem Definitionsmerkmal insgesamt auch wunderbar Aktionen anstossen, bei denen bspw. die letzte Aktualisierung eines Readings schon XX Zeiteinheiten her ist.
Gruß,
Ralli

Proxmox 8.4 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte RaspberryMatic (3.83.6.20250705) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

Damian

Zitat von: Ralli am 24 April 2015, 08:20:14
Hallo Damian,

in Sachen Zeit-Features hätte ich noch eine Idee:

Ich möchte in verschiedenen DOIFs die Abfrage einbauen, ob seit dem Zeitpunkt der letzten Aktualisierung eines Readings bis jetzt eine Zeit von mehr oder weniger als XX Sekunden vergangen ist. Zur Zeit kann ich das m.E. nur durch eine Perl-Funktion realisieren, was ich auch tue.

Toll wäre aber, wenn das direkt in der DOIF-Definition mit eingebaut werden könnte nach folgendem Beispiel (hier steht die # für das Alter des Zeitstempels in Sekunden vom aktuellen Zeitpunkt - hier dann inkl. Trigger-Auslösung):


define Aktion DOIF ([IrgendeinEvent] and [#Mein_Device] > 30) (set Lampe on)


bzw. ohne Triggerauslösung


define Aktion DOIF ([IrgendeinEvent] and [?#Mein_Device] > 30) (set Lampe on)


Damit könnte man bei alleinigem Definitionsmerkmal insgesamt auch wunderbar Aktionen anstossen, bei denen bspw. die letzte Aktualisierung eines Readings schon XX Zeiteinheiten her ist.

So etwas gibt es schon, siehe Commandref:



define Aktion DOIF ([IrgendeinEvent] and [?Mein_Device:reading:sec] > 30) (set Lampe on)


Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ralli

Gruß,
Ralli

Proxmox 8.4 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte RaspberryMatic (3.83.6.20250705) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

Toto1973

#48
DOIF ist ja inzwischen so Umfangreich geworden, das man den Überblick verliert. Außerdem macht es viele andere Module inzwischen überflüssig!

Bei meinem Problem ist wohl DOIF nicht schuld. Ich vermute, das Geofancy da der Auslöser ist. Heute ist um 9:22 Uhr der DOELSE Fall eingetreten. Und da triggert keine Zeit.
Nach dem ich den Status von Geofancy nochmal auf home gesetzt habe, hat auch die passende Bedingung wieder geschallten.
Also werde ich mal da nach forschen...
Das Problem mit der zeit bleibt allerdings doch. Ich muss quasi alle Zeitabschnitte, die sich irgendwie überschneiden könnten, umgehen. Das wird ein Spaß, das zusammen zu bauen :-P

Raspberry PI2, Rademacher DuoFern Stick, CUL, 2 x SCC,  JeeLink 868 Mhz, JeeLink 433 Mhz, 3x Magic UFO LED WiFi Controller, 4x MAX BC-RT-TRX-CyG, 2x MAX Fensterkontakt, 5x Rademacher Gurtwickler, 6x TX29DTH-it, 2x TX25-it als Helligkeitssensor, 1X HM-ES-PM, 6x Sonoff, 7x G-Homa, PIR-1000

Toto1973

#49
So sieht das dann aus, nach der Umstellung. Hier das Beispiel für das Thermostat im Bad.
([03:30:01|8] or [07:45:01|8] or [09:00:01|7] or [11:00:01] or [05:00:01|8] or [22:00:01] and [Jahreszeit] eq "Sommer" and [?Anwesend] eq "on" or [?Anwesend] eq "off") (set ba_Heizung desiredTemperature off)
DOELSEIF ([03:30|8] and [Anwesend] eq "on" and [?Jahreszeit] eq "Winter" and [?Schicht_dummy] eq "Frueh") (set ba_Heizung desiredTemperature 22)
DOELSEIF ([07:45|8] and [Anwesend] eq "on" and [?Jahreszeit] eq "Winter" and [?Schicht_dummy] eq "Mittel") (set ba_Heizung desiredTemperature 22)
DOELSEIF ([09:00|7] and [Anwesend] eq "on" and [?Jahreszeit] eq "Winter") (set ba_Heizung desiredTemperature 22)
DOELSEIF ([11:00] and [Anwesend] eq "on" and [?Jahreszeit] eq "Winter") (set ba_Heizung desiredTemperature 20)
DOELSEIF ([05:00|8] or [22:00] and [Anwesend] eq "off") (set ba_Heizung desiredTemperature 18)

So müsste ich alle Bedingungen abgedeckt haben und auch die Uhrzeiten sollten abgefangen werden...
Ergänzung:
Bei der ersten Bedingung habe ich mal wieder zu weit gedacht!
Da ja nur dann was geschalten wird, wenn eine Bedingung wahr wird, kann ich die ganzen Zeitangaben sowie die Abfrage für Anwesend weglassen oder?

Für die Erfassung, wenn Anwesend von Off auf on springt, brauche ich dann eine separate DOIF, die je nach Zeitfenster, den Thermostat steuert.
Raspberry PI2, Rademacher DuoFern Stick, CUL, 2 x SCC,  JeeLink 868 Mhz, JeeLink 433 Mhz, 3x Magic UFO LED WiFi Controller, 4x MAX BC-RT-TRX-CyG, 2x MAX Fensterkontakt, 5x Rademacher Gurtwickler, 6x TX29DTH-it, 2x TX25-it als Helligkeitssensor, 1X HM-ES-PM, 6x Sonoff, 7x G-Homa, PIR-1000

Damian

Zitat von: Toto1973 am 24 April 2015, 12:13:46
So sieht das dann aus, nach der Umstellung. Hier das Beispiel für das Thermostat im Bad.
([03:30:01|8] or [07:45:01|8] or [09:00:01|7] or [11:00:01] or [05:00:01|8] or [22:00:01] and [Jahreszeit] eq "Sommer" and [?Anwesend] eq "on" or [?Anwesend] eq "off") (set ba_Heizung desiredTemperature off)
DOELSEIF ([03:30|8] and [Anwesend] eq "on" and [?Jahreszeit] eq "Winter" and [?Schicht_dummy] eq "Frueh") (set ba_Heizung desiredTemperature 22)
DOELSEIF ([07:45|8] and [Anwesend] eq "on" and [?Jahreszeit] eq "Winter" and [?Schicht_dummy] eq "Mittel") (set ba_Heizung desiredTemperature 22)
DOELSEIF ([09:00|7] and [Anwesend] eq "on" and [?Jahreszeit] eq "Winter") (set ba_Heizung desiredTemperature 22)
DOELSEIF ([11:00] and [Anwesend] eq "on" and [?Jahreszeit] eq "Winter") (set ba_Heizung desiredTemperature 20)
DOELSEIF ([05:00|8] or [22:00] and [Anwesend] eq "off") (set ba_Heizung desiredTemperature 18)

So müsste ich alle Bedingungen abgedeckt haben und auch die Uhrzeiten sollten abgefangen werden...

Ich würde dennoch Fälle mit gleicher Temperatur jeweils zu einem Zustand zusammenfassen, damit ggf. nicht unnötig geschaltet wird:

([03:30:01|8] or [07:45:01|8] or [09:00:01|7] or [11:00:01] or [05:00:01|8] or [22:00:01] and [Jahreszeit] eq "Sommer" and [?Anwesend] eq "on" or [?Anwesend] eq "off")
   (set ba_Heizung desiredTemperature off)
DOELSEIF (([03:30|8] and [Anwesend] eq "on" and [?Jahreszeit] eq "Winter" and [?Schicht_dummy] eq "Frueh") or
([07:45|8] and [Anwesend] eq "on" and [?Jahreszeit] eq "Winter" and [?Schicht_dummy] eq "Mittel") or
([09:00|7] and [Anwesend] eq "on" and [?Jahreszeit] eq "Winter")
   (set ba_Heizung desiredTemperature 22)
DOELSEIF ([11:00] and [Anwesend] eq "on" and [?Jahreszeit] eq "Winter")
   (set ba_Heizung desiredTemperature 20)
DOELSEIF ([05:00|8] or [22:00] and [Anwesend] eq "off")
   (set ba_Heizung desiredTemperature 18)


Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Toto1973

Kurze Rückmeldung:
Nachdem ich jetzt alles so umgebaut habe, wie vorgeschlagen, funktioniert meine Heizungssteuerung endlich wie gewollt. Vielen Dank!
Manchmal kommt man selbst nicht auf die einfachsten Dinge ;-)
Raspberry PI2, Rademacher DuoFern Stick, CUL, 2 x SCC,  JeeLink 868 Mhz, JeeLink 433 Mhz, 3x Magic UFO LED WiFi Controller, 4x MAX BC-RT-TRX-CyG, 2x MAX Fensterkontakt, 5x Rademacher Gurtwickler, 6x TX29DTH-it, 2x TX25-it als Helligkeitssensor, 1X HM-ES-PM, 6x Sonoff, 7x G-Homa, PIR-1000

Bartimaus

Guten Morgen,

ist evtl. auch eine Erweiterung geplant, bei der man wie zB. die Wochentage, auch Monate setzen kann ? [06:00-12:00|123|M04M5M6M11] Also Mo+Di+Mi in April|Mai|Juni|November
Fänd ich gut bei Bewässerungsteuerung, Heizungsteuerung etc.....


LG
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Damian

Zitat von: Bartimaus am 04 Mai 2015, 09:19:54
Guten Morgen,

ist evtl. auch eine Erweiterung geplant, bei der man wie zB. die Wochentage, auch Monate setzen kann ? [06:00-12:00|123|M04M5M6M11] Also Mo+Di+Mi in April|Mai|Juni|November
Fänd ich gut bei Bewässerungsteuerung, Heizungsteuerung etc.....


LG

so nicht, aber du kannst heute schon angeben:

([06:00-12:00|123] and ($month>=4 and $month<=6)) (...

Gruß

Damian


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Bartimaus

So nutze ich es derzeit ;)
Aber je schlanker desto besser  ;D
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Damian

Zitat von: Bartimaus am 04 Mai 2015, 12:24:58
So nutze ich es derzeit ;)
Aber je schlanker desto besser  ;D

ja, mal schauen, was sonst noch auf der todo-Liste steht, wenn ich wieder Zeit habe  :)

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

satprofi

#56
Zitat von: Damian am 29 März 2015, 22:16:05
Ich habe heute das schlechte Wetter genutzt und neue Zeit-Features ins Modul eingebaut.

2. Rechnen mit Zeit: Beliebige Perlausdrücke in Kombination mit Zeitangaben im üblichen Format: HH:MM, Readings oder Stati sowie Perlfunktionen.

Beispiele:

relative Zeitangaben in Sekunden: Trigger alle 100 Sekunden

DOIF ([+100]) (set bla on)



Gruß

Damian

Hallo.
Habe da ein Problem mit genau diesem Beispiel..
Ich möchte alle 60sec. einen Dummy setzen, aber das klappt nur nach der ersten Minute, danach wird nichts mehr aktualisiert.


([+60]) ({ my $sld = ReadingsVal("SDM220M","Power__W",0);; fhem("set Xtender_Loader $sld ");;})


bei den readings steht folgendes




cmd_event timer_1                       2015-05-13 19:12:59
cmd_nr 1                                     2015-05-13 19:12:59
state cmd_1                                 2015-05-13 19:12:59
timer_1_c1   13.05.2015 19:24:59 2015-05-13 19:23:59

gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

flurin

Zitat von: satprofi am 13 Mai 2015, 19:28:07
Hallo.
Habe da ein Problem mit genau diesem Beispiel..
Ich möchte alle 60sec. einen Dummy setzen, aber das klappt nur nach der ersten Minute, danach wird nichts mehr aktualisiert.


([+60]) (set Xtender_Loader [SDM220M:Power__W:d])


bei den readings steht folgendes




cmd_event timer_1                       2015-05-13 19:12:59
cmd_nr 1                                     2015-05-13 19:12:59
state cmd_1                                 2015-05-13 19:12:59
timer_1_c1   13.05.2015 19:24:59 2015-05-13 19:23:59



Ist do always gesetzt?


attr .... do always


satprofi

Danke, das wars!
Wusste ich nicht.
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

Puschel74

Wozu hat sich Damian die Mühe mit einer deutschen commandref gemacht wenn sie sowieso nicht gelesen wird  ???
Wozu gibt es im Forum unzählige Beiträge wenn sie auch nicht gelesen werden  ???
Zitat von: satprofi am 13 Mai 2015, 19:57:06
Danke, das wars!
Wusste ich nicht.
Klar, die logische Entschuldigung für ... schlechte Doku nehm ich mal an.
Aber ok, die Hilfe im Forum nimmt einem das suchen ab und kostet nichts.
Ist nur fraglich wie lange sich Leute noch einbringen wenn es doch einfacher ist im Forum zu posten.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.