Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
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

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    17
    1
    520

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

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

Exakt selben Zeitstempel bei mehreren States setzen?

Scheduled Pinned Locked Moved JavaScript
6 Posts 4 Posters 552 Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • B Offline
    B Offline
    bfit
    wrote on last edited by 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 Replies Last reply
    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
      wrote on last edited by
      #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: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Reply Last reply
      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 Offline
        BananaJoeB Offline
        BananaJoe
        Most Active
        wrote on last edited by
        #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 (VMware) für: >260 Geräte, 5 Switche, 7 AP, 10 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 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 || Creality CR-10 SE 3D-Drucker

        B 1 Reply Last reply
        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
          wrote on last edited by
          #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 Reply Last reply
          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
            wrote on last edited by
            #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: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

            1 Reply Last reply
            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
              wrote on last edited by 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 Reply Last reply
              1
              Reply
              • Reply as topic
              Log in to reply
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes


              Support us

              ioBroker
              Community Adapters
              Donate

              266

              Online

              32.7k

              Users

              82.5k

              Topics

              1.3m

              Posts
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
              ioBroker Community 2014-2025
              logo
              • Login

              • Don't have an account? Register

              • Login or register to search.
              • First post
                Last post
              0
              • Home
              • Recent
              • Tags
              • Unread 0
              • Categories
              • Unreplied
              • Popular
              • GitHub
              • Docu
              • Hilfe