FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: thuranga am 04 August 2020, 12:06:19

Titel: AT mit variabler Startzeit
Beitrag von: thuranga am 04 August 2020, 12:06:19
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?
Titel: Antw:AT mit variabler Startzeit
Beitrag 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","") )  }
Titel: Antw:AT mit variabler Startzeit
Beitrag 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.
Titel: Antw:AT mit variabler Startzeit
Beitrag von: thuranga am 04 August 2020, 15:47:50
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...
Titel: Antw:AT mit variabler Startzeit
Beitrag von: thuranga am 04 August 2020, 15:50:16
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
Titel: Antw:AT mit variabler Startzeit
Beitrag von: Damian am 04 August 2020, 15:59:48
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.
Titel: Antw:AT mit variabler Startzeit
Beitrag von: thuranga am 04 August 2020, 16:10:41
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?
Titel: Antw:AT mit variabler Startzeit
Beitrag von: Damian am 04 August 2020, 16:18:37
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.
Titel: Antw:AT mit variabler Startzeit
Beitrag von: thuranga am 04 August 2020, 16:25:53
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
Titel: Antw:AT mit variabler Startzeit
Beitrag von: Damian am 04 August 2020, 16:30:44
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.
Titel: Antw:AT mit variabler Startzeit
Beitrag von: thuranga am 04 August 2020, 16:39:30
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!  :)