[gelöst]Poolpumpe mit WeekdayTimer abhängig von Pooltemperatur ausschalten

Begonnen von Bracew, 22 Juni 2019, 17:20:32

Vorheriges Thema - Nächstes Thema

Bracew

in der Tat,
hatte ich gestern abend noch on-for-timer mal ausprobiert. Zunächst ganz einfach mit:
define PoolpumpeAuto WeekdayTimer Poolpumpe de 09:00:00|on-for-timer:21600 (isPoolpumpeAutomatik())
heute morgen hat FHEM die Poolpumpe an:
Profil 0: Sonntag 09:00:00 on-for-timer:21600
Profil 1: Montag 09:00:00 on-for-timer:21600
Profil 2: Dienstag 09:00:00 on-for-timer:21600
Profil 3: Mittwoch 09:00:00 on-for-timer:21600
Profil 4: Donnerstag 09:00:00 on-for-timer:21600
Profil 5: Freitag 09:00:00 on-for-timer:21600
Profil 6: Samstag 09:00:00 on-for-timer:21600
STATE on-for-timer:21600


Noch habe ich das richtige Aktormodul nicht. Es soll eine OBI-WLAN-Steckdose werden, welche hier schon liegt. Aber ich warte noch auf den FTDI USB zu Serial Wandler aus China um ESP-Easy drauf zu laden, so dass ich im Moment nur FHEM intern probiere. Ob die Obi-Steckdose on-for-timer kann, weiß ich nicht.

Bei:
define PoolpumpeAuto WeekdayTimer Poolpumpe de 09:00:00|on { my $duration = 1*HOURSECONDS+ReadingsVal("SensorPool1","Temperature",20)*12*MINUTESECONDS;
fhem ("set $NAME on-for-timer $duration") if isPoolpumpeAutomatik()}

bekomme ich die Antwort: Unknown command fhem, try help.

FHEM auf Raspberry Pi
für z.B. Lichtsteuerung, Temperaturmessung, Balkonkraftwerk,
Öltankfüllstandsmessung und für Hühnerstall Hühnerklappe

Beta-User

Vermutlich geht dann mehrzeilig nicht, vielleicht liegt es an den Hochkommata; evtl. geht es z.B. so:
define PoolpumpeAuto WeekdayTimer Poolpumpe de 09:00:00|on { fhem ("set $NAME on-for-timer 1*HOURSECONDS+ReadingsVal('SensorPool1','Temperature',20)*12*MINUTESECONDS") if isPoolpumpeAutomatik()}

Was die Firmaware angeht: Sowohl ESPEasy wie MQTT2_DEVICE kennen SetExtensions; damit sollte on-for-timer kein Thema sein.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Bracew

Hallo zusammen,

der FTDI USB zu Serial Wandler zum flashen der OBI-WLAN-Steckdose ist da. ESP-Easy ist drauf. Aber es war nicht leicht die richtigen Einstellungen zu finden und die OBI-WLAN-Steckdose halbwegs zu zähmen, aber nun geht es zumindestens mit festen Schaltzeiten und mit Klick auf der FHEM Oberfläche, siehe: https://forum.fhem.de/index.php/topic,84777.msg954059.html#msg954059

Bezüglich des WeekdayTimer habe ich noch keine Lösung gefunden.
Das mit dem "on-for-timer" möchte ich gerne verwerfen.
Viel lieber wäre es mir einen Tipp zu bekommen, wie ich die Ausschaltzeit berechnen kann, so dass je wärmer es wird je länger die Poolpumpe läuft.

Danke und mit lieben Grüßen Bracew
FHEM auf Raspberry Pi
für z.B. Lichtsteuerung, Temperaturmessung, Balkonkraftwerk,
Öltankfüllstandsmessung und für Hühnerstall Hühnerklappe

Beta-User

Zitat von: Bracew am 30 Juni 2019, 18:53:31
Bezüglich des WeekdayTimer habe ich noch keine Lösung gefunden.
Das mit dem "on-for-timer" möchte ich gerne verwerfen.
Viel lieber wäre es mir einen Tipp zu bekommen, wie ich die Ausschaltzeit berechnen kann, so dass je wärmer es wird je länger die Poolpumpe läuft.
Was spricht denn gegen die on-for-timer-Lösung?

Ansonsten hattest du einen Tipp: Das müßte mit einer Perl-Funktion klappen, die du als Uhrzeit angibst. Diese muß eine Uhrzeit (für den off-Befehl) zurückgeben... Diese Perl-Funktion wird dann (durch den WDT-Code automatisch) jeden Tag um 00:00 Uhr ausgeführt, was bedeutet, dass - anders als bei on-for-timer - die Temperatur im Einschaltzeitpunkt noch nicht bekannt ist.
Finde ich weniger elegant als on-for-timer und sehe auch sonst keinen Vorteil, da in beiden Fällen schlicht ein interner Timer in FHEM gesetzt und abgearbeitet wird (jedenfalls mit dieser Hardware als Empfänger des on-for-... Befehls).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Bracew

Hallo Beta-User,

ZitatWas spricht denn gegen die on-for-timer-Lösung?

Sie hat im Test nicht funktioniert. Im Device stand der Text: 1*HOURSECONDS...  und keine Zeitangabe.
Ich hab den genauen Text nicht mehr in Erinnerung.

Aber da ich jetzt die richtige Schaltsteckdose habe, werde ich das nochmals am nächsten Wochenende ausprobieren.

Danke für Dein Engagement, mit lieben Grüßen
Bracew
FHEM auf Raspberry Pi
für z.B. Lichtsteuerung, Temperaturmessung, Balkonkraftwerk,
Öltankfüllstandsmessung und für Hühnerstall Hühnerklappe

Beta-User

Ah ok. Damit kann man was anfangen...

Das war erst mal auch nur Pseudocode (ich kann das nicht wirklich testen, aber das Fehlerfragment ist eigentlich logisch...), jetzt evtl. dann mal mit folgendem an den Start gehen:

{ if isPoolpumpeAutomatik() {my $duration = HOURSECONDS+ReadingsVal('SensorPool1','Temperature',20)*12*MINUTESECONDS; fhem ("set $NAME on-for-timer $duration") }}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Bracew

Kann ich das irgendwie anders als mit einem Reellen Device testen (z.B.Dummy)?
Sonst wie gesagt am Wochenende.
FHEM auf Raspberry Pi
für z.B. Lichtsteuerung, Temperaturmessung, Balkonkraftwerk,
Öltankfüllstandsmessung und für Hühnerstall Hühnerklappe

Beta-User

Vermutlich schon; und du kannst die Perl-Sachen auch "isoliert" über die Kommandozeile eingeben (dann mit den geschweiften Klammern drumrum)...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Bracew

{HOURSECONDS+ReadingsVal('SensorPool1','Temperature',20)*12*MINUTESECONDS} in der Kommandozeile ergibt: 19872,
sieht gut aus!

Wie könnte ich jetzt einen WeekdayTimer mit on-for-timer auf einen Dummy loslassen?
FHEM auf Raspberry Pi
für z.B. Lichtsteuerung, Temperaturmessung, Balkonkraftwerk,
Öltankfüllstandsmessung und für Hühnerstall Hühnerklappe

Bracew

{ReadingsVal('SensorPool1','Temperature',20)} ergibt aber 22.1
obwohl der Pool im Moment über 30°C hat  :-\

Aahhh, falsche Schreibweise mit:
{ReadingsVal('SensorPool1','temperature',20)} ergibt es 30.3
das sieht gut aus!
FHEM auf Raspberry Pi
für z.B. Lichtsteuerung, Temperaturmessung, Balkonkraftwerk,
Öltankfüllstandsmessung und für Hühnerstall Hühnerklappe

Beta-User

Zitat von: Bracew am 01 Juli 2019, 17:51:42
Wie könnte ich jetzt einen WeekdayTimer mit on-for-timer auf einen Dummy loslassen?
Einfach das Zieldevice entsprechend wählen... (Statt Poolpumpe, oder wie auch immer das im Original hieß)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Bracew

Mit:
define Poolpumpe1 structure room Lampe_BS4
attr   Poolpumpe1 comment FunkSchalter für Poolpumpe
attr   Poolpumpe1 group Pool1
attr   Poolpumpe1 room test
attr   Poolpumpe1 icon scene_swimming

define PoolpumpeAutoTest WeekdayTimer Poolpumpe1 de 09:00:00|on { if isPoolpumpeAutomatik() {my $duration = HOURSECONDS+ReadingsVal('SensorPool1','temperature',20)*12*MINUTESECONDS; fhem ("set $NAME on-for-timer $duration") }}
attr   PoolpumpeAutoTest commandTemplate set $NAME  $EVENT
attr   PoolpumpeAutoTest group Pool1
attr   PoolpumpeAutoTest room test
attr   PoolpumpeAutoTest icon scene_swimming

kommt:
ZitatERROR:
Unknown command fhem, try help.

FHEM auf Raspberry Pi
für z.B. Lichtsteuerung, Temperaturmessung, Balkonkraftwerk,
Öltankfüllstandsmessung und für Hühnerstall Hühnerklappe

Bracew

Ein Komma zuviel hinter MINUTESECONDS?

Hab's rausgenommen und kommt kein Fehler

list PoolpumpeAutoTest

Internals:
   COMMAND    { if isPoolpumpeAutomatik() {my $duration = HOURSECONDS+ReadingsVal('SensorPool1','temperature',20)*12*MINUTESECONDS fhem ("set $NAME on-for-timer $duration") }}
   CONDITION 
   DEF        Poolpumpe1 de 09:00:00|on { if isPoolpumpeAutomatik() {my $duration = HOURSECONDS+ReadingsVal('SensorPool1','temperature',20)*12*MINUTESECONDS fhem ("set $NAME on-for-timer $duration") }}
   DEVICE     Poolpumpe1
   FUUID      5d1a300e-f33f-8319-*
   GlobalDaylistSpec
   LANGUAGE   de
   NAME       PoolpumpeAutoTest
   NR         823
   Profil 0: Sonntag 09:00:00 on
   Profil 1: Montag 09:00:00 on
   Profil 2: Dienstag 09:00:00 on
   Profil 3: Mittwoch 09:00:00 on
   Profil 4: Donnerstag 09:00:00 on
   Profil 5: Freitag 09:00:00 on
   Profil 6: Samstag 09:00:00 on
   STATE      active
   STILLDONETIME 0
   TYPE       WeekdayTimer
   READINGS:
     2019-07-01 18:08:52   currValue       on
     2019-07-01 18:08:52   nextUpdate      2019-07-02 09:00:00
     2019-07-01 18:08:52   nextValue       on
     2019-07-01 18:08:52   state           active
   SWITCHINGTIMES:
     09:00:00|on
   TIMER:
     PoolpumpeAutoTest_SetTimerOfDay:
       HASH       PoolpumpeAutoTest
       MODIFIER   SetTimerOfDay
       NAME       PoolpumpeAutoTest_SetTimerOfDay
       SETTIMERATMIDNIGHT 1
   dayNumber:
     !$we       8
     $we        7
     di         2
     do         4
     fr         5
     mi         3
     mo         1
     sa         6
     so         0
   helper:
     daysRegExp (so|mo|di|mi|do|fr|sa|\$we|\!\$we)
     daysRegExpMessage (so|mo|di|mi|do|fr|sa|$we|!$we)
     SWITCHINGTIME:
       0:
         09:00:00   on
       1:
         09:00:00   on
       2:
         09:00:00   on
       3:
         09:00:00   on
       4:
         09:00:00   on
       5:
         09:00:00   on
       6:
         09:00:00   on
   longDays:
     de:
       Sonntag
       Montag
       Dienstag
       Mittwoch
       Donnerstag
       Freitag
       Samstag
       Wochenende
       Werktags
     en:
       Sunday
       Monday
       Tuesday
       Wednesday
       Thursday
       Friday
       Saturday
       weekend
       weekdays
     fr:
       Dimanche
       Lundi
       Mardi
       Mercredi
       Jeudi
       Vendredi
       Samedi
       weekend
       jours de la semaine
   profil:
     1:
       EPOCH      1561964400
       PARA       on
       TIME       09:00:00
       TAGE:
         0
         1
         2
         3
         4
         5
         6
   profile_IDX:
     0:
       09:00:00   1
     1:
       09:00:00   1
     2:
       09:00:00   1
     3:
       09:00:00   1
     4:
       09:00:00   1
     5:
       09:00:00   1
     6:
       09:00:00   1
   shortDays:
     de:
       so
       mo
       di
       mi
       do
       fr
       sa
       $we
       !$we
     en:
       su
       mo
       tu
       we
       th
       fr
       sa
       $we
       !$we
     fr:
       di
       lu
       ma
       me
       je
       ve
       sa
       $we
       !$we
Attributes:
   commandTemplate set $NAME  $EVENT
   group      Pool1
   icon       scene


Mal sehen, ob es heute Nacht um 0:00 richtig rechnet. Im Moment ist ja noch nichts drin, so wie ich es interpretiere.
FHEM auf Raspberry Pi
für z.B. Lichtsteuerung, Temperaturmessung, Balkonkraftwerk,
Öltankfüllstandsmessung und für Hühnerstall Hühnerklappe

Beta-User

...wenn, dann eher ein Semikolon zu wenig, aber definitiv nicht zuviel...

(das sind zwei Perl-Zeilen, die da getrennt werden. Wenn das mit den zwei Zeilen grundsätzlich nicht geht, geht evtl. ein myUtils-Aufruf, der die beiden Zeilen dann intern ausführt, aber aus WDT-Sicht eben eine Zeile ist. Viel mehr fällt mir grade nicht ein...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Beta-User

Habe grade nochmal einen Test gemacht: mit zwei ";;" scheint die Perl-Geschichte durchzulaufen. Ist die übliche "Escaperei", die man auch anderswo braucht. Also sollte das funktionieren:

define PoolpumpeAutoTest WeekdayTimer Poolpumpe1 de 09:00:00|on { if isPoolpumpeAutomatik() {my $duration = HOURSECONDS+ReadingsVal('SensorPool1','temperature',20)*12*MINUTESECONDS;; fhem ("set $NAME on-for-timer $duration") }}

oder (in der Art hatte ich es getestet, ist aber nur eine andere Schreibweise):
define PoolpumpeAutoTest WeekdayTimer Poolpumpe1 de 09:00:00|on { my $duration = HOURSECONDS+ReadingsVal('SensorPool1','temperature',20)*12*MINUTESECONDS;; fhem ("set $NAME on-for-timer $duration") if isPoolpumpeAutomatik() }
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors