Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Entwicklung
  4. Intervall zur Datenabfrage festlegen

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

Intervall zur Datenabfrage festlegen

Scheduled Pinned Locked Moved Entwicklung
adapterdatenbanktcp
7 Posts 2 Posters 1.9k Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • G Offline
    G Offline
    godlich2019
    wrote on last edited by godlich2019
    #1

    Ich bin dabei einen neuen Adapter zu entwickeln.

    Funktionsweise:

    • Er fragt von einem Solarmax Wechselrichter über TCP Daten ab.
    • Die Werte werden in ein array geschrieben

    Die Werte kann ich im Log ausgeben lassen:
    78620872-7f89-4299-87e0-f37fdf63466f-grafik.png

    Ziel ist aber natürlich, dass die Werte in einem bestimmen, festzulendem Abstand abgefragt werden.

    Ich habe mir auf Github den Code einiger Adapter angesehen, werde aber nicht schlau draus.

    Der gesamte code für den Adapter ist hier zu finden:
    https://github.com/SimonBard/iobroker.solarmax

    Schnup89S 1 Reply Last reply
    0
    • G godlich2019

      Ich bin dabei einen neuen Adapter zu entwickeln.

      Funktionsweise:

      • Er fragt von einem Solarmax Wechselrichter über TCP Daten ab.
      • Die Werte werden in ein array geschrieben

      Die Werte kann ich im Log ausgeben lassen:
      78620872-7f89-4299-87e0-f37fdf63466f-grafik.png

      Ziel ist aber natürlich, dass die Werte in einem bestimmen, festzulendem Abstand abgefragt werden.

      Ich habe mir auf Github den Code einiger Adapter angesehen, werde aber nicht schlau draus.

      Der gesamte code für den Adapter ist hier zu finden:
      https://github.com/SimonBard/iobroker.solarmax

      Schnup89S Offline
      Schnup89S Offline
      Schnup89
      wrote on last edited by
      #2

      @godlich2019
      Hi goldich2019,

      habe bei meinem Adapter einen Abnfrageintervall eingebaut.

      https://github.com/Schnup89/ioBroker.eq3-Thermostat/blob/master/main.js

      Beachte folgende Zeilen:
      12
      97-99
      187
      190

      Die Timer wird immer neu gestartet sobald die Funktion einmal durch ist.

      Gruß
      Schnup

      G 1 Reply Last reply
      1
      • Schnup89S Schnup89

        @godlich2019
        Hi goldich2019,

        habe bei meinem Adapter einen Abnfrageintervall eingebaut.

        https://github.com/Schnup89/ioBroker.eq3-Thermostat/blob/master/main.js

        Beachte folgende Zeilen:
        12
        97-99
        187
        190

        Die Timer wird immer neu gestartet sobald die Funktion einmal durch ist.

        Gruß
        Schnup

        G Offline
        G Offline
        godlich2019
        wrote on last edited by
        #3

        @Schnup89 sagte in Intervall zur Datenabfrage festlegen:

        Beachte folgende Zeilen:
        Die Timer wird immer neu gestartet sobald die Funktion einmal durch ist.

        Besten Dank! Von jemandem, der das gleiche hier sucht sollte noch Zeile 80 beachtet werden, da wird die Funktion in der onReady aufgerufen.

        1 Reply Last reply
        0
        • G Offline
          G Offline
          godlich2019
          wrote on last edited by
          #4

          Also ich bekomme es nicht korrek auf die Reihe.

          Es gibt bei mir keine Updates. Muss ich da nicht noch per

          setTimeout(function, milliseconds)
          

          sagen, dass die OnReady Funktion oder was anderes aufgerufen werden soll?

          Bei Dir wird ja dann in fEQ3Update die Funktion fUpdateDevObj aufgerufen. Da werden aber nur states gesetzt, aber warum sollte sich der state zwischenzeitlich geändert haben?

          1 Reply Last reply
          0
          • Schnup89S Offline
            Schnup89S Offline
            Schnup89
            wrote on last edited by Schnup89
            #5

            [EDIT 13:48Uhr]
            -> Hab mir gerade deinen Code angesehen, sieht gut aus, gibt die mal eine log-NAchricht aus vor Zeile 226 (lib.query(['PAC']);) zum schauen ob der Timer anständig läuft.

            Simmt, die Zeile 80 hab ich vergessen zu erwähnen, sorry.

            Der erneute Aufruf findet in der Funktion fEQUpdate in Zeile 190 statt.
            Hast du die Variable "this.config.inp_refresh_interval" ersetzt?

            Ich würde eine eigene Funktion schreiben, nicht die OnReady wiederholt aufrufen!

            Hier nochmal Zusammengefasst:

            let tmr_Datenabfrage = null;
            let nCounter = 0;
            async onReady() {
              [...]
              this.fDatenabfrage();
              [...]
            }
            fDatenabfrage() {
              [...]
              tmr_Datenabfrage = setTimeout(() =>this.fDatenabfrage(),1000);  // Sich selbst aufr.
              nCounter = nCounter +1;
              this.log.info(nCounter.toString());
              [...]
            }
            
            
            
            G 1 Reply Last reply
            0
            • Schnup89S Schnup89

              [EDIT 13:48Uhr]
              -> Hab mir gerade deinen Code angesehen, sieht gut aus, gibt die mal eine log-NAchricht aus vor Zeile 226 (lib.query(['PAC']);) zum schauen ob der Timer anständig läuft.

              Simmt, die Zeile 80 hab ich vergessen zu erwähnen, sorry.

              Der erneute Aufruf findet in der Funktion fEQUpdate in Zeile 190 statt.
              Hast du die Variable "this.config.inp_refresh_interval" ersetzt?

              Ich würde eine eigene Funktion schreiben, nicht die OnReady wiederholt aufrufen!

              Hier nochmal Zusammengefasst:

              let tmr_Datenabfrage = null;
              let nCounter = 0;
              async onReady() {
                [...]
                this.fDatenabfrage();
                [...]
              }
              fDatenabfrage() {
                [...]
                tmr_Datenabfrage = setTimeout(() =>this.fDatenabfrage(),1000);  // Sich selbst aufr.
                nCounter = nCounter +1;
                this.log.info(nCounter.toString());
                [...]
              }
              
              
              
              G Offline
              G Offline
              godlich2019
              wrote on last edited by
              #6

              @Schnup89 Vielen Dank! Das hat soweit geklappt.

              Eine Sache noch: Ich stelle ja beim Start des Adapters eine Verbindung her, dann wird alle X s eine Abfrage an den Wechselrichter gestellt.

              Die Verbindung sollte aber jeden Morgen wieder hergestellt werden, lässt sich das auch irgendwie steuern?

              1 Reply Last reply
              0
              • Schnup89S Offline
                Schnup89S Offline
                Schnup89
                wrote on last edited by Schnup89
                #7

                Super dass es geklappt hat :)

                Du könntest in der Main.js node-schedule nutzen.

                Nach Zeile 14 das Modul laden:

                var schedule = require('node-schedule');
                

                Ab Zeile 132 (nach dem subscribe am Ende der onReady-Funktion folgendes einfügen:

                const frueh = schedule.scheduleJob({hour: 05, minute: 30}, () => {
                  this.log.info('Baue jetzt um 05:30 Uhr Verbindung neu auf');
                  try {
                	await lib.init(this, '192.168.178.6', 12345);
                	this.log.info('Adapter wurde gestartet');
                  } catch (error) {
                        this.log.error(error);
                	this.log.info('Adapter start failed');
                }
                });
                

                Mit einem lib.init wird laut deiner Lib-Funktion die Verbindung vorher geschlossen (__disconnect), dann sollte das passen.

                1 Reply Last reply
                0
                Reply
                • Reply as topic
                Log in to reply
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes


                Support us

                ioBroker
                Community Adapters
                Donate

                712

                Online

                32.7k

                Users

                82.3k

                Topics

                1.3m

                Posts
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                ioBroker Community 2014-2025
                logo
                • Login

                • Don't have an account? Register

                • Login or register to search.
                • First post
                  Last post
                0
                • Home
                • Recent
                • Tags
                • Unread 0
                • Categories
                • Unreplied
                • Popular
                • GitHub
                • Docu
                • Hilfe