In der WebUI kann ich Programme oder Systemvariablen leider nicht zeitlich sortieren nach letzter Ausführungszeit bzw. Änderung
Um die letzte Ausführung bzw. Änderung zu sehen, muss man alle Programme bzw. Systemvariablen durchblättern.
Bei der Fehlersuche wäre es hilfreich, wenn man über ein Skript eine Auflistung aller Programme sortiert nach dem Zeitpunkt der letzten Ausführung bekäme.
Bei Programmen also "ProgramLastExecuteTime" oder "ProgramLastExecuteTimeSeconds" bzw. "Timestamp", vielleicht auch mit Eingrenzung letzte Stunde oder letzter Tag.
Leider bekomme ich ein solches Skript mit Iteration und Sortierung nicht allein hin.
Hat jemand ein Skript, das sich entsprechend anpassen lässt.
Gruß
PM
Auflistung Programme/Systemvariable nach letzter Ausführung
Moderator: Co-Administratoren
-
- Beiträge: 10754
- Registriert: 24.02.2011, 01:34
- System: CCU
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 673 Mal
Re: Auflistung Programme/Systemvariable nach letzter Ausführung
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.
-
- Beiträge: 9679
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 700 Mal
- Danksagung erhalten: 1626 Mal
Re: Auflistung Programme/Systemvariable nach letzter Ausführung
Und hier die komplette Lösung:
viewtopic.php?f=31&t=68913#p673244
viewtopic.php?f=31&t=68913#p673244
LG, Michael.
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
-
- Beiträge: 551
- Registriert: 17.04.2021, 17:12
- System: CCU
- Hat sich bedankt: 27 Mal
- Danksagung erhalten: 125 Mal
Re: Auflistung Programme/Systemvariable nach letzter Ausführung
Eine weitere Idee wäre z.B. wäre für die Systemvariablen :
oder für Programmausführungen angepasst:
Evtl. ist es ja für deine Zwecke passender.........
Code: Alles auswählen
!Übersicht Systemvariablenänderungen sortiert -by Tyfys
string SysVarList = "";
string SysVarId;
object arr="";
!Element Art n=numerisch / a=alphanumerisch
object arrtyp ="n;a";
!Tauschstrings von > nach
string av;
string an;
!Trennzeichen für Array 1. / 2.Dimension
var sep1=";";
var sep2="[";
var TimeString="";
!Das Array füllen
var SysVarIdsList = dom.GetObject(ID_SYSTEM_VARIABLES).EnumIDs();
foreach(SysVarId, SysVarIdsList) {
var SysVarObj = dom.GetObject(SysVarId);
if (SysVarObj.LastTimestamp().ToInteger() == 0) {
TimeString = "keine Änderung nach CCU-Neustart";
} else {
TimeString = SysVarObj.LastTimestamp().Format("%d.%m.%Y %H:%M:%S");
}
arr = arr # SysVarObj.LastTimestamp().ToInteger() # sep2 # SysVarObj.Name() # sep2 # TimeString # sep1;
}
arr = arr.RTrim(";");
!Nun Array sortieren
integer len = web.webGetValueListCount(arr).ToInteger() - 1;
boolean swapped = true;
boolean revers = true;
var elemart = "a";
string index;
integer von = 0;
integer bis = 1;
foreach(index, system.GenerateEnum(von, bis)) {
integer x = (von + bis) - index.ToInteger();
elemart = arrtyp.StrValueByIndex(sep1, x);
swapped = true;
while (swapped) {
integer i = 1;
swapped = false;
while (i <= len) {
if (((elemart <> "n") && ((arr.StrValueByIndex(sep1, i).StrValueByIndex(sep2, x)) < (arr.StrValueByIndex(sep1, i - 1).StrValueByIndex(sep2, x))))
|| ((elemart == "n") && ((arr.StrValueByIndex(sep1, i).StrValueByIndex(sep2, x).ToFloat()) < (arr.StrValueByIndex(sep1, i - 1).StrValueByIndex(sep2, x).ToFloat())))) {
av = arr.StrValueByIndex(sep1, i - 1) # sep1 # arr.StrValueByIndex(sep1, i);
an = arr.StrValueByIndex(sep1, i) # sep1 # arr.StrValueByIndex(sep1, i - 1);
arr = arr.Replace(av, an);
swapped = true;
}
i = i + 1;
}
}
}
!Liste ausgeben
string ix;
WriteLine("Liste Systemvariablen nach Änderungsdatum aufsteigend sortiert");
foreach(ix, system.GenerateEnum(0, len)) {
WriteLine((ix.ToInteger() + 1) # ". " # (arr.StrValueByIndex(sep1, ix).StrValueByIndex(sep2, 2)) # ": " # (arr.StrValueByIndex(sep1, ix).StrValueByIndex(sep2, 1)));
}
!Falls absteigend
if (revers) {
object arr2 = "";
string elem;
foreach(elem, arr.Split(";")) {
arr2 = elem # sep1 # arr2;
}
arr = arr2;
WriteLine(" ");
WriteLine("**********************");
WriteLine("Liste Systemvariablen nach Änderungsdatum absteigend sortiert");
foreach(ix, system.GenerateEnum(0, len)) {
WriteLine((ix.ToInteger() + 1) # ". " # (arr.StrValueByIndex(sep1, ix).StrValueByIndex(sep2, 2)) # ": " # (arr.StrValueByIndex(sep1, ix).StrValueByIndex(sep2, 1)));
}
}
Code: Alles auswählen
!Übersicht Programmausführungen sortiert -by Tyfys
string PgmList = "";
string PgmId;
object arr="";
!Element Art n = numerisch / a = alphanumerisch
object arrtyp = "n;a";
!Tauschstrings von > nach
string av;
string an;
!Trennzeichen für Array 1. / 2.Dimension
var sep1 = ";";
var sep2 = "[";
var TimeString = "";
!Das Array füllen
var PgmIdsList = dom.GetObject(ID_PROGRAMS).EnumIDs();
foreach(PgmId, PgmIdsList) {
var PgmObj = dom.GetObject(PgmId);
if (PgmObj.ProgramLastExecuteTime().ToInteger() == 0) {
TimeString = "keine Ausführung nach CCU-Neustart";
} else {
TimeString = PgmObj.ProgramLastExecuteTime().Format("%d.%m.%Y %H:%M:%S");
}
arr = arr # PgmObj.ProgramLastExecuteTime().ToInteger() # sep2 # PgmObj.Name() # sep2 # TimeString # sep1;
}
arr = arr.RTrim(";");
!Nun Array sortieren
integer len = web.webGetValueListCount(arr).ToInteger() - 1;
boolean swapped = true;
boolean revers = true;
var elemart = "a";
string index;
integer von = 0;
integer bis = 1;
foreach(index, system.GenerateEnum(von, bis)) {
integer x = (von + bis) - index.ToInteger();
elemart = arrtyp.StrValueByIndex(sep1, x);
swapped = true;
while (swapped) {
integer i = 1;
swapped = false;
while (i <= len) {
if (((elemart <> "n") && ((arr.StrValueByIndex(sep1, i).StrValueByIndex(sep2, x)) < (arr.StrValueByIndex(sep1, i - 1).StrValueByIndex(sep2, x))))
|| ((elemart == "n") && ((arr.StrValueByIndex(sep1, i).StrValueByIndex(sep2, x).ToFloat()) < (arr.StrValueByIndex(sep1, i - 1).StrValueByIndex(sep2, x).ToFloat())))) {
av = arr.StrValueByIndex(sep1, i - 1) # sep1 # arr.StrValueByIndex(sep1, i);
an = arr.StrValueByIndex(sep1, i) # sep1 # arr.StrValueByIndex(sep1, i - 1);
arr = arr.Replace(av, an);
swapped = true;
}
i = i + 1;
}
}
}
!Liste ausgeben
string ix;
WriteLine("Liste Programme nach Ausführungsdatum aufsteigend sortiert");
foreach(ix, system.GenerateEnum(0, len)) {
WriteLine((ix.ToInteger() + 1) # ". " # (arr.StrValueByIndex(sep1, ix).StrValueByIndex(sep2, 2)) # ": " # (arr.StrValueByIndex(sep1, ix).StrValueByIndex(sep2, 1)));
}
!Falls absteigend
if (revers) {
object arr2 = "";
string elem;
foreach(elem, arr.Split(";")) {
arr2 = elem # sep1 # arr2;
}
arr = arr2;
WriteLine(" ");
WriteLine("**********************");
WriteLine("Liste Programme nach Ausführungsdatum absteigend sortiert");
foreach(ix, system.GenerateEnum(0, len)) {
WriteLine((ix.ToInteger() + 1) # ". " # (arr.StrValueByIndex(sep1, ix).StrValueByIndex(sep2, 2)) # ": " # (arr.StrValueByIndex(sep1, ix).StrValueByIndex(sep2, 1)));
}
}
Gruß
Harry
Harry