Variable für Zeit bei at +*

Begonnen von duebelpapst, 06 August 2015, 20:10:55

Vorheriges Thema - Nächstes Thema

duebelpapst

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

jensb

#1
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
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

duebelpapst

Hi
Nein Pool.Interval ist der dummy dessen state die sekunden enthalten. Genau wie Pool.Zeit.

Gesendet von meinem LG-D802 mit Tapatalk


jensb

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


FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

duebelpapst

Danke erst mal. Werde es morgen checken.

Gesendet von meinem LG-D802 mit Tapatalk


igami

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
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED