Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Error/Bug
    4. [gelöst] sql-Adapter - einige sich selten ändernde Variablen werden nicht in die DB geschrieben

    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

    [gelöst] sql-Adapter - einige sich selten ändernde Variablen werden nicht in die DB geschrieben

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

      Wenn bei Werten zum Eintrag in die sql-db der Modus "nur bei Änderung speichern" angewählt wird findet

      der Eintrag in die Datenbank nur statt, wenn die Zeitpunkte der Datenänderung exakt identisch mit dem

      Zeitpunkt des Lesens der Daten übereinstimmt. Es wird also nicht auf Änderung des Wertes geprüft, sondern

      ob die Änderung genau jetzt erfolgt ist und nicht schon älter ist.

      Wenn aber Variable durch Scripte geändert werden ist der Zeitstempel der Änderung der Zeitstempel des Programmablaufs.

      Dieser Zeitpunkt kann bis zu 30 Sekunden (dem Abstand des Polling von hm-rega Aufrufen) vom Zeitpunkt

      der Datenänderung unterscheiden. Daher wird der Wert nicht in die sql-db geschrieebn, obwohl er geändert wurde.

      Lösung:

      In /opt/iobroker/node_modules/iobroker.sql/main.js hatte ich in der Funktion pushHistory(id, state) gesehen, dass

      in der Zeile 904 bei geseztem Flag "nur bei Änderung" KEIN Eintrag in die sql-db stattfindet, wenn diese beiden Zeitstempel ungleich sind.

      Also der geänderte Programmcode: (das Original steht noch als Kommentar drin):

              // if (sqlDPs[id].state && settings.changesOnly && (state.ts !== state.lc)) return;
              if (sqlDPs[id].state && settings.changesOnly && ((state.ts - state.lc) >= 30)) return;
      

      Und schon werden alle Daten in die sql-db geschrieben, deren Änderung innerhalb der letzten 30 Sekunden stattgefunden haben.

      Mein Problem hat sich damit gelöst.

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

      Support us

      ioBroker
      Community Adapters
      Donate

      652
      Online

      31.8k
      Users

      80.0k
      Topics

      1.3m
      Posts

      1
      1
      602
      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