Autor Thema: DOIF mit dynamischem Wert und Mindestschaltzeit  (Gelesen 205 mal)

Offline dustbln

  • New Member
  • *
  • Beiträge: 17
DOIF mit dynamischem Wert und Mindestschaltzeit
« am: 21 April 2021, 09:22:02 »
Hi zusammen,

ich hatte die Anforderung, dass DOIF einen bestimmten Schaltzustand für eine Mindestdauer hält, selbst wenn sich die Voraussetzungen geändert haben. Hintergrund: Ich steuere einen Luftentfeuchter. Wenn der wegen der Luftfeuchtigkeit von DOIF eingeschaltet wird (cmd1), dann soll er mindestens 90 Minuten laufen, bis er wieder ausgeschaltet wird (cmd2), selbst wenn die Luftfeuchtigkeit wieder im grünen Bereich ist. Ich habe dazu nichts gefunden und das nach Gutdünken realisiert, die Lösung möchte ich gerne mit euch teilen:

attr doif_luftentfeuchter wait 0:{ getTimeLeft("doif_luftentfeuchter", "cmd", 5400) }
Dazu habe ich in der 99_MyUtils.pm eine simple Funktion hinzugefügt:

sub getTimeLeft($$$)
{
  my ($dev, $reading, $min_secs) = @_;
  my $diff = time - time_str2num(ReadingsTimestamp($dev, $reading,"2000-01-01 00:00:00"));
  my $delta = $min_secs - $diff;
  return maxNum(0, $delta);
}

Ich nutze hier den letzten Zeitpunkt, an dem ein Zweig das letzte Mal geschaltet wurde (Reading cmd). Viel Spaß damit!