Closed sahomm closed 4 years ago
Für die Auflistung der Systemvariablen wird folgendes HM-Skript vom Historian V2.3.0 verwendet:
string id; foreach(id, dom.GetObject(ID_SYSTEM_VARIABLES).EnumUsedIDs()) {
var sv=dom.GetObject(id);
var vt=sv.ValueType(); var st=sv.ValueSubType();
var outvt="";
if ((vt==ivtBinary) && (st==istBool)) { outvt="BOOL"; }
if ((vt==ivtBinary) && (st==istAlarm)) { outvt="ALARM"; }
if ((vt==ivtInteger) && (st==istEnum)) { outvt="ENUM"; }
if ((vt==ivtFloat) && (st==istGeneric)) { outvt="FLOAT"; }
if ((vt==ivtString) && (st==istChar8859)) { outvt="STRING"; }
if (outvt!="") { WriteLine(id # " " # sv.Name() # " " # sv.ValueMax() # " " # sv.ValueUnit() # " " #
sv.ValueMin() # " " # sv.Operations() # " " # outvt); }
}
Dadurch werden bei Dir 95 Variablen aufgelistet.
V2.4.0-beta.3 verwendet EnumIDs()
anstatt EnumUsedIDs()
. Dadurch werden bei Dir nur 25 Stück aufgelistet, obwohl EnumIDs()
mehr Variablen (u.a. auch unsichtbare) auflisten sollte.
(Im Log sind die entsprechenden Stellen nach der Meldung "Getting list of system variables" zu finden.)
Ich habe momentan keine Idee, warum EnumIDs()
weniger Variablen bei Dir liefert als EnumUsedIDs()
. Da muss ich selber mal im HomeMatic-Forum fragen.
Welche CCU-Version/Variante/ReGaHss ist denn bei Dir im Betrieb?
Bei dem Log wurde das aktuelle RaspberryMatic 3.51.6.20200420 genutzt.
Welche Begründung gibt es denn von EnumIDs() auf EnumUsedIDs() umzustellen?
Ich kann auch gerne mal das Skript anpassen um zu testen. In welcher Datei versteckt sich diese Abfrage wenn dazu Bedarf besteht?
Das Skript ist fest im Historian hinterlegt.
Es kann aber ganz normal über Skript-Ausführen auf der CCU gestartet werden.
Hi, ich habe dies mal mit folgende Code getestet und kann deine Vermutung nur bestätigen:
string id;
integer count;
foreach(id, dom.GetObject(ID_SYSTEM_VARIABLES).EnumUsedIDs()) {
count = count +1;
var sv=dom.GetObject(id);
var vt=sv.ValueType(); var st=sv.ValueSubType();
var outvt="";
if ((vt==ivtBinary) && (st==istBool)) { outvt="BOOL"; }
if ((vt==ivtBinary) && (st==istAlarm)) { outvt="ALARM"; }
if ((vt==ivtInteger) && (st==istEnum)) { outvt="ENUM"; }
if ((vt==ivtFloat) && (st==istGeneric)) { outvt="FLOAT"; }
if ((vt==ivtString) && (st==istChar8859)) { outvt="STRING"; }
if (outvt!="") { WriteLine(id # " " # sv.Name() # " " # sv.ValueMax() # " " # sv.ValueUnit() # " " #
sv.ValueMin() # " " # sv.Operations() # " " # outvt); }
}
WriteLine(id);
WriteLine("Count="+count);
Ergebnis: EnumUsedIDs.txt EnumIDs.txt
Durch den Count den ich eingebaut habe und dadurch das hier bei EnumIDs 25 Variablen in identischer Reihenfolge gelistet sind, ist mE eindeutig, dass EnumIDs nach genau 25 Durchlaufen die Schleife/den Code abbricht. Ob es nun ein Bug um aktuellen CCU-Image ist kann ich nicht beurteilen, da in der Doku von eq3 ausschließlich EnumUserdIDs dokumentiert ist.
P.S.: warum übernimmt Git ' ... ' nicht als Code-Formatierung????
Edit: Jetzt wird es kurios! Ich habe es jetzt mal auf einem Testsystem gegengetestet. ES LIEGT NICHT AN HISTORIAN ODER DEM IMAGE! Auf dem Testsystem habe ich >25 Systemvariablen angelegt. Ausgabe ist genau richtig und mit EnumIDs auch 2 mehr, da Versteckte mit gelistet werden.
Was mir dann in meinem Live-System aufgefallen ist, ist dass die alphabetische Reihenfolge nach genau dem 25ten wo EnumIDs abbricht erneut beginnt. Auch wenn ich eine neue Variable mit bspw. "aa" anlege, wird diese genau an Position 26 eingereiht und nicht an Position 1.
Ich weiß dies kein Problem von dir, sondern innerhalb meines Systems. Ich wollte dir nur eine abschließende Erklärung geben damit du dies für Historien schließen kannst. Und ggf. hast du oder jemand der mitliest eine Idee was hier anders sein könnte.
Ich habe es auch mal hier eingestellt.
Vielen Dank für die Unterstützung und deine Mühe!
SaHo
Die Umstellung auf EnumIDs()
erfolgte, da mit dieser Funktion auch versteckte Systemvariablen aufgelistet und damit auch archiviert werden können.
PS: Code-Blöcke müssen von drei ` eingeschlossen werden.
Hallo Mathias,
bei der Version 2.4.0 Beta 2 und 3 werden bei mir ca. 80% aller Systemvariablen beim Start deaktiviert und dementsprechend nicht mehr gelogt. Nach einer manuellen Reaktivierung werden diese beim nächsten Start oder nach einer Zeit erneut deaktiviert. Unter der Version 2.3.0 Final kann ich dieses nicht feststellen. Als Bespiel in den folgenden Log's kannst du den DP 1025 mit der Adresse 65114 (EnergyCounter) anschauen. Dies ist einer von diversen Datenpunkten die es betrifft.
Ich bin vorerst zurück auf 2.3.0 und kann dieses Verhalten dort nicht feststellen. Hier die entsprechenden FINER-Log's für Version 2.3.0 und 2.4.0 Beta 3: 2_3_0_ccu-historian-0.log 2_4_0_beta3_ccu-historian-0.log
Ich habe diese Log's vor dem Start neu angelegt und je bis zum Auftreten für eine kurze Zeit laufen lassen um es so übersichtlich wie möglich zu halten.
Evtl. kannst du etwas damit anfangen und hilft dir ggf. weiter vor dem Release der 2.4.x, da dies ggf einige User betreffen kann.
Herzlichen Dank für dein Engagement und die erneute Spende folgt wie jedes Jahr :)
Gruß
Saho