Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Zeitversatz zwischen State-Zeit und der Zeit einer Messung

    NEWS

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    • Neues Video über Aliase, virtuelle Geräte und Kategorien

    • Wir empfehlen: Node.js 22.x

    Zeitversatz zwischen State-Zeit und der Zeit einer Messung

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      stev-io last edited by

      Hallo zusammen,

      angenommen, ich habe einen Sensor, der mir JSON Daten zu Messungen liefert. Im JSON Dokument selbst steht dann ein Zeitstempel, wann diese Messung tatsächlich erfolgte. Wenn nun das Publizieren des JSON Dokumentes aufgrund Netzwerkschwäche etc. verzögert erfolgt, würde der Zeitstempel der Messung vom Zeitstempel des States abweichen. Hier mal ein Beispiel, welche Felder ich meine, auch wenn hier gerade kein Delay in den beiden Zeitstempeln zu sehen ist:

      0ab89e3c-c7e7-40cc-bdc7-6abc958a0fe8-image.png

      Um das auszutarieren hätte ich mir zum Beispiel für Skripte eine überladene setState Funktion gewünscht, in der man den Time stamp für den State setzen könnte. Scheinbar geht aber das nicht und auch sonst finde ich keine Option, den State Zeotpunkt auf den aus dem JSON Dokument zu setzen.

      Hintergrund: Ist ein ziemlicher Edge-Case aber ich habe eine Anwendung, bei der ich die Messwerte Sekundengenau historisiert brauche. In der Historie wird dann aber jeweils der State-Zeitstempel genutzt, der im Zweifel nicht passt. Das würde dann bedeuten, ich muss mir eine aufwändigere Historisierung als die mit Hausmitteln bauen.

      Es sei denn ich habe etwas übersehen oder ihr habt noch andere Tipps 😉

      Homoran 1 Reply Last reply Reply Quote 0
      • Homoran
        Homoran Global Moderator Administrators @stev-io last edited by

        @stev-io der Screenshot ist leider an der entscheidenden Stelle abgeschnitten.

        steht da noch ein Z?

        T paul53 Codierknecht 3 Replies Last reply Reply Quote 0
        • T
          ticaki Developer @Homoran last edited by

          @homoran sagte in Zeitversatz zwischen State-Zeit und der Zeit einer Messung:

          @stev-io der Screenshot ist leider an der entscheidenden Stelle abgeschnitten.

          steht da noch ein Z?

          Bin mir fast sicher das es so ist, das Format ist auf jeden Fall das: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON

          1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @Homoran last edited by paul53

            @homoran sagte: steht da noch ein Z?

            Wir haben noch Sommerzeit, also müsste die Differenz zu UTC 2 Stunden betragen.

            const time = '2023-10-02T15:56:12.000Z'
            
            log(formatDate(time, 'hh:mm:ss')); // 17:56:12
            
            1 Reply Last reply Reply Quote 0
            • Codierknecht
              Codierknecht Developer Most Active @Homoran last edited by Codierknecht

              @homoran sagte in Zeitversatz zwischen State-Zeit und der Zeit einer Messung:

              steht da noch ein Z?

              Dass da die Zeitzone nicht stimmt, ist offensichtlich.

              Er sagt aber ja auch:

              auch wenn hier gerade kein Delay in den beiden Zeitstempeln zu sehen ist

              @stev-io
              Du könntest das automatische Historisieren abschalten und den Wert manuell in die Logging-DB schreiben. Da kannst Du ja dann als Zeitstempel das mitgeben was im JSON steht.

              Alternative wäre noch, den Logging-Adapter aktiv zu lassen und nach der Änderung eines Wertes den ts des geloggten Wertes zu ändern.

              Das hier funktioniert jedenfalls nicht:

              const obj = getObject('0_userdata.0.test');
              obj.ts = new Date().getTime();
              setObject('0_userdata.0.test', obj, function (err) {
                  if (err) log('Cannot write object: ' + err);
              });
              

              Wäre auch unsinnig, da der Wert zu dem Zeitpunkt längst vom Logging-Adapter in die DB geschrieben wurde.

              paul53 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @Codierknecht last edited by paul53

                @codierknecht sagte: Das hier funktioniert jedenfalls nicht:

                Kann es auch nicht, denn obj.ts enthält den Zeitpunkt vom Erstellen des Objektes und nicht den aktuellen Zeitstempel. Der aktuelle Zeitstempel wird ausschließlich vom js-controller gesetzt.

                Codierknecht T 2 Replies Last reply Reply Quote 1
                • Codierknecht
                  Codierknecht Developer Most Active @paul53 last edited by

                  @paul53
                  Sowas in der Art hatte ich noch im Hinterkopf. Aber: Versuch macht klug 😁

                  1 Reply Last reply Reply Quote 0
                  • T
                    ticaki Developer @paul53 last edited by ticaki

                    @paul53 sagte in Zeitversatz zwischen State-Zeit und der Zeit einer Messung:

                    @codierknecht sagte: Das hier funktioniert jedenfalls nicht:

                    Kann es auch nicht, denn obj.ts enthält den Zeitpunkt vom Erstellen des Objektes und nicht den aktuellen Zeitstempel. Der aktuelle Zeitstempel wird ausschließlich vom js-controller gesetzt.

                    Vielleicht verstehe ich das falsch aber einen Zeitstempel kann man setzten:

                    const d = new Date().getTime() - 300000
                    setState('0_userdata.0.Test', {val:5, ack:false, ts:d})
                    

                    In diesem Fall hier, müssten man die States spiegel und die Zeit selbst setzten.
                    18:07
                    Bildschirmfoto 2023-10-02 um 18.07.23.png

                    paul53 S 2 Replies Last reply Reply Quote 2
                    • paul53
                      paul53 @ticaki last edited by paul53

                      @ticaki sagte: Zeitstempel kann man setzten:

                      Das war mir nicht bewusst. Wieder was gelernt 👍
                      An die Objekt-Version von setState() habe ich nicht mehr gedacht (zu lange her).

                      1 Reply Last reply Reply Quote 0
                      • S
                        stev-io @ticaki last edited by

                        @ticaki Wenn das funktioniert, ist es exakt das, was ich gesucht habe. Danke! Habe ich so aus der Doku nicht herausgelesen. Der Source scheint dies aber zu bestätigen. Werde ich dann testen. Danke!

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate
                        FAQ Cloud / IOT
                        HowTo: Node.js-Update
                        HowTo: Backup/Restore
                        Downloads
                        BLOG

                        929
                        Online

                        32.1k
                        Users

                        80.6k
                        Topics

                        1.3m
                        Posts

                        5
                        10
                        428
                        Loading More Posts
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes
                        Reply
                        • Reply as topic
                        Log in to reply
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                        The ioBroker Community 2014-2023
                        logo