NEWS
Json für SourceAnalytics
-
@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);
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login