Alarmmeldungen zählen und zurücksetzen HM Scripte

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Antworten
alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Alarmmeldungen zählen und zurücksetzen HM Scripte

Beitrag von alchy » 09.02.2015, 17:10

In verschiedenen Threads des Forums wurde die Frage gestellt, woher man die
Anzahl der Auslösungen eines Alarmes bekommt. >> H I E R << oder >> H I E R <<, >> H I E R <<.....

Augenscheinlich gab es bisher keine Lösung dafür, also hab ich mal nachgegrübelt.

Obwohl ich nicht der Meinung bin das ein Thread hier im Tipps und Tricks - keine Fragen Forum
lange Beachtung findet, möchte ich es doch versuchen. :mrgreen:

Weil Bilder mehr sagen - hier ein Beispiel:

Bild

Der Code:

Code: Alles auswählen

var summe = dom.GetObject(40).Value(); 
liest die Anzahl der verschiedenen Alarmmeldungen aus.
Das ist schon länger bekannt und funktioniert bei allen CCU 1 & 2 gleich, da es dort ein Alarmmeldungsobject mit der ISE_ID 40 gibt, genau wie es das für die Anzahl der Servicemeldungen gibt mit der ISE_ID 41, dazu ganz am Schluss noch ein Beispiel.

Im anhängenden Bild mit dem ROTEN Pfeil gekennzeichnet ist die Summe der verschiedenen Alarmmeldungen. Wenn nun einer der Alarme mehrfach ausgelöst wird, dann ist das wurscht für diese Zahl.
In meinem Bild-Beispiel ergibt das Script eine 2 weil ein Alarm mit Namen alarm1 anliegt und einer mit dem Namen alarm2. Das auch nur zur Erklärung. Kommen wir nun zum Interessanten

Code: Alles auswählen

var einzelne = dom.GetObject('alarm1').AlCounter();
liest die Anzahl der Auslösungen der Alarmvariable mit Namen alarm1 aus (gelber Pfeil), ergibt eine 4 im Beispiel

und

Code: Alles auswählen

var einzelne = dom.GetObject('alarm2').AlCounter();
würde ebenfalls eine 2 ergeben, weil dieser Alarm 2 x ausgelöst wurde. (grüner Pfeil)

Alles klar?

Als Beispiel noch folgendes Script:

Code: Alles auswählen

var service = dom.GetObject(41).Value();
var alarme = dom.GetObject(40).Value();
var al1 = dom.GetObject('alarm1').AlCounter();
var al2 = dom.GetObject('alarm2').AlCounter();
WriteLine('Wieviel Servicemeldungen liegen an: '+service);
WriteLine('Wieviel Alarmmeldungen liegen in Summe an: '+alarme);
WriteLine('Wie oft wurde der alarm1 ausgelöst: '+al1);
WriteLine('Wie oft wurde der alarm2 ausgelöst: '+al2);
sollte in meinem Besipiel folgendes ausgeben:

Code: Alles auswählen

Wieviel Servicemeldungen liegen an: 1
Wieviel Alarmmeldungen liegen in Summe an: 2
WriteLine('Wie oft wurde der alarm1 ausgelöst: 4
WriteLine('Wie oft wurde der alarm2 ausgelöst: 2
Ich hoffe das hilft den Einen oder Anderen.

Und was ich noch anmerken möchte, bevor jemand drüber stolpert. :D
Bestätigt man die Alarme in der Klickibuntioberfläche, würde das Script trotzdem noch die "alten" Counter ausgeben. Nur nach einem Reboot der CCU geht dieser interne Counter auf 0 oder aber die Alarme werden NEU ausgelöst, dann wird der Zähler ebenfalls überschrieben, zum Thema Timestamps dann später.... :shock: Aber darum geht es hier ja noch nicht.

Um das Ganze sinnloser Weise noch fortzusetzen:
Irgendwo kam die Frage auf, die Zeit der ersten und der letzen Auslösung des Alarmes
zu bekommen.
Ich bleibe bei dem Beispiel von oben, einfacher wird es nach dem Lesen meines
>> Threads zum LastTimestamp() <<

Nun wollen wir aber die Erste und die letzte Auslösung des jeweiligen Alarmes bekommen.
Nun, das geht dann so:

Code: Alles auswählen

var service = dom.GetObject(41).Value();
var alarme = dom.GetObject(40).Value();
var al1 = dom.GetObject('AAAA').AlCounter();
var al2 = dom.GetObject('Alarm02').AlCounter();
var al1_first = dom.GetObject('alarm1').LastTimestamp();
var al1_last = dom.GetObject('alarm1').Timestamp();
var al2_first = dom.GetObject('alarm2').LastTimestamp();
var al2_last = dom.GetObject('alarm2').Timestamp();
WriteLine('Wieviel Servicemeldungen liegen an: '+service);
WriteLine('Wieviel Alarmmeldungen liegen in Summe an: '+alarme);
WriteLine('Wie oft wurde der alarm1 ausgelöst: '#al1 #" mal " # "zuerst am: " #al1_first # " zuletzt am: " # al1_last );
WriteLine('Wie oft wurde der alarm2 ausgelöst: '#al1 #" mal " # "zuerst am: " #al2_first # " zuletzt am: " # al2_last );
Alchy
Zuletzt geändert von alchy am 07.09.2015, 21:42, insgesamt 1-mal geändert.

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Alarmmeldungen zählen und zurücksetzen

Beitrag von alchy » 07.09.2015, 21:22

Nun kommt es dazu diesen Beitrag nochmals zu erweitern :shock:

Im Forum kam die Frage, die anstehenden Alarmvariablen per Scriptaufruf zu bestätigen.

Um eine ausgelöste Alarmvariable zurückzusetzen kann man z.B. ganz einfach folgendes Miniscript aufrufen, theoretisch.

Code: Alles auswählen

dom.GetObject("NAME DEINER ALARMVARIABLEN").AlReceipt();
Das sollte dir eigentlich schon reichen um deine Rauchmeldervariable zurückzusetzen.

Folgendes Script sollte zur Laufzeit ALLE anstehenden Alarme zurücksetzen.
Wenn man das Script unter Script Executer oder Script testen aufruft und die WriteLine Zeile "aktiviert",
wird der Name der Alarmvariablen und die Anzahl der Auslösungen derselben angezeigt, bevor sie alle gelöscht werden.
Man kann natürlich auch andere Sachen machen, vielleicht kommt es ja später noch was hier dazu. :mrgreen:

Code: Alles auswählen

! Alarmvariablen auslesen und oder bestätigen by Alchy v0.1
!++++++++++++ DONT TOUCH BEHIND THIS LINE ++++++++++
object oTmpArray = dom.GetObject(ID_SYSTEM_VARIABLES);
string sTmp;
foreach(sTmp, oTmpArray.EnumIDs()) {
object oTmp = dom.GetObject(sTmp);
if ( (oTmp.ValueSubType() == istAlarm) && (oTmp.AlState() == asOncoming) ) {
! WriteLine("Alarm: "# oTmp.Name() #" mit "#oTmp.AlCounter() #" Ausloesungen") ;
  if  (oTmp.Value()) { oTmp.AlReceipt() ; } 
}
}
Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

alpin28
Beiträge: 64
Registriert: 11.03.2015, 06:05

Re: Alarmmeldungen zählen und zurücksetzen HM Scripte

Beitrag von alpin28 » 15.04.2022, 07:56

Hallo Alchy,
das heist mit der Skript könnte ich die Alarmmeldungen per Zeit automatisch zurücksetzen?

MfG
Alpin28
Zuletzt geändert von alchy am 15.04.2022, 09:22, insgesamt 1-mal geändert.
Grund: Scriptcopy gelöscht

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Alarmmeldungen zählen und zurücksetzen HM Scripte

Beitrag von alchy » 18.04.2022, 11:35

Ja das dürfte so auch nach der langen Zeit noch funktionieren.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“