NEWS
Energiemessung via Json Tabelle
-
Hallo zusammen,
ich komme aufgrund von "Unwissenheit" nicht weiter.
Ich wollte Stomverbrauchs-Daten aus Sourceanalytix über VIS als Tabelle anzeigen lassen.
Dies habe ich bisher über HTML gemacht, was gut funktioniert hat. Jedoch ist das Problem, dass die Verlinkungen begränzt sind und ich den Verbrauch des Jahres und des Vorjahres nicht mehr anzeigen kann.Daher dachte ich mir, es über eine JSON Datei in Tabellenform anzeigen zu lassen.
Hier im Forum wurde ich auch fündig. Leider ist hier nur ein Beispiel für "eine ID".
Mein Ziel:Monat | Verbrauch | VerbrauchimLetztenJahr
01 | xx kW | xx kW
02 | xx kW | xx kW
03 | xx kW | xx kW
...
12 | xx kW | xx kWDiesen Code habe ich aus dem Forum benutzt:
var d = new Date(); //var n = d.getFullYear(); const idTable = '0_userdata.0.Verbrauch.AlleVerbauchertotal.Computer'; // Vorschlag ID JSON-Tabelle const monate = ['01','02','03','04','05','06','07','08','07','10','11','12']; var select = $('sourceanalytix.0.0_userdata__0__Energiezaehler__Computer.2023.delivered.months.*'); // Geräte-ID ersetzen ersetzen var ids = []; var table = []; select.each(function(id, i) { ids[i] = id; table[i] = {}; let idx = parseInt(id.substring(id.lastIndexOf('.') + 1)) - 1; let monat = monate[idx]; table[i].Name = monat; // z.B. "Februar 2020" table[i].Wert = getState(id).val; }); if(existsState(idTable)) setState(idTable, JSON.stringify(table), true); else createState(idTable, JSON.stringify(table), {type: 'string'}); on(ids, function(dp) { let idx = ids.indexOf(dp.id); table[idx].Wert = dp.state.val; setState(idTable, JSON.stringify(table), true); });Für das aktuelle Jahr funtkioniert es auch. Kann mir jemand Hilfestellung geben, was ich ändern bzw. hinzufügen muss?
Danke für's lesen :-)
-
Hallo zusammen,
ich komme aufgrund von "Unwissenheit" nicht weiter.
Ich wollte Stomverbrauchs-Daten aus Sourceanalytix über VIS als Tabelle anzeigen lassen.
Dies habe ich bisher über HTML gemacht, was gut funktioniert hat. Jedoch ist das Problem, dass die Verlinkungen begränzt sind und ich den Verbrauch des Jahres und des Vorjahres nicht mehr anzeigen kann.Daher dachte ich mir, es über eine JSON Datei in Tabellenform anzeigen zu lassen.
Hier im Forum wurde ich auch fündig. Leider ist hier nur ein Beispiel für "eine ID".
Mein Ziel:Monat | Verbrauch | VerbrauchimLetztenJahr
01 | xx kW | xx kW
02 | xx kW | xx kW
03 | xx kW | xx kW
...
12 | xx kW | xx kWDiesen Code habe ich aus dem Forum benutzt:
var d = new Date(); //var n = d.getFullYear(); const idTable = '0_userdata.0.Verbrauch.AlleVerbauchertotal.Computer'; // Vorschlag ID JSON-Tabelle const monate = ['01','02','03','04','05','06','07','08','07','10','11','12']; var select = $('sourceanalytix.0.0_userdata__0__Energiezaehler__Computer.2023.delivered.months.*'); // Geräte-ID ersetzen ersetzen var ids = []; var table = []; select.each(function(id, i) { ids[i] = id; table[i] = {}; let idx = parseInt(id.substring(id.lastIndexOf('.') + 1)) - 1; let monat = monate[idx]; table[i].Name = monat; // z.B. "Februar 2020" table[i].Wert = getState(id).val; }); if(existsState(idTable)) setState(idTable, JSON.stringify(table), true); else createState(idTable, JSON.stringify(table), {type: 'string'}); on(ids, function(dp) { let idx = ids.indexOf(dp.id); table[idx].Wert = dp.state.val; setState(idTable, JSON.stringify(table), true); });Für das aktuelle Jahr funtkioniert es auch. Kann mir jemand Hilfestellung geben, was ich ändern bzw. hinzufügen muss?
Danke für's lesen :-)
@planetkeane sagte in Energiemessung via Json Tabelle:
Ich wollte Stomverbrauchs-Daten aus Sourceanalytix über VIS als Tabelle anzeigen lassen.
zwar nicht ganz was du suchst aber schau mal https://forum.iobroker.net/topic/59254/json-für-sourceanalytics
-
Danke, das hat mir weitergeholfen. Hab es ein wenig umgeschrieben für meine Voraussetzung.
Ist ein wenig schwierig gewesen, da ich bisher nie mit JavaScript geschrieben habe, funktioniert aber.let myArrSourcA=[]; let myBlacklist=[]; /* ----------------------------------------------------------------------------------------- * Hier den Pfad eintragen */ // >>>>>>> Pfad der SourceID eintragen const Pfad = 'sourceanalytix.0.0_userdata__0__Energiezaehler__Computer'; // >>>>>>> Pfad der zu speichernden JSON Datei eintragen const save = '0_userdata.0.StromJson.Computer'; /* * Ende ----------------------------------------------------------------------------------------- */ // Jahresvariable var aktuellesDatum = new Date(), jahr = aktuellesDatum.getFullYear(), vorJahr = jahr-1; // Pfad Monat const TextJahr = Pfad + '.' + jahr + '.delivered.months.*'; // Pfad Gesamt const TextGesamtJetzt = Pfad + '.' + jahr + '.deliveredCumulative'; const TextGesamtVorJahr = Pfad + '.' + vorJahr + '.deliveredCumulative'; const TextKostenJetzt = Pfad + '.' + jahr + '.earningsCumulative'; const TextKostenVorJahr = Pfad + '.' + vorJahr + '.earningsCumulative'; // Beispiel Blacklist: ['sourceanalytix.0.sonoff__0__SonoffPow3__ENERGY_Total','sourceanalytix.0.sonoff__3__Nous1__ENERGY_Total'] async function calcJson(){ myArrSourcA=[]; var a = 0; $(TextJahr).each( function( id4, i){ let idy = id4.split('.'); if (getObject(id4).common.unit=="kWh" && !myBlacklist.toString().includes(idy[2])){ let helper=idy[2].split('__'); let helper2=helper[helper.length-2]; let theName=getObject(idy[0]+'.'+idy[1]+'.'+idy[2]).common.name //idy[2].split('__'); if(theName == undefined) theName="no Name" ; } if(a==0){ myArrSourcA.push({ Computer: 'Gesamt', Jetzt: getState(id4.replace(id4 ,TextGesamtJetzt)).val.toFixed(2), Letztes: getState(id4.replace(id4, TextGesamtVorJahr)).val.toFixed(2), Kosten: getState(id4.replace(id4,TextKostenJetzt)).val.toFixed(2) + ' | ' + getState(id4.replace(id4, TextKostenVorJahr)).val.toFixed(2), }) a++; } myArrSourcA.push({ Computer: a++, DiesesJahr: getState(id4).val.toFixed(2), // @ts-ignore LetztesJahr: getState(id4.replace(jahr,vorJahr)).val.toFixed(2), Kosten: getState(id4.replace(".delivered.",".earnings.")).val.toFixed(2) + ' | ' + getState(id4.replace(jahr + ".delivered.", vorJahr + ".earnings.")).val.toFixed(2), }) }); //log(JSON.stringify(myArrSourcA)) return myArrSourcA; } async function writeDatapoint(){ // >>>>>>>>>>>> Pfad <<<<<<<<<<<<< if (!(await existsStateAsync(save))) { await createStateAsync(save, "",{type: "string", name: "JSON SourcAnalytics", role: "value", read: true, write: true, } ); } // log(JSON.stringify(await calcJson())) setState(save,JSON.stringify(await calcJson())); } writeDatapoint(); schedule(' */10 * * * *', function () { writeDatapoint(); });
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden