AT mit variabler Startzeit

Begonnen von thuranga, 04 August 2020, 12:06:19

Vorheriges Thema - Nächstes Thema

thuranga

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?

betateilchen


  • 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","") )  }
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rabehd

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.
Auch funktionierende Lösungen kann man hinterfragen.

thuranga

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...

thuranga

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

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

thuranga

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?

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

thuranga

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

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

thuranga

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!  :)