[vmtl gelöst] DOIF reagiert auf Verzögerung nicht

Begonnen von andies, 14 März 2020, 20:34:07

Vorheriges Thema - Nächstes Thema

andies

Guten Abend, ich möchte gern, wenn das Garagentor länger als ca 10 Minuten offen ist und mein Thermometer draussen weniger als 7 Grad meldet eine Nachricht bekommen. Der Zustand des Garagentors wird minütlich mitgeteilt, dennoch bekomme ich manchmal nach zehn Minuten eine Nachricht, obwohl das Tor nachweislich zu ist. Wie kann ich hier mit der Fehlersuche beginnen?

Internals:
   DEF        (([Garagensensor:Tor]==1) and ([BresserTemeo_1:temperature]<7) ) (set TelegramBot _msg Garagentor seit 10 Minuten *offen* und außen sind [BresserTemeo_1:temperature]°C! Schliessen mit /kurz1)
   FUUID      5e5a3fb3-f33f-1115-ae59-8c293d56143bba20
   FVERSION   98_DOIF.pm:0.212240/2020-02-18
   MODEL      FHEM
   NAME       GarageOffenDOIF2
   NOTIFYDEV  Garagensensor,BresserTemeo_1,global
   NR         388
   NTFY_ORDER 50-GarageOffenDOIF2
   STATE      cmd_1
   TYPE       DOIF
   VERSION    21224 2020-02-18 18:45:49
   READINGS:
     2020-03-14 20:29:44   Device          Garagensensor
     2020-03-14 12:56:44   cmd             1
     2020-03-14 12:56:44   cmd_event       Garagensensor
     2020-03-14 12:56:44   cmd_nr          1
     2020-03-14 20:24:08   e_BresserTemeo_1_temperature 3.5
     2020-03-14 20:29:44   e_Garagensensor_Tor 0
     2020-03-10 15:10:51   mode            enabled
     2020-03-14 12:56:44   state           cmd_1
     2020-03-14 12:56:44   wait_timer      no timer
   Regex:
     accu:
     cond:
       BresserTemeo_1:
         0:
           temperature ^BresserTemeo_1$:^temperature:
       Garagensensor:
         0:
           Tor        ^Garagensensor$:^Tor:
   attr:
     cmdState:
     wait:
       0:
         600
     waitdel:
   condition:
     0          (::ReadingValDoIf($hash,'Garagensensor','Tor')==1) and (::ReadingValDoIf($hash,'BresserTemeo_1','temperature')<7)
   do:
     0:
       0          set TelegramBot _msg Garagentor seit 10 Minuten *offen* und außen sind [BresserTemeo_1:temperature]°C! Schliessen mit /kurz1
     1:
   helper:
     DEVFILTER  ^global$|^Garagensensor$|^BresserTemeo_1$
     NOTIFYDEV  global|Garagensensor|BresserTemeo_1
     event      Temperatur: 15.5,Tor: 0,Humidity: 27.1,HumidityNachLueften: 26.3648899975215
     globalinit 1
     last_timer 0
     sleepdevice Garagensensor
     sleepsubtimer -1
     sleeptimer -1
     timerdev   Garagensensor
     timerevent Temperatur: 14.0,Tor: 1,Humidity: 23.5,HumidityNachLueften: 35.2615508909737
     triggerDev Garagensensor
     timerevents:
       Temperatur: 14.0
       Tor: 1
       Humidity: 23.5
       HumidityNachLueften: 35.2615508909737
     timereventsState:
       Temperatur: 14.0
       Tor: 1
       Humidity: 23.5
       HumidityNachLueften: 35.2615508909737
     triggerEvents:
       Temperatur: 15.5
       Tor: 0
       Humidity: 27.1
       HumidityNachLueften: 26.3648899975215
     triggerEventsState:
       Temperatur: 15.5
       Tor: 0
       Humidity: 27.1
       HumidityNachLueften: 26.3648899975215
   internals:
   readings:
     all         Garagensensor:Tor BresserTemeo_1:temperature
   trigger:
   uiState:
   uiTable:
Attributes:
   do         always
wait 600
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Frank_Huber

Baue ein doelseif ein.
Bedingung Tor zu.
ohne Auscuhrungsteil.

Gesendet von meinem S68Pro mit Tapatalk


andies

habe ich, danke! Ich kapiere zwar, wieso das jetzt klappt - mir ist aber nicht klar, wieso meine Lösung vorher den Fehler produzierte. Kannst Du mir das irgendwie erklären oder mir einen Tipp geben?
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Frank_Huber

Na klar, das offene tor startet den Timer.
Aber du hattest nichts zum stoppen.

Setze mal noch dass attribut do resetwait.

Gesendet von meinem S68Pro mit Tapatalk


andies

und das geschlossene tor stoppt den nicht?


Gesendet von iPad mit Tapatalk Pro
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Frank_Huber

In deinem doif nicht.

Gesendet von meinem S68Pro mit Tapatalk


andies

dann kapiere ich das mit dem do always doch nicht. Ich dachte, es ist so:

*) Öffnet sich das Tor, wird der timer gestartet. Bevor gesendet wird, muss das device 10 Minuten warten.
*) Wenn in den 10 Minuten kein Statuswechsel erfolgt, wird die Nachricht gesendet - weil das Tor (immer noch) offen ist.
*) Schliesst man das Tor, so findet ein Statuswechsel statt. Wegen do always müsste aber auch nach einem Statuswechsel die Bedingung erfüllt sein, damit die Nachricht raus geht - da bei geschlossenem Tor das nicht der Fall ist, sollte es meiner Mein7ng nach keine Nachricht geben.

Wo habe ich denn da einen Fehler in meinem Gedankengang?


Gesendet von iPad mit Tapatalk Pro
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Frank_Huber

2 und 3 stimmen so nicht.
Einen Statuswechsel des doif gibt es ja nicht.
Du sagst deinem doif nur wenn auf und kalter als dann...
Den statuswechsel hast nicht drin (doelseif)

Gesendet von meinem S68Pro mit Tapatalk


Damian

ohne do always hätte es schon funktioniert ;)

dann wird nämlich, der Sonst-Fall (DOELSE) automatisch gesetzt
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Frank_Huber

Zitat von: Damian am 14 März 2020, 22:03:44
ohne do always hätte es schon funktioniert ;)

dann wird nämlich, der Sonst-Fall (DOELSE) automatisch gesetzt
Das sind die Dinge an Doif wo ich mir nie sicher bin, daher baue ich das immer selbst ein.

Der TE Ersteller hatte übrigens kein do always gesetzt laut seinem List.

Gesendet von meinem S68Pro mit Tapatalk


andies

doch, das hatte ich!


Gesendet von iPad mit Tapatalk Pro
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Frank_Huber

Zitat von: andies am 14 März 2020, 23:00:40
doch, das hatte ich!


Gesendet von iPad mit Tapatalk Pro
Ok, mein fehler.
Weiter oben im List ist nochmal "Attr"
Das hatte mich auf die falsche Fährte geleitet.

Geht es denn jetzt?

Gesendet von meinem S68Pro mit Tapatalk


andies

Gerade getestet: es geht leider nicht. Garage seit 15' offen und keine Nachricht. Da ist immer noch was faul.

Ich verwende jetzt mal Damians Variante ohne do always.


Gesendet von iPhone mit Tapatalk Pro
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Frank_Huber

Es wäre sinnvoll wenn du die getestete version als list (im Fehlerzustand) dazu postest. [emoji6]

Gesendet von meinem S68Pro mit Tapatalk


andies

Ich habe jetzt diese Version am Laufen und die scheint zu gehen
defmod GarageOffenDOIF2 DOIF (([Garagensensor:Tor]==1) and ([BresserTemeo_1:temperature]<7) ) (set TelegramBot _msg Garagentor seit 10 Minuten *offen* und außen sind [BresserTemeo_1:temperature]°C! Schliessen mit /kurz1)
attr GarageOffenDOIF2 wait 600

Allerdings verstehe ich jetzt die Erläuterung  https://wiki.fhem.de/wiki/DOIF/Einsteigerleitfaden,_Grundfunktionen_und_Erl%C3%A4uterungen#Struktur_und_Verhalten_des_DOIF nicht mehr:

  • Das startende Ereignis ist [Garagensensor:Tor]==1 (unter der Bedingung, dass [BresserTemeo_1:temperature]<7 erfüllt ist)
  • Da die Bedingung wahr ist, wird Befehl ausgeführt und Status aktualisiert
  • Danach Stop.
So weit, so gut. Nun will ich aber 10 Minuten vor Ausführung des Befehls warten. Da erscheint jetzt Statuswechsel als entscheidender Begriff in der Beschreibung. Nur wird der vorher nicht definiert (Ereignis, Auslöser, DOIF-Prozess dagegen schon). Was genau ist ein Status? Und wann genau wechselt der Status? Denn daraus kann ich folgern, inwieweit dieser Statuswechsel durch do always bzw do resetwait beachtet, nicht beachtet, ausgelöst oder was auch immer wurde.

FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann