Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Smartmeter Adapter - neue Daten Ereignis in Javascript

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Smartmeter Adapter - neue Daten Ereignis in Javascript

    This topic has been deleted. Only users with topic management privileges can see it.
    • Michael Uray
      Michael Uray last edited by

      Ich würde gerne sobald neue Daten vom Smart-Meter angekommen sind eine Berechnung durchführen.

      Einen Test habe ich schon durchgeführt welcher auch klappt.

      on({ id: 'smartmeter.0.1-0:2_8_0.value', change: 'any' }, function (data) {
          console.log(((data.state.val - data.oldState.val) * (3600000 / ((data.state.ts - data.oldState.ts)))) * 200 + '  Zeit: ' + ((data.state.ts - data.oldState.ts) / 1000));
      });
      

      Ich möchte aber auch noch eine andere Berechnung durchführen, welche mehrere Datenpunkte des Zählers benötigt.
      Der Smart-Meter Adapter liest ja alle Daten auf einmal aus und schreibt diese dann in die ensprechenden Objekte.

      Kann ich davon ausgehen, dass bereits alle Objekte aktualisiert wurden, wenn das Ereignis im Beispiel oben auslöst?
      Oder gibt es besser ein besseres Ereignis welches ich verwenden kann? (z.B. Smartmeter Adaper update abgeschlossen).

      @apollon77 wüsstest du hier vielleicht eine Lösung?

      apollon77 1 Reply Last reply Reply Quote 0
      • apollon77
        apollon77 @Michael Uray last edited by

        @michael-uray sagte in Smartmeter Adapter - neue Daten Ereignis in Javascript:

        @apollon77 wüsstest du hier vielleicht eine Lösung?

        aktuell keine echte, ausser im Debug Log zu schauen was der "letzte" Datenpunkt ist der geschrieben wird und nimmst den als Trigger und ggf machst noch nen "warte noch 200ms oder so.

        1 Reply Last reply Reply Quote 1
        • Michael Uray
          Michael Uray last edited by

          @apollon77 said in Smartmeter Adapter - neue Daten Ereignis in Javascript:

          @michael-uray sagte in Smartmeter Adapter - neue Daten Ereignis in Javascript:

          @apollon77 wüsstest du hier vielleicht eine Lösung?

          aktuell keine echte, ausser im Debug Log zu schauen was der "letzte" Datenpunkt ist der geschrieben wird und nimmst den als Trigger und ggf machst noch nen "warte noch 200ms oder so.

          Ok danke, interessant, dass es es hier noch nichts gibt. Ich könnte mir vorstellen, dass es öfter vorkommt, dass Adapter mehrere Datenpunkte auf einmal beschreiben und dass man dann erst dann etwas durchführen möchte wenn alle States mit aktuellen Daten fertig beschrieben wurden.

          Ein Lösungsansatz wäre es z.B., dass der Adapter am Ende wenn alle States beschrieben wurden das bool smartmeter.0.info.statesUpdated auf true setzt und am Beginn des nächsten Lesevorganges wird es wieder auf false gesetzt.
          Dann könnte man dieses bool mit einem Event überwachen und so auf den Start und das Ende eines Lesevorganges reagieren.

          Hier noch der Vollständigkeit wegen mein aktueller Workaround, ich nehme an (hoffe), dass in 200ms alle Datenpunkte erfolgreich aktualisiert wurden nach dem das Event von einem (zufälligen) Datenpunkt getriggert wurde.

          on({ id: 'smartmeter.0.1-0:2_8_0.value', change: 'any' }, function (data) {
              setTimeout(() => {
                  console.log(((data.state.val - data.oldState.val) * (3600000 / ((data.state.ts - data.oldState.ts)))) * 200 + '  Zeit: ' + ((data.state.ts - data.oldState.ts) / 1000));
              }, 200); // 200ms delay time for calculation after event trigger to give smart meter adapter time to update all states
          });
          
          
          apollon77 1 Reply Last reply Reply Quote 0
          • apollon77
            apollon77 @Michael Uray last edited by

            @michael-uray am besten und sichersten wäre es das smartmeter einen sammelstate zb mit nem json aller Daten schreibt. Dann kann man den benutzen und hat alle Daten die zusammengehören. Das ist die sicherste Lösung.

            So machen es Adapter am ehesten wenn sowas gebraucht wird.

            Kannst gern mal ein issue in github dazu anlegen

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

            Support us

            ioBroker
            Community Adapters
            Donate

            779
            Online

            31.8k
            Users

            80.0k
            Topics

            1.3m
            Posts

            2
            4
            249
            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