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
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.
Ok, danke. Die 15360s sind also die 4,5h die der interne Timer des Fs20-Device.
Gut, muss ich versuchen die Abschaltuhrzeit zu berechnen...
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}
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.
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.
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 :-[
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 = ?
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.....
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).
Hm,
Value('Pooltemperatur) muss durch [state:Pool) ersetzt werden ?
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.
...Value(Pool) ?
Das GPIO4-Device heisst bei mir "Pool"
Zitat von: Bartimaus am 31 März 2014, 14:50:36
...Value(Pool) ?
wenn schon, dann bitte Value('Pool')
(Die Anführungszeichen sind wichtig!)
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]
Wenn Du das notify oben in der Befehlszeile eingibst, musst Du die ; verdoppeln, also immer ;; schreiben.
Sorry - ich hatte nicht dran gedacht, dass das noch jemand so macht ;)
So, hab es jetzt "eingebaut", auch an einem neuen TestDummy, will ja die Poolpumpe nicht überfordern.
Nur, wenn die ich den Dummy jetzt händisch einschalte, wird er "nur" eingeschaltet. Das notify reagiert augenscheinlich nicht. In Damians Code sehe ich nach dem ausführen des "at" zumindest einen on-till-Uhrzeit....
Die Pooltemp wird wie folgt abgelegt:
Internals:
Readings
state | T: 13.4 | 2014-03-31 15:39:26 |
temperature | 13.4 | 2014-03-31 15:39:26 |
Dir fehlt das absolute Grundverständnis von FHEM, Du versuchst aber gleich, mit dem kompliziertesten anzufangen.
Mit "state" kannst Du in meinem Beispiel nicht arbeiten, Du musst temperature verwenden. Bei mir hat die Lösung mit dem Dummy problemlos funktioniert.
Und es wäre sehr hilfreich, wenn Du hier nicht in Bruchstücken arbeiten würdest, sondern auch mal die tatsächlichen Definitionen posten, mit denen Du jetzt rumspielst, wäre das sehr hilfreich.
Zitat von: betateilchen am 31 März 2014, 15:50:11
Dir fehlt das absolute Grundverständnis von FHEM, Du versuchst aber gleich, mit dem kompliziertesten anzufangen.
Das negiere ich auch garnicht. Bis jetzt konnte ich alles schalten weswegen ich FHEM benutze.
Bei Excel muss ich auch nicht wissen wie es funktioniert, sonder nur mit welchen Eingabe ich zu meinem gewünschten Ziel komme...
Muss jetzt weg und probiere heute Abend weiter, und dann poste ich auch die gewünschten Definitionen..... ::)
Das war nicht böse gemeint.
Aber auch bei Excel musst Du ein paar Grundbegriffe kennen, z.B. was Spalten, Zeilen und Zellen sind und wie man Funktionen verwendet und darin Werte angibt.
Genau wie bei fhem ;)