DOIF mit Astro und Temperaturen zusammen schalten

Begonnen von Wasserwerk33, 13 August 2022, 17:54:13

Vorheriges Thema - Nächstes Thema

Wasserwerk33

Hallo Leute,

Habe ein DOIF dieses soll von Abends bis nächsten Morgen wo die Sonne aufgeht und die Temperatur draußen kühler als im Zimmer ist schalten. Leider ist mir erst diese Woche aufgefallen das dieses nicht so ganz so funktoniert wie ich es gerne haben würde. Es schaltet aufjedenfall abends wenn die Temperatur draußen schon kühler ist als drinnen ohne Probleme oder halt eben erst morgens zum Sonnenaufgang,

Es soll ja auch dazwischen schalten. Könnte mir vielleicht jemand damit weiter helfen??

Danke schon mal im voraus

Internals:
   DEF        ([LaCrosse_18:temperature] > 21 and ([LaCrosse_16:temperature] - [LaCrosse_18:temperature] < -0.1) and ([([Astro:CivilTwilightEvening]+[00:10])]-[([Astro:CivilTwilightMorning]-[00:45])]))
(set Sonnenschutz_OG_hoch trigger)

DOELSEIF

([({twilight("Astro","CivilTwilightMorning","3:00","6:50")}-900)])
(set OG_ganz_runter trigger)
   FUUID      60de2a85-f33f-87a8-225f-a3266cb5c00837ca
   MODEL      FHEM
   NAME       JalousienOG_Lueften
   NOTIFYDEV  Astro,LaCrosse_16,global,LaCrosse_18
   NR         105
   NTFY_ORDER 50-JalousienOG_Lueften
   STATE      cmd_2
   TYPE       DOIF
   VERSION    26182 2022-06-29 18:57:26
   eventCount 67
   READINGS:
     2022-08-13 17:42:14   Device          LaCrosse_16
     2022-08-13 05:13:00   cmd             2
     2022-08-13 05:13:00   cmd_event       timer_3
     2022-08-13 05:13:00   cmd_nr          2
     2022-08-13 17:42:14   e_LaCrosse_16_temperature 31.4
     2022-08-13 09:11:06   e_LaCrosse_18_temperature 25.4
     2022-08-12 22:14:56   mode            enabled
     2022-08-13 05:13:00   state           cmd_2
     2022-08-13 00:00:00   timer_01_c01    13.08.2022 21:46:00
     2022-08-13 04:45:00   timer_02_c01    14.08.2022 04:45:00
     2022-08-13 05:13:00   timer_03_c02    14.08.2022 05:15:00
   Regex:
     accu:
     collect:
     cond:
       LaCrosse_16:
         0:
           temperature ^LaCrosse_16$:^temperature:
         1:
       LaCrosse_18:
         0:
           temperature ^LaCrosse_18$:^temperature:
         1:
     itimer:
       Astro:
         itimer:
           CivilTwilightEvening ^Astro$:^CivilTwilightEvening:
           CivilTwilightMorning ^Astro$:^CivilTwilightMorning:
   attr:
     cmdState:
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'LaCrosse_18','temperature') > 21 and (::ReadingValDoIf($hash,'LaCrosse_16','temperature') - ::ReadingValDoIf($hash,'LaCrosse_18','temperature') < -0.1) and (::DOIF_time_once($hash,0,$wday)-::DOIF_time_once($hash,1,$wday))
     1          ::DOIF_time_once($hash,2,$wday)
   days:
   do:
     0:
       0          set Sonnenschutz_OG_hoch trigger
     1:
       0          set OG_ganz_runter trigger
     2:
   helper:
     NOTIFYDEV  Astro,LaCrosse_16,global,LaCrosse_18
     event      temperature: 31.4
     globalinit 1
     last_timer 3
     sleeptimer -1
     timerdev   
     timerevent timer_3
     triggerDev LaCrosse_16
     timerevents:
       timer_3
     timereventsState:
       timer_3
     triggerEvents:
       temperature: 31.4
     triggerEventsState:
       temperature: 31.4
   internals:
   interval:
   intervalfunc:
   intervaltimer:
   localtime:
     0          1660419960
     1          1660445100
     2          1660446900
   readings:
     all         LaCrosse_18:temperature LaCrosse_16:temperature
   realtime:
     0          21:46:00
     1          04:45:00
     2          05:15:00
   time:
     0          ([Astro:CivilTwilightEvening]+[00:10])
     1          ([Astro:CivilTwilightMorning]-[00:45])
     2          ({twilight("Astro","CivilTwilightMorning","3:00","6:50")}-900)
   timeCond:
     0          0
     1          0
     2          1
   timer:
     0          0
     1          0
     2          0
   timers:
     0           0  1
     1           2
   trigger:
   triggertime:
     1660419960:
       localtime  1660419960
       hash:
     1660445100:
       localtime  1660445100
       hash:
     1660446900:
       localtime  1660446900
       hash:
   uiState:
   uiTable:
Attributes:
   room       Logo,Obergeschoss


Ich habe nochmal im DOIF geschaut aber dort konnte ich nur das mit dem Klammern finden aber die müssten so passen den so steht es dort auch drin.


Danke für eure Hilfe schon mal im vorraus

Gisbert

Hallo Wasserwerk33,

das wird vermutlich nicht die Lösung sein, aber diese Klammersetzung würde ich ändern, denn du willst ja die Differenz überwachen.
([LaCrosse_16:temperature] - [LaCrosse_18:temperature] < -0.1)
in
(([LaCrosse_16:temperature] - [LaCrosse_18:temperature]) < -0.1)

Dann fällt mir noch ein, dass ein wiederholtes Schalten eines DOIF das Attribut do always benötigt; ansonsten wird ein Zweig nur einmal ausgeführt. Ob das die Lösung ist, kann ich allerdings nicht versprechen. Vermutlich müsste jemand drüber schauen, der sich mit der Ausgabe des DOIF-Devices per list besser auskennt als ich.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Wasserwerk33

Nochmal schalten macht es ja die nächste Nacht über den mit zweig nach dem DOELSEIF, der zweig funktoniert auch ohne Probleme wenn ich das CMD 1 selber auslöse.

Gisbert

#3
Hallo Wasserwerk123,

dann hab ich deine Anforderung noch nicht ganz verstanden.

Jedenfalls ist es so, dass ein DOIF- (oder DOESLEIF-) Zweig genau einmal ausgeführt wird, wenn die Bedingung (event) erfüllt ist. Wenn man den gleichen Zweig mehrfach ausführen lassen möchte, ohne dass ein Wechsel zu einem anderen Zweig stattgefunden hat, dann muss man mit dem Attribut do always dafür sorgen.  Du schreibst es ja schon, Zweig 2 wird ausgeführt, wenn ich Zweig 1 selbst auslöse. Also musst du dafür sorgen, dass der Zweig 1 automatisch nach deinen Regeln ausgeführt wird. Man kann auch wunderbar do always mit repeatsame kombinieren, das die Anzahl der Wiederholungen beschränkt. Die deutsche commandref ist sehr hilfreich und hält auch gute Beispiele parat.

Eine gute Idee ist es für sich die Anforderung sprachlich auszuformulieren, und dann zu versuchen die passenden Bedingungen und Attribute zu finden.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Wasserwerk33

Hi

Okay das habe ich verstanden.

Meine Jalousie soll nachts, dann wenn die Temperatur im Haus höher ist als Draußen die Jalousie hochfahren (aber frühstens wenn die sonne unter gegangen ist und darf dieses bis die Sonne wieder auf geht), (zum Lüften) und wieder morgens runterfahren damit meine Jungs im Hochsommer nicht morgens schon um 4 auf der Matte stehen und sagen Papa ich bin wach. Deswegen dieser Zweitraum wo sie fahren darf und DOELSEIF ist das wo die Jalousie dann wieder runterfährt damit es nicht hell im Zimmer wird und die Jungs noch weiter schlafen.

Per

Antwort sprachlich: ;)
DOIF In dem Zeitraum (von-bis, triggernd!) und Temperaturdiff (triggernd) fahre hoch
DOELSE fahre runter

Jetzt möchtest/müsstest du aber bestimmt noch eine manuelle Übersteuerung reinbringen...

MadMax-FHEM

Zitat von: Per am 14 August 2022, 11:59:20
Jetzt möchtest/müsstest du aber bestimmt noch eine manuelle Übersteuerung reinbringen...

Und vermutlich wäre eine Hysterese auch nicht verkehrt? ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Wasserwerk33

Hi
Nein das bräuchte ich so nicht. Es reicht so wie es ist wenn es schaltet. 😉 Heute Nacht hat es nicht geschaltet. Hoffe das es diese Nacht funktioniert.


MadMax-FHEM

Zitat von: Wasserwerk33 am 14 August 2022, 12:54:30
Hi
Nein das bräuchte ich so nicht. Es reicht so wie es ist wenn es schaltet. 😉 Heute Nacht hat es nicht geschaltet. Hoffe das es diese Nacht funktioniert.

Hysterese oder manueller Eingriff?

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Wasserwerk33

Eigentlich beides nicht. Soll ja autonom laufen. Was ich noch einbauen würde ist wenn es läuft das unsere Handys erkannt werden. Also wenn wir zuhause darf es schalten sonst nicht

MadMax-FHEM

Zitat von: Wasserwerk33 am 14 August 2022, 13:14:06
Eigentlich beides nicht. Soll ja autonom laufen. Was ich noch einbauen würde ist wenn es läuft das unsere Handys erkannt werden. Also wenn wir zuhause darf es schalten sonst nicht

Was hat Hysterese mit autonom/automatisch zu tun?

Hysterese verhindert, dass bei Tempschwankungen hin und her gefahren wird...

Aber musst du wissen...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Wasserwerk33

Hi nochmal,

Sie hat leider nicht geschaltet. Ich habe doch von bis angegeben.
([([Astro:CivilTwilightEvening]+[00:10])] -[([Astro:CivilTwilightMorning]-[00:45])])) zwar mit einer zusätzlichen Zeit aber müsste doch klappen.

Hier fragt er doch die Temperatur außen zu innen ab.
(([LaCrosse_16:temperature] - [LaCrosse_18:temperature]) < -0.1)

Und zwar nur dann wenn die Temperatur im Zimmer über 21 grad ist.
([LaCrosse_18:temperature] > 21

Es soll ja schalten wenn die Temperatur im Zimmer über 21 Grad ist, dann in der Zeit von Sonnenuntergang bis aufgang und dabei die Außentemperatur niedriger als die Zimmer Temperatur ist.

Er schaltet nun auf die zweite Zeit also dann wenn Sonnenaufgang ist.

Internals:
   DEF        ([LaCrosse_18:temperature] > 21 and (([LaCrosse_16:temperature] - [LaCrosse_18:temperature]) < -0.1) and ([([Astro:CivilTwilightEvening]+[00:10])] -[([Astro:CivilTwilightMorning]-[00:45])]))
(set Sonnenschutz_OG_hoch trigger)

DOELSEIF

([({twilight("Astro","CivilTwilightMorning","3:00","6:50")}-900)])
(set OG_ganz_runter trigger)
   FUUID      60de2a85-f33f-87a8-225f-a3266cb5c00837ca
   MODEL      FHEM
   NAME       JalousienOG_Lueften
   NOTIFYDEV  LaCrosse_18,global,LaCrosse_16,Astro
   NR         105
   NTFY_ORDER 50-JalousienOG_Lueften
   STATE      cmd_2
   TYPE       DOIF
   VERSION    26182 2022-06-29 18:57:26
   eventCount 80
   READINGS:
     2022-08-15 10:44:00   Device          LaCrosse_16
     2022-08-15 05:15:59   cmd             2
     2022-08-15 05:15:59   cmd_event       timer_3
     2022-08-15 05:15:59   cmd_nr          2
     2022-08-15 10:44:00   e_LaCrosse_16_temperature 31.7
     2022-08-15 10:03:09   e_LaCrosse_18_temperature 26.1
     2022-08-14 22:50:51   mode            enabled
     2022-08-15 05:15:59   state           cmd_2
     2022-08-15 00:00:00   timer_01_c01    15.08.2022 21:42:00
     2022-08-15 04:48:00   timer_02_c01    16.08.2022 04:48:00
     2022-08-15 05:15:59   timer_03_c02    16.08.2022 05:17:59
   Regex:
     accu:
     collect:
     cond:
       LaCrosse_16:
         0:
           temperature ^LaCrosse_16$:^temperature:
         1:
       LaCrosse_18:
         0:
           temperature ^LaCrosse_18$:^temperature:
         1:
     itimer:
       Astro:
         itimer:
           CivilTwilightEvening ^Astro$:^CivilTwilightEvening:
           CivilTwilightMorning ^Astro$:^CivilTwilightMorning:
   attr:
     cmdState:
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'LaCrosse_18','temperature') > 21 and ((::ReadingValDoIf($hash,'LaCrosse_16','temperature') - ::ReadingValDoIf($hash,'LaCrosse_18','temperature')) < -0.1) and (::DOIF_time_once($hash,0,$wday) -::DOIF_time_once($hash,1,$wday))
     1          ::DOIF_time_once($hash,2,$wday)
   days:
   do:
     0:
       0          set Sonnenschutz_OG_hoch trigger
     1:
       0          set OG_ganz_runter trigger
     2:
   helper:
     NOTIFYDEV  LaCrosse_18,global,LaCrosse_16,Astro
     event      temperature: 31.7
     globalinit 1
     last_timer 3
     sleeptimer -1
     timerdev   
     timerevent timer_3
     triggerDev LaCrosse_16
     timerevents:
       timer_3
     timereventsState:
       timer_3
     triggerEvents:
       temperature: 31.7
     triggerEventsState:
       temperature: 31.7
   internals:
   interval:
   intervalfunc:
   intervaltimer:
   localtime:
     0          1660592520
     1          1660618080
     2          1660619879
   readings:
     all         LaCrosse_18:temperature LaCrosse_16:temperature
   realtime:
     0          21:42:00
     1          04:48:00
     2          05:17:59
   time:
     0          ([Astro:CivilTwilightEvening]+[00:10])
     1          ([Astro:CivilTwilightMorning]-[00:45])
     2          ({twilight("Astro","CivilTwilightMorning","3:00","6:50")}-900)
   timeCond:
     0          0
     1          0
     2          1
   timer:
     0          0
     1          0
     2          0
   timers:
     0           0  1
     1           2
   trigger:
   triggertime:
     1660592520:
       localtime  1660592520
       hash:
     1660618080:
       localtime  1660618080
       hash:
     1660619879:
       localtime  1660619879
       hash:
   uiState:
   uiTable:
Attributes:
   room     


Außen Sensor
Internals:
   DEF        3C
   FUUID      6078abaf-f33f-87a8-f274-a6f9440d41c8ee65
   IODev      myJeeLink
   LASTInputDev myJeeLink
   LaCrosse_lastRcv 2022-08-15 10:48:55
   MSGCNT     91607
   NAME       LaCrosse_16
   NR         61
   STATE      T: 31.2 H: 38
   TYPE       LaCrosse
   addr       3C
   battery_new 0
   corr1      0
   corr2      0
   eventCount 1839
   myJeeLink_MSGCNT 91635
   myJeeLink_RAWMSG OK 9 60 1 5 32 38
   myJeeLink_TIME 2022-08-15 10:48:55
   previousH  38
   previousT  31.2
   sensorType 0=T(H)
   READINGS:
     2022-08-07 06:07:35   IODev           myJeeLink
     2022-08-15 10:48:55   battery         ok
     2022-08-15 10:48:55   humidity        38
     2022-08-15 10:48:55   state           T: 31.2 H: 38
     2022-08-15 10:48:55   temperature     31.2
Attributes:
   IODev      myJeeLink
   alias      Draußen
   doAverage  1
   event-on-change-reading temperature:0.2,humidity:2
   room       Draußen,Sensoren


Zimmer Sensor:
Internals:
   DEF        26
   FUUID      607c91e0-f33f-87a8-ad69-5d9a2105b44b3cb9
   IODev      myJeeLink
   LASTInputDev myJeeLink
   LaCrosse_lastRcv 2022-08-15 10:50:55
   MSGCNT     86958
   NAME       LaCrosse_18
   NR         71
   STATE      T: 26.2 H: 51
   TYPE       LaCrosse
   addr       26
   battery_new 0
   corr1      0
   corr2      0
   eventCount 121
   myJeeLink_MSGCNT 86984
   myJeeLink_RAWMSG OK 9 38 1 4 238 51
   myJeeLink_TIME 2022-08-15 10:50:55
   previousH  51
   previousT  26.2
   sensorType 0=T(H)
   READINGS:
     2022-08-07 06:07:35   IODev           myJeeLink
     2022-08-15 10:50:55   battery         ok
     2022-08-15 10:50:55   humidity        51
     2022-08-15 10:11:49   state           T: 26.2 H: 51
     2022-08-15 10:50:55   temperature     26.2
Attributes:
   IODev      myJeeLink
   alias      Elternzimmer
   event-on-change-reading temperature:0.2,humidity:2
   room       Obergeschoss,Sensoren


Eins ist mir gerade noch aufgefallen ich habe Event on change Reading gesetzt macht das vielleicht die Probleme?


Damian

Meine Empfehlung: Versuche alles, was für "hoch" wichtig ist in die erste Bedingung zu packen und dann nur noch DOELSE (ohne Bedingung) für "runter" zu nehmen.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Per

Wenn ich solche Fehler suche, zerpflücke ich das in einzelne DOIF und schaue, ob sie jeweils das machen, was sie sollen. Und natürlich mit Dummy, wegen dem WAF. Und der Umwelt ;)
Außerdem kann dann auch mit den Zeiten so arbeiten, dass man nicht nur 2x im Monat (;)) einen Effekt sieht.