EnumIDs bricht bei Auflistung Systemvariablen ab

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

Antworten
saho1
Beiträge: 75
Registriert: 11.11.2011, 10:13
Hat sich bedankt: 2 Mal

EnumIDs bricht bei Auflistung Systemvariablen ab

Beitrag von saho1 » 19.05.2020, 18:52

Hallo,

erstmal zur Konstellation: Aktuell betriebe ich meine HM - die bereits 10 Jahren in Betrieb ist - auf RaspberryMatic in der Version 3.51.6.20200420

Mir ist bewußt das dies nicht das Unterforum von RM ist, ich denke auch nicht das es daran liegt was ich im folgenden schildern werde.

Bereits seit diversen Version und schon zu Zeiten der CCU2 war mir aufgefallen, dass die alphabetische alphabetische Auflistung der Systemvariablen nicht stimmt. Ich habe dem aber nie große Bedeutung geschenkt, da alles funktionierte.

Jetzt mußte ich feststellen, dass ich bei der aktuellen Beta des Historian 2.4.0 Beta 3 nur eine Bruchteil meiner Systemvariablen abgelegt bekomme. Schnell war durch @Mathias Hilfe (vielen Dank nochmal!) identifiziert, dass dies an der Auflistung der verfügbaren Variablen seitens der CCU/RM und dem von EnumUsedIDs zu EnumIDs zu suchen ist (EnumUsedIDs werden alle Variablen angezeigt).

Teste ich folgenden Code:

Code: Alles auswählen

string id;
integer count;
foreach(id, dom.GetObject(ID_SYSTEM_VARIABLES).EnumIDs()) {
			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);


bricht dieser ab der 25ten Variablen ab. Nach Prüfung mußte ich feststellen, dass dies genau der falschen Auflistung der Variablen entspricht.

Hier ein Screen:
Bildschirmfoto 2020-05-19 um 18.37.16.jpg
Bildschirmfoto 2020-05-19 um 18.37.16.jpg (17.08 KiB) 739 mal betrachtet
PoolVorrag ist genau die 25te Variable wo das Script auch aufhört. Ab da geht das Listing wieder von "a" beginnend los. Wenn ich beispielsweise eine neue Variable mit dem Name "aa" anlege wird diese hinter PoolVorrang eingereiht und andere Namen werden richtig ab #26 zwischen den bestehenden eingereiht.

Mir geht es nicht um das Listing auf der Oberfläche, diese ist mir egal, nur werde ich künftig wohl nicht nur mit Historien auf Probleme stoßen.

Ich wäre sehr dankbar wenn mir einer einen Ratschlag geben könnte wie ich das Enum der Variablen bereinigen kann bzw. wo ich hier weiter suchen kann.

Vielen Dank im Voraus

SaHo
--------------------------------------------
107 Kanäle in 60 Geräten
--------------------------------------------

saho1
Beiträge: 75
Registriert: 11.11.2011, 10:13
Hat sich bedankt: 2 Mal

Re: EnumIDs bricht bei Auflistung Systemvariablen ab

Beitrag von saho1 » 19.05.2020, 23:22

Problem gelöst und hier die Antwort um dem dem Forum was wiederzugeben!

!!!ACHTUNG!!! Dies ist nur mit Bedacht anzuwenden, die Gefahr das komplette System zu zerschießen ist nicht nur nahe, sondern fast real!

Zum eigentlichen Problem:

Wie oben geschrieben bleibt das EnumIDs bei mir an einer bestimmten Stelle stehen. Um an meinem Beispiel zu bleiben, bei der 25ten Aufzählung. Dies war auch zuvor in der WebUI zu sehen, da genau dort die alphabetische Auflistung meine Systemvariablen erneut bei "A" begann.

Also habe ich den o.g. Code um

Code: Alles auswählen

WriteLine("DebugX"+id);
zwischen den Zeile ergänzt um zu sehen wo die Schleife genau abbricht und mit welcher ID. Und siehe da! es war nicht die letze ID die angezeigt wurde "PoolVorrang" Sonden eine nächste IDNr die im gesamten System nicht existiert.

Und jetzt beginnt die OP am offen Herzen!
in der homatic.regadom nach der ID gesucht und siehe da, diese wird nur unter "<enel> als

Code: Alles auswählen

<oid>12345</oid>
<ot>1089</ot>
geführt und ist ansonsten nie zu finden. Also eine Leiche!

Achtung! Einfach löschen ist eine doofe Idee!
Am Anfang von <enel> steht der Count von allen Einträgen in "ENEL" der um die Anzahl von Datenpunkten die gelöscht werden - in meinem Fall 1 - reduziert werden muß. Somit muß aus homematic.regadom die Zeilen <<oid>12345</oid> und <ot>1089</ot> (12345 steht für die ID die identifiziert wurde) gelöscht und die Zeile <count>XXX</count> unter <enel> um xxx-1 reduzieren werden.
Ganz wichtig! KEIN REBOOT, da die homematic.regadom dann wieder mit den Aktellen und falschen Daten überschrieben wird! HARDRESET>> Stecker ziehen und hoffen dass das System wieder hoch kommt. Sollte es eigentlich sowieso, da es bei eine Korrupten homematic.regadom die .bak als Alternative nimmt sofern das Dateisystem es überlebt hat. Bitte Geduld dabei haben, da, auch wenn alles gut ist, RM einen zweiten Reboot macht.
Anschließend waren alle Systemvariablen bei mir in alphabetischer Reihenfolge und EnumIDs gibt mir die korrekte Anzahl an Variablen inkl. der Verstecken an so wie es sein soll.

DIESE ZEIELN SIND NICHT ZUR NACHAHMUNG GEDACHT SONDERN NUR ALS FEEDBACK!

Es gibt bestimmt elegantere Wege, ich kannte keinen und habe mir diesen Lösungsweg selbst hergeleitet.
Ich wollte das eigentliche HM-System gerne runterfahren, da fehlte mir aber die Kenntnis welche Prozesse alles in Abhängigkeit stehen. Und ja ich bin ganz verrückt, ich habe dies ganze remote via VPN gemacht, da ich eine HM-externe Lösungen für den Hardreset des RM habe ;)
Kritik ist herzlich willkommen, man(n) kann nur Lernen!
Gruß

Saho
--------------------------------------------
107 Kanäle in 60 Geräten
--------------------------------------------

Benutzeravatar
Black
Beiträge: 5480
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 424 Mal
Danksagung erhalten: 1074 Mal
Kontaktdaten:

Re: EnumIDs bricht bei Auflistung Systemvariablen ab

Beitrag von Black » 19.05.2020, 23:29

Übler fehler derartige Leichen und Hochachtung vor der reparatur an der regadom selber.. sollte man nichts bei falschmachen.

Zur konsistensprüfung derariger Dinge gibt es aber auch programme,die sowas finden und auch selber beheben können, bzw den weg sagen,wie es meistens über einen einfachen scriptbefehl bzw über die GUI oder sogar automatisch behoben werden kann. WOebi du natürlich recht hast, die WebUI selber kanns mit ihren Mitteln nicht.

Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

saho1
Beiträge: 75
Registriert: 11.11.2011, 10:13
Hat sich bedankt: 2 Mal

Re: EnumIDs bricht bei Auflistung Systemvariablen ab

Beitrag von saho1 » 20.05.2020, 00:06

Danke und genau für solche Tipps bin ich dankbar!

Klar gibts Programme die was finden wenn man oder Tool weiß wonach man sucht. Ohne einen gute Editor wäre ich hier auch aufgeschmissen gewesen ;)
Für ReGa ist mir dies nur unbekannt. Solltest du mehr wissen, bin ich dankbar um jeden Hinweis um mir künftig viele Stunden zu ersparen! (auch wenn man(n) mal wieder einiges dazugelernt hat!)

Saho
--------------------------------------------
107 Kanäle in 60 Geräten
--------------------------------------------

Antworten

Zurück zu „HomeMatic allgemein“