DOIF: Frage zu einer Beschattungssteuerung

Begonnen von moonsorrox, 28 Juli 2015, 13:39:07

Vorheriges Thema - Nächstes Thema

moonsorrox

Zitat von: FunkOdyssey am 14 August 2015, 15:05:25
Könntest du nicht einfach im Ausführungsteil mit einem Filter arbeiten?
set jalousie:FILTER=level>50 50
wo sollt der denn hin..?

Zitat von: Wuppi68 am 14 August 2015, 15:13:50
in meiner Beschattung habe ich sen eigentlichen set Befehl durch ein IF Konstrukt ersetzt
damit fange ich dann aber an, dass DOIF zu verstümmeln, oder nicht ? ;)
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Wuppi68

Zitat von: moonsorrox am 15 August 2015, 11:20:26
damit fange ich dann aber an, dass DOIF zu verstümmeln, oder nicht ? ;)

nicht wirklich, Du kannst es ja auch in einer 99er.pm auslagern, oder eine Notify dazu erstellen.

bei ner 99er.pm könnte es dann so aussehen

sub newSet($$$) {
  my ($Device, $Sollwert, $Istwert) =_@;

  if ("$Sollwert" ne "$Istwert") fhem "set $Device PCT $Sollwert";
}


so aus dem Kopf ungetestet ...
FHEM unter Proxmox als VM

Damian

Du kannst auch einfach den Zustand deines Rollladens in der DOIF-Bedingung mit "and" abfragen, z. B.

(([RolloWZmodus] eq "Beschattung" and [[du_RolloZeit_hoch]|8] or [[du_RolloZeit_hoch_WoE]|7]) and [?RollladenWZ] ne "on")
(set RollladenWZ on)
....


Gruß

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

moonsorrox

Zitat von: Damian am 15 August 2015, 14:20:32
Du kannst auch einfach den Zustand deines Rollladens in der DOIF-Bedingung mit "and" abfragen, z. B.

vielen Dank das wollte ich wissen "wo" es eingetragen werden muss...
Ich werde das mal einbauen und beobachten und berichten..!  :)
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Damian

Zitat von: moonsorrox am 15 August 2015, 15:21:55
vielen Dank das wollte ich wissen "wo" es eingetragen werden muss...
Ich werde das mal einbauen und beobachten und berichten..!  :)

ja, allerdings sehe ich gerade einen Fehler, den du vorher schon drin hattest, denn auch am Wochenende soll wahrscheinlich dein RolloWZmodus gelten, dann eher so:

([RolloWZmodus] eq "Beschattung" and ([[du_RolloZeit_hoch]|8] or [[du_RolloZeit_hoch_WoE]|7]) and [?RollladenWZ] ne "on")...

Gruß

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

moonsorrox

Zitat von: Damian am 15 August 2015, 15:37:43
ja, allerdings sehe ich gerade einen Fehler, den du vorher schon drin hattest, denn auch am Wochenende soll wahrscheinlich dein RolloWZmodus gelten, dann eher so:

([RolloWZmodus] eq "Beschattung" and ([[du_RolloZeit_hoch]|8] or [[du_RolloZeit_hoch_WoE]|7]) and [?RollladenWZ] ne "on")...

Gruß

Damian
OK Damian Danke  :D
ja die Klammersetzung ist manchmal nicht so einfach... bisher geht das jetzt alles ;)
Im Schlafzimmer setze ich dies nun auch ein, in etwas veränderter Form und läuft auch bisher....
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

moonsorrox

@Damian

bisher war ich eigentlich zufrieden mit meinem DOIF was die Beschattung angeht, aber.....!

Heute Nacht ist folgendes passiert, so gegen 0. 40 Uhr sind meine Rollläden im Wohnzimmer hoch gefahren  :-\
Ich war doch sehr erschrocken durch die Fahrgeräusche  ;) aber da die Temperatur um diese Zeit unter meine eingestellte Temperatur 25° gefallen ist, kam wohl der Trigger und die Dinger fuhren hoch...
Mein di_Temperatur steht momentan auf 25°

Das heißt ich muss wohl im DOIF etwas nachbessern, ich weiß aber leider gerade momentan nicht was oder wie ich es am besten machen sollte.
Hast du einen Einfall..?

Dazu folgendes ich dachte eigentlich das durch die Zeitbegrenzung im {sunset_abs("CIVIL",-100,"16:35","22:20")}  dieses nicht passiert und es ist wohl bisher nicht vorgekommen das die Temperatur um diese Zeit unter meinen Wert von 25° gefallen ist.
Stehe grad ein wenig auf dem Schlauch... wo ich drehen muss... :-\


Ich hänge dir mal mein aktuelles List an und das List di_Temperatur, evtl. kannst du mir einen Tipp geben, würde mir sehr helfen... ;)

Internals:
   CFGFN      ./FHEM/Wohnzimmer.cfg
   DEF        ([RolloWZmodus] eq "Beschattung" and ([[du_RolloZeit_hoch]|8] or [[du_RolloZeit_hoch_WoE]|7]) and [?RollladenWZ] ne "on")
(set RollladenWZ on)
DOELSEIF([RolloWZmodus] eq "Beschattung" and ([di_Temperatur] eq "warm" and [07:15-15:45] and [di_Helligkeit] eq "hell"))
(set RollladenWZ 50)
DOELSEIF ([RolloWZmodus] eq "Beschattung" and ([di_Temperatur] eq "kalt" and [15:45-{sunset_abs("CIVIL",-1240,"15:46","16:20")}] or [di_Helligkeit] eq "dunkel" or [[du_RolloZeitWZ_hoch_B]|78]))
(set RollladenWZ on)
DOELSEIF ([RolloWZmodus] eq "Beschattung" and [{sunset_abs("CIVIL",-100,"16:35","22:20")}])
(set RollladenWZ off)


   NAME       di_RollladenWZ_B
   NR         392
   NTFY_ORDER 50-di_RollladenWZ_B
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-09-01 00:36:30   Device          di_Temperatur
     2015-09-01 07:15:00   cmd_event       timer_1
     2015-09-01 07:15:00   cmd_nr          1
     2015-08-31 17:33:38   e_di_Helligkeit_STATE dunkel
     2015-09-01 00:36:30   e_di_Temperatur_STATE kalt
     2015-09-01 07:15:00   state           cmd_1
     2015-09-01 07:15:00   timer_1_c1      02.09.2015 07:15:00|8
     2015-09-01 07:30:03   timer_2_c1      02.09.2015 07:30:00|7
     2015-09-01 07:15:00   timer_3_c2      02.09.2015 07:15:00
     2015-08-31 17:59:16   timer_4_c2      01.09.2015 15:45:00
     2015-08-31 17:59:16   timer_5_c3      01.09.2015 15:45:00
     2015-08-31 17:59:16   timer_6_c3      01.09.2015 16:19:59
     2015-08-31 17:59:16   timer_7_c3      01.09.2015 16:00:00|78
     2015-08-31 20:48:16   timer_8_c4      01.09.2015 20:45:51
     2015-08-31 17:58:51   wait_timer      no timer
   Condition:
     0          InternalDoIf('RolloWZmodus','STATE','') eq "Beschattung" and (DOIF_time_once($hash,$hash->{timer}{0},$wday,"8") or DOIF_time_once($hash,$hash->{timer}{1},$wday,"7")) and InternalDoIf('RollladenWZ','STATE','') ne "on"
     1          InternalDoIf('RolloWZmodus','STATE','') eq "Beschattung" and (InternalDoIf('di_Temperatur','STATE','') eq "warm" and DOIF_time($hash,$hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,"") and InternalDoIf('di_Helligkeit','STATE','') eq "hell")
     2          InternalDoIf('RolloWZmodus','STATE','') eq "Beschattung" and (InternalDoIf('di_Temperatur','STATE','') eq "kalt" and DOIF_time($hash,$hash->{realtime}{4},$hash->{realtime}{5},$wday,$hms,"") or InternalDoIf('di_Helligkeit','STATE','') eq "dunkel" or DOIF_time_once($hash,$hash->{timer}{6},$wday,"78"))
     3          InternalDoIf('RolloWZmodus','STATE','') eq "Beschattung" and DOIF_time_once($hash,$hash->{timer}{7},$wday,"")
   Days:
     0          8
     1          7
     6          78
   Devices:
     0           RolloWZmodus
     1           RolloWZmodus di_Temperatur di_Helligkeit
     2           RolloWZmodus di_Temperatur di_Helligkeit
     3           RolloWZmodus
     all         RolloWZmodus di_Temperatur di_Helligkeit
   Do:
     0:
       0          set RollladenWZ on
     1:
       0          set RollladenWZ 50
     2:
       0          set RollladenWZ on
     3:
       0          set RollladenWZ off
     4:
   Helper:
     globalinit 1
     last_timer 8
     sleeptimer -1
   Internals:
     0           RolloWZmodus:STATE
     1           RolloWZmodus:STATE di_Temperatur:STATE di_Helligkeit:STATE
     2           RolloWZmodus:STATE di_Temperatur:STATE di_Helligkeit:STATE
     3           RolloWZmodus:STATE
     all         RolloWZmodus:STATE di_Temperatur:STATE di_Helligkeit:STATE
   Itimer:
     all         du_RolloZeit_hoch du_RolloZeit_hoch_WoE du_RolloZeitWZ_hoch_B
   Readings:
   Realtime:
     0          07:15:00
     1          07:30:00
     2          07:15:00
     3          15:45:00
     4          15:45:00
     5          16:19:59
     6          16:00:00
     7          20:45:51
   State:
   Time:
     0          [du_RolloZeit_hoch]
     1          [du_RolloZeit_hoch_WoE]
     2          07:15:00
     3          15:45:00
     4          15:45:00
     5          {sunset_abs("CIVIL",-1240,"15:46","16:20")}
     6          [du_RolloZeitWZ_hoch_B]
     7          {sunset_abs("CIVIL",-100,"16:35","22:20")}
   Timecond:
     0          0
     1          0
     2          1
     3          1
     4          2
     5          2
     6          2
     7          3
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
   Timerfunc:
   Timers:
     0           0  1
     1           2  3
     2           4  5  6
     3           7
   Trigger:
Attributes:
   do         always
   group      Rollläden
   wait       900:900


list di_Temperatur
Internals:
   CFGFN      ./FHEM/Obergeschoss.cfg
   DEF        ([Aussensensor_Terrasse:temperature] > 25)
   NAME       di_Temperatur
   NR         1549
   NTFY_ORDER 50-di_Temperatur
   STATE      kalt
   TYPE       DOIF
   Readings:
     2015-09-01 08:34:33   Device          Aussensensor_Terrasse
     2015-09-01 00:36:30   cmd_event       Aussensensor_Terrasse
     2015-09-01 00:36:30   cmd_nr          2
     2015-09-01 08:34:33   e_Aussensensor_Terrasse_temperature 20.1
     2015-09-01 00:36:30   state           kalt
     2015-09-01 00:36:30   wait_timer      no timer
   Condition:
     0          ReadingValDoIf('Aussensensor_Terrasse','temperature','') > 25
   Devices:
     0           Aussensensor_Terrasse
     all         Aussensensor_Terrasse
   Do:
     0:
       0
     1:
   Helper:
     globalinit 1
     last_timer 0
     sleepdevice Aussensensor_Terrasse
     sleepsubtimer -1
     sleeptimer -1
   Internals:
   Itimer:
   Readings:
     0           Aussensensor_Terrasse:temperature
     all         Aussensensor_Terrasse:temperature
   State:
   Trigger:
Attributes:
   alias      Temperatur Beschattung > 25°
   cmdState   warm|kalt
   group      Rollläden OG
   icon       temp_temperature@#F0E68C
   room       Automation,Schlafzimmer
   sortby     05
   wait       120:120
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Ralli

Du hast and und or gleichberechtigt nebeneinander. Versuche mal, die zusammengehörigen logischen Bedingungen einzuklammern.
Gruß,
Ralli

Proxmox 8.4 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte RaspberryMatic (3.83.6.20250705) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

moonsorrox

du meinst sicher diesen Bereich:
DOELSEIF ([RolloWZmodus] eq "Beschattung" and ([di_Temperatur] eq "kalt" and [15:45-{sunset_abs("CIVIL",-1240,"15:46","16:20")}] or [di_Helligkeit] eq "dunkel" or [[du_RolloZeitWZ_hoch_B]|78]))
(set RollladenWZ on)


hab das jetzt mal so gemacht
DOELSEIF ([RolloWZmodus] eq "Beschattung" and [di_Temperatur] eq "kalt" and (([15:45-{sunset_abs("CIVIL",-1240,"15:46","16:20")}] or [di_Helligkeit] eq "dunkel" or [[du_RolloZeitWZ_hoch_B]|78])))
(set RollladenWZ on)


wenn ich mich recht erinnere hatte ich das glaube ich schon mal und funktionierte nicht zufriedenstellend

Es gäbe aber noch diese Variante:
DOELSEIF ([RolloWZmodus] eq "Beschattung" and ([di_Temperatur] eq "kalt" and ([15:45-{sunset_abs("CIVIL",-1240,"15:46","16:20")}] or [di_Helligkeit] eq "dunkel" or [[du_RolloZeitWZ_hoch_B]|78])))
(set RollladenWZ on)



Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Damian

Man muss halt wissen, wie die Prioritäten in der Bedingung sind. Das kann man z. B. hier nachlesen.
https://www.hscripts.com/tutorials/perl/operators/oprpreced.php

Zuerst sind die Vergleiche dran mit eq oder ne usw. dann and und dann erst or. Wenn man anders binden will, muss man entsprechend klammern.

Typische Angaben bei DOIF sind Trigger in einem bestimmten Zeitbereich, diese werden logischerweise mit and verknüpft, z. B. ... [08:00-10:00] and [Device]...

Gruß

Damian


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

moonsorrox

es ist jetzt so das er einmal so wie es das DOIF auch im Code hat um 15.45 Uhr triggert und der triggert ein weiteres mal um 16 Uhr, hierbei fährt er aber auch nur ganz kurz nach oben. Fahren sollte er aber auf "on"

Dies stört mich jetzt so noch nicht....
was das Problem war und wohl auch noch ist, dass er des Nachts so wie es von mir oben beschrieben wurde um 0.36 Uhr die Rollläden nach oben gefahren hat, obwohl er zu dieser Zeit gar nicht mehr fahren sollte...!
Hierfür war der Auslösetrigger die Temperatur die an dem besagten Tag um 0.36 Uhr unter 25° fiel...

Das möchte ich demnächst vermeiden... hier fehlt mir etwas der Ansatzpunkt
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Damian

Zitat von: moonsorrox am 03 September 2015, 17:25:36
es ist jetzt so das er einmal so wie es das DOIF auch im Code hat um 15.45 Uhr triggert und der triggert ein weiteres mal um 16 Uhr, hierbei fährt er aber auch nur ganz kurz nach oben. Fahren sollte er aber auf "on"

Dies stört mich jetzt so noch nicht....
was das Problem war und wohl auch noch ist, dass er des Nachts so wie es von mir oben beschrieben wurde um 0.36 Uhr die Rollläden nach oben gefahren hat, obwohl er zu dieser Zeit gar nicht mehr fahren sollte...!
Hierfür war der Auslösetrigger die Temperatur die an dem besagten Tag um 0.36 Uhr unter 25° fiel...

Das möchte ich demnächst vermeiden... hier fehlt mir etwas der Ansatzpunkt

mit

... ([RolloWZmodus] eq "Beschattung" and ([di_Temperatur] eq "kalt" and [15:45-{sunset_abs("CIVIL",-1240,"15:46","16:20")}] ...

kann dein Rollo sich nur bewegen, wenn "kalt" im angegebenen Intervall eintritt, da es eine and-Verknüpfung ist.

Gruß

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

moonsorrox

#42
Zitat von: Damian am 03 September 2015, 19:18:57
mit

... ([RolloWZmodus] eq "Beschattung" and ([di_Temperatur] eq "kalt" and [15:45-{sunset_abs("CIVIL",-1240,"15:46","16:20")}] ...

kann dein Rollo sich nur bewegen, wenn "kalt" im angegebenen Intervall eintritt, da es eine and-Verknüpfung ist.

ja klar und das ist ja auch gewollt, aber ich dachte das mit dieser Zeile:
DOELSEIF ([RolloWZmodus] eq "Beschattung" and [{sunset_abs("CIVIL",-100,"16:35","22:20")}])
(set RollladenWZ off)


es nicht passiert, da ich 22:20 als Endzeit eingetragen habe...
Dem ist wohl nicht so, da muss ich nochmals eingreifen und eine Zeit definieren, aber ich weiß im Moment leider noch nicht an welcher Stelle... :-\
Ich glaube auch ich kann diesen Teil ""CIVIL",-100,"16:35","22:20"" dann weglassen..!?

Dann werde ich mal das mit der >Endzeit so einbauen, beim eingeben hat das DOIF nicht gemeckert also werde ich das mal so probieren:
DOELSEIF ([RolloWZmodus] eq "Beschattung" and [di_Temperatur] eq "kalt" and (([?15:45-{sunset_abs("CIVIL",-1240,"15:46","16:20")}-22:20] or [di_Helligkeit] eq "dunkel" or [[du_RolloZeitWZ_hoch_B]|78])))
(set RollladenWZ on) 


in der Hoffnung das es nicht mehr passiert und die Rollläden in der Nacht hochfahren...! ;)
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM