NEWS
Objekte sichern
-
@liv-in-sky
Cool, vielen Dank für schnelle & sehr hilfreiche Antwort.
Das probiere ich die Tage mal aus -
@liv-in-sky
hab noch ein kleines Problem mit dem Unterscript für die 000
Hast du ne aktuelle (richtige) Version.
-
ne - leider nicht - mir war das immer egal, es geht ja nur um den namen und ich habe die scripte gleich ausgeführt und die datei gelöscht - ich nutzte das imme rnur einmal
hast du andere pläne mit dem script ?
-
@liv-in-sky sagte in Objekte sichern:
hast du andere pläne mit dem script ?
Ich weiß noch nicht. Aber vielleicht automatisiert die states sichern.
Und dann vielleicht noch auf der synology per ftp. Mal schauen.Aber ich passe das js mal an; wenn du nichts dagegen hast.
Setze es dann wieder hier rein.mfg
Dieter -
ja gerne - habe im moment eh nicht so viel zeit, dass anzupassen
-
so, nun mal geändert; die 000 laufen nun richtig.
// Script um die eigenen DP mit den States zu sichern in einer txt Datei // diese Datei einfach öffnen und den Inhalt in ein Script einfügen und starten - dann werden die DP wieder mit dem richtigen Inhalt befüllt. // ursprünglich geschrieben von @liv-in-sky https://forum.iobroker.net/topic/31769/objekte-sichern/17?page=1 // umgeschrieben und erweitert von @bahnuhr // 09/2022 // Variablen - zum ändern var wo_DP = "javascript.0" // oder z.B. "0_userdata.0" let datei = "/opt/iobroker/state"; // Verzeichnis, wo die Datei gespeichert wird // Variablen - nicht ändern var fs = require('fs'); var now = new Date(); // store current date and time var Jahr = now.getFullYear(); var Monat = now.getMonth()+1; if (Monat < 10) { Monat = "0" + Monat; }; var Tag = now.getDate(); if (Tag < 10) { Tag = "0" + Tag; }; var Thour = now.getHours(); if (Thour < 10) { Thour = "0" + Thour; }; var Tmin = now.getMinutes(); if (Tmin < 10) { Tmin = "0" + Tmin; }; var Tsec = now.getSeconds(); if (Tsec < 10) { Tsec = "0" + Tsec; }; var logdate = Tag + '.' + Monat + '.' + Jahr; var logtime = Thour + ':' + Tmin + ':' + Tsec; // Script Selector var cacheSelectorState = $('[id=' + wo_DP + '.*]'); cacheSelectorState.each(function (id, i) { if (!id.includes('scriptEnabled') && !id.includes('scriptProblem') && !id.includes('debug') && !id.includes('variables') ){ var val1 = getState(id).val; if (val1 == null ) {log(id + " hat keinen state");} else {var zk = "setState('"+id+"', "+val1 +");\n"; if(typeof val1 === "string" && !val1.includes('span') && !val1.includes('class')) { zk = "setState('"+id+"', '"+val1+"');\n"; fs.appendFileSync(datei + "-javascript0-" + logdate + "-"+ logtime + ".txt", zk);} else { fs.appendFileSync(datei + "-javascript0-" + logdate + "-"+ logtime + ".txt", zk);} }; } });
-
Habe den Quellcode nun in ein Java-Script kopiert und ausgeführt - aber es wird mir keine Datei etc. angelegt.
Was mache ich denn falsch?Wie lange muss ich das Skript laufen lassen oder beendet sich das von alleine?
-
hast du im dateisystem nachgeschaut -?
-
@bahnuhr sagte in Objekte sichern:
so, nun mal geändert; die 000 laufen nun richtig.
// Script um die eigenen DP mit den States zu sichern in einer txt Datei // diese Datei einfach öffnen und den Inhalt in ein Script einfügen und starten - dann werden die DP wieder mit dem richtigen Inhalt befüllt. // ursprünglich geschrieben von @liv-in-sky https://forum.iobroker.net/topic/31769/objekte-sichern/17?page=1 // umgeschrieben und erweitert von @bahnuhr // 09/2022 // Variablen - zum ändern var wo_DP = "javascript.0" // oder z.B. "0_userdata.0" let datei = "/opt/iobroker/state"; // Verzeichnis, wo die Datei gespeichert wird // Variablen - nicht ändern var fs = require('fs'); var now = new Date(); // store current date and time var Jahr = now.getFullYear(); var Monat = now.getMonth()+1; if (Monat < 10) { Monat = "0" + Monat; }; var Tag = now.getDate(); if (Tag < 10) { Tag = "0" + Tag; }; var Thour = now.getHours(); if (Thour < 10) { Thour = "0" + Thour; }; var Tmin = now.getMinutes(); if (Tmin < 10) { Tmin = "0" + Tmin; }; var Tsec = now.getSeconds(); if (Tsec < 10) { Tsec = "0" + Tsec; }; var logdate = Tag + '.' + Monat + '.' + Jahr; var logtime = Thour + ':' + Tmin + ':' + Tsec; // Script Selector var cacheSelectorState = $('[id=' + wo_DP + '.*]'); cacheSelectorState.each(function (id, i) { if (!id.includes('scriptEnabled') && !id.includes('scriptProblem') && !id.includes('debug') && !id.includes('variables') ){ var val1 = getState(id).val; if (val1 == null ) {log(id + " hat keinen state");} else {var zk = "setState('"+id+"', "+val1 +");\n"; if(typeof val1 === "string" && !val1.includes('span') && !val1.includes('class')) { zk = "setState('"+id+"', '"+val1+"');\n"; fs.appendFileSync(datei + "-javascript0-" + logdate + "-"+ logtime + ".txt", zk);} else { fs.appendFileSync(datei + "-javascript0-" + logdate + "-"+ logtime + ".txt", zk);} }; } });
du könntest noch beim namen folgendes einfügen - dann muss man da nichts ändern/anpassen
ps: das wurde nicht von mir geschrieben - habe ich irgendwoher kopiert
-
Peinlich - nach dem Pfadname "/opt/iobroker/state" hat einfach nur ein "/" gefehlt
--> /opt/iobroker/state/
-
Könnte man auch noch die Einheiten "unit" und die Datei-Typen "type" mit abspeichern?
-
ich habe dafür immer einen export der objecte im object-tab genommen und beides zusammen gespeichert
die einheit und der type sind ja nicht im dp-state - was das script sichert - sondern im dp-object definiert - das wären dann eh 2 verschiedene daten, da es keinen sinn macht,die in einer datei zu schreiben - also wäre möglich aber dann muss das script anders angelegt werden. es würde dann zuerst ein dp-object angelegt und dann der dp-state geschrieben
ich nutze das meist, um adapter einzubinden, wenn ich ein script schreibe, bei dem ich die dp brauche, aber den adapter nicht installieren kann, weil ich zb. keine devices davon habe. z.b. eine liste aller hmip.0 geräte erstellen: ich habe kein hmip gerät und importiere mir einfach die dp, um das script zu testen
ps:es gehört eigentlich kein / nach state, da state kein verzeichnis, sondern der anfang des namender datei ist