Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. Admin5: Ich kann keine Objekte mehr manuell anlegen

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.5k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.0k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.6k

Admin5: Ich kann keine Objekte mehr manuell anlegen

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
466 Beiträge 36 Kommentatoren 92.8k Aufrufe 25 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • liv-in-skyL liv-in-sky

    @fastfoot sagte in Admin5: Ich kann keine Objekte mehr manuell anlegen:

    @paul53 sagte in Admin5: Ich kann keine Objekte mehr manuell anlegen:

    Ob man aus der letzten Zeile wieder ein Blockly machen kann?

    Man kann, ich habe dazu auch schon verschiedene Beiträge gepostet. Die Behandlung ist etwas unterschiedlich je nachdem woher die Daten kommen(Extract aller Skripte, Blockly.js, backup.json). Hier mal für ein Beispiel für eine Blocklydatei im Mirrorpfad. Man könnte diese auch gleich ins System einlesen, ist hier aber nicht gemacht sondern wird als Datei zur Verfügung gestellt. Ist ein Skript aus meiner ersten Zeit mit Javascript.
    Pfad und Filename sind in den Zeilen 8 + 9 anzugeben, die Importdaten liegen dann als Datei.xml vor

     /**
     * Zweck:       Extrahiert XML Datei aus Blockly.js im Mirror-Pfad
     * Datum:       08.08.2021
     * Autor:       @fastfoot
     */
    var fs = require('fs');
    
    var scriptPath = '/opt/iobroker/scripts/';
    var inFile = 'TestXY'
    
    var scriptName1 = scriptPath + inFile + '.js';
    var scriptName2 = scriptName1.replace('.js','.xml');
    
    function getXML() {
        fs.readFile(scriptName1, 'utf8',  function(error, data) {
            if(error) log('Fehler beim Lesen von ' + scriptName1, 'error');
            else {
                const pos = data.lastIndexOf('\n');
                if (pos !== -1) {
                    data = data.substring(pos + 1);
                    if (data[0] === '/' && data[1] === '/') {
                        data = decodeURIComponent(Buffer.from(data.substring(2), 'base64').toString('utf8'));
                        if (data.startsWith('<xml xmlns')) {
                            fs.writeFile(scriptName2, data, function(err) {
                                if(err) return console.log(err);
                            });
                        }
                    }
                }
            }
        });
    }
    
    getXML();
    

    wußte gar nicht, dass du sowas gemacht hast - muss ich mal testen n - das wäre def. eine große hilfe

    könnte man da noch js scripte mit reinbingen, damit dort auch die objecte replaced werden können und eine schleife für einen bestimmten ordner - wie "controll-own.0.xxx"

    EDIT: sowas: "filesystem.readdirSync(dir).forEach(function(file) {"

    F Offline
    F Offline
    fastfoot
    schrieb am zuletzt editiert von
    #181

    @liv-in-sky sagte in Admin5: Ich kann keine Objekte mehr manuell anlegen:

    wußte gar nicht, dass du sowas gemacht hast - muss ich mal testen n - das wäre def. eine große hilfe

    da hast du meine Beiträge wohl nicht beachtet, bin ja auch noch nicht soo lange im Forum aktiv. Ausserdem waren das fast alles Antworten auf Probleme Anderer, keine eigenen, als [Skript] gekennzeichnete eigene Threads. Ich finde die teilweise selbst nicht mehr mit der SuFu hier im Forum

    könnte man da noch js scripte mit reinbingen, damit dort auch die objecte replaced werden können und eine schleife für einen bestimmten ordner - wie "controll-own.0.xxx"
    EDIT: sowas: "filesystem.readdirSync(dir).forEach(function(file) {"

    Können täte man, habe mal so einen kompletten Mirrorpfad in mein Testsystem importiert, rein aus Spaß. Ich verstehe allerdings nicht ganz was du konkret vorhast. Wenn du mal so ein Skript posten würdest und was du daran ändern möchtest kann ich gerne mal schauen

    iobroker läuft unter Docker auf QNAP TS-451+
    SkriptRecovery: https://forum.iobroker.net/post/930558

    liv-in-skyL 1 Antwort Letzte Antwort
    0
    • F fastfoot

      @liv-in-sky sagte in Admin5: Ich kann keine Objekte mehr manuell anlegen:

      wußte gar nicht, dass du sowas gemacht hast - muss ich mal testen n - das wäre def. eine große hilfe

      da hast du meine Beiträge wohl nicht beachtet, bin ja auch noch nicht soo lange im Forum aktiv. Ausserdem waren das fast alles Antworten auf Probleme Anderer, keine eigenen, als [Skript] gekennzeichnete eigene Threads. Ich finde die teilweise selbst nicht mehr mit der SuFu hier im Forum

      könnte man da noch js scripte mit reinbingen, damit dort auch die objecte replaced werden können und eine schleife für einen bestimmten ordner - wie "controll-own.0.xxx"
      EDIT: sowas: "filesystem.readdirSync(dir).forEach(function(file) {"

      Können täte man, habe mal so einen kompletten Mirrorpfad in mein Testsystem importiert, rein aus Spaß. Ich verstehe allerdings nicht ganz was du konkret vorhast. Wenn du mal so ein Skript posten würdest und was du daran ändern möchtest kann ich gerne mal schauen

      liv-in-skyL Offline
      liv-in-skyL Offline
      liv-in-sky
      schrieb am zuletzt editiert von
      #182

      @fastfoot

      ich möchte meine datenpunkte von "controll-own.0" nach "0_userdata.0.controll-own." umstellen

      normalerweise, wenn ich es sehe, schau ich mir deine sachen gerne an - du hast eigentlich immer gute scripte am start :-)

      ich hab auch ein script, dass alle scripte im mirror-pfad einliest und durchsucht - ich suche darin nach datenpunkten und schaue nach, ob die noch existieren (war mal zum testen) cool wäre es, wenn man in den einzelnen scripten die object-pfade ändern könnte - bei mir - alles was "controll-own.0." enthält in "0_userdata.0.controll-own." zu ändern - vorallem auch in blocklys

      ich denke, man könnte das evtl mit nodered auch machen (weiß ich nicht - müßte man schauen, wie dort gespeichert wird)

      dann noch ein paar adapter settting angleichen und die ganzen vis seiten und fertig ist die umsetellung von "controll-own.0" nach "0_userdata.0.controll-own."

      nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

      F 1 Antwort Letzte Antwort
      0
      • apollon77A apollon77

        @paul53 sagte in Admin5: Ich kann keine Objekte mehr manuell anlegen:

        Weshalb ist "controll-own.0" ein Folder-Objekt? Ändere es in den Eigenschaften in "meta".

        Nee bitte nicht meta ... Das ist für was anderes

        paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von
        #183

        @apollon77 sagte: Nee bitte nicht meta ... Das ist für was anderes

        @liv-in-sky sagte in Admin5: Ich kann keine Objekte mehr manuell anlegen:

        @apollon77 was soll ich da reinschreiben ? was hälst du für besser

        Das würde mich auch interessieren.

        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

        apollon77A 1 Antwort Letzte Antwort
        0
        • HomoranH Homoran

          @abruni sagte in Admin5: Ich kann keine Objekte mehr manuell anlegen:

          Einerseits lese ich, dass diese DP bei einem javascript Update gelöscht werden, andererseits, dass da auf "lange Zeit nichts passieren wird". Was ist nun richtig? Werden eigene DP in javascript.0 "geduldet"

          da fehlt ein wichtiges Wort

          bei einem javascript Update gelöscht werden könnten

          der Rest passt

          A Offline
          A Offline
          Abruni
          schrieb am zuletzt editiert von
          #184

          @homoran said in Admin5: Ich kann keine Objekte mehr manuell anlegen:
          könnte?
          Und dass ist wovon abhängig, kommt das automatisch mit der Zeit, oder ist das zufällig wie das Wetter? Wird das vorher nochmal kommuniziert, oder trifft es einen dann irgendwann überraschend, dass nichts mehr funktioniert? Gab es da vorher, mal einen Hinweis den ich nicht mitbekommen habe, dass man seine DP zu 0_Userdata umziehen sollte? Und, gibt es dafür evtl. einen Lösungsvorschlag?

          HomoranH 1 Antwort Letzte Antwort
          0
          • liv-in-skyL liv-in-sky

            @fastfoot

            ich möchte meine datenpunkte von "controll-own.0" nach "0_userdata.0.controll-own." umstellen

            normalerweise, wenn ich es sehe, schau ich mir deine sachen gerne an - du hast eigentlich immer gute scripte am start :-)

            ich hab auch ein script, dass alle scripte im mirror-pfad einliest und durchsucht - ich suche darin nach datenpunkten und schaue nach, ob die noch existieren (war mal zum testen) cool wäre es, wenn man in den einzelnen scripten die object-pfade ändern könnte - bei mir - alles was "controll-own.0." enthält in "0_userdata.0.controll-own." zu ändern - vorallem auch in blocklys

            ich denke, man könnte das evtl mit nodered auch machen (weiß ich nicht - müßte man schauen, wie dort gespeichert wird)

            dann noch ein paar adapter settting angleichen und die ganzen vis seiten und fertig ist die umsetellung von "controll-own.0" nach "0_userdata.0.controll-own."

            F Offline
            F Offline
            fastfoot
            schrieb am zuletzt editiert von
            #185

            @liv-in-sky sagte in Admin5: Ich kann keine Objekte mehr manuell anlegen:

            ich möchte meine datenpunkte von "controll-own.0" nach "0_userdata.0.controll-own." umstellen

            du kannst doch unmittelbar vor dem Schreiben der XML-Datei ein data.replace(/oldPath/g,newPath) machen. Schwierig wird es mit JS-Funktionen, die sind auch base64 codiert, sollte aber gehen

            Hier mal ein kmpl. anderer Ansatz, extrahiert werden alle Skripte aus einer objects.json und wahlweise als Textdatei und/oder ins System geschrieben(mit Endung .bak). Eine Auflistung der Skripte wird in eine json exportiert.

            • Backup machen!
            • System stoppen(sonst könnte die objects.json beschädigt sein!)
            • objects.json nach zB /opt/iobroker/restore im Testsystem kopieren (oder im Produktiv :-) )
            • Die Zeilen 8-11 beachten
            • Skript laufen lassen und den Export anschauen, danach die Variablen zum Schreiben in eine Datei oder ins System auf true setzen
            • evtl. den Lauf auf ein einziges Skript/einzelnen Pfad (Zeile 32) beschränken, sonst wird es schnell unübersichtlich
            • Backup nicht vergessen!

            habe es nicht mehr extra laufen lassen, sollte aber noch funktionieren, sonst halt melden. Die replace Funktionen sind nicht drin, bei Blockly in handleBlockly() einfach einbauen

            /**
            * Zweck:   Extract scripts from objects.json
            * Datum:   16.11.2020
            * Autor:   @fastfoot
            */
            const fs = require('fs'),
               path = require('path'),
               restoreToSystemDb = !true,              // lädt die Daten sofort ins System(ACHTUNG! *** auf eigenes Risiko ***)
               restoreAsFile = !true,                  // Datei ins Filesystem schreiben
               pathToRestore = '/opt/iobroker/restore/', // <=== Pfad eintragen mit abschliessendem /
               fileName = 'objects.json';              // Dateiname der objects.json
            
            main(pathToRestore, fileName)
            
            async function main(pathRestore, fileName) {
               let allObjects = {},
                   script = {},
                   ext = '',
                   data = '',
                   resultText = 'Gefundene Skripte ' + formatDate(new Date().getTime(),'DD.MM.YYYY hh:mm') + '\n\n',
                   res = {};
            
               try {
                   allObjects = JSON.parse(fs.readFileSync(pathRestore + fileName, 'utf8'))
               } catch (e) {
                   log(`Fehler beim Lesen von ${fileName} in ${pathRestore}: ` + e, "error")
               }
               let i = 0;
               for (let key in allObjects) {
                   script = allObjects[key];
                   if (script.type == 'script') {
                       if (!existsObject(key)  && restoreToSystemDb) {
                           script.common.name += '.bak';
                           setObject(key, { type: script.type, common: script.common });
                           //setObject(key, allObjects[key]);
                       }
                       if (restoreAsFile) {
                           data = script.common.source;
                           switch (script.common.engine.toLowerCase()) {
                               case 'blockly':
                                   ext = 'xml';
                                   data = handleBlockly(script.common.source)
                                   break;
                               case 'javascript/js':
                                   ext = '.js';
                                   break;
                               case 'typescript/ts':
                                   ext = '.ts';
                                   break;
                               default:
                                   ext = '.js';
                           }
                           fs.writeFile(pathRestore + key.substring(10) + ext, data, e => {
                               if (e) log('Fehler beim Schreiben der Datei:' + e.error)
                           })
                       }
                       //res[key.substr(10)] = {name: script.common.name,typ:script.common.engineType};
                       res[key.substr(10)] = script.common.engineType;
                       //resultText += 'Skript: ' + script.common.name + '\t\t\t\t\t\t' + 'Typ: ' + script.common.engineType + '\n';
                   }
               }
               /*fs.writeFile(pathRestore + 'GefundeneSkripte.txt', resultText, e => {
                   if (e) log('Schreibfehler bei Ergebnisdatei');
               })*/
            
               // sortieren
               let b = {};
               let a=Object.keys(res).sort();
               for(let i=0;i<a.length;i++){
                   b[i + ' ' + a[i]]=res[a[i]];
               }
            
               fs.writeFile(pathRestore + 'GefundeneSkripte.json', JSON.stringify(b,null,3), e => {
                   if (e) log('Schreibfehler bei Ergebnisdatei');
               })
            
               log('done')
            }
            
            function handleBlockly(source){
               const pos = source.lastIndexOf('\n');
               if (pos !== -1) {
                   source = source.substring(pos + 3);
                   if(source.indexOf('JTNDeG1sJTIweG1') > -1) {
                       source = decodeURIComponent(Buffer.from(source, 'base64').toString('utf8'));
                       return prettifyXml(source);
                   }
               }
            }
            
            //from Stackoverflow
            function prettifyXml(xml){
               var reg = /(>)\s*(<)(\/*)/g;
               xml = xml.replace(/\r|\n/g, ''); //deleting already existing whitespaces
               xml = xml.replace(reg, '$1\r\n$2$3');
               return xml;
            }
            

            iobroker läuft unter Docker auf QNAP TS-451+
            SkriptRecovery: https://forum.iobroker.net/post/930558

            liv-in-skyL 1 Antwort Letzte Antwort
            3
            • A Abruni

              @homoran said in Admin5: Ich kann keine Objekte mehr manuell anlegen:
              könnte?
              Und dass ist wovon abhängig, kommt das automatisch mit der Zeit, oder ist das zufällig wie das Wetter? Wird das vorher nochmal kommuniziert, oder trifft es einen dann irgendwann überraschend, dass nichts mehr funktioniert? Gab es da vorher, mal einen Hinweis den ich nicht mitbekommen habe, dass man seine DP zu 0_Userdata umziehen sollte? Und, gibt es dafür evtl. einen Lösungsvorschlag?

              HomoranH Nicht stören
              HomoranH Nicht stören
              Homoran
              Global Moderator Administrators
              schrieb am zuletzt editiert von
              #186

              @abruni Ist diese Antwort ernst gemeint?
              ich hoffe nicht.

              trotzdem:
              Das ist doch alles bereits gesagt worden.

              • bei einer breaking change in einem Namespace eines jeden Adapters könnte es dazu kommen, dass erst einmal alles geleert wird.
              • so etwas steht dann in dem changelog, der dir ja jetzt ab admin v5 angezeigt wird, bevor du auf update klickst
              • dies bei javascript die nächste Zeit nicht passieren wird
              • und selbstverständlich vorher kommuniziert wird.
                • genau wie die Information seit der Existenz des Namespaces 0_userdata.0, dass dies der Platz für eigene Datenpunkte sein soll mit Ausnahme von javascript.0/1/2...

              kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

              Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

              der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

              A 1 Antwort Letzte Antwort
              -1
              • HomoranH Homoran

                @abruni Ist diese Antwort ernst gemeint?
                ich hoffe nicht.

                trotzdem:
                Das ist doch alles bereits gesagt worden.

                • bei einer breaking change in einem Namespace eines jeden Adapters könnte es dazu kommen, dass erst einmal alles geleert wird.
                • so etwas steht dann in dem changelog, der dir ja jetzt ab admin v5 angezeigt wird, bevor du auf update klickst
                • dies bei javascript die nächste Zeit nicht passieren wird
                • und selbstverständlich vorher kommuniziert wird.
                  • genau wie die Information seit der Existenz des Namespaces 0_userdata.0, dass dies der Platz für eigene Datenpunkte sein soll mit Ausnahme von javascript.0/1/2...
                A Offline
                A Offline
                Abruni
                schrieb am zuletzt editiert von
                #187

                @homoran
                Ist diese Antwort ernst gemeint?
                Ja, weil meine Fragen immer noch nicht beantwortet wurden, bzw. widersprüchlich.
                so etwas steht dann in dem changelog, der dir ja jetzt ab admin v5 angezeigt wird
                Kann ich das wissen, ohne Admin5 installiert zu haben? Ich würde wohl kaum fragen, wenn ich keine Bedenken hätte dies zu tun.
                genau wie die Information seit der Existenz des Namespaces 0_userdata.0, dass dies der Platz für eigene Datenpunkte sein soll mit Ausnahme von javascript.0/1/2...
                Genauso habe ich es doch auch geschrieben und habe JEDE Empfehlung befolgt. Bevor es 0_Userdata gab, sollten eigene DP im Javascript.0 angelegt werden, habe ich gemacht. Dann kam der Ordner 0_Userdata und die Empfehlung die DP dort anzulegen, habe ich gemacht. Also verstehe ich nicht, warum Du so einen Ton anschlägst und da Du selber schreibst "mit Ausnahme von javascript.0/1/2" weiss ich immer noch nicht, wie eine Lösung aussehen könnte.

                crunchipC HomoranH 2 Antworten Letzte Antwort
                0
                • A Abruni

                  @homoran
                  Ist diese Antwort ernst gemeint?
                  Ja, weil meine Fragen immer noch nicht beantwortet wurden, bzw. widersprüchlich.
                  so etwas steht dann in dem changelog, der dir ja jetzt ab admin v5 angezeigt wird
                  Kann ich das wissen, ohne Admin5 installiert zu haben? Ich würde wohl kaum fragen, wenn ich keine Bedenken hätte dies zu tun.
                  genau wie die Information seit der Existenz des Namespaces 0_userdata.0, dass dies der Platz für eigene Datenpunkte sein soll mit Ausnahme von javascript.0/1/2...
                  Genauso habe ich es doch auch geschrieben und habe JEDE Empfehlung befolgt. Bevor es 0_Userdata gab, sollten eigene DP im Javascript.0 angelegt werden, habe ich gemacht. Dann kam der Ordner 0_Userdata und die Empfehlung die DP dort anzulegen, habe ich gemacht. Also verstehe ich nicht, warum Du so einen Ton anschlägst und da Du selber schreibst "mit Ausnahme von javascript.0/1/2" weiss ich immer noch nicht, wie eine Lösung aussehen könnte.

                  crunchipC Abwesend
                  crunchipC Abwesend
                  crunchip
                  Forum Testing Most Active
                  schrieb am zuletzt editiert von
                  #188

                  @abruni sagte in Admin5: Ich kann keine Objekte mehr manuell anlegen:

                  weiss ich immer noch nicht, wie eine Lösung aussehen könnte.

                  die Lösung ist, das alles was in javascript angelegt wurde bis auf weiteres auch dort bleiben kann. Für Neuankömmlinge wurde der userdata geschaffen um es zukünftig übersichtlicher zu gestalten und etwaige Fehler vermieden werden.
                  ein "umsetzen" von javascript zu userdata ist letztendlich jedem selbst überlassen

                  umgestiegen von Proxmox auf Unraid

                  A 1 Antwort Letzte Antwort
                  1
                  • A Abruni

                    @homoran
                    Ist diese Antwort ernst gemeint?
                    Ja, weil meine Fragen immer noch nicht beantwortet wurden, bzw. widersprüchlich.
                    so etwas steht dann in dem changelog, der dir ja jetzt ab admin v5 angezeigt wird
                    Kann ich das wissen, ohne Admin5 installiert zu haben? Ich würde wohl kaum fragen, wenn ich keine Bedenken hätte dies zu tun.
                    genau wie die Information seit der Existenz des Namespaces 0_userdata.0, dass dies der Platz für eigene Datenpunkte sein soll mit Ausnahme von javascript.0/1/2...
                    Genauso habe ich es doch auch geschrieben und habe JEDE Empfehlung befolgt. Bevor es 0_Userdata gab, sollten eigene DP im Javascript.0 angelegt werden, habe ich gemacht. Dann kam der Ordner 0_Userdata und die Empfehlung die DP dort anzulegen, habe ich gemacht. Also verstehe ich nicht, warum Du so einen Ton anschlägst und da Du selber schreibst "mit Ausnahme von javascript.0/1/2" weiss ich immer noch nicht, wie eine Lösung aussehen könnte.

                    HomoranH Nicht stören
                    HomoranH Nicht stören
                    Homoran
                    Global Moderator Administrators
                    schrieb am zuletzt editiert von
                    #189

                    @abruni jetzt bin ich aber massiv verwirrt.

                    Abgesehen davon, dass ich den unstrukturierten Text jetzt mehrfach gelesen habe, verstehe ich wirklich nicht wo du ein Problem mit meiner Antwort hattest.

                    Ich habe leider nicht auf die Frage mit dem Wetter geantwortet, aber denke sonst alles beantwortet zu haben

                    kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                    der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                    1 Antwort Letzte Antwort
                    0
                    • crunchipC crunchip

                      @abruni sagte in Admin5: Ich kann keine Objekte mehr manuell anlegen:

                      weiss ich immer noch nicht, wie eine Lösung aussehen könnte.

                      die Lösung ist, das alles was in javascript angelegt wurde bis auf weiteres auch dort bleiben kann. Für Neuankömmlinge wurde der userdata geschaffen um es zukünftig übersichtlicher zu gestalten und etwaige Fehler vermieden werden.
                      ein "umsetzen" von javascript zu userdata ist letztendlich jedem selbst überlassen

                      A Offline
                      A Offline
                      Abruni
                      schrieb am zuletzt editiert von
                      #190

                      @crunchip
                      Ja danke. Mit genau so einer Antwort kann ich etwas anfangen. Mit der Aussage "die DP könnten gelöscht werden", ohne weiter drauf einzugehen, wann und wodurch eher nicht. Wenn es möglich ist, nach und nach die DP von Javascript nach 0_Userdata umzuziehen, steht doch einem Update nichts mehr im Wege. Nochmals DANKE!

                      1 Antwort Letzte Antwort
                      0
                      • apollon77A apollon77

                        @dr-bakterius Ja Du kannst den JavaScript code Anpassen aber das ändert nichts an den Daten in den Blocklies ... Sobald du das Blockly dann im Editor anfassen würdest wäre alles zurückgestellt. Das geht nicht

                        Dr. BakteriusD Offline
                        Dr. BakteriusD Offline
                        Dr. Bakterius
                        Most Active
                        schrieb am zuletzt editiert von
                        #191

                        @apollon77 sagte in Admin5: Ich kann keine Objekte mehr manuell anlegen:

                        Du kannst den JavaScript code Anpassen aber das ändert nichts an den Daten in den Blocklies

                        Das bedeutet, dass man in diesem Fall jedes Blockly öffnen, exportieren, suchen/ersetzen, importieren und wieder speichern muss um entsprechende Punkte zu ändern? Dann lass ich es lieber in 'javascript.0' liegen - ist mir zu viel Aufwand. Ich hoffe nur, dass ihr da nie mal meint, dass das nicht mehr regelkonform ist und man gezwungen wird das zu ändern.

                        F 1 Antwort Letzte Antwort
                        2
                        • Dr. BakteriusD Dr. Bakterius

                          @apollon77 sagte in Admin5: Ich kann keine Objekte mehr manuell anlegen:

                          Du kannst den JavaScript code Anpassen aber das ändert nichts an den Daten in den Blocklies

                          Das bedeutet, dass man in diesem Fall jedes Blockly öffnen, exportieren, suchen/ersetzen, importieren und wieder speichern muss um entsprechende Punkte zu ändern? Dann lass ich es lieber in 'javascript.0' liegen - ist mir zu viel Aufwand. Ich hoffe nur, dass ihr da nie mal meint, dass das nicht mehr regelkonform ist und man gezwungen wird das zu ändern.

                          F Offline
                          F Offline
                          fastfoot
                          schrieb am zuletzt editiert von
                          #192

                          @dr-bakterius sagte in Admin5: Ich kann keine Objekte mehr manuell anlegen:

                          ist mir zu viel Aufwand

                          ein paar Posts weiter oben geht es um das automatische Ersetzen im Blockly, auch aus einem Pfad heraus. Vielleicht hilft dir das ja

                          iobroker läuft unter Docker auf QNAP TS-451+
                          SkriptRecovery: https://forum.iobroker.net/post/930558

                          1 Antwort Letzte Antwort
                          0
                          • F fastfoot

                            @liv-in-sky sagte in Admin5: Ich kann keine Objekte mehr manuell anlegen:

                            ich möchte meine datenpunkte von "controll-own.0" nach "0_userdata.0.controll-own." umstellen

                            du kannst doch unmittelbar vor dem Schreiben der XML-Datei ein data.replace(/oldPath/g,newPath) machen. Schwierig wird es mit JS-Funktionen, die sind auch base64 codiert, sollte aber gehen

                            Hier mal ein kmpl. anderer Ansatz, extrahiert werden alle Skripte aus einer objects.json und wahlweise als Textdatei und/oder ins System geschrieben(mit Endung .bak). Eine Auflistung der Skripte wird in eine json exportiert.

                            • Backup machen!
                            • System stoppen(sonst könnte die objects.json beschädigt sein!)
                            • objects.json nach zB /opt/iobroker/restore im Testsystem kopieren (oder im Produktiv :-) )
                            • Die Zeilen 8-11 beachten
                            • Skript laufen lassen und den Export anschauen, danach die Variablen zum Schreiben in eine Datei oder ins System auf true setzen
                            • evtl. den Lauf auf ein einziges Skript/einzelnen Pfad (Zeile 32) beschränken, sonst wird es schnell unübersichtlich
                            • Backup nicht vergessen!

                            habe es nicht mehr extra laufen lassen, sollte aber noch funktionieren, sonst halt melden. Die replace Funktionen sind nicht drin, bei Blockly in handleBlockly() einfach einbauen

                            /**
                            * Zweck:   Extract scripts from objects.json
                            * Datum:   16.11.2020
                            * Autor:   @fastfoot
                            */
                            const fs = require('fs'),
                               path = require('path'),
                               restoreToSystemDb = !true,              // lädt die Daten sofort ins System(ACHTUNG! *** auf eigenes Risiko ***)
                               restoreAsFile = !true,                  // Datei ins Filesystem schreiben
                               pathToRestore = '/opt/iobroker/restore/', // <=== Pfad eintragen mit abschliessendem /
                               fileName = 'objects.json';              // Dateiname der objects.json
                            
                            main(pathToRestore, fileName)
                            
                            async function main(pathRestore, fileName) {
                               let allObjects = {},
                                   script = {},
                                   ext = '',
                                   data = '',
                                   resultText = 'Gefundene Skripte ' + formatDate(new Date().getTime(),'DD.MM.YYYY hh:mm') + '\n\n',
                                   res = {};
                            
                               try {
                                   allObjects = JSON.parse(fs.readFileSync(pathRestore + fileName, 'utf8'))
                               } catch (e) {
                                   log(`Fehler beim Lesen von ${fileName} in ${pathRestore}: ` + e, "error")
                               }
                               let i = 0;
                               for (let key in allObjects) {
                                   script = allObjects[key];
                                   if (script.type == 'script') {
                                       if (!existsObject(key)  && restoreToSystemDb) {
                                           script.common.name += '.bak';
                                           setObject(key, { type: script.type, common: script.common });
                                           //setObject(key, allObjects[key]);
                                       }
                                       if (restoreAsFile) {
                                           data = script.common.source;
                                           switch (script.common.engine.toLowerCase()) {
                                               case 'blockly':
                                                   ext = 'xml';
                                                   data = handleBlockly(script.common.source)
                                                   break;
                                               case 'javascript/js':
                                                   ext = '.js';
                                                   break;
                                               case 'typescript/ts':
                                                   ext = '.ts';
                                                   break;
                                               default:
                                                   ext = '.js';
                                           }
                                           fs.writeFile(pathRestore + key.substring(10) + ext, data, e => {
                                               if (e) log('Fehler beim Schreiben der Datei:' + e.error)
                                           })
                                       }
                                       //res[key.substr(10)] = {name: script.common.name,typ:script.common.engineType};
                                       res[key.substr(10)] = script.common.engineType;
                                       //resultText += 'Skript: ' + script.common.name + '\t\t\t\t\t\t' + 'Typ: ' + script.common.engineType + '\n';
                                   }
                               }
                               /*fs.writeFile(pathRestore + 'GefundeneSkripte.txt', resultText, e => {
                                   if (e) log('Schreibfehler bei Ergebnisdatei');
                               })*/
                            
                               // sortieren
                               let b = {};
                               let a=Object.keys(res).sort();
                               for(let i=0;i<a.length;i++){
                                   b[i + ' ' + a[i]]=res[a[i]];
                               }
                            
                               fs.writeFile(pathRestore + 'GefundeneSkripte.json', JSON.stringify(b,null,3), e => {
                                   if (e) log('Schreibfehler bei Ergebnisdatei');
                               })
                            
                               log('done')
                            }
                            
                            function handleBlockly(source){
                               const pos = source.lastIndexOf('\n');
                               if (pos !== -1) {
                                   source = source.substring(pos + 3);
                                   if(source.indexOf('JTNDeG1sJTIweG1') > -1) {
                                       source = decodeURIComponent(Buffer.from(source, 'base64').toString('utf8'));
                                       return prettifyXml(source);
                                   }
                               }
                            }
                            
                            //from Stackoverflow
                            function prettifyXml(xml){
                               var reg = /(>)\s*(<)(\/*)/g;
                               xml = xml.replace(/\r|\n/g, ''); //deleting already existing whitespaces
                               xml = xml.replace(reg, '$1\r\n$2$3');
                               return xml;
                            }
                            

                            liv-in-skyL Offline
                            liv-in-skyL Offline
                            liv-in-sky
                            schrieb am zuletzt editiert von
                            #193

                            @fastfoot vielen dank - ich muss das script mal in ruhe ansehen - schaut interessant aus

                            nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                            falke69F F 2 Antworten Letzte Antwort
                            0
                            • liv-in-skyL liv-in-sky

                              @fastfoot vielen dank - ich muss das script mal in ruhe ansehen - schaut interessant aus

                              falke69F Offline
                              falke69F Offline
                              falke69
                              schrieb am zuletzt editiert von falke69
                              #194

                              Hallo, da ich auch so meine Probleme mit den Erstellen von Datenpunkten in meinen erstellten Verzeichnissen (jetzt Ordner) hatte, habe ich zuerst den Objektbaum als JSON gespeichert und dann vollständig gelöscht. Dann habe ich mich an die Arbeit gemacht und jeden einzelnen Ordner inkl. Unterverzeichnis neu angelegt und dann im Anschluss den zuvor exportierten JSON wieder importiert.
                              Meine erstellten Objekte waren alle wieder vorhanden und in den angelegten Ordnern wieder verfügbar. Jetzt war es mir wieder möglich ein neues Objekt zu erstellen.

                              Selbiges gilt auch für MQTT, jetzt kann ich dort auch wieder in den einzelnen Verzeichnissen / Ordner meine eigenen Datenpunkte erstellen.

                              Einfacher wäre es natürlich, dass man im Nachgang auswählen kann, dass es sich um einen Ordner handelt. Das hätte einiges an Arbeit und Zeit eingespart.:cry: :grimacing: :+1:

                              hier mal ein Ausschnitt:
                              2021-08-09_111128.jpg

                              mickymM 1 Antwort Letzte Antwort
                              1
                              • falke69F falke69

                                Hallo, da ich auch so meine Probleme mit den Erstellen von Datenpunkten in meinen erstellten Verzeichnissen (jetzt Ordner) hatte, habe ich zuerst den Objektbaum als JSON gespeichert und dann vollständig gelöscht. Dann habe ich mich an die Arbeit gemacht und jeden einzelnen Ordner inkl. Unterverzeichnis neu angelegt und dann im Anschluss den zuvor exportierten JSON wieder importiert.
                                Meine erstellten Objekte waren alle wieder vorhanden und in den angelegten Ordnern wieder verfügbar. Jetzt war es mir wieder möglich ein neues Objekt zu erstellen.

                                Selbiges gilt auch für MQTT, jetzt kann ich dort auch wieder in den einzelnen Verzeichnissen / Ordner meine eigenen Datenpunkte erstellen.

                                Einfacher wäre es natürlich, dass man im Nachgang auswählen kann, dass es sich um einen Ordner handelt. Das hätte einiges an Arbeit und Zeit eingespart.:cry: :grimacing: :+1:

                                hier mal ein Ausschnitt:
                                2021-08-09_111128.jpg

                                mickymM Online
                                mickymM Online
                                mickym
                                Most Active
                                schrieb am zuletzt editiert von
                                #195

                                @falke69 Mit dem Skript von fastfood geht das in 1 min - habe auch alle meine mqtt, userdata, alias so gepatched.

                                Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                                falke69F 1 Antwort Letzte Antwort
                                0
                                • liv-in-skyL liv-in-sky

                                  @fastfoot vielen dank - ich muss das script mal in ruhe ansehen - schaut interessant aus

                                  F Offline
                                  F Offline
                                  fastfoot
                                  schrieb am zuletzt editiert von
                                  #196

                                  @liv-in-sky sagte in Admin5: Ich kann keine Objekte mehr manuell anlegen:

                                  @fastfoot vielen dank - ich muss das script mal in ruhe ansehen - schaut interessant aus

                                  ist kein Hexenwerk.

                                  • Es wird jedes Objekt geprüft, ob es ein Skript ist(type == 'script'). Wenn ja, wird das Skript so wie es ist in das System übernommen, mit der Endung .bak. Allerdings nur wenn es nicht vorhanden ist und die Variable zum Einlesen ins System gesetzt ist(restoreToSystemDb == true). Diese Funktionalität eignet sich nur für ein Restore bei verlorenem Skript
                                  • Soll das Skript als File gespeichert werden(restoreAsFile == true) dann wird der Typ bestimmt(blockly, js, ts) und entsprechend der Source extrahiert und mit der passenden Endung ins Dateisystem geschrieben
                                  • Im zweiten Fall kann man ein einfaches replace einbauen, um die Datenpunkte zu ändern. Für js Files könnte man entsprechend den Punkt 1 aufbohren, für Blocklys jedoch nicht da hier nur das XML extrahiert wird, der vorangestellte js code jedoch nicht behandelt wird, das ist also ungeeignet zum direkten Import ins System
                                  • Für alle Skripte wird eine Summary gebildet und ins Dateisystem geschrieben, so als Übersicht was man alles an Skripten hat. Dies passiert unabhängig davon ob man Skripte importiert oder als Datei schreibt

                                  Zum Spielen damit ist halt ein Testsystem sehr gut geeignet. Da ich Docker verwende ist ein solches in wenigen Minuten erstellt und auch schnell wieder gelöscht. Wobei, wenn man nur ins Dateisystem exportiert kann man absolut nichts falsch machen, die einzulesende objects.json muss ja eh eine Kopie des Originals sein, das geht auch wenn man nur ein System zur Verfügung hat

                                  iobroker läuft unter Docker auf QNAP TS-451+
                                  SkriptRecovery: https://forum.iobroker.net/post/930558

                                  falke69F 1 Antwort Letzte Antwort
                                  0
                                  • mickymM mickym

                                    @falke69 Mit dem Skript von fastfood geht das in 1 min - habe auch alle meine mqtt, userdata, alias so gepatched.

                                    falke69F Offline
                                    falke69F Offline
                                    falke69
                                    schrieb am zuletzt editiert von
                                    #197

                                    @mickym

                                    das habe ich sicherlich übersehen. :dizzy_face:

                                    1 Antwort Letzte Antwort
                                    0
                                    • F fastfoot

                                      @liv-in-sky sagte in Admin5: Ich kann keine Objekte mehr manuell anlegen:

                                      @fastfoot vielen dank - ich muss das script mal in ruhe ansehen - schaut interessant aus

                                      ist kein Hexenwerk.

                                      • Es wird jedes Objekt geprüft, ob es ein Skript ist(type == 'script'). Wenn ja, wird das Skript so wie es ist in das System übernommen, mit der Endung .bak. Allerdings nur wenn es nicht vorhanden ist und die Variable zum Einlesen ins System gesetzt ist(restoreToSystemDb == true). Diese Funktionalität eignet sich nur für ein Restore bei verlorenem Skript
                                      • Soll das Skript als File gespeichert werden(restoreAsFile == true) dann wird der Typ bestimmt(blockly, js, ts) und entsprechend der Source extrahiert und mit der passenden Endung ins Dateisystem geschrieben
                                      • Im zweiten Fall kann man ein einfaches replace einbauen, um die Datenpunkte zu ändern. Für js Files könnte man entsprechend den Punkt 1 aufbohren, für Blocklys jedoch nicht da hier nur das XML extrahiert wird, der vorangestellte js code jedoch nicht behandelt wird, das ist also ungeeignet zum direkten Import ins System
                                      • Für alle Skripte wird eine Summary gebildet und ins Dateisystem geschrieben, so als Übersicht was man alles an Skripten hat. Dies passiert unabhängig davon ob man Skripte importiert oder als Datei schreibt

                                      Zum Spielen damit ist halt ein Testsystem sehr gut geeignet. Da ich Docker verwende ist ein solches in wenigen Minuten erstellt und auch schnell wieder gelöscht. Wobei, wenn man nur ins Dateisystem exportiert kann man absolut nichts falsch machen, die einzulesende objects.json muss ja eh eine Kopie des Originals sein, das geht auch wenn man nur ein System zur Verfügung hat

                                      falke69F Offline
                                      falke69F Offline
                                      falke69
                                      schrieb am zuletzt editiert von
                                      #198

                                      @fastfoot

                                      dann suche ich mir das mal mir raus. Vielleicht kann man das ja irgendwann nochmal gebrauchen. :+1:

                                      mickymM paul53P 2 Antworten Letzte Antwort
                                      0
                                      • falke69F falke69

                                        @fastfoot

                                        dann suche ich mir das mal mir raus. Vielleicht kann man das ja irgendwann nochmal gebrauchen. :+1:

                                        mickymM Online
                                        mickymM Online
                                        mickym
                                        Most Active
                                        schrieb am zuletzt editiert von mickym
                                        #199

                                        @falke69 Das ist doch oben in dem 1. Beitrag hier in dem Thread von apollon77 verlinkt

                                        https://forum.iobroker.net/post/660631

                                        Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                                        falke69F 1 Antwort Letzte Antwort
                                        0
                                        • mickymM mickym

                                          @falke69 Das ist doch oben in dem 1. Beitrag hier in dem Thread von apollon77 verlinkt

                                          https://forum.iobroker.net/post/660631

                                          falke69F Offline
                                          falke69F Offline
                                          falke69
                                          schrieb am zuletzt editiert von
                                          #200

                                          @mickym

                                          Danke! Muss ich übersehen haben.

                                          1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

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

                                          627

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe