Specified timeout too large, max is 15360

Begonnen von Bartimaus, 31 März 2014, 07:35:37

Vorheriges Thema - Nächstes Thema

Bartimaus

Guten Morgen,
habe gerade gesehen, das ein "on-for-timer" per default maximal bis 15360s geht. Wie kann man das verlängern ? Im Sommer bräuchte ich auch schonmal 36.000s.... für meine Poolsteuerung..

LG
LG
B.


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

betateilchen

nur mit einem at, in dem Du die Ausschaltzeit festlegst. Die Begrenzung des on-for-timer ist hardwarebedingt und kommt nicht aus fhem.

Alternativ kannst Du versuchen, ob Du mit on-till weiterkommst, damit kannst Du auch die Ausschaltzeit angeben.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Bartimaus

Ok, danke.  Die 15360s sind also die 4,5h die der interne Timer des Fs20-Device.
Gut, muss ich versuchen die Abschaltuhrzeit zu berechnen...
LG
B.


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

betateilchen

#3
Zitat von: Bartimaus am 31 März 2014, 09:33:51
Gut, muss ich versuchen die Abschaltuhrzeit zu berechnen...

Ich würde lieber den Weg über at gehen, dann umgehst Du das Problem, dass Du Tageswechsel berücksichtigen musst.


sub secs2hms($) {
my ($ts) = @_;
my $h = int($ts/3600); $ts -= $h * 3600;
my $m = int($ts/60);   $ts -= $m * 60;
my $s = int($ts/60);
return sprintf("%02s:%02s:%02s", $h,$m,$s);
}


Wenn Du das in Deine 99_myUtils einbaust, kannst Du mit secs2hms Sekunden in hh:mm:ss umwandeln.
Das kannst Du dann in einer at Definition einbauen:

define at_test at +{secs2hms 36000} {schalte-die-poolpumpe-aus}

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Bartimaus

Danke, das ist mal eine Knobelaufgabe. An anderer Stelle hat mir Damian schon einen alternativen Lösungsweg aufgezeigt, der geht über einen verschachtelten at/IF Befehl. Habe ich auch umgesetzt, funktioniert auch schon. Über die my_Utils ist es allerdings eleganter.
LG
B.


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

betateilchen

Zitat von: Bartimaus am 31 März 2014, 13:39:21Danke, das ist mal eine Knobelaufgabe.

wo ist da eine Knobelaufgabe?

Zitat von: Bartimaus am 31 März 2014, 13:39:21der geht über einen verschachtelten at/IF Befehl.

In meiner fhem-Installtion gibt es eine dreistellige Anzahl von notify und at Definitionen, aber den IF-Befehl habe ich noch nie gebraucht. Meistens ist eine Lösung recht einfach zu finden, wenn man VOR dem Ausprobieren einfach mal strukturiert über die Aufgabenstellung nachdenkt.

Und alles was mehr als "einfaches" fhem-Kommando ist, kommt bei mir immer als Funktion in die myUtils. Das ist viel leichter zu handhaben und sehr viel übersichtlicher zu bearbeiten.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Bartimaus

wo ist da eine Knobelaufgabe?
Überall, habe vom programmieren keine Ahnung....

wenn man VOR dem Ausprobieren einfach mal strukturiert über die Aufgabenstellung nachdenkt.
Die ist klar definiert....
Ich muss in Abhängigkeit von einem State (Pooltemp) die Pumpenlaufzeit bzw. Abschaltuhrzeit berechnen.
[Pool:state]/4*(Laufzeit in h/ Abschaltuhrzeit)
Zur Zeit sieht es so aus:
(set PoolPumpe on-till {sprintf("%02d:%02d",3+[Pool:state:d]/4,([Pool:state:d]/4-int([Pool:state:d]/4))*60)}))
"sprintf" kannte ich zB noch gar nicht. Schaffe es gerade erst ein "notify" in ein *at einzubauen. Geht alles peu a peu.....
Den Code habe ich von Damian, und dann etwas damit getestet usw. Warum aber da jetzt 3 mal "Pool:state" abgefragt wird weiss ich nicht genau, ich denke mal hh:mm:ss  :-[

LG
B.


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

betateilchen

ich hab gesehen, was im anderen Thread geschrieben wurde... und was Rudolf Dir geschrieben hat, ist eigentlich der gleiche Lösungsansatz, den ich Dir hier auch vorgeschlagen hatte.

ZitatIch muss in Abhängigkeit von einem State (Pooltemp) die Pumpenlaufzeit bzw. Abschaltuhrzeit berechnen.

Gib mir doch mal ein Beispiel.

Temperatur = ? (soll ergeben) Laufzeit = ?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Bartimaus

Hi,
aktuell Pooltemperatur = 12°C
Daraus folgt: 12/4 = 3h Pumpenlaufzeit, ... *at 12:00 set Poolpumpe on-till (errechnet) 15:00
Im Sommer dann auch mal gerne Pooltemp = 30°C = 7,5h Laufzeit, somit zu gross für "on-for-timer".
Ich bin ja gerne bei Euch..... kann aber noch nicht, da ich noch Vorschule und Ihr = Uni.....
LG
B.


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

betateilchen

#9


define poolaus_at notify poolpumpe:on.* {my $x = Value('pooltemperatur') * 900;  $x=secs2hms($x); fhem("define pool_aus at +".$x." set poolpumpe off");}



Damit passiert folgendes:

In dem Moment, wo Du der poolpumpe ein "on" oder on-for-timer oder on-till schickst, startet dieses notify, berechnet die Laufzeit und legt ein at an, das nach der ermittelten Zeitspanne die Pumpe wieder abschaltet (per fhem).

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Bartimaus

Hm,

Value('Pooltemperatur) muss durch [state:Pool) ersetzt werden ?
LG
B.


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

betateilchen

#11
Nein.

Höchstens durch Value('Pool') wenn Pool das Device ist, das die Temperatur liefert und diese Temperatur in STATE hat.

Falls die Temperatur NUR in state aber nicht in STATE steht, musst Du ReadingsVal('Pool','state',3600) verwenden.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Bartimaus

...Value(Pool) ?
Das GPIO4-Device heisst bei mir "Pool"
LG
B.


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

betateilchen

Zitat von: Bartimaus am 31 März 2014, 14:50:36
...Value(Pool) ?

wenn schon, dann bitte Value('Pool')

(Die Anführungszeichen sind wichtig!)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Bartimaus

Habs in die 99_Utils eingebaut, incl. Neustart von FHEM.
Jetzt bekomme ich folgenden Fehler beim speichern von FHEM.cfg
[code]Unknown command $x=secs2hms($x), try help. Unknown command fhem("define, try help. Unknown command }, try help.[/code]
LG
B.


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