Skip to content
  • 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
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [Gelöst] Math.round einbinden in bestehende Funktion

NEWS

  • Wartung am 15.11. – Forum ab 22:00 Uhr nicht erreichbar
    BluefoxB
    Bluefox
    11
    2
    197

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

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

[Gelöst] Math.round einbinden in bestehende Funktion

[Gelöst] Math.round einbinden in bestehende Funktion

Scheduled Pinned Locked Moved Skripten / Logik
10 Posts 3 Posters 1.3k Views
  • 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.
  • R Offline
    R Offline
    rom.wagner80
    wrote on last edited by
    #1

    Hallo alle,

    habe ein kleines Problem:

    Wie bekomme ich folgenden Code, bzw. dessen Ergebnis gerundet ?

    mit Math.round - Soviel weiß ich schonmal. aber wie binde ich diesen Befehl am besten in mein setstate ?

    <code>setState ("javascript.0.Geraete.YAHKA.r1"/*r1*/, 255 * r),
    setState ("javascript.0.Geraete.YAHKA.g1"/*g1*/, 255 * g),
    setState ("javascript.0.Geraete.YAHKA.b1"/*b1*/, 255 * b);/code]
    
    vielen Dank für eure Hilfe
    
    Mit freundlichen Grüßen</code>
    
    1 Reply Last reply
    0
    • DutchmanD Offline
      DutchmanD Offline
      Dutchman
      Developer Most Active Administrators
      wrote on last edited by
      #2

      du müsstest mit einer variable arbeiten die erstmal abrunde und dan den setstate ausführt.

      • wo kommt dein wert her ?

      • was willst du genau erreichen ?

      in deinem jetzigen setztet setzt du den wert auf 255, könntest du dein scenario beschreiben das macht es leichter etwas sinniges zu sagen

      1 Reply Last reply
      0
      • R Offline
        R Offline
        rom.wagner80
        wrote on last edited by
        #3

        Also der ganze Quellcode sieht so aus:

        var h = getState("javascript.0.Geraete.YAHKA.hue").val / 360; 
        var s = getState("javascript.0.Geraete.YAHKA.saturation").val / 100;
        var v = getState("javascript.0.Geraete.YAHKA.dimmer").val / 100;
        
        function HSVtoRGB() {
            var r, g, b, i, f, p, q, t;
            i = Math.floor(h * 6);
            f = h * 6 - i;
            p = v * (1 - s);
            q = v * (1 - f * s);
            t = v * (1 - (1 - f) * s);
            switch (i % 6) {
                case 0: r = v, g = t, b = p; break;
                case 1: r = q, g = v, b = p; break;
                case 2: r = p, g = v, b = t; break;
                case 3: r = p, g = q, b = v; break;
                case 4: r = t, g = p, b = v; break;
                case 5: r = v, g = p, b = q; break;
            }
        
        setState ("javascript.0.Geraete.YAHKA.r1"/*r1*/, 255 * r),
        setState ("javascript.0.Geraete.YAHKA.g1"/*g1*/, 255 * g),
        setState ("javascript.0.Geraete.YAHKA.b1"/*b1*/, 255 * b);     
        
        } // Ende der Funktion
        
        HSVtoRGB();  // Aufruf bei Skriptstart 
        
        on("javascript.0.Geraete.YAHKA.hue", function(dp) {
           h = dp.state.val / 360;
           HSVtoRGB();  // Aufruf bei Änderung von hue
        });
        on("javascript.0.Geraete.YAHKA.saturation", function(dp) {
           s = dp.state.val / 100;
           HSVtoRGB();  // Aufruf bei Änderung von saturation
        });
        on("javascript.0.Geraete.YAHKA.dimmer", function(dp) {
           v = dp.state.val / 100;
           HSVtoRGB();  // Aufruf bei Änderung von dimmer
        });
        
        

        Aber mir wird nicht 255 ausgegeben, sondern der Wert von r, g, bzw b mit 255 multipliziert und dann ausgegeben. Und genau das Ergebnis möchte ich runden…

        Natürlich dann erst nach der Multiplikation mit 255 🙂

        1 Reply Last reply
        0
        • paul53P Offline
          paul53P Offline
          paul53
          wrote on last edited by
          #4

          Sollen Werte von 0 bis 255 auf ganze Zahlen gerundet werden ? Dann so

          setState ("javascript.0.Geraete.YAHKA.r1"/*r1*/, Math.round(255 * r));
          setState ("javascript.0.Geraete.YAHKA.g1"/*g1*/, Math.round(255 * g));
          setState ("javascript.0.Geraete.YAHKA.b1"/*b1*/, Math.round(255 * b));
          

          Kein Komma, sondern ein Semikolon an das Befehlsende !

          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
          • R Offline
            R Offline
            rom.wagner80
            wrote on last edited by
            #5

            @paul53:

            Sollen Werte von 0 bis 255 auf ganze Zahlen gerundet werden ? Dann so

            setState ("javascript.0.Geraete.YAHKA.r1"/*r1*/, Math.round(255 * r));
            setState ("javascript.0.Geraete.YAHKA.g1"/*g1*/, Math.round(255 * g));
            setState ("javascript.0.Geraete.YAHKA.b1"/*b1*/, Math.round(255 * b));
            

            Kein Komma, sondern ein Semikolon an das Befehlsende ! `

            Das war schonmal Goldrichtig.

            hatte zwar vorher schon den Weg mit den Zwischen-Variablen gemacht. aber das ist durchaus eleganter 😉

            Danke

            1 Reply Last reply
            0
            • R Offline
              R Offline
              rom.wagner80
              wrote on last edited by
              #6

              Allerdings ist dies anscheinend nicht die Lösung für mein Problem gewesen…

              Folgendes passiert:

              Die Werte werden sauber als RGB-Werte raus gegeben. dann kommt dahinter folgender Code zum Wandeln von RGB in Hex. und da scheint irgendetwas schief zu gehen... erstmal nimmt der RGB-Stripe die richtige Farbe an und dann nach ein paar Sekunden "Fadet" der Hex-Wert und es wird eine komplett andere Farbe dargestellt.... woran könnte das liegen ?

              createState('ledRGB',0);
              getState('javascript.0.Geraete.YAHKA.r1');
              getState('javascript.0.Geraete.YAHKA.g1');
              getState('javascript.0.Geraete.YAHKA.b1',
              function () {
                  on('javascript.0.Geraete.YAHKA.r1', calculateColor);
                  on('javascript.0.Geraete.YAHKA.g1', calculateColor);
                  on('javascript.0.Geraete.YAHKA.b1', calculateColor);
              });
              
              function toHex(number) {
                  if (number < 0) number = 0xFFFFFFFF + number + 1;
                  var n = number.toString(16).toUpperCase();
                  if (n.length == 1) {
                      n = '0' + n;
                  }
                  return n;
              }
              
              function calculateColor() {
                  var R = Math.round(parseFloat(getState('javascript.0.Geraete.YAHKA.r1').val) || 0);
                  var G = Math.round(parseFloat(getState('javascript.0.Geraete.YAHKA.g1').val) || 0);
                  var B = Math.round(parseFloat(getState('javascript.0.Geraete.YAHKA.b1').val) || 0);
                  setState('yeelight.0.stripe_0x0000000004cdb76b.rgb', '#' + toHex(R) + toHex(G) + toHex(B));
              
              
              1 Reply Last reply
              0
              • paul53P Offline
                paul53P Offline
                paul53
                wrote on last edited by
                #7

                Versuche es mal so:

                var R = getState('javascript.0.Geraete.YAHKA.r1').val;
                var G = getState('javascript.0.Geraete.YAHKA.g1').val;
                var B = getState('javascript.0.Geraete.YAHKA.b1').val;
                
                function toHex(number) {
                    if (number < 0) number = 0xFFFFFFFF + number + 1;
                    var n = number.toString(16).toUpperCase();
                    if (n.length == 1) {
                        n = '0' + n;
                    }
                    return n;
                }
                
                function calculateColor() {
                    setState('yeelight.0.stripe_0x0000000004cdb76b.rgb', '#' + toHex(R) + toHex(G) + toHex(B));
                }
                
                calculateColor(); // Skriptstart
                
                on('javascript.0.Geraete.YAHKA.r1', function(dp) {
                   R = dp.state.val;
                   calculateColor();
                });
                on('javascript.0.Geraete.YAHKA.g1', function(dp) {
                   G = dp.state.val;
                   calculateColor();
                });
                on('javascript.0.Geraete.YAHKA.b1', function(dp) {
                   B = dp.state.val;
                   calculateColor();
                });
                
                

                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
                • R Offline
                  R Offline
                  rom.wagner80
                  wrote on last edited by
                  #8

                  Eigentlich genauso…wenn nicht noch schlimmer.

                  Hab davon mal ein Video gemacht...Wie kann ich dir das zukommen lassen oder posten ?

                  @paul53:

                  Versuche es mal so:

                  var R = getState('javascript.0.Geraete.YAHKA.r1').val;
                  var G = getState('javascript.0.Geraete.YAHKA.g1').val;
                  var B = getState('javascript.0.Geraete.YAHKA.b1').val;
                  
                  function toHex(number) {
                      if (number < 0) number = 0xFFFFFFFF + number + 1;
                      var n = number.toString(16).toUpperCase();
                      if (n.length == 1) {
                          n = '0' + n;
                      }
                      return n;
                  }
                  
                  function calculateColor() {
                      setState('yeelight.0.stripe_0x0000000004cdb76b.rgb', '#' + toHex(R) + toHex(G) + toHex(B));
                  }
                  
                  calculateColor(); // Skriptstart
                  
                  on('javascript.0.Geraete.YAHKA.r1', function(dp) {
                     R = dp.state.val;
                     calculateColor();
                  });
                  on('javascript.0.Geraete.YAHKA.g1', function(dp) {
                     G = dp.state.val;
                     calculateColor();
                  });
                  on('javascript.0.Geraete.YAHKA.b1', function(dp) {
                     B = dp.state.val;
                     calculateColor();
                  });
                  
                  ```` ` 
                  1 Reply Last reply
                  0
                  • paul53P Offline
                    paul53P Offline
                    paul53
                    wrote on last edited by
                    #9

                    @rom.wagner80:

                    Die Werte werden sauber als RGB-Werte raus gegeben. dann kommt dahinter folgender Code zum Wandeln von RGB in Hex. und da scheint irgendetwas schief zu gehen… erstmal nimmt der RGB-Stripe die richtige Farbe an und dann nach ein paar Sekunden "Fadet" der Hex-Wert und es wird eine komplett andere Farbe dargestellt.... woran könnte das liegen ? `
                    Das gehört nicht mehr zum Thema "Math.round einbinden in bestehende Funktion". Mache dazu bitte ein neues Thema auf.

                    Füge zum Testen mal vor dem setState() ein Log ein

                    log('#' + toHex(R) + toHex(G) + toHex(B));
                    

                    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
                    • R Offline
                      R Offline
                      rom.wagner80
                      wrote on last edited by
                      #10

                      @paul53:

                      @rom.wagner80:

                      Die Werte werden sauber als RGB-Werte raus gegeben. dann kommt dahinter folgender Code zum Wandeln von RGB in Hex. und da scheint irgendetwas schief zu gehen… erstmal nimmt der RGB-Stripe die richtige Farbe an und dann nach ein paar Sekunden "Fadet" der Hex-Wert und es wird eine komplett andere Farbe dargestellt.... woran könnte das liegen ? `
                      Das gehört nicht mehr zum Thema "Math.round einbinden in bestehende Funktion". Mache dazu bitte ein neues Thema auf.

                      Füge zum Testen mal vor dem setState() ein Log ein

                      log('#' + toHex(R) + toHex(G) + toHex(B));
                      ```` `  
                      

                      Dann werde ich mal einen neuen Beitrag aufmachen.

                      Danke

                      Hier gehts weiter

                      ! viewtopic.php?f=21&t=13730/spoiler]
                      ! Gesendet von iPhone mit Tapatalk

                      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

                      169

                      Online

                      32.4k

                      Users

                      81.3k

                      Topics

                      1.3m

                      Posts
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                      ioBroker Community 2014-2025
                      logo
                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Recent
                      • Tags
                      • Unread 0
                      • Categories
                      • Unreplied
                      • Popular
                      • GitHub
                      • Docu
                      • Hilfe