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. Skripten / Logik
  4. JavaScript
  5. Latenzzeit beim Schreiben eines Zustandes

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

Latenzzeit beim Schreiben eines Zustandes

Scheduled Pinned Locked Moved JavaScript
14 Posts 4 Posters 1.1k Views 4 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.
  • A Offline
    A Offline
    andre1000
    wrote on last edited by
    #1

    Moin zusammen,

    in meinem Projekt ist mir aufgefallen, dass sehr lange Latenzzeiten von ca. 50ms für die Änderung eines Zustandes existieren. Ist diese Zeit Normal?

    Hier ein Beispielcode in Javascript:

    setState('testvariable',1);
    log(getState('testvariable').val);
    setTimeout(function() {log(getState('testvariable').val)},10);
    setTimeout(function() {log(getState('testvariable').val)},40);
    setTimeout(function() {log(getState('testvariable').val)},50);
    setTimeout(function() {log(getState('testvariable').val)},60);
    
    1 Reply Last reply
    0
    • paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by paul53
      #2

      Auf meinem RasPi2 ist die Latenzzeit von setState() + getState() ca. 12 +/- 6 ms. Allerdings ist die CPU-Auslastung sehr gering.

      JS_Laufzeit_setState_getState.JPG

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Reply Last reply
      0
      • apollon77A Offline
        apollon77A Offline
        apollon77
        wrote on last edited by
        #3

        Das hängt von sehr vielen Faktoren ab. JavaScript arbeitet Asynchron und nodejs ist Single-Threaded! Es wird also quasi die Arbeit intern "gequeued" (die sog. Event-Loop) und nacheinander abgearbeitet.

        Bedeutet: ein "getState" direkt nach einem "setState" wird NIEMALS den neuen Wert haben.

        Wie lange es dauert hängt davon ab:

        • Was die sendende Instanz (in dem Fall Javascript) so alles parallel zu tun hat.
        • Was der js.controller (empfangene Instanz) es so zu tun hat weil die es dann als Subscriped Wert wieder an JavaScript Instanz raussendet
        • Und damit nochmal: Was die empfangene Javascript-Instanz so zu tun (die bekommt ja im Standard ALLE State changes gesendet) hat bis der Wert aktualisiert wurde in den internen Datenstrukturen.

        Weil erst danach bekommst Du mit getState den Wert (unter der Annahme du nimmst die Standardeinstellung).

        Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

        • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
        • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
        1 Reply Last reply
        0
        • A Offline
          A Offline
          andre1000
          wrote on last edited by
          #4

          Hallo apollon,

          danke für die Ausführug. Du meinst, ... unter Annahme der Standardeinstellungen...
          Existiert ggf die Möglichkeiten durch Einstellungen hier etwas zu optimieren?

          1 Reply Last reply
          0
          • apollon77A Offline
            apollon77A Offline
            apollon77
            wrote on last edited by
            #5

            Gib uns doch mal ein paar mehr Infos zu Deinem System unter berücksichtung der Themen die ich angesprochen habe

            Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

            • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
            • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
            1 Reply Last reply
            0
            • A Offline
              A Offline
              andre1000
              wrote on last edited by
              #6

              Hallo,

              mein Projekt ist noch ziemlich übersichtlich. Ich nutze nodered als Interface zu den Steuerungen, die per CAN angesprochen werden.
              Beim Ausführen des Testscripts wurde kein weiteres Script getriggert.
              Allgemein hat js.controller som um die 40 Triggerbedinungen, die jeweils mit getState und setState arbeiten. Jedoch werden von diesen Triggerbedingungen maximal 4 parallel ausgeführt.
              ioBroker läuft auf einem BananaPi M1.
              Ich hoffe hiermit konnte ich das System ausreichend zu beschreiben.

              1 Reply Last reply
              0
              • apollon77A Offline
                apollon77A Offline
                apollon77
                wrote on last edited by apollon77
                #7

                naja die Triggerbedingungen hat nicht der controller, sondern dein node.red, korrekt? Das beispiel von oben war aber eher aus dem JavaScript Adapter.

                Aber jetzt mal die Frage: Sind dir 50ms wirklich zu lang? Was hast Du als Anwendung vor wo es schneller sein muss?

                in solchen Fällen würde ich sagen: Stell mal auf redis um und schaue nochmal.

                Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

                • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
                • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
                1 Reply Last reply
                0
                • A Offline
                  A Offline
                  andre1000
                  wrote on last edited by
                  #8

                  Hallo,
                  ja, es stimmt, der erste Trigger kommt von NodeRed. Nur danach habe ich mehrere js gesteuerte Zustandstrigger.
                  Hier mals kurz der Ablauf bei mir:

                  • Taster wird von Steuerung erfasst und per CAN gesendet
                    Daten kommen
                  • von CAN über NodeRed in ioBroker
                  • Anaylse welcher Taster betätigt wurde
                  • Änderung des Zustandes in ioBroker
                  • Erstellen des CAN-Objektes für das Schalten
                  • Übertragen des Zustandes an NodeRed

                  All dies mach ich über Zustände. Aus diesem Grunde habe ich mit dem Zeitversatz ein paar Probleme.

                  1 Reply Last reply
                  0
                  • apollon77A Offline
                    apollon77A Offline
                    apollon77
                    wrote on last edited by
                    #9

                    Ok, hast du mal Redis versucht ob es was ändert?
                    BananaPi ... SD Karte oder gescheiter Storage dahinter? wie geht es dem System so auslastungstechnisch ... RAM und CPU und so. WIeviel CPU braucht der js.controller im Schnitt?

                    Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

                    • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
                    • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
                    1 Reply Last reply
                    0
                    • A Offline
                      A Offline
                      andre1000
                      wrote on last edited by
                      #10

                      Redis habe ich noch nicht ausprobiert. Hier wage ich mich aktuell noch nicht ran.
                      Am BananaPI habe ich eine SSD Platte auf der das gesamte System läüft. Gesamtprozessorlast ('system.host.BPI-M1-ioBroker.load') liegt im Schnitt bei 85% und RAM ('system.host.BPI-M1-ioBroker.mem') bei 35% bei den Instanzen wird für den js-.controller 80MB angezeigt..
                      Existiert eine gute Anleitung, wie ich Redis einfach in ioBroker implementiert bekomme und im js.controller anspreche?

                      HomoranH apollon77A 2 Replies Last reply
                      0
                      • A andre1000

                        Redis habe ich noch nicht ausprobiert. Hier wage ich mich aktuell noch nicht ran.
                        Am BananaPI habe ich eine SSD Platte auf der das gesamte System läüft. Gesamtprozessorlast ('system.host.BPI-M1-ioBroker.load') liegt im Schnitt bei 85% und RAM ('system.host.BPI-M1-ioBroker.mem') bei 35% bei den Instanzen wird für den js-.controller 80MB angezeigt..
                        Existiert eine gute Anleitung, wie ich Redis einfach in ioBroker implementiert bekomme und im js.controller anspreche?

                        HomoranH Do not disturb
                        HomoranH Do not disturb
                        Homoran
                        Global Moderator Administrators
                        wrote on last edited by
                        #11

                        @andre1000 sagte in Latenzzeit beim Schreiben eines Zustandes:

                        Redis habe ich noch nicht ausprobiert. Hier wage ich mich aktuell noch nicht ran.

                        Solltest du.
                        Das hilft sehr bei dem dual core.

                        @andre1000 sagte in Latenzzeit beim Schreiben eines Zustandes:

                        Am BananaPI habe ich eine SSD Platte auf der das gesamte System läüft. Gesamtprozessorlast ('system.host.BPI-M1-ioBroker.load') liegt im Schnitt bei 85%

                        Hängt die direkt am SATA oder an usb?
                        Letzterer würde das erklären

                        kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                        Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                        der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                        1 Reply Last reply
                        0
                        • A andre1000

                          Redis habe ich noch nicht ausprobiert. Hier wage ich mich aktuell noch nicht ran.
                          Am BananaPI habe ich eine SSD Platte auf der das gesamte System läüft. Gesamtprozessorlast ('system.host.BPI-M1-ioBroker.load') liegt im Schnitt bei 85% und RAM ('system.host.BPI-M1-ioBroker.mem') bei 35% bei den Instanzen wird für den js-.controller 80MB angezeigt..
                          Existiert eine gute Anleitung, wie ich Redis einfach in ioBroker implementiert bekomme und im js.controller anspreche?

                          apollon77A Offline
                          apollon77A Offline
                          apollon77
                          wrote on last edited by apollon77
                          #12

                          @andre1000 Was sagt denn "top" so beim prozess js-controller ... auch 85%? Dann auf jeden Fall Redis bitte! Und dann ist das auch der grund für die Latenz. Denke es ist I/O ...

                          Redis: vllt hat @Homoran no e bessere Anleritung, ich hätte https://github.com/ioBroker/ioBroker.js-controller#using-redis-as-states-db

                          Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

                          • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
                          • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
                          HomoranH 1 Reply Last reply
                          0
                          • apollon77A apollon77

                            @andre1000 Was sagt denn "top" so beim prozess js-controller ... auch 85%? Dann auf jeden Fall Redis bitte! Und dann ist das auch der grund für die Latenz. Denke es ist I/O ...

                            Redis: vllt hat @Homoran no e bessere Anleritung, ich hätte https://github.com/ioBroker/ioBroker.js-controller#using-redis-as-states-db

                            HomoranH Do not disturb
                            HomoranH Do not disturb
                            Homoran
                            Global Moderator Administrators
                            wrote on last edited by
                            #13

                            @apollon77
                            Ich muss da mal was neu machen

                            Das letzte habe ich in den readme zu den neuen images geschrieben., entspricht aber dem vin dir verlinkten.

                            Ich bekomme hier nichts reinkopiert
                            Was ist das denn?

                            kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                            der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                            1 Reply Last reply
                            0
                            • A Offline
                              A Offline
                              andre1000
                              wrote on last edited by
                              #14

                              Ich habe redis installiert. Nach dem ersten Test sah es wirklich super aus. Antwortzeit nach ca. 10ms. Jetzt zwei Stunden später ist die Zeit auf ca. 35ms angestiegen. Werde morgen mal das geasmte System neu starten und dann berichten.

                              @Homoran die SSD ist direkt am SATA Anschluss dran.

                              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

                              348

                              Online

                              32.6k

                              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