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. Skripten / Logik
  4. JavaScript
  5. UDPRAW von Hyperion zu IOBroker

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    553

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.7k

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

UDPRAW von Hyperion zu IOBroker

Geplant Angeheftet Gesperrt Verschoben JavaScript
15 Beiträge 3 Kommentatoren 1.3k 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.
  • R ratatoesk

    @ratatoesk Okay, ich bin so weit gekommen... die Konsole zeigt mir jetzt die Werte in HEX an, yay... aber ich bekomme sie nicht in meinen Datenpunkt geschrieben... keine Ahnung warum nicht.

    const dgram = require('dgram');
    
    const socket = dgram.createSocket('udp4');
    
    socket.on("error", function (err) {
        log("Socket error: " + err);
        socket.close();
    });
     
    
    socket.on('message',function(message,rinfo) {
      log("recieved: " + message.toString("hex"));
      setState("javascript.0.TV-Licht.Licht_SubTV"/*Licht SubTV*/, ("#" + message.toString("hex")));
      });
     
    socket.on('listening', function() {
        const address = socket.address();
        log(`server listening on ${address.address}:${address.port}`);
     });
    
    socket.bind(5568);
    
    
    
    R Offline
    R Offline
    ratatoesk
    schrieb am zuletzt editiert von ratatoesk
    #4

    Script läuft jetzt nachdem ich es in eine neue datei geschrieben habe :man-shrugging:

    Hier jetzt der Code, leider gehen nur 3-4Hz sonst kommt IoBroker nicht mehr hinterher den State zu setzen, aber für die Umgebungsbeleuchtung ausreichend.

    //UDP Socket öffnen
    const dgram = require('dgram');
    
    const socket = dgram.createSocket('udp4');
    
    //Error Handhabung
    socket.on("error", function (err) {
        log("Socket error: " + err);
        socket.close();
    });
     
    //Receive message
    socket.on('message',function(message,rinfo) {
    //Packet als HEX - Farbe setzen
       setState("Lampe.color"/*Color*/, ("#" + message.toString("hex")));
    
    //Helligkeitswerte berechnen
        var br;
        var bg;
        var bb;
        var i = "0x" +(message.toString("hex")); // 16711952
        r = (i >> 16) & 0xFF;       // or `(i & 0xFF0000) >> 16`
        g = (i >>  8) & 0xFF;      // or `(i & 0x00FF00) >>  8`
        b =  i        & 0xFF;         // or ` i & 0x0000FF       `
      br =  Math.round((r /255) *100);
      bg =  Math.round((g /255) *100);
      bb =  Math.round((b /255) *100);
    
    //Helligkeit der Intensivsten Farbe als Globale Helligkeit setzen
      if (br >= bg && br >=bb) {setState("Lampe.brightness"/*Brightness*/, br)}
      else if (bg >= bb) {setState("Lampe.brightness"/*Brightness*/, bg)}
      else {setState("Lampe.brightness"/*Brightness*/, bb)};
    
      
    
      });
     
    
    socket.on('listening', function() {
        const address = socket.address();
        log(`server listening on ${address.address}:${address.port}`);
     });
    
    
    socket.bind(5568);
    
    onStop(() => { 
        socket.close();
    });
    
    

    Klar, Licht was sich direkt mit Hyperion ansteuern lässt ist da deutlich angenehmer und Funktioniert besser, aber es gehen dank Iobroker als Schnittstelle halt alle Lampen, auch wenn die sicher auf Dauer ersetzt werden.

    1rfsNet1 1 Antwort Letzte Antwort
    0
    • R ratatoesk

      Script läuft jetzt nachdem ich es in eine neue datei geschrieben habe :man-shrugging:

      Hier jetzt der Code, leider gehen nur 3-4Hz sonst kommt IoBroker nicht mehr hinterher den State zu setzen, aber für die Umgebungsbeleuchtung ausreichend.

      //UDP Socket öffnen
      const dgram = require('dgram');
      
      const socket = dgram.createSocket('udp4');
      
      //Error Handhabung
      socket.on("error", function (err) {
          log("Socket error: " + err);
          socket.close();
      });
       
      //Receive message
      socket.on('message',function(message,rinfo) {
      //Packet als HEX - Farbe setzen
         setState("Lampe.color"/*Color*/, ("#" + message.toString("hex")));
      
      //Helligkeitswerte berechnen
          var br;
          var bg;
          var bb;
          var i = "0x" +(message.toString("hex")); // 16711952
          r = (i >> 16) & 0xFF;       // or `(i & 0xFF0000) >> 16`
          g = (i >>  8) & 0xFF;      // or `(i & 0x00FF00) >>  8`
          b =  i        & 0xFF;         // or ` i & 0x0000FF       `
        br =  Math.round((r /255) *100);
        bg =  Math.round((g /255) *100);
        bb =  Math.round((b /255) *100);
      
      //Helligkeit der Intensivsten Farbe als Globale Helligkeit setzen
        if (br >= bg && br >=bb) {setState("Lampe.brightness"/*Brightness*/, br)}
        else if (bg >= bb) {setState("Lampe.brightness"/*Brightness*/, bg)}
        else {setState("Lampe.brightness"/*Brightness*/, bb)};
      
        
      
        });
       
      
      socket.on('listening', function() {
          const address = socket.address();
          log(`server listening on ${address.address}:${address.port}`);
       });
      
      
      socket.bind(5568);
      
      onStop(() => { 
          socket.close();
      });
      
      

      Klar, Licht was sich direkt mit Hyperion ansteuern lässt ist da deutlich angenehmer und Funktioniert besser, aber es gehen dank Iobroker als Schnittstelle halt alle Lampen, auch wenn die sicher auf Dauer ersetzt werden.

      1rfsNet1 Offline
      1rfsNet1 Offline
      1rfsNet
      schrieb am zuletzt editiert von
      #5

      @ratatoesk Ich bin nicht so wirklich der JS Profi und bin nicht sicher, ob ich dein Script vollständig verstanden habe.
      Hatte auch die Idee die LED Panels an der Decke ungefähr an das Bild anzupassen. Hatte mir schon gedacht, dass iobroker da nicht mithalten kann. Also war mein Plan nur ungefähr die Lampen zu steuern (also wenn sich wirklich die Farbe komplett ändert und nicht bei jeder kleinsten Änderung). Meinst du das ist halbwegs umsetzbar oder ist der Versatz zu groß?

      AsgothianA 1 Antwort Letzte Antwort
      0
      • 1rfsNet1 1rfsNet

        @ratatoesk Ich bin nicht so wirklich der JS Profi und bin nicht sicher, ob ich dein Script vollständig verstanden habe.
        Hatte auch die Idee die LED Panels an der Decke ungefähr an das Bild anzupassen. Hatte mir schon gedacht, dass iobroker da nicht mithalten kann. Also war mein Plan nur ungefähr die Lampen zu steuern (also wenn sich wirklich die Farbe komplett ändert und nicht bei jeder kleinsten Änderung). Meinst du das ist halbwegs umsetzbar oder ist der Versatz zu groß?

        AsgothianA Offline
        AsgothianA Offline
        Asgothian
        Developer
        schrieb am zuletzt editiert von
        #6

        @1rfsnet

        Die Quizfragen dazu sind:

        • wie oft senden Hyperion die Daten
        • was sind "signifikante Änderungen"

        Im ersten Schritt würde ich das Skript so erweitern:

        // Variablen definieren
        //
        var setRed = -1;
        var setGreen = -1;
        var setBlue = -1;
        var minDelta = 10;
        var TimeStamp = Date.now();
        
        //UDP Socket öffnen
        const dgram = require('dgram');
         
        const socket = dgram.createSocket('udp4');
         
        //Error Handhabung
        socket.on("error", function (err) {
            log("Socket error: " + err);
            socket.close();
        });
         
        //Receive message
        socket.on('message',function(message,rinfo) {
        //Packet als HEX - Farbe setzen
           setState("Lampe.color"/*Color*/, ("#" + message.toString("hex")));
           //timing
          const now = Date.now(); 
        //Helligkeitswerte berechnen
            var br;
            var bg;
            var bb;
            var i = "0x" +(message.toString("hex")); // 16711952
            r = (i >> 16) & 0xFF;       // or `(i & 0xFF0000) >> 16`
            g = (i >>  8) & 0xFF;      // or `(i & 0x00FF00) >>  8`
            b =  i        & 0xFF;         // or ` i & 0x0000FF       `
          br =  Math.round((r /255) *100);
          bg =  Math.round((g /255) *100);
          bb =  Math.round((b /255) *100);
        
          // R,G,B Werte auf mindestens "minDelta" Veränderung prüfen, Max. 1 Änderung pro 500 ms.
          if ((Math.abs(br-setRed) > minDelta || Math.abs(bg-setGreen) > minDelta || Math.abs(bb-setBlue) > minDelta) && (now - timestamp > 500)) 
          { 
        //Helligkeit der Intensivsten Farbe als Globale Helligkeit setzen
          const bright = Math.max(br,bg,bb);
          setBlue = bb;
          setRed = br;
          setGreen = bg;
          setState("Lampe.brightness"/*Brightness*/, bright)l
         }
        });
         
         
        socket.on('listening', function() {
            const address = socket.address();
            log(`server listening on ${address.address}:${address.port}`);
         });
         
         
        socket.bind(5568);
         
        onStop(() => { 
            socket.close();
        });
        

        ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
        "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

        1rfsNet1 1 Antwort Letzte Antwort
        0
        • AsgothianA Asgothian

          @1rfsnet

          Die Quizfragen dazu sind:

          • wie oft senden Hyperion die Daten
          • was sind "signifikante Änderungen"

          Im ersten Schritt würde ich das Skript so erweitern:

          // Variablen definieren
          //
          var setRed = -1;
          var setGreen = -1;
          var setBlue = -1;
          var minDelta = 10;
          var TimeStamp = Date.now();
          
          //UDP Socket öffnen
          const dgram = require('dgram');
           
          const socket = dgram.createSocket('udp4');
           
          //Error Handhabung
          socket.on("error", function (err) {
              log("Socket error: " + err);
              socket.close();
          });
           
          //Receive message
          socket.on('message',function(message,rinfo) {
          //Packet als HEX - Farbe setzen
             setState("Lampe.color"/*Color*/, ("#" + message.toString("hex")));
             //timing
            const now = Date.now(); 
          //Helligkeitswerte berechnen
              var br;
              var bg;
              var bb;
              var i = "0x" +(message.toString("hex")); // 16711952
              r = (i >> 16) & 0xFF;       // or `(i & 0xFF0000) >> 16`
              g = (i >>  8) & 0xFF;      // or `(i & 0x00FF00) >>  8`
              b =  i        & 0xFF;         // or ` i & 0x0000FF       `
            br =  Math.round((r /255) *100);
            bg =  Math.round((g /255) *100);
            bb =  Math.round((b /255) *100);
          
            // R,G,B Werte auf mindestens "minDelta" Veränderung prüfen, Max. 1 Änderung pro 500 ms.
            if ((Math.abs(br-setRed) > minDelta || Math.abs(bg-setGreen) > minDelta || Math.abs(bb-setBlue) > minDelta) && (now - timestamp > 500)) 
            { 
          //Helligkeit der Intensivsten Farbe als Globale Helligkeit setzen
            const bright = Math.max(br,bg,bb);
            setBlue = bb;
            setRed = br;
            setGreen = bg;
            setState("Lampe.brightness"/*Brightness*/, bright)l
           }
          });
           
           
          socket.on('listening', function() {
              const address = socket.address();
              log(`server listening on ${address.address}:${address.port}`);
           });
           
           
          socket.bind(5568);
           
          onStop(() => { 
              socket.close();
          });
          
          1rfsNet1 Offline
          1rfsNet1 Offline
          1rfsNet
          schrieb am zuletzt editiert von
          #7

          @asgothian Ich würde mal vermuten, dass Hyperion jede kleinste Änderung schickt. Zumindest das kann man sich ja mal ohne ioBroker ansehen (werde ich mal bei Gelegenheit machen).
          Signifikate Änderungen wären wohl z.B., dass bei einem blauen Himmel nicht alle paar ms der Blauton minimal verändert wird.

          AsgothianA 1 Antwort Letzte Antwort
          0
          • 1rfsNet1 1rfsNet

            @asgothian Ich würde mal vermuten, dass Hyperion jede kleinste Änderung schickt. Zumindest das kann man sich ja mal ohne ioBroker ansehen (werde ich mal bei Gelegenheit machen).
            Signifikate Änderungen wären wohl z.B., dass bei einem blauen Himmel nicht alle paar ms der Blauton minimal verändert wird.

            AsgothianA Offline
            AsgothianA Offline
            Asgothian
            Developer
            schrieb am zuletzt editiert von
            #8

            @1rfsnet

            Wie schon oben im Post geschrieben - ich habe das Skript für Dich schon entsprechend angepasst. Über die Variable minDelta kannst du die Empfindlichkeit einstellen. Allerdings ist zu beachten das das Skript nur die Helligkeit einer Lampe anpasst, nicht die Farbe.

            A.

            ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
            "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

            1rfsNet1 1 Antwort Letzte Antwort
            0
            • AsgothianA Asgothian

              @1rfsnet

              Wie schon oben im Post geschrieben - ich habe das Skript für Dich schon entsprechend angepasst. Über die Variable minDelta kannst du die Empfindlichkeit einstellen. Allerdings ist zu beachten das das Skript nur die Helligkeit einer Lampe anpasst, nicht die Farbe.

              A.

              1rfsNet1 Offline
              1rfsNet1 Offline
              1rfsNet
              schrieb am zuletzt editiert von
              #9

              @asgothian oh wow danke. ich schau es mir nachher mal an. Hab mir das Script auf dem Handy nicht so genau angeschaut.

              1 Antwort Letzte Antwort
              0
              • R Offline
                R Offline
                ratatoesk
                schrieb am zuletzt editiert von
                #10

                Oh, garnicht aufgefallen das Interesse :-)

                Also, wie oft Hyperion die Daten sendet, kann man ja einstellen, mit 2 Datensätzen die Sekunde habe ich da gute Erfahrungen gemacht mit einem TS0505B Zigbee Controller. Wenn man darüber hinaus geht, beginnen sich die Daten, wahrscheinlich im Zigbee Adapter anzustauen, und die Farbwechsel beginnen hinterher zu hinken, bis man teil eine Minute vor schwarzem Bild warten darf, bis die LEDs aufgeholt haben. Ich weiß jetzt nicht wie der Zigbee Adapter die daten sendet, durch MQTT mit Quality of Service "At most once" würde sich das Problem lösen, und dadurch auch mehr Performance möglich sein.

                Bei 2-3 Datensätzen von Hyperion je Sekunde, sehe ich jetzt weniger einen Sinn dort noch extra die Daten zu Filtern. Auch wenn man somit vielleicht die Schreibzugriffe auf die SD Karte bissl reduziert :sweat_smile:

                1rfsNet1 1 Antwort Letzte Antwort
                1
                • R ratatoesk

                  Oh, garnicht aufgefallen das Interesse :-)

                  Also, wie oft Hyperion die Daten sendet, kann man ja einstellen, mit 2 Datensätzen die Sekunde habe ich da gute Erfahrungen gemacht mit einem TS0505B Zigbee Controller. Wenn man darüber hinaus geht, beginnen sich die Daten, wahrscheinlich im Zigbee Adapter anzustauen, und die Farbwechsel beginnen hinterher zu hinken, bis man teil eine Minute vor schwarzem Bild warten darf, bis die LEDs aufgeholt haben. Ich weiß jetzt nicht wie der Zigbee Adapter die daten sendet, durch MQTT mit Quality of Service "At most once" würde sich das Problem lösen, und dadurch auch mehr Performance möglich sein.

                  Bei 2-3 Datensätzen von Hyperion je Sekunde, sehe ich jetzt weniger einen Sinn dort noch extra die Daten zu Filtern. Auch wenn man somit vielleicht die Schreibzugriffe auf die SD Karte bissl reduziert :sweat_smile:

                  1rfsNet1 Offline
                  1rfsNet1 Offline
                  1rfsNet
                  schrieb am zuletzt editiert von
                  #11

                  @ratatoesk said in UDPRAW von Hyperion zu IOBroker:

                  Also, wie oft Hyperion die Daten sendet, kann man ja einstellen, mit 2 Datensätzen die Sekunde habe ich da gute Erfahrungen gemacht

                  Wo geht das denn? Habe schon gesucht, aber finde nichts.

                  R 1 Antwort Letzte Antwort
                  0
                  • 1rfsNet1 1rfsNet

                    @ratatoesk said in UDPRAW von Hyperion zu IOBroker:

                    Also, wie oft Hyperion die Daten sendet, kann man ja einstellen, mit 2 Datensätzen die Sekunde habe ich da gute Erfahrungen gemacht

                    Wo geht das denn? Habe schon gesucht, aber finde nichts.

                    R Offline
                    R Offline
                    ratatoesk
                    schrieb am zuletzt editiert von
                    #12

                    @1rfsnet Hyperion.png

                    In der Konfiguration der Aufnahme Hardware

                    1rfsNet1 1 Antwort Letzte Antwort
                    0
                    • R ratatoesk

                      @1rfsnet Hyperion.png

                      In der Konfiguration der Aufnahme Hardware

                      1rfsNet1 Offline
                      1rfsNet1 Offline
                      1rfsNet
                      schrieb am zuletzt editiert von
                      #13

                      @ratatoesk Achso schade. Ich habe USB Aufnahme, da gibt es die Einstellung nicht. Außerdem sind die Einstellungen da instanzunabhängig.

                      Hast du eine Idee wie man das auf ioBroker Seite verarbeiten könnte? Ich dachte daran zwar alles zu empfangen, aber setState nur 2x pro Sekunde auszuführen, d.h. die anderen Werte einfach zu ignorieren. Leider habe ich keine Idee wie ich das machen soll. Ich kenne mich damit zu wenig aus.

                      1rfsNet1 1 Antwort Letzte Antwort
                      0
                      • 1rfsNet1 1rfsNet

                        @ratatoesk Achso schade. Ich habe USB Aufnahme, da gibt es die Einstellung nicht. Außerdem sind die Einstellungen da instanzunabhängig.

                        Hast du eine Idee wie man das auf ioBroker Seite verarbeiten könnte? Ich dachte daran zwar alles zu empfangen, aber setState nur 2x pro Sekunde auszuführen, d.h. die anderen Werte einfach zu ignorieren. Leider habe ich keine Idee wie ich das machen soll. Ich kenne mich damit zu wenig aus.

                        1rfsNet1 Offline
                        1rfsNet1 Offline
                        1rfsNet
                        schrieb am zuletzt editiert von
                        #14

                        @1rfsnet said in UDPRAW von Hyperion zu IOBroker:

                        Hast du eine Idee wie man das auf ioBroker Seite verarbeiten könnte? Ich dachte daran zwar alles zu empfangen, aber setState nur 2x pro Sekunde auszuführen, d.h. die anderen Werte einfach zu ignorieren. Leider habe ich keine Idee wie ich das machen soll. Ich kenne mich damit zu wenig aus.

                        Habs inzwischen hinbekommen, aber so richtig toll ist das trotzdem nicht.

                        1.) DIe Lampen springen zu oft zwischen zwei Farben hin und her. (Das ist vermutlich eher ein Problem bei Hyperion)
                        2.) man müsste irgendwie ähnliche Farbcodes erkennen und ausfiltern. Ich sende viel zu oft sehr ähnliche Farbcodes an die Lampen, was teilweise zu komischem Flackern führt.

                        R 1 Antwort Letzte Antwort
                        0
                        • 1rfsNet1 1rfsNet

                          @1rfsnet said in UDPRAW von Hyperion zu IOBroker:

                          Hast du eine Idee wie man das auf ioBroker Seite verarbeiten könnte? Ich dachte daran zwar alles zu empfangen, aber setState nur 2x pro Sekunde auszuführen, d.h. die anderen Werte einfach zu ignorieren. Leider habe ich keine Idee wie ich das machen soll. Ich kenne mich damit zu wenig aus.

                          Habs inzwischen hinbekommen, aber so richtig toll ist das trotzdem nicht.

                          1.) DIe Lampen springen zu oft zwischen zwei Farben hin und her. (Das ist vermutlich eher ein Problem bei Hyperion)
                          2.) man müsste irgendwie ähnliche Farbcodes erkennen und ausfiltern. Ich sende viel zu oft sehr ähnliche Farbcodes an die Lampen, was teilweise zu komischem Flackern führt.

                          R Offline
                          R Offline
                          ratatoesk
                          schrieb am zuletzt editiert von
                          #15

                          @1rfsnet Hyperion sendet die Daten ja als hex Werte, die dann in rgb umgewandelt werden, und diese könntest du direkt vergleichen, und dann nach dem Set state eine halbe Sekunde pause einfügen

                          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

                          942

                          Online

                          32.5k

                          Benutzer

                          81.8k

                          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