NEWS
Erster Versuch ein JSON zu erzeugen
-
@chris76e
Habe mich hier durch die weiteren Logs täuschen lassen, da sie nicht gekennzeichnet sind.
Weshalb das Skript doppelte Einträge erzeugt, erschließt sich mir bisher nicht. Deshalb erzeuge bitte Logs mit Datenpunkt-Kennung: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'; const idAktiv = 'homeconnect.0.011040388898000963.programs.active.BSH_Common_Root_ActiveProgram'; var table = []; if(getState(idTable).val) table = JSON.parse(getState(idTable).val); var obj = {}; on(idAktiv, function(dp) { log('Aktiv: ' + dp.state.val); }); on(idStatus, function(dp) { log('gewählt: ' + getState(idProg).val); log('alter Status: ' + dp.oldState.val); log('neuer Status: ' + dp.state.val); 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); } });
-
Hier der log von 2 Abgebrochenen Durchgänge:
08:58:09.745 info javascript.0 (3489476) script.js.common.JSON.JASONSP: gewählt: Dishcare.Dishwasher.Program.Eco50 08:58:09.745 info javascript.0 (3489476) script.js.common.JSON.JASONSP: alter Status: BSH.Common.EnumType.OperationState.Ready 08:58:09.746 info javascript.0 (3489476) script.js.common.JSON.JASONSP: neuer Status: BSH.Common.EnumType.OperationState.Run 08:58:09.746 info javascript.0 (3489476) script.js.common.JSON.JASONSP: Dishcare.Dishwasher.Program.Eco50 08:58:09.746 info javascript.0 (3489476) script.js.common.JSON.JASONSP: Eco 50° 08:58:09.918 info javascript.0 (3489476) script.js.common.JSON.JASONSP: aktiv: Dishcare.Dishwasher.Program.Eco50 09:00:36.446 info javascript.0 (3489476) script.js.common.JSON.JASONSP: aktiv: null 09:00:36.847 info javascript.0 (3489476) script.js.common.JSON.JASONSP: gewählt: Dishcare.Dishwasher.Program.Eco50 09:00:36.847 info javascript.0 (3489476) script.js.common.JSON.JASONSP: alter Status: BSH.Common.EnumType.OperationState.Run 09:00:36.847 info javascript.0 (3489476) script.js.common.JSON.JASONSP: neuer Status: BSH.Common.EnumType.OperationState.Aborting 09:01:03.132 info javascript.0 (3489476) script.js.common.JSON.JASONSP: gewählt: Dishcare.Dishwasher.Program.Eco50 09:01:03.132 info javascript.0 (3489476) script.js.common.JSON.JASONSP: alter Status: BSH.Common.EnumType.OperationState.Aborting 09:01:03.133 info javascript.0 (3489476) script.js.common.JSON.JASONSP: neuer Status: BSH.Common.EnumType.OperationState.Ready 09:09:34.041 info javascript.0 (3489476) script.js.common.JSON.JASONSP: gewählt: Dishcare.Dishwasher.Program.Quick65 09:09:34.042 info javascript.0 (3489476) script.js.common.JSON.JASONSP: alter Status: BSH.Common.EnumType.OperationState.Ready 09:09:34.042 info javascript.0 (3489476) script.js.common.JSON.JASONSP: neuer Status: BSH.Common.EnumType.OperationState.Run 09:09:34.042 info javascript.0 (3489476) script.js.common.JSON.JASONSP: Dishcare.Dishwasher.Program.Quick65 09:09:34.042 info javascript.0 (3489476) script.js.common.JSON.JASONSP: Speed 65° 09:09:34.107 info javascript.0 (3489476) script.js.common.JSON.JASONSP: aktiv: Dishcare.Dishwasher.Program.Quick65 09:10:56.316 info javascript.0 (3489476) script.js.common.JSON.JASONSP: aktiv: null 09:10:56.480 info javascript.0 (3489476) script.js.common.JSON.JASONSP: gewählt: Dishcare.Dishwasher.Program.Quick65 09:10:56.480 info javascript.0 (3489476) script.js.common.JSON.JASONSP: alter Status: BSH.Common.EnumType.OperationState.Run 09:10:56.480 info javascript.0 (3489476) script.js.common.JSON.JASONSP: neuer Status: BSH.Common.EnumType.OperationState.Aborting 09:11:20.331 info javascript.0 (3489476) script.js.common.JSON.JASONSP: gewählt: Dishcare.Dishwasher.Program.Quick65 09:11:20.332 info javascript.0 (3489476) script.js.common.JSON.JASONSP: alter Status: BSH.Common.EnumType.OperationState.Aborting 09:11:20.332 info javascript.0 (3489476) script.js.common.JSON.JASONSP: neuer Status: BSH.Common.EnumType.OperationState.Ready
So sieht die JSON nach dem 1. aus:
[ { "Start": "06.09.22 23:48", "Programm": "Intensiv 70°", "Ende": "06.09.22 23:49" }, { "Start": "07.09.22 08:58", "Programm": "Eco 50°", "Ende": "07.09.22 09:00" } ]
und so nach dem 2.
[ { "Start": "06.09.22 23:48", "Programm": "Intensiv 70°", "Ende": "06.09.22 23:49" }, { "Start": "07.09.22 09:09", "Programm": "Speed 65°", "Ende": "07.09.22 09:10" }, { "Start": "07.09.22 09:09", "Programm": "Speed 65°", "Ende": "07.09.22 09:10" } ]
-
@chris76e
Aus dem Log erkennt man, dass "ActiveProgram" zu Beginn und zu Ende triggert - am Ende mit Wertnull
. Damit kann man das Programm vereinfachen: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'; const idAktiv = 'homeconnect.0.011040388898000963.programs.active.BSH_Common_Root_ActiveProgram'; var table = []; if(getState(idTable).val) table = JSON.parse(getState(idTable).val); var obj = {}; on(idAktiv, function(dp) { if(dp.state.val) { obj = {}; obj.Start = formatDate(new Date(), 'DD.MM.YY hh:mm'); obj.Programm = dp.common.states[dp.state.val]; } else { obj.Ende = formatDate(new Date(), 'DD.MM.YY hh:mm'); // log(table); table.push(obj); if(table.length > 10) table.shift(); setState(idTable, JSON.stringify(table), true); // log(table); } });
-
Wird immer noch überschrieben....
10:20:10.018 info javascript.0 (3489476) script.js.common.JSON.JASONSP: [{'Start':'06.09.22 23:48','Programm':'Intensiv 70°','Ende':'06.09.22 23:49'},{'Start':'07.09.22 09:09','Programm':'Speed 65°','Ende':'07.09.22 09:10'},{'Start':'07.09.22 09:09','Programm':'Speed 65°','Ende':'07.09.22 09:10'}] 10:20:10.018 info javascript.0 (3489476) script.js.common.JSON.JASONSP: [{'Start':'06.09.22 23:48','Programm':'Intensiv 70°','Ende':'06.09.22 23:49'},{'Start':'07.09.22 09:09','Programm':'Speed 65°','Ende':'07.09.22 09:10'},{'Start':'07.09.22 09:09','Programm':'Speed 65°','Ende':'07.09.22 09:10'},{'Start':'07.09.22 10:16','Programm':'Eco 50°','Ende':'07.09.22 10:20'}] 10:23:40.013 info javascript.0 (3489476) script.js.common.JSON.JASONSP: [{'Start':'06.09.22 23:48','Programm':'Intensiv 70°','Ende':'06.09.22 23:49'},{'Start':'07.09.22 09:09','Programm':'Speed 65°','Ende':'07.09.22 09:10'},{'Start':'07.09.22 09:09','Programm':'Speed 65°','Ende':'07.09.22 09:10'},{'Start':'07.09.22 10:21','Programm':'Eco 50°','Ende':'07.09.22 10:23'}] 10:23:40.013 info javascript.0 (3489476) script.js.common.JSON.JASONSP: [{'Start':'06.09.22 23:48','Programm':'Intensiv 70°','Ende':'06.09.22 23:49'},{'Start':'07.09.22 09:09','Programm':'Speed 65°','Ende':'07.09.22 09:10'},{'Start':'07.09.22 09:09','Programm':'Speed 65°','Ende':'07.09.22 09:10'},{'Start':'07.09.22 10:21','Programm':'Eco 50°','Ende':'07.09.22 10:23'},{'Start':'07.09.22 10:21','Programm':'Eco 50°','Ende':'07.09.22 10:23'}]
-
@chris76e sagte: Wird immer noch überschrieben....
Muss ich noch mal schauen.
-
Okay, kann ich aber erst heute Abend weiter testen, muss gleich zur Arbeit....
-
-
-
Brauche nochmal deine Hilfe. Möchte jetzt noch den Stromverbrauch anzeigen lassen. Habe den Wert bei Start und Ende. Wie kann ich jetzt damit rechnen?
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'; const idAktiv = 'homeconnect.0.011040388898000963.programs.active.BSH_Common_Root_ActiveProgram'; const idVerbrauch = 'sonoff.0.Spuehlmaschine.ENERGY_Total'; var table = []; if(getState(idTable).val) table = JSON.parse(getState(idTable).val); var obj = {}; on(idAktiv, function(dp) { if(dp.state.val) { obj = {}; obj.Start = formatDate(new Date(), 'MM.DD.YY hh:mm'); obj.StartUhr = formatDate(new Date(), 'hh:mm'); obj.Programm = dp.common.states[dp.state.val]; obj.StartVerbrauch = getState(idVerbrauch).val; } else { obj.Ende = formatDate(new Date(), 'MM.DD.YY hh:mm'); obj.EndeUhr = formatDate(new Date(), 'hh:mm'); obj.EndVerbrauch = getState(idVerbrauch).val; log(table); table.push(obj); if(table.length > 10) table.shift(); setState(idTable, JSON.stringify(table), true); log(table); } });
{ "Start": "10.12.22 20:00", "StartUhr": "20:00", "Programm": "Eco 50°", "StartVerbrauch": 212.794, "Ende": "10.12.22 20:08", "EndeUhr": "20:08", "EndVerbrauch": 212.796 }
-
Du möchtest die Differenz Endverbrauch - Startverbrauch?
var obj = {}; var StartVerbrauch = getState(idVerbrauch).val; on(idAktiv, function(dp) { if(dp.state.val) { obj = {}; obj.Start = formatDate(new Date(), 'MM.DD.YY hh:mm'); obj.StartUhr = formatDate(new Date(), 'hh:mm'); obj.Programm = dp.common.states[dp.state.val]; StartVerbrauch = getState(idVerbrauch).val; } else { obj.Ende = formatDate(new Date(), 'MM.DD.YY hh:mm'); obj.EndeUhr = formatDate(new Date(), 'hh:mm'); obj.Verbrauch = getState(idVerbrauch).val - StartVerbrauch; log(table); table.push(obj); if(table.length > 10) table.shift(); setState(idTable, JSON.stringify(table), true); log(table); } });
-
Ja, das klappt auch. Danke
Jetzt habe ich noch versucht die Dauer zu berrechnen, bekomme auch einen Wert in ms. Wie kann ich das in hh:mm:ss umschreiben?
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'; const idAktiv = 'homeconnect.0.011040388898000963.programs.active.BSH_Common_Root_ActiveProgram'; const idVerbrauch = 'sonoff.0.Spuehlmaschine.ENERGY_Total'; var table = []; if(getState(idTable).val) table = JSON.parse(getState(idTable).val); var obj = {}; var StartVerbrauch = getState(idVerbrauch).val; var startDate = new Date(); var endDate = new Date(); on(idAktiv, function(dp) { if(dp.state.val) { obj = {}; obj.Start = formatDate(new Date(), 'MM.DD.YY hh:mm'); obj.StartUhr = formatDate(new Date(), 'hh:mm'); obj.Programm = dp.common.states[dp.state.val]; StartVerbrauch = getState(idVerbrauch).val; startDate = new Date(); } else { obj.Ende = formatDate(new Date(), 'MM.DD.YY hh:mm'); obj.EndeUhr = formatDate(new Date(), 'hh:mm'); obj.Verbrauch = getState(idVerbrauch).val - StartVerbrauch; endDate = new Date(); obj.Dauer = endDate - startDate, 'hh:mm:ss'; log(table); table.push(obj); if(table.length > 10) table.shift(); setState(idTable, JSON.stringify(table), true); log(table); } });