DOIF wird nicht ausgelöst

Begonnen von StG (DD), 13 Juni 2020, 21:17:49

Vorheriges Thema - Nächstes Thema

StG (DD)

Hallo,

ich möchte täglich zwischen 10:01 und 17:29 jede 15 Minuten prüfen, ob die Pumpe für die Solarumwälzung gestartet werden kann bzw. gestoppt werden muss. Dazu muss die Sandfilteranlage aus sein und die Temperatur vom Solarpanel >35°C sein. Sinkt die Temperatur unter 30°C soll die Solarumwälzung wieder gestoppt werden (Temperatur ist indirekt, Sensor liegt (noch) nicht im Wasserstrom des Solarpanel.

Homematic 4Kanal Hutschienen Schalter
SWI_AU_GA_Pool_4CH_CH1: Sandfilteranlage
SWI_AU_GA_Pool_4CH_CH2: Stromsparende Pumpe für Solarumwälzung
SWI_AU_GA_Pool_4CH_CH3: UV Desinfektion (Soll mit der Solarumwälzung gestartet werden, da die Durchflussgeschwindigkeit geringer ist, als bei der Sandfilteranlage)

Temperaturdifferenzsensor Homematic:
TMP_DIFF_SEN1_T2: Oberflächentemperatur des Solarpanel

Definition des DoIf:
   
([10:01-17:29,+:15]) {
Log (1, "DOIF_SWITCH_SOLARPUMP_ONOFF started");
my $SolarTemp=ReadingsVal("TMP_DIFF_SEN1_T2","temperature","0");
my $SandFilterPumpe=ReadingsVal("SWI_AU_GA_Pool_4CH_CH1","state","off");
my $SolarPumpe=ReadingsVal("SWI_AU_GA_Pool_4CH_CH2","state","off");
    Log (1, "SolarTemp: $SolarTemp ;  SandFilterPumpe: $SandFilterPumpe ;  SolarPumpe: $SolarPumpe");
if ($SandFilterPumpe eq "off"){
  if ($SolarPumpe eq "off" and $SolarTemp > 35){
  fhem ("set SWI_AU_GA_Pool_4CH_CH2 on");
fhem ("set SWI_AU_GA_Pool_4CH_CH3 on");
  } elsif ($SolarPumpe eq "on" and $SolarTemp < 30){
  fhem ("set SWI_AU_GA_Pool_4CH_CH2 off");
  }
}
Log (1, "DOIF_SWITCH_SOLARPUMP_ONOFF ended");
}


Keine Logfileeinträge . . .

Otto123

Hi,

ist das die DOIF Version?
Log (1, "DOIF_SWITCH_SOLARPUMP_ONOFF ended")
In Perl verwende ich diese Version
{ Log 1, "Log Eintrag Text"}

Der Trigger sieht gut aus, den verwende ich genauso, der sollte funktionieren. ;)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

StG (DD)

mmh, einen Eintrag im Logfile hatte ich gefunden, es hat zumindest mit dem Log funktioniert. Ich kann's aber ändern.

frober

Soweit ich das sehe ist das eine Vermischung zw. Fhem und Perl Modus.

Die geschweifte Klammer kommt vor den Trigger und dann ein Semikolon zum ausführenden Teil.

Oder den ausführenden Teil in runde Klammer.
Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

StG (DD)

#4
??? Huch, hier fährt gerade ein Zug durch den Bahnhof ???

Hast Du ein Beispiel, oder kannst Du meine Definition anpassen? Also ich glaub schon, dass der Code funktioniert, nur das DOIF läuft nicht los . ..  Wie gesagt, ich hatte einmalig einen Logfileeintrag, daher bin ich mir recht sicher, dass es im Perl Teil funktionieren müsste

frober

Lt  Comandref Doif Intervall- Timer

define di_pump DOIF ([08:00-22:00,+:30])(set pump on-for-timer 300)
attr di_pump do always


Perl:

define di_pump DOIF {[08:00-22:00,+:30];fhem_set"pump on-for-timer 300"}
Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

StG (DD)

okay. Kontrolliere ich und passe es an. Danke Dir

StG (DD)

sieht jetzt so aus, da bin ich auf morgen gespannt, Log Zeile hab ich vorerst auf's Original zurück gedreht.

{[10:01-17:29,+:15];
Log (1, "DOIF_SWITCH_SOLARPUMP_ONOFF started");
my $SolarTemp=ReadingsVal("TMP_DIFF_SEN1_T2","temperature","0");
my $SandFilterPumpe=ReadingsVal("SWI_AU_GA_Pool_4CH_CH1","state","off");
my $SolarPumpe=ReadingsVal("SWI_AU_GA_Pool_4CH_CH2","state","off");
    Log (1, "SolarTemp: $SolarTemp ;  SandFilterPumpe: $SandFilterPumpe ;  SolarPumpe: $SolarPumpe");
if ($SandFilterPumpe eq "off"){
  if ($SolarPumpe eq "off" and $SolarTemp > 35){
  fhem ("set SWI_AU_GA_Pool_4CH_CH2 on");
fhem ("set SWI_AU_GA_Pool_4CH_CH3 on");
  } elsif ($SolarPumpe eq "on" and $SolarTemp < 30){
  fhem ("set SWI_AU_GA_Pool_4CH_CH2 off");
  }
}
Log (1, "DOIF_SWITCH_SOLARPUMP_ONOFF ended");
}

Damian

Warum arbeitest nicht ereignisgesteuert?
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

StG (DD)

Zeiten sind doch Ereignisse :)

Ereignisgesteuert wäre hier sozusagen, wenn die Temperatur vom Solarpanel reinkommt. Das wäre dann alle 3 Minuten statt aller 15. Ist prinzipiell kein Beinbruch und fällt am Raspi nicht weiter auf, ich möchte aber nicht unbedingt alle drei Minuten in ungünstigen Konstellationen hin und her schalten. Es gehen ja bei Änderung immer 2 Homematic Funk Telegramme raus (Solar und UV) - im drei Minuten Takt wäre es dann das Fünfache. Halte ich eher für unnötig. Bei Wetter wie heute würde es natürlich den ganzen Tag durchlaufen.

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Damian

Zitat von: StG (DD) am 13 Juni 2020, 22:44:30
Zeiten sind doch Ereignisse :)

Ereignisgesteuert wäre hier sozusagen, wenn die Temperatur vom Solarpanel reinkommt. Das wäre dann alle 3 Minuten statt aller 15. Ist prinzipiell kein Beinbruch und fällt am Raspi nicht weiter auf, ich möchte aber nicht unbedingt alle drei Minuten in ungünstigen Konstellationen hin und her schalten. Es gehen ja bei Änderung immer 2 Homematic Funk Telegramme raus (Solar und UV) - im drei Minuten Takt wäre es dann das Fünfache. Halte ich eher für unnötig. Bei Wetter wie heute würde es natürlich den ganzen Tag durchlaufen.

Naja, wenn deine Temperaturschwelle in kurzen Abständen über-/unterschritten wird, dann wird bei dir ggf. alle 15 Minuten hin- und hergeschaltet.

Bei einem ereignisgesteuertem DOIF als Zweizeiler mit wait-Attribut würde das nicht passieren ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

StG (DD)

Danke für Eure Hilfe, das DOIF wird jetzt ordentlich getriggert. Fehlt jetzt nur noch die Sonne :)

2020.06.14 10:01:00 1: DOIF_SWITCH_SOLARPUMP_ONOFF started
2020.06.14 10:01:00 1: SolarTemp: 22.8 ;  SandFilterPumpe: off ;  SolarPumpe: off
2020.06.14 10:01:00 1: DOIF_SWITCH_SOLARPUMP_ONOFF finished
2020.06.14 10:15:00 1: DOIF_SWITCH_SOLARPUMP_ONOFF started
2020.06.14 10:15:00 1: SolarTemp: 22.5 ;  SandFilterPumpe: off ;  SolarPumpe: off
2020.06.14 10:15:00 1: DOIF_SWITCH_SOLARPUMP_ONOFF finished
2020.06.14 10:30:00 1: DOIF_SWITCH_SOLARPUMP_ONOFF started
2020.06.14 10:30:00 1: SolarTemp: 21.8 ;  SandFilterPumpe: off ;  SolarPumpe: off
2020.06.14 10:30:00 1: DOIF_SWITCH_SOLARPUMP_ONOFF finished