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. Remanente Speicherung von User Datenpunkte

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.6k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    851

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

Remanente Speicherung von User Datenpunkte

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
datenpunktespeichern
23 Beiträge 3 Kommentatoren 2.1k Aufrufe 1 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.
  • paul53P paul53

    @nordischerjung sagte: Datenpunkte zum Eingeben dort angelegt (unter 0_userdat.0).

    Wie hast Du die Datenpunkte erstellt? Sind sie im Tab "Objekte" zu sehen?
    Die Zustände von Datenpunkten bleiben bei einem Neustart erhalten.

    N Offline
    N Offline
    Nordischerjung
    schrieb am zuletzt editiert von
    #3

    @paul53 Moin,

    erstellt mit dem Script von dir https://forum.iobroker.net/topic/26839/ bzw das von Mic mit den belibig viele DP

    createUserDataState('vis.Stundenplan.Toni.Montag.Stunde1', {'name':'Montag Stunde1', 'type':'string', 'read':true, 'write':true, 'role':'string', 'def':'1'});
    

    So sieht die Struktur aus, sind noch zwei Ordner drüber

    8070c762-69e2-4b08-8981-86a3c860ba4a-grafik.png

    Nach Neustart waren diese definitiv leer.

    Gruß Nordischerjung

    sonnige Grüße von der Ostsee

    paul53P dslraserD 2 Antworten Letzte Antwort
    0
    • N Nordischerjung

      @paul53 Moin,

      erstellt mit dem Script von dir https://forum.iobroker.net/topic/26839/ bzw das von Mic mit den belibig viele DP

      createUserDataState('vis.Stundenplan.Toni.Montag.Stunde1', {'name':'Montag Stunde1', 'type':'string', 'read':true, 'write':true, 'role':'string', 'def':'1'});
      

      So sieht die Struktur aus, sind noch zwei Ordner drüber

      8070c762-69e2-4b08-8981-86a3c860ba4a-grafik.png

      Nach Neustart waren diese definitiv leer.

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

      @nordischerjung sagte: Nach Neustart waren diese definitiv leer.

      Das kann ich nicht nachvollziehen, denn gerade getestet:

      • Datenpunkt unter "0_userdata.0" per Skript erstellt
      • "Sport" eingetragen
      • ioBroker neu gestartet
      • Browser-Refresh
      • Ergebnis:

      Bild_2021-08-31_155123.png

      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

      1 Antwort Letzte Antwort
      0
      • N Nordischerjung

        @paul53 Moin,

        erstellt mit dem Script von dir https://forum.iobroker.net/topic/26839/ bzw das von Mic mit den belibig viele DP

        createUserDataState('vis.Stundenplan.Toni.Montag.Stunde1', {'name':'Montag Stunde1', 'type':'string', 'read':true, 'write':true, 'role':'string', 'def':'1'});
        

        So sieht die Struktur aus, sind noch zwei Ordner drüber

        8070c762-69e2-4b08-8981-86a3c860ba4a-grafik.png

        Nach Neustart waren diese definitiv leer.

        dslraserD Offline
        dslraserD Offline
        dslraser
        Forum Testing Most Active
        schrieb am zuletzt editiert von dslraser
        #5

        @nordischerjung sagte in Remanente Speicherung von User Datenpunkte:

        bzw das von Mic mit den belibig viele DP

        Bei diesem Script gibt es eine Option (true/false) die genau das macht. Auf true werden die Datenpunkte gnadenlos überschrieben/neu geschrieben.

        Wenn es das Script von Mic ist (das habe ich auch mal genutzt). Dann ist es diese Funktion

        Bildschirmfoto 2021-08-31 um 16.34.57.png

        (anlegen_in ist bei mir eine Variable wo die Datenpunkte erstellt werden sollen)
        Bildschirmfoto 2021-08-31 um 16.55.44.png
        Um das false oder eben true, was daneben steht, um das geht es. true überschreibt, false nicht

        Bildschirmfoto 2021-08-31 um 16.35.15.png

        Das war mal ein Beispiel, was ich mal verwendet habe

        /**
        * Create states under 0_userdata.0 or javascript.x
        * Current Version:     https://github.com/Mic-M/iobroker.createUserStates
        * Support:             https://forum.iobroker.net/topic/26839/
        * Autor:               Mic (ioBroker) | Mic-M (github)
        * Version:             1.2 (20 October 2020)
        * Example:             see https://github.com/Mic-M/iobroker.createUserStates#beispiel
        * -----------------------------------------------
        * PLEASE NOTE: Per https://github.com/ioBroker/ioBroker.javascript/issues/474, the used function setObject() 
        *              executes the callback PRIOR to completing the state creation. Therefore, we use a setTimeout and counter. 
        * -----------------------------------------------
        * @param {string} where          Where to create the state: '0_userdata.0' or 'javascript.x'.
        * @param {boolean} force         Force state creation (overwrite), if state is existing.
        * @param {array} statesToCreate  State(s) to create. single array or array of arrays
        * @param {object} [callback]     Optional: a callback function -- This provided function will be executed after all states are created.
        */
        function createUserStates(where, force, statesToCreate, callback = undefined) {
        
           const WARN = false; // Only for 0_userdata.0: Throws warning in log, if state is already existing and force=false. Default is false, so no warning in log, if state exists.
           const LOG_DEBUG = false; // To debug this function, set to true
           // Per issue #474 (https://github.com/ioBroker/ioBroker.javascript/issues/474), the used function setObject() executes the callback 
           // before the state is actual created. Therefore, we use a setTimeout and counter as a workaround.
           const DELAY = 50; // Delay in milliseconds (ms). Increase this to 100, if it is not working.
        
           // Validate "where"
           if (where.endsWith('.')) where = where.slice(0, -1); // Remove trailing dot
           if ( (where.match(/^((javascript\.([1-9][0-9]|[0-9]))$|0_userdata\.0$)/) == null) ) {
               log('This script does not support to create states under [' + where + ']', 'error');
               return;
           }
        
           // Prepare "statesToCreate" since we also allow a single state to create
           if(!Array.isArray(statesToCreate[0])) statesToCreate = [statesToCreate]; // wrap into array, if just one array and not inside an array
        
           // Add "where" to STATES_TO_CREATE
           for (let i = 0; i < statesToCreate.length; i++) {
               let lpPath = statesToCreate[i][0].replace(/\.*\./g, '.'); // replace all multiple dots like '..', '...' with a single '.'
               lpPath = lpPath.replace(/^((javascript\.([1-9][0-9]|[0-9])\.)|0_userdata\.0\.)/,'') // remove any javascript.x. / 0_userdata.0. from beginning
               lpPath = where + '.' + lpPath; // add where to beginning of string
               statesToCreate[i][0] = lpPath;
           }
        
           if (where != '0_userdata.0') {
               // Create States under javascript.x
               let numStates = statesToCreate.length;
               statesToCreate.forEach(function(loopParam) {
                   if (LOG_DEBUG) log('[Debug] Now we are creating new state [' + loopParam[0] + ']');
                   let loopInit = (loopParam[1]['def'] == undefined) ? null : loopParam[1]['def']; // mimic same behavior as createState if no init value is provided
                   createState(loopParam[0], loopInit, force, loopParam[1], function() {
                       numStates--;
                       if (numStates === 0) {
                           if (LOG_DEBUG) log('[Debug] All states processed.');
                           if (typeof callback === 'function') { // execute if a function was provided to parameter callback
                               if (LOG_DEBUG) log('[Debug] Function to callback parameter was provided');
                               return callback();
                           } else {
                               return;
                           }
                       }
                   });
               });
           } else {
               // Create States under 0_userdata.0
               let numStates = statesToCreate.length;
               let counter = -1;
               statesToCreate.forEach(function(loopParam) {
                   counter += 1;
                   if (LOG_DEBUG) log ('[Debug] Currently processing following state: [' + loopParam[0] + ']');
                   if( ($(loopParam[0]).length > 0) && (existsState(loopParam[0])) ) { // Workaround due to https://github.com/ioBroker/ioBroker.javascript/issues/478
                       // State is existing.
                       if (WARN && !force) log('State [' + loopParam[0] + '] is already existing and will no longer be created.', 'warn');
                       if (!WARN && LOG_DEBUG) log('[Debug] State [' + loopParam[0] + '] is already existing. Option force (=overwrite) is set to [' + force + '].');
                       if(!force) {
                           // State exists and shall not be overwritten since force=false
                           // So, we do not proceed.
                           numStates--;
                           if (numStates === 0) {
                               if (LOG_DEBUG) log('[Debug] All states successfully processed!');
                               if (typeof callback === 'function') { // execute if a function was provided to parameter callback
                                   if (LOG_DEBUG) log('[Debug] An optional callback function was provided, which we are going to execute now.');
                                   return callback();
                               } else {  // no callback, return anyway
                                   return;
                               }
                           } else {
                               // We need to go out and continue with next element in loop.
                               return; // https://stackoverflow.com/questions/18452920/continue-in-cursor-foreach
                           }
                       } // if(!force)
                   }
        
                   // State is not existing or force = true, so we are continuing to create the state through setObject().
                   let obj = {};
                   obj.type = 'state';
                   obj.native = {};
                   obj.common = loopParam[1];
                   setObject(loopParam[0], obj, function (err) {
                       if (err) {
                           log('Cannot write object for state [' + loopParam[0] + ']: ' + err);
                       } else {
                           if (LOG_DEBUG) log('[Debug] Now we are creating new state [' + loopParam[0] + ']')
                           let init = null;
                           if(loopParam[1].def === undefined) {
                               if(loopParam[1].type === 'number') init = 0;
                               if(loopParam[1].type === 'boolean') init = false;
                               if(loopParam[1].type === 'string') init = '';
                           } else {
                               init = loopParam[1].def;
                           }
                           setTimeout(function() {
                               setState(loopParam[0], init, true, function() {
                                   if (LOG_DEBUG) log('[Debug] setState durchgeführt: ' + loopParam[0]);
                                   numStates--;
                                   if (numStates === 0) {
                                       if (LOG_DEBUG) log('[Debug] All states processed.');
                                       if (typeof callback === 'function') { // execute if a function was provided to parameter callback
                                           if (LOG_DEBUG) log('[Debug] Function to callback parameter was provided');
                                           return callback();
                                       }
                                   }
                               });
                           }, DELAY + (20 * counter) );
                       }
                   });
               });
           }
        }
        
        //####################################################################################
        
        let statesToCreate = [     
           ['Heizungen.Anzahl_Heizungen_aktiv', {'name':'Anzahl Heizungen aktiv', 'type':'number', 'read':true, 'write':true, 'role':'number'}],
        ];
        createUserStates(anlegen_in,false, statesToCreate)
        
        //Funktion main mit Verzögerung aufrufen
        timeout = setTimeout(function () {
        main();   
        }, 1000);
        

        aktuell verwende ich sowas hier

        async function createUserStates(where, statesToCreate) {
          let dp, idKey;
          for(let key of statesToCreate){
          	idKey = where + '.' + key[0];
              dp = key[1];
          	if (!(await existsStateAsync(idKey))) {
          		await createStateAsync(idKey, dp);
          	}
          }
        }
        
        //Telegram Nachrichtenversand
        let statesToCreate = [
           ['Telegram_Anruferversand.01_Telegram_Versand_komplett', {'name':'Telegram Versand komplett', 'type':'boolean', 'read':true, 'write':true, 'role':'switch', 'def':true, "states": {"false": "aus","true": "an"}}],    
           ['Telegram_Anruferversand.02_Telegram_Versand_MSN_Privat', {'name':'Telegram Versand MSN Privat', 'type':'boolean', 'read':true, 'write':true, 'role':'switch', 'def':true, "states": {"false": "aus","true": "an"}}],  
           ['Telegram_Anruferversand.03_Telegram_Versand_MSN_Beruf', {'name':'Telegram Versand MSN Beruf', 'type':'boolean', 'read':true, 'write':true, 'role':'switch', 'def':true, "states": {"false": "aus","true": "an"}}],  
        ];
        await createUserStates(anlegen_in, statesToCreate);
        
        main()
        

        Edit: die angezeigten issue sind Links aus dem Script von Mic

        N paul53P 2 Antworten Letzte Antwort
        1
        • dslraserD dslraser

          @nordischerjung sagte in Remanente Speicherung von User Datenpunkte:

          bzw das von Mic mit den belibig viele DP

          Bei diesem Script gibt es eine Option (true/false) die genau das macht. Auf true werden die Datenpunkte gnadenlos überschrieben/neu geschrieben.

          Wenn es das Script von Mic ist (das habe ich auch mal genutzt). Dann ist es diese Funktion

          Bildschirmfoto 2021-08-31 um 16.34.57.png

          (anlegen_in ist bei mir eine Variable wo die Datenpunkte erstellt werden sollen)
          Bildschirmfoto 2021-08-31 um 16.55.44.png
          Um das false oder eben true, was daneben steht, um das geht es. true überschreibt, false nicht

          Bildschirmfoto 2021-08-31 um 16.35.15.png

          Das war mal ein Beispiel, was ich mal verwendet habe

          /**
          * Create states under 0_userdata.0 or javascript.x
          * Current Version:     https://github.com/Mic-M/iobroker.createUserStates
          * Support:             https://forum.iobroker.net/topic/26839/
          * Autor:               Mic (ioBroker) | Mic-M (github)
          * Version:             1.2 (20 October 2020)
          * Example:             see https://github.com/Mic-M/iobroker.createUserStates#beispiel
          * -----------------------------------------------
          * PLEASE NOTE: Per https://github.com/ioBroker/ioBroker.javascript/issues/474, the used function setObject() 
          *              executes the callback PRIOR to completing the state creation. Therefore, we use a setTimeout and counter. 
          * -----------------------------------------------
          * @param {string} where          Where to create the state: '0_userdata.0' or 'javascript.x'.
          * @param {boolean} force         Force state creation (overwrite), if state is existing.
          * @param {array} statesToCreate  State(s) to create. single array or array of arrays
          * @param {object} [callback]     Optional: a callback function -- This provided function will be executed after all states are created.
          */
          function createUserStates(where, force, statesToCreate, callback = undefined) {
          
             const WARN = false; // Only for 0_userdata.0: Throws warning in log, if state is already existing and force=false. Default is false, so no warning in log, if state exists.
             const LOG_DEBUG = false; // To debug this function, set to true
             // Per issue #474 (https://github.com/ioBroker/ioBroker.javascript/issues/474), the used function setObject() executes the callback 
             // before the state is actual created. Therefore, we use a setTimeout and counter as a workaround.
             const DELAY = 50; // Delay in milliseconds (ms). Increase this to 100, if it is not working.
          
             // Validate "where"
             if (where.endsWith('.')) where = where.slice(0, -1); // Remove trailing dot
             if ( (where.match(/^((javascript\.([1-9][0-9]|[0-9]))$|0_userdata\.0$)/) == null) ) {
                 log('This script does not support to create states under [' + where + ']', 'error');
                 return;
             }
          
             // Prepare "statesToCreate" since we also allow a single state to create
             if(!Array.isArray(statesToCreate[0])) statesToCreate = [statesToCreate]; // wrap into array, if just one array and not inside an array
          
             // Add "where" to STATES_TO_CREATE
             for (let i = 0; i < statesToCreate.length; i++) {
                 let lpPath = statesToCreate[i][0].replace(/\.*\./g, '.'); // replace all multiple dots like '..', '...' with a single '.'
                 lpPath = lpPath.replace(/^((javascript\.([1-9][0-9]|[0-9])\.)|0_userdata\.0\.)/,'') // remove any javascript.x. / 0_userdata.0. from beginning
                 lpPath = where + '.' + lpPath; // add where to beginning of string
                 statesToCreate[i][0] = lpPath;
             }
          
             if (where != '0_userdata.0') {
                 // Create States under javascript.x
                 let numStates = statesToCreate.length;
                 statesToCreate.forEach(function(loopParam) {
                     if (LOG_DEBUG) log('[Debug] Now we are creating new state [' + loopParam[0] + ']');
                     let loopInit = (loopParam[1]['def'] == undefined) ? null : loopParam[1]['def']; // mimic same behavior as createState if no init value is provided
                     createState(loopParam[0], loopInit, force, loopParam[1], function() {
                         numStates--;
                         if (numStates === 0) {
                             if (LOG_DEBUG) log('[Debug] All states processed.');
                             if (typeof callback === 'function') { // execute if a function was provided to parameter callback
                                 if (LOG_DEBUG) log('[Debug] Function to callback parameter was provided');
                                 return callback();
                             } else {
                                 return;
                             }
                         }
                     });
                 });
             } else {
                 // Create States under 0_userdata.0
                 let numStates = statesToCreate.length;
                 let counter = -1;
                 statesToCreate.forEach(function(loopParam) {
                     counter += 1;
                     if (LOG_DEBUG) log ('[Debug] Currently processing following state: [' + loopParam[0] + ']');
                     if( ($(loopParam[0]).length > 0) && (existsState(loopParam[0])) ) { // Workaround due to https://github.com/ioBroker/ioBroker.javascript/issues/478
                         // State is existing.
                         if (WARN && !force) log('State [' + loopParam[0] + '] is already existing and will no longer be created.', 'warn');
                         if (!WARN && LOG_DEBUG) log('[Debug] State [' + loopParam[0] + '] is already existing. Option force (=overwrite) is set to [' + force + '].');
                         if(!force) {
                             // State exists and shall not be overwritten since force=false
                             // So, we do not proceed.
                             numStates--;
                             if (numStates === 0) {
                                 if (LOG_DEBUG) log('[Debug] All states successfully processed!');
                                 if (typeof callback === 'function') { // execute if a function was provided to parameter callback
                                     if (LOG_DEBUG) log('[Debug] An optional callback function was provided, which we are going to execute now.');
                                     return callback();
                                 } else {  // no callback, return anyway
                                     return;
                                 }
                             } else {
                                 // We need to go out and continue with next element in loop.
                                 return; // https://stackoverflow.com/questions/18452920/continue-in-cursor-foreach
                             }
                         } // if(!force)
                     }
          
                     // State is not existing or force = true, so we are continuing to create the state through setObject().
                     let obj = {};
                     obj.type = 'state';
                     obj.native = {};
                     obj.common = loopParam[1];
                     setObject(loopParam[0], obj, function (err) {
                         if (err) {
                             log('Cannot write object for state [' + loopParam[0] + ']: ' + err);
                         } else {
                             if (LOG_DEBUG) log('[Debug] Now we are creating new state [' + loopParam[0] + ']')
                             let init = null;
                             if(loopParam[1].def === undefined) {
                                 if(loopParam[1].type === 'number') init = 0;
                                 if(loopParam[1].type === 'boolean') init = false;
                                 if(loopParam[1].type === 'string') init = '';
                             } else {
                                 init = loopParam[1].def;
                             }
                             setTimeout(function() {
                                 setState(loopParam[0], init, true, function() {
                                     if (LOG_DEBUG) log('[Debug] setState durchgeführt: ' + loopParam[0]);
                                     numStates--;
                                     if (numStates === 0) {
                                         if (LOG_DEBUG) log('[Debug] All states processed.');
                                         if (typeof callback === 'function') { // execute if a function was provided to parameter callback
                                             if (LOG_DEBUG) log('[Debug] Function to callback parameter was provided');
                                             return callback();
                                         }
                                     }
                                 });
                             }, DELAY + (20 * counter) );
                         }
                     });
                 });
             }
          }
          
          //####################################################################################
          
          let statesToCreate = [     
             ['Heizungen.Anzahl_Heizungen_aktiv', {'name':'Anzahl Heizungen aktiv', 'type':'number', 'read':true, 'write':true, 'role':'number'}],
          ];
          createUserStates(anlegen_in,false, statesToCreate)
          
          //Funktion main mit Verzögerung aufrufen
          timeout = setTimeout(function () {
          main();   
          }, 1000);
          

          aktuell verwende ich sowas hier

          async function createUserStates(where, statesToCreate) {
            let dp, idKey;
            for(let key of statesToCreate){
            	idKey = where + '.' + key[0];
                dp = key[1];
            	if (!(await existsStateAsync(idKey))) {
            		await createStateAsync(idKey, dp);
            	}
            }
          }
          
          //Telegram Nachrichtenversand
          let statesToCreate = [
             ['Telegram_Anruferversand.01_Telegram_Versand_komplett', {'name':'Telegram Versand komplett', 'type':'boolean', 'read':true, 'write':true, 'role':'switch', 'def':true, "states": {"false": "aus","true": "an"}}],    
             ['Telegram_Anruferversand.02_Telegram_Versand_MSN_Privat', {'name':'Telegram Versand MSN Privat', 'type':'boolean', 'read':true, 'write':true, 'role':'switch', 'def':true, "states": {"false": "aus","true": "an"}}],  
             ['Telegram_Anruferversand.03_Telegram_Versand_MSN_Beruf', {'name':'Telegram Versand MSN Beruf', 'type':'boolean', 'read':true, 'write':true, 'role':'switch', 'def':true, "states": {"false": "aus","true": "an"}}],  
          ];
          await createUserStates(anlegen_in, statesToCreate);
          
          main()
          

          Edit: die angezeigten issue sind Links aus dem Script von Mic

          N Offline
          N Offline
          Nordischerjung
          schrieb am zuletzt editiert von
          #6

          @dslraser danke für die ausführliche Antwort, kann ich das nachträglich am DP ändern?

          Gruß Nordischerjung

          sonnige Grüße von der Ostsee

          dslraserD 1 Antwort Letzte Antwort
          0
          • N Nordischerjung

            @dslraser danke für die ausführliche Antwort, kann ich das nachträglich am DP ändern?

            dslraserD Offline
            dslraserD Offline
            dslraser
            Forum Testing Most Active
            schrieb am zuletzt editiert von
            #7

            @nordischerjung sagte in Remanente Speicherung von User Datenpunkte:

            @dslraser danke für die ausführliche Antwort, kann ich das nachträglich am DP ändern?

            Zeig mal welches Script zum Datenpunkte erstellen Du verwendest.

            N 1 Antwort Letzte Antwort
            0
            • dslraserD dslraser

              @nordischerjung sagte in Remanente Speicherung von User Datenpunkte:

              bzw das von Mic mit den belibig viele DP

              Bei diesem Script gibt es eine Option (true/false) die genau das macht. Auf true werden die Datenpunkte gnadenlos überschrieben/neu geschrieben.

              Wenn es das Script von Mic ist (das habe ich auch mal genutzt). Dann ist es diese Funktion

              Bildschirmfoto 2021-08-31 um 16.34.57.png

              (anlegen_in ist bei mir eine Variable wo die Datenpunkte erstellt werden sollen)
              Bildschirmfoto 2021-08-31 um 16.55.44.png
              Um das false oder eben true, was daneben steht, um das geht es. true überschreibt, false nicht

              Bildschirmfoto 2021-08-31 um 16.35.15.png

              Das war mal ein Beispiel, was ich mal verwendet habe

              /**
              * Create states under 0_userdata.0 or javascript.x
              * Current Version:     https://github.com/Mic-M/iobroker.createUserStates
              * Support:             https://forum.iobroker.net/topic/26839/
              * Autor:               Mic (ioBroker) | Mic-M (github)
              * Version:             1.2 (20 October 2020)
              * Example:             see https://github.com/Mic-M/iobroker.createUserStates#beispiel
              * -----------------------------------------------
              * PLEASE NOTE: Per https://github.com/ioBroker/ioBroker.javascript/issues/474, the used function setObject() 
              *              executes the callback PRIOR to completing the state creation. Therefore, we use a setTimeout and counter. 
              * -----------------------------------------------
              * @param {string} where          Where to create the state: '0_userdata.0' or 'javascript.x'.
              * @param {boolean} force         Force state creation (overwrite), if state is existing.
              * @param {array} statesToCreate  State(s) to create. single array or array of arrays
              * @param {object} [callback]     Optional: a callback function -- This provided function will be executed after all states are created.
              */
              function createUserStates(where, force, statesToCreate, callback = undefined) {
              
                 const WARN = false; // Only for 0_userdata.0: Throws warning in log, if state is already existing and force=false. Default is false, so no warning in log, if state exists.
                 const LOG_DEBUG = false; // To debug this function, set to true
                 // Per issue #474 (https://github.com/ioBroker/ioBroker.javascript/issues/474), the used function setObject() executes the callback 
                 // before the state is actual created. Therefore, we use a setTimeout and counter as a workaround.
                 const DELAY = 50; // Delay in milliseconds (ms). Increase this to 100, if it is not working.
              
                 // Validate "where"
                 if (where.endsWith('.')) where = where.slice(0, -1); // Remove trailing dot
                 if ( (where.match(/^((javascript\.([1-9][0-9]|[0-9]))$|0_userdata\.0$)/) == null) ) {
                     log('This script does not support to create states under [' + where + ']', 'error');
                     return;
                 }
              
                 // Prepare "statesToCreate" since we also allow a single state to create
                 if(!Array.isArray(statesToCreate[0])) statesToCreate = [statesToCreate]; // wrap into array, if just one array and not inside an array
              
                 // Add "where" to STATES_TO_CREATE
                 for (let i = 0; i < statesToCreate.length; i++) {
                     let lpPath = statesToCreate[i][0].replace(/\.*\./g, '.'); // replace all multiple dots like '..', '...' with a single '.'
                     lpPath = lpPath.replace(/^((javascript\.([1-9][0-9]|[0-9])\.)|0_userdata\.0\.)/,'') // remove any javascript.x. / 0_userdata.0. from beginning
                     lpPath = where + '.' + lpPath; // add where to beginning of string
                     statesToCreate[i][0] = lpPath;
                 }
              
                 if (where != '0_userdata.0') {
                     // Create States under javascript.x
                     let numStates = statesToCreate.length;
                     statesToCreate.forEach(function(loopParam) {
                         if (LOG_DEBUG) log('[Debug] Now we are creating new state [' + loopParam[0] + ']');
                         let loopInit = (loopParam[1]['def'] == undefined) ? null : loopParam[1]['def']; // mimic same behavior as createState if no init value is provided
                         createState(loopParam[0], loopInit, force, loopParam[1], function() {
                             numStates--;
                             if (numStates === 0) {
                                 if (LOG_DEBUG) log('[Debug] All states processed.');
                                 if (typeof callback === 'function') { // execute if a function was provided to parameter callback
                                     if (LOG_DEBUG) log('[Debug] Function to callback parameter was provided');
                                     return callback();
                                 } else {
                                     return;
                                 }
                             }
                         });
                     });
                 } else {
                     // Create States under 0_userdata.0
                     let numStates = statesToCreate.length;
                     let counter = -1;
                     statesToCreate.forEach(function(loopParam) {
                         counter += 1;
                         if (LOG_DEBUG) log ('[Debug] Currently processing following state: [' + loopParam[0] + ']');
                         if( ($(loopParam[0]).length > 0) && (existsState(loopParam[0])) ) { // Workaround due to https://github.com/ioBroker/ioBroker.javascript/issues/478
                             // State is existing.
                             if (WARN && !force) log('State [' + loopParam[0] + '] is already existing and will no longer be created.', 'warn');
                             if (!WARN && LOG_DEBUG) log('[Debug] State [' + loopParam[0] + '] is already existing. Option force (=overwrite) is set to [' + force + '].');
                             if(!force) {
                                 // State exists and shall not be overwritten since force=false
                                 // So, we do not proceed.
                                 numStates--;
                                 if (numStates === 0) {
                                     if (LOG_DEBUG) log('[Debug] All states successfully processed!');
                                     if (typeof callback === 'function') { // execute if a function was provided to parameter callback
                                         if (LOG_DEBUG) log('[Debug] An optional callback function was provided, which we are going to execute now.');
                                         return callback();
                                     } else {  // no callback, return anyway
                                         return;
                                     }
                                 } else {
                                     // We need to go out and continue with next element in loop.
                                     return; // https://stackoverflow.com/questions/18452920/continue-in-cursor-foreach
                                 }
                             } // if(!force)
                         }
              
                         // State is not existing or force = true, so we are continuing to create the state through setObject().
                         let obj = {};
                         obj.type = 'state';
                         obj.native = {};
                         obj.common = loopParam[1];
                         setObject(loopParam[0], obj, function (err) {
                             if (err) {
                                 log('Cannot write object for state [' + loopParam[0] + ']: ' + err);
                             } else {
                                 if (LOG_DEBUG) log('[Debug] Now we are creating new state [' + loopParam[0] + ']')
                                 let init = null;
                                 if(loopParam[1].def === undefined) {
                                     if(loopParam[1].type === 'number') init = 0;
                                     if(loopParam[1].type === 'boolean') init = false;
                                     if(loopParam[1].type === 'string') init = '';
                                 } else {
                                     init = loopParam[1].def;
                                 }
                                 setTimeout(function() {
                                     setState(loopParam[0], init, true, function() {
                                         if (LOG_DEBUG) log('[Debug] setState durchgeführt: ' + loopParam[0]);
                                         numStates--;
                                         if (numStates === 0) {
                                             if (LOG_DEBUG) log('[Debug] All states processed.');
                                             if (typeof callback === 'function') { // execute if a function was provided to parameter callback
                                                 if (LOG_DEBUG) log('[Debug] Function to callback parameter was provided');
                                                 return callback();
                                             }
                                         }
                                     });
                                 }, DELAY + (20 * counter) );
                             }
                         });
                     });
                 }
              }
              
              //####################################################################################
              
              let statesToCreate = [     
                 ['Heizungen.Anzahl_Heizungen_aktiv', {'name':'Anzahl Heizungen aktiv', 'type':'number', 'read':true, 'write':true, 'role':'number'}],
              ];
              createUserStates(anlegen_in,false, statesToCreate)
              
              //Funktion main mit Verzögerung aufrufen
              timeout = setTimeout(function () {
              main();   
              }, 1000);
              

              aktuell verwende ich sowas hier

              async function createUserStates(where, statesToCreate) {
                let dp, idKey;
                for(let key of statesToCreate){
                	idKey = where + '.' + key[0];
                    dp = key[1];
                	if (!(await existsStateAsync(idKey))) {
                		await createStateAsync(idKey, dp);
                	}
                }
              }
              
              //Telegram Nachrichtenversand
              let statesToCreate = [
                 ['Telegram_Anruferversand.01_Telegram_Versand_komplett', {'name':'Telegram Versand komplett', 'type':'boolean', 'read':true, 'write':true, 'role':'switch', 'def':true, "states": {"false": "aus","true": "an"}}],    
                 ['Telegram_Anruferversand.02_Telegram_Versand_MSN_Privat', {'name':'Telegram Versand MSN Privat', 'type':'boolean', 'read':true, 'write':true, 'role':'switch', 'def':true, "states": {"false": "aus","true": "an"}}],  
                 ['Telegram_Anruferversand.03_Telegram_Versand_MSN_Beruf', {'name':'Telegram Versand MSN Beruf', 'type':'boolean', 'read':true, 'write':true, 'role':'switch', 'def':true, "states": {"false": "aus","true": "an"}}],  
              ];
              await createUserStates(anlegen_in, statesToCreate);
              
              main()
              

              Edit: die angezeigten issue sind Links aus dem Script von Mic

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

              @dslraser sagte: Auf true werden die Datenpunkte gnadenlos überschrieben/neu geschrieben.

              Wenn das Skript noch aktiv ist, sollte es deaktiviert werden.

              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

              1 Antwort Letzte Antwort
              0
              • dslraserD dslraser

                @nordischerjung sagte in Remanente Speicherung von User Datenpunkte:

                @dslraser danke für die ausführliche Antwort, kann ich das nachträglich am DP ändern?

                Zeig mal welches Script zum Datenpunkte erstellen Du verwendest.

                N Offline
                N Offline
                Nordischerjung
                schrieb am zuletzt editiert von
                #9

                @dslraser Moin, das hier ist es, bei Bedarf aktiviere ich die oberen Zeilen demnestprechend mit neune Namen etc.

                //####################---Number---####################
                //createUserDataState('Grill.Fleischtemperatur1', {'name':'Fleischtemperatur1', 'type':'number', 'read':true, 'write':true, 'role':'number', 'def':0});
                //createUserDataState('Grill.Fleischtemperatur2', {'name':'Fleischtemperatur2', 'type':'number', 'read':true, 'write':true, 'role':'number', 'def':0});
                //createUserDataState('Grill.Grilltemperatur', {'name':'Grilltemperatur', 'type':'number', 'read':true, 'write':true, 'role':'number', 'def':0});
                
                //####################---String---####################
                //createUserDataState('vis.Stundenplan.Toni.Montag.Stunde1', {'name':'Montag Stunde1', 'type':'string', 'read':true, 'write':true, 'role':'string', 'def':'1'});
                //createUserDataState('vis.AdapterStatus.restartTrigger', {'name':'Adapter_restartTrigger', 'type':'string', 'read':true, 'write':true, 'role':'string', 'def':'noch leer'});
                
                //####################---Bool---####################
                //createUserDataState('Test.State1', {'name':'State1', 'type':'boolean', 'read':true, 'write':true, 'role':'state', 'def':false, "smartName": {"de": "State","smartType": "state"}});
                
                 log(new Date());
                
                /**
                
                 * Creates a state under 0_userdata.0
                 * Source: https://forum.iobroker.net/topic/26839/
                 * Thanks to ioBroker forum user "paul53" for the basis of this function.
                 * Version: 0.1 - Mic
                 * @param {string} stateId        State ID to be created under '0_userdata.0', like 'LivingRoom.Lights.Sideboard.Brightness'
                 * @param {object} param          Object with state details. Template: {'name':'NAME', 'type':'number', 'unit':'UNIT', 'min':MIN, 'max':MAX, 'read':true, 'write':true, 'role':'ROLE', 'def':DEFAULT }
                 * @param {boolean} [warn=false]  Optional. Throws warning in log, if state is already existing. Default is false, so no warning in log, if state exists
                 */
                
                function createUserDataState(stateId, param, warn) {
                
                    if (warn === undefined) warn = false;
                    const WHERE = '0_userdata.0';
                    stateId = (stateId.startsWith(WHERE)) ? stateId.substring(WHERE.length) : stateId; // remove WHERE from beginning of string
                    stateId = (stateId.startsWith('.')) ? stateId.substring(1) : stateId; // remove first "."
                    const FULL_STATE_ID = (WHERE.endsWith('.') ? WHERE : WHERE + '.') + stateId; // Final state
                
                    if($(FULL_STATE_ID).length) {
                
                        if(warn) log('State [' + FULL_STATE_ID + '] is already existing and will no longer be created.', 'warn');
                        return;
                    }
                
                
                    let obj = {};
                    obj.type = 'state';
                    obj.common = param;
                    setObject(FULL_STATE_ID, obj, function (err) {
                    
                      if (err) {
                            log('Cannot write object: ' + err);
                        } else {
                            let init = null;
                
                            if(param.def === undefined) {
                
                                if(param.type === 'number') init = 0;
                
                                if(param.type === 'boolean') init = false;
                
                                if(param.type === 'string') init = 'noch leer';
                
                            } else {
                
                                init = param.def;
                
                            }
                
                            setTimeout(function() { setState(FULL_STATE_ID, init, true); }, 1000); // see https://forum.iobroker.net/post/334331
                
                        }
                    });
                }
                

                Gruß Nordischerjung

                sonnige Grüße von der Ostsee

                paul53P dslraserD 3 Antworten Letzte Antwort
                0
                • N Nordischerjung

                  @dslraser Moin, das hier ist es, bei Bedarf aktiviere ich die oberen Zeilen demnestprechend mit neune Namen etc.

                  //####################---Number---####################
                  //createUserDataState('Grill.Fleischtemperatur1', {'name':'Fleischtemperatur1', 'type':'number', 'read':true, 'write':true, 'role':'number', 'def':0});
                  //createUserDataState('Grill.Fleischtemperatur2', {'name':'Fleischtemperatur2', 'type':'number', 'read':true, 'write':true, 'role':'number', 'def':0});
                  //createUserDataState('Grill.Grilltemperatur', {'name':'Grilltemperatur', 'type':'number', 'read':true, 'write':true, 'role':'number', 'def':0});
                  
                  //####################---String---####################
                  //createUserDataState('vis.Stundenplan.Toni.Montag.Stunde1', {'name':'Montag Stunde1', 'type':'string', 'read':true, 'write':true, 'role':'string', 'def':'1'});
                  //createUserDataState('vis.AdapterStatus.restartTrigger', {'name':'Adapter_restartTrigger', 'type':'string', 'read':true, 'write':true, 'role':'string', 'def':'noch leer'});
                  
                  //####################---Bool---####################
                  //createUserDataState('Test.State1', {'name':'State1', 'type':'boolean', 'read':true, 'write':true, 'role':'state', 'def':false, "smartName": {"de": "State","smartType": "state"}});
                  
                   log(new Date());
                  
                  /**
                  
                   * Creates a state under 0_userdata.0
                   * Source: https://forum.iobroker.net/topic/26839/
                   * Thanks to ioBroker forum user "paul53" for the basis of this function.
                   * Version: 0.1 - Mic
                   * @param {string} stateId        State ID to be created under '0_userdata.0', like 'LivingRoom.Lights.Sideboard.Brightness'
                   * @param {object} param          Object with state details. Template: {'name':'NAME', 'type':'number', 'unit':'UNIT', 'min':MIN, 'max':MAX, 'read':true, 'write':true, 'role':'ROLE', 'def':DEFAULT }
                   * @param {boolean} [warn=false]  Optional. Throws warning in log, if state is already existing. Default is false, so no warning in log, if state exists
                   */
                  
                  function createUserDataState(stateId, param, warn) {
                  
                      if (warn === undefined) warn = false;
                      const WHERE = '0_userdata.0';
                      stateId = (stateId.startsWith(WHERE)) ? stateId.substring(WHERE.length) : stateId; // remove WHERE from beginning of string
                      stateId = (stateId.startsWith('.')) ? stateId.substring(1) : stateId; // remove first "."
                      const FULL_STATE_ID = (WHERE.endsWith('.') ? WHERE : WHERE + '.') + stateId; // Final state
                  
                      if($(FULL_STATE_ID).length) {
                  
                          if(warn) log('State [' + FULL_STATE_ID + '] is already existing and will no longer be created.', 'warn');
                          return;
                      }
                  
                  
                      let obj = {};
                      obj.type = 'state';
                      obj.common = param;
                      setObject(FULL_STATE_ID, obj, function (err) {
                      
                        if (err) {
                              log('Cannot write object: ' + err);
                          } else {
                              let init = null;
                  
                              if(param.def === undefined) {
                  
                                  if(param.type === 'number') init = 0;
                  
                                  if(param.type === 'boolean') init = false;
                  
                                  if(param.type === 'string') init = 'noch leer';
                  
                              } else {
                  
                                  init = param.def;
                  
                              }
                  
                              setTimeout(function() { setState(FULL_STATE_ID, init, true); }, 1000); // see https://forum.iobroker.net/post/334331
                  
                          }
                      });
                  }
                  
                  paul53P Offline
                  paul53P Offline
                  paul53
                  schrieb am zuletzt editiert von paul53
                  #10

                  @nordischerjung
                  Du verwendest falsche Rollen, was allerdings nicht der Grund für fehlende Werte nach Neustart ist.

                  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

                  1 Antwort Letzte Antwort
                  0
                  • N Nordischerjung

                    @dslraser Moin, das hier ist es, bei Bedarf aktiviere ich die oberen Zeilen demnestprechend mit neune Namen etc.

                    //####################---Number---####################
                    //createUserDataState('Grill.Fleischtemperatur1', {'name':'Fleischtemperatur1', 'type':'number', 'read':true, 'write':true, 'role':'number', 'def':0});
                    //createUserDataState('Grill.Fleischtemperatur2', {'name':'Fleischtemperatur2', 'type':'number', 'read':true, 'write':true, 'role':'number', 'def':0});
                    //createUserDataState('Grill.Grilltemperatur', {'name':'Grilltemperatur', 'type':'number', 'read':true, 'write':true, 'role':'number', 'def':0});
                    
                    //####################---String---####################
                    //createUserDataState('vis.Stundenplan.Toni.Montag.Stunde1', {'name':'Montag Stunde1', 'type':'string', 'read':true, 'write':true, 'role':'string', 'def':'1'});
                    //createUserDataState('vis.AdapterStatus.restartTrigger', {'name':'Adapter_restartTrigger', 'type':'string', 'read':true, 'write':true, 'role':'string', 'def':'noch leer'});
                    
                    //####################---Bool---####################
                    //createUserDataState('Test.State1', {'name':'State1', 'type':'boolean', 'read':true, 'write':true, 'role':'state', 'def':false, "smartName": {"de": "State","smartType": "state"}});
                    
                     log(new Date());
                    
                    /**
                    
                     * Creates a state under 0_userdata.0
                     * Source: https://forum.iobroker.net/topic/26839/
                     * Thanks to ioBroker forum user "paul53" for the basis of this function.
                     * Version: 0.1 - Mic
                     * @param {string} stateId        State ID to be created under '0_userdata.0', like 'LivingRoom.Lights.Sideboard.Brightness'
                     * @param {object} param          Object with state details. Template: {'name':'NAME', 'type':'number', 'unit':'UNIT', 'min':MIN, 'max':MAX, 'read':true, 'write':true, 'role':'ROLE', 'def':DEFAULT }
                     * @param {boolean} [warn=false]  Optional. Throws warning in log, if state is already existing. Default is false, so no warning in log, if state exists
                     */
                    
                    function createUserDataState(stateId, param, warn) {
                    
                        if (warn === undefined) warn = false;
                        const WHERE = '0_userdata.0';
                        stateId = (stateId.startsWith(WHERE)) ? stateId.substring(WHERE.length) : stateId; // remove WHERE from beginning of string
                        stateId = (stateId.startsWith('.')) ? stateId.substring(1) : stateId; // remove first "."
                        const FULL_STATE_ID = (WHERE.endsWith('.') ? WHERE : WHERE + '.') + stateId; // Final state
                    
                        if($(FULL_STATE_ID).length) {
                    
                            if(warn) log('State [' + FULL_STATE_ID + '] is already existing and will no longer be created.', 'warn');
                            return;
                        }
                    
                    
                        let obj = {};
                        obj.type = 'state';
                        obj.common = param;
                        setObject(FULL_STATE_ID, obj, function (err) {
                        
                          if (err) {
                                log('Cannot write object: ' + err);
                            } else {
                                let init = null;
                    
                                if(param.def === undefined) {
                    
                                    if(param.type === 'number') init = 0;
                    
                                    if(param.type === 'boolean') init = false;
                    
                                    if(param.type === 'string') init = 'noch leer';
                    
                                } else {
                    
                                    init = param.def;
                    
                                }
                    
                                setTimeout(function() { setState(FULL_STATE_ID, init, true); }, 1000); // see https://forum.iobroker.net/post/334331
                    
                            }
                        });
                    }
                    
                    dslraserD Offline
                    dslraserD Offline
                    dslraser
                    Forum Testing Most Active
                    schrieb am zuletzt editiert von dslraser
                    #11

                    @nordischerjung sagte in Remanente Speicherung von User Datenpunkte:

                    @dslraser Moin, das hier ist es, bei Bedarf aktiviere ich die oberen Zeilen demnestprechend mit neune Namen etc.

                    //####################---Number---####################
                    //createUserDataState('Grill.Fleischtemperatur1', {'name':'Fleischtemperatur1', 'type':'number', 'read':true, 'write':true, 'role':'number', 'def':0});
                    //createUserDataState('Grill.Fleischtemperatur2', {'name':'Fleischtemperatur2', 'type':'number', 'read':true, 'write':true, 'role':'number', 'def':0});
                    //createUserDataState('Grill.Grilltemperatur', {'name':'Grilltemperatur', 'type':'number', 'read':true, 'write':true, 'role':'number', 'def':0});
                    
                    //####################---String---####################
                    //createUserDataState('vis.Stundenplan.Toni.Montag.Stunde1', {'name':'Montag Stunde1', 'type':'string', 'read':true, 'write':true, 'role':'string', 'def':'1'});
                    //createUserDataState('vis.AdapterStatus.restartTrigger', {'name':'Adapter_restartTrigger', 'type':'string', 'read':true, 'write':true, 'role':'string', 'def':'noch leer'});
                    
                    //####################---Bool---####################
                    //createUserDataState('Test.State1', {'name':'State1', 'type':'boolean', 'read':true, 'write':true, 'role':'state', 'def':false, "smartName": {"de": "State","smartType": "state"}});
                    
                     log(new Date());
                    
                    /**
                    
                     * Creates a state under 0_userdata.0
                     * Source: https://forum.iobroker.net/topic/26839/
                     * Thanks to ioBroker forum user "paul53" for the basis of this function.
                     * Version: 0.1 - Mic
                     * @param {string} stateId        State ID to be created under '0_userdata.0', like 'LivingRoom.Lights.Sideboard.Brightness'
                     * @param {object} param          Object with state details. Template: {'name':'NAME', 'type':'number', 'unit':'UNIT', 'min':MIN, 'max':MAX, 'read':true, 'write':true, 'role':'ROLE', 'def':DEFAULT }
                     * @param {boolean} [warn=false]  Optional. Throws warning in log, if state is already existing. Default is false, so no warning in log, if state exists
                     */
                    
                    function createUserDataState(stateId, param, warn) {
                    
                        if (warn === undefined) warn = false;
                        const WHERE = '0_userdata.0';
                        stateId = (stateId.startsWith(WHERE)) ? stateId.substring(WHERE.length) : stateId; // remove WHERE from beginning of string
                        stateId = (stateId.startsWith('.')) ? stateId.substring(1) : stateId; // remove first "."
                        const FULL_STATE_ID = (WHERE.endsWith('.') ? WHERE : WHERE + '.') + stateId; // Final state
                    
                        if($(FULL_STATE_ID).length) {
                    
                            if(warn) log('State [' + FULL_STATE_ID + '] is already existing and will no longer be created.', 'warn');
                            return;
                        }
                    
                    
                        let obj = {};
                        obj.type = 'state';
                        obj.common = param;
                        setObject(FULL_STATE_ID, obj, function (err) {
                        
                          if (err) {
                                log('Cannot write object: ' + err);
                            } else {
                                let init = null;
                    
                                if(param.def === undefined) {
                    
                                    if(param.type === 'number') init = 0;
                    
                                    if(param.type === 'boolean') init = false;
                    
                                    if(param.type === 'string') init = 'noch leer';
                    
                                } else {
                    
                                    init = param.def;
                    
                                }
                    
                                setTimeout(function() { setState(FULL_STATE_ID, init, true); }, 1000); // see https://forum.iobroker.net/post/334331
                    
                            }
                        });
                    }
                    

                    Wie @paul53 schon geschrieben hat, deaktiviere das Script wenn es noch irgendwo bei Dir läuft. Die Rollen der DP kannst Du auch nachträglich korrigieren.
                    Und diese Version von dem Script von Mic ist eine der ersten....Nimm das nicht mehr.

                    * Version: 0.1 - Mic
                    

                    Edit: Hier ist das letzte Script von Mic, wenn Du es weiter verwenden willst. Da steht übrigens unter 2.:

                    Screenshot_20210901-123800_Chrome.jpg

                    https://github.com/Mic-M/iobroker-createUserStates

                    1 Antwort Letzte Antwort
                    0
                    • N Nordischerjung

                      @dslraser Moin, das hier ist es, bei Bedarf aktiviere ich die oberen Zeilen demnestprechend mit neune Namen etc.

                      //####################---Number---####################
                      //createUserDataState('Grill.Fleischtemperatur1', {'name':'Fleischtemperatur1', 'type':'number', 'read':true, 'write':true, 'role':'number', 'def':0});
                      //createUserDataState('Grill.Fleischtemperatur2', {'name':'Fleischtemperatur2', 'type':'number', 'read':true, 'write':true, 'role':'number', 'def':0});
                      //createUserDataState('Grill.Grilltemperatur', {'name':'Grilltemperatur', 'type':'number', 'read':true, 'write':true, 'role':'number', 'def':0});
                      
                      //####################---String---####################
                      //createUserDataState('vis.Stundenplan.Toni.Montag.Stunde1', {'name':'Montag Stunde1', 'type':'string', 'read':true, 'write':true, 'role':'string', 'def':'1'});
                      //createUserDataState('vis.AdapterStatus.restartTrigger', {'name':'Adapter_restartTrigger', 'type':'string', 'read':true, 'write':true, 'role':'string', 'def':'noch leer'});
                      
                      //####################---Bool---####################
                      //createUserDataState('Test.State1', {'name':'State1', 'type':'boolean', 'read':true, 'write':true, 'role':'state', 'def':false, "smartName": {"de": "State","smartType": "state"}});
                      
                       log(new Date());
                      
                      /**
                      
                       * Creates a state under 0_userdata.0
                       * Source: https://forum.iobroker.net/topic/26839/
                       * Thanks to ioBroker forum user "paul53" for the basis of this function.
                       * Version: 0.1 - Mic
                       * @param {string} stateId        State ID to be created under '0_userdata.0', like 'LivingRoom.Lights.Sideboard.Brightness'
                       * @param {object} param          Object with state details. Template: {'name':'NAME', 'type':'number', 'unit':'UNIT', 'min':MIN, 'max':MAX, 'read':true, 'write':true, 'role':'ROLE', 'def':DEFAULT }
                       * @param {boolean} [warn=false]  Optional. Throws warning in log, if state is already existing. Default is false, so no warning in log, if state exists
                       */
                      
                      function createUserDataState(stateId, param, warn) {
                      
                          if (warn === undefined) warn = false;
                          const WHERE = '0_userdata.0';
                          stateId = (stateId.startsWith(WHERE)) ? stateId.substring(WHERE.length) : stateId; // remove WHERE from beginning of string
                          stateId = (stateId.startsWith('.')) ? stateId.substring(1) : stateId; // remove first "."
                          const FULL_STATE_ID = (WHERE.endsWith('.') ? WHERE : WHERE + '.') + stateId; // Final state
                      
                          if($(FULL_STATE_ID).length) {
                      
                              if(warn) log('State [' + FULL_STATE_ID + '] is already existing and will no longer be created.', 'warn');
                              return;
                          }
                      
                      
                          let obj = {};
                          obj.type = 'state';
                          obj.common = param;
                          setObject(FULL_STATE_ID, obj, function (err) {
                          
                            if (err) {
                                  log('Cannot write object: ' + err);
                              } else {
                                  let init = null;
                      
                                  if(param.def === undefined) {
                      
                                      if(param.type === 'number') init = 0;
                      
                                      if(param.type === 'boolean') init = false;
                      
                                      if(param.type === 'string') init = 'noch leer';
                      
                                  } else {
                      
                                      init = param.def;
                      
                                  }
                      
                                  setTimeout(function() { setState(FULL_STATE_ID, init, true); }, 1000); // see https://forum.iobroker.net/post/334331
                      
                              }
                          });
                      }
                      
                      dslraserD Offline
                      dslraserD Offline
                      dslraser
                      Forum Testing Most Active
                      schrieb am zuletzt editiert von dslraser
                      #12

                      @nordischerjung
                      Hier ein Vorschlag/Beispiel, welches ich aktuell verwende. (Blockly mit JS Funktion)

                      Bildschirmfoto 2021-09-01 um 14.15.41.png

                      in der Funktion stehen diese Beispiele

                      Bildschirmfoto 2021-09-01 um 14.16.10.png

                      Daraus wird dann das

                      Bildschirmfoto 2021-09-01 um 14.16.39.png

                      Kannst Du beliebig erweitern und immer mit laufen lassen. Die Datenpunkte werden durch diese Funktion nicht neu initialisiert oder überschrieben.

                      EDIT:

                      <xml xmlns="https://developers.google.com/blockly/xml">
                       <variables>
                         <variable id="?]t#NblY,7nezpH^U@A%">anlegen_in</variable>
                       </variables>
                       <block type="procedures_defcustomnoreturn" id="Q6*2#9#;FNeNnQsQ=FO*" x="13" y="13">
                         <mutation statements="false"></mutation>
                         <field name="NAME">Datenpunkte_anlegen</field>
                         <field name="SCRIPT">YXN5bmMgZnVuY3Rpb24gY3JlYXRlVXNlclN0YXRlcyh3aGVyZSwgc3RhdGVzVG9DcmVhdGUpIHsKICAgbGV0IGRwLCBpZEtleTsKICAgZm9yKGxldCBrZXkgb2Ygc3RhdGVzVG9DcmVhdGUpewogICAJaWRLZXkgPSB3aGVyZSArICcuJyArIGtleVswXTsKICAgICAgIGRwID0ga2V5WzFdOwogICAJaWYgKCEoYXdhaXQgZXhpc3RzU3RhdGVBc3luYyhpZEtleSkpKSB7CiAgIAkJYXdhaXQgY3JlYXRlU3RhdGVBc3luYyhpZEtleSwgZHApOwogICAJfQogICB9Cn0KLy9EYXRlbnB1bmt0ZSBhbmxlZ2VuCgpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICBbJ1Rlc3QuRGF0ZW5wdW5rdGUuMDFfWmFobCcsIHsnbmFtZSc6J0RQIGFscyBaYWhsLWluaXRpYWxpc2llcnQgbWl0IDAnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdtaW4nOjAsICdtYXgnOjEwMCwgJ3JvbGUnOid2YWx1ZScsICdkZWYnOjB9XSwgICAgCiAgICBbJ1Rlc3QuRGF0ZW5wdW5rdGUuMDJfVGV4dCcsIHsnbmFtZSc6J0RQIGFscyBUZXh0LWluaXRpYWxpc2llcnQgbWl0IG5vY2ggbGVlcicsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOid0ZXh0JywgJ2RlZic6J25vY2ggbGVlcid9XSwgICAgCiAgICBbJ1Rlc3QuRGF0ZW5wdW5rdGUuMDNfQnV0dG9uJywgeyduYW1lJzonRFAgYWxzIEJ1dHRvbi1pbml0aWFsaXNpZXJ0IG1pdCB0cnVlJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOmZhbHNlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonYnV0dG9uJywgJ2RlZic6dHJ1ZX1dLCAgICAKICAgIFsnVGVzdC5EYXRlbnB1bmt0ZS4wNF9Td2l0Y2gnLCB7J25hbWUnOidEUCBhbHMgU3dpdGNoLWluaXRpYWxpc2llcnQgbWl0IGF1cycsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonc3dpdGNoJywgJ2RlZic6IGZhbHNlLCAnc3RhdGVzJyA6IHt0cnVlOiAnYW4nLGZhbHNlOiAnYXVzJ319XSwKCl07CmF3YWl0IGNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbiwgc3RhdGVzVG9DcmVhdGUpOwoKbWFpbigp</field>
                         <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                       </block>
                       <block type="comment" id="Zyfx~f!lZJKccy0M/1%/" x="13" y="63">
                         <field name="COMMENT">0_userdata.0 oder javascript.x (x=Instanznummer)</field>
                         <next>
                           <block type="variables_set" id="~JE=DBL)b%5zA!oAD.H2">
                             <field name="VAR" id="?]t#NblY,7nezpH^U@A%">anlegen_in</field>
                             <value name="VALUE">
                               <block type="text" id="(DT98%_mBJ0f}/3*=`Fk">
                                 <field name="TEXT">javascript.0</field>
                               </block>
                             </value>
                             <next>
                               <block type="procedures_callcustomnoreturn" id="[?`_=t?ye79~x$(-ASft">
                                 <mutation name="Datenpunkte_anlegen"></mutation>
                               </block>
                             </next>
                           </block>
                         </next>
                       </block>
                       <block type="procedures_defnoreturn" id="jVn7@(nxUAdLkS^LJ|If" x="13" y="163">
                         <field name="NAME">main</field>
                         <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                         <statement name="STACK">
                           <block type="debug" id="i0Upf2]MA=^5z*@wA+1~">
                             <field name="Severity">log</field>
                             <value name="TEXT">
                               <shadow type="text" id="d^63CE7[0vse5f=*X9dG">
                                 <field name="TEXT">test</field>
                               </shadow>
                               <block type="text_join" id="]_j.+ICT$YFJ/k?.7;)V">
                                 <mutation items="3"></mutation>
                                 <value name="ADD0">
                                   <block type="text" id="=3|mwnPzP:|nfv=jLHUB">
                                     <field name="TEXT">Ich bin jetzt in der Funktion main.</field>
                                   </block>
                                 </value>
                                 <value name="ADD1">
                                   <block type="text" id="(q;@gX5FQ*4Z;(f?!Z0N">
                                     <field name="TEXT"> Alle Datenpunkte wurden erstellt.</field>
                                   </block>
                                 </value>
                                 <value name="ADD2">
                                   <block type="text" id="zsA#`lkTk.;3,{P~H?CR">
                                     <field name="TEXT">Ab hier kommt dann Dein eigentliches Blockly.</field>
                                   </block>
                                 </value>
                               </block>
                             </value>
                           </block>
                         </statement>
                       </block>
                      </xml>
                      

                      Dieser Haken muß im Javascript Adapter drinn sein

                      Bildschirmfoto 2021-09-01 um 14.35.20.png

                      paul53P N 2 Antworten Letzte Antwort
                      0
                      • dslraserD dslraser

                        @nordischerjung
                        Hier ein Vorschlag/Beispiel, welches ich aktuell verwende. (Blockly mit JS Funktion)

                        Bildschirmfoto 2021-09-01 um 14.15.41.png

                        in der Funktion stehen diese Beispiele

                        Bildschirmfoto 2021-09-01 um 14.16.10.png

                        Daraus wird dann das

                        Bildschirmfoto 2021-09-01 um 14.16.39.png

                        Kannst Du beliebig erweitern und immer mit laufen lassen. Die Datenpunkte werden durch diese Funktion nicht neu initialisiert oder überschrieben.

                        EDIT:

                        <xml xmlns="https://developers.google.com/blockly/xml">
                         <variables>
                           <variable id="?]t#NblY,7nezpH^U@A%">anlegen_in</variable>
                         </variables>
                         <block type="procedures_defcustomnoreturn" id="Q6*2#9#;FNeNnQsQ=FO*" x="13" y="13">
                           <mutation statements="false"></mutation>
                           <field name="NAME">Datenpunkte_anlegen</field>
                           <field name="SCRIPT">YXN5bmMgZnVuY3Rpb24gY3JlYXRlVXNlclN0YXRlcyh3aGVyZSwgc3RhdGVzVG9DcmVhdGUpIHsKICAgbGV0IGRwLCBpZEtleTsKICAgZm9yKGxldCBrZXkgb2Ygc3RhdGVzVG9DcmVhdGUpewogICAJaWRLZXkgPSB3aGVyZSArICcuJyArIGtleVswXTsKICAgICAgIGRwID0ga2V5WzFdOwogICAJaWYgKCEoYXdhaXQgZXhpc3RzU3RhdGVBc3luYyhpZEtleSkpKSB7CiAgIAkJYXdhaXQgY3JlYXRlU3RhdGVBc3luYyhpZEtleSwgZHApOwogICAJfQogICB9Cn0KLy9EYXRlbnB1bmt0ZSBhbmxlZ2VuCgpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICBbJ1Rlc3QuRGF0ZW5wdW5rdGUuMDFfWmFobCcsIHsnbmFtZSc6J0RQIGFscyBaYWhsLWluaXRpYWxpc2llcnQgbWl0IDAnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdtaW4nOjAsICdtYXgnOjEwMCwgJ3JvbGUnOid2YWx1ZScsICdkZWYnOjB9XSwgICAgCiAgICBbJ1Rlc3QuRGF0ZW5wdW5rdGUuMDJfVGV4dCcsIHsnbmFtZSc6J0RQIGFscyBUZXh0LWluaXRpYWxpc2llcnQgbWl0IG5vY2ggbGVlcicsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOid0ZXh0JywgJ2RlZic6J25vY2ggbGVlcid9XSwgICAgCiAgICBbJ1Rlc3QuRGF0ZW5wdW5rdGUuMDNfQnV0dG9uJywgeyduYW1lJzonRFAgYWxzIEJ1dHRvbi1pbml0aWFsaXNpZXJ0IG1pdCB0cnVlJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOmZhbHNlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonYnV0dG9uJywgJ2RlZic6dHJ1ZX1dLCAgICAKICAgIFsnVGVzdC5EYXRlbnB1bmt0ZS4wNF9Td2l0Y2gnLCB7J25hbWUnOidEUCBhbHMgU3dpdGNoLWluaXRpYWxpc2llcnQgbWl0IGF1cycsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonc3dpdGNoJywgJ2RlZic6IGZhbHNlLCAnc3RhdGVzJyA6IHt0cnVlOiAnYW4nLGZhbHNlOiAnYXVzJ319XSwKCl07CmF3YWl0IGNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbiwgc3RhdGVzVG9DcmVhdGUpOwoKbWFpbigp</field>
                           <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                         </block>
                         <block type="comment" id="Zyfx~f!lZJKccy0M/1%/" x="13" y="63">
                           <field name="COMMENT">0_userdata.0 oder javascript.x (x=Instanznummer)</field>
                           <next>
                             <block type="variables_set" id="~JE=DBL)b%5zA!oAD.H2">
                               <field name="VAR" id="?]t#NblY,7nezpH^U@A%">anlegen_in</field>
                               <value name="VALUE">
                                 <block type="text" id="(DT98%_mBJ0f}/3*=`Fk">
                                   <field name="TEXT">javascript.0</field>
                                 </block>
                               </value>
                               <next>
                                 <block type="procedures_callcustomnoreturn" id="[?`_=t?ye79~x$(-ASft">
                                   <mutation name="Datenpunkte_anlegen"></mutation>
                                 </block>
                               </next>
                             </block>
                           </next>
                         </block>
                         <block type="procedures_defnoreturn" id="jVn7@(nxUAdLkS^LJ|If" x="13" y="163">
                           <field name="NAME">main</field>
                           <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                           <statement name="STACK">
                             <block type="debug" id="i0Upf2]MA=^5z*@wA+1~">
                               <field name="Severity">log</field>
                               <value name="TEXT">
                                 <shadow type="text" id="d^63CE7[0vse5f=*X9dG">
                                   <field name="TEXT">test</field>
                                 </shadow>
                                 <block type="text_join" id="]_j.+ICT$YFJ/k?.7;)V">
                                   <mutation items="3"></mutation>
                                   <value name="ADD0">
                                     <block type="text" id="=3|mwnPzP:|nfv=jLHUB">
                                       <field name="TEXT">Ich bin jetzt in der Funktion main.</field>
                                     </block>
                                   </value>
                                   <value name="ADD1">
                                     <block type="text" id="(q;@gX5FQ*4Z;(f?!Z0N">
                                       <field name="TEXT"> Alle Datenpunkte wurden erstellt.</field>
                                     </block>
                                   </value>
                                   <value name="ADD2">
                                     <block type="text" id="zsA#`lkTk.;3,{P~H?CR">
                                       <field name="TEXT">Ab hier kommt dann Dein eigentliches Blockly.</field>
                                     </block>
                                   </value>
                                 </block>
                               </value>
                             </block>
                           </statement>
                         </block>
                        </xml>
                        

                        Dieser Haken muß im Javascript Adapter drinn sein

                        Bildschirmfoto 2021-09-01 um 14.35.20.png

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

                        @dslraser sagte: in der Funktion stehen diese Beispiele

                        Dann sollte man gleich in Javascript programmieren und nicht mit Blockly.

                        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

                        dslraserD 1 Antwort Letzte Antwort
                        0
                        • paul53P paul53

                          @dslraser sagte: in der Funktion stehen diese Beispiele

                          Dann sollte man gleich in Javascript programmieren und nicht mit Blockly.

                          dslraserD Offline
                          dslraserD Offline
                          dslraser
                          Forum Testing Most Active
                          schrieb am zuletzt editiert von
                          #14

                          @paul53 sagte in Remanente Speicherung von User Datenpunkte:

                          @dslraser sagte: in der Funktion stehen diese Beispiele

                          Dann sollte man gleich in Javascript programmieren und nicht mit Blockly.

                          Ja, hast ja Recht, wenn man es kann...Ich kann nur etwas Blockly und wenig Javascript, deshalb mache ich es so. Es war/ist ja auch nur ein Vorschlag.

                          paul53P 1 Antwort Letzte Antwort
                          0
                          • dslraserD dslraser

                            @nordischerjung
                            Hier ein Vorschlag/Beispiel, welches ich aktuell verwende. (Blockly mit JS Funktion)

                            Bildschirmfoto 2021-09-01 um 14.15.41.png

                            in der Funktion stehen diese Beispiele

                            Bildschirmfoto 2021-09-01 um 14.16.10.png

                            Daraus wird dann das

                            Bildschirmfoto 2021-09-01 um 14.16.39.png

                            Kannst Du beliebig erweitern und immer mit laufen lassen. Die Datenpunkte werden durch diese Funktion nicht neu initialisiert oder überschrieben.

                            EDIT:

                            <xml xmlns="https://developers.google.com/blockly/xml">
                             <variables>
                               <variable id="?]t#NblY,7nezpH^U@A%">anlegen_in</variable>
                             </variables>
                             <block type="procedures_defcustomnoreturn" id="Q6*2#9#;FNeNnQsQ=FO*" x="13" y="13">
                               <mutation statements="false"></mutation>
                               <field name="NAME">Datenpunkte_anlegen</field>
                               <field name="SCRIPT">YXN5bmMgZnVuY3Rpb24gY3JlYXRlVXNlclN0YXRlcyh3aGVyZSwgc3RhdGVzVG9DcmVhdGUpIHsKICAgbGV0IGRwLCBpZEtleTsKICAgZm9yKGxldCBrZXkgb2Ygc3RhdGVzVG9DcmVhdGUpewogICAJaWRLZXkgPSB3aGVyZSArICcuJyArIGtleVswXTsKICAgICAgIGRwID0ga2V5WzFdOwogICAJaWYgKCEoYXdhaXQgZXhpc3RzU3RhdGVBc3luYyhpZEtleSkpKSB7CiAgIAkJYXdhaXQgY3JlYXRlU3RhdGVBc3luYyhpZEtleSwgZHApOwogICAJfQogICB9Cn0KLy9EYXRlbnB1bmt0ZSBhbmxlZ2VuCgpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICBbJ1Rlc3QuRGF0ZW5wdW5rdGUuMDFfWmFobCcsIHsnbmFtZSc6J0RQIGFscyBaYWhsLWluaXRpYWxpc2llcnQgbWl0IDAnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdtaW4nOjAsICdtYXgnOjEwMCwgJ3JvbGUnOid2YWx1ZScsICdkZWYnOjB9XSwgICAgCiAgICBbJ1Rlc3QuRGF0ZW5wdW5rdGUuMDJfVGV4dCcsIHsnbmFtZSc6J0RQIGFscyBUZXh0LWluaXRpYWxpc2llcnQgbWl0IG5vY2ggbGVlcicsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOid0ZXh0JywgJ2RlZic6J25vY2ggbGVlcid9XSwgICAgCiAgICBbJ1Rlc3QuRGF0ZW5wdW5rdGUuMDNfQnV0dG9uJywgeyduYW1lJzonRFAgYWxzIEJ1dHRvbi1pbml0aWFsaXNpZXJ0IG1pdCB0cnVlJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOmZhbHNlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonYnV0dG9uJywgJ2RlZic6dHJ1ZX1dLCAgICAKICAgIFsnVGVzdC5EYXRlbnB1bmt0ZS4wNF9Td2l0Y2gnLCB7J25hbWUnOidEUCBhbHMgU3dpdGNoLWluaXRpYWxpc2llcnQgbWl0IGF1cycsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonc3dpdGNoJywgJ2RlZic6IGZhbHNlLCAnc3RhdGVzJyA6IHt0cnVlOiAnYW4nLGZhbHNlOiAnYXVzJ319XSwKCl07CmF3YWl0IGNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbiwgc3RhdGVzVG9DcmVhdGUpOwoKbWFpbigp</field>
                               <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                             </block>
                             <block type="comment" id="Zyfx~f!lZJKccy0M/1%/" x="13" y="63">
                               <field name="COMMENT">0_userdata.0 oder javascript.x (x=Instanznummer)</field>
                               <next>
                                 <block type="variables_set" id="~JE=DBL)b%5zA!oAD.H2">
                                   <field name="VAR" id="?]t#NblY,7nezpH^U@A%">anlegen_in</field>
                                   <value name="VALUE">
                                     <block type="text" id="(DT98%_mBJ0f}/3*=`Fk">
                                       <field name="TEXT">javascript.0</field>
                                     </block>
                                   </value>
                                   <next>
                                     <block type="procedures_callcustomnoreturn" id="[?`_=t?ye79~x$(-ASft">
                                       <mutation name="Datenpunkte_anlegen"></mutation>
                                     </block>
                                   </next>
                                 </block>
                               </next>
                             </block>
                             <block type="procedures_defnoreturn" id="jVn7@(nxUAdLkS^LJ|If" x="13" y="163">
                               <field name="NAME">main</field>
                               <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                               <statement name="STACK">
                                 <block type="debug" id="i0Upf2]MA=^5z*@wA+1~">
                                   <field name="Severity">log</field>
                                   <value name="TEXT">
                                     <shadow type="text" id="d^63CE7[0vse5f=*X9dG">
                                       <field name="TEXT">test</field>
                                     </shadow>
                                     <block type="text_join" id="]_j.+ICT$YFJ/k?.7;)V">
                                       <mutation items="3"></mutation>
                                       <value name="ADD0">
                                         <block type="text" id="=3|mwnPzP:|nfv=jLHUB">
                                           <field name="TEXT">Ich bin jetzt in der Funktion main.</field>
                                         </block>
                                       </value>
                                       <value name="ADD1">
                                         <block type="text" id="(q;@gX5FQ*4Z;(f?!Z0N">
                                           <field name="TEXT"> Alle Datenpunkte wurden erstellt.</field>
                                         </block>
                                       </value>
                                       <value name="ADD2">
                                         <block type="text" id="zsA#`lkTk.;3,{P~H?CR">
                                           <field name="TEXT">Ab hier kommt dann Dein eigentliches Blockly.</field>
                                         </block>
                                       </value>
                                     </block>
                                   </value>
                                 </block>
                               </statement>
                             </block>
                            </xml>
                            

                            Dieser Haken muß im Javascript Adapter drinn sein

                            Bildschirmfoto 2021-09-01 um 14.35.20.png

                            N Offline
                            N Offline
                            Nordischerjung
                            schrieb am zuletzt editiert von Nordischerjung
                            #15

                            @dslraser Ja super danke, das nehme ich dann. Jetzt hab ich auch verstanden was du meinst. Das Script, das ich benutze bis dato, ist immer inaktiv. Es sei denn ich benötige einen D,.dDann habe ich das Script einmal gestartet und wieder gestoppt, nachdem ich den entsprechenden DP oben eingetragen hatte.

                            Achso, hast du die Funktion auch als Text für mich?

                            Gruß Nordischerjung

                            sonnige Grüße von der Ostsee

                            dslraserD 1 Antwort Letzte Antwort
                            0
                            • dslraserD dslraser

                              @paul53 sagte in Remanente Speicherung von User Datenpunkte:

                              @dslraser sagte: in der Funktion stehen diese Beispiele

                              Dann sollte man gleich in Javascript programmieren und nicht mit Blockly.

                              Ja, hast ja Recht, wenn man es kann...Ich kann nur etwas Blockly und wenig Javascript, deshalb mache ich es so. Es war/ist ja auch nur ein Vorschlag.

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

                              @dslraser sagte: Ich kann nur etwas Blockly und wenig Javascript, deshalb mache ich es so.

                              Was ich sagen wollte: Für eine Javscript-Funktion innerhalb von Blockly ist diese Funktion zu komplex.

                              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

                              dslraserD 1 Antwort Letzte Antwort
                              0
                              • N Nordischerjung

                                @dslraser Ja super danke, das nehme ich dann. Jetzt hab ich auch verstanden was du meinst. Das Script, das ich benutze bis dato, ist immer inaktiv. Es sei denn ich benötige einen D,.dDann habe ich das Script einmal gestartet und wieder gestoppt, nachdem ich den entsprechenden DP oben eingetragen hatte.

                                Achso, hast du die Funktion auch als Text für mich?

                                dslraserD Offline
                                dslraserD Offline
                                dslraser
                                Forum Testing Most Active
                                schrieb am zuletzt editiert von
                                #17

                                @nordischerjung sagte in Remanente Speicherung von User Datenpunkte:

                                Achso, hast du die Funktion auch als Text für mich?

                                ich habe den Export hier eingefügt. Hatte ich vergessen.

                                1 Antwort Letzte Antwort
                                0
                                • paul53P paul53

                                  @dslraser sagte: Ich kann nur etwas Blockly und wenig Javascript, deshalb mache ich es so.

                                  Was ich sagen wollte: Für eine Javscript-Funktion innerhalb von Blockly ist diese Funktion zu komplex.

                                  dslraserD Offline
                                  dslraserD Offline
                                  dslraser
                                  Forum Testing Most Active
                                  schrieb am zuletzt editiert von
                                  #18

                                  @paul53 sagte in Remanente Speicherung von User Datenpunkte:

                                  Was ich sagen wollte: Für eine Javscript-Funktion innerhalb von Blockly ist diese Funktion zu komplex.

                                  Diese Funktion habe ich auch nicht selbst geschrieben, die stammt von hier

                                  Grundsätzlich geht ja auch der Blockly Baustein, aber was mich daran eben bisher stört, das die erstellten Datenpunkte (wenn es neue sind) erst beim zweiten Blocklystart verwendet werden können, wenn denn alles in einem Blockly passieren soll.

                                  paul53P 1 Antwort Letzte Antwort
                                  0
                                  • dslraserD dslraser

                                    @paul53 sagte in Remanente Speicherung von User Datenpunkte:

                                    Was ich sagen wollte: Für eine Javscript-Funktion innerhalb von Blockly ist diese Funktion zu komplex.

                                    Diese Funktion habe ich auch nicht selbst geschrieben, die stammt von hier

                                    Grundsätzlich geht ja auch der Blockly Baustein, aber was mich daran eben bisher stört, das die erstellten Datenpunkte (wenn es neue sind) erst beim zweiten Blocklystart verwendet werden können, wenn denn alles in einem Blockly passieren soll.

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

                                    @dslraser
                                    Ich würde nur eine allgemein gehaltene Javascript-Funktion verwenden, denn den Rest darum kann man in Blockly realisieren.

                                    Bild_2021-09-01_160535.png

                                    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

                                    N 1 Antwort Letzte Antwort
                                    0
                                    • paul53P paul53

                                      @dslraser
                                      Ich würde nur eine allgemein gehaltene Javascript-Funktion verwenden, denn den Rest darum kann man in Blockly realisieren.

                                      Bild_2021-09-01_160535.png

                                      N Offline
                                      N Offline
                                      Nordischerjung
                                      schrieb am zuletzt editiert von
                                      #20

                                      @paul53 @dslraser ich benutze das Script eigentlich nur händisch, name etc eintragen, start, stop. Fertig. Kann ich die anderen damit überschreiben damit die gespeichert bleiben nach einem neustart?

                                      Gruß Nordischerjung

                                      sonnige Grüße von der Ostsee

                                      paul53P 1 Antwort Letzte Antwort
                                      0
                                      • N Nordischerjung

                                        @paul53 @dslraser ich benutze das Script eigentlich nur händisch, name etc eintragen, start, stop. Fertig. Kann ich die anderen damit überschreiben damit die gespeichert bleiben nach einem neustart?

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

                                        @nordischerjung sagte: Kann ich die anderen damit überschreiben damit die gespeichert bleiben nach einem neustart?

                                        Werte von Datenpunkten, die nicht in einem Skript überschrieben werden, bleiben bei einem Neustart erhalten.

                                        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

                                        N 1 Antwort Letzte Antwort
                                        0
                                        • paul53P paul53

                                          @nordischerjung sagte: Kann ich die anderen damit überschreiben damit die gespeichert bleiben nach einem neustart?

                                          Werte von Datenpunkten, die nicht in einem Skript überschrieben werden, bleiben bei einem Neustart erhalten.

                                          N Offline
                                          N Offline
                                          Nordischerjung
                                          schrieb am zuletzt editiert von
                                          #22

                                          @paul53 Moin,

                                          so aus dem nichts ist es wieder passiert, alle DPs für die beiden Stundenpläne haben "null" stehen. Kein Update, keine Änderung an irgend etwas. Dies DPs werden nirgens in einem Script oder so benutzt. Die DPs sind lediglich in der VIS im Widget "jqui-Input". Was kann das sein?

                                          f3429cc8-d328-4741-b4a2-8e3d6c3b21f3-grafik.png

                                          Gruß Nordischerjung

                                          sonnige Grüße von der Ostsee

                                          paul53P 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

                                          604

                                          Online

                                          32.6k

                                          Benutzer

                                          82.1k

                                          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