Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Redis und "iobroker backup"

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Redis und "iobroker backup"

    This topic has been deleted. Only users with topic management privileges can see it.
    • Goersch
      Goersch last edited by

      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:

      1. backupInstance (instanceName) - legt in destDirectory eine Datei mit allen Objektwerten dieser Instanz ab

      2. availableFiles() - Ausgabe aller verfügbaren Dateien in destDirectory

      3. 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(&quot;-&quot;)+1,text.indexOf(&quot;=&quot;));" object="getObject(id);" if(object)/counter/++;/value="text.substring(text.indexOf(&quot;=&quot;)+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]

      1 Reply Last reply Reply Quote 0
      • First post
        Last post

      Support us

      ioBroker
      Community Adapters
      Donate
      FAQ Cloud / IOT
      HowTo: Node.js-Update
      HowTo: Backup/Restore
      Downloads
      BLOG

      750
      Online

      32.0k
      Users

      80.5k
      Topics

      1.3m
      Posts

      1
      1
      950
      Loading More Posts
      • Oldest to Newest
      • Newest to Oldest
      • Most Votes
      Reply
      • Reply as topic
      Log in to reply
      Community
      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
      The ioBroker Community 2014-2023
      logo