Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • 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. Adapter history.0 auswerten für 16 Datenpunkte und 12 Monate

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Adapter history.0 auswerten für 16 Datenpunkte und 12 Monate

Geplant Angeheftet Gesperrt Verschoben JavaScript
62 Beiträge 5 Kommentatoren 6.8k Aufrufe 3 Watching
  • Ä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.
  • L legendary83

    @paul53

    Das Objekt jetzt macht in meinem Fall keinen Sinn mehr.
    Ich passe das noch an Danke

    EDIT:

    08.03. script3.PNG

    Das einzige was ich jetzt noch fehlt und das konnte ich noch nicht ganz ergründen.

    Mutmaßlich in Abschnitten wo es keine Werte gab, ich sag mal iobroker Neustart oder Stromausfall.

    Da gibt mir das Skript NaN als Ergebnis aus.
    Ich denke ich müsste die Werte in result noch auf Plausibilität prüfen...

    paul53P Offline
    paul53P Offline
    paul53
    schrieb am zuletzt editiert von paul53
    #61

    @legendary83 sagte: Da gibt mir das Skript NaN als Ergebnis aus.

    NaN kann nur dann das Ergebnis sein, wenn ts keine Zahl enthält oder nicht vorhanden ist. Gibt es solche Objekte in result?

    Versuche es mal so:

    Blockly_temp.JPG

    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

    L 1 Antwort Letzte Antwort
    1
    • paul53P paul53

      @legendary83 sagte: Da gibt mir das Skript NaN als Ergebnis aus.

      NaN kann nur dann das Ergebnis sein, wenn ts keine Zahl enthält oder nicht vorhanden ist. Gibt es solche Objekte in result?

      Versuche es mal so:

      Blockly_temp.JPG

      L Offline
      L Offline
      legendary83
      schrieb am zuletzt editiert von legendary83
      #62

      @paul53

      Ich habe einen eingegrenzt und gefunden:

      fehler in den daten.PNG

      Ein Timestamp des DP war weder True noch False :astonished:

      In 12 betrachteten Monaten ist das 2 mal vorgekommen.

      Finale Version:

      09.03. script final.PNG

      var ed, obj, result, lastValue, onTime, i, value, ts;
      
      
      getHistory({
        id: 'ID auswählen',
        start: getDateObject('2025-09-01 00:00').getTime(),
        end: getDateObject('2024-03-01 00:00').getTime(),
        aggregate: 'none',
        removeBorderValues: true,
      }, async (err, result) => {
        if (err) {
          console.error(err);
        } else {
          ed = 0;
          if (result.length > 0) {
            ((obj) => { if (typeof obj === 'object') { obj['val'] = false; } })((result.slice(-1)[0]));
            obj = result[0];
            lastValue = getAttr(obj, 'val');
            if (lastValue) {
              onTime = getAttr(obj, 'ts');
            }
            var i_end = result.length;
            var i_inc = 1;
            if (2 > i_end) {
              i_inc = -i_inc;
            }
            for (i = 2; i_inc >= 0 ? i <= i_end : i >= i_end; i += i_inc) {
              obj = result[(i - 1)];
              value = getAttr(obj, 'val');
              ts = getAttr(obj, 'ts');
              if ((typeof value == 'boolean') && (typeof ts == 'number') && (value != lastValue)) {
                lastValue = value;
                if (value) {
                  onTime = ts;
                } else {
                  ed = (typeof ed === 'number' ? ed : 0) + (ts - onTime);
                }
              }
            }
          }
          console.info((Math.round(ed / 360000) / 10));
        }
      });
      
      

      Für größere Zeiträume muss der Parameter limit von getHistory vergrößert werden.
      Im Standard liest getHistory 2000 Timestamps für den Datenpunkt ein.
      Die Erweiterung des Limits ist nicht im Skript darüber enthalten, sondern wurde im Objekt von getHistory eingetragen.

      Das Skript funktioniert nun einwandfrei!
      Ich möchte mich bei allen Herzlich bedanken für den Support!

      Insbesondere bei @paul53 und @David-G :heart:

      1 Antwort Letzte Antwort
      0
      Antworten
      • In einem neuen Thema antworten
      Anmelden zum Antworten
      • Älteste zuerst
      • Neuste zuerst
      • Meiste Stimmen


      Support us

      ioBroker
      Community Adapters
      Donate

      714

      Online

      32.6k

      Benutzer

      82.2k

      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