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. MQTT Fehler bei meinen Shellys

NEWS

  • wichtiges UPDATE für controller 7.2.2 im stable
    HomoranH
    Homoran
    7
    1
    184

  • 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

MQTT Fehler bei meinen Shellys

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
67 Beiträge 9 Kommentatoren 892 Aufrufe 7 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 Offline
    KusselinK Offline
    Kusselin
    schrieb am zuletzt editiert von Kusselin
    #52

    so, hier jetzt nochmal die Scripts die ich benutze:

    // ============================================================
    //  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.1.shellypro3em#34987a467c54#1';
    // 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 * 100) / 100;
    
    
        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(2)} €`);
    }
    
    // ─── 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
    // ──────────────────────────────────────────────────────────
    
    

    und

    // ═══════════════════════════════════════════════════════════════
    //  Einspeisung – Tägliche Aufsummierung (kWh + €)
    //  Speichert jeden Tag einen eigenen Eintrag im Format:
    //  0_userdata.0.Einspeisung.Tage.2025-04-09_kWh
    //  0_userdata.0.Einspeisung.Tage.2025-04-09_euro
    // ═══════════════════════════════════════════════════════════════
    
    // ── Quell-Datenpunkte ──────────────────────────────────────────
    // ⚠️ ID-Präfix aus ioBroker Objekte-Baum kopieren und anpassen!
    const DP_HEUTE_KWH  = 'javascript.0.Einspeisung.heute_kWh';
    const DP_HEUTE_EURO = 'javascript.0.Einspeisung.heute_euro';
    
    // ── Ziel-Ordner für Tagesdaten ─────────────────────────────────
    const DP_PREFIX     = '0_userdata.0.Einspeisung.Tage.';
    
    // ── Jahressummen ───────────────────────────────────────────────
    const DP_JAHR_KWH   = '0_userdata.0.Einspeisung.jahr_kWh';
    const DP_JAHR_EURO  = '0_userdata.0.Einspeisung.jahr_euro';
    
    // ═══════════════════════════════════════════════════════════════
    //  Jahressummen-Datenpunkte anlegen
    // ═══════════════════════════════════════════════════════════════
    createState(DP_JAHR_KWH, 0, {
        name:  'Einspeisung Jahr gesamt',
        unit:  'kWh',
        type:  'number',
        role:  'value.energy',
        read:  true,
        write: true
    });
    
    createState(DP_JAHR_EURO, 0, {
        name:  'Einspeisung Jahr gesamt (€)',
        unit:  '€',
        type:  'number',
        role:  'value.money',
        read:  true,
        write: true
    });
    
    // ═══════════════════════════════════════════════════════════════
    //  Hilfsfunktion: Datum als String  →  "2025-04-09"
    // ═══════════════════════════════════════════════════════════════
    function datumHeute() {
        const d = new Date();
        const yyyy = d.getFullYear();
        const mm   = String(d.getMonth() + 1).padStart(2, '0');
        const dd   = String(d.getDate()).padStart(2, '0');
        return `${yyyy}-${mm}-${dd}`;
    }
    
    // ═══════════════════════════════════════════════════════════════
    //  Hilfsfunktion: Tagesdatenpunkte speichern
    // ═══════════════════════════════════════════════════════════════
    function tageswertSpeichern() {
        const datum     = datumHeute();
        const tagesKwh  = parseFloat(getState(DP_HEUTE_KWH).val)  || 0;
        const tagesEuro = parseFloat(getState(DP_HEUTE_EURO).val) || 0;
    
        const dpKwh  = DP_PREFIX + datum + '_kWh';
        const dpEuro = DP_PREFIX + datum + '_euro';
    
        // ── Tagesdatenpunkt anlegen und befüllen ───────────────────
        createState(dpKwh, tagesKwh, {
            name:  'Einspeisung ' + datum,
            unit:  'kWh',
            type:  'number',
            role:  'value.energy',
            read:  true,
            write: false
        }, () => {
            setState(dpKwh, tagesKwh, true);
        });
    
        createState(dpEuro, tagesEuro, {
            name:  'Einspeisevergütung ' + datum,
            unit:  '€',
            type:  'number',
            role:  'value.money',
            read:  true,
            write: false
        }, () => {
            setState(dpEuro, tagesEuro, true);
        });
    
        // ── Jahreswechsel: Jahressummen zurücksetzen ───────────────
        const jetzt = new Date();
        if (jetzt.getDate() === 1 && jetzt.getMonth() === 0) {
            setState(DP_JAHR_KWH,  0, true);
            setState(DP_JAHR_EURO, 0, true);
            log('🔄 Jahreswechsel: Jahressummen zurückgesetzt.', 'info');
        }
    
        // ── Jahressummen aktualisieren ─────────────────────────────
        const jahrKwh  = parseFloat(getState(DP_JAHR_KWH).val)  || 0;
        const jahrEuro = parseFloat(getState(DP_JAHR_EURO).val) || 0;
    
        const neueKwh  = Math.round((jahrKwh  + tagesKwh)  * 100) / 100;
        const neueEuro = Math.round((jahrEuro + tagesEuro) * 100) / 100;
    
        setState(DP_JAHR_KWH,  neueKwh,  true);
        setState(DP_JAHR_EURO, neueEuro, true);
    
        log(`✅ Tag ${datum}: ${tagesKwh} kWh / ${tagesEuro} € gespeichert`, 'info');
        log(`📊 Jahressumme: ${neueKwh} kWh / ${neueEuro} €`, 'info');
    }
    
    // ═══════════════════════════════════════════════════════════════
    //  Täglich um 23:55 Uhr ausführen
    //  (kurz vor Mitternacht – Tageswert ist vollständig)
    // ═══════════════════════════════════════════════════════════════
    schedule('55 23 * * *', () => {
        tageswertSpeichern();
    });
    
    log('📋 Script "Einspeisung Tagesspeicherung" gestartet – läuft täglich um 23:55 Uhr.', 'info');
    

    Könnt Ihr Experts da was erkennen, ob da was zu oft abgerufen wird??

    HomoranH mcm1957M 2 Antworten Letzte Antwort
    0
    • KusselinK Kusselin

      so, hier jetzt nochmal die Scripts die ich benutze:

      // ============================================================
      //  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.1.shellypro3em#34987a467c54#1';
      // 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 * 100) / 100;
      
      
          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(2)} €`);
      }
      
      // ─── 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
      // ──────────────────────────────────────────────────────────
      
      

      und

      // ═══════════════════════════════════════════════════════════════
      //  Einspeisung – Tägliche Aufsummierung (kWh + €)
      //  Speichert jeden Tag einen eigenen Eintrag im Format:
      //  0_userdata.0.Einspeisung.Tage.2025-04-09_kWh
      //  0_userdata.0.Einspeisung.Tage.2025-04-09_euro
      // ═══════════════════════════════════════════════════════════════
      
      // ── Quell-Datenpunkte ──────────────────────────────────────────
      // ⚠️ ID-Präfix aus ioBroker Objekte-Baum kopieren und anpassen!
      const DP_HEUTE_KWH  = 'javascript.0.Einspeisung.heute_kWh';
      const DP_HEUTE_EURO = 'javascript.0.Einspeisung.heute_euro';
      
      // ── Ziel-Ordner für Tagesdaten ─────────────────────────────────
      const DP_PREFIX     = '0_userdata.0.Einspeisung.Tage.';
      
      // ── Jahressummen ───────────────────────────────────────────────
      const DP_JAHR_KWH   = '0_userdata.0.Einspeisung.jahr_kWh';
      const DP_JAHR_EURO  = '0_userdata.0.Einspeisung.jahr_euro';
      
      // ═══════════════════════════════════════════════════════════════
      //  Jahressummen-Datenpunkte anlegen
      // ═══════════════════════════════════════════════════════════════
      createState(DP_JAHR_KWH, 0, {
          name:  'Einspeisung Jahr gesamt',
          unit:  'kWh',
          type:  'number',
          role:  'value.energy',
          read:  true,
          write: true
      });
      
      createState(DP_JAHR_EURO, 0, {
          name:  'Einspeisung Jahr gesamt (€)',
          unit:  '€',
          type:  'number',
          role:  'value.money',
          read:  true,
          write: true
      });
      
      // ═══════════════════════════════════════════════════════════════
      //  Hilfsfunktion: Datum als String  →  "2025-04-09"
      // ═══════════════════════════════════════════════════════════════
      function datumHeute() {
          const d = new Date();
          const yyyy = d.getFullYear();
          const mm   = String(d.getMonth() + 1).padStart(2, '0');
          const dd   = String(d.getDate()).padStart(2, '0');
          return `${yyyy}-${mm}-${dd}`;
      }
      
      // ═══════════════════════════════════════════════════════════════
      //  Hilfsfunktion: Tagesdatenpunkte speichern
      // ═══════════════════════════════════════════════════════════════
      function tageswertSpeichern() {
          const datum     = datumHeute();
          const tagesKwh  = parseFloat(getState(DP_HEUTE_KWH).val)  || 0;
          const tagesEuro = parseFloat(getState(DP_HEUTE_EURO).val) || 0;
      
          const dpKwh  = DP_PREFIX + datum + '_kWh';
          const dpEuro = DP_PREFIX + datum + '_euro';
      
          // ── Tagesdatenpunkt anlegen und befüllen ───────────────────
          createState(dpKwh, tagesKwh, {
              name:  'Einspeisung ' + datum,
              unit:  'kWh',
              type:  'number',
              role:  'value.energy',
              read:  true,
              write: false
          }, () => {
              setState(dpKwh, tagesKwh, true);
          });
      
          createState(dpEuro, tagesEuro, {
              name:  'Einspeisevergütung ' + datum,
              unit:  '€',
              type:  'number',
              role:  'value.money',
              read:  true,
              write: false
          }, () => {
              setState(dpEuro, tagesEuro, true);
          });
      
          // ── Jahreswechsel: Jahressummen zurücksetzen ───────────────
          const jetzt = new Date();
          if (jetzt.getDate() === 1 && jetzt.getMonth() === 0) {
              setState(DP_JAHR_KWH,  0, true);
              setState(DP_JAHR_EURO, 0, true);
              log('🔄 Jahreswechsel: Jahressummen zurückgesetzt.', 'info');
          }
      
          // ── Jahressummen aktualisieren ─────────────────────────────
          const jahrKwh  = parseFloat(getState(DP_JAHR_KWH).val)  || 0;
          const jahrEuro = parseFloat(getState(DP_JAHR_EURO).val) || 0;
      
          const neueKwh  = Math.round((jahrKwh  + tagesKwh)  * 100) / 100;
          const neueEuro = Math.round((jahrEuro + tagesEuro) * 100) / 100;
      
          setState(DP_JAHR_KWH,  neueKwh,  true);
          setState(DP_JAHR_EURO, neueEuro, true);
      
          log(`✅ Tag ${datum}: ${tagesKwh} kWh / ${tagesEuro} € gespeichert`, 'info');
          log(`📊 Jahressumme: ${neueKwh} kWh / ${neueEuro} €`, 'info');
      }
      
      // ═══════════════════════════════════════════════════════════════
      //  Täglich um 23:55 Uhr ausführen
      //  (kurz vor Mitternacht – Tageswert ist vollständig)
      // ═══════════════════════════════════════════════════════════════
      schedule('55 23 * * *', () => {
          tageswertSpeichern();
      });
      
      log('📋 Script "Einspeisung Tagesspeicherung" gestartet – läuft täglich um 23:55 Uhr.', 'info');
      

      Könnt Ihr Experts da was erkennen, ob da was zu oft abgerufen wird??

      HomoranH Nicht stören
      HomoranH Nicht stören
      Homoran
      Global Moderator Administrators
      schrieb am zuletzt editiert von
      #53

      @Kusselin sagte:

      so, hier jetzt nochmal die Scripts die ich benutze:

      Hast du alles von @mcm1957 gelesen und umgesetzt?

      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 -

      1 Antwort Letzte Antwort
      0
      • HomoranH Homoran

        @Kusselin sagte:

        Das kommt im Log immer mal wieder:

        Hast du ja auch so programmiert

        @Kusselin sagte:

        log(📅 ${datum}: ${kwh} kWh | ${euro} € gespeichert, 'info');

        KusselinK Offline
        KusselinK Offline
        Kusselin
        schrieb am zuletzt editiert von
        #54

        @Homoran sagte:

        @Kusselin sagte:

        Das kommt im Log immer mal wieder:

        Hast du ja auch so programmiert

        @Kusselin sagte:

        log(📅 ${datum}: ${kwh} kWh | ${euro} € gespeichert, 'info');

        Das ist aber nicht schlimm...das hat nichts mit dem zu tun das zu viele Anfragen sind?

        @mcm1957 sagte:

        Ein Ansatz zur Fehlersuche wär mal deine scripte zu stoppen jnd dann in Ruhe zu schaun ob der Shelly stabil läuft.

        Alternativ bau ein log ein bei allen Zugriffen deiner Scripte auf den Shelly. Da sirht man dann ob do alle Stunden oder alle ms zugreifst ....

        sorry @mcm1957 das kann ich nicht....also so drinn im thema bin ich da leider nicht.

        @mcm1957 sagte:

        Noch ein Hinweis:
        Du verwendest die States offensichtlich als History:
        createState(dpKwh, {
        name: 'Einspeisung ' + datum,
        ...
        Ich hoffe du hast auch irgendeinen Algorithmus um das aufzuräumen. Zur Hiostorsierung gibts normalerweise dedizierte Adapter. Bei einem State pro Tag ists nicht so kritisch - aber wenn deien KI auch z.B. stündliche Werte so anlegt dann wird dir dein System in die Knie gehn....

        genau so ein Algorytmus habe ich nicht. das hab ich auch schon gesehen...in den Objekten wird da täglich jeder Tag angelegt. Ist halt schwierig wenn man nicht scripten kann das zu realisieren??

        was ist das "Zur Hiostorsierung gibts normalerweise dedizierte Adapter?" was müsste ich da unternehmen um das das System in den Objekten nicht überläuft?
        Aber es wird nicht stündlich angelegt...er macht es für die € udn kWh einmal am Tag um 23:55 aber das dann 365 mal...
        Image 001.png

        HomoranH NegaleinN 2 Antworten Letzte Antwort
        0
        • KusselinK Kusselin

          so, hier jetzt nochmal die Scripts die ich benutze:

          // ============================================================
          //  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.1.shellypro3em#34987a467c54#1';
          // 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 * 100) / 100;
          
          
              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(2)} €`);
          }
          
          // ─── 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
          // ──────────────────────────────────────────────────────────
          
          

          und

          // ═══════════════════════════════════════════════════════════════
          //  Einspeisung – Tägliche Aufsummierung (kWh + €)
          //  Speichert jeden Tag einen eigenen Eintrag im Format:
          //  0_userdata.0.Einspeisung.Tage.2025-04-09_kWh
          //  0_userdata.0.Einspeisung.Tage.2025-04-09_euro
          // ═══════════════════════════════════════════════════════════════
          
          // ── Quell-Datenpunkte ──────────────────────────────────────────
          // ⚠️ ID-Präfix aus ioBroker Objekte-Baum kopieren und anpassen!
          const DP_HEUTE_KWH  = 'javascript.0.Einspeisung.heute_kWh';
          const DP_HEUTE_EURO = 'javascript.0.Einspeisung.heute_euro';
          
          // ── Ziel-Ordner für Tagesdaten ─────────────────────────────────
          const DP_PREFIX     = '0_userdata.0.Einspeisung.Tage.';
          
          // ── Jahressummen ───────────────────────────────────────────────
          const DP_JAHR_KWH   = '0_userdata.0.Einspeisung.jahr_kWh';
          const DP_JAHR_EURO  = '0_userdata.0.Einspeisung.jahr_euro';
          
          // ═══════════════════════════════════════════════════════════════
          //  Jahressummen-Datenpunkte anlegen
          // ═══════════════════════════════════════════════════════════════
          createState(DP_JAHR_KWH, 0, {
              name:  'Einspeisung Jahr gesamt',
              unit:  'kWh',
              type:  'number',
              role:  'value.energy',
              read:  true,
              write: true
          });
          
          createState(DP_JAHR_EURO, 0, {
              name:  'Einspeisung Jahr gesamt (€)',
              unit:  '€',
              type:  'number',
              role:  'value.money',
              read:  true,
              write: true
          });
          
          // ═══════════════════════════════════════════════════════════════
          //  Hilfsfunktion: Datum als String  →  "2025-04-09"
          // ═══════════════════════════════════════════════════════════════
          function datumHeute() {
              const d = new Date();
              const yyyy = d.getFullYear();
              const mm   = String(d.getMonth() + 1).padStart(2, '0');
              const dd   = String(d.getDate()).padStart(2, '0');
              return `${yyyy}-${mm}-${dd}`;
          }
          
          // ═══════════════════════════════════════════════════════════════
          //  Hilfsfunktion: Tagesdatenpunkte speichern
          // ═══════════════════════════════════════════════════════════════
          function tageswertSpeichern() {
              const datum     = datumHeute();
              const tagesKwh  = parseFloat(getState(DP_HEUTE_KWH).val)  || 0;
              const tagesEuro = parseFloat(getState(DP_HEUTE_EURO).val) || 0;
          
              const dpKwh  = DP_PREFIX + datum + '_kWh';
              const dpEuro = DP_PREFIX + datum + '_euro';
          
              // ── Tagesdatenpunkt anlegen und befüllen ───────────────────
              createState(dpKwh, tagesKwh, {
                  name:  'Einspeisung ' + datum,
                  unit:  'kWh',
                  type:  'number',
                  role:  'value.energy',
                  read:  true,
                  write: false
              }, () => {
                  setState(dpKwh, tagesKwh, true);
              });
          
              createState(dpEuro, tagesEuro, {
                  name:  'Einspeisevergütung ' + datum,
                  unit:  '€',
                  type:  'number',
                  role:  'value.money',
                  read:  true,
                  write: false
              }, () => {
                  setState(dpEuro, tagesEuro, true);
              });
          
              // ── Jahreswechsel: Jahressummen zurücksetzen ───────────────
              const jetzt = new Date();
              if (jetzt.getDate() === 1 && jetzt.getMonth() === 0) {
                  setState(DP_JAHR_KWH,  0, true);
                  setState(DP_JAHR_EURO, 0, true);
                  log('🔄 Jahreswechsel: Jahressummen zurückgesetzt.', 'info');
              }
          
              // ── Jahressummen aktualisieren ─────────────────────────────
              const jahrKwh  = parseFloat(getState(DP_JAHR_KWH).val)  || 0;
              const jahrEuro = parseFloat(getState(DP_JAHR_EURO).val) || 0;
          
              const neueKwh  = Math.round((jahrKwh  + tagesKwh)  * 100) / 100;
              const neueEuro = Math.round((jahrEuro + tagesEuro) * 100) / 100;
          
              setState(DP_JAHR_KWH,  neueKwh,  true);
              setState(DP_JAHR_EURO, neueEuro, true);
          
              log(`✅ Tag ${datum}: ${tagesKwh} kWh / ${tagesEuro} € gespeichert`, 'info');
              log(`📊 Jahressumme: ${neueKwh} kWh / ${neueEuro} €`, 'info');
          }
          
          // ═══════════════════════════════════════════════════════════════
          //  Täglich um 23:55 Uhr ausführen
          //  (kurz vor Mitternacht – Tageswert ist vollständig)
          // ═══════════════════════════════════════════════════════════════
          schedule('55 23 * * *', () => {
              tageswertSpeichern();
          });
          
          log('📋 Script "Einspeisung Tagesspeicherung" gestartet – läuft täglich um 23:55 Uhr.', 'info');
          

          Könnt Ihr Experts da was erkennen, ob da was zu oft abgerufen wird??

          mcm1957M Online
          mcm1957M Online
          mcm1957
          schrieb am zuletzt editiert von
          #55

          @Kusselin sagte:

          Könnt Ihr Experts da was erkennen, ob da was zu oft abgerufen wird??

          In welchem Script liest du daten vom Shelly?

          Entwicklung u Betreuung: envertech-pv, hoymiles-ms, ns-client, pid, snmp Adapter;
          Support Repositoryverwaltung.

          Wer 'nen Kaffee spendieren will: https://paypal.me

          LESEN - gute Forenbeitrage

          KusselinK 1 Antwort Letzte Antwort
          0
          • mcm1957M mcm1957

            @Kusselin sagte:

            Könnt Ihr Experts da was erkennen, ob da was zu oft abgerufen wird??

            In welchem Script liest du daten vom Shelly?

            KusselinK Offline
            KusselinK Offline
            Kusselin
            schrieb am zuletzt editiert von
            #56

            @mcm1957 sagte:

            @Kusselin sagte:

            Könnt Ihr Experts da was erkennen, ob da was zu oft abgerufen wird??

            In welchem Script liest du daten vom Shelly?

            im ersten Script hier:

            const SHELLY_PREFIX = 'shelly.1.shellypro3em#34987a467c54#1';
            // Beispiel: 'shelly.0.shellypro3em-aabbccddeeff'
            
            mcm1957M 1 Antwort Letzte Antwort
            0
            • KusselinK Kusselin

              @mcm1957 sagte:

              @Kusselin sagte:

              Könnt Ihr Experts da was erkennen, ob da was zu oft abgerufen wird??

              In welchem Script liest du daten vom Shelly?

              im ersten Script hier:

              const SHELLY_PREFIX = 'shelly.1.shellypro3em#34987a467c54#1';
              // Beispiel: 'shelly.0.shellypro3em-aabbccddeeff'
              
              mcm1957M Online
              mcm1957M Online
              mcm1957
              schrieb am zuletzt editiert von
              #57

              @Kusselin sagte:

              @mcm1957 sagte:

              @Kusselin sagte:

              Könnt Ihr Experts da was erkennen, ob da was zu oft abgerufen wird??

              In welchem Script liest du daten vom Shelly?

              im ersten Script hier:

              const SHELLY_PREFIX = 'shelly.1.shellypro3em#34987a467c54#1';
              // Beispiel: 'shelly.0.shellypro3em-aabbccddeeff'
              

              Ja grad gesehen. Da liest du eh vom Adapter und nicht vom Shelly direkt.

              Entwicklung u Betreuung: envertech-pv, hoymiles-ms, ns-client, pid, snmp Adapter;
              Support Repositoryverwaltung.

              Wer 'nen Kaffee spendieren will: https://paypal.me

              LESEN - gute Forenbeitrage

              KusselinK 1 Antwort Letzte Antwort
              0
              • KusselinK Kusselin

                @Homoran sagte:

                @Kusselin sagte:

                Das kommt im Log immer mal wieder:

                Hast du ja auch so programmiert

                @Kusselin sagte:

                log(📅 ${datum}: ${kwh} kWh | ${euro} € gespeichert, 'info');

                Das ist aber nicht schlimm...das hat nichts mit dem zu tun das zu viele Anfragen sind?

                @mcm1957 sagte:

                Ein Ansatz zur Fehlersuche wär mal deine scripte zu stoppen jnd dann in Ruhe zu schaun ob der Shelly stabil läuft.

                Alternativ bau ein log ein bei allen Zugriffen deiner Scripte auf den Shelly. Da sirht man dann ob do alle Stunden oder alle ms zugreifst ....

                sorry @mcm1957 das kann ich nicht....also so drinn im thema bin ich da leider nicht.

                @mcm1957 sagte:

                Noch ein Hinweis:
                Du verwendest die States offensichtlich als History:
                createState(dpKwh, {
                name: 'Einspeisung ' + datum,
                ...
                Ich hoffe du hast auch irgendeinen Algorithmus um das aufzuräumen. Zur Hiostorsierung gibts normalerweise dedizierte Adapter. Bei einem State pro Tag ists nicht so kritisch - aber wenn deien KI auch z.B. stündliche Werte so anlegt dann wird dir dein System in die Knie gehn....

                genau so ein Algorytmus habe ich nicht. das hab ich auch schon gesehen...in den Objekten wird da täglich jeder Tag angelegt. Ist halt schwierig wenn man nicht scripten kann das zu realisieren??

                was ist das "Zur Hiostorsierung gibts normalerweise dedizierte Adapter?" was müsste ich da unternehmen um das das System in den Objekten nicht überläuft?
                Aber es wird nicht stündlich angelegt...er macht es für die € udn kWh einmal am Tag um 23:55 aber das dann 365 mal...
                Image 001.png

                HomoranH Nicht stören
                HomoranH Nicht stören
                Homoran
                Global Moderator Administrators
                schrieb am zuletzt editiert von
                #58

                @Kusselin sagte:

                Das ist aber nicht schlimm

                Aber wenn du dir die Timestams ansiehst, sind da nur 3 sekunden zwischen den Abrufen.

                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 -

                1 Antwort Letzte Antwort
                0
                • mcm1957M mcm1957

                  @Kusselin sagte:

                  @mcm1957 sagte:

                  @Kusselin sagte:

                  Könnt Ihr Experts da was erkennen, ob da was zu oft abgerufen wird??

                  In welchem Script liest du daten vom Shelly?

                  im ersten Script hier:

                  const SHELLY_PREFIX = 'shelly.1.shellypro3em#34987a467c54#1';
                  // Beispiel: 'shelly.0.shellypro3em-aabbccddeeff'
                  

                  Ja grad gesehen. Da liest du eh vom Adapter und nicht vom Shelly direkt.

                  KusselinK Offline
                  KusselinK Offline
                  Kusselin
                  schrieb am zuletzt editiert von
                  #59

                  @mcm1957 sagte:

                  @Kusselin sagte:

                  @mcm1957 sagte:

                  @Kusselin sagte:

                  Könnt Ihr Experts da was erkennen, ob da was zu oft abgerufen wird??

                  In welchem Script liest du daten vom Shelly?

                  im ersten Script hier:

                  const SHELLY_PREFIX = 'shelly.1.shellypro3em#34987a467c54#1';
                  // Beispiel: 'shelly.0.shellypro3em-aabbccddeeff'
                  

                  Ja grad gesehen. Da liest du eh vom Adapter und nicht vom Shelly direkt.

                  Genau..soviel erkenne ich auch...aber das ist doch o.k. - das was da der shelly support schreibt das ich direkt vom shelly 3em pro abrufe ist doch dann faslch....ich rufe lt. script vom shelly.1 adapter ab...richtig?

                  @Homoran sagte:

                  @Kusselin sagte:

                  Das ist aber nicht schlimm

                  Aber wenn du dir die Timestams ansiehst, sind da nur 3 sekunden zwischen den Abrufen.

                  kann ich das ändern irgendwie ? also in den Objekten oder so?

                  1 Antwort Letzte Antwort
                  0
                  • mcm1957M Online
                    mcm1957M Online
                    mcm1957
                    schrieb am zuletzt editiert von
                    #60

                    Der Shelly sendet praktisch im Sekundenabstand neue Daten. Das ist an sich normal und ok. Das kann ihn nicht überlasten, da diese Funktion vom Shelly aus geht.
                    Die Skripts sehen für mich - in Bezug auf Shelly - unkritisch aus. Dass da bei jeder Änderung der Shelly Werte einige lokale Werte neu berechnet werden sollte nur den ioBroker host belasten.

                    Ev. sieht man in einem vollständigen Log der Shelly Instanz /= Log ab starten der Instanz bis zum unerwarteten Restart des Shellies) mit level DEBUG mehr.

                    Entwicklung u Betreuung: envertech-pv, hoymiles-ms, ns-client, pid, snmp Adapter;
                    Support Repositoryverwaltung.

                    Wer 'nen Kaffee spendieren will: https://paypal.me

                    LESEN - gute Forenbeitrage

                    1 Antwort Letzte Antwort
                    0
                    • KusselinK Kusselin

                      @Homoran sagte:

                      @Kusselin sagte:

                      Das kommt im Log immer mal wieder:

                      Hast du ja auch so programmiert

                      @Kusselin sagte:

                      log(📅 ${datum}: ${kwh} kWh | ${euro} € gespeichert, 'info');

                      Das ist aber nicht schlimm...das hat nichts mit dem zu tun das zu viele Anfragen sind?

                      @mcm1957 sagte:

                      Ein Ansatz zur Fehlersuche wär mal deine scripte zu stoppen jnd dann in Ruhe zu schaun ob der Shelly stabil läuft.

                      Alternativ bau ein log ein bei allen Zugriffen deiner Scripte auf den Shelly. Da sirht man dann ob do alle Stunden oder alle ms zugreifst ....

                      sorry @mcm1957 das kann ich nicht....also so drinn im thema bin ich da leider nicht.

                      @mcm1957 sagte:

                      Noch ein Hinweis:
                      Du verwendest die States offensichtlich als History:
                      createState(dpKwh, {
                      name: 'Einspeisung ' + datum,
                      ...
                      Ich hoffe du hast auch irgendeinen Algorithmus um das aufzuräumen. Zur Hiostorsierung gibts normalerweise dedizierte Adapter. Bei einem State pro Tag ists nicht so kritisch - aber wenn deien KI auch z.B. stündliche Werte so anlegt dann wird dir dein System in die Knie gehn....

                      genau so ein Algorytmus habe ich nicht. das hab ich auch schon gesehen...in den Objekten wird da täglich jeder Tag angelegt. Ist halt schwierig wenn man nicht scripten kann das zu realisieren??

                      was ist das "Zur Hiostorsierung gibts normalerweise dedizierte Adapter?" was müsste ich da unternehmen um das das System in den Objekten nicht überläuft?
                      Aber es wird nicht stündlich angelegt...er macht es für die € udn kWh einmal am Tag um 23:55 aber das dann 365 mal...
                      Image 001.png

                      NegaleinN Offline
                      NegaleinN Offline
                      Negalein
                      schrieb am zuletzt editiert von
                      #61

                      @Kusselin sagte:

                      sorry @mcm1957 das kann ich nicht....also so drinn im thema bin ich da leider nicht.

                      dann sag das der KI.
                      Erklär ihr alles GENAU wie du es braucht.

                      ° Node.js & System Update ---> sudo apt update, iob stop, sudo apt full-upgrade
                      ° Node.js Fixer ---> iob nodejs-update
                      ° Fixer ---> iob fix

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

                        Hier die letzte Nachricht vom Shelly Support:

                        die von Ihnen zitierte allgemeine Aussage des Adapter-Entwicklers ändert nichts an den im konkreten Fall vorliegenden Diagnosedaten.
                        
                        In den übermittelten Protokollen ist eindeutig erkennbar, dass der Shelly in sehr kurzen Abständen eingehende MQTT-Nachrichten aus Ihrem Netzwerk erhält. Der Adapter-Entwickler kennt weder Ihre vollständige ioBroker-Konfiguration noch Ihre Skripte, Instanzen, MQTT-Topics oder die konkreten Logdaten dieses Gerätes. Eine pauschale Aussage zum üblichen Verhalten des Adapters kann daher die tatsächlich protokollierte Kommunikation in Ihrer Installation nicht widerlegen.
                        
                        Ob diese Nachrichten durch den Adapter selbst, ein Skript, eine weitere Instanz, eine fehlerhafte Konfiguration oder ein anderes System erzeugt werden, können wir nicht beurteilen. Dies muss innerhalb Ihres Drittanbietersystems beziehungsweise anhand der Broker- und ioBroker-Protokolle geprüft werden.
                        
                        Der Shelly wird durch diese ungewöhnlich hohe Anzahl eingehender MQTT-Nachrichten, teilweise in Abständen im Millisekundenbereich, erheblich belastet. In den Protokollen wird dabei sogar eine überlaufende Warteschlange gemeldet. Dies führt dazu, dass das Gerät zeitweise nicht mehr reagiert und abstürzt. Ein Gerätefehler lässt sich aus den vorliegenden Diagnosedaten hingegen nicht ableiten.
                        
                        Bitte prüfen Sie daher in Ihrem MQTT-Broker beziehungsweise in ioBroker:
                        
                            welche Clients Nachrichten an die Topics des Shelly senden,
                            welche Skripte oder Automationen diese Nachrichten auslösen,
                            ob mehrere Adapter oder Instanzen gleichzeitig auf dasselbe Gerät zugreifen,
                            welche Polling (Abfrage) Intervalle konfiguriert sind
                            und ob sich die Nachrichtenrate nach dem Deaktivieren der MQTT-Integration normalisiert.
                        
                        Da die Ursache nach aktuellem Stand außerhalb des Shelly-Gerätes liegt und innerhalb des verwendeten Drittanbietersystems geprüft werden muss, werden wir den Vorgang an dieser Stelle schließen.
                        
                        mcm1957M 1 Antwort Letzte Antwort
                        0
                        • KusselinK Offline
                          KusselinK Offline
                          Kusselin
                          schrieb am zuletzt editiert von
                          #63

                          @homoran : Wie kann ich in dem Script das "Timestamp" ändern?

                          1 Antwort Letzte Antwort
                          0
                          • NegaleinN Offline
                            NegaleinN Offline
                            Negalein
                            schrieb am zuletzt editiert von
                            #64

                            @Kusselin sagte:

                            Timestamp

                            welchen Timestamp? Bzw., was verstehst du unter Timestamp?

                            ° Node.js & System Update ---> sudo apt update, iob stop, sudo apt full-upgrade
                            ° Node.js Fixer ---> iob nodejs-update
                            ° Fixer ---> iob fix

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

                              Ha das kommt weiter oben von @homoran

                              NegaleinN 1 Antwort Letzte Antwort
                              0
                              • KusselinK Kusselin

                                Ha das kommt weiter oben von @homoran

                                NegaleinN Offline
                                NegaleinN Offline
                                Negalein
                                schrieb am zuletzt editiert von
                                #66

                                @Kusselin sagte:

                                Ha das kommt weiter oben von

                                Timestamps sind Zeitstempel, wann zB der DP beschrieben wurde.

                                ° Node.js & System Update ---> sudo apt update, iob stop, sudo apt full-upgrade
                                ° Node.js Fixer ---> iob nodejs-update
                                ° Fixer ---> iob fix

                                1 Antwort Letzte Antwort
                                0
                                • KusselinK Kusselin

                                  Hier die letzte Nachricht vom Shelly Support:

                                  die von Ihnen zitierte allgemeine Aussage des Adapter-Entwicklers ändert nichts an den im konkreten Fall vorliegenden Diagnosedaten.
                                  
                                  In den übermittelten Protokollen ist eindeutig erkennbar, dass der Shelly in sehr kurzen Abständen eingehende MQTT-Nachrichten aus Ihrem Netzwerk erhält. Der Adapter-Entwickler kennt weder Ihre vollständige ioBroker-Konfiguration noch Ihre Skripte, Instanzen, MQTT-Topics oder die konkreten Logdaten dieses Gerätes. Eine pauschale Aussage zum üblichen Verhalten des Adapters kann daher die tatsächlich protokollierte Kommunikation in Ihrer Installation nicht widerlegen.
                                  
                                  Ob diese Nachrichten durch den Adapter selbst, ein Skript, eine weitere Instanz, eine fehlerhafte Konfiguration oder ein anderes System erzeugt werden, können wir nicht beurteilen. Dies muss innerhalb Ihres Drittanbietersystems beziehungsweise anhand der Broker- und ioBroker-Protokolle geprüft werden.
                                  
                                  Der Shelly wird durch diese ungewöhnlich hohe Anzahl eingehender MQTT-Nachrichten, teilweise in Abständen im Millisekundenbereich, erheblich belastet. In den Protokollen wird dabei sogar eine überlaufende Warteschlange gemeldet. Dies führt dazu, dass das Gerät zeitweise nicht mehr reagiert und abstürzt. Ein Gerätefehler lässt sich aus den vorliegenden Diagnosedaten hingegen nicht ableiten.
                                  
                                  Bitte prüfen Sie daher in Ihrem MQTT-Broker beziehungsweise in ioBroker:
                                  
                                      welche Clients Nachrichten an die Topics des Shelly senden,
                                      welche Skripte oder Automationen diese Nachrichten auslösen,
                                      ob mehrere Adapter oder Instanzen gleichzeitig auf dasselbe Gerät zugreifen,
                                      welche Polling (Abfrage) Intervalle konfiguriert sind
                                      und ob sich die Nachrichtenrate nach dem Deaktivieren der MQTT-Integration normalisiert.
                                  
                                  Da die Ursache nach aktuellem Stand außerhalb des Shelly-Gerätes liegt und innerhalb des verwendeten Drittanbietersystems geprüft werden muss, werden wir den Vorgang an dieser Stelle schließen.
                                  
                                  mcm1957M Online
                                  mcm1957M Online
                                  mcm1957
                                  schrieb am zuletzt editiert von
                                  #67

                                  @Kusselin sagte:

                                  Hier die letzte Nachricht vom Shelly Support:

                                  die von Ihnen zitierte allgemeine Aussage des Adapter-Entwicklers ändert nichts an den im konkreten Fall vorliegenden Diagnosedaten.
                                  
                                  In den übermittelten Protokollen ist eindeutig erkennbar, dass der Shelly in sehr kurzen Abständen eingehende MQTT-Nachrichten aus Ihrem Netzwerk erhält. Der Adapter-Entwickler kennt weder Ihre vollständige ioBroker-Konfiguration noch Ihre Skripte, Instanzen, MQTT-Topics oder die konkreten Logdaten dieses Gerätes. Eine pauschale Aussage zum üblichen Verhalten des Adapters kann daher die tatsächlich protokollierte Kommunikation in Ihrer Installation nicht widerlegen.
                                  
                                  Ob diese Nachrichten durch den Adapter selbst, ein Skript, eine weitere Instanz, eine fehlerhafte Konfiguration oder ein anderes System erzeugt werden, können wir nicht beurteilen. Dies muss innerhalb Ihres Drittanbietersystems beziehungsweise anhand der Broker- und ioBroker-Protokolle geprüft werden.
                                  
                                  Der Shelly wird durch diese ungewöhnlich hohe Anzahl eingehender MQTT-Nachrichten, teilweise in Abständen im Millisekundenbereich, erheblich belastet. In den Protokollen wird dabei sogar eine überlaufende Warteschlange gemeldet. Dies führt dazu, dass das Gerät zeitweise nicht mehr reagiert und abstürzt. Ein Gerätefehler lässt sich aus den vorliegenden Diagnosedaten hingegen nicht ableiten.
                                  
                                  Bitte prüfen Sie daher in Ihrem MQTT-Broker beziehungsweise in ioBroker:
                                  
                                      welche Clients Nachrichten an die Topics des Shelly senden,
                                      welche Skripte oder Automationen diese Nachrichten auslösen,
                                      ob mehrere Adapter oder Instanzen gleichzeitig auf dasselbe Gerät zugreifen,
                                      welche Polling (Abfrage) Intervalle konfiguriert sind
                                      und ob sich die Nachrichtenrate nach dem Deaktivieren der MQTT-Integration normalisiert.
                                  
                                  Da die Ursache nach aktuellem Stand außerhalb des Shelly-Gerätes liegt und innerhalb des verwendeten Drittanbietersystems geprüft werden muss, werden wir den Vorgang an dieser Stelle schließen.
                                  

                                  Um das Rätselraten zu minimieren bitte

                                  - stell uns die Protokolle zur Verfügung auf Grund derer der Shelly SSupport zu seiner Aussage kommt.
                                  - stell wie schon früher angefragt ein vollständiges Logfile des Shelly Adapters mit level DEBUG zur Verfügung (vollständig = vom Start des Adapter bis zum Auftreten des Problems)

                                  Vielleicht sieht man dann mehr...

                                  Welche der Schritte die der Shelly Support empfohlen hat:

                                  Bitte prüfen Sie daher in Ihrem MQTT-Broker beziehungsweise in ioBroker:

                                  welche Clients Nachrichten an die Topics des Shelly senden,
                                  welche Skripte oder Automationen diese Nachrichten auslösen,
                                  ob mehrere Adapter oder Instanzen gleichzeitig auf dasselbe Gerät zugreifen,
                                  welche Polling (Abfrage) Intervalle konfiguriert sind
                                  und ob sich die Nachrichtenrate nach dem Deaktivieren der MQTT-Integration normalisiert.
                                  

                                  hast du schon mit welchem Ergebnis durchgeführt?

                                  Entwicklung u Betreuung: envertech-pv, hoymiles-ms, ns-client, pid, snmp Adapter;
                                  Support Repositoryverwaltung.

                                  Wer 'nen Kaffee spendieren will: https://paypal.me

                                  LESEN - gute Forenbeitrage

                                  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

                                  614

                                  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