Wie kommt man an den Zeitpunkt der letzten Statusänderung bei HM-IP ?

HMIP lokale Installation

Moderator: Co-Administratoren

bettenberg
Beiträge: 21
Registriert: 04.08.2013, 08:21
System: CCU
Danksagung erhalten: 1 Mal

Re: Wie kommt man an den Zeitpunkt der letzten Statusänderung bei HM-IP ?

Beitrag von bettenberg » 07.11.2020, 15:54

In der Klickibunti stehen bei Status und Bedienung der Zeitpunkt der letzten Ånderung was mittels. LastDPActionTime() auf den Kanal ausgelesen werden kann und über einstimmen sollte.
Du hast Recht, der Wert in Klickibunti stimmt mit LastDPActionTime() immer überein. Bei meinem "Tür-Wert" ist mir bisher nicht aufgefallen, dass dieser fehlte. Für mich ist der LastDPActionTime() auch der einzig sinnvolle Zeitstempel, da dieser auch eine wirkliche Statusänderung zeigt.

Ich habe mittlerweile auch herausgefunden, warum dieser Wert leer war. Die Steuerung gibt vor, dass nur für 1sec. angeschaltet wird. Da aber die Statusmeldung erst nach 2sec versendet wird, ist der Wert dauerhaft leer. Ich dachte fälschlicherweise, dass es am Aktor (HMW-LC-Sw2-DR) liegt, da ich nur einen von diesem Typ hatte. Die Lösung war ganz einfach "Zeit nach der Logging-Meldung verschickt wird" einfach auf 0,2sec gestellt und schon klappt es.

Code: Alles auswählen

string o = dom.GetObject(4775); ! Channel ID eines HMW-LC-Sw2-DR
WriteLine(o);
WriteLine(o.LastDPActionTime() # " LastDPActionTime");
WriteLine(o.DPByHssDP("STATE").Timestamp() # " Timestamp");
WriteLine(o.DPByHssDP("STATE").LastTimestamp() # " LastTimestamp");
Output:
Flur EG S2 (Tür)
2020-11-07 15:39:12 LastDPActionTime
2020-11-07 15:39:12 Timestamp
2020-11-07 15:39:10 LastTimestamp

Somit funktioniert LastDPActionTime() für alle Aktoren einwandfrei.


Danke für die Unterstützung, ohne euch hätte ich noch ewig gebraucht es herauszufinden!

Germa
Beiträge: 169
Registriert: 15.12.2019, 12:26
System: CCU
Hat sich bedankt: 30 Mal
Danksagung erhalten: 19 Mal

Re: Wie kommt man an den Zeitpunkt der letzten Statusänderung bei HM-IP ?

Beitrag von Germa » 24.11.2021, 11:45

Hallo liebe Leut',
ein Jahr später greife ich das Thema nochmal auf. Mit den ersten drei Zeilen dieses Codes kann ich also die Angabe aus dem - wie Ihr es nennt - Klickibunti für jedes Gerät rausholen. Das ist schonmal fein.
Mein Ziel ist es, das Ganze für jedes Gerät rauszuholen und in einer Liste darzustellen, damit ich erkennen kann, welches Gerät (da ich auch einige selbstgebaute habe) zu lange keine Meldung mehr gemacht hat, prinzipiell also subtrahiert vom aktuellen Zeitstempel:

Code: Alles auswählen

var Geraet = dom.GetObject("Fenster-Bad-EG:1").LastDPActionTime().ToInteger();
WriteLine (Geraet);
time jetzt = system.Date("%F %X").ToTime().ToInteger();
WriteLine(jetzt);
var a = ((jetzt - Geraet)/60);
WriteLine(a);                
Von alchy gibt es da ein Skript zum Auslesen der Batteriewerte, welches ich versucht habe, hier zu adaptieren, um diese Liste zu erzeugen. viewtopic.php?f=19&t=48398&p=485390#p485390
Kriege ich aber nicht hin.

Kann jemand helfen?
wenn wir uns alle gegenseitig helfen, ist allen geholfen :wink:
_______________________________________________
CCU3 seit 2018, 103 Geräte, 202 Programme, 222 sysvar
Projekte: Wettersensor viewtopic.php?t=65631

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

Re: Wie kommt man an den Zeitpunkt der letzten Statusänderung bei HM-IP ?

Beitrag von alchy » 24.11.2021, 19:49

Germa hat geschrieben:
24.11.2021, 11:45
zu lange keine Meldung mehr gemacht hat,
und letzte Statusänderung via .LastDPActionTime() auf den Kanal sind aber Sandalen vs. Stiefel.
Das hast du ja sicher im Thread gelesen.
Da musst du schon mal erläutern, was du eigentlich willst und das so genau wie möglich.

bettenberg hat geschrieben:
07.11.2020, 15:54
Von alchy gibt es da ein Skript zum Auslesen der Batteriewerte
Ich habe 100te Scripte geschrieben und einen kleinen Teil davon hier veröffentlicht.
Ob man gerade das für dein Problem benutzen sollte, wage ich zu bezweifeln. Aber was zweifle ich schon.

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.

Germa
Beiträge: 169
Registriert: 15.12.2019, 12:26
System: CCU
Hat sich bedankt: 30 Mal
Danksagung erhalten: 19 Mal

Re: Wie kommt man an den Zeitpunkt der letzten Statusänderung bei HM-IP ?

Beitrag von Germa » 24.11.2021, 23:17

zweifeln ist immer gut, nur Verzweifeln nicht ;-)

Mit LastDPActionTime bekomme ich, wie ja in diesem Topic diskutiert, die Zeit der letzten Änderung eines Gerätes ausgelesen, wie sie im "klickibunti" auf der Seite Startseite > Status und Bedienung > Geräte im WebUI pro Gerät angegeben ist. Laut Doku melden sich die Geräte in (un)regelmäßigen Abständen bei der CCU und liefern Werte oder melden "bin da".
Bis auf den CCU-Neustart, der dieses Datenfeld unsauber hinterlässt, kann man dort gut erkennen, ob die Geräte in Ordnung sind.
Insbesondere bei den Arduino Selbstbaugeräten gibt es immer mal wieder unsaubere Zustände, sei es, dass kein Low_bat geliefert wird oder das Gerät einfach nicht erreichbar ist, was dann unter ungünstigen Bedingungen den DC hochtreibt. So habe ich zum Beispiel einen nachgebauten Hochtemperatursensor für die Sauna, der mindestens 20 mal am Tag "sticky_unreach" ist. Total nervig.
Meine Idee war also, in einem Programm ähnlich Deinem Batteriewerte_auslesen Skript in regelmäßigen Abständen alle Geräte über LastDPActionTime abzufragen, die Ergebnisse vom aktuellen Zeitpunkt zu subtrahieren und in einer Liste abzulegen. So habe ich dann immer einen einfachen Überblick, welche Geräte ggf. seit Stunden keine Meldung gemacht haben.
wenn wir uns alle gegenseitig helfen, ist allen geholfen :wink:
_______________________________________________
CCU3 seit 2018, 103 Geräte, 202 Programme, 222 sysvar
Projekte: Wettersensor viewtopic.php?t=65631

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

Re: Wie kommt man an den Zeitpunkt der letzten Statusänderung bei HM-IP ?

Beitrag von alchy » 25.11.2021, 20:21

Germa hat geschrieben:
24.11.2021, 23:17
Bis auf den CCU-Neustart, der dieses Datenfeld unsauber hinterlässt, kann man dort gut erkennen, ob die Geräte in Ordnung sind.
Du erkennst was? *IMHO* erkennst du damit ob / wann der Kanal "geändert" wurde.
Ein Schaltaktorkanal der vor drei Tagen letzmalig bedient wurde, hat einen 3 Tage alten Zeitstempel.
Das sagt dir zum Thema "Gerät ist in Ordnung" was ?
Germa hat geschrieben:
24.11.2021, 23:17
So habe ich dann immer einen einfachen Überblick, welche Geräte ggf. seit Stunden keine Meldung gemacht haben.
Jetzt lies mal nochmal den Thread und meinen Post. :?
Vielleicht fällt dir was an deiner Logik auf.

Aber sei es drum, soviel Zeit investiere ich nicht.
Du willst ein Script, welches:
  • alle Kanäle mit den Kanalnamen auflistet?
  • Deinem Scriptschnipsel zu Folge berechnet wie lange diese letzte Änderung her ist in Minuten?
  • Das Ganze mit Ausgabe auf Bildschirm und fertig? oder was?
  • Andere Bedingungen?
[EDIT]
Hab mal schnell 20 Zeilen getippt, So etwa?
Script_letzteÄnderung.JPG
Alchy
Zuletzt geändert von alchy am 25.11.2021, 20:48, insgesamt 1-mal geändert.
Grund: [EDIT]

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.

Germa
Beiträge: 169
Registriert: 15.12.2019, 12:26
System: CCU
Hat sich bedankt: 30 Mal
Danksagung erhalten: 19 Mal

Re: Wie kommt man an den Zeitpunkt der letzten Statusänderung bei HM-IP ?

Beitrag von Germa » 25.11.2021, 21:43

bis auf einen HMIP Rauchmelder habe ich eigentlich kein einziges Gerät, was sich tagelang nicht meldet. Alle Geräte / Sensoren sind mindestens 1x täglich in Aktion, somit würde mir das schon helfen.

Vielleicht hätte ich bei meiner Beschreibung noch deutlicher darauf hinweisen sollen, dass es mir primär um den check der selbstgebauten Geräte geht.
Etliche Arduino- Temperatursensoren, -Gasmelder, -Wassermelder und -Rauchmelder sind alle so gebaut, dass sie im Abstand einiger Minuten eine Meldung machen. Beispielsweise liefert der Gasmelder (Alarm bei Wert >1) mal mindestens alle 10 Minuten einen Wert kleiner 0,7 (Zufallswert von 0-0,7). Das haben wir gemacht, um feststellen zu können, ob das Gerät in Ordnung ist. Dann gehe ich also regelmäßig in die WebUI und schaue dort bei den Geräten nach, ob ich was Verdächtiges entdecke. Und wenn ich dabei dann ein HMIP Gerät sehe, was eigentlich 2x täglich schaltet oder einen Wert sendet und da steht aber LastDPActionTime "vorgestern", dann schaue ich mal genauer drauf. Muss ich aber immer alles manuell machen ....

Soweit stimmt also meine Logik.

Bei Deinem Batteriewerte Skript habe ich mir eine Systemvariable Batteriespannungen angelegt und dort werden einmal täglich für alle Geräte die Werte als Liste abgelegt, allerdings ja nur für die, die auch eine Batterie haben:
Unbenannt.JPG
Und so stelle ich mir das auch für diese Liste vor. Allerdings macht die Auflistung für alle Kanäle keinen Sinn, denn dann würde ja z.B. auch der Kanal 7 eines Schaltaktors (Wochenprogramm) aufgelistet werden, obwohl bei diesem Gerät der check des Kanal 1 (Schaltaktor) und 5 (Messwertkanal) reichen würde. Vielleicht könnte man als Eingangsgröße eine definierte Liste der gewünschten Ise-Ids vorgeben.

Beispielausgabe:
Letzte Änderung
AQ-Temp:1 60 Minuten
Bad-OG-Temp:1 5 Minuten
Cam-Steckdose:3 192 Minuten
FlurEG-Steckd-Leuchte:3 ...
FlurEG-Steckd-Leuchte:6 ...
...
Und wenn ich dann noch eine automatische Alarmmeldung generieren kann, wenn eines der Kanäle Dauer x überschreitet, wäre das perfekt, weil man sich die Liste nur noch anschauen muss, wenn diese Meldung kommt.

Gruß Andreas



<edit>
oh hups, habe ich solange geschrieben, dass die Lösung währenddessen schon fertig ist?
Ja, so wäre das schonmal cool
wenn wir uns alle gegenseitig helfen, ist allen geholfen :wink:
_______________________________________________
CCU3 seit 2018, 103 Geräte, 202 Programme, 222 sysvar
Projekte: Wettersensor viewtopic.php?t=65631

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

Re: Wie kommt man an den Zeitpunkt der letzten Statusänderung bei HM-IP ?

Beitrag von alchy » 25.11.2021, 22:15

Germa hat geschrieben:
25.11.2021, 21:43
Soweit stimmt also meine Logik.
na dann....
Germa hat geschrieben:
25.11.2021, 21:43
Beispielausgabe:
Letzte Änderung
AQ-Temp:1 60 Minuten
Bad-OG-Temp:1 5 Minuten
...
Und wenn ich dann noch eine automatische Alarmmeldung generieren kann, wenn eines der Kanäle Dauer x überschreitet, wäre das perfekt, weil man sich die Liste nur noch anschauen muss, wenn diese Meldung kommt.

Code: Alles auswählen

!Alle Kanaele auf letzte Aenderung pruefen und ausgeben wenn länger her als einstellbar
!https://homematic-forum.de/forum/viewtopic.php?f=60&t=62316&p=690360#p690360
! v0.1 (c) by Alchy
var limit = 120; ! Limit zur Ausgabe wenn Änderung  > X min 
var svout = "Name deiner Speichervariable"; ! Name der SystemVariablen Typ Zeichenkette wo gespeichert werden soll
!++++++++++++ DONT TOUCH BEHIND THIS LINE ++++++++++
string i;string slist = "letzte Änderung:\n";time ltime;
integer iNow = system.Date("%F %T").ToTime().ToInteger(); ! Zeitpunkt zum Ausführen des Scriptes
string sein = " Es ist jetzt " #system.Date("%d.%m.%y %H:%M Uhr \n"); 
WriteLine(sein);
foreach(i,root.Channels().EnumUsedIDs()){
var item=dom.GetObject(i);
ltime = item.LastDPActionTime();
if (ltime != "1970-01-01 01:00:00") 
{  
integer iLast = ltime.ToInteger();
integer iTime = (iNow - iLast) /60; ! Zeitdifferenz in Minuten 
if (iTime > limit) {
slist = slist #item.Name() #" "#iTime #" Minuten\n";}

     }}
if ( (dom.GetObject(ID_SYSTEM_VARIABLES)).Get(svout) ) { dom.GetObject(ID_SYSTEM_VARIABLES).Get(svout).State(slist); WriteLine(slist #" \r\t in Variable: " #svout #" eingetragen");}else{WriteLine("\tAchtung: Variable: " #svout #" : für den Wert:\n"#slist #"\n\t nicht vorhanden");}

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.

Germa
Beiträge: 169
Registriert: 15.12.2019, 12:26
System: CCU
Hat sich bedankt: 30 Mal
Danksagung erhalten: 19 Mal

Re: Wie kommt man an den Zeitpunkt der letzten Statusänderung bei HM-IP ?

Beitrag von Germa » 25.11.2021, 23:00

wowh super, vielen herzlichen Dank, damit laufe ich mal los :D
wenn wir uns alle gegenseitig helfen, ist allen geholfen :wink:
_______________________________________________
CCU3 seit 2018, 103 Geräte, 202 Programme, 222 sysvar
Projekte: Wettersensor viewtopic.php?t=65631

Antworten

Zurück zu „HomeMatic IP mit CCU“