NEWS
Admin5: Ich kann keine Objekte mehr manuell anlegen
-
@pedder007 In meinen Augen mussten Objekte immer schon als String abgespeichert werden. Man hat ein Objekt meist mit stringfy in einen JSON String konvertiert und beim Lesen den String wieder in ein Objekt gewandelt. Das macht der js-controller nur automatisch, sodass man Objekte wohl direkt schreiben kann und diese in einen JSON String gewandelt werden.
-
@pedder007 sagt: "Das Speichern von Objekten oder Arrays muss immer als String erfolgen und dies wird von js-controller 3.3 überprüft.
Das betrifft nur die Adapter-Entwickler: Objekte / Arrays müssen per JSON.stringify() als Wert in Datenpunkte geschrieben werden. Das war vorher nicht so.
Der Javascript-Adapter wandelt ab Version 5.2.x automatisch. -
@cash wow, das hört sich fix an , allerdings würden sich 30 Stunden bei mir dann über Wochen hinziehen. Deswegen werde ich das wohl eher nach dem Update machen, wenn es geht, nur diese String-Fragestellung hatte mich irritiert.
... und an VIS muss ich dann natürlich auch ran ...@mickym vielleicht habe ich auch irgendwas falsch verstanden, aber ich habe eigene Objekte (= Datenpunkte) auch z. B. als Zahl oder Boolean definiert!? Ist hier mit dem String etwas anderes gemeint?
@paul53 ich meinte tatsächlich nur eigene Datenpunkte. Ich bin Lichtjahre davon entfernt irgendeinen Adapter selber entwickeln zu können
-
@pedder007 Ok dann haben wir uns - oder Du was falsch verstanden.
Ein iobroker Objekt ist wieder was anderes als ein iobroker State.
Beim javascript Adapter ging es um Javascript Objekte.
Von was @paul53 und ich geschrieben habe ist im state ein Javascript Objekt zu speichern. Das musste man eben in einen JSON String umwandeln und das macht der Adapter nun in der Version 3.3 und neuer automatisch.Die States, die Du meinst sind aus Javascript Sicht skalare Werte (also Boolean, Zahl, String) und keine Objekte.
Das meinte ich mit Objekten: https://www.w3schools.com/js/js_objects.asp
da haben wir aneinander vorbei geredet.
-
@mickym sagte: Das musste man eben in einen JSON String umwandeln und das macht der Adapter nun in der Version 3.3 und neuer automatisch.
Objekte / Arrays musste man früher nicht in ein JSON umwandeln. Das müssen jetzt aber die Adapter-Entwickler tun, weil der js-controller ab Version 3.3 es so erwartet und prüft. Er wandelt allerdings nicht selbst.
-
@paul53 Ok dann hatte ich das falsch verstanden - danke für Richtigstellung bevor ich hier zur Verwirrung beitrage.
-
@mickym @paul53 danke für Eure schnellen Rückmeldungen, aber irgendwie komme ich noch nicht ganz mit, sorry.
Verstanden habe ich jetzt, dass das in erster Linie Adapterentwickler betrifft. Über den Link habe ich verstanden, dass ein Objekt auch aus mehreren DPs bestehen kann, weshalb dann wohl auch von Arrays die Rede ist, soweit ok.
Meine Datenpunkte sind also states(=Variablen?) richtig? .. und sind, so wie ich Eure Antworten interpretier, also mit dem Hinweis in der Infobox gar nicht gemeint, richtig?
Tut mir leid, aber ich habe das letzte Mal vor wahrscheinlich >25 Jahren selber auf Sourcecode-Ebene (Pascal/Basic) ein wenig programmiert und die Begriffe werden nun evtl. etwas anders genutzt? -
@pedder007 Ja Du kannst Deine Datenpunkte, wenn Du sie manuell anlegst unter userdata - als Zahl, Boolean und was auch immer anlegen.
Wenn Du es, wie Du unter geschrieben hast, manuell machst, würde ich es sowie dann lieber mit admin5 machen, da dieser ja bereits eine Typprüfung vornimmt und Dir das vorgibt, was erlaubt ist.
Diese Infobox - ist, wie @paul53 geschrieben nur die Adapterentwickler. Wie gesagt wenn Du manuell mit admin5 anlegst, dann prüft dieser ja - was erlaubt ist und was nicht.
Bei Zahlen, Strings, Booleans hast eh kein Problem:
Hier siehtst ja was möglich ist.
-
@mickym ok super danke
Dann also mal das Update planen und danach via neuem Admin die ganzen aktuellen DPs sukzessive migrieren, inkl. Blockly und VIS Anpassungen.
Naja, der Herbst/Winter wird ja kommen ...
Schönen Abend noch! -
@cash sagte in Admin5: Ich kann keine Objekte mehr manuell anlegen:
@pedder007 Also 70 oder Datenpunkte kann man spielend manuell migrieren. Ich habe meine ca. 700 Datenpunkte manuell migriert und gleichzeitig die Struktur leicht angepasst. Aufwand würde ich mal sagen ca. 30 Stunden incl Anpassung aller Scripte. Das einzige was mir noch fehlt ist vis das ist derzeit eher nutzlos Aber ich denke das werde ich vielleicht morgen schaffen.
Nächstes Wochenende könnte ich dann wohl mal das update machen. Wahrscheinlich werde ich aber noch abwarten.
Ich mache so Massenänderungen immer über Search/Replace direkt in der vis-views.json - Wichtig ist nur, das kein Prozess mehr da währendessen drauf zugreift - also am besten den ioBroker vorher stoppen.
-
@mickym sagte in Admin5: Ich kann keine Objekte mehr manuell anlegen:
ich habs gerade gesehen - wäre wohl eine Kombination aus beiden gut
Wenn du nur nicht dein node-red flow gelöscht hättest...
-
@dr-bakterius Na gut - habe den Flow (muss halt ggf. die Warnmeldungen ignorieren) nochmal soweit verändert, dass nun auch Rollen und Typ etc. mit übernommen werden, wenn man ihn solo laufen ließ. Er übernimmt auch keine Min Werte, da da noch ein Bug in der Node ist, habe ich aber schon ein Issue aufgemacht. Und werden halt nur states übernommen.
Ich dachte Du hättest den Flow ja noch.
Gut so sieht es jetzt aus:
An Quelle und Ziel hat sich nichts geändert man muss halt quelle.0 durch den richtigen Pfad und 0_userdata.0.ziel ebenfalls.
Ansonsten werden mit der function Node nun die Werte aus dem common Objekt gesetzt:
if (msg.common.name !== undefined) msg.stateName = msg.common.name; if (msg.common.role !== undefined) msg.stateRole = msg.common.role; if (msg.common.type !== undefined) msg.stateType = msg.common.type; if (msg.common.unit !== undefined) msg.stateUnit = msg.common.unit; // if (msg.common.min !== undefined) msg.stateMin = msg.common.min; if (msg.common.max !== undefined) msg.stateMax = msg.common.max; return msg;
HIer nochmal der Flow - aber wie gesagt ohne Garantie - werde da jetzt nichts mehr dran machen!
Wenn man die Verbindung zur IoB write value Node unterbricht und den DebugNode aktiviert - hat man quasi ein Trockenlauf indem nichts geschrieben wird, aber man sieht welche States geschrieben werden.
-
@darkiop das funktioniert bei mir nicht, da ich die Gelegenheit genutzt habe und teilweise eine neue Struktur angelegt habe. Bin mittlerweile aber auch soweit durch. Alle normalen Ansichten habe ich aktualisiert. Nur die Einstellungsseiten fehlen noch. Aber die sind nicht so wichtig, da man die eh nur sehr selten ändern muss…
-
@mickym ich nochmal ...
Nachdem die ganze Updaterei nun bei mir auch super durchgelaufen ist, mal noch zwei Fragen zu den Datenpunkten, welche mir durch den Kopf gingen, als ich nun gestern Abend die ersten DPs nach userdata verschoben habe:
- Wo werden die DPs via backitup eigentlich gesichert, oder evtl. gar nicht? Weil dann würde ich dazu nämlich einen Request aufmachen.
- Ich habe bei mir unter javascript auch die Datenpunkt zum Astro Script liegen. Die wurden bei der Implementierung automatisch angelegt, wenn ich mich da richtig erinnere. Die wären dann ja genauso 'gefährdet' wie die eigenen DPs!? - da würde ich dann nämlich mal den Entwickler drauf aufmerksam machen ...
-
@pedder007 sagte: Die wären dann ja genauso 'gefährdet' wie die eigenen DPs!?
Datenpunkte unter "javascript.N" sind nicht gefährdet.
-
@paul53 ja ich weiß, wurde ja mehrfach gesagt
Deswegen 'gefährdet' ja auch in Hochkommas. Aber es wurde ja auch schon mehrfach erwähnt, dass da irgendwann in der Zukunft bei irgendeiner neuen Java Version da evtl. mal was passieren könnte - evtl. sehe ich das ja auch zu schwarz ...Mir fällt jetzt gerade aber noch eine Frage ein:
Im neuen Admin scheint es keine Möglichkeit mehr zu geben, die Eigenschaften von DPs (z. B. Zahl: min/max oder auch Unit) via einer entsprechenden Maske zu bearbeiten.
Das geht, für non-Developer wie mich wohl nur noch recht kryptisch über die Bearbeitung und dann Objektdaten. Was dann entsprechend fehlerbehaftet ist.Oder habe ich die Möglichkeit einfach bisher nicht gefunden?
-
@liv-in-sky sagte in Admin5: Ich kann keine Objekte mehr manuell anlegen:
danke für's weiterverfolgen - vielleicht sollten wir neuen thread aufmachen ?
Das Skript ist jetzt soweit fertig und steht hier bereit. Als kleiner Nebeneffekt listet es auch einfach nur alle Skripte auf. Ich hoffe es macht Dir und anderen die Migration etwas leichter. Vorschläge für Verbesserungen sind natürlich willkommen.
-
@pedder007 sagte in Admin5: Ich kann keine Objekte mehr manuell anlegen:
- Wo werden die DPs via backitup eigentlich gesichert, oder evtl. gar nicht? Weil dann würde ich dazu nämlich einen Request aufmachen.
Mal unabhängig davon, was @paul53 gesagt hat - der steckt da ja viel tiefer in der Materie als ich, werden meines Wissens immer alle Objekte und Zustände in dem Backup gespeichert, egal wo sie sich im Baum befinden. Die Objekte und Zustände liegen ja nicht wirklich in der vom admin dargestellten Struktur vor, sondern sind in 2 Dateien gespeichert.
Objekte in der objects.json und die Zustände in der states.json
Diese beiden Dateien sind in meinen Augen Bestandteil des Backups und enthalten alle Datenpunkte und Objekte des Systems.
Gefahr besteht eher, dass Adapter im Rahmen eines Updates Datenstrukturen in ihrem Namespace was Löschen. Aber hier wissen die Entwickler besser Bescheid.
Ansonsten gebe ich Dir Recht - dass man in der Standardansicht nicht mehr Units und andere Eigenschaften des common Objektes im Objekt angeben kann, ist in meinen Augen ein Manko.
Wenn man diesen Komfort nicht im Admin4 gehabt hätte, würde man sich wahrscheinlich über die Komforteinbußen in der weiterentwickelten Version nicht wundern. -
@pedder007 sagte in Admin5: Ich kann keine Objekte mehr manuell anlegen:
Aber es wurde ja auch schon mehrfach erwähnt, dass da irgendwann in der Zukunft bei irgendeiner neuen Java Version da evtl. mal was passieren könnte
das wurde von einigen Usern behauptet, stimmt aber nicht
-
@mickym sagte in Admin5: Ich kann keine Objekte mehr manuell anlegen:
Diese beiden Dateien sind in meinen Augen Bestandteil des Backups und enthalten alle Datenpunkte und Objekte des Systems.
so ist es