NEWS
Energiefluss.erweitert Adapter und datenpunkt in €
-
sorry...du meinst das hier:
{ "_id": "javascript.0.Einspeisung.heute_euro", "common": { "unit": "€", "type": "number", "name": "Einspeisevergütung heute", "role": "state" }, "native": {}, "type": "state", "from": "system.adapter.javascript.0", "user": "system.user.admin", "ts": 1774461719596, "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } } -
sorry...du meinst das hier:
{ "_id": "javascript.0.Einspeisung.heute_euro", "common": { "unit": "€", "type": "number", "name": "Einspeisevergütung heute", "role": "state" }, "native": {}, "type": "state", "from": "system.adapter.javascript.0", "user": "system.user.admin", "ts": 1774461719596, "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } }ja, das meine ich
@Kusselin sagte in Energiefluss.erweitert Adapter und datenpunkt in €:
"type": "number",dann geh mal in dem Element in der Konfig auf den zweiten Reiter und stell die Anzahl Nachkommastellen auf 2
Wenn das nicht hilft, wovon ich ausgehe, ist der Wert nicht vom Typ Zahl, auch wenn der DP vom Typ Zahl ist.Wie wird der Wert geschrieben?
-
sorry, ich weiss nicht was du damit meinst mit (in der Konfig auf den zweiten Reiter)?
Meinst du hier?

@Kusselin sagte in Energiefluss.erweitert Adapter und datenpunkt in €:
ich weiss nicht was du damit meinst mit (in der Konfig auf den zweiten Reiter
in Energiefluss-erweitert das dazugehörige Objekt/Element anwählen
In der Konfigurationsleiste dazu den zweiten Reiter öffnenDas dann zeigen!
-
@Kusselin sagte in Energiefluss.erweitert Adapter und datenpunkt in €:
Bitteschön
wie erwartet hilft das nichts.
Dann scheint dersagte in Energiefluss.erweitert Adapter und datenpunkt in €:
nicht vom Typ Zahl, auch wenn der DP vom Typ Zahl ist.
zu sein!
Dazu bat ich um Info;
sagte in Energiefluss.erweitert Adapter und datenpunkt in €:
Wie wird der Wert geschrieben?
sprich: Skript zeigen!
-
// ============================================================ // Shelly Pro 3EM – Tägliche Einspeisung & Vergütung // ioBroker JavaScript Adapter + Source Analytics Adapter // ============================================================ // // Voraussetzungen: // - JavaScript Adapter // - ioBroker.source-analytics Adapter (oder history/influxdb) // // Objekt-Pfade – ggf. an eigene Instanz anpassen: // z.B. shelly.0.SHEM-3EM#<MAC>#1 → hier: shelly.0.shellyem3pro-... // // ANPASSEN: Den Instanz-Präfix auf deine Installation setzen // ============================================================ const SHELLY_PREFIX = 'shelly.0.shellypro3em-<DEINE-MAC-ADRESSE>'; // Beispiel: 'shelly.0.shellypro3em-aabbccddeeff' const OBJ_RETURN_TOTAL = `${SHELLY_PREFIX}.EMData0.TotalActiveReturnEnergy`; const OBJ_RETURN_A = `${SHELLY_PREFIX}.EMData0.TotalActiveReturnEnergyA`; const OBJ_RETURN_B = `${SHELLY_PREFIX}.EMData0.TotalActiveReturnEnergyB`; const OBJ_RETURN_C = `${SHELLY_PREFIX}.EMData0.TotalActiveReturnEnergyC`; // Vergütung je kWh in € const VERGUETUNG_PRO_KWH = 0.068; // Ziel-Datenpunkt für das Ergebnis (wird automatisch erzeugt) const DP_HEUTE_KWH = 'javascript.0.Einspeisung.heute_kWh'; const DP_HEUTE_EURO = 'javascript.0.Einspeisung.heute_euro'; const DP_HEUTE_KWH_A = 'javascript.0.Einspeisung.heute_kWh_PhaseA'; const DP_HEUTE_KWH_B = 'javascript.0.Einspeisung.heute_kWh_PhaseB'; const DP_HEUTE_KWH_C = 'javascript.0.Einspeisung.heute_kWh_PhaseC'; const DP_TAGESBEGINN_WH = 'javascript.0.Einspeisung.tagesbeginn_Wh'; const DP_TAGESBEGINN_A = 'javascript.0.Einspeisung.tagesbeginn_Wh_PhaseA'; const DP_TAGESBEGINN_B = 'javascript.0.Einspeisung.tagesbeginn_Wh_PhaseB'; const DP_TAGESBEGINN_C = 'javascript.0.Einspeisung.tagesbeginn_Wh_PhaseC'; // ─── Datenpunkte anlegen ──────────────────────────────────── createState(DP_HEUTE_KWH, 0, { unit: 'kWh', type: 'number', name: 'Einspeisung heute gesamt' }); createState(DP_HEUTE_EURO, 0, { unit: '€', type: 'number', name: 'Einspeisevergütung heute' }); createState(DP_HEUTE_KWH_A, 0, { unit: 'kWh', type: 'number', name: 'Einspeisung heute Phase A' }); createState(DP_HEUTE_KWH_B, 0, { unit: 'kWh', type: 'number', name: 'Einspeisung heute Phase B' }); createState(DP_HEUTE_KWH_C, 0, { unit: 'kWh', type: 'number', name: 'Einspeisung heute Phase C' }); createState(DP_TAGESBEGINN_WH, 0, { unit: 'Wh', type: 'number', name: 'Zählerstand Tagesbeginn gesamt' }); createState(DP_TAGESBEGINN_A, 0, { unit: 'Wh', type: 'number', name: 'Zählerstand Tagesbeginn Phase A' }); createState(DP_TAGESBEGINN_B, 0, { unit: 'Wh', type: 'number', name: 'Zählerstand Tagesbeginn Phase B' }); createState(DP_TAGESBEGINN_C, 0, { unit: 'Wh', type: 'number', name: 'Zählerstand Tagesbeginn Phase C' }); // ─── Hilfsfunktion: Tagesdifferenz berechnen ──────────────── function berechneEinspeisung() { const aktuellerWert = getState(OBJ_RETURN_TOTAL).val || 0; const aktuellerWert_A = getState(OBJ_RETURN_A).val || 0; const aktuellerWert_B = getState(OBJ_RETURN_B).val || 0; const aktuellerWert_C = getState(OBJ_RETURN_C).val || 0; const tagesbeginn = getState(DP_TAGESBEGINN_WH).val || aktuellerWert; const tagesbeginn_A = getState(DP_TAGESBEGINN_A).val || aktuellerWert_A; const tagesbeginn_B = getState(DP_TAGESBEGINN_B).val || aktuellerWert_B; const tagesbeginn_C = getState(DP_TAGESBEGINN_C).val || aktuellerWert_C; // Differenz in Wh → kWh (auf 3 Dezimalstellen) const diff_kWh = Math.round((aktuellerWert - tagesbeginn) / 10) / 100; const diff_kWh_A = Math.round((aktuellerWert_A - tagesbeginn_A) / 10) / 100; const diff_kWh_B = Math.round((aktuellerWert_B - tagesbeginn_B) / 10) / 100; const diff_kWh_C = Math.round((aktuellerWert_C - tagesbeginn_C) / 10) / 100; const verguetung = Math.round(diff_kWh * VERGUETUNG_PRO_KWH * 10000) / 10000; setState(DP_HEUTE_KWH, diff_kWh < 0 ? 0 : diff_kWh, true); setState(DP_HEUTE_KWH_A, diff_kWh_A < 0 ? 0 : diff_kWh_A, true); setState(DP_HEUTE_KWH_B, diff_kWh_B < 0 ? 0 : diff_kWh_B, true); setState(DP_HEUTE_KWH_C, diff_kWh_C < 0 ? 0 : diff_kWh_C, true); setState(DP_HEUTE_EURO, verguetung < 0 ? 0 : verguetung, true); log(`[Einspeisung] Heute: ${diff_kWh} kWh | A: ${diff_kWh_A} | B: ${diff_kWh_B} | C: ${diff_kWh_C} | Vergütung: ${verguetung.toFixed(4)} €`); } // ─── Tagesbeginn um Mitternacht speichern ─────────────────── schedule('0 0 * * *', function () { const val = getState(OBJ_RETURN_TOTAL).val || 0; const val_A = getState(OBJ_RETURN_A).val || 0; const val_B = getState(OBJ_RETURN_B).val || 0; const val_C = getState(OBJ_RETURN_C).val || 0; setState(DP_TAGESBEGINN_WH, val, true); setState(DP_TAGESBEGINN_A, val_A, true); setState(DP_TAGESBEGINN_B, val_B, true); setState(DP_TAGESBEGINN_C, val_C, true); log(`[Einspeisung] Tagesbeginn gesetzt: ${val} Wh (A:${val_A} B:${val_B} C:${val_C})`); }); // ─── Bei jeder Änderung des Shelly-Zählers neu berechnen ─── on({ id: OBJ_RETURN_TOTAL, change: 'any' }, berechneEinspeisung); // ─── Beim Skriptstart einmalig berechnen ─────────────────── // Tagesbeginn-Initialisierung: Nur setzen wenn noch 0 setTimeout(function () { if (getState(DP_TAGESBEGINN_WH).val === 0) { const val = getState(OBJ_RETURN_TOTAL).val || 0; const val_A = getState(OBJ_RETURN_A).val || 0; const val_B = getState(OBJ_RETURN_B).val || 0; const val_C = getState(OBJ_RETURN_C).val || 0; setState(DP_TAGESBEGINN_WH, val, true); setState(DP_TAGESBEGINN_A, val_A, true); setState(DP_TAGESBEGINN_B, val_B, true); setState(DP_TAGESBEGINN_C, val_C, true); log('[Einspeisung] Erstinitialisierung Tagesbeginn gesetzt.'); } berechneEinspeisung(); }, 2000); // ─── SOURCE ANALYTICS Adapter Integration ────────────────── // Der source-analytics Adapter liest automatisch aus dem Datenpunkt // wenn dieser in der Instanzkonfiguration eingetragen ist. // // Alternativ: history-Adapter aktivieren auf: // javascript.0.Einspeisung.heute_kWh // javascript.0.Einspeisung.heute_euro // // Für Tageshistorie via Source Analytics: // - Datenpunkt: javascript.0.Einspeisung.heute_kWh // - Aggregation: last (letzter Wert des Tages) // - Anzeige: Balkendiagramm (Tagesansicht) // // ────────────────────────────────────────────────────────── // ERGEBNIS-DATENPUNKTE (für VIS / Jarvis / Material UI): // // javascript.0.Einspeisung.heute_kWh → Einspeisung heute in kWh // javascript.0.Einspeisung.heute_euro → Vergütung heute in € // javascript.0.Einspeisung.heute_kWh_PhaseA/B/C → je Phase // ────────────────────────────────────────────────────────── -
// ============================================================ // Shelly Pro 3EM – Tägliche Einspeisung & Vergütung // ioBroker JavaScript Adapter + Source Analytics Adapter // ============================================================ // // Voraussetzungen: // - JavaScript Adapter // - ioBroker.source-analytics Adapter (oder history/influxdb) // // Objekt-Pfade – ggf. an eigene Instanz anpassen: // z.B. shelly.0.SHEM-3EM#<MAC>#1 → hier: shelly.0.shellyem3pro-... // // ANPASSEN: Den Instanz-Präfix auf deine Installation setzen // ============================================================ const SHELLY_PREFIX = 'shelly.0.shellypro3em-<DEINE-MAC-ADRESSE>'; // Beispiel: 'shelly.0.shellypro3em-aabbccddeeff' const OBJ_RETURN_TOTAL = `${SHELLY_PREFIX}.EMData0.TotalActiveReturnEnergy`; const OBJ_RETURN_A = `${SHELLY_PREFIX}.EMData0.TotalActiveReturnEnergyA`; const OBJ_RETURN_B = `${SHELLY_PREFIX}.EMData0.TotalActiveReturnEnergyB`; const OBJ_RETURN_C = `${SHELLY_PREFIX}.EMData0.TotalActiveReturnEnergyC`; // Vergütung je kWh in € const VERGUETUNG_PRO_KWH = 0.068; // Ziel-Datenpunkt für das Ergebnis (wird automatisch erzeugt) const DP_HEUTE_KWH = 'javascript.0.Einspeisung.heute_kWh'; const DP_HEUTE_EURO = 'javascript.0.Einspeisung.heute_euro'; const DP_HEUTE_KWH_A = 'javascript.0.Einspeisung.heute_kWh_PhaseA'; const DP_HEUTE_KWH_B = 'javascript.0.Einspeisung.heute_kWh_PhaseB'; const DP_HEUTE_KWH_C = 'javascript.0.Einspeisung.heute_kWh_PhaseC'; const DP_TAGESBEGINN_WH = 'javascript.0.Einspeisung.tagesbeginn_Wh'; const DP_TAGESBEGINN_A = 'javascript.0.Einspeisung.tagesbeginn_Wh_PhaseA'; const DP_TAGESBEGINN_B = 'javascript.0.Einspeisung.tagesbeginn_Wh_PhaseB'; const DP_TAGESBEGINN_C = 'javascript.0.Einspeisung.tagesbeginn_Wh_PhaseC'; // ─── Datenpunkte anlegen ──────────────────────────────────── createState(DP_HEUTE_KWH, 0, { unit: 'kWh', type: 'number', name: 'Einspeisung heute gesamt' }); createState(DP_HEUTE_EURO, 0, { unit: '€', type: 'number', name: 'Einspeisevergütung heute' }); createState(DP_HEUTE_KWH_A, 0, { unit: 'kWh', type: 'number', name: 'Einspeisung heute Phase A' }); createState(DP_HEUTE_KWH_B, 0, { unit: 'kWh', type: 'number', name: 'Einspeisung heute Phase B' }); createState(DP_HEUTE_KWH_C, 0, { unit: 'kWh', type: 'number', name: 'Einspeisung heute Phase C' }); createState(DP_TAGESBEGINN_WH, 0, { unit: 'Wh', type: 'number', name: 'Zählerstand Tagesbeginn gesamt' }); createState(DP_TAGESBEGINN_A, 0, { unit: 'Wh', type: 'number', name: 'Zählerstand Tagesbeginn Phase A' }); createState(DP_TAGESBEGINN_B, 0, { unit: 'Wh', type: 'number', name: 'Zählerstand Tagesbeginn Phase B' }); createState(DP_TAGESBEGINN_C, 0, { unit: 'Wh', type: 'number', name: 'Zählerstand Tagesbeginn Phase C' }); // ─── Hilfsfunktion: Tagesdifferenz berechnen ──────────────── function berechneEinspeisung() { const aktuellerWert = getState(OBJ_RETURN_TOTAL).val || 0; const aktuellerWert_A = getState(OBJ_RETURN_A).val || 0; const aktuellerWert_B = getState(OBJ_RETURN_B).val || 0; const aktuellerWert_C = getState(OBJ_RETURN_C).val || 0; const tagesbeginn = getState(DP_TAGESBEGINN_WH).val || aktuellerWert; const tagesbeginn_A = getState(DP_TAGESBEGINN_A).val || aktuellerWert_A; const tagesbeginn_B = getState(DP_TAGESBEGINN_B).val || aktuellerWert_B; const tagesbeginn_C = getState(DP_TAGESBEGINN_C).val || aktuellerWert_C; // Differenz in Wh → kWh (auf 3 Dezimalstellen) const diff_kWh = Math.round((aktuellerWert - tagesbeginn) / 10) / 100; const diff_kWh_A = Math.round((aktuellerWert_A - tagesbeginn_A) / 10) / 100; const diff_kWh_B = Math.round((aktuellerWert_B - tagesbeginn_B) / 10) / 100; const diff_kWh_C = Math.round((aktuellerWert_C - tagesbeginn_C) / 10) / 100; const verguetung = Math.round(diff_kWh * VERGUETUNG_PRO_KWH * 10000) / 10000; setState(DP_HEUTE_KWH, diff_kWh < 0 ? 0 : diff_kWh, true); setState(DP_HEUTE_KWH_A, diff_kWh_A < 0 ? 0 : diff_kWh_A, true); setState(DP_HEUTE_KWH_B, diff_kWh_B < 0 ? 0 : diff_kWh_B, true); setState(DP_HEUTE_KWH_C, diff_kWh_C < 0 ? 0 : diff_kWh_C, true); setState(DP_HEUTE_EURO, verguetung < 0 ? 0 : verguetung, true); log(`[Einspeisung] Heute: ${diff_kWh} kWh | A: ${diff_kWh_A} | B: ${diff_kWh_B} | C: ${diff_kWh_C} | Vergütung: ${verguetung.toFixed(4)} €`); } // ─── Tagesbeginn um Mitternacht speichern ─────────────────── schedule('0 0 * * *', function () { const val = getState(OBJ_RETURN_TOTAL).val || 0; const val_A = getState(OBJ_RETURN_A).val || 0; const val_B = getState(OBJ_RETURN_B).val || 0; const val_C = getState(OBJ_RETURN_C).val || 0; setState(DP_TAGESBEGINN_WH, val, true); setState(DP_TAGESBEGINN_A, val_A, true); setState(DP_TAGESBEGINN_B, val_B, true); setState(DP_TAGESBEGINN_C, val_C, true); log(`[Einspeisung] Tagesbeginn gesetzt: ${val} Wh (A:${val_A} B:${val_B} C:${val_C})`); }); // ─── Bei jeder Änderung des Shelly-Zählers neu berechnen ─── on({ id: OBJ_RETURN_TOTAL, change: 'any' }, berechneEinspeisung); // ─── Beim Skriptstart einmalig berechnen ─────────────────── // Tagesbeginn-Initialisierung: Nur setzen wenn noch 0 setTimeout(function () { if (getState(DP_TAGESBEGINN_WH).val === 0) { const val = getState(OBJ_RETURN_TOTAL).val || 0; const val_A = getState(OBJ_RETURN_A).val || 0; const val_B = getState(OBJ_RETURN_B).val || 0; const val_C = getState(OBJ_RETURN_C).val || 0; setState(DP_TAGESBEGINN_WH, val, true); setState(DP_TAGESBEGINN_A, val_A, true); setState(DP_TAGESBEGINN_B, val_B, true); setState(DP_TAGESBEGINN_C, val_C, true); log('[Einspeisung] Erstinitialisierung Tagesbeginn gesetzt.'); } berechneEinspeisung(); }, 2000); // ─── SOURCE ANALYTICS Adapter Integration ────────────────── // Der source-analytics Adapter liest automatisch aus dem Datenpunkt // wenn dieser in der Instanzkonfiguration eingetragen ist. // // Alternativ: history-Adapter aktivieren auf: // javascript.0.Einspeisung.heute_kWh // javascript.0.Einspeisung.heute_euro // // Für Tageshistorie via Source Analytics: // - Datenpunkt: javascript.0.Einspeisung.heute_kWh // - Aggregation: last (letzter Wert des Tages) // - Anzeige: Balkendiagramm (Tagesansicht) // // ────────────────────────────────────────────────────────── // ERGEBNIS-DATENPUNKTE (für VIS / Jarvis / Material UI): // // javascript.0.Einspeisung.heute_kWh → Einspeisung heute in kWh // javascript.0.Einspeisung.heute_euro → Vergütung heute in € // javascript.0.Einspeisung.heute_kWh_PhaseA/B/C → je Phase // ──────────────────────────────────────────────────────────@Kusselin sagte in Energiefluss.erweitert Adapter und datenpunkt in €:
verguetung.toFixed(4)
ich kann kein js 😞 😓
wandelt das nicht in String?
-
@homoran :
Hier ist das aktualisierte Script mit der korrigierten Rundung:Hat eine Datei bearbeitet, hat einen Befehl ausgeführt, datei lesenHat eine Datei bearbeitet, hat einen Befehl ausgeführt, datei lesenZwei Stellen wurden geändert: Berechnung: * 10000) / 10000 → * 100) / 100 (rundet auf 2 Dezimalstellen) Log-Ausgabe: toFixed(4) → toFixed(2) (auch im Log jetzt z.B. 0.27 € statt 0.2754 €)
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
