NEWS
Admin5: Ich kann keine Objekte mehr manuell anlegen
-
habe gerade den export gesehen -müßte doch auch funktionieren-
export alle flows, löschen flows, search&replace, import flows
-
@liv-in-sky Falls Du pfade in Deinen Flows meinst - klar geht das entweder Flow für Flow oder wie Du sagt für alle Flows. Wenn Du alle Flows als Datei exportierst bekommst im Prinzip eine komplette flows.json zum Download.
Das geht auch einfacher: Sichere Dir einfach die flows.json weg (die enthält alle Flows). Dann kannst sie mit search und replace bearbeiten.
Wenn Du mit Projekten im Node Red arbeitest dann in den Ordner:
-
@liv-in-sky Im Übrigen kannst Du auch über alle Flows natrülich nach dem Pfad suchen - wenn Du was überprüfen oder genauer untersuchen willst
In dem Fall schmeißt er Die alle Nodes über alle Flows raus - die diesen String enthalten.
-
gelöscht
-
@mickym sagte in Admin5: Ich kann keine Objekte mehr manuell anlegen:
Vielleicht kann ja auch der JS -Adapter oder das System bei "undefined" - folder Objekte als Default erstellen.
undefined heisst an sich das was vergessen wurde ... da automatisch auf "folder" zu rate finde ich irgend wie nicht sinnvoll ...
-
@fastfoot Guten Morgen, Danke für das Skript! Könntest du die Möglichkeiten der unterschiedlichen Quellen ggf. in einem eigenen Thread kurz beschreiben? Glaub das würde im ein oder anderen Recovery Fall hilfreich sein (z.B. Backitup sichert aktuell zwar die Blocklys, diese aber nur js-export).
-
gelöscht
-
@darkiop sagte in Admin5: Ich kann keine Objekte mehr manuell anlegen:
@fastfoot Guten Morgen, Danke für das Skript! Könntest du die Möglichkeiten der unterschiedlichen Quellen ggf. in einem eigenen Thread kurz beschreiben? Glaub das würde im ein oder anderen Recovery Fall hilfreich sein (z.B. Backitup sichert aktuell zwar die Blocklys, diese aber nur js-export).
die Skripte wurden hier nur gepostet, um aufzuzeigen wie man evtl. Datenpunkte ersetzen könnte. Es gibt ein Beispiel für eine einzelne Skript-Datei und für alle Skripte.
Es ist derzeit nicht geplant, eine Restore-Suite zu veröffentlichen, welche alle möglichen Quellen abdeckt, im Katastrophenfall ist man da sehr gut mit dem Import aller Skripte bzw. mit dem BackitUp Adapter bedient, letzterer stellt sehr wohl auch Blocklys wieder her. Um ein einzelnes (Blockly)Skript wieder herzustellen empfiehlt sich der Mirrorpfad und das hier gepostete Skript. Für alle anderen Fälle empfehle ich eine Anfrage hier im Forum, dann kann man/ich da speziell darauf eingehen
-
@mickym ich denke der node-out setzt da auch nur die Struktur zusammen und als Ergebnis kommt dann in JS Notation sowas raus:
setObject('xxx.yyy.zzz.dp',....)
Es wird also ein DP in/mit einer Struktur erzeugt, welche evtl. gar nicht vorhanden ist und damit eig. ungültig.Ich sehe da nur zwei Möglichkeiten für die Zukunft:
- iobroker erzeugt diese Strukturen selber wenn nicht vorhanden(generic type==folder)
- iobroker verbietet das Erzeugen von DP in nicht vorhandene Strukturen(nicht nur in der UI sondern auch programmatisch)
- der User kümmert sich selbst um valide Strukturen
auf Dauer das Skript zu nutzen halte ich nicht für sinnvoll, dann kann man die Funktionalität auch gleich einbauen oder konsequent Punkt 2 umsetzen. So wie es jetzt ist bleibt dieses Thema ein Dauerbrenner, fürchte ich
-
@fastfoot sagte in Admin5: Ich kann keine Objekte mehr manuell anlegen:
iobroker erzeugt diese Strukturen selber wenn nicht vorhanden(generic type==folder)
Na das war ja meine präferierte Lösung, die ich @apollon77 so vorgeschlagen hatte. Damit würde halt die Funktionalität wie bisher erhalten bleiben.
Zumindest für die Ordner, in dem man als User solche Strukturen erstellen darf, fände ich das sinnvoll.Ich habe mich da nur mit dem undefined etwas unglücklich ausgedrückt. Mixed als Objekttyp würde aber in diesem Fall eben nicht helfen.
Die 2. Lösung kostet viel mehr Programmieraufwand und ist wahrscheinlich auch langsamer - denn im Prinzip müsste man jede Hierarchieebene prüfen (solange die nicht am Ende steht) und auch auf vorhandene Objekte vor dem Schreiben prüfen.
Und ich denke auch, das letztlich eine setObject/setState - Funktion in der Node arbeitet, d.h. wenn man das generell einfach so macht hat man nicht nur eine Lösung für NodeRed, sondern auch für Blockly etc.
-
@fastfoot Habe gerade mal den Quellcode der iobroker-out Node geschaut, die scheint alles mit setState zu schreiben:
adapter.setState(id, {val, ack}, callback);
Wobei das wahrscheinlich egal ist, weil man einfach die id übergeben hat - egal ob bei setState oder setObject - obwohl das ja dann mit adapter.setState auch eine eigene Funktion im Adapter sein könnte. Ich steck da nicht so tief drin. - Muss ich ja auch nicht - bin ja nur blöder Anwender.
-
@mickym ich bin da ganz bei dir,. den Programmieraufwand hätte jeder anstatt 'nur' der iobroker. Ob das aber wirklich so einfach auf Systemseite umgesetzt werden kann ist eine andere Sache, die ich nicht beurteilen kann. Ich könnte mir vorstellen dass setObject() an sehr vielen Stellen verwendet wird wo es nicht um das (Erst-)Erstellen eines Objektes geht, eine Dauerprüfung auf valide Strukturen würde dann das System erheblich belasten. Die momentane Handhabung scheint mir jedenfalls inkonsequent zu sein.
-
@mickym nee, da müsste mehr sein, ein reines setState() ohne existierendes Objekt wirft einen Fehler und erstellt den state nicht, zumindest im JS-Adapter
-
@mickym Ein Objekt definiert das da was ist und die zugehörigen Metadaten (Typ, min/max und so). Hat aber keinen Wert! Ein State ist der aktuelle Wert des Objekts. Wenn das Objekt mal existiert brauchen nur noch States geschrieben zu werden um die Werte zu ändern
-
@fastfoot Jo
adapter.setObject(id, data, _ => adapter.setState(id, val, () => callback && callback(true)));
-
@apollon77 Das Prinzip hab ich ja verstanden - ich versuche ja nur gerade zu überlegen, wie ein einfache Lösung aussehen könnte. ;), sodass man mit einer "id" einfach weiterarbeiten kann - auch wenn zur Erstellung des Objektes eben nicht alle Hierarchieebenen vorhanden sind.
Und das ist meines Erachtens ja kein Problem von NodeRed oder anderen Logikmaschinen, ich kann ja auch in dem jetzigen Admin einen Datenpunkt mit xx.yy.zz erstellen und yy ist dann automatisch ein nicht existierendes Objekt.
-
@mickym Am Ende müssen die relevanten Adapterentwickler das angehen ... wie node-red und so ... und der controller muss unterstützen. Aber das führt hier etwas zu weit
-
@apollon77 sagte in Admin5: Ich kann keine Objekte mehr manuell anlegen:
@mickym Am Ende müssen die relevanten Adapterentwickler das angehen ... wie node-red und so ... und der controller muss unterstützen. Aber das führt hier etwas zu weit
Na wie gesagt auch der jetzige Admin 5 lässt noch über xxx.yyy.zzz bei der Erstellung eines Datenpunktes "nicht existierende Objekte zu" - deswegen war ich der Meinung es liegt vielleicht nicht nur am einzelnen Adapter, sondern man kann das im System irgendwie lösen. Aber OK führt wohl zu weit.
Mit Umgehungslösungen und dem Skript von @fastfoot kann man sich ja behelfen, zumindest solange nicht weiter eingeschränkt wird!
-
Grundsätzlich muss man mal überlegen warum das so sein muss. Welches zukünftige geplante Feature wird nicht funktionieren, wenn die Objektstruktur nicht bereinigt wird.
oder möchte man nur bereinigen, weil das in einem ursprünglichen Konzept so mal aufgeschrieben wurde?
Ich selbst verwende in meinen Adaptern fast nur Objekte, mit der Bezeichnung von xxx.yyy.zzz. Das ist für die Erstellung und Verwaltung viel einfacher und dennoch hat man in der Visualisierung die Unterteilung in eine "Pseudo-Ordner-Struktur"
Wenn ich jetzt dran denke, das ich für jede Ebene ein separates Objekt anlegen muss, asynchron darauf warten muss, bis es angelegt wurde, dann die nächste Ebene anlegen kann und so fort, dann wird das mit den heutigen mitteln schon aufwändiger.
Das muss ich dann bei jedem Adapterstart auch noch überprüfen (gibt es eigentlich die Funktion: gib mir alle Objekte unterhalb eines Astes?).
Auch hier muss ich warten, bis eine Ebene abgefragt wurde und kann dann erst die nächste Ebene abfragen. -
@oliverio Bitte das Thema "Adapter-Entwicklung" hier nicht auch noch reinmischen ... lasst das bitte in den Entwickler Foren bzw Channeln klären.