[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

Damian

Ich habe bei mir den Fall mit der aktuellen Version nachgestellt - ohne Probleme.

Schau mal was bei dir {$we} heute in der Kommandozeile liefert.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

Zitat von: Damian am 22 April 2018, 19:27:02
Ich habe bei mir den Fall mit der aktuellen Version nachgestellt - ohne Probleme.

Schau mal was bei dir {$we} heute in der Kommandozeile liefert.
Mas mich irritiert, sind die Angaben aus dem Listing des DOIF

Zitattimerevent T: 27.7 H: 35
     timerevents:
       T: 27.7 H: 35
     timereventsState:
       state: T: 27.7 H: 35
Sind das Events, die innerhalb eine Zeitspanne eintreten?

Damian

Zitat von: Ellert am 22 April 2018, 20:16:29
Mas mich irritiert, sind die Angaben aus dem Listing des DOIF
Sind das Events, die innerhalb eine Zeitspanne eintreten?

Das ist durchaus denkbar. In der aktuellen Version wird auf alle Events von Terrasse reagiert, Stichwort "checkReadingEvents".

Allerdings kann aufgrund der Definition "ohne do always" sowie "kein DOELSE-Zweig" passieren, dass cmd_6 bereits gestern stattgefunden hat und kein anderer Zweig zwischendurch dran kam, daher wurde heute auch nichts geschaltet.

Für solche Fälle sollte man DOELSEIF ([00:00]) dranhängen, um einen Zustandswechsel für den nächsten Tag zu provozieren.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

eisman

hi,

kann es sein das DOIF ein Problem hat,
ich habe heute turnusmäßig eine Installation geprüft, die seit einem halben Jahr
ohne Probleme und Kontrolle gelaufen ist, dort hat seit zwei Tagen kein timer der DOIF ausgelöst. Bis dahin
liefen alle Schaltungen ohne Probleme (laut log wurden alle Schaltungen bis vor 2Tagen ausgeführt)

cmd_event: timer1

nach einen check all stellten sich die doifs um.

kann aber erst morgen mehr sagen

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

eisman

#19
hi,

die Antwort lautet wohl ja :-[
checkReadingEvents=??? würde aber voraussetzen das keine DOIF geht,
beide Installationen sind gleich ausgestattet!


([[RA_0100:rollo-zeit-auf]-[RA_0100:rollo-zeit-zu]] and [RA_0100:rollo-mode] eq "auto") (set RA_0100 rollo-zeit tag,{Rollo("01","01","100")})
DOELSEIF ([[RA_0100:rollo-zeit-zu]-[RA_0100:rollo-zeit-auf]] and [RA_0100:rollo-mode] eq "auto") (set RA_0100 rollo-zeit nacht,{Rollo("01","01","0")})
DOELSEIF ([{sunrise("CIVIL",0,"[RA_0100:rollo-zeit-auf]","10:00")}] and [RA_0100:rollo-mode] eq "sonne") (set RA_0100 rollo-zeit tag,{Rollo("01","01","100")})
DOELSEIF ([{sunset("CIVIL",0,"16:00","[RA_0100:rollo-zeit-zu]")}] and [RA_0100:rollo-mode] eq "sonne") (set RA_0100 rollo-zeit nacht,{Rollo("01","01","0")})



8 Rollladen die mit der Selben Funktion ausgestattet sind gehen teilweise nicht

installation 1
  ROLLO 1  SONNE cmd3 cmd4 geht
  ROLLO 2  SONNE cmd3 cmd4 geht
  ROLLO 3  AUTO   cmd1 cmd2 geht nicht
  ROLLO 4  MANU  ......
Installation 2
  ROLLO 1  SONNE cmd3 cmd4 geht
  ROLLO 2  SONNE cmd3 cmd4 geht
  ROLLO 3  AUTO   cmd1 cmd2 geht
  ROLLO 4  MANU  ......

Heizung:

([[RA_0100:temp-zeit-tag]|0123456-[RA_0100:temp-zeit-nacht]|0123456])  (set RA_0100 temp-zeit Tag,{Heizung("01","01","[RA_0100:temp-day]")})
DOELSEIF ([[RA_0100:temp-zeit-nacht]|0123456-[RA_0100:temp-zeit-tag]|0123456])  (set RA_0100 temp-zeit Nacht,{Heizung("01","01","[RA_0100:temp-night]")})


installation 1
  HZ 1  cmd1 cmd2 geht nicht
  HZ 2  cmd1 cmd2 geht nicht
  HZ 3  cmd1 cmd2 geht nicht
  HZ 4  cmd1 cmd2 geht nicht
  HZ 5  cmd1 cmd2 geht nicht

Installation 2
  HZ 1  cmd1 cmd2 geht
  HZ 2  cmd1 cmd2 geht
  HZ 3  cmd1 cmd2 geht nicht
  HZ 4  cmd1 cmd2 geht
  HZ 5  cmd1 cmd2 geht

einzige unterschied ist der DeviceName
doif ohne Zeitangaben gehen alle.

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

Ellert

Zitat von: Damian am 22 April 2018, 20:29:59
Das ist durchaus denkbar. In der aktuellen Version wird auf alle Events von Terrasse reagiert, Stichwort "checkReadingEvents".

Allerdings kann aufgrund der Definition "ohne do always" sowie "kein DOELSE-Zweig" passieren, dass cmd_6 bereits gestern stattgefunden hat und kein anderer Zweig zwischendurch dran kam, daher wurde heute auch nichts geschaltet.

Für solche Fälle sollte man DOELSEIF ([00:00]) dranhängen, um einen Zustandswechsel für den nächsten Tag zu provozieren.
Ja, dann ist das DOIF in der 1 Grad Hysteresis hängen geblieben, heute wird es dann klappen.

eisman

hi,

es ist wieder gegangen nach dem ich sie manuell umgeschaltet habe
muss ich nochmal beobachten.
bis um 10 sollten sollten die alle einmal geschaltet haben

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

Zitat von: eisman am 23 April 2018, 07:56:19
hi,

es ist wieder gegangen nach dem ich sie manuell umgeschaltet habe
muss ich nochmal beobachten.
bis um 10 sollten sollten die alle einmal geschaltet haben

gruss

Ich habe das Problem gefunden, es betraf Intervalle, bei denen die erste Zeitangabe größer war als die zweite.

Korrigierte Version eingecheckt, siehe: https://svn.fhem.de/trac/browser/trunk/fhem/FHEM?order=date&desc=1


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

Ellert

Zitat von: eisman am 23 April 2018, 02:08:30
hi,

die Antwort lautet wohl ja :-[
checkReadingEvents=??? würde aber voraussetzen das keine DOIF geht,
beide Installationen sind gleich ausgestattet!


([[RA_0100:rollo-zeit-auf]-[RA_0100:rollo-zeit-zu]] and [RA_0100:rollo-mode] eq "auto") (set RA_0100 rollo-zeit tag,{Rollo("01","01","100")})
DOELSEIF ([[RA_0100:rollo-zeit-zu]-[RA_0100:rollo-zeit-auf]] and [RA_0100:rollo-mode] eq "auto") (set RA_0100 rollo-zeit nacht,{Rollo("01","01","0")})
DOELSEIF ([{sunrise("CIVIL",0,"[RA_0100:rollo-zeit-auf]","10:00")}] and [RA_0100:rollo-mode] eq "sonne") (set RA_0100 rollo-zeit tag,{Rollo("01","01","100")})
DOELSEIF ([{sunset("CIVIL",0,"16:00","[RA_0100:rollo-zeit-zu]")}] and [RA_0100:rollo-mode] eq "sonne") (set RA_0100 rollo-zeit nacht,{Rollo("01","01","0")})



8 Rollladen die mit der Selben Funktion ausgestattet sind gehen teilweise nicht

installation 1
  ROLLO 1  SONNE cmd3 cmd4 geht
  ROLLO 2  SONNE cmd3 cmd4 geht
  ROLLO 3  AUTO   cmd1 cmd2 geht nicht
  ROLLO 4  MANU  ......
Installation 2
  ROLLO 1  SONNE cmd3 cmd4 geht
  ROLLO 2  SONNE cmd3 cmd4 geht
  ROLLO 3  AUTO   cmd1 cmd2 geht
  ROLLO 4  MANU  ......

Heizung:

([[RA_0100:temp-zeit-tag]|0123456-[RA_0100:temp-zeit-nacht]|0123456])  (set RA_0100 temp-zeit Tag,{Heizung("01","01","[RA_0100:temp-day]")})
DOELSEIF ([[RA_0100:temp-zeit-nacht]|0123456-[RA_0100:temp-zeit-tag]|0123456])  (set RA_0100 temp-zeit Nacht,{Heizung("01","01","[RA_0100:temp-night]")})


installation 1
  HZ 1  cmd1 cmd2 geht nicht
  HZ 2  cmd1 cmd2 geht nicht
  HZ 3  cmd1 cmd2 geht nicht
  HZ 4  cmd1 cmd2 geht nicht
  HZ 5  cmd1 cmd2 geht nicht

Installation 2
  HZ 1  cmd1 cmd2 geht
  HZ 2  cmd1 cmd2 geht
  HZ 3  cmd1 cmd2 geht nicht
  HZ 4  cmd1 cmd2 geht
  HZ 5  cmd1 cmd2 geht

einzige unterschied ist der DeviceName
doif ohne Zeitangaben gehen alle.

gruss
[[RA_0100:temp-zeit-tag]|0123456-[RA_0100:temp-zeit-nacht]|0123456] das ist eine nicht dokumentierte Syntax, dass es funktioniert wundert mich.
0123456 kann man weglassen, das ist default.
Wochentageinschränkung für indirekte Zeitangaben sind mir neu, ich kenne es so
[[RA_0100:temp-zeit-tag]-[RA_0100:temp-zeit-nacht]|0123456]

eisman

Zitat von: Ellert am 23 April 2018, 09:03:01
[[RA_0100:temp-zeit-tag]|0123456-[RA_0100:temp-zeit-nacht]|0123456] das ist eine nicht dokumentierte Syntax, dass es funktioniert wundert mich.
0123456 kann man weglassen, das ist default.
Wochentageinschränkung für indirekte Zeitangaben sind mir neu, ich kenne es so
[[RA_0100:temp-zeit-tag]-[RA_0100:temp-zeit-nacht]|0123456]

hi,
>>>> |0123456] steht noch drin, weil ich noch am überlegen war, es zu nutzen....(da es allgemein Funktioniert werde ich es eh mal rausnehmen)
>>>> verstehe ich nicht warum es nicht funktionieren sollte, es werden doch nur Zeiten übergeben und läuft so seit letzem jahr

das war aber eh nicht das problem, so wie es bis jetzt ausschaut haben sich die doif aufgehängt,
nach manuellen setzten geht es erstmal.

gruss
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

Zitat von: eisman am 23 April 2018, 09:40:30
hi,
>>>> |0123456] steht noch drin, weil ich noch am überlegen war, es zu nutzen....(da es allgemein Funktioniert werde ich es eh mal rausnehmen)
>>>> verstehe ich nicht warum es nicht funktionieren sollte, es werden doch nur Zeiten übergeben und läuft so seit letzem jahr

das war aber eh nicht das problem, so wie es bis jetzt ausschaut haben sich die doif aufgehängt,
nach manuellen setzten geht es erstmal.

gruss
gruss

Abgesehen von der falschen Angabe, die erste Wochentagangabe wird überlesen, es zählt nur die letzte, so wie Ellert es beschrieben hat. Das hat aber nichts mit dem Problem zu tun. Nimm einfach die korrigierte Version und alles wird funktionieren wie vorher. Der Fehler war eindeutig und ist mit der letzten Version reingekommen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

eisman

hi,

danke für die Info,
habe die Tagesangabe raus genommen, da ich sie für die zwischen temp (anwesend und warm) nicht benötige.
diese werden anders gesteuert...

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

fred_feuerstein

Vielen Dank für die Korrektur vom DOIF :)
Hatte ein ähnliches Problem bei doifs, die bisher problemlos liefen.

Nun ist alles wieder gut.


Gesendet von meinem ONEPLUS A3003 mit Tapatalk

Gruß, Fred

FHEM auf Raspberry PI 3B+ im 7Zoll TouchDisplay Gehäuse, OS: Bullseye, mit Z-Wave RaZberry-Modul, 868CUL (WMBUS), LaCrosseCUL (Temp) und knapp 300 Devices aller Art

Per

Statt dem Dummy zu setzen würde ich dem DOIF einfach den Namen des Dummys geben und mit attr cmdState arbeiten.
Zumindest, wenn der Wert nicht noch von anderer Seite beeinflusst wird.

der_da

Sorry, das ich mich jetzt erst wieder hierzu zurückmelde. Meine FHEM-Installation hatte inzwischen noch größere Probleme, die schlussendlich auf einen Hardwaredefekt der Speicherkarte zurückzuführen waren. Nach einer Wiederherstellung der FHEM-Installation auf einer neuen SD-Karte lief besagtes DOIF wieder wie gewohnt. Danke an alle und vor allem an Damian. Habe deine Optimierung in großen Teilen übernommen.  ;)