NEWS
Erster Versuch ein JSON zu erzeugen
-
@chris76e sagte: Cannot set properties of undefined (setting 'Ende')
Ist Zeile 14 in meinem Vorschlag jetzt Zeile 29?
Schiebe mal die Deklaration von obj (Zeile 10) vor den Trigger.@chris76e sagte in Erster Versuch ein JSON zu erzeugen:
wie die Endzeit immer neu geschrieben wurden ist
Das ist ein anderes Skript.
-
Habe das Script jetzt so geändert:
const idTable = '0_userdata.0.JSON.Spülmaschiene'; // ID JSON-Tabelle const idStatus = 'homeconnect.0.011040388898000963.status.BSH_Common_Status_OperationState'; const idProg = 'homeconnect.0.011040388898000963.programs.active.BSH_Common_Root_ActiveProgram'; var table = []; if(getState(idTable).val) table = JSON.parse(getState(idTable).val); var obj = {}; on(idStatus, function(dp) { if(dp.state.val == 'BSH.Common.EnumType.OperationState.Run') { obj.Start = formatDate(new Date(), 'DD.MM.YY hh:mm'); obj.Programm = getObject(idProg).common.states[getState(idProg).val]; } else if(dp.oldState.val == 'BSH.Common.EnumType.OperationState.Run') { obj.Ende = formatDate(new Date(), 'DD.MM.YY hh:mm'); table.push(obj); if(table.length > 10) table.shift(); setState(idTable, JSON.stringify(table), true); } });
Dann wird das in JSON geschrieben, fehlt also noch das Programm
[ { "Start": "05.09.22 23:37", "Ende": "05.09.22 23:38" } ]
Die Zeilen hatten sich beim Kopieren vom Script geändert, wurde immer eine leerzeile eingefügt, ist jetzt geändert.
-
@chris76e sagte: fehlt also noch das Programm
Ohne Error- oder Warn-Log?
Füge mal Logs ein (hinter Zeile 11):log(getState(idProg).val); log(getObject(idProg).common.states[getState(idProg).val]);
-
Wenn Spülmaschiene Startet kommt das im Log
00:23:34.096 info javascript.0 (649) script.js.common.JSON.JASONSP: null 00:23:34.097 info javascript.0 (649) script.js.common.JSON.JASONSP: undefined
-
@chris76e sagte: kommt das im Log
Dann verschiebe mal Zeile 11 unter Zeile 12 (else if).
-
Da ist das selbe....
00:43:45.727 info javascript.0 (649) script.js.common.JSON.JASONSP: null 00:43:45.728 info javascript.0 (649) script.js.common.JSON.JASONSP: undefined
const idTable = '0_userdata.0.JSON.Spülmaschiene'; // ID JSON-Tabelle const idStatus = 'homeconnect.0.011040388898000963.status.BSH_Common_Status_OperationState'; const idProg = 'homeconnect.0.011040388898000963.programs.active.BSH_Common_Root_ActiveProgram'; var table = []; if(getState(idTable).val) table = JSON.parse(getState(idTable).val); var obj = {}; on(idStatus, function(dp) { if(dp.state.val == 'BSH.Common.EnumType.OperationState.Run') { obj.Start = formatDate(new Date(), 'DD.MM.YY hh:mm'); } else if(dp.oldState.val == 'BSH.Common.EnumType.OperationState.Run') { obj.Programm = getObject(idProg).common.states[getState(idProg).val]; obj.Ende = formatDate(new Date(), 'DD.MM.YY hh:mm'); table.push(obj); if(table.length > 10) table.shift(); setState(idTable, JSON.stringify(table), true); log(getState(idProg).val); log(getObject(idProg).common.states[getState(idProg).val]); } });
-
Vieleicht hilft das dir noch weiter, die Objektdaten von
{ "type": "state", "common": { "name": "BSH_Common_Root_ActiveProgram", "type": "string", "role": "indicator", "write": true, "read": true, "states": { "Dishcare.Dishwasher.Program.Intensiv70": "Intensiv 70°", "Dishcare.Dishwasher.Program.Auto2": "Auto 45-65°", "Dishcare.Dishwasher.Program.Eco50": "Eco 50°", "Dishcare.Dishwasher.Program.Quick45": "Speed 45°", "Dishcare.Dishwasher.Program.PreRinse": "Vorspülen", "Dishcare.Dishwasher.Program.Quick65": "Speed 65°", "Dishcare.Dishwasher.Program.MachineCare": "Maschinenpflege" }, "custom": { "history.0": { "enabled": true, "aliasId": "", "debounceTime": 0, "blockTime": 0, "changesOnly": false, "changesRelogInterval": 0, "changesMinDelta": 0, "ignoreBelowNumber": "", "disableSkippedValueLogging": false, "retention": 31536000, "customRetentionDuration": 365, "maxLength": 10, "enableDebugLogs": false, "debounce": 0 } } }, "native": {}, "_id": "homeconnect.0.011040388898000963.programs.active.BSH_Common_Root_ActiveProgram", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" }, "from": "system.adapter.homeconnect.0", "user": "system.user.admin", "ts": 1662416101983 }
-
Bin jetzt einwenig weiter gekommen, wenn ich den DP
homeconnect.0.011040388898000963.programs.selected.BSH_Common_Root_SelectedProgram
nehme, dann wird der erkannt.
Aber mit der Schleife ist nochwas nicht richtig. Hier werden Daten überschrieben
[ { "Start": "06.09.22 00:42", "Ende": "06.09.22 00:43" }, { "Start": "06.09.22 09:25", "Ende": "06.09.22 09:25", "Programm": "Eco 50°" }, { "Start": "06.09.22 09:25", "Ende": "06.09.22 09:25", "Programm": "Eco 50°" } ]
[ { "Start": "06.09.22 00:42", "Ende": "06.09.22 00:43" }, { "Start": "06.09.22 09:28", "Ende": "06.09.22 09:28", "Programm": "Speed 45°" }, { "Start": "06.09.22 09:28", "Ende": "06.09.22 09:28", "Programm": "Speed 45°" }, { "Start": "06.09.22 09:28", "Ende": "06.09.22 09:28", "Programm": "Speed 45°" } ]
const idTable = '0_userdata.0.JSON.Spülmaschiene'; // ID JSON-Tabelle const idStatus = 'homeconnect.0.011040388898000963.status.BSH_Common_Status_OperationState'; const idProg = 'homeconnect.0.011040388898000963.programs.selected.BSH_Common_Root_SelectedProgram'; var table = []; if(getState(idTable).val) table = JSON.parse(getState(idTable).val); var obj = {}; on(idStatus, function(dp) { if(dp.state.val == 'BSH.Common.EnumType.OperationState.Run') { obj.Start = formatDate(new Date(), 'DD.MM.YY hh:mm'); obj.Programm = getObject(idProg).common.states[getState(idProg).val]; log(getState(idProg).val); log(getObject(idProg).common.states[getState(idProg).val]); } else if(dp.oldState.val == 'BSH.Common.EnumType.OperationState.Run') { obj.Ende = formatDate(new Date(), 'DD.MM.YY hh:mm'); table.push(obj); if(table.length > 10) table.shift(); setState(idTable, JSON.stringify(table), true); } });
-
Habe vermutlich zuschnell das Programm am GS gestoppt.
Habe es jetzt einwenig länger laufen lassen und dann wird richtig geschrieben.
{ "Start": "06.09.22 10:09", "Programm": "Auto 45-65°", "Ende": "06.09.22 10:11" }, { "Start": "06.09.22 10:09", "Programm": "Auto 45-65°", "Ende": "06.09.22 10:11" }, { "Start": "06.09.22 10:09", "Programm": "Auto 45-65°", "Ende": "06.09.22 10:11" }, { "Start": "06.09.22 10:09", "Programm": "Auto 45-65°", "Ende": "06.09.22 10:11" }, { "Start": "06.09.22 10:13", "Programm": "Eco 50°", "Ende": "06.09.22 10:20" } ]
-
Kannst du dir nochmal bitte die schleife anschauen? Irgendwas stimmt da doch nicht.
Es werden weiter Dopelte Einträge gemacht, bzw. alte Einträge überschrieben.
[ { "Start": "06.09.22 09:28", "Ende": "06.09.22 09:28", "Programm": "Speed 45°" }, { "Start": "06.09.22 09:28", "Ende": "06.09.22 09:28", "Programm": "Speed 45°" }, { "Start": "06.09.22 09:49", "Programm": "Intensiv 70°", "Ende": "06.09.22 09:49" }, { "Start": "06.09.22 09:49", "Programm": "Intensiv 70°", "Ende": "06.09.22 09:49" }, { "Start": "06.09.22 10:09", "Programm": "Auto 45-65°", "Ende": "06.09.22 10:11" }, { "Start": "06.09.22 10:09", "Programm": "Auto 45-65°", "Ende": "06.09.22 10:11" }, { "Start": "06.09.22 10:09", "Programm": "Auto 45-65°", "Ende": "06.09.22 10:11" }, { "Start": "06.09.22 10:09", "Programm": "Auto 45-65°", "Ende": "06.09.22 10:11" }, { "Start": "06.09.22 10:31", "Programm": "Eco 50°", "Ende": "06.09.22 15:08" }, { "Start": "06.09.22 10:31", "Programm": "Eco 50°", "Ende": "06.09.22 15:08" } ]
-
@chris76e sagte: Es werden weiter Dopelte Einträge gemacht
Das kann nur am Verhalten des Datenpunktes "homeconnect.0.011040388898000963.status.BSH_Common_Status_OperationState" liegen". Logge mal den Wert bei jedem Trigger-Ereignis.
-
Hier der Eintrag aus dem Log
- Start war noch ohne log vom Ende
20:19:34.230 info javascript.0 (649) script.js.common.JSON.JASONSP: BSH.Common.EnumType.OperationState.Run 20:19:34.231 info javascript.0 (649) script.js.common.JSON.JASONSP: Run 20:19:34.231 info javascript.0 (649) script.js.common.JSON.JASONSP: Dishcare.Dishwasher.Program.MachineCare 20:19:34.231 info javascript.0 (649) script.js.common.JSON.JASONSP: Maschinenpflege 20:27:19.463 info javascript.0 (649) Stop script script.js.common.JSON.JASONSP 20:27:19.466 info javascript.0 (649) Start javascript script.js.common.JSON.JASONSP 20:27:19.479 info javascript.0 (649) script.js.common.JSON.JASONSP: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions 20:28:02.079 info javascript.0 (649) script.js.common.JSON.JASONSP: BSH.Common.EnumType.OperationState.Run 20:28:02.081 info javascript.0 (649) script.js.common.JSON.JASONSP: Run 20:28:02.082 info javascript.0 (649) script.js.common.JSON.JASONSP: Dishcare.Dishwasher.Program.Quick45 20:28:02.082 info javascript.0 (649) script.js.common.JSON.JASONSP: Speed 45° 20:30:16.619 info javascript.0 (649) script.js.common.JSON.JASONSP: BSH.Common.EnumType.OperationState.Aborting 20:30:16.619 info javascript.0 (649) script.js.common.JSON.JASONSP: Aborting 20:32:02.233 info javascript.0 (649) script.js.common.JSON.JASONSP: BSH.Common.EnumType.OperationState.Run 20:32:02.234 info javascript.0 (649) script.js.common.JSON.JASONSP: Run 20:32:02.234 info javascript.0 (649) script.js.common.JSON.JASONSP: Dishcare.Dishwasher.Program.MachineCare 20:32:02.234 info javascript.0 (649) script.js.common.JSON.JASONSP: Maschinenpflege 20:33:17.902 info javascript.0 (649) script.js.common.JSON.JASONSP: BSH.Common.EnumType.OperationState.Aborting 20:33:17.902 info javascript.0 (649) script.js.common.JSON.JASONSP: Aborting
Und so sieht die JSON aus
{ "Start": "06.09.22 20:19", "Programm": "Maschinenpflege", "Ende": "06.09.22 20:25" }, { "Start": "06.09.22 20:32", "Programm": "Maschinenpflege", "Ende": "06.09.22 20:33" }, { "Start": "06.09.22 20:32", "Programm": "Maschinenpflege", "Ende": "06.09.22 20:33" }
Hier stand auch mal zwischenzeitlich der Eintrag von 20:28 mit Speed 45°
-
@chris76e
Aus dem Log sehe ich, dass "Run" nur als kurzer Impuls gemeldet wird und danach das Programm, beendet durch "Aborting". Dann versuche es mal so:const idTable = '0_userdata.0.JSON.Spülmaschiene'; // ID JSON-Tabelle const idStatus = 'homeconnect.0.011040388898000963.status.BSH_Common_Status_OperationState'; // const idProg = 'homeconnect.0.011040388898000963.programs.active.BSH_Common_Root_ActiveProgram'; var table = []; if(getState(idTable).val) table = JSON.parse(getState(idTable).val); var obj = {}; on(idStatus, function(dp) { if(dp.oldState.val == 'BSH.Common.EnumType.OperationState.Run') { obj.Start = formatDate(new Date(), 'DD.MM.YY hh:mm'); obj.Programm = dp.common.states[dp.state.val]; } else if (dp.state.val == 'BSH.Common.EnumType.OperationState.Aborting') { obj.Ende = formatDate(new Date(), 'DD.MM.YY hh:mm'); table.push(obj); if(table.length > 10) table.shift(); setState(idTable, JSON.stringify(table), true); } });
-
obj.Programm = dp.common.states[dp.state.val];
Wo kommt jetzt der DP herr? Fehlt da nicht was?
-
@chris76e sagte: Wo kommt jetzt der DP herr?
Aus dem Trigger: Enthält den Zustand "laufendes Programm" nach "Run".
-
Mit der Version wird nichts geschrieben, bekomme auch keine Fehlermeldung.
-
@chris76e sagte: Mit der Version wird nichts geschrieben
Wurde obj außerhalb des Triggers deklariert? Habe ich oben korrigiert.
-
@paul53
ist geändert, aber macht immer noch nichts. -
@chris76e sagte: ist geändert, aber macht immer noch nichts.
@chris76e sagte in Erster Versuch ein JSON zu erzeugen:
Hier der Eintrag aus dem Log
Das ist wirklich der Wert des Trigger-Datenpunktes. Es sind zumindest zwei Log-Ausgaben. Logge mal nur den Trigger-Wert:
on(idStatus, function(dp) { log(dp.state.val);
Alle anderen Logs kommentiere aus.
-
log sieht so aus
23:48:20.661 info javascript.0 (649) script.js.common.JSON.JASONTest: BSH.Common.EnumType.OperationState.Ready 23:48:25.593 info javascript.0 (649) script.js.common.JSON.JASONTest: BSH.Common.EnumType.OperationState.Run 23:49:37.318 info javascript.0 (649) script.js.common.JSON.JASONTest: BSH.Common.EnumType.OperationState.Aborting 23:50:02.051 info javascript.0 (649) script.js.common.JSON.JASONTest: BSH.Common.EnumType.OperationState.Ready
Wird aber nichts geschrieben