Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. Energiefluss.erweitert Adapter und datenpunkt in €

NEWS

  • wichtiges UPDATE für controller 7.2.2 im stable
    HomoranH
    Homoran
    8
    1
    255

  • Neues YouTube-Video: Visualisierung im Devices-Adapter
    BluefoxB
    Bluefox
    14
    1
    2.5k

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    2.8k

Energiefluss.erweitert Adapter und datenpunkt in €

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
24 Beiträge 3 Kommentatoren 565 Aufrufe 2 Beobachtet
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • KusselinK Kusselin
    // ============================================================
    //  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
    // ──────────────────────────────────────────────────────────
    
    HomoranH Nicht stören
    HomoranH Nicht stören
    Homoran
    Global Moderator Administrators
    schrieb am zuletzt editiert von
    #21

    @Kusselin sagte in Energiefluss.erweitert Adapter und datenpunkt in €:

    verguetung.toFixed(4)

    ich kann kein js 😞 😓

    wandelt das nicht in String?

    kein Support per PN! - Fragen im Forum stellen -
    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
    Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
    der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

    SKBS 1 Antwort Letzte Antwort
    1
    • KusselinK Offline
      KusselinK Offline
      Kusselin
      schrieb am zuletzt editiert von
      #22

      Sorry ich auch nicht...habe das über ChatGPT erstelen lassen.....

      1 Antwort Letzte Antwort
      0
      • KusselinK Offline
        KusselinK Offline
        Kusselin
        schrieb am zuletzt editiert von Kusselin
        #23

        @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 €)
        
        1 Antwort Letzte Antwort
        0
        • HomoranH Homoran

          @Kusselin sagte in Energiefluss.erweitert Adapter und datenpunkt in €:

          verguetung.toFixed(4)

          ich kann kein js 😞 😓

          wandelt das nicht in String?

          SKBS Offline
          SKBS Offline
          SKB
          Developer Most Active
          schrieb am zuletzt editiert von
          #24

          @Homoran Korrekt. .toFixed(x) wandelt die Zahlen in einen String.
          Abhilfe würde parseFloat((4.55555).toFixed(2)); schaffen ;)

          ... wer nicht mit der Zeit geht, geht mit der Zeit ...

          Aktuelle Entwicklung: Energiefluss - erweitert (https://forum.iobroker.net/topic/64734)

          1 Antwort Letzte Antwort
          0

          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
          Antworten
          • In einem neuen Thema antworten
          Anmelden zum Antworten
          • Älteste zuerst
          • Neuste zuerst
          • Meiste Stimmen


          Support us

          ioBroker
          Community Adapters
          Donate
          FAQ Cloud / IOT
          HowTo: Node.js-Update
          HowTo: Backup/Restore
          Downloads
          BLOG

          432

          Online

          33.0k

          Benutzer

          83.2k

          Themen

          1.3m

          Beiträge
          Community
          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
          ioBroker Community 2014-2026
          logo
          • Anmelden

          • Du hast noch kein Konto? Registrieren

          • Anmelden oder registrieren, um zu suchen
          • Erster Beitrag
            Letzter Beitrag
          0
          • Home
          • Aktuell
          • Tags
          • Ungelesen 0
          • Kategorien
          • Unreplied
          • Beliebt
          • GitHub
          • Docu
          • Hilfe