NEWS
iobroker stellt keine Systemvariablen dar
-
@foxriver76 sagte in iobroker stellt keine Systemvariablen dar:
Write(dom.GetObject(40).Value())
Hab ich getestet, Ausgabe:0
-
@Thomas06308 Passt eigentlich.
Führe mal das kompeltte Skript aus und poste mal die Ausgabe
!# variablesInv.fn 0.1 !# !# Dieses Script gibt die Systemvariablen (inklusive unsichtbarer) als JSON String aus !# !# 7'2019 foxriver76 https://github.com/foxriver76 [basierend auf variables.fn (hobbyquaker)] !# object oSysVar; string sSysVarId; string sValueType; string sValue; boolean bFirst = true; Write('{'); !# due to the fact that service messages can be automatically acknowledged, we have to loop over all and check var servs = dom.GetObject(ID_SERVICES); string id; integer serviceMessages = 0; foreach(id, servs.EnumIDs()) { var service = dom.GetObject(id); if(service) { if(service.IsTypeOf(OT_ALARMDP) && (service.Used() == true) && (service.Enabled() == true) && (service.AlState() == asOncoming)) { serviceMessages = serviceMessages + 1; } } } WriteLine('"40":{"Name":"Alarmmeldungen","TypeName":"VARDP","DPInfo":"Anzahl%20Alarmmeldungen","Value":' # dom.GetObject(40).Value() # ',"ValueMin":0,"ValueMax":65000,"ValueUnit":"","ValueType":16,"ValueSubType":0,"ValueList":""},'); Write('"41":{"Name":"Servicemeldungen","TypeName":"VARDP","DPInfo":"Anzahl%20Servicemeldungen","Value":' # serviceMessages # ',"ValueMin":0,"ValueMax":65000,"ValueUnit":"","ValueType":16,"ValueSubType":0,"ValueList":""}'); foreach (sSysVarId, dom.GetObject(ID_SYSTEM_VARIABLES).EnumIDs()) { WriteLine(','); oSysVar = dom.GetObject(sSysVarId); sValueType = oSysVar.ValueType(); Write('"' # sSysVarId # '":{"Name":"'); WriteURL(oSysVar.Name()); Write('","TypeName":"' # oSysVar.TypeName()); Write('","DPInfo":"'); WriteURL(oSysVar.DPInfo()); Write('","Value":'); if (sValueType == 20) { Write('"'); WriteURL(oSysVar.Value()); Write('"'); } else { sValue = oSysVar.Value(); if (sValueType == 2) { if (sValue) { Write("true"); } else { Write("false"); } } else { if (sValue == "") { Write("0"); } else { Write(sValue); } } } string sValueMin = oSysVar.ValueMin(); if (sValueMin == '') { sValueMin = 'null'; } string sValueMax = oSysVar.ValueMax(); if (sValueMax == '') { sValueMax = 'null'; } Write(',"Timestamp":"' # oSysVar.Timestamp()); Write('","ValueMin":' # sValueMin # ',"ValueMax":' # sValueMax # ',"ValueUnit":"'); WriteURL(oSysVar.ValueUnit()); Write('","ValueType":' # sValueType # ',"ValueSubType":' # oSysVar.ValueSubType()); if (sValueType == 2) { Write(',"ValueList":"'); WriteURL(oSysVar.ValueName0() # ';' # oSysVar.ValueName1()); } else { Write(',"ValueList":"'); WriteURL(oSysVar.ValueList()); } Write('"}'); } Write('}');
-
@foxriver76 Im Script Executor kommt Invalid JSON, wie von Dir vermutet.
Direkt auf der CCU kommt die Ausgabe lt. Anlage. Beides allerdings schon wieder mit der Produktivkonfiguration. Von der resetteten CCU kann ich es aber auch liefern wenn benötigt.Scriptausgabe1.txt -
@Thomas06308 sagte in iobroker stellt keine Systemvariablen dar:
Scriptausgabe1.txtAlso das ist die Ausgabe wenn das Skript auf der CCU ausgeführt wird? Das passt und ist valide. Genau dieses Skript führt der Rega Adapter auf der CCU aus - merkwürdig die Ergebnisse dürften sich nicht unterscheiden. Und rega Adapter ist auf 2.5.2?
-
@foxriver76 Genau, der Rega-Adapter ist auf 2.5.2 und die Script-Ausgabe stammt aus "Skript ausführen" direkt auf der CCU.
-
@Thomas06308 Sau merkwürdig..
Wir können mal noch folgendes probieren - importiere das angehängte Javascript Skript in ioBroker mit und poste davon mal die Ausgabe.
-
@foxriver76 ja, sau merkwürdig. Ich hoffe, ich habe es richtig gemacht: unter Scripte importiert.
Scriptausgabe2.txt -
@Thomas06308 Jop, passt so und da ist auch alles da. Puh also sau komisch.. wir können mal noch die Datei anschauen die bei dir lokal liegt. Und mach einmal sicherheitshalber
iob u hm-rega
auf der Konsole und starte mal neu.Falls das nicht hilft, (du sagst ja es läuft auf keinem deiner Systeme)
cat /opt/iobroker/node_modules/iobroker.hm-rega/regascripts/variablesInv.fn
im Terminal ausführen. -
@foxriver76 sagte in iobroker stellt keine Systemvariablen dar:
cat /opt/iobroker/node_modules/iobroker.hm-rega/regascripts/variablesInv.fn
Irgendwas mache ich falsch: bei cat /opt/iobroker/node_modules/iobroker.hm-rega/regascripts/variablesInv.fn wird mir Dein Script angezeigt.
Zwischenzeitlich habe ich mal meine alte CCU1 rausgekramt - dort werden die Variablen angezeigt!!
Vielen Dank für Deine engagierte Unterstützung!!! -
@Thomas06308 sagte in iobroker stellt keine Systemvariablen dar:
@foxriver76 sagte in iobroker stellt keine Systemvariablen dar:
cat /opt/iobroker/node_modules/iobroker.hm-rega/regascripts/variablesInv.fn
Irgendwas mache ich falsch: bei cat /opt/iobroker/node_modules/iobroker.hm-rega/regascripts/variablesInv.fn wird mir Dein Script angezeigt.
Ne, das passt. Wollte wissen ob es 1 zu 1 übereinstimmt. Kannst es ja mal hier rein kopieren. Allerdings scheint das Verhalten ja eher durch die CCU2 verursacht zu werden. Ist die Firmware da die aktuellste?
-
@foxriver76 Anbei die Ausgabe der Kommandozeile.
Auf meiner CCU2 ist nicht die aktuellste Firmware, aber die vorletzte Version, die bei mir sehr stabil läuft. Aufgefallen ist mir das Problem nur, weil ich meine iobroker-Installation auf einem anderen System neu aufgesetzt und nur die Visualisierungen importiert habe. Möglicherweise besteht es tatsächlich schon länger und ist nur nicht aufgefallen, weil ich keine neuen Variablen angelegt habe. Eigenartigerweise funktioniert auch die Visualisierung von Datenpunkten, die auf Variablen basieren, nur werden sie im iobroker eben nicht angezeigt und können damit auch nicht in sql übernommen werden.
Sehr mysteriös !
Ich werde mal auf die aktuellste CCU-Firmware aktualisieren und melde mich in den nächsten Tagen nochmal.
Vielen Dank für´s erste !!! -
-
@foxriver76 : So, habe nun doch gleich die CCU auf die aktuellste Firmware 2.49.18 aktualisiert, RPC und hm-rega neu einlesen lassen, erfolglos Keine Variablen da.
Dein Script wirft als Ergebnis weiterhin Invalid JSON aus.
Hmmm, sehr eigenartig. -
hab ihr mal .State() anstatt von .Value () probiert ?in dem Script ?
-
@Blackmike kann man mal probieren, sollte in diesem Szenario kein Unterschied machen.
-
@foxriver76 Probiere ich heute Abend mal aus, bin gerade unterwegs.
-
@foxriver76 Hallo Ihr beiden,
ich habe wieder getestet. Das Script Value() statt .State() brachte keine Änderung - immer noch Invalid JSON und keine Variablenanzeige im iobroker, obwohl vorhandene Variablenwerte weiterhin aktualisiert werden.
Hab dann die CCU-Logigschicht von Modus Standard auf Kompatibilitätsmodus ungestellt und erneut getestet - absolut keine Änderung
Im HM Script Executor kommt INVALID JSON, direkt auf der CCU Script ausführen bringt Scriptausgabe4.txt
Was immer Euch hilft das Problem herauszufinden, ich teste es! -
@Thomas06308 Ja, anscheinend wirft nur das initiale Skript den Fehler, das polling Skript scheint dann zu funktionieren, weshalb die States korrekt aktualisiert werden, nur das Objekt dazu fehlt, da er aus dem ersten Skript die Objekte in iob anlegen würde.
Tritt dieser Fehler:
Cannot parse answer for functions ...
eigentlich auch noch auf? -
@foxriver76 Ja, nach Neustart des rega-adapters tritt es auf
hm-rega.0-log.txt -
@Thomas06308 Hm dann stimmt allerdings noch was net.. Kannst du das mal noch via Skript testen ausführen - villt gibt das ja noch irgendeinen Hinweis:
!# functions.fn 1.3 !# !# Dieses Script gibt eine Liste der Gewerke als JSON String aus !# !# 6'2013-7'2014 bluefox, hobbyquaker !# object oFunction; string sFunctionId; string sChannelId; boolean bFirst = true; boolean bFirstSecond = true; Write("{"); foreach (sFunctionId, dom.GetObject(ID_FUNCTIONS).EnumUsedIDs()) { if (bFirst == false) { WriteLine(','); } else { bFirst = false; } oFunction = dom.GetObject(sFunctionId); Write('"' # sFunctionId # '": '); Write('{"Name": "'); WriteURL(oFunction.Name()); Write('","TypeName":"' # oFunction.TypeName() # '_FUNCTIONS'); Write('", "EnumInfo": "'); WriteURL(oFunction.EnumInfo()); Write('", "Channels": ['); bFirstSecond = true; foreach(sChannelId, oFunction.EnumUsedIDs()) { if (bFirstSecond == false) { Write(','); } else { bFirstSecond = false; } string sIfaceId = dom.GetObject(sChannelId).Interface(); string sIface = dom.GetObject(sIfaceId).Name(); Write('{"Address":"' # dom.GetObject(sChannelId).Address() # '",'); Write('"Interface":"' # sIface # '"}'); } Write(']}'); } Write('}');