Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. HEX-Werte an Endgerät senden

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    HEX-Werte an Endgerät senden

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

      Hallo.

      Ich habe einen Zigbee - (Farb-)Dimmer, welcher bei Betätigung immer einen anderen HEX-Wert sendet. Mit diesem Dimmer würde ich gern ein Farb-LED-Band ansteuern. Wie kann ich es realisieren, daß z.B. bei gesendetem #90ffc9 auch #90ffc9 beim Endgerät ankommt? Im Triggerblock kann ich zwar über die ObjectID den DP für die Farbe auswählen; aber der Block weiß ja nicht, welche Farbe da gerade vom Dimmer gesendet wird, sondern nur, daß sich was geändert hat. Hat da jemand eine Idee, wie ich den HEX-Wert auslesen und 1:1 an die LED schicken kann? Oder ist das HEXenwerk? 😸

      Andi

      PS: Zigbee läuft über zigbee2mqtt. Die Werte des Dimmers werden übrigens in xy gesendet, in den Objekten vom zigbee2mqtt - Adapter werden die aber in HEX angezeigt.

      "action_color": {
              "x": 0.666,
              "y": 0.294
          },
      
      Armilar 1 Reply Last reply Reply Quote 0
      • Armilar
        Armilar Most Active Forum Testing @1Topf last edited by Armilar

        @1topf sagte in HEX-Werte an Endgerät senden:

        welcher bei Betätigung immer einen anderen HEX-Wert sendet
        Die Werte des Dimmers werden übrigens in xy gesendet

        Klingt ein wenig konfus...

        Ich fass mal kurz nach meinem Verständnis zusammen:

        • Du hast einen Dimmer, der Farben per CIE in einen xy Datenpunkt schreibt.
        • Dein LED-Stripe kann HEX #RRGGBB verarbeiten.
        • Dir fehlt eine Umrechnung von xy auf HEX

        ist das so korrekt?

        Wenn dem so ist, dann:

        function cie_to_rgb(x, y, brightness) {
           
           if (brightness === undefined) {
              brightness = 254;
           }
        
           var z = 1.0 - x - y;
           var Y = (brightness / 254).toFixed(2);
           var X = (Y / y) * x;
           var Z = (Y / y) * z;
        
           //Convert to RGB using Wide RGB D65 conversion
           var red 	=  X * 1.656492 - Y * 0.354851 - Z * 0.255038;
           var green 	= -X * 0.707196 + Y * 1.655397 + Z * 0.036152;
           var blue 	=  X * 0.051713 - Y * 0.121364 + Z * 1.011530;
        
           //If red, green or blue is larger than 1.0 set it back to the maximum of 1.0
           if (red > blue && red > green && red > 1.0) {
              green = green / red;
              blue  = blue / red;
              red   = 1.0;
           }
           else if (green > blue && green > red && green > 1.0) {
              red  = red / green;
              blue  = blue / green;
              green = 1.0;
           }
           else if (blue > red && blue > green && blue > 1.0) {
              red   = red / blue;
              green = green / blue;
              blue  = 1.0;
           }
        
           //Reverse gamma correction
           red   = red <= 0.0031308 ? 12.92 * red : (1.0 + 0.055) * Math.pow(red, (1.0 / 2.4)) - 0.055;
           green = green <= 0.0031308 ? 12.92 * green : (1.0 + 0.055) * Math.pow(green, (1.0 / 2.4)) - 0.055;
           blue  = blue <= 0.0031308 ? 12.92 * blue : (1.0 + 0.055) * Math.pow(blue, (1.0 / 2.4)) - 0.055;
        
           red   = Math.round(red * 255);
           green = Math.round(green * 255);
           blue  = Math.round(blue * 255);
        
           if (isNaN(red))
              red = 0;
        
           if (isNaN(green))
              green = 0;
        
           if (isNaN(blue))
              blue = 0;
        
           return [red, green, blue];
        }
        

        Wobei bei dem Farbraum bestenfalls noch Brightness (0-254) mitgegeben werden sollte.

        Anschließend nur noch RGB (also den return-Wert) verhexen und fertig...

        function componentToHex(c) {
          // This expects `c` to be a number:
          const hex = c.toString(16);
        
          return hex.length === 1 ? `0${ hex }` : hex;
        }
        
        function rgbToHex(rgb) {
          // .map(Number) will convert each string to number:
          const [r, g, b] = rgb.replace('rgb(', '').replace(')', '').split(',').map(Number);
          
          return "#" + componentToHex(r) + componentToHex(g) + componentToHex(b);
        }
        

        VG

        1Topf 1 Reply Last reply Reply Quote 0
        • 1Topf
          1Topf @Armilar last edited by

          @armilar

          😳 Da fallen mir schon ein wenig die Augen raus.

          Ich saß gestern abend noch recht lang daran und hab in Blockly was zusammengeschustert. Das Problem ist auch, daß Dimmer und Strip von unterschiedlichen Herstellern sind. Nun sollten zwar die HEX-Werte gleich sein, aber hier unterscheidet sich wohl der Wunsch von der Realität. Die vom Dimmer gesendeten Werte frißt der Strip nicht.
          Ich werde mich mal mit Deiner Lösung befassen, wenn ich etwas mobiler bin (gab heut wieder 2 nette Spritzen in den Rücken 😠 ).

          Klingt ein wenig konfus...

          Das liegt aber nicht an mir 😉 . Im zigbee2mqtt - Dashboard wird es als xy erkannt/dargestellt, in den Objekten von ioBroker als HEX. An welcher Stelle das jetzt umgewandelt wird, entzieht sich meinem Wissen.

          Danke erstmal für Deine Mühe. Schönen Abend noch.

          Armilar 1 Reply Last reply Reply Quote 0
          • Armilar
            Armilar Most Active Forum Testing @1Topf last edited by

            @1topf

            Ich weiß... steht zwar unter Blockly, aber das dürfte ohne JS wohl schwierig werden 😉

            Jetzt noch einen Trigger draufsetzen, der den Wert vom Dimmer konvertiert und dann in einen Hex-Datenpunkt der Lampe setzt

            Nicht gerade Hexenwerk aber schon etwas gehobener (dein Wunsch)

            Sollte aber tatsächlich alles in Hex stehen und nur ein Transport von A nach B stattfinden, dann kann man es ja so machen:

            69e0b088-7e3f-4b90-a112-311e9f2066c5-image.png

            1Topf 1 Reply Last reply Reply Quote 0
            • 1Topf
              1Topf @Armilar last edited by

              @armilar

              Ich dachte, Du willst mich zwingen, JS zu lernen. 😁

              Mein Ansatz gestern war

              DimmerStrip01.jpg

              , aber der Strip hat sich aus irgendeinem Grund immer wieder auf Lila gestellt. Also ich habe alle HEX-Werte, die der Dimmer geliefert hat (insgesamt 16), in Blöcke wie oben geschrieben. Aber wie gesagt, der Strip wollte nicht. Ich hab noch ne Idee, muß ich mal ausprobieren. Hab vermutlich noch bis Ende des Jahres Krankenschein, also viel Zeit. Leider ...

              Armilar 1 Reply Last reply Reply Quote 0
              • Armilar
                Armilar Most Active Forum Testing @1Topf last edited by

                @1topf

                Schmerzhafte Sache im Rücken 😰

                Ja, du gibst ihm ja auch immer Lila mit. Versuche es mal mit der Variante. Der Trigger schleust 1:1 den Wert des Datenpunktes durch.

                Schade... man kann es ja mal versuchen 😉

                Aber wenn du die andere Variante von xy nach hex brauchts, musst du nicht mehr lange suchen 😊

                Gute Besserung

                1Topf 2 Replies Last reply Reply Quote 0
                • 1Topf
                  1Topf @Armilar last edited by

                  @armilar sagte in HEX-Werte an Endgerät senden:

                  @1topf

                  Ja, du gibst ihm ja auch immer Lila mit.

                  Nein, das war auch bei rot oder grün usw. so. Hab natürlich grad den blödesten Screenshot gewählt. 😂

                  Gute Besserung

                  Vielen Dank.

                  1 Reply Last reply Reply Quote 0
                  • 1Topf
                    1Topf @Armilar last edited by

                    @armilar

                    Ich glaube, ich habe das Problem gefunden. Im DP ist lila / #ff00ff hinterlegt. Aus irgendeinem Grund wird der Strip immer wieder darauf getriggert, wenn ich ihn per Dimmer schalten will. Das Kuriose daran ist: wenn ich den Strip per Alexa über den IOT-Adapter schalte, funktioniert es. Ebenso über das dashboard von zigbee2mqtt. Es könnte doch mal was einfach funktionieren ...

                    {
                      "type": "state",
                      "common": {
                        "id": "color",
                        "name": "Color",
                        "role": "level.color.rgb",
                        "write": true,
                        "read": true,
                        "type": "string",
                        "def": "#ff00ff",
                        "smartName": {
                          "de": "Bett",
                          "smartType": "LIGHT"
                        }
                      },
                      "native": {},
                      "_id": "zigbee2mqtt.0.0xa4c138e864efed32.color",
                      "acl": {
                        "object": 1636,
                        "state": 1636,
                        "owner": "system.user.admin",
                        "ownerGroup": "system.group.administrator"
                      },
                      "from": "system.adapter.admin.0",
                      "user": "system.user.admin",
                      "ts": 1669674342096
                    }
                    
                    Armilar 1 Reply Last reply Reply Quote 0
                    • Armilar
                      Armilar Most Active Forum Testing @1Topf last edited by

                      @1topf

                      Ist ja der Knaller, wie kommt das da rein. Da mag aber jemand Lila 😉

                      Einfach mal rauslöschen...

                      1Topf 1 Reply Last reply Reply Quote 0
                      • 1Topf
                        1Topf @Armilar last edited by

                        @armilar War auch mein erster Gedanke, aber geht nicht. Läßt sich nicht bearbeiten.

                        Armilar 1 Reply Last reply Reply Quote 0
                        • Armilar
                          Armilar Most Active Forum Testing @1Topf last edited by

                          @1topf

                          Auch nicht im Expertenmodus?
                          ba2bafe8-abee-46ec-862d-69071ae50ee9-image.png

                          Oder einfach den Datenpunkt wegwerfen. Sollte sich ja neu anlegen

                          1Topf 1 Reply Last reply Reply Quote 0
                          • 1Topf
                            1Topf @Armilar last edited by

                            @armilar Bin bereits im Expertenmodus. Hab jetzt den ganzen Objektbaum gelöscht, ist bis jetzt leider nicht wieder aufgetaucht. Ich mach morgen weiter, falls ich dazu komme. Als Kranker hat man nur noch Termine. 😂
                            Gute N8.

                            Armilar 1 Reply Last reply Reply Quote 0
                            • Armilar
                              Armilar Most Active Forum Testing @1Topf last edited by Armilar

                              @1topf

                              Gute N8 😊

                              P.S.: Starte die Gurke mal durch...

                              1Topf 1 Reply Last reply Reply Quote 0
                              • 1Topf
                                1Topf @Armilar last edited by

                                @armilar Also ich geb's jetzt auf. Bekomme das hübsche Lila nicht weg. Egal. Ich kann das Teil per Alexa schalten, das ist schon mal was wert. Dann werde ich mir noch die Browserseite des Strips von zigbee2mqtt per iFrame in die VIS holen. Und dann ist gut. Ist ja nur für's Kinderzimmer. Soll der kleine Scheißer doch sehen, wie er damit klar kommt. 😂 😂 😇

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

                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                640
                                Online

                                32.0k
                                Users

                                80.5k
                                Topics

                                1.3m
                                Posts

                                2
                                14
                                487
                                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