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. Skripten / Logik
  4. JavaScript
  5. [Skript] Namespace für Datenpunkte in Skripten abändern

NEWS

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

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

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

[Skript] Namespace für Datenpunkte in Skripten abändern

Geplant Angeheftet Gesperrt Verschoben JavaScript
82 Beiträge 6 Kommentatoren 8.3k Aufrufe 9 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

    super - vielen dank für deinen einsatz

    @fastfoot sagte in [Skript] Namespace für Datenpunkte in Skripten abändern:

    Die neuen Datenpunkte unter 0_userdata.0 sollten/müssen vor dem Neustart der Skripte natürlich schon vorhanden sein(Export Objekstruktur => Ersetzen alter Namespace mit neuem Namespace => Import unter 0_userdata.0)

    das thema wurde bisher im anderen thread auch nur halb erwähnt - die states müssen auch noch "kopiert" werden ! beim import/export der objectstruktur werden die states nicht übernommen !!

    sigi234S Online
    sigi234S Online
    sigi234
    Forum Testing Most Active
    schrieb am zuletzt editiert von
    #7

    @liv-in-sky sagte in [Skript] Namespace für Datenpunkte in Skripten abändern:

    die states müssen auch noch "kopiert" werden

    Verstehe Bahnhof?

    Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
    Immer Daten sichern!

    liv-in-skyL 2 Antworten Letzte Antwort
    0
    • sigi234S sigi234

      @liv-in-sky sagte in [Skript] Namespace für Datenpunkte in Skripten abändern:

      die states müssen auch noch "kopiert" werden

      Verstehe Bahnhof?

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

      @sigi234

      wenn du im objecte tab einen export der objecte machst (über datei export) , und diese datei später wieder mit den neuen pfaden importierst, sind die states nicht mit den alten werten gesetzt

      man exportiert und importiert nur die dp-objecte - die dazugehörigen states werden nicht importiert

      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

      1 Antwort Letzte Antwort
      0
      • sigi234S sigi234

        @liv-in-sky sagte in [Skript] Namespace für Datenpunkte in Skripten abändern:

        die states müssen auch noch "kopiert" werden

        Verstehe Bahnhof?

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

        @sigi234

        Image 2.png

        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

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

          super - vielen dank für deinen einsatz

          @fastfoot sagte in [Skript] Namespace für Datenpunkte in Skripten abändern:

          Die neuen Datenpunkte unter 0_userdata.0 sollten/müssen vor dem Neustart der Skripte natürlich schon vorhanden sein(Export Objekstruktur => Ersetzen alter Namespace mit neuem Namespace => Import unter 0_userdata.0)

          das thema wurde bisher im anderen thread auch nur halb erwähnt - die states müssen auch noch "kopiert" werden ! beim import/export der objectstruktur werden die states nicht übernommen !!

          FredFF Online
          FredFF Online
          FredF
          Most Active Forum Testing
          schrieb am zuletzt editiert von
          #10

          @liv-in-sky sagte in [Skript] Namespace für Datenpunkte in Skripten abändern:

          die states müssen auch noch "kopiert" werden !

          Das habe ich auch schon gemerkt, nur wie kopiert man die states?

          liv-in-skyL 2 Antworten Letzte Antwort
          0
          • sigi234S sigi234

            @fastfoot sagte in [Skript] Namespace für Datenpunkte in Skripten abändern:

            @sigi234 Der Fehler lag in Zeile 26(nach 'Verbesserung' von Variablennamen. Setze dennoch dbg auf false, da wird sehr viel Müll geloggt

            Du hast den Namespace in Zeile 11 nicht geändert, das wird dir keine Änderungen zeigen, ist aber für die Auflistung deiner Skripte völlig ok

            Ok, Zeile 11 muss ich da auch einen Ordner anlegen? Wenn ich const replaceInSystemsDB = false auf true ändere wird ja sofort ins System geschrieben. Ist der Pfad für Windows Systeme?

            Info:
            Tabelle wird Richtig im Verzeichnis angelegt.

            LOG:

            javascript.0
            2021-08-18 08:35:56.416	info	script.js.Sigi.Namespace1: registered 0 subscriptions and 0 schedules
            
            javascript.0
            2021-08-18 08:35:56.415	warn	at script.js.Sigi.Namespace1:189:3
            
            javascript.0
            2021-08-18 08:35:56.415	warn	at script.js.Sigi.Namespace1:186:1
            
            javascript.0
            2021-08-18 08:35:56.415	warn	at switchDPs (script.js.Sigi.Namespace1:116:8)
            
            javascript.0
            2021-08-18 08:35:56.415	warn	at setState (C:\Program Files\iobroker\Home\node_modules\iobroker.javascript\lib\sandbox.js:1439:20)
            
            javascript.0
            2021-08-18 08:35:56.414	warn	You are assigning a array to the state "0_userdata.0.scriptCheck" which expects a string. Please fix your code to use a string or change the state type to array. This warning might become an error in future versions.
            
            javascript.0
            2021-08-18 08:35:56.410	warn	at script.js.Sigi.Namespace1:189:3
            
            javascript.0
            2021-08-18 08:35:56.410	warn	at script.js.Sigi.Namespace1:186:1
            
            javascript.0
            2021-08-18 08:35:56.410	warn	at switchDPs (script.js.Sigi.Namespace1:25:14)
            
            javascript.0
            2021-08-18 08:35:56.409	warn	at Object.result.each (C:\Program Files\iobroker\Home\node_modules\iobroker.javascript\lib\sandbox.js:819:29)
            
            javascript.0
            2021-08-18 08:35:56.409	warn	at script.js.Sigi.Namespace1:27:24
            
            javascript.0
            2021-08-18 08:35:56.409	warn	getState "javascript.0.scriptEnabled.global.messages" not found (3) states[id]=null
            
            javascript.0
            2021-08-18 08:35:56.409	warn	at script.js.Sigi.Namespace1:189:3
            
            javascript.0
            2021-08-18 08:35:56.408	warn	at script.js.Sigi.Namespace1:186:1
            
            javascript.0
            2021-08-18 08:35:56.408	warn	at switchDPs (script.js.Sigi.Namespace1:25:14)
            
            javascript.0
            2021-08-18 08:35:56.408	warn	at Object.result.each (C:\Program Files\iobroker\Home\node_modules\iobroker.javascript\lib\sandbox.js:819:29)
            
            javascript.0
            2021-08-18 08:35:56.408	warn	at script.js.Sigi.Namespace1:27:24
            
            javascript.0
            2021-08-18 08:35:56.407	warn	getState "javascript.0.scriptEnabled.global.linkeddevices.linkeddevices0" not found (3) states[id]=null
            
            javascript.0
            2021-08-18 08:35:56.407	warn	at script.js.Sigi.Namespace1:189:3
            
            javascript.0
            2021-08-18 08:35:56.407	warn	at script.js.Sigi.Namespace1:186:1
            
            javascript.0
            2021-08-18 08:35:56.406	warn	at switchDPs (script.js.Sigi.Namespace1:25:14)
            
            javascript.0
            2021-08-18 08:35:56.406	warn	at Object.result.each (C:\Program Files\iobroker\Home\node_modules\iobroker.javascript\lib\sandbox.js:819:29)
            
            javascript.0
            2021-08-18 08:35:56.406	warn	at script.js.Sigi.Namespace1:27:24
            
            javascript.0
            2021-08-18 08:35:56.405	warn	getState "javascript.0.scriptEnabled.global.function_event" not found (3) states[id]=null
            
            javascript.0
            2021-08-18 08:35:56.405	warn	at script.js.Sigi.Namespace1:189:3
            
            javascript.0
            2021-08-18 08:35:56.405	warn	at script.js.Sigi.Namespace1:186:1
            
            javascript.0
            2021-08-18 08:35:56.405	warn	at switchDPs (script.js.Sigi.Namespace1:25:14)
            
            javascript.0
            2021-08-18 08:35:56.405	warn	at Object.result.each (C:\Program Files\iobroker\Home\node_modules\iobroker.javascript\lib\sandbox.js:819:29)
            
            javascript.0
            2021-08-18 08:35:56.405	warn	at script.js.Sigi.Namespace1:27:24
            
            javascript.0
            2021-08-18 08:35:56.404	warn	getState "javascript.0.scriptEnabled.global.Skript_1" not found (3) states[id]=null
            
            javascript.0
            2021-08-18 08:35:56.404	warn	at script.js.Sigi.Namespace1:189:3
            
            javascript.0
            2021-08-18 08:35:56.404	warn	at script.js.Sigi.Namespace1:186:1
            
            javascript.0
            2021-08-18 08:35:56.404	warn	at switchDPs (script.js.Sigi.Namespace1:25:14)
            
            javascript.0
            2021-08-18 08:35:56.404	warn	at Object.result.each (C:\Program Files\iobroker\Home\node_modules\iobroker.javascript\lib\sandbox.js:819:29)
            
            javascript.0
            2021-08-18 08:35:56.404	warn	at script.js.Sigi.Namespace1:27:24
            
            javascript.0
            2021-08-18 08:35:56.403	warn	getState "javascript.0.scriptEnabled.global.Material_sendTo" not found (3) states[id]=null
            
            javascript.0
            2021-08-18 08:35:56.400	warn	at script.js.Sigi.Namespace1:189:3
            
            javascript.0
            2021-08-18 08:35:56.400	warn	at script.js.Sigi.Namespace1:186:1
            
            javascript.0
            2021-08-18 08:35:56.400	warn	at switchDPs (script.js.Sigi.Namespace1:25:14)
            
            javascript.0
            2021-08-18 08:35:56.400	warn	at Object.result.each (C:\Program Files\iobroker\Home\node_modules\iobroker.javascript\lib\sandbox.js:819:29)
            
            javascript.0
            2021-08-18 08:35:56.400	warn	at script.js.Sigi.Namespace1:27:24
            
            javascript.0
            2021-08-18 08:35:56.399	warn	getState "javascript.0.scriptEnabled.global.MaterialDesignWidgets.vis-materialdesign0" not found (3) states[id]=null
            
            javascript.0
            2021-08-18 08:35:56.399	warn	at script.js.Sigi.Namespace1:189:3
            
            javascript.0
            2021-08-18 08:35:56.399	warn	at script.js.Sigi.Namespace1:186:1
            
            javascript.0
            2021-08-18 08:35:56.399	warn	at switchDPs (script.js.Sigi.Namespace1:25:14)
            
            javascript.0
            2021-08-18 08:35:56.398	warn	at Object.result.each (C:\Program Files\iobroker\Home\node_modules\iobroker.javascript\lib\sandbox.js:819:29)
            
            javascript.0
            2021-08-18 08:35:56.398	warn	at script.js.Sigi.Namespace1:27:24
            
            javascript.0
            2021-08-18 08:35:56.397	warn	getState "javascript.0.scriptEnabled.global.Datum_holen" not found (3) states[id]=null
            
            javascript.0
            2021-08-18 08:35:56.001	warn	at script.js.Sigi.Namespace1:189:3
            
            javascript.0
            2021-08-18 08:35:56.001	warn	at script.js.Sigi.Namespace1:186:1
            
            javascript.0
            2021-08-18 08:35:56.001	warn	at switchDPs (script.js.Sigi.Namespace1:25:14)
            
            javascript.0
            2021-08-18 08:35:56.001	warn	at Object.result.each (C:\Program Files\iobroker\Home\node_modules\iobroker.javascript\lib\sandbox.js:819:29)
            
            javascript.0
            2021-08-18 08:35:56.001	warn	at script.js.Sigi.Namespace1:27:24
            
            javascript.0
            2021-08-18 08:35:55.998	warn	getState "javascript.0.scriptEnabled.Rules.Skript_1" not found (3) states[id]=null
            
            javascript.0
            2021-08-18 08:35:55.208	info	Start javascript script.js.Sigi.Namespace1
            
            javascript.0
            2021-08-18 08:35:54.862	info	Stop script script.js.Sigi.Namespace1
            

            Konfig:

            /**
            * Zweck:           Ändert Namespace von Datenpunkten in Skripten
            * Datum:           17.08.2021
            * Author:          @fastfoot
            * Forum:           https://forum.iobroker.net/topic/47113/skript-namespace-f%C3%BCr-datenpunkte-in-skripten-abändern
            */
            let dbg = false;                        // Zusatzausgaben fürs Debugging
            const newNamespace = '0_userdata.0';      //neuer Namespace für DP
             
            //          Eigene Einstellungen
            const oldNamespace = '0_userdata.0.oldNamespace';       //Ordner für Namespace welcher ersetzt wird
            const replaceInSystemsDB = false;// lädt geänderte Dateien sofort ins System(ACHTUNG! *** auf eigenes Risiko ***)
            const writeToFileSystem = true;// Geänderte Dateien ins Filesystem schreiben
            const pathToRestore = 'C:/Program Files/iobroker/Home/backups/switched/'; // <=== Pfad eintragen mit abschliessendem /
            const extChanged = 'Chg';   // Wird im Falle einer Änderung an ID und Name angehangen
             
            
            F Offline
            F Offline
            fastfoot
            schrieb am zuletzt editiert von
            #11

            @sigi234 sagte in [Skript] Namespace für Datenpunkte in Skripten abändern:

            Ok, Zeile 11 muss ich da auch einen Ordner anlegen? Wenn ich const replaceInSystemsDB = false auf true ändere wird ja sofort ins System geschrieben. Ist der Pfad für Windows Systeme?

            Du musst Zeile11 nur dann verändern, wenn Du einen Namespace, der jetzt nicht mehr erlaubt ist, verändern willst. Etwa wenn du jetzt zB MeineDatenpunkte.0 benutzt und sie nach 0_userdata.0 migrieren willst. Schreib da wieder oldNamespace.0 rein wenn das nicht der Fall ist. Ansonsten nutze das Skript halt nur um deine Skripte zu listen.

            Der Fehler bei setState() kommt weil ich einen DP mit type array vorausgesetzt habe. Lasse deinen Type auf string und ändere Zeile 116 in
            setState('0_userdata.0.scriptCheck',JSON.stringify(changesResult));

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

            liv-in-skyL 1 Antwort Letzte Antwort
            0
            • FredFF FredF

              @liv-in-sky sagte in [Skript] Namespace für Datenpunkte in Skripten abändern:

              die states müssen auch noch "kopiert" werden !

              Das habe ich auch schon gemerkt, nur wie kopiert man die states?

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

              @fredf

              ich hab ein script, welches einen object-pfad aussliest und eine datei erstellt, die lauter "setState(...) " befehle beinhaltet - damit könnte man das lösen

              momentan habe ich aber noch ein problem damit - wenn ein state einen string enthält. da das script "uralt" ist, muss ich es erst ändern und anpassen - so das es gleich in den neuen state geschrieben wird

              ich poste es, wenn fertig

              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

              1 Antwort Letzte Antwort
              1
              • FredFF FredF

                @liv-in-sky sagte in [Skript] Namespace für Datenpunkte in Skripten abändern:

                die states müssen auch noch "kopiert" werden !

                Das habe ich auch schon gemerkt, nur wie kopiert man die states?

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

                @fredf

                eigentlich sollte das reichen

                
                var fs = require('fs');
                
                let oldObjectPath="controll-own.0.AAATEST"
                let newObjectPath="0_userdata.0.CONTROL-OWN.AAATEST"
                
                
                    var cacheSelectorState = $(`state[state.id=${oldObjectPath}.*]`);
                cacheSelectorState.each(function (id, i) {
                    var val1 = getState(id).val;
                       if (val1 == null ) 
                          {log(id + " hat keinen state");} 
                     else {
                           setState(id.replace(oldObjectPath,newObjectPath),getState(id).val )
                    };});
                
                
                
                

                du mußt fs in das javascript instanz setting eintragen und den alten und neuen pfad

                • hier im script habe ich einen unterordner eingetragen - zum testen - da könnte auch
                let oldObjectPath="controll-own.0"
                let newObjectPath="0_userdata.0.CONTROL-OWN"
                

                drinstehen

                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

                FredFF 1 Antwort Letzte Antwort
                0
                • liv-in-skyL Offline
                  liv-in-skyL Offline
                  liv-in-sky
                  schrieb am zuletzt editiert von liv-in-sky
                  #14

                  @fastfoot

                  man müßte doch auch ein script machen können, das die einnzelnen vis views ändert

                  Image 4.png

                  das script könnte die vis-view.json in vis-view.json.new anlegen (mit geänderten werten) ,dann könnte man iobroker abschalten und diesse files ersetzen/umbenennen - bin mir nicht mehr sicher, ob es reicht nur den vis-adapter zu deaktivieren

                  dann müßte nur noch unter dem scripte-tab und dem css-stab im vis-editor überprüft werden, ob da auch noch was drin steht, was geändert werden muss

                  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

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

                    @fredf

                    eigentlich sollte das reichen

                    
                    var fs = require('fs');
                    
                    let oldObjectPath="controll-own.0.AAATEST"
                    let newObjectPath="0_userdata.0.CONTROL-OWN.AAATEST"
                    
                    
                        var cacheSelectorState = $(`state[state.id=${oldObjectPath}.*]`);
                    cacheSelectorState.each(function (id, i) {
                        var val1 = getState(id).val;
                           if (val1 == null ) 
                              {log(id + " hat keinen state");} 
                         else {
                               setState(id.replace(oldObjectPath,newObjectPath),getState(id).val )
                        };});
                    
                    
                    
                    

                    du mußt fs in das javascript instanz setting eintragen und den alten und neuen pfad

                    • hier im script habe ich einen unterordner eingetragen - zum testen - da könnte auch
                    let oldObjectPath="controll-own.0"
                    let newObjectPath="0_userdata.0.CONTROL-OWN"
                    

                    drinstehen

                    FredFF Online
                    FredFF Online
                    FredF
                    Most Active Forum Testing
                    schrieb am zuletzt editiert von
                    #15

                    @liv-in-sky :+1: Das werde ich testen

                    1 Antwort Letzte Antwort
                    0
                    • F fastfoot

                      @sigi234 sagte in [Skript] Namespace für Datenpunkte in Skripten abändern:

                      Ok, Zeile 11 muss ich da auch einen Ordner anlegen? Wenn ich const replaceInSystemsDB = false auf true ändere wird ja sofort ins System geschrieben. Ist der Pfad für Windows Systeme?

                      Du musst Zeile11 nur dann verändern, wenn Du einen Namespace, der jetzt nicht mehr erlaubt ist, verändern willst. Etwa wenn du jetzt zB MeineDatenpunkte.0 benutzt und sie nach 0_userdata.0 migrieren willst. Schreib da wieder oldNamespace.0 rein wenn das nicht der Fall ist. Ansonsten nutze das Skript halt nur um deine Skripte zu listen.

                      Der Fehler bei setState() kommt weil ich einen DP mit type array vorausgesetzt habe. Lasse deinen Type auf string und ändere Zeile 116 in
                      setState('0_userdata.0.scriptCheck',JSON.stringify(changesResult));

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

                      @fastfoot

                      die änderungen für die vis - alle views auf einmal - habe mal ein script gemacht - wärst du so nett, mal drüber zu sehen - ob dir etwas auffällt

                      für den test, habe ich eine noch eine einschränkung drin, damit nur ein file bearbeitet wird

                      ergebnis:

                      Image 5.png

                      script:

                      
                      var myPath="/opt/iobroker/iobroker-data/files/vis.0";
                      let oldObjectPath="controll-own.0"
                      let newObjectPath="0_userdata.0.CONTROL-OWN"
                      
                      
                      let re = new RegExp( oldObjectPath, "g" );
                      
                      
                      var myRootArr=[];
                      var myRootArrFiles=[];
                      var fs = require('fs');  
                      
                      var _getAllFilesFromFolder = function(dir) {
                      var filesystem = require("fs");
                      var results = [];
                      
                      
                         filesystem.readdirSync(dir).forEach(function(file) {
                               file = dir+'/'+file;
                             var stat = filesystem.statSync(file);
                             if (stat && stat.isDirectory()) {
                                  results = results.concat(_getAllFilesFromFolder(file))
                             } else results.push(file);
                         });
                          return results;
                      };
                      
                      //log(_getAllFilesFromFolder("/opt/iobroker/scripte-backup/Armin_Schalter/FUTRO").toString())
                      
                      function getDirectories(path) {
                       return fs.readdirSync(path).filter(function (file) {
                         return fs.statSync(path+'/'+file).isDirectory();
                       });
                      }
                      
                      
                      
                      async function sammleDaten () {
                        // return new Promise((resolve) => {
                      
                      myRootArr=getDirectories(myPath)
                      
                      myRootArrFiles=_getAllFilesFromFolder(myPath)
                      
                      //log(isScriptActive('Armin_Schalter.AA-TABELLEN.N_E_U_E_T_A_B_E_L_L_E_N.AATelegramDelete.Skript_111').toString());
                      //myRootArrFiles.toString())
                      for(let z=0;z<myRootArrFiles.length;z++){
                       if(myRootArrFiles[z].includes("vis-views.json")) { //log(myRootArrFiles[z]);
                             let  content=fs.readFileSync( myRootArrFiles[z], 'utf8' );
                           if(z==182) {log( myRootArrFiles[z])
                           content=content.replace(re,newObjectPath)
                           fs.writeFile(myRootArrFiles[z] + ".new", content, e => {
                                        if (e) log('Fehler beim Schreiben der Datei:' + e.error)
                                    })
                           }
                        
                         
                      }
                      
                      
                      
                      }}
                      
                      async function doStuff() {
                      await sammleDaten();
                      
                      }
                      
                      
                      doStuff()
                      
                      
                      
                      
                      

                      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 2 Antworten Letzte Antwort
                      0
                      • liv-in-skyL liv-in-sky

                        @fastfoot

                        die änderungen für die vis - alle views auf einmal - habe mal ein script gemacht - wärst du so nett, mal drüber zu sehen - ob dir etwas auffällt

                        für den test, habe ich eine noch eine einschränkung drin, damit nur ein file bearbeitet wird

                        ergebnis:

                        Image 5.png

                        script:

                        
                        var myPath="/opt/iobroker/iobroker-data/files/vis.0";
                        let oldObjectPath="controll-own.0"
                        let newObjectPath="0_userdata.0.CONTROL-OWN"
                        
                        
                        let re = new RegExp( oldObjectPath, "g" );
                        
                        
                        var myRootArr=[];
                        var myRootArrFiles=[];
                        var fs = require('fs');  
                        
                        var _getAllFilesFromFolder = function(dir) {
                        var filesystem = require("fs");
                        var results = [];
                        
                        
                           filesystem.readdirSync(dir).forEach(function(file) {
                                 file = dir+'/'+file;
                               var stat = filesystem.statSync(file);
                               if (stat && stat.isDirectory()) {
                                    results = results.concat(_getAllFilesFromFolder(file))
                               } else results.push(file);
                           });
                            return results;
                        };
                        
                        //log(_getAllFilesFromFolder("/opt/iobroker/scripte-backup/Armin_Schalter/FUTRO").toString())
                        
                        function getDirectories(path) {
                         return fs.readdirSync(path).filter(function (file) {
                           return fs.statSync(path+'/'+file).isDirectory();
                         });
                        }
                        
                        
                        
                        async function sammleDaten () {
                          // return new Promise((resolve) => {
                        
                        myRootArr=getDirectories(myPath)
                        
                        myRootArrFiles=_getAllFilesFromFolder(myPath)
                        
                        //log(isScriptActive('Armin_Schalter.AA-TABELLEN.N_E_U_E_T_A_B_E_L_L_E_N.AATelegramDelete.Skript_111').toString());
                        //myRootArrFiles.toString())
                        for(let z=0;z<myRootArrFiles.length;z++){
                         if(myRootArrFiles[z].includes("vis-views.json")) { //log(myRootArrFiles[z]);
                               let  content=fs.readFileSync( myRootArrFiles[z], 'utf8' );
                             if(z==182) {log( myRootArrFiles[z])
                             content=content.replace(re,newObjectPath)
                             fs.writeFile(myRootArrFiles[z] + ".new", content, e => {
                                          if (e) log('Fehler beim Schreiben der Datei:' + e.error)
                                      })
                             }
                          
                           
                        }
                        
                        
                        
                        }}
                        
                        async function doStuff() {
                        await sammleDaten();
                        
                        }
                        
                        
                        doStuff()
                        
                        
                        
                        
                        

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

                        @liv-in-sky sagte in [Skript] Namespace für Datenpunkte in Skripten abändern:

                        wärst du so nett, mal drüber zu sehen - ob dir etwas auffällt

                        klar mache ich, wird aber etwas dauern, bin unterwegs

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

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

                          @fastfoot

                          die änderungen für die vis - alle views auf einmal - habe mal ein script gemacht - wärst du so nett, mal drüber zu sehen - ob dir etwas auffällt

                          für den test, habe ich eine noch eine einschränkung drin, damit nur ein file bearbeitet wird

                          ergebnis:

                          Image 5.png

                          script:

                          
                          var myPath="/opt/iobroker/iobroker-data/files/vis.0";
                          let oldObjectPath="controll-own.0"
                          let newObjectPath="0_userdata.0.CONTROL-OWN"
                          
                          
                          let re = new RegExp( oldObjectPath, "g" );
                          
                          
                          var myRootArr=[];
                          var myRootArrFiles=[];
                          var fs = require('fs');  
                          
                          var _getAllFilesFromFolder = function(dir) {
                          var filesystem = require("fs");
                          var results = [];
                          
                          
                             filesystem.readdirSync(dir).forEach(function(file) {
                                   file = dir+'/'+file;
                                 var stat = filesystem.statSync(file);
                                 if (stat && stat.isDirectory()) {
                                      results = results.concat(_getAllFilesFromFolder(file))
                                 } else results.push(file);
                             });
                              return results;
                          };
                          
                          //log(_getAllFilesFromFolder("/opt/iobroker/scripte-backup/Armin_Schalter/FUTRO").toString())
                          
                          function getDirectories(path) {
                           return fs.readdirSync(path).filter(function (file) {
                             return fs.statSync(path+'/'+file).isDirectory();
                           });
                          }
                          
                          
                          
                          async function sammleDaten () {
                            // return new Promise((resolve) => {
                          
                          myRootArr=getDirectories(myPath)
                          
                          myRootArrFiles=_getAllFilesFromFolder(myPath)
                          
                          //log(isScriptActive('Armin_Schalter.AA-TABELLEN.N_E_U_E_T_A_B_E_L_L_E_N.AATelegramDelete.Skript_111').toString());
                          //myRootArrFiles.toString())
                          for(let z=0;z<myRootArrFiles.length;z++){
                           if(myRootArrFiles[z].includes("vis-views.json")) { //log(myRootArrFiles[z]);
                                 let  content=fs.readFileSync( myRootArrFiles[z], 'utf8' );
                               if(z==182) {log( myRootArrFiles[z])
                               content=content.replace(re,newObjectPath)
                               fs.writeFile(myRootArrFiles[z] + ".new", content, e => {
                                            if (e) log('Fehler beim Schreiben der Datei:' + e.error)
                                        })
                               }
                            
                             
                          }
                          
                          
                          
                          }}
                          
                          async function doStuff() {
                          await sammleDaten();
                          
                          }
                          
                          
                          doStuff()
                          
                          
                          
                          
                          

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

                          @liv-in-sky warum in allen Dateien suchen? Die vis-views.json sollte es doch tun.
                          Bei deinen Funktionen habe ich nicht recht durchgeblickt, deshalb so:

                          hier für Mutige, habe nicht einmal die Vis gestoppt. Seltsamerweise funktioniert readFileAsync() hier nicht, mit keinem meiner Files kommt da was zurück, deswegen mit Callback. Trau Dich:grimacing:

                          /**
                           * Zweck:   Ändert Namespace in VIS
                           */
                          
                          const visPath = "vis.0";
                          let oldObjectPath = "controll-own.0";
                          let newObjectPath = "0_userdata.0.CONTROL-OWN";
                          
                          
                          let re = new RegExp(oldObjectPath, "g");
                          
                          readFile(visPath, 'main/vis-views.json', function (e,visData){
                              if(e){
                                  log('Fehler: ' + e);
                                  return;
                              }
                              //Backup
                              writeFileAsync(visPath, 'main/vis-views.json.bak', visData);
                              //just switch :-)
                              writeFileAsync(visPath, 'main/vis-views.json', visData.replace(re,newObjectPath))
                          });
                          

                          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 warum in allen Dateien suchen? Die vis-views.json sollte es doch tun.
                            Bei deinen Funktionen habe ich nicht recht durchgeblickt, deshalb so:

                            hier für Mutige, habe nicht einmal die Vis gestoppt. Seltsamerweise funktioniert readFileAsync() hier nicht, mit keinem meiner Files kommt da was zurück, deswegen mit Callback. Trau Dich:grimacing:

                            /**
                             * Zweck:   Ändert Namespace in VIS
                             */
                            
                            const visPath = "vis.0";
                            let oldObjectPath = "controll-own.0";
                            let newObjectPath = "0_userdata.0.CONTROL-OWN";
                            
                            
                            let re = new RegExp(oldObjectPath, "g");
                            
                            readFile(visPath, 'main/vis-views.json', function (e,visData){
                                if(e){
                                    log('Fehler: ' + e);
                                    return;
                                }
                                //Backup
                                writeFileAsync(visPath, 'main/vis-views.json.bak', visData);
                                //just switch :-)
                                writeFileAsync(visPath, 'main/vis-views.json', visData.replace(re,newObjectPath))
                            });
                            
                            liv-in-skyL Offline
                            liv-in-skyL Offline
                            liv-in-sky
                            schrieb am zuletzt editiert von
                            #19

                            @fastfoot

                            die vis muss gestoppt sein, ansonsten wird beim neustart alles überschrieben (was im cache ist)

                            danke -bin etwas verwirrt - es gibt doch pro vis-view eine datei - also brauch ich eine schleife, die alle vis-view-verzeichnisse durchgeht

                            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
                            • liv-in-skyL liv-in-sky

                              @fastfoot

                              die vis muss gestoppt sein, ansonsten wird beim neustart alles überschrieben (was im cache ist)

                              danke -bin etwas verwirrt - es gibt doch pro vis-view eine datei - also brauch ich eine schleife, die alle vis-view-verzeichnisse durchgeht

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

                              @liv-in-sky sagte in [Skript] Namespace für Datenpunkte in Skripten abändern:

                              @fastfoot

                              die vis muss gestoppt sein, ansonsten wird beim neustart alles überschrieben (was im cache ist)

                              danke -bin etwas verwirrt - es gibt doch pro vis-view eine datei - also brauch ich eine schleife, die alle vis-view-verzeichnisse durchgeht

                              writeFile() schreibt direkt ins System(und danach auch ins Filesystem). ich habe nur eine einzige Datei in main(plus die css). Nach einem Browserreload waren die neuen Dateipunkte aktiv. Ich hatte nur von 0_userdata.0 zu 0_userdata.1 geswitcht, woraufhin die VIS die natürlich moniert hatte. Dann wieder zurück und reload und alles war wieder da.

                              writeFile() nicht verwechseln mit fs.writeFile(), zweitere schreibt ins Dateisystem und würde einen Upload erfordern!

                              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 [Skript] Namespace für Datenpunkte in Skripten abändern:

                                @fastfoot

                                die vis muss gestoppt sein, ansonsten wird beim neustart alles überschrieben (was im cache ist)

                                danke -bin etwas verwirrt - es gibt doch pro vis-view eine datei - also brauch ich eine schleife, die alle vis-view-verzeichnisse durchgeht

                                writeFile() schreibt direkt ins System(und danach auch ins Filesystem). ich habe nur eine einzige Datei in main(plus die css). Nach einem Browserreload waren die neuen Dateipunkte aktiv. Ich hatte nur von 0_userdata.0 zu 0_userdata.1 geswitcht, woraufhin die VIS die natürlich moniert hatte. Dann wieder zurück und reload und alles war wieder da.

                                writeFile() nicht verwechseln mit fs.writeFile(), zweitere schreibt ins Dateisystem und würde einen Upload erfordern!

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

                                @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

                                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
                                • liv-in-skyL liv-in-sky

                                  @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

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

                                  @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.

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

                                  liv-in-skyL 2 Antworten Letzte Antwort
                                  0
                                  • F fastfoot

                                    @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.

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

                                    @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

                                    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

                                    1 Antwort Letzte Antwort
                                    0
                                    • F fastfoot

                                      @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.

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

                                      @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

                                      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

                                      1 Antwort Letzte Antwort
                                      0
                                      • F Offline
                                        F Offline
                                        fastfoot
                                        schrieb am zuletzt editiert von
                                        #25

                                        @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 rot

                                        mein 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.

                                        /**
                                        * Zweck:   Ändert Namespace in VIS
                                        * Datum:   18.08.2021
                                        * Autor:   @fastfoot nach einer Vorlage von @liv-in-sky
                                        * Forum:   https://forum.iobroker.net/topic/47113/skript-namespace-für-datenpunkte-in-skripten-abändern/25
                                        */
                                        const fs = require('fs');
                                        const dbg = false;
                                        let visPath = "/opt/iobroker/iobroker-data/files/vis.0/";
                                        let oldObjectPath = "controll-own.0";
                                        let newObjectPath = "0_userdata.0.CONTROL-OWN";
                                        const restoreInSystem = false;
                                        let myVisFiles = [];
                                        let re = new RegExp(oldObjectPath, "g");
                                        
                                        function getFilesFromPath(path){
                                           let filesInPath = [];
                                           filesInPath = fs.readdirSync(path,'utf8');
                                           filesInPath.forEach(file => {
                                               const filePath = path + '/' + file;
                                               if(fs.statSync(filePath).isFile()) {
                                                   if(file === 'vis-views.json' || file === 'xxxvis-user.css')
                                                       myVisFiles.push(filePath);
                                               } else{
                                                   //if(dbg) log(filePath);
                                                   getFilesFromPath(filePath);
                                               }
                                           })
                                        }
                                        
                                        function doIt(){
                                           if(visPath.lastIndexOf('/') === visPath.length - 1) visPath = visPath.substring(0,visPath.lastIndexOf('/'));
                                           //füllt Array myVisFiles
                                           getFilesFromPath(visPath);
                                           myVisFiles.forEach(file => {
                                               let visPathSystem = file.split('/').slice(6).join('/') ;
                                               //if(dbg) log(visPathSystem);
                                               let content = fs.readFileSync(file, 'utf8');
                                               //if(dbg) log(content)
                                               let contentNew = content.replace(re, newObjectPath);
                                               //Backup des Originals
                                               fs.writeFileSync(file + '.bak', content);
                                               //Neue Datei mit geändertem Namespace
                                               fs.writeFileSync(file + '.new', contentNew);
                                               
                                               // Mit Vorsicht nutzen!!!
                                               /*if(restoreInSystem) {
                                                   writeFileAsync('vis.0', visPathSystem, contentNew);
                                               }*/
                                           })
                                        }
                                        
                                        doIt();
                                        
                                        

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

                                        liv-in-skyL 2 Antworten Letzte Antwort
                                        2
                                        • F fastfoot

                                          @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 rot

                                          mein 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.

                                          /**
                                          * Zweck:   Ändert Namespace in VIS
                                          * Datum:   18.08.2021
                                          * Autor:   @fastfoot nach einer Vorlage von @liv-in-sky
                                          * Forum:   https://forum.iobroker.net/topic/47113/skript-namespace-für-datenpunkte-in-skripten-abändern/25
                                          */
                                          const fs = require('fs');
                                          const dbg = false;
                                          let visPath = "/opt/iobroker/iobroker-data/files/vis.0/";
                                          let oldObjectPath = "controll-own.0";
                                          let newObjectPath = "0_userdata.0.CONTROL-OWN";
                                          const restoreInSystem = false;
                                          let myVisFiles = [];
                                          let re = new RegExp(oldObjectPath, "g");
                                          
                                          function getFilesFromPath(path){
                                             let filesInPath = [];
                                             filesInPath = fs.readdirSync(path,'utf8');
                                             filesInPath.forEach(file => {
                                                 const filePath = path + '/' + file;
                                                 if(fs.statSync(filePath).isFile()) {
                                                     if(file === 'vis-views.json' || file === 'xxxvis-user.css')
                                                         myVisFiles.push(filePath);
                                                 } else{
                                                     //if(dbg) log(filePath);
                                                     getFilesFromPath(filePath);
                                                 }
                                             })
                                          }
                                          
                                          function doIt(){
                                             if(visPath.lastIndexOf('/') === visPath.length - 1) visPath = visPath.substring(0,visPath.lastIndexOf('/'));
                                             //füllt Array myVisFiles
                                             getFilesFromPath(visPath);
                                             myVisFiles.forEach(file => {
                                                 let visPathSystem = file.split('/').slice(6).join('/') ;
                                                 //if(dbg) log(visPathSystem);
                                                 let content = fs.readFileSync(file, 'utf8');
                                                 //if(dbg) log(content)
                                                 let contentNew = content.replace(re, newObjectPath);
                                                 //Backup des Originals
                                                 fs.writeFileSync(file + '.bak', content);
                                                 //Neue Datei mit geändertem Namespace
                                                 fs.writeFileSync(file + '.new', contentNew);
                                                 
                                                 // Mit Vorsicht nutzen!!!
                                                 /*if(restoreInSystem) {
                                                     writeFileAsync('vis.0', visPathSystem, contentNew);
                                                 }*/
                                             })
                                          }
                                          
                                          doIt();
                                          
                                          

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

                                          @fastfoot

                                          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

                                          /**
                                          * Zweck:   Ändert Namespace in VIS
                                          * Datum:   18.08.2021
                                          * Autor:   @fastfoot nach einer Vorlage von @liv-in-sky
                                          * Forum:   https://forum.iobroker.net/topic/47113/skript-namespace-für-datenpunkte-in-skripten-abändern/25
                                          */
                                          const fs = require('fs');
                                          const dbg = false;
                                          let visPath = "/opt/iobroker/iobroker-data/files/vis.0/";
                                          let oldObjectPath = "controll-own.0";
                                          let newObjectPath = "0_userdata.0.CONTROL-OWN";
                                          let whichProjectsToChange=["umstellung-test"];     // [] == all   // or add single projects
                                          const restoreInSystem = false;                     // Mit Vorsicht nutzen!!!
                                          let myVisFiles = [];
                                          let re = new RegExp(oldObjectPath, "g");
                                          
                                          function getFilesFromPath(path){
                                            let filesInPath = [];
                                            filesInPath = fs.readdirSync(path,'utf8');
                                            filesInPath.forEach(file => {
                                                const filePath = path + '/' + file;
                                                if(fs.statSync(filePath).isFile()) {
                                                    if(file === 'vis-views.json' || file === 'xxxvis-user.css')
                                                        myVisFiles.push(filePath);
                                                } else{
                                                    //if(dbg) log(filePath);
                                                    getFilesFromPath(filePath);
                                                }
                                            })
                                          }
                                          
                                          function doIt(){
                                            if(visPath.lastIndexOf('/') === visPath.length - 1) visPath = visPath.substring(0,visPath.lastIndexOf('/'));
                                            //füllt Array myVisFiles
                                            getFilesFromPath(visPath);
                                          
                                            myVisFiles.forEach(file => {
                                                if(whichProjectsToChange.length==0 || whichProjectsToChange.toString().includes(file.split('/').slice(6,7).toString()) ) {
                                                let visPathSystem = file.split('/').slice(6).join('/') ;
                                                /*if(dbg)*/ log(visPathSystem); 
                                                let content = fs.readFileSync(file, 'utf8');
                                                //if(dbg) log(content)
                                                let contentNew = content.replace(re, newObjectPath);
                                                //Backup des Originals
                                                 fs.writeFileSync(file +"-"+formatDate(getDateObject((new Date().getTime())), "(SS:mm:ss)-(DD.MM.)")+ '.bak', content);
                                                //Neue Datei mit geändertem Namespace
                                                if(!restoreInSystem) fs.writeFileSync(file + '.new', contentNew);
                                                
                                                // Mit Vorsicht nutzen!!!
                                                if(restoreInSystem) {
                                                     writeFileAsync('vis.0', visPathSystem, contentNew);  }
                                                }
                                            })
                                          }
                                          
                                          doIt();
                                          
                                          
                                          
                                          
                                          
                                          
                                          
                                          

                                          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
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          739

                                          Online

                                          32.5k

                                          Benutzer

                                          81.6k

                                          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