NEWS
[Skript] Namespace für Datenpunkte in Skripten abändern
-
@fastfoot ah ok - ich muss writefile ändern - guter tipp
ich wollte halt die alten files behalten und bei gestoppter vis die dateien einzeln umbenennen - danach vis wieder starten - so mache ich es, wenn ich in einer view "zombie"-widgets habe und diese rauslöschen muss (aus der vis-view.json) - kommt ab und an vor.
bin mir noch nicht sicher, ob ich direkt ins system schreiben soll, nicht das bei der konvertierung etwas schief geht - evtl mach ich einen file rename mit*.bak und erzeuge dann die neuen files mit dem richtigen namen
hier siehst du die ordnerstruktur für alle views https://forum.iobroker.net/post/666097 - jeder ordner unter vis.0 ist eine view - ist nicht wie bei den objects, wo alles in einer datei steht
werd mir morgen wieder zeit dafür nehmen und nochmal drüber nachdenken
-
@liv-in-sky Ah jetzt verstehe ich, ich habe nur eine kleine rudimentäre VIS
Dennoch kamen mir deine Funktionen etwas suspekt vor, hatte auch nur rot im Editor, lief allerdings.
In meinem Beispiel wird ja auch ein Backup der vis-views.json gemacht, die findet sich auch im Filesystem wieder.
Dennoch wüsste ich nicht wie man alle Files direkt im System findet(so wie man DP mit Selektor findet), da braucht es dann wohl das Dateisystem so wie du es gemacht hast. Wenn du die Dateien nur im Filesystem abänderst und zusätzlich eine .bak Datei anlegst, dann ändert sich an der VIS aber erstmal garnichts. Damit es das tut musst du nur in Adaper auf Upload Files klicken, dann erst ändert sich die VIS. Wenns dann nicht klappt die .bak umbenennen, neuer Upload und gut ist. writeFile() ist quasi der Upload für eine einzelne Datei.
-
@fastfoot sagte in [Skript] Namespace für Datenpunkte in Skripten abändern:
Dennoch kamen mir deine Funktionen etwas suspekt vor,
mir auch - hatte ich aus dem internet - für etwas anderes genutzt und einfach mal kopiert - es macht , was es soll - geht sicher einfacher
-
@fastfoot sagte in [Skript] Namespace für Datenpunkte in Skripten abändern:
hatte auch nur rot im Editor
seltsam - bei mir ist da nix rot
ist mit wieder eingefallen - ich wollte in der vis das filesystem abbilden - um evtl mp3's asuszuwählen und diese an einen audio-streamer zu senden - dabei habe ich diesen code gefunden
-
@liv-in-sky sagte in [Skript] Namespace für Datenpunkte in Skripten abändern:
@fastfoot sagte in [Skript] Namespace für Datenpunkte in Skripten abändern:
seltsam - bei mir ist da nix rotmein Editor zickt des Öfteren, aber da war zB ein callback mit return, was eig. keinen Sinn macht
ist mit wieder eingefallen - ich wollte in der vis das filesystem abbilden - um evtl mp3's asuszuwählen und diese an einen audio-streamer zu senden - dabei habe ich diesen code gefunden
hier eine etwas aufgräumtere Version. Es wird ein Backup angelegt und eine neue Datei mit Endung .new. Die css wird nicht angefasst, kannst Du in Zeile 22 ändern.
Nach dem Lauf des Skripts muss wie schon erwähnt ein Upload erfolgen(Nach Rename) oder der auskommentierte Teil benutzt werden.
-
danke - das schaut doch sehr gut aus
dieses script für sich wäre schon einen thread wert
hätte ich gut brauchen können als trashschedule die adapter-object-werte geändert hatte
meine ersten test sehen sehr gut aus - vis und vis-editor zeigen alles richtig an
- habe noch eine whitelist hinzugefügt - falls du dies anders "coden" würdest - einfach ändern - eine einschränkung ist besser beim testen und für den "tägl" gebrauch kann es auch sinnvoll sein, wenn man nur bestimmte vis-projekte ändern kann
- habe auch das backup file unbenannt (datum-uhrzeit) -damit es nicht überschrieben wird
- wenn direkt ins system geschrieben wird, braucht es eigentlich keine new datei
-
das eigentliche thema - habe mal dein script vom ersten post laufen lassen
das sind meine settings:
let dbg = false; // Zusatzausgaben fürs Debugging const newNamespace = '0_userdata.0.CONTROL-OWN'; //neuer Namespace für DP // Eigene Einstellungen const oldNamespace = 'controll-own.0'; //Ordner für Namespace welcher ersetzt wird const replaceInSystemsDB = false;// lädt geänderte Dateien sofort ins System(ACHTUNG! *** auf eigenes Risiko ***) const writeToFileSystem = false;// Geänderte Dateien ins Filesystem schreiben const pathToRestore = '/opt/iobroker/scripte-switch/'; // <=== Pfad eintragen mit abschliessendem / const extChanged = 'Chg'; // Wird im Falle einer Änderung an ID und Name angehangen let changes = 0; // Zählt Änderungen in einem Skript let changesResult = []; // Zussammenfassung der Ergebnisse, wird in DP geschrieben
mit diesen settings sollte ich doch im json widget etwas bekommen bzw. sehen?
mach ich was falsch ?
-
@liv-in-sky sagte in [Skript] Namespace für Datenpunkte in Skripten abändern:
mit diesen settings sollte ich doch im json widget etwas bekommen bzw. sehen?
ja solltest du, Ich hatte gestern plötzlich und aus heiterem Himmel ähnliche Fehler, obwohl im Selektor werden die IDs in der forEach angemault. Für mich sah es so aus dass in jacascript.x.scriptEnabled DPs waren für die es keine Skripte mehr gab(ich verschiebe alte Versionen immer in einen Ordner Löschen). Als Abhilfe habe ich jeweils die kompletten scriptEnabled und scriptProblem gelöscht und nach Neustart der JS-Instanzen aufbauen lassen. Danach waren die Fehler weg. Allerdings hatte ich trotzdem Daten im JSON, ich hatte nicht geprüft ob es alte Daten waren.
Leider kenne ich keinen anderen Weg um Skripte zu listen, als den indirekten Weg über scriptEnabled, zum Glück bleiben dann die Pfade in script.js so erhalten. Der Selektor findet ja nur DP und in script.js(wo die eig. Skripe sind) gibt es keine DP.
-
@liv-in-sky deine Änderungen machen alle Sinn, ganz speziell der timestamp!. Beim Schreiben ins System hatte ich manchmal Fehler, dennoch war die Datei anschliessend vorhanden. Diese Option ist also wirklich nichts für Anfänger, evtl. darf und sollte man das nicht tun
-
@fastfoot thema script enabled
durch meine 3 instanzen kam es da schon immer zu einem extremen wildwuchs (script-enabled) - vorallem, wenn man scripte verschiebt
ich hatte mich nie getraut, script eabled zu löschen - aber du sagst, die legen sich neu an - verstehe ich das richtig ?
ein anderer weg für die scripte - dachte anfangs, dass du das darüber machen wirst:
ich habe mal ein script gemacht um mir alle scripte anzusehen - da nutzte ich die scripte-spiegel function vom js-adapter und ging auch durch das directory - ich glaube das nutzen auch einige, die mit einem anderen/externen script editor arbeitensieht so aus:
-
habe gerade gesehen, dass du ja ein script hast, welches über diesen mirror-ordner geht ( Extrahiert XML Datei aus Blockly.js im Mirror-Pfad)
warum nutzt du diesen weg nicht ? ist das wegen den blockly scripte ?
-
@liv-in-sky sagte in [Skript] Namespace für Datenpunkte in Skripten abändern:
verstehe ich das richtig ?
ja tust du, die beiden Ordner werden beim Neustart der jeweiligen Instanz sofort wieder aufgebaut(dennoch: Backup!). Ich habe das schon oft gemacht und nie(!) Probleme damit gehabt.
Über den Mirrorpfad zu gehen wäre auch eine Option gewesen, eines meiner älteren Skripte nutzt das um aus Blocklys XML Dateien zu erzeugen. ich wollte es aber bewusst so machen. Die dritte Option wäre gewesen, eine Kopie der objects.json zu nutzen, aber da muss man das System vorher stoppen um die Kopie zu ziehen, läuft aber sehr sauber. Das hatte ich ja auch mal gepostet, hatte aber das Namespace Switching nicht mit drin.
Evtl. sollte man aber ein issue zum Selektor aufmachen, das sollte eig. auch mal sauber laufen. Da wollte ich aber noch mehr belastbare Daten haben, damit die Entwicklerdas nachvollziehen können. Vieles ist auf meiner Seite Spekulation. Allerdings wirft das Skript unmittelbar die Fehler unmittelbar nach der Definition des Selektors und anschliessendem Durchlaufen, ohne dass man die Chance hätte etwas falsch zu programmieren
Probiere das doch mal mit Bereinigung dieser beiden Ordner, das geht sehr schnell. Für mich ein Hauptgrund für dieses Skript ist eigentlich die Auflistung mainer Skripte incl. ihres Zweckes, das setzt natürlich immer einen Header vorraus, den du mittlerweile in fast allen meinen Skripten sehen kannst. Ist etwas Arbeit aber für mich hat es sich schon gelohnt
-
@fastfoot sagte in [Skript] Namespace für Datenpunkte in Skripten abändern:
Die dritte Option wäre gewesen, eine Kopie der objects.json zu nutzen, aber da muss man das System vorher stoppen um die Kopie zu ziehen, läuft aber sehr sauber
hört sich für mich ganz gut an - eine sichere methode - ich stoppe auch gerne das system dafür
@fastfoot sagte in [Skript] Namespace für Datenpunkte in Skripten abändern:
Probiere das doch mal mit Bereinigung dieser beiden Ordner
werd ich
@fastfoot sagte in [Skript] Namespace für Datenpunkte in Skripten abändern:
Evtl. sollte man aber ein issue zum Selektor aufmachen
kannst du gerne machen - es gibt überhaupt keinen time-stress . ob das in ein paar tagen oder später funktioniert ist mir nicht wichtig - nur : das es funktioniert
@fastfoot sagte in [Skript] Namespace für Datenpunkte in Skripten abändern:
das setzt natürlich immer einen Header vorraus
ist das der header?
-
@liv-in-sky sagte in [Skript] Namespace für Datenpunkte in Skripten abändern:
ist das der header?
ja, für das JSON Widget braucht es natürlich nur den Zweck, aber ein Datum schadet nie und wenn ich es veröffentliche weiss jeder gleich an wen er sich wenden kann. Mittlerweile habe ich auch oft eine Zeile Forum.
-
die warnings sind jetzt weg - nach dem löschen der script-enabled
nur noch der bekannte error
-
@liv-in-sky sagte in [Skript] Namespace für Datenpunkte in Skripten abändern:
nur noch der bekannte error
na mir ist der nicht bekannt
Evtl. hat ein Skript da keinen source. müsste man prüfen indem man im Selektor auf einen Ordner begrenzt oder auf ein Skript und sich in Zeile 38 den Namen anzeigen lässt
log(obj.common.name);
-
@fastfoot sagte in [Skript] Namespace für Datenpunkte in Skripten abändern:
log(obj.common.name);
meinst du so ?
das waren 2 leere scripte
kannst/willst du das abfangen ?
-
-
@liv-in-sky sagte in [Skript] Namespace für Datenpunkte in Skripten abändern:
das waren 2 leere scripte kannst/willst du das abfangen ?
ja natürlich! Gibt immer wieder Dinge welche man nicht im Traum dran denkt dass sie passieren könnten
-
@liv-in-sky sagte in [Skript] Namespace für Datenpunkte in Skripten abändern:
leere scripte gelöscht - jetzt läuft es durch
wow! ich komme gerade mal auf 255, incl. alter Versionen