Event alarm: Trigger beim löschen des Readings

Begonnen von klaus.schauer, 24 September 2024, 10:48:08

Vorheriges Thema - Nächstes Thema

Damu

Habe 3 SAB05 Stellantriebe im Heizungsraum diese Regeln die 3 Räume im UG.
Denen hab ich Temperatur Sensoren pro Raum zugeteilt.
Hab in denn anderen Zimmern natürlich noch mehr Stellantriebe.
Diese Regeln aber meist ohne externe Sensoren.
Bin froh das jemand das mal versucht besser zu "Machen".
Kommt halt (bei mir) schon ab und zu vor das ein Stellantrieb nicht mehr richtig geht.
Hab das neue Attr bei mir mal auf 2 Gestellt.
Und werde testen.
Danke an alle.

Flachzange

Hallo Klaus,

Zitat von: klaus.schauer am 27 Oktober 2024, 21:49:31Es ist mein Anspruch ein möglichst gutes EnOcean-Modul nicht nur für meine persönlichen Anforderungen bereitzustellen. Alle Wünsche kann und will ich nicht abdecken.
Ich bin sehr dankbar für die gute EnOcean-Integration in FHEM. Auch mein Anspruch ist es, dass das EnOcean-Modul möglichst gut ist. Wenn ich mich also stundenlang hinsetze und debugge, warum die Stellantriebe einen Alarm werfen, dann mache ich das nicht, weil ich mir etwas wünsche, sondern um dem Fehler auf den Grund zu gehen, damit das Modul noch besser ist. Ein "no response from actuator" signalisiert dem Nutzer nämlich ein grundlegendes Kommunikationsproblem (was es ja gar nicht ist). Etwas, was man nicht haben möchte und auch immer wieder hier im Forum hochgekommen ist.

Zitat von: klaus.schauer am 27 Oktober 2024, 21:49:31Auch fehlt mir schlicht die Zeit und bei dem einen oder anderen Thema auch die Lust an immer weiter ausufernden Diskussionen im Forum.
Ich bin mir nicht sicher, worauf Du Dich beziehst. Das EnOcean-Forum ist praktisch tot und dieses Thema hier als ausufernd zu bezeichnen finde ich etwas weit hergeholt.

Ich habe mir gerade nochmal den Code angeschaut, dabei ist mir aufgefallen, dass es ja bereits ein Attribut "wakeUpCycle" gibt, welches für hvac.04 und hvac.06 herangezogen wird. Können wir das nicht einfach auf hvac.01 übertragen? Default ist auto und es bildet die Funktion ab, so wie es sie heute gibt. Wenn ich jetzt so einen Micropelt MVA004 habe, kann ich statisch auf 600 setzen und das Problem ist gelöst. Das neue Attribut signOfLifeSensitivity braucht es nicht.

Gruß
Chris

klaus.schauer

Im Profil hvac.04 und hvac.06 kann man "wakeUpCycle" als Anwender im Aktor setzen. Dafür gibt es dann ein entsprechendes Attribut.

Flachzange

Zitat von: klaus.schauer am 29 Oktober 2024, 18:22:47Im Profil hvac.04 und hvac.06 kann man "wakeUpCycle" als Anwender im Aktor setzen. Dafür gibt es dann ein entsprechendes Attribut.
Was man doch eigentlich gar nicht braucht, da die bei hvac.01 implementierte Logik dieses manuell gesetzte Intervall ja "ermitteln" kann. Im Gegensatz zu der dynamischen Änderung funktioniert diese Logik in diesem Fall ja genau richtig.

Damu

Hab das mit signOfLifeSensitivity mal getestet.
Bei mir verbessert sich das verhalten etwas.
@Flachzange Chris hast Du das auch mal getestet?
Bei mir scheint es besser zu sein, würde daher begrüssen wenn signOfLifeSensitivity eingebaut wird.

Flachzange

#20
Nein, ich hab signOfLifeSensitivity nicht getestet.

Ich habe meinen Gedanken umgesetzt, den Wert aus dem Attribute wakeUpCycle auch für die signOfLife-Überwachung und PID-Kalkulation zu nutzen. Das habe ich jetzt einige Zeit getestet und funktioniert bei mir.

Konkret für die Profile:

hvac.01 (MVA004): Konfiguriert man nichts, ist das Verhalten wie bisher. Durch die dynamische Intervalländerung kommt es zu Alarmen. Setzt man jetzt wakeUpCycle explizit so wird dieser Wert fix für die Überwachung/PID genutzt. 600 s sollten für die MVA004 eingestellt werden. Man könnte noch überlegen, ob man es beim autocreate berücksichtigt.

hvac.04 (z.B. Hora Smartdrive MX): Alarm-Timer hinzugefügt, so dass man auch bei Ausfall des Aktors / Telegrammverlust einen Alarm bekommt

hvac.06 (MVA005, MVA009): Konfiguriert man nichts, ist das Verhalten wie beim MVA004. Bisher waren es immer mindestens 600s, so wie von mir auch für hvac.01 angeregt. Das habe ich jetzt aber rausgenommen. Setzt man jetzt wakeUpCycle explizit so wird dieser Wert nicht nur für das Setzen des WakeUpCycles genutzt, sondern auch für die Überwachung.

signOfLifeSensitivity braucht es aus meiner Sicht nicht.


8549,8574c8549,8581
<       my $wakeUpCycle = 600;
<       # calc wakeup cycle
<       if ($summerMode eq 'off') {
<         $summerMode = 0;
<         if ($timeDiff == 0 || $window eq 'open') {
<           $wakeUpCycle = 1200;
<         } elsif ($timeDiff < 120) {
<           $wakeUpCycle = 120;
<         } elsif ($timeDiff > 1200) {
<           $wakeUpCycle = 1200;
<         } else {
<           $wakeUpCycle = int($timeDiff);
<         }
<       } else {
<         $summerMode = 8;
<         # ignore all commands
<         if ($waitingCmds ne "summerMode") {
<           $waitingCmds = "no_change";
<           readingsDelete($hash, "waitingCmds");
<         }
<         if ($manufID eq '049') {
<           $wakeUpCycle = 28800;
<         } else {
<           $wakeUpCycle = 3600;
<         }
<       }
---
>       my $wakeUpCycle = AttrVal($name, "wakeUpCycle", "auto");#get wakeUpCycle from attribute
>      
>       if ($summerMode eq 'off') {
>         $summerMode = 0;
>         # calc wakeup cycle if auto
>         if (lc($wakeUpCycle) eq 'auto') {
>             if ($timeDiff == 0 || $window eq 'open') {
>               $wakeUpCycle = 1200;
>             } elsif ($timeDiff < 120) {
>               $wakeUpCycle = 120;
>             } elsif ($timeDiff > 1200) {
>               $wakeUpCycle = 1200;
>             } else {
>               $wakeUpCycle = int($timeDiff);
>             }
>         } else {
>             #take explicit wakeUpCycle from attribute
>         }
>       } else { #in summer mode ignore attribute settings for wakeUpCycle (it can stay as it is)
>         $summerMode = 8;
>         # ignore all commands
>         if ($waitingCmds ne "summerMode") {
>           $waitingCmds = "no_change";
>           readingsDelete($hash, "waitingCmds");
>         }
>         #ignore attribute settings for wakeupcycle in summermode
>         if ($manufID eq '049') {
>           $wakeUpCycle = 28800;
>         } else {
>           $wakeUpCycle = 3600;
>         }
>       }
>      
8583c8590
<       InternalTimer(gettimeofday() + $wakeUpCycle * AttrVal($name, "signOfLifeSensitivity", 1) * 1.1, "EnOcean_readingsSingleUpdate", $hash->{helper}{timer}{alarm}, 0);
---
>       InternalTimer(gettimeofday() + $wakeUpCycle * 1.1, "EnOcean_readingsSingleUpdate", $hash->{helper}{timer}{alarm}, 0);
8990a8998
>       
9002a9011,9023
>      
>       my $wakeUpCycleSec = $wakeUpCycleInv{$wakeUpCycle};
>       readingsSingleUpdate($hash, 'wakeUpCycle', $wakeUpCycleSec, 1);
>      
>       # set alarm timer
>       if (exists $hash->{READINGS}{alarm}) {
>         DoTrigger($name, "alarm: reset", 1);
>         readingsDelete($hash, "alarm");         
>       }
>      
>       RemoveInternalTimer($hash->{helper}{timer}{alarm}) if(exists $hash->{helper}{timer}{alarm});
>       @{$hash->{helper}{timer}{alarm}} = ($hash, 'alarm', 'no_response_from_actuator', 1, 3);
>       InternalTimer(gettimeofday() + $wakeUpCycleSec * 1.1, "EnOcean_readingsSingleUpdate", $hash->{helper}{timer}{alarm}, 0);
9271,9272c9292,9293
<       my $wakeUpCycle = 600;
<       # calc wakeup cycle
---
>       my $wakeUpCycle = AttrVal($name, "wakeUpCycle", "auto"); #get wakeUpCycle from attribute
>      
9275,9283c9296,9309
<         if ($timeDiff == 0 || $window eq 'open') {
<           $wakeUpCycle = 600;
<         } elsif ($timeDiff < 120) {
<           $wakeUpCycle = 120;
<         } elsif ($timeDiff > 7200) {
<           $wakeUpCycle = 7200;
<         } else {
<           $wakeUpCycle = int($timeDiff);
<         }
---
>         # calc wakeup cycle if auto
>         if (lc($wakeUpCycle) eq 'auto') {
>             if ($timeDiff == 0 || $window eq 'open') {
>               $wakeUpCycle = 600;
>             } elsif ($timeDiff < 120) {
>               $wakeUpCycle = 120;
>             } elsif ($timeDiff > 7200) {
>               $wakeUpCycle = 7200;
>             } else {
>               $wakeUpCycle = int($timeDiff);
>             }
>         } else {
>              #take explicit wakeUpCycle from attribute
>         }
9290a9317
>         #ignore attribute settings for wakeupcycle in summermode
9302c9329
<         InternalTimer(gettimeofday() + ($wakeUpCycle < 600 ? 600 : $wakeUpCycle) * 1.1, "EnOcean_readingsSingleUpdate", $hash->{helper}{timer}{alarm}, 0);
---
>         InternalTimer(gettimeofday() + $wakeUpCycle * 1.1, "EnOcean_readingsSingleUpdate", $hash->{helper}{timer}{alarm}, 0);
15242a15270,15273
>     }
>     elsif (AttrVal($name, "subType", "") eq "hvac.01" && $attrVal =~ m/^$wakeUpCycle$/) {
>     #do nothing for hvac.01 when value is set
>    
15254a15286
>         
16134a16167,16169
>     if (lc($wakeUpCycle) eq 'auto') {
>         $wakeUpCycle = ReadingsVal($name, 'wakeUpCycle', 300);
>     }
22111c22146
<       Transmission cycle of the actuator.
---
>       Transmission cycle of the actuator. For hvac.01 optional to specify maximum wake up interval.





Edit: Dateianhänge ;)

Damu

Unter dem Textfeld "Dateianhänge und weitere Optionen"
Sollte doch gehen.

Danke werde mir das morgen mal anschauen.

Flachzange

Zitat von: Damu am 30 November 2024, 01:14:44Unter dem Textfeld "Dateianhänge und weitere Optionen"
Sollte doch gehen.

Ahhh  :o

Ich nutze immmer nur "Schnell Antworten", da sucht man danach vergeblich.

Danke!

Damu

Hab das mal eingebaut.
Habe bis jetzt zwei Alarm erhalten.
Ist als viel besser als vorher.
Wenn ich jetzt bei einem Thermokon SAB05 das wakeUpCycle auf 600 setze hab ich in den nächsen Reading das wakeUpCycle auch auf 600.
Ist das so richtig?
Habe auch drei neuere SAB+ verbaut. Einer ist an einem Radiator beim Eingang.
Der ist extrem Laut. (vorher hatte ich da ein Micropelt MVA004 oder MVA005.)
Welche Stellantriebe sind eigentlich leise?

Flachzange

Zitat von: Damu am 03 Dezember 2024, 20:03:34Hab das mal eingebaut.
Habe bis jetzt zwei Alarm erhalten.
Ist als viel besser als vorher.
Kannst Du etwas genauer spezifizieren, was besser ist? In jedem Fall solltest Du jetzt nur noch Alarme erhalten, wenn wirklich ein Telegramm ausbleibt (und der Antrieb auch beim eingestellten Intervall funkt).

Am Ende obliegt es aber Klaus, ob er meinen Vorschlag annimmmt oder nicht.

Ich habe es jetzt durch die Verbesserungen von Klaus am generellen signOfLife-Handling geschafft meine Installation "alarmfrei" zu bekommen. Wenn sich jetzt Alarme häufen, weiß ich das etwas nicht stimmt.

Zitat von: Damu am 03 Dezember 2024, 20:03:34Wenn ich jetzt bei einem Thermokon SAB05 das wakeUpCycle auf 600 setze hab ich in den nächsen Reading das wakeUpCycle auch auf 600.
Ja das ist die logische Konsequenz. Das Reading zieht sich seinen Wert direkt aus dem Attribut. Das Reading ergibt jetzt nur Sinn bei "auto". Bei hvac.04 gab es das Reading beispielsweise gar nicht, weil das Intervall fix war.


Damu

Hab nur schnell im log nachgeschaut.
Und die Readings etwas angeschaut.
Sendet der Thermostat nicht ein Wakeup (wann er das nächste mal aufwacht zum Senden/Empfangen?

Flachzange

Zitat von: Damu am 03 Dezember 2024, 22:27:10Sendet der Thermostat nicht ein Wakeup (wann er das nächste mal aufwacht zum Senden/Empfangen?
Nein, aber das hatte ich damals auch intuitiv so vermutet. Das gibt aber das Protokoll gar nicht her. wakeUpCycle ist ein von Klaus berechneter Wert bei hvac.01 und hvac.06 auf Basis der vergangenen Kommunikation. Wenn der Antrieb den nächsten Aufwachzeitpunkt ankündigen würde, hätten wir nicht das Problem mit den false positives und könnten es ja genau abpassen. De facto ändert der Antrieb aber sein Aufwachintervall, ohne dass man es im Vorhinein weiß.

klaus.schauer

#27
Für die drei Ventilaktor-Profile kann jetzt die Dauer des Überwachungsintervalls über das Attribut signOfLifeInterval festlegt werden. Falls signOfLifeInterval kleiner als das wakeUpCycle Intervall gewählt wird oder der Wert nicht gesetzt ist, wird der wakeUpCycle Wert verwendet. Die Überwachung ist standardmäßig eingeschaltet.

Damu

#28
Zeile 23186:
Zitat<a href="#EnOcean-attr-customCmdAlarmOn">customCmdAlarmOn</a>, <a href="#EnOcean-attr-signOfLife">signOfLife</a> ([signOfLive] = on is default) and


sollte es da nicht "signOfLife" heisen?

Damu

Zitat von: klaus.schauer am 04 Dezember 2024, 14:58:59Für die drei Ventilaktor-Profile kann jetzt die Dauer des Überwachungsintervalls über das Attribut signOfLifeInterval festlegt werden. Falls signOfLifeInterval kleiner als das wakeUpCycle Intervall gewählt wird oder der Wert nicht gesetzt ist, wird der wakeUpCycle Wert verwendet. Die Überwachung ist standardmäßig eingeschaltet.

Hab das mal eingebaut.
SignOfLife muss aber erst aktiviert (auf on gesetzt werden) off ist bei mir default.