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. Exakt selben Zeitstempel bei mehreren States setzen?

NEWS

  • wichtiges UPDATE für controller 7.2.2 im stable
    HomoranH
    Homoran
    10
    1
    2.7k

  • Neues YouTube-Video: Visualisierung im Devices-Adapter
    BluefoxB
    Bluefox
    16
    1
    4.8k

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

Exakt selben Zeitstempel bei mehreren States setzen?

Geplant Angeheftet Gesperrt Verschoben JavaScript
6 Beiträge 4 Kommentatoren 646 Aufrufe 3 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.
  • B Offline
    B Offline
    bfit
    schrieb am zuletzt editiert von bfit
    #1

    Hallo!

    Ich berechne mit einem Script im 5-Minuten-Takt die Mittelwerte mehrerer States, deren Daten eigentlich im Sekundentakt eintrudeln (da ich sie in dieser Zeitauflösung nicht lange in der MySQL halten möchte). Da Script wird also alle 5 Min ausgeführt, durchläuft eine Schleife durch die verschiedenen States, greift sich deren Werte der letzten 5 Min, berechnet und schreibt den jeweiligen Mittelwert dann mittels setSetate jeweils in einem zusätzlichen State weg.

    Nun ist es es logischerweise so, dass das Skript ein paar Millisekunden benötigt, um die Schleife zu durchlaufen, entsprechend unterscheiden sich die Zeitstempel der neue erzeugten States um einige Millisekunden.

    Das stört mich, da ich die Werte in Grafana gerne in einem gestapelten Diagramm anzeigen möchte. Durch die leicht abweichenden Zeitstempel klappt das nicht so, wie ich mir das wünsche.

    Ist es möglich, bei setState den Zeitstempel für den geschriebenen State mitzugeben? Also quasi vorzugeben, dass bei allen Schleifendurchläufen bei setState der selbe Zeitstempel (der z.B. über Date.now() vor dem ersten Schleifendurchlauf erzeugt wird) verwendet wird?

    paul53P BananaJoeB OliverIOO 4 Antworten Letzte Antwort
    0
    • B bfit

      Hallo!

      Ich berechne mit einem Script im 5-Minuten-Takt die Mittelwerte mehrerer States, deren Daten eigentlich im Sekundentakt eintrudeln (da ich sie in dieser Zeitauflösung nicht lange in der MySQL halten möchte). Da Script wird also alle 5 Min ausgeführt, durchläuft eine Schleife durch die verschiedenen States, greift sich deren Werte der letzten 5 Min, berechnet und schreibt den jeweiligen Mittelwert dann mittels setSetate jeweils in einem zusätzlichen State weg.

      Nun ist es es logischerweise so, dass das Skript ein paar Millisekunden benötigt, um die Schleife zu durchlaufen, entsprechend unterscheiden sich die Zeitstempel der neue erzeugten States um einige Millisekunden.

      Das stört mich, da ich die Werte in Grafana gerne in einem gestapelten Diagramm anzeigen möchte. Durch die leicht abweichenden Zeitstempel klappt das nicht so, wie ich mir das wünsche.

      Ist es möglich, bei setState den Zeitstempel für den geschriebenen State mitzugeben? Also quasi vorzugeben, dass bei allen Schleifendurchläufen bei setState der selbe Zeitstempel (der z.B. über Date.now() vor dem ersten Schleifendurchlauf erzeugt wird) verwendet wird?

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

      @benefit sagte: Ist es möglich, bei setState den Zeitstempel für den geschriebenen State mitzugeben?

      Nein, der Zeitstempel wird vom js-controller gesetzt.

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: Asus PN 42 / N100 / 8 GB / 500 GB; Proxmox mit 2 VM (iob / openCCU)

      1 Antwort Letzte Antwort
      1
      • B bfit

        Hallo!

        Ich berechne mit einem Script im 5-Minuten-Takt die Mittelwerte mehrerer States, deren Daten eigentlich im Sekundentakt eintrudeln (da ich sie in dieser Zeitauflösung nicht lange in der MySQL halten möchte). Da Script wird also alle 5 Min ausgeführt, durchläuft eine Schleife durch die verschiedenen States, greift sich deren Werte der letzten 5 Min, berechnet und schreibt den jeweiligen Mittelwert dann mittels setSetate jeweils in einem zusätzlichen State weg.

        Nun ist es es logischerweise so, dass das Skript ein paar Millisekunden benötigt, um die Schleife zu durchlaufen, entsprechend unterscheiden sich die Zeitstempel der neue erzeugten States um einige Millisekunden.

        Das stört mich, da ich die Werte in Grafana gerne in einem gestapelten Diagramm anzeigen möchte. Durch die leicht abweichenden Zeitstempel klappt das nicht so, wie ich mir das wünsche.

        Ist es möglich, bei setState den Zeitstempel für den geschriebenen State mitzugeben? Also quasi vorzugeben, dass bei allen Schleifendurchläufen bei setState der selbe Zeitstempel (der z.B. über Date.now() vor dem ersten Schleifendurchlauf erzeugt wird) verwendet wird?

        BananaJoeB Online
        BananaJoeB Online
        BananaJoe
        Most Active
        schrieb am zuletzt editiert von
        #3

        @benefit Du schreibst das in einen State - der wiederum mit dem SQL-Adapter verbunden ist und die Werte aufzeichnet?
        Schau mal in die Beschreibung des SQL-Adapters, du kannst auch direkt Werte mit Zeitstempel in die Datenbank schreiben:
        https://github.com/ioBroker/ioBroker.sql#storestate

        Das siehst du dann zwar nicht mehr im Datenpunkt, ECharts & Co aber ja (also auch Grafana). Ich nutze das z.B. für die Vorhersage meiner Solaranlage.

        Du nutzt InfluxDB? Kenne ich mich nicht mit aus, scheint es dort aber auch zu geben: https://github.com/ioBroker/ioBroker.influxdb#storestate

        ioBroker@Ubuntu 24.04 LTS (Proxmox VM) für: >260 Geräte, 6 Switche, 7 AP, 10 IP-Cam, 1 NAS 42TB, 1 Proxmox 128GB 15TB, 2 Proxmox 32GB 1TB, 1 Hyper-V 52GB 42TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV APC 750W kaskadiert

        B 1 Antwort Letzte Antwort
        1
        • B bfit

          Hallo!

          Ich berechne mit einem Script im 5-Minuten-Takt die Mittelwerte mehrerer States, deren Daten eigentlich im Sekundentakt eintrudeln (da ich sie in dieser Zeitauflösung nicht lange in der MySQL halten möchte). Da Script wird also alle 5 Min ausgeführt, durchläuft eine Schleife durch die verschiedenen States, greift sich deren Werte der letzten 5 Min, berechnet und schreibt den jeweiligen Mittelwert dann mittels setSetate jeweils in einem zusätzlichen State weg.

          Nun ist es es logischerweise so, dass das Skript ein paar Millisekunden benötigt, um die Schleife zu durchlaufen, entsprechend unterscheiden sich die Zeitstempel der neue erzeugten States um einige Millisekunden.

          Das stört mich, da ich die Werte in Grafana gerne in einem gestapelten Diagramm anzeigen möchte. Durch die leicht abweichenden Zeitstempel klappt das nicht so, wie ich mir das wünsche.

          Ist es möglich, bei setState den Zeitstempel für den geschriebenen State mitzugeben? Also quasi vorzugeben, dass bei allen Schleifendurchläufen bei setState der selbe Zeitstempel (der z.B. über Date.now() vor dem ersten Schleifendurchlauf erzeugt wird) verwendet wird?

          OliverIOO Offline
          OliverIOO Offline
          OliverIO
          schrieb am zuletzt editiert von
          #4

          @benefit
          Ich würde die Angleichung auf 5 Minuten im sql machen
          da könntest du die Minuten mit folgender Formel angleichen (aus javascript, aber gibts bestimmt auch für grafana

          Math.floor(minuten/5)*5
          

          Problematisch wird es, wenn die Werte genau an der 5 Minutengrenze geschrieben wird
          12:04:59
          12:05:01
          Dann fällt der eine Wert in das eine Raster und der andere in den nächsten Raster.

          Meine Adapter und Widgets
          TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
          Links im Profil

          1 Antwort Letzte Antwort
          1
          • B bfit

            Hallo!

            Ich berechne mit einem Script im 5-Minuten-Takt die Mittelwerte mehrerer States, deren Daten eigentlich im Sekundentakt eintrudeln (da ich sie in dieser Zeitauflösung nicht lange in der MySQL halten möchte). Da Script wird also alle 5 Min ausgeführt, durchläuft eine Schleife durch die verschiedenen States, greift sich deren Werte der letzten 5 Min, berechnet und schreibt den jeweiligen Mittelwert dann mittels setSetate jeweils in einem zusätzlichen State weg.

            Nun ist es es logischerweise so, dass das Skript ein paar Millisekunden benötigt, um die Schleife zu durchlaufen, entsprechend unterscheiden sich die Zeitstempel der neue erzeugten States um einige Millisekunden.

            Das stört mich, da ich die Werte in Grafana gerne in einem gestapelten Diagramm anzeigen möchte. Durch die leicht abweichenden Zeitstempel klappt das nicht so, wie ich mir das wünsche.

            Ist es möglich, bei setState den Zeitstempel für den geschriebenen State mitzugeben? Also quasi vorzugeben, dass bei allen Schleifendurchläufen bei setState der selbe Zeitstempel (der z.B. über Date.now() vor dem ersten Schleifendurchlauf erzeugt wird) verwendet wird?

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

            @benefit sagte: das Skript ein paar Millisekunden benötigt, um die Schleife zu durchlaufen, entsprechend unterscheiden sich die Zeitstempel der neue erzeugten States um einige Millisekunden.

            Schreibe das Ergebnis der Schleifen in Variablen und führe zum Schluss alle setState() unmittelbar hintereinander aus. Dann liegen die Zeitstempel nur wenige ms auseinander.

            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
            Produktiv: Asus PN 42 / N100 / 8 GB / 500 GB; Proxmox mit 2 VM (iob / openCCU)

            1 Antwort Letzte Antwort
            1
            • BananaJoeB BananaJoe

              @benefit Du schreibst das in einen State - der wiederum mit dem SQL-Adapter verbunden ist und die Werte aufzeichnet?
              Schau mal in die Beschreibung des SQL-Adapters, du kannst auch direkt Werte mit Zeitstempel in die Datenbank schreiben:
              https://github.com/ioBroker/ioBroker.sql#storestate

              Das siehst du dann zwar nicht mehr im Datenpunkt, ECharts & Co aber ja (also auch Grafana). Ich nutze das z.B. für die Vorhersage meiner Solaranlage.

              Du nutzt InfluxDB? Kenne ich mich nicht mit aus, scheint es dort aber auch zu geben: https://github.com/ioBroker/ioBroker.influxdb#storestate

              B Offline
              B Offline
              bfit
              schrieb am zuletzt editiert von bfit
              #6

              Vielen Dank für die vielen hilfreichen Antworten!

              Habe es nun tatsächlich so gelöst wie von @BananaJoe vorgeschlagen. Da ich die States im ioBroker sonst nicht benötige, schreibe ich sie mit storeState von sql-Adapter direkt in die MySQL:

              sendTo('sql.0', 'storeState', {
                                  id: newStateName,
                                  state: {ts: timeStamp, val: averageValue, ack: false, from: 'newStateName'}
                              });
              

              Funktioniert klasse!

              1 Antwort Letzte Antwort
              1

              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

              474

              Online

              33.0k

              Benutzer

              83.4k

              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