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. Frage an die Javascript Profis

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.6k

Frage an die Javascript Profis

Geplant Angeheftet Gesperrt Verschoben Entwicklung
5 Beiträge 4 Kommentatoren 1.5k Aufrufe
  • Ä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.
  • ruhigundrelaxedR Offline
    ruhigundrelaxedR Offline
    ruhigundrelaxed
    schrieb am zuletzt editiert von
    #1

    Hallo Profis,

    ich habe da mal ne Frage. :roll:

    Folgender Sachverhalt:

    Bei meinem EIBD Adapter, der an sich gut funktioniert existiert ein Kunstgriff, der mir so nicht passt.

    Das muss eleganter gehen…

    Um mit dem eibd zu kommunizieren nutze ich dies: https://github.com/andreek/node-eibd library.

    Die ist auch schön asynchron, was ja eigentlich auch gut so ist.

    Es wird also ein callback ausgeführt, wenn einen Request den ich angefordert habe ausgeführt worden ist. Soweit so gut. Die Schwierigkeit ist allerdings die Definition "ausgeführt". So wie ich das deute wird der callback geworfen, wenn eibd den Befehl entgegengenommen hat. Nicht wenn eibd den Befehl tatsächlich auf dem Bus abgesetzt hat. Ist der Bus busy, so queued eibd den Befehl und führt ihn aus wenn wieder idle.

    Für die o.g. eibd library ist das nicht einsehbar. Sobald die lib einen Request/Befehl an eibd abgegeben hat ist für sie die Sache erledigt. Der Callback wird geworfen.

    Das bedeutet, ich kann mit der lib schneller Daten an eibd senden, als dieser es auf den bus absetzen kann.

    Ich habe mal ausprobiert, was passiert wenn ich es so richtig qualmen lasse. ca. 40 Request pro Sekunde.

    Das Ergebnis war wie erwartet. Eibd queued die Befehle, und rotzt sie dann so schnell wie möglich auf den Bus.

    Was dann uncool ist, da dann sonst nicht mehr viel auf dem Bus geht. / Es steht also fast alles...

    Meine Lösung, die imho nicht so elegant ist, ist folgende:

    Ich schreibe alle angefragten Befehle / Requests in einen eigenen Buffer und arbeite diesen dann über einen setinterval loop ab den ich auf 250ms gestellt habe. So ist gewährleistet, dass der Bus nicht überfahren wird.

    Dieser Loop läuft natürlich die ganze Zeit weiter, auch wen der Buffer leer ist. Das kann nicht optimal sein.

    Wie würde ein Profi das lösen?

    Gruß

    Martin

    iobroker auf debian bullseye amd64 (i5-8259U)
    homematic -> homegear -> HM-CFG-LAN ~> 11 x hm-cc-rt-dn | 3 x hm-sec-sd
    knx -> eibd -> SCN‐IP000.01 ~> 4 x AMS-1216.01 | (1 x JAL-0810.01 | 1 x JAL-0410.01) | 2 x BE-16000.01 | …

    1 Antwort Letzte Antwort
    0
    • K Offline
      K Offline
      kleinerDrache
      schrieb am zuletzt editiert von
      #2

      Bin zwar kein Profi aber kannst Du den Puffer nicht mit einer abfrage auf "0" versehen ?

      Puffer == "0" schleife aus

      Puffer <> "0" schleife startet wieder

      ca 30 HM-Geräte , diverse Arduinos mit rfm12, Enocean Geräte und ein paar Lacrosse Senoren. Cubietruck mit Armbian als Zentrale keinerlei CCU.

      1 Antwort Letzte Antwort
      0
      • paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von
        #3

        @kleinerDrache:

        aber kannst Du den Puffer nicht mit einer abfrage auf "0" versehen ? `
        Dazu müsste er (bzw. die Software) vorausschauende Fähigkeiten haben :o

        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 Antwort Letzte Antwort
        0
        • BluefoxB Offline
          BluefoxB Offline
          Bluefox
          schrieb am zuletzt editiert von
          #4

          @ruhigundrelaxed:

          Hallo Profis,

          ich habe da mal ne Frage. :roll:

          Folgender Sachverhalt:

          Bei meinem EIBD Adapter, der an sich gut funktioniert existiert ein Kunstgriff, der mir so nicht passt.

          Das muss eleganter gehen…

          Um mit dem eibd zu kommunizieren nutze ich dies: https://github.com/andreek/node-eibd library.

          Die ist auch schön asynchron, was ja eigentlich auch gut so ist.

          Es wird also ein callback ausgeführt, wenn einen Request den ich angefordert habe ausgeführt worden ist. Soweit so gut. Die Schwierigkeit ist allerdings die Definition "ausgeführt". So wie ich das deute wird der callback geworfen, wenn eibd den Befehl entgegengenommen hat. Nicht wenn eibd den Befehl tatsächlich auf dem Bus abgesetzt hat. Ist der Bus busy, so queued eibd den Befehl und führt ihn aus wenn wieder idle.

          Für die o.g. eibd library ist das nicht einsehbar. Sobald die lib einen Request/Befehl an eibd abgegeben hat ist für sie die Sache erledigt. Der Callback wird geworfen.

          Das bedeutet, ich kann mit der lib schneller Daten an eibd senden, als dieser es auf den bus absetzen kann.

          Ich habe mal ausprobiert, was passiert wenn ich es so richtig qualmen lasse. ca. 40 Request pro Sekunde.

          Das Ergebnis war wie erwartet. Eibd queued die Befehle, und rotzt sie dann so schnell wie möglich auf den Bus.

          Was dann uncool ist, da dann sonst nicht mehr viel auf dem Bus geht. / Es steht also fast alles...

          Meine Lösung, die imho nicht so elegant ist, ist folgende:

          Ich schreibe alle angefragten Befehle / Requests in einen eigenen Buffer und arbeite diesen dann über einen setinterval loop ab den ich auf 250ms gestellt habe. So ist gewährleistet, dass der Bus nicht überfahren wird.

          Dieser Loop läuft natürlich die ganze Zeit weiter, auch wen der Buffer leer ist. Das kann nicht optimal sein.

          Wie würde ein Profi das lösen?

          Gruß

          Martin `
          Hast du Fremdlib modifiziert oder dein Adapter?

          Wenn das irgendwo eingecheckt ist, dann kann ich auf dem git schauen.

          Ich wurde Tick anders machen.

          Merken wann letztes Kommando abgesetzt war und falls unter 250 ms, dann mit setTimeout warten bis 250 Intervall erreicht wird. Danach senden und im callback vom Write wieder Queue abarbeiten bis die Länge vom Queue Null ist.

          1 Antwort Letzte Antwort
          0
          • ruhigundrelaxedR Offline
            ruhigundrelaxedR Offline
            ruhigundrelaxed
            schrieb am zuletzt editiert von
            #5

            Nö, die lib ist unverändert.

            Der code liegt hier:

            https://github.com/ruhigundrelaxed/ioBroker.eibd

            In eibd.js gibt es die auskommentierte function:

            recurseQueue

            Da hab ich versucht die queue rekursiv, ohne setInterval abzuarbeiten.

            Hat leider nicht funktioniert.. weil halt "zu" asynchron…(galube ich zumindest) :roll:

            ..ist nur noch nicht aufgeräumt.

            > …250 ms, dann mit setTimeout warten bis 250 Intervall erreicht wird.

            wird mir nicht ganz klar. Aber es geht in die Richtung: setInterval pausieren zu lassen wen buffer leer, und resumen wenn buffer nicht leer?

            du bildest seInterval mit setTimeout nach?!?

            Ok. Das könnt ich probieren….

            Danke.

            iobroker auf debian bullseye amd64 (i5-8259U)
            homematic -> homegear -> HM-CFG-LAN ~> 11 x hm-cc-rt-dn | 3 x hm-sec-sd
            knx -> eibd -> SCN‐IP000.01 ~> 4 x AMS-1216.01 | (1 x JAL-0810.01 | 1 x JAL-0410.01) | 2 x BE-16000.01 | …

            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

            610

            Online

            32.5k

            Benutzer

            81.6k

            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