Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Wie "pollt" ein Adapter neue Werte ?

    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

    Wie "pollt" ein Adapter neue Werte ?

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

      Hallo,

      wenn ich eine Adapter Instanz erzeuge…wie holt sich diese Instanz regelmässig neue, aktuelle Werte von einer REST API?

      Ich meine damit nicht wie ich die REST API anspreche (Ajax) sondern wo platziere ich das "pollen" dieses GET Requests?

      Ich vermute dies steckt bei anderen Adaptern in main.js (bzw. <adaptername>.js wie yr.js). Wie holt sich den

      der "yr" Adapter neuen Werte und wie oft? Anderes Beispiel wäre auch OK.

      🙂

      Konkret geht es um meinen Spark Adapter:

      • Ich kann über eine REST API mir neue aktuelle Werte holen (oder auch über einen Event benachrichtigt werden). Nur wie "trigger" ich dies?

      • Werden die ioBroker Adapter nach einander vom "iobroker.js-controller" aufgerufen (Round Robbin)?

      Danke

      Wie gesagt wenn ich fertig bin will ich das Ganze als "Giveback" auf unserem Wiki erklären.

      Steve</adaptername>

      1 Reply Last reply Reply Quote 0
      • S
        StefSign last edited by

        Hallo,

        es scheint als ob man zwei Möglichkeiten hat:

        • Im Hauptprogramm (main.js) ein setInterval() setzen mit dem regelmässig ein "pollen" stattfindet.

        • Im io-package.json den "mode" auf schedule setzen.

        Gibt es noch andere Möglichkeiten?

        Steve

        1 Reply Last reply Reply Quote 0
        • S
          smiling_Jack last edited by

          Ich wis nicht so richtig was du meinst ? Kommunikation innerhalb iobroker, als ziwschen controller und Adapter sollte event orientirt laufen also über soket.io (subscripe)

          Adapter werden nicht aufgerufen sondern einmal gestartet dann laufen sie selbstständig.

          1 Reply Last reply Reply Quote 0
          • S
            StefSign last edited by

            Hallo SmilingJack,

            die Frage die sich mir stellt ist: "Wie kann ich es triggern das ein Adapter regelmässig Werte (Temperatur) ausliest?" Diese Werte befinden sich in einer Public Cloud mit einer REST API (https://spark.io/…) . Ich habe gesehen das der OWFS Adapter wohl "timer = setInterval(pollAll, adapter.config.interval * 1000);" nutzt.

            Wie man einen AJAX ($.get) Aufruf macht weiss ich schon…obwohl anscheinend manche Adapter über einen Socket (socket.emit('httpGet'...) gehen. Aber das ist eine andere Frage.

            Danke

            Steve

            1 Reply Last reply Reply Quote 0
            • S
              smiling_Jack last edited by

              Wie man es am besten macht hänt von dem Interval und der Verbindung ab. Wenn du nur alle paar sekunden oder länger pollen wilst kanst du gut mit setintervall arbeiten. Ist auch ok

              Wenn es aber schneller sein soll würde ich es nicht so machen ist zu riskant das der nächste intervall schon kommt obwohl der eine noch nicht fertig ist.

              Beim S7 adapter habe ich es grade so gemacht

               function poll(){
              // hier den code zum pollen und schreiben in iobroker
              
              setTimeout(poll(),500);
              }
              
              poll();
              
              

              der Nachtei ist das das pollen jetzt keinen festen intervall hat bei mir schwankt die Zeit die für das Pollen und Verarbeiten benötigt wird 40-80ms im normal fall. Wenn ich allerdings am Rechner von dem ich polle was mache dann kann es auch mal 200-600ms dauern. Dazu kommen dann immer die 500ms warte zeit. Aber ist ist halt recht sicher.

              1 Reply Last reply Reply Quote 0
              • S
                StefSign last edited by

                Morgen,

                danke für die detailierte Antwort, werde also erstmal mit setinterval probieren.

                Bei deinem Beispiel ist mir eins nicht klar…dies ist doch ein einmaliger Vorgang, d.h. mit 500ms Verzögerung wird die Funktion poll() aufgerufen und dann nie wieder? Werd' mir gleich mal S7 genauer ansehen.

                Was hältst du von der Scheduler Möglichkeit? Scheint mir sehr an den UNIX Scheduler angelehnt zu sein. Ist wohl zu langsam?

                Danke

                Steve

                1 Reply Last reply Reply Quote 0
                • S
                  StefSign last edited by

                  Hi SmillingJack,

                  gerade mich mal schlau gemacht. Also mit S7 ist nicht eine russische Fluggesellschaft gemeint sondern eine gute alte Simatic. Aber Simatic und ioBroker? Meine letzte Erfahrung mit Simatic 20 Jahre her (KOP).

                  🙂

                  Code:

                  • Ich sehe in Deinem Code nicht (auf die Schnelle) wie hier ein Loop stattfindet. Es scheint mir ein einmaliger Aufruf…moment (gerade noch mal reingeschaut) ...machst du hier einen rekursiven Aufruf von poll() in poll()? Aber warum ein rekursiver Aufruf von poll() mit und ohne setTimeOut()?

                  Bis dann

                  Steve

                  1 Reply Last reply Reply Quote 0
                  • Bluefox
                    Bluefox last edited by

                    Es hängt alles vom Zykluszeit ab. Falls die Info in sekunden/einige Minuten Bereich liegt, dann ist es besser setInterval zu benutzen.

                    Falls 5 Minuten und mehr dann scheduler Modus benutzen.

                    Falls weniger Sekunden oder sogar ms Bereich, dann setTimeout mit widerholten Aufruf.

                    Was für ein Zyklus hast du?

                    1 Reply Last reply Reply Quote 0
                    • S
                      StefSign last edited by

                      Hallo Bluefox,

                      dachte Du bist im Urlaub ohne Strom?

                      🙂

                      Bei mir geht es erstmal um das Auslesen von Temperatur und Luftfeuchtigkeit, ich denke hier muss ich nicht im ms Bereich abrufen. Aber wie gesagt der Spark Core kann mehr…

                      Schöne Ostern im Kreis der Familie

                      Steve

                      1 Reply Last reply Reply Quote 0
                      • Bluefox
                        Bluefox last edited by

                        Wenn es um Temperatur geht, dann sicherlich 3 Minuten Pollzeit? Oder?

                        Machst du noch irgendwas beim Start ausser die Werte lesen? Z.B. Datenpunkte anlegen komplizierte Kommunikation aufbauen?

                        Falls ja, mache setInterval, falls nicht, dann schedule - mode, wie dwd und yr.

                        1 Reply Last reply Reply Quote 0
                        • S
                          StefSign last edited by

                          Moin, Moin,

                          es kommt immer anders als man denkt…eigentlich müssten alle von uns die asynchrone Calls machen, ein Problem mit der Response Time haben?

                          REST Aufruf in die Spark Cloud:

                          • Es hat sich herausgestellt das ein fixes "pollen" (z.B. alle 3 sek) keinen Sinn mach, da der AJAX Aufruf asynchron ist und ich nicht weiss ob

                          er 1 Sekunde oder 1 Minute (oder länger) dauert. Ist das nicht schon eine "Race Condition"…man weiss nicht welcher Call zuerst zurück kommt?

                          • Die AJAX Aufrufe muss ich einer nach den anderen machen, soll heissen erst die Spark Device holen (1. GET) und dann Ihren Status (2. GET). Also

                          hier habe ich auch noch eine bestimmte Reihenfolge.

                          ==> Werde wohl daher wohl mit jQuery Promises arbeiten müssen.

                          @All: Wie macht Ihr das?

                          Thx

                          Steve

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate
                          FAQ Cloud / IOT
                          HowTo: Node.js-Update
                          HowTo: Backup/Restore
                          Downloads
                          BLOG

                          952
                          Online

                          31.9k
                          Users

                          80.2k
                          Topics

                          1.3m
                          Posts

                          3
                          11
                          2746
                          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