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!