NEWS
Json für SourceAnalytics
JavaScript
83
Beiträge
7
Kommentatoren
10.0k
Aufrufe
9
Watching
-
@hm_krause probier es mal mit diesem
let myArrSourcA = []; let myBlacklist = []; let dataPunkt = '0_userdata.0.StromJson.StromJson'; let theSchedule = ' * * * * *'; function getValFixed(id, digits = 2) { if (!existsState(id)) return (0).toFixed(digits); const s = getState(id); if (s.val === null || s.val === undefined) return (0).toFixed(digits); const n = Number(s.val); return isNaN(n) ? (0).toFixed(digits) : n.toFixed(digits); } function getValRaw(id) { if (!existsState(id)) return 0; const s = getState(id); return (s.val === null || s.val === undefined) ? 0 : s.val; } async function addEntry(id4, direction, costPrefix, unitCheck = null) { const idy = id4.split('.'); const rootId = `${idy[0]}.${idy[1]}.${idy[2]}`; if (myBlacklist.includes(idy[2])) return; // State-Objekt prüfen if (!existsObject(id4)) return; const stateObj = getObject(id4); if (!stateObj.common || (unitCheck && stateObj.common.unit !== unitCheck)) { return; } // Root-Objekt prüfen if (!await existsObjectAsync(rootId)) { log(`Root-Objekt fehlt: ${rootId}`, 'warn'); return; } const rootObj = getObject(rootId); if (!rootObj.common) { log(`Root-Objekt ohne common: ${rootId}`, 'warn'); return; } const theName = rootObj.common.name || 'no Name'; const replaceBase = `${direction}.01_currentDay`; myArrSourcA.push({ "Name": theName, "Gestern": getValFixed(id4.replace("01_currentDay", "01_previousDay")), "Heute": getValRaw(id4), "Monat": getValFixed(id4.replace("01_currentDay", "03_currentMonth")), "Jahr": getValFixed(id4.replace("01_currentDay", "05_currentYear")), "Gestern Kosten": getValFixed(id4.replace(replaceBase, `${costPrefix}.01_previousDay`)), "Heute Kosten": getValFixed(id4.replace(replaceBase, `${costPrefix}.01_currentDay`)), "Monats Kosten": getValFixed(id4.replace(replaceBase, `${costPrefix}.03_currentMonth`)), "Jahres Kosten": getValFixed(id4.replace(replaceBase, `${costPrefix}.05_currentYear`)), "Richtung": `<span style='color:${direction === "delivered" ? "green" : "red"}'>${direction}</span>` }); } async function calcJson() { myArrSourcA = []; await $('sourceanalytix.0.*.currentYear.delivered.01_currentDay').eachAsync(async (id4) => { await addEntry(id4, 'delivered', 'earnings'); }); await $('sourceanalytix.0.*.currentYear.consumed.01_currentDay').eachAsync(async (id4) => { await addEntry(id4, 'consumed', 'costs', 'kWh'); }); return myArrSourcA; } async function writeDatapoint() { if (!(await existsStateAsync(dataPunkt))) { await createStateAsync(dataPunkt, "", { type: "string", name: "JSON SourcAnalytics", role: "value", read: true, write: true }); } setState(dataPunkt, JSON.stringify(await calcJson()), true); } writeDatapoint(); schedule(theSchedule, writeDatapoint);@crunchip
...bringt noch:javascript.0 18:14:17.814 error Error: TypeError: $(...).eachAsync is not a function javascript.0 18:14:17.814 error at calcJson (script.js.Energie.Skript_1:65:71) javascript.0 18:14:17.814 error at writeDatapoint (script.js.Energie.Skript_1:87:46) -
@crunchip
...bringt noch:javascript.0 18:14:17.814 error Error: TypeError: $(...).eachAsync is not a function javascript.0 18:14:17.814 error at calcJson (script.js.Energie.Skript_1:65:71) javascript.0 18:14:17.814 error at writeDatapoint (script.js.Energie.Skript_1:87:46)@hm_krause sagte in Json für SourceAnalytics:
bringt noch:
let myArrSourcA = []; let myBlacklist = []; let dataPunkt = '0_userdata.0.StromJson.StromJson'; let theSchedule = ' * * * * *'; function getValFixed(id, digits = 2) { if (!existsState(id)) return '0.00'; const s = getState(id); if (s.val === null || s.val === undefined) return '0.00'; const n = Number(s.val); return isNaN(n) ? '0.00' : n.toFixed(digits); } function getValRaw(id) { if (!existsState(id)) return 0; const s = getState(id); return (s.val === null || s.val === undefined) ? 0 : Number(s.val); } function addEntry(id4, direction, costPrefix, unitCheck = null) { const idy = id4.split('.'); const rootId = `${idy[0]}.${idy[1]}.${idy[2]}`; if (myBlacklist.includes(idy[2])) return; // Alles sync, keine async mehr nötig if (!existsObject(id4)) return; const stateObj = getObject(id4); if (!stateObj?.common || (unitCheck && stateObj.common.unit !== unitCheck)) return; if (!existsObject(rootId)) { log(`Root fehlt: ${rootId}`, 'warn'); return; } const rootObj = getObject(rootId); if (!rootObj?.common) { log(`Root ohne common: ${rootId}`, 'warn'); return; } const theName = rootObj.common.name || 'no Name'; const replaceBase = `${direction}.01_currentDay`; myArrSourcA.push({ "Name": theName, "Gestern": getValFixed(id4.replace("01_currentDay", "01_previousDay")), "Heute": getValRaw(id4), "Monat": getValFixed(id4.replace("01_currentDay", "03_currentMonth")), "Jahr": getValFixed(id4.replace("01_currentDay", "05_currentYear")), "Gestern Kosten": getValFixed(id4.replace(replaceBase, `${costPrefix}.01_previousDay`)), "Heute Kosten": getValFixed(id4.replace(replaceBase, `${costPrefix}.01_currentDay`)), "Monats Kosten": getValFixed(id4.replace(replaceBase, `${costPrefix}.03_currentMonth`)), "Jahres Kosten": getValFixed(id4.replace(replaceBase, `${costPrefix}.05_currentYear`)), "Richtung": `<span style='color:${direction === "delivered" ? "green" : "red"}'>${direction}</span>` }); } async function calcJson() { myArrSourcA = []; // Normale .each() - sync und blitzschnell! $('sourceanalytix.0.*.currentYear.delivered.01_currentDay').each(function (id4) { addEntry(id4, 'delivered', 'earnings'); }); $('sourceanalytix.0.*.currentYear.consumed.01_currentDay').each(function (id4) { addEntry(id4, 'consumed', 'costs', 'kWh'); }); return myArrSourcA; } async function writeDatapoint() { if (!(await existsStateAsync(dataPunkt))) { await createStateAsync(dataPunkt, "", { type: "string", name: "JSON SourcAnalytics", role: "value", read: true, write: true }); } setState(dataPunkt, JSON.stringify(await calcJson()), true); } writeDatapoint(); schedule(theSchedule, writeDatapoint); -
@hm_krause sagte in Json für SourceAnalytics:
bringt noch:
let myArrSourcA = []; let myBlacklist = []; let dataPunkt = '0_userdata.0.StromJson.StromJson'; let theSchedule = ' * * * * *'; function getValFixed(id, digits = 2) { if (!existsState(id)) return '0.00'; const s = getState(id); if (s.val === null || s.val === undefined) return '0.00'; const n = Number(s.val); return isNaN(n) ? '0.00' : n.toFixed(digits); } function getValRaw(id) { if (!existsState(id)) return 0; const s = getState(id); return (s.val === null || s.val === undefined) ? 0 : Number(s.val); } function addEntry(id4, direction, costPrefix, unitCheck = null) { const idy = id4.split('.'); const rootId = `${idy[0]}.${idy[1]}.${idy[2]}`; if (myBlacklist.includes(idy[2])) return; // Alles sync, keine async mehr nötig if (!existsObject(id4)) return; const stateObj = getObject(id4); if (!stateObj?.common || (unitCheck && stateObj.common.unit !== unitCheck)) return; if (!existsObject(rootId)) { log(`Root fehlt: ${rootId}`, 'warn'); return; } const rootObj = getObject(rootId); if (!rootObj?.common) { log(`Root ohne common: ${rootId}`, 'warn'); return; } const theName = rootObj.common.name || 'no Name'; const replaceBase = `${direction}.01_currentDay`; myArrSourcA.push({ "Name": theName, "Gestern": getValFixed(id4.replace("01_currentDay", "01_previousDay")), "Heute": getValRaw(id4), "Monat": getValFixed(id4.replace("01_currentDay", "03_currentMonth")), "Jahr": getValFixed(id4.replace("01_currentDay", "05_currentYear")), "Gestern Kosten": getValFixed(id4.replace(replaceBase, `${costPrefix}.01_previousDay`)), "Heute Kosten": getValFixed(id4.replace(replaceBase, `${costPrefix}.01_currentDay`)), "Monats Kosten": getValFixed(id4.replace(replaceBase, `${costPrefix}.03_currentMonth`)), "Jahres Kosten": getValFixed(id4.replace(replaceBase, `${costPrefix}.05_currentYear`)), "Richtung": `<span style='color:${direction === "delivered" ? "green" : "red"}'>${direction}</span>` }); } async function calcJson() { myArrSourcA = []; // Normale .each() - sync und blitzschnell! $('sourceanalytix.0.*.currentYear.delivered.01_currentDay').each(function (id4) { addEntry(id4, 'delivered', 'earnings'); }); $('sourceanalytix.0.*.currentYear.consumed.01_currentDay').each(function (id4) { addEntry(id4, 'consumed', 'costs', 'kWh'); }); return myArrSourcA; } async function writeDatapoint() { if (!(await existsStateAsync(dataPunkt))) { await createStateAsync(dataPunkt, "", { type: "string", name: "JSON SourcAnalytics", role: "value", read: true, write: true }); } setState(dataPunkt, JSON.stringify(await calcJson()), true); } writeDatapoint(); schedule(theSchedule, writeDatapoint);