NEWS
Wie lege ich den datenpunkt an?
-
Hallo Zusammen, ich probiere gerade ein über KI erstelltes Script für meine Einspeisung. Ich möchte gerne das Script so haben das es mir täglich die KWh udn die € ausgibt und es soll mir dann jeden Tag auch die addierte Summe (kumulativ) von den tagen zuvor für KWh und € ausgeben. Nun habe ich mal anhand der Datenpunkte ein Sript erstellen lassen...leider weiss ich aber nicht wie ich den Datenpunkt "'Einspeisung Jahr gesamt'" und "'Einspeisung Jahr gesamt (€)'" anlegen muss ->
// ── Jahres-Datenpunkte anlegen (falls nicht vorhanden) ───────── createState(DP_JAHR_KWH, { name: 'Einspeisung Jahr gesamt', type: 'number', role: 'value.energy', unit: 'kWh', read: true, write: true, def: 0 }); createState(DP_JAHR_EURO, { name: 'Einspeisung Jahr gesamt (€)', type: 'number', role: 'value.money', unit: '€', read: true, write: true, def: 0 });Hier mal das ganze Script bis dahin..
Kann hier bitte mal ein Scriptler drüberschauen und mir das erklären bitte.
Über ne Info herzlichen Dank.// ═══════════════════════════════════════════════════════════════ // Einspeisung – Tageswerte + robuste Jahressumme // ═══════════════════════════════════════════════════════════════ // ── Deine vorhandenen Datenpunkte ────────────────────────────── const DP_HEUTE_KWH = '0_userdata.0.Einspeisung.heute_kWh'; const DP_HEUTE_EURO = '0_userdata.0.Einspeisung.heute_euro'; // ── Zielstruktur ─────────────────────────────────────────────── const DP_PREFIX = '0_userdata.0.Einspeisung.Tage.'; const DP_JAHR_KWH = '0_userdata.0.Einspeisung.jahr_kWh'; const DP_JAHR_EURO = '0_userdata.0.Einspeisung.jahr_euro'; // ── Jahres-Datenpunkte anlegen (falls nicht vorhanden) ───────── createState(DP_JAHR_KWH, { name: 'Einspeisung Jahr gesamt', type: 'number', role: 'value.energy', unit: 'kWh', read: true, write: true, def: 0 }); createState(DP_JAHR_EURO, { name: 'Einspeisung Jahr gesamt (€)', type: 'number', role: 'value.money', unit: '€', read: true, write: true, def: 0 }); // ═══════════════════════════════════════════════════════════════ // Datum erzeugen → 2026-04-09 // ═══════════════════════════════════════════════════════════════ function getDatum() { const d = new Date(); return d.getFullYear() + '-' + String(d.getMonth() + 1).padStart(2, '0') + '-' + String(d.getDate()).padStart(2, '0'); } // ═══════════════════════════════════════════════════════════════ // Tageswerte speichern // ═══════════════════════════════════════════════════════════════ function speichereTag() { const datum = getDatum(); const kwh = parseFloat(getState(DP_HEUTE_KWH).val) || 0; const euro = parseFloat(getState(DP_HEUTE_EURO).val) || 0; const dpKwh = DP_PREFIX + datum + '_kWh'; const dpEuro = DP_PREFIX + datum + '_euro'; createState(dpKwh, { name: 'Einspeisung ' + datum, type: 'number', role: 'value.energy', unit: 'kWh', read: true, write: false }, () => setState(dpKwh, kwh, true)); createState(dpEuro, { name: 'Vergütung ' + datum, type: 'number', role: 'value.money', unit: '€', read: true, write: false }, () => setState(dpEuro, euro, true)); log(`📅 ${datum}: ${kwh} kWh | ${euro} € gespeichert`, 'info'); jahressummeNeuBerechnen(); } // ═══════════════════════════════════════════════════════════════ // ROBUSTE Jahressumme (aus allen Tagen neu berechnet) // ═══════════════════════════════════════════════════════════════ function jahressummeNeuBerechnen() { const jahr = new Date().getFullYear(); const states = $('state[id=' + DP_PREFIX + '*]'); let sumKwh = 0; let sumEuro = 0; states.each(function (id) { if (!id.includes(jahr)) return; const val = parseFloat(getState(id).val) || 0; if (id.endsWith('_kWh')) { sumKwh += val; } else if (id.endsWith('_euro')) { sumEuro += val; } }); sumKwh = Math.round(sumKwh * 100) / 100; sumEuro = Math.round(sumEuro * 100) / 100; setState(DP_JAHR_KWH, sumKwh, true); setState(DP_JAHR_EURO, sumEuro, true); log(`📊 Jahr ${jahr}: ${sumKwh} kWh | ${sumEuro} €`, 'info'); } // ═══════════════════════════════════════════════════════════════ // Täglich ausführen (23:55 Uhr) // ═══════════════════════════════════════════════════════════════ schedule('55 23 * * *', speichereTag); // Beim Start einmal berechnen (wichtig!) jahressummeNeuBerechnen(); log('✅ Einspeisungs-Script aktiv', 'info');@Kusselin ist nicht ganz deine Frage, aber wenn du etwas grafisches möchtest (grafana und influxdb) kann ich dir folgendes von @haus-automatisierung empfehlen:
https://haus-automatisierung.com/software/influxdb/2023/05/11/influxdb2-pv-dashboard.htmlZu deiner Frage...
In ioBroker wird die Funktion createState in der JavaScript-Script-Engine (ab js-controller 6/7) als veraltet (deprecated) betrachtet und durch setObjectNotExists oder extendObject ersetzt.Beispiel:
// Beispiel für 0_userdata.0 setObjectNotExists('0_userdata.0.Test.Variable', { common: { name: 'Test Variable', type: 'boolean', role: 'switch' }, type: 'state' });Bei deinen Datenpunkten sollte role:'value' die richtige Option sein.
-
@Kusselin ist nicht ganz deine Frage, aber wenn du etwas grafisches möchtest (grafana und influxdb) kann ich dir folgendes von @haus-automatisierung empfehlen:
https://haus-automatisierung.com/software/influxdb/2023/05/11/influxdb2-pv-dashboard.htmlZu deiner Frage...
In ioBroker wird die Funktion createState in der JavaScript-Script-Engine (ab js-controller 6/7) als veraltet (deprecated) betrachtet und durch setObjectNotExists oder extendObject ersetzt.Beispiel:
// Beispiel für 0_userdata.0 setObjectNotExists('0_userdata.0.Test.Variable', { common: { name: 'Test Variable', type: 'boolean', role: 'switch' }, type: 'state' });Bei deinen Datenpunkten sollte role:'value' die richtige Option sein.
@Chrunchy [sagte]: Funktion createState in der JavaScript-Script-Engine (ab js-controller 6/7) als veraltet (deprecated) betrachtet und durch setObjectNotExists oder extendObject ersetzt.
Wie kommst du darauf?
@Kusselin [sagte]: Datenpunkt "'Einspeisung Jahr gesamt'" und "'Einspeisung Jahr gesamt (€)'" anlegen muss
Ändere common.write in false.
Für die Ermittlung von Periodenwerten inkl. Kosten gibt es den Adapter Sourceanalytix.
-
Ja aber muss ich die datenpunkte neu anlegen erst also diese hier?
Einspeisung Jahr gesamt
Einspeisung Jahr gesamt (€)das raff ich nicht weil das Script mir ja sagt hier ->
// ── Jahres-Datenpunkte anlegen (falls nicht vorhanden) ─────────Das verstehe ich nicht....
-
Ja aber muss ich die datenpunkte neu anlegen erst also diese hier?
Einspeisung Jahr gesamt
Einspeisung Jahr gesamt (€)das raff ich nicht weil das Script mir ja sagt hier ->
// ── Jahres-Datenpunkte anlegen (falls nicht vorhanden) ─────────Das verstehe ich nicht....
-
sorry paul aber das raff ich nicht..tue mir immer schwer und muss immer noch nach all den Jahren schwierig nachfragen hier...
-
sorry paul aber das raff ich nicht..tue mir immer schwer und muss immer noch nach all den Jahren schwierig nachfragen hier...
-
@Kusselin [sagte]: aber das raff ich
Was raffst du nicht?
Der Kommentar in Zeile 14 beschreibt lediglich die Wirkung der nachfolgenden zwei createState().@Kusselin [sagte]: aber das raff ich
Was raffst du nicht?
Der Kommentar in Zeile 14 beschreibt lediglich die Wirkung der nachfolgenden zwei createState().O.K. ich dachte immer wenn das da steht muss ich es auch anlegen....
@Kusselin erstell dir in 0_userdata einen DP, den kannste dann verwenden...

Wenn ich mir einen datenpunkt da anlege...wie soll der heissen???? udn wie verwende ich den dann?
-
Nee isses nicht..sonst würd ich doch nicht fragen....
O.K. nochmal für mich...im Script ist das hier hinterlegt:// ── Jahres-Datenpunkte anlegen (falls nicht vorhanden) ───────── createState(DP_JAHR_KWH, { name: 'Einspeisung Jahr gesamt', type: 'number', role: 'value.energy', unit: 'kWh', read: true, write: true, def: 0 }); createState(DP_JAHR_EURO, { name: 'Einspeisung Jahr gesamt (€)', type: 'number', role: 'value.money', unit: '€', read: true, write: true, def: 0 });das heisst doch aber das das Script den Datenpunkt schon automatisch anlegt...da muss ich doch nichts mehr in 0_userdata anlegen...oder?
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