NEWS
Admin5: Ich kann keine Objekte mehr manuell anlegen
-
@homoran wo ist das Problem. Angenommen ich habe in den Einstellungen (klar wäre eine neue Option) eingestellt das mein userdata nicht default sondern xxx wäre dann wäre die Folge wenn jemand einen Adapter der xxx heißt bei diesen einen User nicht installiert werden kann. Der User kann nun überlegen ob ihm der Adapter so wichtig ist das er alles ändert oder darauf verzichtet und dafür seine Struktur beibehalten kann. Nur weil mein Dataverzeichnis so heißt wie ein Adapter haben doch die anderen User kein Problem. Betroffen sind doch eh eher die User die halbswegs technisch versiert sind.
Ich habe bei mir angefangen zu migrieren und es ist eine Schweinearbeit. Ich habe über 600 Datenpunkte die ich umhängen muss. Dass ist kein großer Spaß. Und ich werde wohl mehrere Wochen brauchen. Positiv daran ist zumindest das ich die Struktur nun noch einmal etwas verfeinert habe und es somit noch übersichtlicher wird… Dauert halt zusätzlich Zeit weil ich nicht einfach nur einen Pfad ersetzen muss.
-
gelöscht
-
gelöscht
-
-
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.