NEWS
Admin5: Ich kann keine Objekte mehr manuell anlegen
-
@siggi0904 Das Script macht aus den Ordnern auch wirklich Objekte - das von das fastfood Ordner und das von paul ordner.gerät.device je Tiefe.
Im Moment siehst Du das Deine Ordner keine Objekte sind, weil das Bleistift Symbol rechts fehlt.
Am Beispiel des Scriptes von @fastfoot musst Du in der Zeile 12 den Pfad zu dem Ordner ändern auf der "Nicht Objekte" Du es laufen lassen möchtest:
Wenn Du das Script über die Objekte des Javascript Adapter laufen lassen möchtest dann eben
const ids = $('javascript.0.*');
Wenn Du das Script über die 0_userdata.0.* Objekte laufen lassen möchtest dann eben
const ids = $('0_userdata.0.*');
und in Zeile 17 änderst Du am besten die Bedingung der Zeile so ab, dass es alle Adapter enthält über die Du das Script laufen lassen willst:
if(arr[0] === '0_userdata' || arr[0] === 'alias' || arr[0] === 'mqtt' || arr[0] === 'javascript'){
-
Danke für die Erklärung.
ich habe die Objekte händisch "repariert" indem ich einen neuen Ordner mit gleichem Namen in der höheren Ebene angelegt habe. So wurden die Ordner repariert und ich kann darunter Objekte anlegen.
Danke.
-
ist es möglich, die genutzten datenpunkte des iqontrol adapters über ein script zu ändern?
wenn die dp von controll-own.0.... auf 0_userdata.0.controll-own. ... umgestellt werden sollen. oder so ähnlich wie in der vis mit search and replace mit z.b. notepad++ ?
@Homoran
ich wäre ja dafür, dass man in den iobroker einstellungen angeben kann, dass man sowas wie "controll-own.0. ..." oder "eigeneDP.0 ..." oder .... hat. neue adapter könnten dann prüfen, ob der name schon existiert und der js-controller und der admin 5 könnten dann dementsprechend umgehen@mickym
weißt du, ob man das mit nodered auch tun kann - z.b. search and replace -
@liv-in-sky sagte in Admin5: Ich kann keine Objekte mehr manuell anlegen:
neue adapter könnten dann prüfen, ob der name schon existiert und der js-controller und der admin 5 könnten dann dementsprechend umgehen
Eher nicht. Da wäre IMHO einem Adapterentwickler nicht zuzumuten.
sein Code wird schon lange fertig sein, bevor er bei dir aufschlägt.Und bei 50.000 Installationen alle selbst vergebenen Namespaces irgendwo zu sammeln kann auch keine Lösung sein.
-
@liv-in-sky sagte in Admin5: Ich kann keine Objekte mehr manuell anlegen:
ist es möglich, die genutzten datenpunkte des iqontrol adapters über ein script zu ändern?
wenn die dp von controll-own.0.... auf 0_userdata.0.controll-own. ... umgestellt werden sollen. oder so ähnlich wie in der vis mit search and replace mit z.b. notepad++ ?
@Homoran
ich wäre ja dafür, dass man in den iobroker einstellungen angeben kann, dass man sowas wie "controll-own.0. ..." oder "eigeneDP.0 ..." oder .... hat. neue adapter könnten dann prüfen, ob der name schon existiert und der js-controller und der admin 5 könnten dann dementsprechend umgehen@mickym
weißt du, ob man das mit nodered auch tun kann - z.b. search and replaceHi,
iQontrol kann das hier:
Zu finden unter Optionen / Geräteoptionen ändern / Gerätedatenpunkte ändern
-
@s-bormann danke - ein problem weniger
-
@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.