Hallo zusammen,
ich möchte gerne die Poolpumpe in Abhängigkeit von den Sonnenstunden und Bewölkung laufen lassen. Da der Pool über einen Solarabsorber erwärmt wird, muss die Pumpe nur dann länger laufen, wenn die Sonne scheint. Außerdem prüfe ich, wann es am Besten ist, die Pumpe zu starten (morgens oder mittags).
Soweit zur Vorgeschichte. Die Daten hole ich mir über Proplanta und schreibe Dauer und Startzeit in Readings
Mein AT sieht jetzt so aus, aber die Pumpe geht nicht zur berechneten Zeit an:
define AT_PoolPumpeStart at *{ReadingsVal("DMMY_Poolpumpe","at_start","")} { { fhem("set PM_Garten_Poolpumpe_Sw on-for-timer ". (ReadingsVal("DMMY_Poolpumpe","duration","")) ) } }
Internals:
CFGFN
FUUID 5f219399-f33f-b0e2-c3bb-e92b44e60b2fba52
NAME DMMY_Poolpumpe
NR 22936
STATE 7
TYPE dummy
OLDREADINGS:
READINGS:
2020-08-04 06:00:00 at_start 09:00:00
2020-08-04 06:00:00 duration 25200
2020-08-04 06:00:00 ftui_state Start: 09 Uhr (7 h)
2020-08-04 06:00:00 state 7
Attributes:
Internals:
CFGFN
COMMAND { { fhem("set PM_Garten_Poolpumpe_Sw on-for-timer ". (ReadingsVal("DMMY_Poolpumpe","duration","")) ) } }
DEF *{ReadingsVal("DMMY_Poolpumpe","at_start","")} { { fhem("set PM_Garten_Poolpumpe_Sw on-for-timer ". (ReadingsVal("DMMY_Poolpumpe","duration","")) ) } }
FUUID 5f2839b2-f33f-b0e2-d407-961f31ee7cc2573c
NAME AT_PoolPumpeStart
NR 45256
NTM 09:00:00
PERIODIC yes
RELATIVE no
REP -1
STATE Next: 09:00:00
TIMESPEC {ReadingsVal("DMMY_Poolpumpe","at_start","")}
TRIGGERTIME 1596610800
TRIGGERTIME_FMT 2020-08-05 09:00:00
TYPE at
READINGS:
2020-08-04 12:00:00 state Next: 09:00:00
Attributes:
Wo liegt mein Denkfehler?
- viel zu viele Klammern, wo keine hingehören
- warum definierst Du ein wiederholendes at, wenn die Startzeit ohnehin immer neu berechnet wird?
zu 1.) probier mal so:
{ fhem("set PM_Garten_Poolpumpe_Sw on-for-timer ". ReadingsVal("DMMY_Poolpumpe","duration","") ) }
zu 2.
Ich habe die Weckzeit (von einem Tablet als Wecker) als Reading.
Ein DOIF nutzt diese Zeit und startet zu dem im Reading hinterlegten Zeitpunkt.
3. Bei der Berechnung der Startzeit modifizierst Du Dein AT.
Zitat von: betateilchen am 04 August 2020, 12:22:05
- warum definierst Du ein wiederholendes at, wenn die Startzeit ohnehin immer neu berechnet wird?
also das "*" ist zuviel?
Zitat von: betateilchen am 04 August 2020, 12:22:05
zu 1.) probier mal so:
{ fhem("set PM_Garten_Poolpumpe_Sw on-for-timer ". ReadingsVal("DMMY_Poolpumpe","duration","") ) }
Ja, hast recht. Die Klammern sind wohl vom vielen try-and-error übrig geblieben...
Zitat von: rabehd am 04 August 2020, 13:59:42
zu 2.
Ich habe die Weckzeit (von einem Tablet als Wecker) als Reading.
Ein DOIF nutzt diese Zeit und startet zu dem im Reading hinterlegten Zeitpunkt.
3. Bei der Berechnung der Startzeit modifizierst Du Dein AT.
Aber wie mache ich den Aufruf korrekt? Damit er jeden Morgen die aktuellen Zeiten nimmt
Zitat von: thuranga am 04 August 2020, 15:50:16
Aber wie mache ich den Aufruf korrekt? Damit er jeden Morgen die aktuellen Zeiten nimmt
define PoolPumpeStart DOIF {[[DMMY_Poolpumpe:at_start]];fhem_set("PM_Garten_Poolpumpe_Sw on-for-timer ".[?DMMY_Poolpumpe:duration])}
Das Modul aktualisiert sich selbst, wenn du die Startzeit änderst.
Zitat von: Damian am 04 August 2020, 15:59:48
define PoolPumpeStart DOIF {[[DMMY_Poolpumpe:at_start]];fhem_set("PM_Garten_Poolpumpe_Sw on-for-timer ".[?DMMY_Poolpumpe:duration])}
Das Modul aktualisiert sich selbst, wenn du die Startzeit änderst.
Danke für den Code :) :)
Ich hatte jedoch folgenden Fehler:
PoolPumpeStart DOIF: no right bracket: {[[DMMY_Poolpumpe:at_start]]
Unknown command fhem_set("PM_Garten_Poolpumpe_Sw, try help.
Daher habe ich folgendermaßen angepasst:
define PoolPumpeStart DOIF ([[DMMY_Poolpumpe:at_start]]) ("set PM_Garten_Poolpumpe_Sw on-for-timer ".[?DMMY_Poolpumpe:duration])
Ist das so korrekt? fhem_set hatte ich in der CommandRef nicht gefunden und mit DOIF noch keine so große Erfahrung...
BTW: Für was steht das "?" vor dem letzten DUMMY?
Zitat von: thuranga am 04 August 2020, 16:10:41
Danke für den Code :) :)
Ich hatte jedoch folgenden Fehler:
PoolPumpeStart DOIF: no right bracket: {[[DMMY_Poolpumpe:at_start]]
Unknown command fhem_set("PM_Garten_Poolpumpe_Sw, try help.
Daher habe ich folgendermaßen angepasst:
define PoolPumpeStart DOIF ([[DMMY_Poolpumpe:at_start]]) ("set PM_Garten_Poolpumpe_Sw on-for-timer ".[?DMMY_Poolpumpe:duration])
Ist das so korrekt? fhem_set hatte ich in der CommandRef nicht gefunden und mit DOIF noch keine so große Erfahrung...
BTW: Für was steht das "?" vor dem letzten DUMMY?
Mein Vorschlag war im performanteren Perl-Modus, beim Eingeben in der Kommandozeile musst du Semikolons verdoppeln. Dein Vorschlag ist im FHEM-Modus. Im FHEM-Modus musst du die Anführungszeichen und den Punkt löschen und das Attribut do always setzen.
Das Fragezeichen bedeutet nur auslesen aber nicht triggern. Das kannst du im FHEM-Modus löschen, weil im Ausführungsteil im FHEM-Modus kein Trigger vorkommen kann, sondern nur in der Bedingung.
Im Perl-Modus muss es bleiben, sonst wird dein set-Befehl ausgeführt sobald du duration änderst, dort wird nicht zwischen Bedingung und Ausführung unterschieden.
Zitat von: Damian am 04 August 2020, 16:18:37
Mein Vorschlag war im performanteren Perl-Modus, beim Eingeben in der Kommandozeile musst du Semikolons verdoppeln. Dein Vorschlag ist im FHEM-Modus. Im FHEM-Modus musst du die Anführungszeichen und den Punkt löschen und das Attribut do always setzen.
Das Fragezeichen bedeutet nur auslesen aber nicht triggern. Das kannst du im FHEM-Modus löschen, weil im Ausführungsteil im FHEM-Modus kein Trigger vorkommen kann, sondern nur in der Bedingung.
Im Perl-Modus muss es bleiben, sonst wird dein set-Befehl ausgeführt sobald du duration änderst, dort wird nicht zwischen Bedingung und Ausführung unterschieden.
Ich danke dir!! Ich habe das mal so umgesetzt und schau morgen früh, ob die Pumpe anspringt
Zitat von: thuranga am 04 August 2020, 16:25:53
Ich danke dir!! Ich habe das mal so umgesetzt und schau morgen früh, ob die Pumpe anspringt
Das kannst du heute schon sehen. In den Readings muss ein Timer mit der korrekten Uhrzeit erscheinen. Auch die Ausführung des definierten Befehls kannst du per set-Auswahlmenü im DOIF-Modul testen.
Zitat von: Damian am 04 August 2020, 16:30:44
Das kannst du heute schon sehen. In den Readings muss ein Timer mit der korrekten Uhrzeit erscheinen. Auch die Ausführung des definierten Befehls kannst du per set-Auswahlmenü im DOIF-Modul testen.
Stimmt:
timer_01_c01 05.08.2020 09:00:00
und das set geht auch - Pumpe springt wieder an :-)
Danke! :)