[GELÖST] Hilfe bei Fehlersuche in DOIF

Begonnen von dan1180, 18 Oktober 2020, 16:44:36

Vorheriges Thema - Nächstes Thema

dan1180

Hallo zusammen,

ich mach jetzt schon den zweiten Abend an meinem DOIF rum:

Bei 60°C soll ein Reading in meinem Temperatursensor gesetzt werden.
Zwischen 58°C und 60°C soll ein Hinweis, zwischen 55°C und 58°C eine Warnung gesendet werden
Unter 50°C soll das Reading im Temperatursensor umgeschrieben werden, damit beim Heizen keine Warnungen kommen.

Das DOIF sieht wie folgt aus:

([7:00 - 22:00] and [tmpkofen:status] eq "heat" and [tmpkofen:temperature] < 58 and [tmpkofen:temperature] > 55) (set Telegram msg Achtung, das Feuer geht aus!)
DOELSEIF
([7:00 - 22:00] and [tmpkofen:status] eq "heat" and [tmpkofen:temperature] < 60 and [tmpkofen:temperature] > 58) (set Telegram msg Bitte nach dem Feuer schauen)
DOELSEIF
([tmpkofen:temperature] > 60) (setreading tmpkofen status heat)
DOELSEIF
([tmpkofen:temperature] < 55) (setreading tmpkofen status cool)


Folgende Attribute habe ich gesetzt:

cmdpause 300:300:0:0
repeatcmd 2:2:0:0


Was mach ich falsch?
Vielen Dank für eure Hilfe
Dan
FHEM 6.2 auf RPi4B
Raspberrymatic 3.X auf RPI3B

1xDS2408 und 6xDS18B20 an GPIO über Modul RPI_1Wire
>50 Homematic-Geräte

amenomade

Bitte ein "list" vom DOIF, wenn er im "falschen" Status ist, und genaue Beschreibung, was erwartet wäre und was nicht funktioniert.

Erste Anmerkung: bei genau 55 oder 58 oder 60 ist keine Bedingung wahr.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

dan1180

Hier die Ausgabe von list:

Internals:
   DEF        ([tmpkofen:temperature] < 55)
(setreading tmpkofen status cool)
DOELSEIF
(
[7:00 - 22:00]
and [tmpkofen:status] eq "heat"
and [tmpkofen:temperature] < 58
)
(set Telegram msg Achtung, das Feuer geht aus!)
DOELSEIF
(
[7:00 - 22:00]
and [tmpkofen:status] eq "heat"
and [tmpkofen:temperature] < 60
)
(set Telegram msg Bitte nach dem Feuer schauen)
DOELSEIF
([tmpkofen:temperature] >= 60)
(setreading tmpkofen status heat)
   FUUID      5cafac22-f33f-5d70-1ea0-50f9a3fbbab8110c
   MODEL      FHEM
   NAME       difskmsg
   NOTIFYDEV  tmpkofen,global
   NR         294
   NTFY_ORDER 50-difskmsg
   STATE      cmd_3
   TYPE       DOIF
   VERSION    22913 2020-10-04 21:46:02
   OLDREADINGS:
   READINGS:
     2020-10-18 17:15:39   Device          tmpkofen
     2020-10-18 17:13:01   cmd             3
     2020-10-18 17:13:01   cmd_event       difskmsg
     2020-10-18 17:13:01   cmd_nr          3
     2020-10-18 17:15:39   e_tmpkofen_temperature 59.687
     2020-10-18 17:12:59   mode            enabled
     2020-10-18 17:13:01   state           cmd_3
     2020-10-18 17:12:59   timer_01_c02    19.10.2020 07:00:00
     2020-10-18 17:12:59   timer_02_c02    18.10.2020 22:00:00
     2020-10-18 17:12:59   timer_03_c03    19.10.2020 07:00:00
     2020-10-18 17:12:59   timer_04_c03    18.10.2020 22:00:00
   Regex:
     accu:
     cond:
       tmpkofen:
         0:
           temperature ^tmpkofen$:^temperature:
         1:
           status     ^tmpkofen$:^status:
           temperature ^tmpkofen$:^temperature:
         2:
           status     ^tmpkofen$:^status:
           temperature ^tmpkofen$:^temperature:
         3:
           temperature ^tmpkofen$:^temperature:
   attr:
     cmdState:
     cmdpause:
       0
       300
       300
       0
     repeatcmd:
       0
       2
       2
       0
     wait:
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'tmpkofen','temperature') < 55
     1           ::DOIF_time($hash,0,1,$wday,$hms) and ::ReadingValDoIf($hash,'tmpkofen','status') eq "heat" and ::ReadingValDoIf($hash,'tmpkofen','temperature') < 58
     2           ::DOIF_time($hash,2,3,$wday,$hms) and ::ReadingValDoIf($hash,'tmpkofen','status') eq "heat" and ::ReadingValDoIf($hash,'tmpkofen','temperature') < 60
     3          ::ReadingValDoIf($hash,'tmpkofen','temperature') >= 60
   days:
   do:
     0:
       0          setreading tmpkofen status cool
     1:
       0          set Telegram msg Achtung, das Feuer geht aus!
     2:
       0          set Telegram msg Bitte nach dem Feuer schauen
     3:
       0          setreading tmpkofen status heat
     4:
   helper:
     DEVFILTER  ^global$|^tmpkofen$
     NOTIFYDEV  global|tmpkofen
     event      T: 59.687,temperature: 59.687
     globalinit 1
     last_timer 4
     sleeptimer -1
     timerdev   tmpkofen
     timerevent T: 59.687,temperature: 59.687
     triggerDev tmpkofen
     timerevents:
       T: 59.687
       temperature: 59.687
     timereventsState:
       state: T: 59.687
       temperature: 59.687
     triggerEvents:
       T: 59.687
       temperature: 59.687
     triggerEventsState:
       state: T: 59.687
       temperature: 59.687
   internals:
   interval:
     0          -1
     1          0
     2          -1
     3          2
   intervalfunc:
   localtime:
     0          1603083600
     1          1603051200
     2          1603083600
     3          1603051200
   readings:
     all         tmpkofen:temperature tmpkofen:status
   realtime:
     0          07:00:00
     1          22:00:00
     2          07:00:00
     3          22:00:00
   time:
     0          7:00
     1          22:00:00
     2          7:00
     3          22:00:00
   timeCond:
     0          1
     1          1
     2          2
     3          2
   timer:
     0          0
     1          0
     2          0
     3          0
   timers:
     1           0  1
     2           2  3
   trigger:
   triggertime:
     1603051200:
       localtime  1603051200
       hash:
     1603083600:
       localtime  1603083600
       hash:
   uiState:
   uiTable:
Attributes:
   cmdpause   0:300:300:0
   repeatcmd  0:2:2:0


Sieht schon etwas anders aus, da ich natürlich weiter auch selbst versuche den Fehler zu finden. Daher nochmal meine aktuelle Definition:


([tmpkofen:temperature] < 55)
(setreading tmpkofen status cool)
DOELSEIF
(
[7:00 - 22:00]
and [tmpkofen:status] eq "heat"
and [tmpkofen:temperature] < 58
)
(set Telegram msg Achtung, das Feuer geht aus!)
DOELSEIF
(
[7:00 - 22:00]
and [tmpkofen:status] eq "heat"
and [tmpkofen:temperature] < 60
)
(set Telegram msg Bitte nach dem Feuer schauen)
DOELSEIF
([tmpkofen:temperature] >= 60)
(setreading tmpkofen status heat)


Die drei nicht definierten Werte waren mir bewusst. Trotzdem Danke dafür.
FHEM 6.2 auf RPi4B
Raspberrymatic 3.X auf RPI3B

1xDS2408 und 6xDS18B20 an GPIO über Modul RPI_1Wire
>50 Homematic-Geräte

amenomade

Also... seit 17:13 ist er auf cmd_3
Zitat2020-10-18 17:13:01   state           cmd_3
Letzter Trigger war tmpkofen_temperature 59.687, immer noch < 60. Er ist dann bei cmd3 geblieben.

Was ist falsch, bzw was hättest Du statt dessen erwartet?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

dan1180

Sorry, meine Erwartungen habe ich nicht gepostet:

Um das Nachlegen von Holz nicht zu vergessen, soll mir das DOIF per Telegram melden, wenn die Ofentemperatur unter 60°C fällt bzw. warnen, wenn sie sogar unter 58°C fällt.
Damit ich nicht benachrichtigt werde wenn der Ofen beim Aufheizen die Temperaturzonen durchläuft, soll unter 55°C und über 60°C ein Reading gesetzt werden, das für die Benachrichtigung geprüft wird.

Ist noch nicht ganz ausgereift, da ich mein Reading nicht umstelle, wenn ich bei der ersten Meldung bereits Holz nachlege. Aber wenn ich noch nicht einmal das hinbekomme... :(
FHEM 6.2 auf RPi4B
Raspberrymatic 3.X auf RPI3B

1xDS2408 und 6xDS18B20 an GPIO über Modul RPI_1Wire
>50 Homematic-Geräte

amenomade

Also, um 17:13 hast Du eine Nachricht bekommen, oder?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

dan1180

Ja, die habe ich bekommen. Seither aber nicht mehr, was aber auch an meiner Ofentemperatur liegen kann.

Sieht mein ,,neues" DOIF aus, als könnte es funktionieren?

Ich habe nun auch die Reihenfolge der Bedingungen geändert. Verstehe ich die Logik richtig, dass mein DOIF so dann früher mit ,,false" die Prüfung der Bedingung abbricht? Bisher waren ja i.d.R. die Zeitspanne und der Status ,,true" und erst die Temperatur hat die gesamte Bedingung auf ,,false" gesetzt?!

Hier mein aktueller Code:
(
[tmpkofen:temperature] < 55)
(setreading tmpkofen status cool)
DOELSEIF
(
[tmpkofen:temperature] < 58
and [tmpkofen:status] eq "heat"
and [7:00 - 22:00]
)
(set Telegram msg Achtung, das Feuer geht aus!)
DOELSEIF
(
[tmpkofen:temperature] < 60
and [tmpkofen:status] eq "heat"
and [7:00 - 22:00]
)
(set Telegram msg Bitte nach dem Feuer schauen)
DOELSEIF
([tmpkofen:temperature] >= 60)
(setreading tmpkofen status heat)
FHEM 6.2 auf RPi4B
Raspberrymatic 3.X auf RPI3B

1xDS2408 und 6xDS18B20 an GPIO über Modul RPI_1Wire
>50 Homematic-Geräte

amenomade

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

dan1180

Ok. Setze den Beitrag dann mal auf gelöst.

Vielen Dank!
FHEM 6.2 auf RPi4B
Raspberrymatic 3.X auf RPI3B

1xDS2408 und 6xDS18B20 an GPIO über Modul RPI_1Wire
>50 Homematic-Geräte