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. Smartmeter Adapter - neue Daten Ereignis in Javascript

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Smartmeter Adapter - neue Daten Ereignis in Javascript

Geplant Angeheftet Gesperrt Verschoben JavaScript
4 Beiträge 2 Kommentatoren 366 Aufrufe 2 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.
  • Michael UrayM Offline
    Michael UrayM Offline
    Michael Uray
    schrieb am zuletzt editiert von
    #1

    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?

    apollon77A 1 Antwort Letzte Antwort
    0
    • Michael UrayM Michael Uray

      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?

      apollon77A Offline
      apollon77A Offline
      apollon77
      schrieb am zuletzt editiert von
      #2

      @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.

      Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

      • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
      • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
      1 Antwort Letzte Antwort
      1
      • Michael UrayM Offline
        Michael UrayM Offline
        Michael Uray
        schrieb am zuletzt editiert von
        #3

        @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
        });
        
        
        apollon77A 1 Antwort Letzte Antwort
        0
        • Michael UrayM Michael Uray

          @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
          });
          
          
          apollon77A Offline
          apollon77A Offline
          apollon77
          schrieb am zuletzt editiert von
          #4

          @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

          Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

          • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
          • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
          1 Antwort Letzte Antwort
          0
          Antworten
          • In einem neuen Thema antworten
          Anmelden zum Antworten
          • Älteste zuerst
          • Neuste zuerst
          • Meiste Stimmen


          Support us

          ioBroker
          Community Adapters
          Donate

          716

          Online

          32.6k

          Benutzer

          82.2k

          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