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. Entwicklung
  4. Intervall zur Datenabfrage festlegen

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    15
    1
    558

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.9k

Intervall zur Datenabfrage festlegen

Geplant Angeheftet Gesperrt Verschoben Entwicklung
adapterdatenbanktcp
7 Beiträge 2 Kommentatoren 1.8k Aufrufe 3 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.
  • G Offline
    G Offline
    godlich2019
    schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
    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
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      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
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        0
        • G Offline
          G Offline
          godlich2019
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          0
          • Schnup89S Offline
            Schnup89S Offline
            Schnup89
            schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
            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
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              0
              • Schnup89S Offline
                Schnup89S Offline
                Schnup89
                schrieb am zuletzt editiert von 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 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

                566

                Online

                32.6k

                Benutzer

                81.9k

                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