ZitatGeht diese Auswertung so einfach wie im doif
Nein.
Zitatmuss ich da selber alles abfragen?
Ja.
Welches Problem möchtest Du auf diese Weise lösen??
Verstehe ich Dich richtig, Du hast schon eine Steuerung als Perl-Funktionen und möchtest diese erweitern mit
Zitatprüfen, ob die aktuelle Zeit und der Tag im angegebenen Bereich ist und dann die Heizung dementsprechend steuern.
Es soll aber den Temperaturwert für diesen Zeitraum bei der Auswertung verwenden.
, dabei möchtest Du die Zeitspanne in DOIF Syntax übergeben also: [<Beginn>-<Start>|<Wochentage>].
Wenn das DOIF-Modul geladen ist, dann sind im DOIF definierten Funktionen öffentlich, diese Funktionen kannst Du nutzen, z.B. "ReadingSecDoIf($$)" um die Zeit seit der letzten Änderung eines Readings zu ermitteln.
Wenn Du jedoch ohnehin gute Perl-Kenntnisse hast, dann kannst Du das ebenso gut mit den Perlfunktionen time, timelocal, und localtime lösen. Der Vergleich von Zeitpunkten ist im Sekundenformat einfacher als im HH:MM-Format.
ZitatDamit ich nicht die ganze Logik in einem doif unterbringen muss
Das ist der Zweck des DOIF, es dürfen auch mehrere sein.
ZitatEin at ruft dann regelmässig die erste Funktion auf. Dort sind alle Heizungen registriert ...
Das Polling ist eigentlich kontraproduktiv zu FHEM, da Du, je nach Umfang und Art Deiner Funktionen FHEM blockieren könntest (Schleifen, Warten, ...).
FHEM arbeitet mit Ereignissen und darauf ist auch DOIF abgestimmt.
([10:00-20:00]) ist nur wahr, wenn die aktuelle Zeit zwischen 10 und 20 Uhr liegt. Um 10 erzeugt ein Timer ein Ereignis und setzt die Bedingung auf wahr und um 20 Uhr erzeugt ein weiterer Timer ein Ereignis, das die Bedingung unwahr werden lässt.
Über längere Zeiträume musst Du das ganze Datum einbeziehen:
([[Start_du:hm]] and ([Start_du:Y] == $year) and ([Start_du:M] == $month) and ([Start_du:D] == $mday))
(({Log 1, "Start"}))
DOELSEIF ([Stop_du:hm]] and ([Stop_du:Y] == $year) and ([Stop_du:M] == $month) and ([Stop_du:D] == $mday) or [Start_du] or [Stop_du])
(({Log 1, "Stop"}))
Start_du, Stop_du sind 2 Dummys mit den Readings
hm im Format HH:MM
Y das Jahr im passenden Format zu $year
M der Monat " " " " $month
D der Tag " " " " $mday
Die Dummys kannst Du komfortabel im Frontend ändern und musst es nicht in einer Registrierfunktion der 98_myUtils.pm.
mit dem Attribut cmdState 1|0 zeigt der Status des DOIF ob die aktuelle Zeit innerhalb der durch die beiden Dummys bestimmten Zeispanne liegt. Das kannst Du auch in einer Perl-Funktion abfragen, oder in einem anderen DOIF.
Eine feste Zeitspanne zur Temperaturabsenkung hat allerdings nur einen geringen Automatisierungsgrad, da sie durch Benutzereingriff festgelegt werden muss und unflexibel ist.
Besser ist es eine Anwesendheitsbestimmung zu nutzen. Im einfachsten Fall mit Taster: der Letzte schaltet auf abwesend, der Erste auf anwesend oder mit Geofencing, Bluetooth Tag, LAN-Ping, intelligentem Schlüsselbrett, usw.
Ich hoffe, ich habe den Kern Deiner Frage irgendwie gestreift und es hiflt ein wenig.