Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. HUE Farbwert (HSV?) nach HEX konvertieren

    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

    HUE Farbwert (HSV?) nach HEX konvertieren

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

      Hallo,

      wie kann ich aus den Werten

      {
        "type": "commandEnhancedMoveToHueAndSaturation",
        "data": {
          "enhancehue": 32896,
          "saturation": 254,
          "transtime": 5
        },
      

      eine HEX-Wert konvertieren? Ist das angegebene Format im JSON HSV?

      Falls ja, ist die Zuordnung so korrekt?

      • H = enhancehue

      • S = saturation

      • V = transtime

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

        @tklein

        function hsv2rgb(hue: number, saturation: number, value: number): [number, number, number] {
            hue /= 60;
            let chroma = value * saturation;
            let x = chroma * (1 - Math.abs((hue % 2) - 1));
            let rgb: [number, number, number] = hue <= 1 ? [chroma, x, 0] :
                hue <= 2 ? [x, chroma, 0] :
                    hue <= 3 ? [0, chroma, x] :
                        hue <= 4 ? [0, x, chroma] :
                            hue <= 5 ? [x, 0, chroma] :
                                [chroma, 0, x];
        
            return rgb.map(v => (v + value - chroma) * 255) as [number, number, number];
        }
        

        Falls das auch nicht bekannt ist:

        function ConvertRGBtoHex(red: number, green: number, blue: number): string {
            return '#' + ColorToHex(red) + ColorToHex(green) + ColorToHex(blue);
        }
        

        1:1 aus dem NSPanelTs.ts genommen 😉

        T 1 Reply Last reply Reply Quote 1
        • T
          tklein @Armilar last edited by

          @armilar besten dank dafür.

          Dann muss ich noch sehen, wie ich das in mein Blockly bekomme.
          Wahrscheinlich per eigener Funktionen mit dem Code von oben

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

            @tklein

            Jap - 2 Funktionsblöcke mit Rückgabe im Blockly...

            Vielleicht können da ja ein paar Blockly-Geeks helfen

            1 Reply Last reply Reply Quote 0
            • T
              tklein last edited by

              bis hierher komme ich:

              af3383a7-5ebf-4386-9bb2-08cabf7dc8db-grafik.png

              Code:

              hue /= 60;
                  let chroma = value * saturation;
                  let x = chroma * (1 - Math.abs((hue % 2) - 1));
                  let rgb: [number, number, number] = hue <= 1 ? [chroma, x, 0] :
                      hue <= 2 ? [x, chroma, 0] :
                          hue <= 3 ? [0, chroma, x] :
                              hue <= 4 ? [0, x, chroma] :
                                  hue <= 5 ? [x, 0, chroma] :
                                      [chroma, 0, x];
              
                  return rgb.map(v => (v + value - chroma) * 255) as [number, number, number];
              
              Armilar 1 Reply Last reply Reply Quote 0
              • Armilar
                Armilar Most Active Forum Testing @tklein last edited by

                @tklein

                versuche mal das:

                function hsv2rgb(hue: number, saturation: number, value: number) {
                    hue /= 60;
                    let chroma = value * saturation;
                    let x = chroma * (1 - Math.abs((hue % 2) - 1));
                    let rgb = hue <= 1 ? [chroma, x, 0] :
                        hue <= 2 ? [x, chroma, 0] :
                            hue <= 3 ? [0, chroma, x] :
                                hue <= 4 ? [0, x, chroma] :
                                    hue <= 5 ? [x, 0, chroma] :
                                        [chroma, 0, x];
                
                    return rgb.map(v => (v + value - chroma) * 255);
                }
                
                T 1 Reply Last reply Reply Quote 1
                • T
                  tklein @Armilar last edited by

                  @armilar klappt. Zumindest keine Fehlermeldung 🙂

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

                    @tklein

                    Blockly verträgt da nur JS...

                    Jetzt noch die andere Funktion, dann die Funktionsblöcke hintereinanderschalten und fertig...

                    1 Reply Last reply Reply Quote 0
                    • T
                      tklein last edited by

                      das seht glaube ich noch nicht so gut aus. Aus negativen RGB Werte Hexwerte.

                      3adea787-374c-4b8a-bfa5-871b69782c55-grafik.png

                      Da darf ich noch einges lernen. Z.b. wie ich mit der Rückgabe der HSV2RGB die andere Funktion RGB2HEX mit den Parametern aufrufe.

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

                        @tklein

                        Sehe jetzt erst, dass deine Eingangsparameter lustig aussehen 😉

                        Teile enhancehue durch 360 und saturation durch 100

                        HUE kann maximal 360° haben - würde demnach mit 32896/360 = 91,38° in die Funktion gehen

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

                          @armilar mhhmm

                          das hier

                          {"enhancehue":24415,"saturation":254,"transtime":5}
                          

                          ergibt leider

                          [1275,-1963.4999999999998,258.47083333333]
                          

                          da ist noch der wurm drin:

                             hue = hue/360;
                              saturation = saturation/100;
                          
                              let chroma = value * saturation;
                          
                              let x = chroma * (1 - Math.abs((hue % 2) - 1));
                          
                              let rgb = hue <= 1 ? [chroma, x, 0] :
                          
                                  hue <= 2 ? [x, chroma, 0] :
                          
                                      hue <= 3 ? [0, chroma, x] :
                          
                                          hue <= 4 ? [0, x, chroma] :
                          
                                              hue <= 5 ? [x, 0, chroma] :
                          
                                                  [chroma, 0, x];
                          
                           
                          
                              return rgb.map(v => (v + value - chroma) * 255);
                          
                          Armilar 1 Reply Last reply Reply Quote 0
                          • Armilar
                            Armilar Most Active Forum Testing @tklein last edited by Armilar

                            @tklein

                            function hsv2rgb(hue, saturation, value) {
                                hue /= 60;
                                let chroma = value * saturation;
                                let x = chroma * (1 - Math.abs((hue % 2) - 1));
                                let rgb = hue <= 1 ? [chroma, x, 0] :
                                    hue <= 2 ? [x, chroma, 0] :
                                        hue <= 3 ? [0, chroma, x] :
                                            hue <= 4 ? [0, x, chroma] :
                                                hue <= 5 ? [x, 0, chroma] :
                                                    [chroma, 0, x];
                             
                                return rgb.map(v => (v + value - chroma) * 255);
                            }
                            
                            
                            function ConvertRGBtoHex(red, green, blue) {
                                return '#' + ColorToHex(red) + ColorToHex(green) + ColorToHex(blue);
                            }
                            
                            //Helper
                            function ColorToHex(color) {
                                let hexadecimal = color.toString(16);
                                return hexadecimal.length == 1 ? '0' + hexadecimal : hexadecimal;
                            }
                            
                            let enhancehue = 32896;
                            let saturation = 254;
                            let transtime =  5;
                            log(hsv2rgb(enhancehue/360, saturation/254 , 1))
                            let rgb = hsv2rgb(enhancehue/360, saturation/254, 1)
                            log(String(ConvertRGBtoHex(Math.round(rgb[0]*1)/1, Math.round(rgb[1]*1)/1, Math.round(rgb[2]*1)/1)));
                            

                            So kommen bei mir sinnvolle Werte raus:

                            script.js.common.DEV.Beispiele.HSV2HEX: [ 121.64444444444442, 255, 0 ]
                            script.js.common.DEV.Beispiele.HSV2HEX: #7aff00
                            

                            a1d572e2-a57c-4903-a06b-ae9c77408fba-image.png

                            Würde bedeuten
                            hsv2rgb(enhancehue/360, saturation/254 , 1)

                            value immer auf 1

                            P.S.: Was ist denn das für ein Adapter, der so merkwürdige Werte liefert?

                            T Armilar 3 Replies Last reply Reply Quote 0
                            • T
                              tklein @Armilar last edited by

                              @armilar danke schaue ich mir an und versuche es zu verstehen

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

                                @armilar said in HUE Farbwert (HSV?) nach HEX konvertieren:

                                function ConvertRGBtoHex(red, green, blue) {

                                das ist der zigbee adapter.

                                Ich komme leider immer noch nicht weiter 😞

                                Ausgabe:

                                fd6dd193-9365-4b2e-86e2-8ff2f55cfb46-grafik.png

                                Funktion:
                                30796049-62c8-4055-83e9-24eb5a4885ca-grafik.png

                                Asgothian 1 Reply Last reply Reply Quote 0
                                • Asgothian
                                  Asgothian Developer @tklein last edited by

                                  @tklein sagte in HUE Farbwert (HSV?) nach HEX konvertieren:

                                  Hallo,

                                  wie kann ich aus den Werten

                                  {
                                    "type": "commandEnhancedMoveToHueAndSaturation",
                                    "data": {
                                      "enhancehue": 32896,
                                      "saturation": 254,
                                      "transtime": 5
                                    },
                                  

                                  eine HEX-Wert konvertieren? Ist das angegebene Format im JSON HSV?

                                  Falls ja, ist die Zuordnung so korrekt?

                                  • H = enhancehue

                                  • S = saturation

                                  • V = transtime

                                  Nebenbei, die Segmente des “HSV” Modells heißen Hue, Saturation, Value.

                                  Die transtime ist bei dem verwendeten Befehl eine Zeit in der der Wechsel stattfinden soll.

                                  T 1 Reply Last reply Reply Quote 0
                                  • T
                                    tklein @Asgothian last edited by

                                    @asgothian

                                    hi,

                                    ob das ein hsv wert ist, kann ich leider nicht sagen. Ich bekomme nur das json aus dem zigbee adapter für die fernbedienung. Eigentlich ist es nicht das korrekte modell. Meine wird derzeit nicht unterstützt. Die Befehle scheinen
                                    jedoch idenitsch zu sein.

                                    1803ba11-bd55-42ed-a1f9-6a9461c4aa50-grafik.png

                                    19acc3d4-f008-4352-a002-a1b5173c4fba-grafik.png

                                    Ist V denn nun mit Value = Transtime?

                                    LG
                                    Thomas

                                    Homoran 1 Reply Last reply Reply Quote 0
                                    • Homoran
                                      Homoran Global Moderator Administrators @tklein last edited by

                                      @tklein sagte in HUE Farbwert (HSV?) nach HEX konvertieren:

                                      Transtime

                                      ist die Zeit für den Übergang zur neuen Einstellung.
                                      hat nichts mit dem Farbwert zu tun

                                      T 1 Reply Last reply Reply Quote 0
                                      • T
                                        tklein @Homoran last edited by

                                        @homoran dann fehlt mir also der wert vom "v", um einen rgb bzw hex wert berechnen zu können so wie es aussieht

                                        Homoran Asgothian 2 Replies Last reply Reply Quote 0
                                        • Homoran
                                          Homoran Global Moderator Administrators @tklein last edited by

                                          @tklein sagte in HUE Farbwert (HSV?) nach HEX konvertieren:

                                          @homoran dann fehlt mir also der wert vom "v", um einen rgb bzw hex wert berechnen zu können so wie es aussieht

                                          nein! den hast du anscheinend
                                          https://de.m.wikipedia.org/wiki/HSV-Farbraum

                                          1 Reply Last reply Reply Quote 0
                                          • Asgothian
                                            Asgothian Developer @tklein last edited by

                                            @tklein Normalerweise wird der “brightness” Wert als “V” im HSV Modell genutzt, wobei du schauen musst ob der 0-1 oder 0-100 ist.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            965
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            4
                                            25
                                            983
                                            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