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. Skripten / Logik
  4. JavaScript
  5. Wie lege ich den datenpunkt an?

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    770

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    18
    1
    6.2k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.5k

Wie lege ich den datenpunkt an?

Geplant Angeheftet Gesperrt Verschoben JavaScript
13 Beiträge 6 Kommentatoren 98 Aufrufe 4 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

    Hallo Zusammen, ich probiere gerade ein über KI erstelltes Script für meine Einspeisung. Ich möchte gerne das Script so haben das es mir täglich die KWh udn die € ausgibt und es soll mir dann jeden Tag auch die addierte Summe (kumulativ) von den tagen zuvor für KWh und € ausgeben. Nun habe ich mal anhand der Datenpunkte ein Sript erstellen lassen...leider weiss ich aber nicht wie ich den Datenpunkt "'Einspeisung Jahr gesamt'" und "'Einspeisung Jahr gesamt (€)'" anlegen muss ->

    // ── Jahres-Datenpunkte anlegen (falls nicht vorhanden) ─────────
    createState(DP_JAHR_KWH, {
        name: 'Einspeisung Jahr gesamt',
        type: 'number',
        role: 'value.energy',
        unit: 'kWh',
        read: true,
        write: true,
        def: 0
    });
    
    createState(DP_JAHR_EURO, {
        name: 'Einspeisung Jahr gesamt (€)',
        type: 'number',
        role: 'value.money',
        unit: '€',
        read: true,
        write: true,
        def: 0
    });
    

    Hier mal das ganze Script bis dahin..

    Kann hier bitte mal ein Scriptler drüberschauen und mir das erklären bitte.
    Über ne Info herzlichen Dank.

    // ═══════════════════════════════════════════════════════════════
    // Einspeisung – Tageswerte + robuste Jahressumme
    // ═══════════════════════════════════════════════════════════════
    
    // ── Deine vorhandenen Datenpunkte ──────────────────────────────
    const DP_HEUTE_KWH  = '0_userdata.0.Einspeisung.heute_kWh';
    const DP_HEUTE_EURO = '0_userdata.0.Einspeisung.heute_euro';
    
    // ── Zielstruktur ───────────────────────────────────────────────
    const DP_PREFIX     = '0_userdata.0.Einspeisung.Tage.';
    const DP_JAHR_KWH   = '0_userdata.0.Einspeisung.jahr_kWh';
    const DP_JAHR_EURO  = '0_userdata.0.Einspeisung.jahr_euro';
    
    // ── Jahres-Datenpunkte anlegen (falls nicht vorhanden) ─────────
    createState(DP_JAHR_KWH, {
        name: 'Einspeisung Jahr gesamt',
        type: 'number',
        role: 'value.energy',
        unit: 'kWh',
        read: true,
        write: true,
        def: 0
    });
    
    createState(DP_JAHR_EURO, {
        name: 'Einspeisung Jahr gesamt (€)',
        type: 'number',
        role: 'value.money',
        unit: '€',
        read: true,
        write: true,
        def: 0
    });
    
    // ═══════════════════════════════════════════════════════════════
    // Datum erzeugen → 2026-04-09
    // ═══════════════════════════════════════════════════════════════
    function getDatum() {
        const d = new Date();
        return d.getFullYear() + '-' +
            String(d.getMonth() + 1).padStart(2, '0') + '-' +
            String(d.getDate()).padStart(2, '0');
    }
    
    // ═══════════════════════════════════════════════════════════════
    // Tageswerte speichern
    // ═══════════════════════════════════════════════════════════════
    function speichereTag() {
    
        const datum = getDatum();
    
        const kwh  = parseFloat(getState(DP_HEUTE_KWH).val)  || 0;
        const euro = parseFloat(getState(DP_HEUTE_EURO).val) || 0;
    
        const dpKwh  = DP_PREFIX + datum + '_kWh';
        const dpEuro = DP_PREFIX + datum + '_euro';
    
        createState(dpKwh, {
            name: 'Einspeisung ' + datum,
            type: 'number',
            role: 'value.energy',
            unit: 'kWh',
            read: true,
            write: false
        }, () => setState(dpKwh, kwh, true));
    
        createState(dpEuro, {
            name: 'Vergütung ' + datum,
            type: 'number',
            role: 'value.money',
            unit: '€',
            read: true,
            write: false
        }, () => setState(dpEuro, euro, true));
    
        log(`📅 ${datum}: ${kwh} kWh | ${euro} € gespeichert`, 'info');
    
        jahressummeNeuBerechnen();
    }
    
    // ═══════════════════════════════════════════════════════════════
    // ROBUSTE Jahressumme (aus allen Tagen neu berechnet)
    // ═══════════════════════════════════════════════════════════════
    function jahressummeNeuBerechnen() {
    
        const jahr = new Date().getFullYear();
        const states = $('state[id=' + DP_PREFIX + '*]');
    
        let sumKwh = 0;
        let sumEuro = 0;
    
        states.each(function (id) {
    
            if (!id.includes(jahr)) return;
    
            const val = parseFloat(getState(id).val) || 0;
    
            if (id.endsWith('_kWh')) {
                sumKwh += val;
            } else if (id.endsWith('_euro')) {
                sumEuro += val;
            }
        });
    
        sumKwh  = Math.round(sumKwh * 100) / 100;
        sumEuro = Math.round(sumEuro * 100) / 100;
    
        setState(DP_JAHR_KWH, sumKwh, true);
        setState(DP_JAHR_EURO, sumEuro, true);
    
        log(`📊 Jahr ${jahr}: ${sumKwh} kWh | ${sumEuro} €`, 'info');
    }
    
    // ═══════════════════════════════════════════════════════════════
    // Täglich ausführen (23:55 Uhr)
    // ═══════════════════════════════════════════════════════════════
    schedule('55 23 * * *', speichereTag);
    
    // Beim Start einmal berechnen (wichtig!)
    jahressummeNeuBerechnen();
    
    log('✅ Einspeisungs-Script aktiv', 'info');
    
    C Offline
    C Offline
    Chrunchy
    schrieb zuletzt editiert von
    #2

    @Kusselin ist nicht ganz deine Frage, aber wenn du etwas grafisches möchtest (grafana und influxdb) kann ich dir folgendes von @haus-automatisierung empfehlen:
    https://haus-automatisierung.com/software/influxdb/2023/05/11/influxdb2-pv-dashboard.html

    Zu deiner Frage...
    In ioBroker wird die Funktion createState in der JavaScript-Script-Engine (ab js-controller 6/7) als veraltet (deprecated) betrachtet und durch setObjectNotExists oder extendObject ersetzt.

    Beispiel:

    // Beispiel für 0_userdata.0
    setObjectNotExists('0_userdata.0.Test.Variable', {
        common: { name: 'Test Variable', type: 'boolean', role: 'switch' },
        type: 'state'
    });
    
    

    Bei deinen Datenpunkten sollte role:'value' die richtige Option sein.

    Gruß Chrunchy

    paul53P 1 Antwort Letzte Antwort
    0
    • C Chrunchy

      @Kusselin ist nicht ganz deine Frage, aber wenn du etwas grafisches möchtest (grafana und influxdb) kann ich dir folgendes von @haus-automatisierung empfehlen:
      https://haus-automatisierung.com/software/influxdb/2023/05/11/influxdb2-pv-dashboard.html

      Zu deiner Frage...
      In ioBroker wird die Funktion createState in der JavaScript-Script-Engine (ab js-controller 6/7) als veraltet (deprecated) betrachtet und durch setObjectNotExists oder extendObject ersetzt.

      Beispiel:

      // Beispiel für 0_userdata.0
      setObjectNotExists('0_userdata.0.Test.Variable', {
          common: { name: 'Test Variable', type: 'boolean', role: 'switch' },
          type: 'state'
      });
      
      

      Bei deinen Datenpunkten sollte role:'value' die richtige Option sein.

      paul53P Offline
      paul53P Offline
      paul53
      schrieb zuletzt editiert von paul53
      #3

      @Chrunchy [sagte]: Funktion createState in der JavaScript-Script-Engine (ab js-controller 6/7) als veraltet (deprecated) betrachtet und durch setObjectNotExists oder extendObject ersetzt.

      Wie kommst du darauf?

      @Kusselin [sagte]: Datenpunkt "'Einspeisung Jahr gesamt'" und "'Einspeisung Jahr gesamt (€)'" anlegen muss

      Ändere common.write in false.

      Für die Ermittlung von Periodenwerten inkl. Kosten gibt es den Adapter Sourceanalytix.

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

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

        Ja aber muss ich die datenpunkte neu anlegen erst also diese hier?
        Einspeisung Jahr gesamt
        Einspeisung Jahr gesamt (€)

        das raff ich nicht weil das Script mir ja sagt hier ->

        // ── Jahres-Datenpunkte anlegen (falls nicht vorhanden) ─────────
        

        Das verstehe ich nicht....

        paul53P 1 Antwort Letzte Antwort
        0
        • KusselinK Kusselin

          Ja aber muss ich die datenpunkte neu anlegen erst also diese hier?
          Einspeisung Jahr gesamt
          Einspeisung Jahr gesamt (€)

          das raff ich nicht weil das Script mir ja sagt hier ->

          // ── Jahres-Datenpunkte anlegen (falls nicht vorhanden) ─────────
          

          Das verstehe ich nicht....

          paul53P Offline
          paul53P Offline
          paul53
          schrieb zuletzt editiert von paul53
          #5

          @Kusselin [sagte]: Script mir ja sagt hier

          createState(id, common) erstellt von sich aus nur nicht vorhandene Datenpunkte.

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

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

            sorry paul aber das raff ich nicht..tue mir immer schwer und muss immer noch nach all den Jahren schwierig nachfragen hier...

            paul53P da_WoodyD 2 Antworten Letzte Antwort
            0
            • KusselinK Kusselin

              sorry paul aber das raff ich nicht..tue mir immer schwer und muss immer noch nach all den Jahren schwierig nachfragen hier...

              paul53P Offline
              paul53P Offline
              paul53
              schrieb zuletzt editiert von paul53
              #7

              @Kusselin [sagte]: aber das raff ich

              Was raffst du nicht?
              Der Kommentar in Zeile 14 beschreibt lediglich die Wirkung der nachfolgenden zwei createState().

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              KusselinK 1 Antwort Letzte Antwort
              1
              • KusselinK Kusselin

                sorry paul aber das raff ich nicht..tue mir immer schwer und muss immer noch nach all den Jahren schwierig nachfragen hier...

                da_WoodyD Offline
                da_WoodyD Offline
                da_Woody
                schrieb zuletzt editiert von
                #8

                @Kusselin erstell dir in 0_userdata einen DP, den kannste dann verwenden...
                b3f5142c-f178-461d-8080-4a65a25852cd-image.jpeg

                gruß vom Woody
                HAPPINESS is not a DESTINATION, it's a WAY of LIFE!

                1 Antwort Letzte Antwort
                0
                • paul53P paul53

                  @Kusselin [sagte]: aber das raff ich

                  Was raffst du nicht?
                  Der Kommentar in Zeile 14 beschreibt lediglich die Wirkung der nachfolgenden zwei createState().

                  KusselinK Offline
                  KusselinK Offline
                  Kusselin
                  schrieb zuletzt editiert von
                  #9

                  @paul53 sagte:

                  @Kusselin [sagte]: aber das raff ich

                  Was raffst du nicht?
                  Der Kommentar in Zeile 14 beschreibt lediglich die Wirkung der nachfolgenden zwei createState().

                  O.K. ich dachte immer wenn das da steht muss ich es auch anlegen....

                  @da_Woody sagte:

                  @Kusselin erstell dir in 0_userdata einen DP, den kannste dann verwenden...
                  b3f5142c-f178-461d-8080-4a65a25852cd-image.jpeg

                  Wenn ich mir einen datenpunkt da anlege...wie soll der heissen???? udn wie verwende ich den dann?

                  1 Antwort Letzte Antwort
                  0
                  • W Offline
                    W Offline
                    warp735
                    schrieb zuletzt editiert von
                    #10

                    Na GANZ genau so wie in deinem Script. Das sollte doch aber klar sein.

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

                      Nee isses nicht..sonst würd ich doch nicht fragen....
                      O.K. nochmal für mich...im Script ist das hier hinterlegt:

                      // ── Jahres-Datenpunkte anlegen (falls nicht vorhanden) ─────────
                      createState(DP_JAHR_KWH, {
                          name: 'Einspeisung Jahr gesamt',
                          type: 'number',
                          role: 'value.energy',
                          unit: 'kWh',
                          read: true,
                          write: true,
                          def: 0
                      });
                      
                      createState(DP_JAHR_EURO, {
                          name: 'Einspeisung Jahr gesamt (€)',
                          type: 'number',
                          role: 'value.money',
                          unit: '€',
                          read: true,
                          write: true,
                          def: 0
                      });
                      

                      das heisst doch aber das das Script den Datenpunkt schon automatisch anlegt...da muss ich doch nichts mehr in 0_userdata anlegen...oder?

                      1 Antwort Letzte Antwort
                      0
                      • Ro75R Online
                        Ro75R Online
                        Ro75
                        schrieb zuletzt editiert von
                        #12

                        ja. Allerdings wirst du auf Dauer keinen Spaß haben, denn da wird ja jeden Tag mindestens ein weiterer Datenpunkt angelegt. Wenn du daraus eine Historie ableiten willst, völlig ungeeignet - wurde aber schon weiter oben angesprochen.

                        Ro75.

                        SERVER = Beelink U59 16GB DDR4 RAM 512GB SSD, FB 7490, FritzDect 200+301+440, ConBee II, Zigbee Aqara Sensoren + NOUS A1Z, NOUS A1T, Philips Hue ** ioBroker, REDIS, influxdb2, Grafana, PiHole, Plex-Mediaserver, paperless-ngx (Docker), MariaDB + phpmyadmin *** VIS-Runtime = Intel NUC 8GB RAM 128GB SSD + 24" Touchscreen

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

                          o.k. danke für die Info

                          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

                          599

                          Online

                          32.8k

                          Benutzer

                          82.7k

                          Themen

                          1.3m

                          Beiträge
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                          ioBroker Community 2014-2025
                          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