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

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

Beitrag von bettenberg » 04.11.2020, 08:45

Hallo zusammen,

wie bekommt man die letzte Statusänderung per Skript?

Code: Alles auswählen

!Folgendes liefert zwar einen Timestamp, aber keinen sinnvollen:
var output = (dom.GetObject(ID_DATAPOINTS)).Get("HmIP-RF.00151BE791BFC1:2.STATE").Timestamp();
 WriteLine(output);
!Folgendes liefert auch einen Timestamp, der aber auch nicht der Statusänderung entspricht:
var output = (datapoints.Get("HmIP-RF.00151BE791BFC1:2.STATE")).LastTimestamp();
 WriteLine(output);
!Folgendes funktioniert leider nicht mehr, ging aber bei BIDCOS-Wired Komponenten:
 var output = (datapoints.Get("HmIP-RF.00151BE791BFC1:2.STATE")).LastDPActionTime();
 WriteLine(output);

Die ersten Variante scheint zumindest für einen kurzen Zeitraum zu stimmen. Dann erfolgt scheinbar eine Aktualisierung, obwohl es gar keine Änderung gegeben hat.

Habe ich irgendetwas übersehen?
Zuletzt geändert von alchy am 04.11.2020, 18:35, insgesamt 1-mal geändert.
Grund: Code in Codetags posten

Benutzeravatar
FBK2904
Beiträge: 454
Registriert: 22.03.2016, 17:12
System: Alternative CCU (auf Basis OCCU)
Wohnort: Bei Ludwigsburg
Hat sich bedankt: 80 Mal
Danksagung erhalten: 42 Mal

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

Beitrag von FBK2904 » 04.11.2020, 15:53

bettenberg hat geschrieben:
04.11.2020, 08:45
wie bekommt man die letzte Statusänderung per Skript?

Habe ich irgendetwas übersehen?
Hi,

ich hatte vor einem Monat einmal ein kleines Script HIER gepostet. Vielleicht hilft's ja.

Grüssle,
Frank
Grüssle,
Frank
--------------------------
System: CCU3 (RM 3.75.7.20240420) mit Stabantenne (www.stall.biz)
Geräte: 56x HM (classic) / 13x HmIP / 8x CUxD /16x virtuelle Gruppen / 4x PioTek-Tracker V4 FTTB & FAM-USB-Gateway
Addons: XML-API 2.3 / CUx-Daemon 2.11 / CUxD-Highcharts 1.45 / Programme drucken 2.6
Sonstige: SDV v5.03.04 G / AIO Creator NEO v3.1.0 mit 2x Samsung Tab SM-T580 (Root & Android 10 [LineageOS 17.1 by TALUAtXDAi])

Benutzeravatar
Baxxy
Beiträge: 10847
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 610 Mal
Danksagung erhalten: 2229 Mal

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

Beitrag von Baxxy » 04.11.2020, 16:27

Bin mir nicht sicher, aber meines Wissens funktioniert .LastDPActionTime() nur bei Kanälen, nicht aber bei Datenpunkten.
Beispiel Kanal:3 einer HmIP-PSM:

Code: Alles auswählen

WriteLine("Letzte Statusänderung: "#channels.Get ("HMIP-PSM 0D2:3").LastDPActionTime().ToString("am %d.%m.%y um %H:%M:%S Uhr"));
ergibt:

Code: Alles auswählen

Letzte Statusänderung: am 04.11.20 um 13:21:46 Uhr

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 » 04.11.2020, 16:48

Klappt perfekt !! Besten Dank für die Unterstützung.

Jetzt muss ich nur noch herausfinden, wie man den Wert über xmlapi erreicht...

Benutzeravatar
Baxxy
Beiträge: 10847
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 610 Mal
Danksagung erhalten: 2229 Mal

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

Beitrag von Baxxy » 04.11.2020, 17:00

bettenberg hat geschrieben:
04.11.2020, 16:48
wie man den Wert über xmlapi erreicht...
Eigentlich genauso...

Code: Alles auswählen

http://192.168.xxx.xxx:8181/ret.exe?ret=channels.Get("HMIP-PSM 0D2:3").LastDPActionTime()
oder

Code: Alles auswählen

http://192.168.xxx.xxx:8181/ret.exe?ret=dom.GetObject(ID_CHANNELS).Get("HMIP-PSM 0D2:3").LastDPActionTime()

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 » 04.11.2020, 18:26

Klappt ebenfalls prima. Danke!
Hast du zufällig noch einen Befehl parat, um mit einem xmlapi Aufruf alle Timestamps z.B. eines Gewerks zu bekommen?

Benutzeravatar
Baxxy
Beiträge: 10847
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 610 Mal
Danksagung erhalten: 2229 Mal

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

Beitrag von Baxxy » 04.11.2020, 21:28

bettenberg hat geschrieben:
04.11.2020, 18:26
einen Befehl parat, um mit einem xmlapi Aufruf alle Timestamps z.B. eines Gewerks zu bekommen?
Ein "Befehl" wird hier nicht reichen. Und Iteration ist auch nicht so mein Ding. Die Script Dokumentation oder etwas Forenrecherche könnte dir möglicherweise weiterhelfen.

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 » 04.11.2020, 22:26

die Methode .LastActionTime() auf den Kanal angewendet gibt den Zeitpunkt der letzten Statusänderung aus.
(Und mit einen Seitenhieb und ein Zwinkern zu einem Freund - wie auch .LastTimestamp())

Auf einen Datenpunkt angewendet funktioniert die Methode .LastActionTime() entgegen der Aussage von Baxxy auch, nur bekommst du nicht das ausgegeben was du willst. Genau wie .Timestamp() gibt die Methode da nur letzte "Action Zeit" aus. :mrgreen: Wie du schon bemerkt hast muss das nicht die letzte Statusänderung / der letzte Schaltpunkt sein. Das war schon ein Spass da vor Jahren mal die Methoden und ihre Wirkungen zu erkunden.

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.

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 » 05.11.2020, 07:59

Dank eurer Hilfe habe ich nun geschafft. Daher beantworte ich meine eigene Frage bezüglich der Iteration, vielleicht hilft es jemand mit dem gleichem Problem.

Mit folgendem Skript kann man sich vom Gewerk "Licht": Kanalname, Status und richtige letzte Änderung als CSV ausgeben lassen. Die Nachbearbeitung kann per Bash erfolgen, z.B. mit einer Pipe durch "iconv -c -f ISO-8859-15 -t UTF-8" ist auch die Verwendung von Sonderzeichen möglich.
Das schöne ist, dass dies auch bei einer Mischbestückung von Homematic Wired und Homematic IP (Wired) funktioniert.

Code: Alles auswählen

postbody="string l = dom.GetObject(\"Licht\").EnumUsedIDs();
string i;
object o;

foreach (i, l) {
  o = dom.GetObject(i);
  WriteLine(o # \",\" # o.DPByHssDP(\"STATE\").Value() # \",\" # o.LastDPActionTime().ToInteger());
}
"
wget -qO- --user=myccu --password=mypass --post-data "${postbody}" "http://192.0.x.x:8181/tclrega.exe"

Benutzeravatar
Baxxy
Beiträge: 10847
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 610 Mal
Danksagung erhalten: 2229 Mal

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

Beitrag von Baxxy » 05.11.2020, 15:37

alchy hat geschrieben:
04.11.2020, 22:26
Auf einen Datenpunkt angewendet funktioniert die Methode .LastActionTime() entgegen der Aussage von Baxxy auch,
Sicher? Dann war das vor meiner Zeit. Selbst du hattest schon Anno 2017 mittels eines Test-Scriptes festgestellt das es "gar nicht geht". Auf meinem System ist das auch heute noch so.

Code: Alles auswählen

Version: 2.1.369
Build: R1.00.0388.0226
Wert: false
Letzter Wert: false
DP Timestamp: 2020-11-05 15:23:44
DP LasTimestamp: 2020-11-05 14:20:59
Kanal LastActiontime: 2020-11-05 00:02:11
Kanal LastTimestamp: 2020-11-05 00:02:11
DP LAstActionTime: 

Code: Alles auswählen

Nov  5 15:34:33 Test-CCU-RaspiMatic-Pi4B local0.err ReGaHss: ERROR: ScriptRuntimeError: ! RegaVersion usw. ausgeben^M WriteLine("Version: " # dom.Version());^M WriteLine("Build: " # dom.BuildLabel());^M string kanalname = "HMIP-PSM 0D2:3";^M WriteLine("Wert: "#dom.GetObject(kanalname).DPByHssDP("STATE").Value());^M WriteLine("Letzter Wert: "#dom.GetObject(kanalname).DPByHssDP("STATE").LastValue());^M WriteLine("DP Timestamp: "#dom.GetObject(kanalname).DPByHssDP("STATE").Timestamp());^M WriteLine("DP LasTimestamp: "#dom.GetObject(kanalname).DPByHssDP("STATE").LastTimestamp());^M WriteLine("Kanal LastActiontime: "#dom.GetObject(kanalname).LastDPActionTime()) ;^M WriteLine("Kanal LastTimestamp: "#dom.GetObject(kanalname).LastTimestamp()) ;^M WriteLine("DP LAstActionTime: "#dom.GetObject(kanalname).DPByHssDP("STATE").LastDPActionTime()) ; ! geht gar nicht^M  [ExecError():iseESPexec.cpp:12880]

Antworten

Zurück zu „HomeMatic IP mit CCU“