NEWS
Redis und "iobroker backup"
-
Bei der Verwendung von redis werden durch "iobroker backup" nicht die Zustände der Objekte abgespeichert. Wer - so wie ich - nun aber viele Objekte unter der javascript-Instanz hat, um z.B. Einstellungen für Rollladen oder Heizung abzulegen, braucht ein Backup für diese Werte.
Da ich keine Lust hatte, mich mit den Backup-Möglichkeiten von redis auseinanderzusetzen, habe ich mir 3 Scripte geschrieben, die ich hiermit als Vorlage hinterlege:
-
backupInstance (instanceName) - legt in destDirectory eine Datei mit allen Objektwerten dieser Instanz ab
-
availableFiles() - Ausgabe aller verfügbaren Dateien in destDirectory
-
restore (fileName) - Schreibt die Werte wieder zurück
Einschränkung:
-
derzeit nur "number", "boolean" und "string" unterstützt. Bei allen anderen Typen wird versucht den Wert als string abzulegen
-
um die Werte voneinander abzugrenzen wird ein "##" zwischen den Werten eingefügt. Wenn das jemand als normalen Wert in einem String hat, wird es zu Problemen kommen
! ```
// 20170826 - Fehlerausgabe verbessert // 20170826 - Fehler Sonderzeichen behoben ! var destDirectory = "/opt/iobroker/backups/"; ! backupInstance("javascript.0"); // availableFiles(); // restore("2017_08_26-11_42_46_backupjavascript.0Objects.txt"); ! // // backup instance // function backupInstance(instanceName) { var now = new Date(); var fileName = destDirectory + _date2String(now) + "-" + _time2String(now) + "_backup" + instanceName + "Objects" +".txt"; exec("touch " + fileName,function (error, stdout, stderr) { if (error) log("touch :" + stderr,"error"); else { var counter = 0; var objects = $('[id=' + instanceName + '.*]'); objects.each(function (id, i) { if( id.indexOf("scriptEnabled")<0 && id.indexOf("=null")<0 && id.indexOf("system.adapter.")<0 && id.indexOf("Servicemeldungen")<0 ) { var value = getState(id).val; var text = id + "=" + value; counter++; text = counter + "-" + text + "##"; exec("echo \"" + text + "\" >> " + fileName,function (error, stdout, stderr) {if (error) log("echo : " + text + " (" + stderr + ")","error");}); } }); log("done - " + counter); } }); } ! // // restore data from fileName // function restore (fileName) { exec("cat " + destDirectory + fileName, function (error, stdout, stderr) { if (error) log(stderr,"error"); else { var counter = 0; var objects = stdout.split("##"); log(objects.length-1 + " objects found"); for (var i=0; i <objects.length-1;i++) {/var/text="objects[i];" id="text.substring(text.indexOf("-")+1,text.indexOf("="));" object="getObject(id);" if(object)/counter/++;/value="text.substring(text.indexOf("=")+1);" type="object.common.type;" switch/(type)/case/"number":/valn="Number(value);" log("number/"/+/valn);/setstate(id,valn);/break;/"boolean":/valb="(value" =="true" );/log("boolean/valb);/setstate(id,valb);/"string":/log/("string/value);/setstate(id,value);/default:/log("unsupported/type:/type,"warn");/}/else/log("object/does/not/exist:/id,"warn");/log("done/-/counter);/});/write/available/file/names/to/function/availablefiles()/exec("ls/destdirectory/"*.txt",/(error,/stdout,/stderr)/files="stdout.split(destDirectory);" log(files.length);/for/(var/i="0;i<files.length;i++)" (files[i]);/lib/_time2string(time)/hours="time.getHours();" minutes="time.getMinutes();" seconds="time.getSeconds();" retval="hours">9 ? hours : "0"+hours; retval += "_"; retval += minutes > 9 ? minutes : "0"+minutes; retval += "_"; retval += seconds > 9 ? seconds : "0"+seconds; return (retval); } ! function _date2String(date) { var day = date.getDate(); var month = date.getMonth() + 1; var year = date.getFullYear(); var retval = year; retval += "_"; retval += month > 9 ? month : "0"+month; retval += "_"; retval += day > 9 ? day : "0"+day; return (retval); }</objects.length-1;i++)>[/i][/i] -
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden