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

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    14
    1
    126

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    12
    1
    563

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.7k

Exakt selben Zeitstempel bei mehreren States setzen?

Geplant Angeheftet Gesperrt Verschoben JavaScript
6 Beiträge 4 Kommentatoren 491 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.
  • 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: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      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 (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 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 750W kaskadiert || Creality CR-10 SE 3D-Drucker

        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: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

            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
              Antworten
              • In einem neuen Thema antworten
              Anmelden zum Antworten
              • Älteste zuerst
              • Neuste zuerst
              • Meiste Stimmen


              Support us

              ioBroker
              Community Adapters
              Donate

              874

              Online

              32.5k

              Benutzer

              81.8k

              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