Hallo,
ich suche schon seit Tagen nach einer Lösung, komme aber nicht weiter.
Ich benutze ein paar dummys um meine Poolpumpe zusteuern.
Wenn Pool.Pumpe.Schalter on ist und die Uhrzeit zwischen 11 und 21 Uhr liegt soll die Pumpe sich für die Pool.Zeit (hier in Sekunden) alle x Sekunden, die in Pool.Interval, übergeben werden einschalten.
Wenn ich folgenden Code in der DEF eingebe läuft das Ganze
+*{"00:00:".Value("Pool.Interval")}
{my $hm = Value("Pool.Zeit");;
fhem ("set Pool.Pumpe on-for-timer ".$hm)
if($hour>=11 && $hour<21 && (Value("Pool.Pumpe.Schalter") eq "on"))}
ich kann die Zeiten auch ändern.
Sobald ich rereadcfg mache oder die fhem.cfg öffne und dann speicher kommt folgende Fehlermeldung
the at function ""00:00:".Value("Pool.Interval")" must return a timespec and not 00:00:???.
Please define PumpeStart first
Please define PumpeStart first
und Pumpestart samt DEF ist verschwunden.
Ich habe auch schon DOIF probiert, aber da komme ich nicht dahinter wie das mit dem ausführen alle x Sekunden geht.
Gruß
Stefan
Hallo Stefan
wenn dein Device nicht "Pool.Interval" heißt sondern nur "Pool", dann ist Value() nicht die richtige Funktion, da sie immer den State eines Devices liefert und auch nur dann, wenn für den String ein Device existiert.
Nimm statt dessen ReadingsVal("Pool", "Interval", "00") und dann könnte es schon gehen.
LG, Jens
Hi
Nein Pool.Interval ist der dummy dessen state die sekunden enthalten. Genau wie Pool.Zeit.
Gesendet von meinem LG-D802 mit Tapatalk
Hallo Stefan,
also dein Device heißt wirklich "Pool.Interval".
Ich vermute, es passiert hier folgendes: Wenn du das DEF vom at über die Weboberfläche verwendest, ist der Dummy "Pool.Interval" schon initialisiert, also funktioniert auch Value() und liefert eine Zahl. Startest du FHEM aber neu, wird das at möglicherweise vor dem Dummy "Pool.Interval" initialisiert (schau dir dazu das interne Reading "NR" an) und dann liefert Value() nichts und wegen des vorgestellten ":" ist das dann ein Fehler.
Probier mal folgendes:
+*{"00:00:".length(Value("Pool.Interval"))>0?Value("Pool.Interval"):"00"} ...
Damit wird der Default "00" verwendet, wenn aus Value() nichts heraus kommt.
LG, Jens
Danke erst mal. Werde es morgen checken.
Gesendet von meinem LG-D802 mit Tapatalk
Hallo Stefan,
wahrscheinlich ist DOIF das was du brauchst, dass kann Zeitangaben direkt aus Readings Verwenden. Einige Beispiele dazu stehen in der deutschen Commandref.
Grüße
igami