[gelöst] DOIF schaltet nicht mehr

Begonnen von der_da, 22 April 2018, 12:23:34

Vorheriges Thema - Nächstes Thema

der_da

Hallo liebe Forumsler,
ich habe seit Ewigkeiten ein DOIF am laufen, dass ich für die Steuerung meiner Rollladen-Beschattung nutze. Dabei werte ich die Temperatur auf der Terrasse aus und habe einen Dummy für den Schwellwert zum Schalten definiert. Außerdem wird durch den Wait-Parameter der 1.,2.,4. und 5. Zweig um 900 Sekunden verzögert, um ein ständiges Schalten zu verhindern. Im Herbst letzten Jahres habe ich die bis dahin funktionierende Beschattung deaktiviert. Da nun wieder heiße Tage kommen, habe ich sie wieder aktiviert (keine weiteren Änderungen meinerseits). Trotzdem schaltet das DOIF nicht mehr wie früher. Genau genommen schalten der dritte un der sechste Zweig nicht mehr - die dafür sorgen sollen, das mittags um 12:00 Uhr, wenn die Sonne herumgewandert ist, der Dummy du_Hitze_Ost per (Zeit-)Definition wieder auf "kalt" springt und damit die Rollläden dort wieder hoch fahren. Gab es irgendwelche internen Änderungen, die durch ein Update hereinkamen? Oder was kann der Grund für das Nichtfunktionieren sein?
Hier mein DOIF:
([?07:45-12:00|8] and [Terrasse:temperature]> [du_Schwellwert_Hitze_Ost]) (set du_Hitze_Ost heiss)
DOELSEIF
([?07:45-12:00|8] and [Terrasse:temperature]< ([du_Schwellwert_Hitze_Ost]-1)) (set du_Hitze_Ost kalt)
DOELSEIF
([12:01-07:44|8]) (set du_Hitze_Ost kalt)
DOELSEIF
([?08:45-12:00|7] and [Terrasse:temperature]> [du_Schwellwert_Hitze_Ost]) (set du_Hitze_Ost heiss)
DOELSEIF
([?08:45-12:00|7] and [Terrasse:temperature]< ([du_Schwellwert_Hitze_Ost]-1)) (set du_Hitze_Ost kalt)
DOELSEIF
([12:01-08:44|7]) (set du_Hitze_Ost kalt)

Damian

Mit der Definition allein wird dir keiner hier helfen können.
Am besten list des Moduls im vermeintlichen Zustand posten.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

der_da

#2
Zitat von: Damian am 22 April 2018, 13:40:16
Am besten list des Moduls im vermeintlichen Zustand posten.
OK, wenn du meinst, dass da mehr Informationen drin stehen, die helfen können.

Internals:
   DEF        ([?07:45-12:00|8] and [Terrasse:temperature]> [du_Schwellwert_Hitze_Ost]) (set du_Hitze_Ost heiss)
DOELSEIF
([?07:45-12:00|8] and [Terrasse:temperature]< ([du_Schwellwert_Hitze_Ost]-1)) (set du_Hitze_Ost kalt)
DOELSEIF
([12:01-07:44|8]) (set du_Hitze_Ost kalt)
DOELSEIF
([?08:45-12:00|7] and [Terrasse:temperature]> [du_Schwellwert_Hitze_Ost]) (set du_Hitze_Ost heiss)
DOELSEIF
([?08:45-12:00|7] and [Terrasse:temperature]< ([du_Schwellwert_Hitze_Ost]-1)) (set du_Hitze_Ost kalt)
DOELSEIF
([12:01-08:44|7]) (set du_Hitze_Ost kalt)
   MODEL      FHEM
   NAME       di_Temperatur_Ost
   NR         389
   NTFY_ORDER 50-di_Temperatur_Ost
   STATE      cmd_6
   TYPE       DOIF
   READINGS:
     2018-04-22 15:32:20   Device          Terrasse
     2018-04-22 12:12:29   cmd             6
     2018-04-22 12:12:29   cmd_event       set_cmd_6
     2018-04-22 12:12:29   cmd_nr          6
     2018-04-22 15:32:20   e_Terrasse_temperature 26.7
     2018-04-22 12:12:29   state           cmd_6
     2018-04-22 12:00:00   timer_01_c01    23.04.2018 07:45:00|8
     2018-04-22 12:00:00   timer_02_c01    23.04.2018 12:00:00|8
     2018-04-22 12:00:00   timer_03_c02    23.04.2018 07:45:00|8
     2018-04-22 12:00:00   timer_04_c02    23.04.2018 12:00:00|8
     2018-04-22 07:44:00   timer_05_c03    23.04.2018 12:01:00|8
     2018-04-22 07:44:00   timer_06_c03    23.04.2018 07:44:00|8
     2018-04-22 12:00:00   timer_07_c04    23.04.2018 08:45:00|7
     2018-04-22 12:00:00   timer_08_c04    23.04.2018 12:00:00|7
     2018-04-22 12:00:00   timer_09_c05    23.04.2018 08:45:00|7
     2018-04-22 12:00:00   timer_10_c05    23.04.2018 12:00:00|7
     2018-04-22 08:44:00   timer_11_c06    23.04.2018 12:01:00|7
     2018-04-22 08:44:00   timer_12_c06    23.04.2018 08:44:00|7
     2018-04-22 10:59:10   wait_timer      no timer
   Regex:
   condition:
     0          DOIF_time($hash,0,1,$wday,$hms,"8") and ReadingValDoIf($hash,'Terrasse','temperature')> InternalDoIf($hash,'du_Schwellwert_Hitze_Ost','STATE')
     1          DOIF_time($hash,2,3,$wday,$hms,"8") and ReadingValDoIf($hash,'Terrasse','temperature')< (InternalDoIf($hash,'du_Schwellwert_Hitze_Ost','STATE')-1)
     2          DOIF_time($hash,4,5,$wday,$hms,"8")
     3          DOIF_time($hash,6,7,$wday,$hms,"7") and ReadingValDoIf($hash,'Terrasse','temperature')> InternalDoIf($hash,'du_Schwellwert_Hitze_Ost','STATE')
     4          DOIF_time($hash,8,9,$wday,$hms,"7") and ReadingValDoIf($hash,'Terrasse','temperature')< (InternalDoIf($hash,'du_Schwellwert_Hitze_Ost','STATE')-1)
     5          DOIF_time($hash,10,11,$wday,$hms,"7")
   days:
     0          8
     1          8
     10         7
     11         7
     2          8
     3          8
     4          8
     5          8
     6          7
     7          7
     8          7
     9          7
   devices:
     0           Terrasse du_Schwellwert_Hitze_Ost
     1           Terrasse du_Schwellwert_Hitze_Ost
     3           Terrasse du_Schwellwert_Hitze_Ost
     4           Terrasse du_Schwellwert_Hitze_Ost
     all         Terrasse du_Schwellwert_Hitze_Ost
   do:
     0:
       0          set du_Hitze_Ost heiss
     1:
       0          set du_Hitze_Ost kalt
     2:
       0          set du_Hitze_Ost kalt
     3:
       0          set du_Hitze_Ost heiss
     4:
       0          set du_Hitze_Ost kalt
     5:
       0          set du_Hitze_Ost kalt
     6:
   helper:
     DOIF_Readings_events
     DOIF_eventas
     event      T: 26.7 H: 35
     globalinit 1
     last_timer 12
     sleepdevice Terrasse
     sleepsubtimer -1
     sleeptimer -1
     timerdev   Terrasse
     timerevent T: 27.7 H: 35
     triggerDev Terrasse
     timerevents:
       T: 27.7 H: 35
     timereventsState:
       state: T: 27.7 H: 35
     triggerEvents:
       T: 26.7 H: 35
     triggerEventsState:
       state: T: 26.7 H: 35
   internals:
     0           du_Schwellwert_Hitze_Ost:STATE
     1           du_Schwellwert_Hitze_Ost:STATE
     3           du_Schwellwert_Hitze_Ost:STATE
     4           du_Schwellwert_Hitze_Ost:STATE
     all         du_Schwellwert_Hitze_Ost:STATE
   interval:
     0          -1
     1          0
     10         -1
     11         10
     2          -1
     3          2
     4          -1
     5          4
     6          -1
     7          6
     8          -1
     9          8
   itimer:
   localtime:
     0          1524462300
     1          1524477600
     10         1524477660
     11         1524465840
     2          1524462300
     3          1524477600
     4          1524477660
     5          1524462240
     6          1524465900
     7          1524477600
     8          1524465900
     9          1524477600
   perlblock:
   readings:
     0           Terrasse:temperature
     1           Terrasse:temperature
     3           Terrasse:temperature
     4           Terrasse:temperature
     all         Terrasse:temperature
   realtime:
     0          07:45:00
     1          12:00:00
     10         12:01:00
     11         08:44:00
     2          07:45:00
     3          12:00:00
     4          12:01:00
     5          07:44:00
     6          08:45:00
     7          12:00:00
     8          08:45:00
     9          12:00:00
   time:
     0          07:45:00
     1          12:00:00
     10         12:01:00
     11         08:44:00
     2          07:45:00
     3          12:00:00
     4          12:01:00
     5          07:44:00
     6          08:45:00
     7          12:00:00
     8          08:45:00
     9          12:00:00
   timeCond:
     0          0
     1          0
     10         5
     11         5
     2          1
     3          1
     4          2
     5          2
     6          3
     7          3
     8          4
     9          4
   timer:
     0          0
     1          0
     10         0
     11         0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
     8          0
     9          0
   timers:
     2           4  5
     5           10  11
   trigger:
   triggertime:
     1524462240:
       localtime  1524462240
       hash:
     1524462300:
       localtime  1524462300
       hash:
     1524465840:
       localtime  1524465840
       hash:
     1524465900:
       localtime  1524465900
       hash:
     1524477600:
       localtime  1524477600
       hash:
     1524477660:
       localtime  1524477660
       hash:
   uiState:
   uiTable:
Attributes:
   wait       900:900:0:900:900:0

Ich habe um 12:12 Uhr manuell den Zweig 6 aufgerufen. Eigentlich hätte das um 12:01 Uhr automatisch passieren sollen (und hat den ganzen letzten Sommer auch so funktioniert).

Kharim

Ich hab zwar von DOIF (noch) nicht die Ahnung,
aber laut Commandref sollte das doch so aussehen:


Indirekte Zeitangaben lassen sich mit Wochentagangaben kombinieren, z. B.:

define di_time DOIF ([[begin]-[end]|7]) (set radio on) DOELSE (set radio off)


Klammerfehler?
Raspberry Pi 2 + Minibian + 2x MAX Cube CUN (868/433Mhz) + Thermostate + Fensterkontakte + Taster+RGB-LED Band über pigpiod + TFA Sensoren 30.3169/3125
Raspberry Pi 2 + Minibian +Z-Wave (USB) + Bewegungsmelder + Fensterkontakt + Sirene + SMS Steuer-/Benachrichtigung (ohne Internet)

der_da

Zitat von: Kharim am 22 April 2018, 16:02:18
... aber laut Commandref sollte das doch so aussehen:


Indirekte Zeitangaben lassen sich mit Wochentagangaben kombinieren, z. B.:

define di_time DOIF ([[begin]-[end]|7]) (set radio on) DOELSE (set radio off)


Klammerfehler?
Hmm, mein Problem ist ja der dritte und sechste Zweig. Die anderen (mit den Zeiten und Wochentagen) funktionieren ja.
Zumal ich nicht weiß, wie ich dann das mit dem führenden Fragezeichen schreiben sollte, schließlich soll der Zeitpunkt da nicht als Schaltbedingung gelten.

So habe ich den dritten Zweig mal geändert, es wurde aber trotzdem nicht wieder "kalt", obwohl es nach 12:00 Uhr und vor 07:44Uhr war.
([12:01]-[07:44]) (set du_Hitze_Ost kalt)

Ellert

Zitat von: der_da am 22 April 2018, 15:36:39
OK, wenn du meinst, dass da mehr Informationen drin stehen, die helfen können.

Internals:
   DEF        ([?07:45-12:00|8] and [Terrasse:temperature]> [du_Schwellwert_Hitze_Ost]) (set du_Hitze_Ost heiss)
DOELSEIF
([?07:45-12:00|8] and [Terrasse:temperature]< ([du_Schwellwert_Hitze_Ost]-1)) (set du_Hitze_Ost kalt)
DOELSEIF
([12:01-07:44|8]) (set du_Hitze_Ost kalt)
DOELSEIF
([?08:45-12:00|7] and [Terrasse:temperature]> [du_Schwellwert_Hitze_Ost]) (set du_Hitze_Ost heiss)
DOELSEIF
([?08:45-12:00|7] and [Terrasse:temperature]< ([du_Schwellwert_Hitze_Ost]-1)) (set du_Hitze_Ost kalt)
DOELSEIF
([12:01-08:44|7]) (set du_Hitze_Ost kalt)
   MODEL      FHEM
   NAME       di_Temperatur_Ost
   NR         389
   NTFY_ORDER 50-di_Temperatur_Ost
   STATE      cmd_6
   TYPE       DOIF
   READINGS:
     2018-04-22 15:32:20   Device          Terrasse
     2018-04-22 12:12:29   cmd             6
     2018-04-22 12:12:29   cmd_event       set_cmd_6
     2018-04-22 12:12:29   cmd_nr          6
     2018-04-22 15:32:20   e_Terrasse_temperature 26.7
     2018-04-22 12:12:29   state           cmd_6
     2018-04-22 12:00:00   timer_01_c01    23.04.2018 07:45:00|8
     2018-04-22 12:00:00   timer_02_c01    23.04.2018 12:00:00|8
     2018-04-22 12:00:00   timer_03_c02    23.04.2018 07:45:00|8
     2018-04-22 12:00:00   timer_04_c02    23.04.2018 12:00:00|8
     2018-04-22 07:44:00   timer_05_c03    23.04.2018 12:01:00|8
     2018-04-22 07:44:00   timer_06_c03    23.04.2018 07:44:00|8
     2018-04-22 12:00:00   timer_07_c04    23.04.2018 08:45:00|7
     2018-04-22 12:00:00   timer_08_c04    23.04.2018 12:00:00|7
     2018-04-22 12:00:00   timer_09_c05    23.04.2018 08:45:00|7
     2018-04-22 12:00:00   timer_10_c05    23.04.2018 12:00:00|7
     2018-04-22 08:44:00   timer_11_c06    23.04.2018 12:01:00|7
     2018-04-22 08:44:00   timer_12_c06    23.04.2018 08:44:00|7
     2018-04-22 10:59:10   wait_timer      no timer
   Regex:
   condition:
     0          DOIF_time($hash,0,1,$wday,$hms,"8") and ReadingValDoIf($hash,'Terrasse','temperature')> InternalDoIf($hash,'du_Schwellwert_Hitze_Ost','STATE')
     1          DOIF_time($hash,2,3,$wday,$hms,"8") and ReadingValDoIf($hash,'Terrasse','temperature')< (InternalDoIf($hash,'du_Schwellwert_Hitze_Ost','STATE')-1)
     2          DOIF_time($hash,4,5,$wday,$hms,"8")
     3          DOIF_time($hash,6,7,$wday,$hms,"7") and ReadingValDoIf($hash,'Terrasse','temperature')> InternalDoIf($hash,'du_Schwellwert_Hitze_Ost','STATE')
     4          DOIF_time($hash,8,9,$wday,$hms,"7") and ReadingValDoIf($hash,'Terrasse','temperature')< (InternalDoIf($hash,'du_Schwellwert_Hitze_Ost','STATE')-1)
     5          DOIF_time($hash,10,11,$wday,$hms,"7")
   days:
     0          8
     1          8
     10         7
     11         7
     2          8
     3          8
     4          8
     5          8
     6          7
     7          7
     8          7
     9          7
   devices:
     0           Terrasse du_Schwellwert_Hitze_Ost
     1           Terrasse du_Schwellwert_Hitze_Ost
     3           Terrasse du_Schwellwert_Hitze_Ost
     4           Terrasse du_Schwellwert_Hitze_Ost
     all         Terrasse du_Schwellwert_Hitze_Ost
   do:
     0:
       0          set du_Hitze_Ost heiss
     1:
       0          set du_Hitze_Ost kalt
     2:
       0          set du_Hitze_Ost kalt
     3:
       0          set du_Hitze_Ost heiss
     4:
       0          set du_Hitze_Ost kalt
     5:
       0          set du_Hitze_Ost kalt
     6:
   helper:
     DOIF_Readings_events
     DOIF_eventas
     event      T: 26.7 H: 35
     globalinit 1
     last_timer 12
     sleepdevice Terrasse
     sleepsubtimer -1
     sleeptimer -1
     timerdev   Terrasse
     timerevent T: 27.7 H: 35
     triggerDev Terrasse
     timerevents:
       T: 27.7 H: 35
     timereventsState:
       state: T: 27.7 H: 35
     triggerEvents:
       T: 26.7 H: 35
     triggerEventsState:
       state: T: 26.7 H: 35
   internals:
     0           du_Schwellwert_Hitze_Ost:STATE
     1           du_Schwellwert_Hitze_Ost:STATE
     3           du_Schwellwert_Hitze_Ost:STATE
     4           du_Schwellwert_Hitze_Ost:STATE
     all         du_Schwellwert_Hitze_Ost:STATE
   interval:
     0          -1
     1          0
     10         -1
     11         10
     2          -1
     3          2
     4          -1
     5          4
     6          -1
     7          6
     8          -1
     9          8
   itimer:
   localtime:
     0          1524462300
     1          1524477600
     10         1524477660
     11         1524465840
     2          1524462300
     3          1524477600
     4          1524477660
     5          1524462240
     6          1524465900
     7          1524477600
     8          1524465900
     9          1524477600
   perlblock:
   readings:
     0           Terrasse:temperature
     1           Terrasse:temperature
     3           Terrasse:temperature
     4           Terrasse:temperature
     all         Terrasse:temperature
   realtime:
     0          07:45:00
     1          12:00:00
     10         12:01:00
     11         08:44:00
     2          07:45:00
     3          12:00:00
     4          12:01:00
     5          07:44:00
     6          08:45:00
     7          12:00:00
     8          08:45:00
     9          12:00:00
   time:
     0          07:45:00
     1          12:00:00
     10         12:01:00
     11         08:44:00
     2          07:45:00
     3          12:00:00
     4          12:01:00
     5          07:44:00
     6          08:45:00
     7          12:00:00
     8          08:45:00
     9          12:00:00
   timeCond:
     0          0
     1          0
     10         5
     11         5
     2          1
     3          1
     4          2
     5          2
     6          3
     7          3
     8          4
     9          4
   timer:
     0          0
     1          0
     10         0
     11         0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
     8          0
     9          0
   timers:
     2           4  5
     5           10  11
   trigger:
   triggertime:
     1524462240:
       localtime  1524462240
       hash:
     1524462300:
       localtime  1524462300
       hash:
     1524465840:
       localtime  1524465840
       hash:
     1524465900:
       localtime  1524465900
       hash:
     1524477600:
       localtime  1524477600
       hash:
     1524477660:
       localtime  1524477660
       hash:
   uiState:
   uiTable:
Attributes:
   wait       900:900:0:900:900:0

Ich habe um 12:12 Uhr manuell den Zweig 6 aufgerufen. Eigentlich hätte das um 12:01 Uhr automatisch passieren sollen (und hat den ganzen letzten Sommer auch so funktioniert).
Um meine Vermutung zu verifizieren, poste mal ein Listing von du_Schwellwert_Hitze_Ost

der_da

Zitat von: Ellert am 22 April 2018, 17:19:03
Um meine Vermutung zu verifizieren, poste mal ein Listing von du_Schwellwert_Hitze_Ost
Internals:
   NAME       du_Schwellwert_Hitze_Ost
   NR         405
   STATE      24
   TYPE       dummy
   READINGS:
     2016-05-23 10:08:17   state           24
Attributes:
   alias      Schwellwert Beschattung Ost (°C)
   group      Einstellungen Rollladen
   icon       temp_temperature
   room       Rollladen,Unsorted
   setList    state:slider,23,1,28
   sortby     24
   webCmd     state

Kharim

Zitat von: der_da am 22 April 2018, 17:11:52
Hmm, mein Problem ist ja der dritte und sechste Zweig. Die anderen (mit den Zeiten und Wochentagen) funktionieren ja.
Zumal ich nicht weiß, wie ich dann das mit dem führenden Fragezeichen schreiben sollte, schließlich soll der Zeitpunkt da nicht als Schaltbedingung gelten.

So habe ich den dritten Zweig mal geändert, es wurde aber trotzdem nicht wieder "kalt", obwohl es nach 12:00 Uhr und vor 07:44Uhr war.
([12:01]-[07:44]) (set du_Hitze_Ost kalt)

Treu doof, nach Commandref würde ich hier schreiben:

([[12:01]-[07:44]|7]) (set du_Hitze_Ost kalt)
Raspberry Pi 2 + Minibian + 2x MAX Cube CUN (868/433Mhz) + Thermostate + Fensterkontakte + Taster+RGB-LED Band über pigpiod + TFA Sensoren 30.3169/3125
Raspberry Pi 2 + Minibian +Z-Wave (USB) + Bewegungsmelder + Fensterkontakt + Sirene + SMS Steuer-/Benachrichtigung (ohne Internet)

der_da

Zitat von: Kharim am 22 April 2018, 18:06:24
Treu doof, nach Commandref würde ich hier schreiben:
([[12:01]-[07:44]|7]) (set du_Hitze_Ost kalt)
Warum? Ich will JEDEN Tag, das von 12:01 bis 07:44 per Definition "kalt" ist, egal was das Thermometer anzeigt.

Ellert

#9
Zitat von: der_da am 22 April 2018, 18:02:38
Internals:
   NAME       du_Schwellwert_Hitze_Ost
   NR         405
   STATE      24
   TYPE       dummy
   READINGS:
     2016-05-23 10:08:17   state           24
Attributes:
   alias      Schwellwert Beschattung Ost (°C)
   group      Einstellungen Rollladen
   icon       temp_temperature
   room       Rollladen,Unsorted
   setList    state:slider,23,1,28
   sortby     24
   webCmd     state

Sieht für mich alles o.k. aus.

Welche DOIF-Version ist geladen?
Komplettes Update durchgeführt?
Neustart nach dem Update durchgeführt?

eisman

hi,

hatte sowas auch mal mit doif gemacht, geht aber mit sub besser:
(da das rollo sonst immer hoch und runter geht und in der nacht gehts auch mal hoch)

Rollo Steuerung(Tag,Nacht,Sonne,Manual und Beschattung :

sub WetterWerte()
{
  my $HLicht = ReadingsVal("ESPEasy_ESP34","Lux",0);
  my $HTemp  = ReadingsVal("ESPEasy_ESP34","Temperature",0);
  my $SLicht = ReadingsVal("WetterStrasse","strasselicht",0);
  my $STemp  = ReadingsVal("WetterStrasse","strassetemp",0);
  my $DruckW = ReadingsVal("WetterStrasse","luftdruck",0);
  my $RTemp  = ReadingsVal("RA_0000","rollo-temp",0);
  my $ATemp  = ReadingsVal("RA_0000","rollo-alarm-temp",0);
  my $WindW  = ReadingsVal("Yahoo","wind",0);
  my $WLicht = 0;
  my $WTemp  = 0;

  $HLicht = sprintf("%.0f", $HLicht);
  $SLicht = sprintf("%.0f", $SLicht);
  fhem("set WetterStation hof-licht " . $HLicht . ";");
  fhem("set WetterStation strasse-licht " . $SLicht . ";");
 
  if($HLicht < 600)                           {fhem("set WetterStation hof-stufe 0;");}
  elsif($HLicht >= 600 and $HLicht < 20000)   {fhem("set WetterStation hof-stufe 1;");}
  elsif($HLicht >= 20000 and  $HLicht < 50000){fhem("set WetterStation hof-stufe 2;");}
  elsif($HLicht >= 50000 and  $HLicht < 80000){fhem("set WetterStation hof-stufe 3;");}
  elsif($HLicht >= 800000)                    {fhem("set WetterStation hof-stufe 4;");}
 
  if($SLicht < 600)                           {fhem("set WetterStation strasse-stufe 0;");}
  elsif($SLicht >= 600 and $SLicht < 20000)   {fhem("set WetterStation strasse-stufe 1;");}
  elsif($SLicht >= 20000 and  $SLicht < 50000){fhem("set WetterStation strasse-stufe 2;");}
  elsif($SLicht >= 50000 and  $SLicht < 80000){fhem("set WetterStation strasse-stufe 3;");}
  elsif($SLicht >= 800000)                    {fhem("set WetterStation strasse-stufe 4;");}
 
  $WLicht = ($SLicht+$HLicht)/2;
  $WLicht = sprintf("%.0f", $WLicht);
  fhem("set WetterStation licht " . $WLicht . ";");
 
  $HTemp = sprintf("%.1f", $HTemp);
  $STemp = sprintf("%.1f", $STemp);
 
  $WTemp = ($STemp+$HTemp)/2;
  $WTemp = sprintf("%.1f", $WTemp);
  fhem("set WetterStation measured-temp " . $WTemp . ";");
  fhem("set WetterStation strasse-temp " . $STemp . ";");
  fhem("set WetterStation hof-temp " . $HTemp . ";");

  if($WTemp < $RTemp)                         {fhem("set WetterStation beschattung 0;");}
  elsif($WTemp >= $RTemp and $WTemp < $ATemp) {fhem("set WetterStation beschattung 1;");}
  elsif($WTemp >= $ATemp)                     {fhem("set WetterStation beschattung 2;");}
  fhem("set WetterStation luftdruck " . $DruckW . ";");
  fhem("set WetterStation wind " . $WindW . ";");

  return 0;
}



sub Rollo($$$)
{
  my ($Raum,$Regler,$level) = @_;
  my $RaumName  = "RA_" . $Raum . "00";
  my $RolloName = "RO_" . $Raum . $Regler;
  my $mode      = ReadingsVal($RaumName,"rollo-mode","");
  my $pct       = ReadingsVal($RolloName,"pct",0);
 
  if($mode ne "manual") {
    if($pct ne $level) {
  fhem("set " . $RolloName . " pct " . $level . ";");
  }}
  return 0;
}




sub Beschattung($$$$)
{
  my ($Temp,$Stufe,$HLicht,$SLicht) = @_;
  my $Strasse = 0;
  my $Hof     = 0;
  my $Zahl    = 0;
  my $count   = 0;
  my $Raum    = "";
  my $Rollo   = "";
  my $Tag     = "";
  my @list    = devspec2array("NAME=RO_.*");
 
  # Log 1, "Beschattung: $Temp $Stufe $HLicht $SLicht";
  if($Stufe == 0) {
    if($SLicht == 0)      {$Strasse = 0;}
      elsif($SLicht == 1) {$Strasse = 100;}
      elsif($SLicht >= 2) {$Strasse = 50;}
    if($HLicht == 0)      {$Hof     = 0;}
      elsif($HLicht == 1) {$Hof     = 100;}
      elsif($HLicht >= 2) {$Hof     = 50;}
  }
  elsif($Stufe == 1) {
    if($SLicht == 0)      {$Strasse = 0;}
      elsif($SLicht == 1) {$Strasse = 100;}
      elsif($SLicht == 2) {$Strasse = 50;}
      elsif($SLicht == 3) {$Strasse = 30;}
      elsif($SLicht == 4) {$Strasse = 0;}
    if($HLicht == 0)      {$Hof     = 0;}
      elsif($HLicht == 1) {$Hof     = 100;}
      elsif($HLicht == 2) {$Hof     = 50;}
      elsif($HLicht == 3) {$Hof     = 30;}
      elsif($HLicht == 4) {$Hof     = 0;}
  }
  elsif($Stufe == 2)      {$Strasse = 0;$Hof = 0;}
 
  foreach my $dev (@list) {
    $count++;
$Zahl = sprintf("%02.0f",$count);
$Raum = "RA_" . $Zahl . "00";
$Rollo = "RO_" . $Zahl . "01";
    fhem("set " . $Raum . " rollo-beschattung " . ReadingsVal($Rollo,"pct",0) . ";");
$Tag = ReadingsVal($Raum,"rollo-zeit","");
if($Tag eq "tag"){
  if($count < 3){
    {Rollo($Zahl,"01",$Strasse)};
  } else {
    {Rollo($Zahl,"01",$Hof)};
  }}}
  return 0;
}


es werden 4 Fenster gesteuert
  nach Zeit
  nach Sonnenauf und untergang
  manual
  beschattung (in stufen)
die Gelbe fläche ist offen
gruss
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian, Homematic,ZigBee         / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian,MQTT                               / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

der_da

Zitat von: Ellert am 22 April 2018, 18:27:42
Welche DOIF-Version ist geladen?
Wie bekomme ich die DOIF-Version heraus?

Zitat von: Ellert am 22 April 2018, 18:27:42
Komplettes Update durchgeführt?
Neustart nach dem Update durchgeführt?
Ja und ja, am 19.04.  ;)

eisman

hi

mit (open eingeben) version
(98_DOIF.pm            16630 2018-04-17 18:28:20Z Damian)
gruss
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian, Homematic,ZigBee         / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian,MQTT                               / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

Damian

Durch das manuelle Setzen von cmd_6 kann man natürlich nicht mehr sehen welchen Zustand das Modul zuvor hatte. Grundsätzlich ist es sinnvoller gleiche Ausführungsbefehle zusammenzufassen, bei dir sind es nur zwei:

DOIF (([?07:45-12:00|8] or [?08:45-12:00|7]) and [Terrasse:temperature] > [du_Schwellwert_Hitze_Ost])
  (set du_Hitze_Ost heiss)
DOELSEIF (([?07:45-12:00|8] or [?08:45-12:00|7]) and [Terrasse:temperature] < ([du_Schwellwert_Hitze_Ost]-1) or [12:01-07:44|8] or [12:01-08:44|7])
(set du_Hitze_Ost kalt)


Damit sieht die Sache um einiges übersichtlicher aus.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

Zitat von: der_da am 22 April 2018, 19:00:34
Wie bekomme ich die DOIF-Version heraus?
Ja und ja, am 19.04.  ;)
Es gab kürzlich eine Änderung in der Timer-Behandlung.

Wenn Du wissen möchtest was genau passiert, könntest Du mit DOIFtools bei jedem Trigger ein Listing loggen. https://wiki.fhem.de/wiki/DOIFtools#Listings_in_DOIFtoolsLog_einschliessen