NEWS
Remanente Speicherung von User Datenpunkte
-
@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
Nach Neustart waren diese definitiv leer.
-
@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:
-
@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
(
anlegen_in
ist bei mir eine Variable wo die Datenpunkte erstellt werden sollen)
Um das false oder eben true, was daneben steht, um das geht es. true überschreibt, false nichtDas war mal ein Beispiel, was ich mal verwendet habe
aktuell verwende ich sowas hier
Edit: die angezeigten issue sind Links aus dem Script von Mic
-
@dslraser danke für die ausführliche Antwort, kann ich das nachträglich am DP ändern?
-
@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.
-
@dslraser sagte: Auf true werden die Datenpunkte gnadenlos überschrieben/neu geschrieben.
Wenn das Skript noch aktiv ist, sollte es deaktiviert werden.
-
@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 } }); }
-
@nordischerjung
Du verwendest falsche Rollen, was allerdings nicht der Grund für fehlende Werte nach Neustart ist. -
@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.:
-
@nordischerjung
Hier ein Vorschlag/Beispiel, welches ich aktuell verwende. (Blockly mit JS Funktion)in der Funktion stehen diese Beispiele
Daraus wird dann das
Kannst Du beliebig erweitern und immer mit laufen lassen. Die Datenpunkte werden durch diese Funktion nicht neu initialisiert oder überschrieben.
EDIT:
Dieser Haken muß im Javascript Adapter drinn sein
-
@dslraser sagte: in der Funktion stehen diese Beispiele
Dann sollte man gleich in Javascript programmieren und nicht mit Blockly.
-
@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.
-
@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?
-
@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.
-
@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.
-
@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.
-
@dslraser
Ich würde nur eine allgemein gehaltene Javascript-Funktion verwenden, denn den Rest darum kann man in Blockly realisieren. -
-
@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.
-
@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?