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,

      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

                        924
                        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