Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
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
Brand Logo
  1. Home
  2. Controllers
  3. Home Assistant
  4. Dimmer led turns on fully and only after dimms

Dimmer led turns on fully and only after dimms

Scheduled Pinned Locked Moved Home Assistant
9 Posts 4 Posters 416 Views 3 Watching
  • 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.
  • Adam NovakA Offline
    Adam NovakA Offline
    Adam Novak
    wrote on last edited by
    #1

    I’d like to turn on my mysensor driver led strips on a certain brightness.
    When I do that the led strips turns on on 100% brightness then immediately dimmed down to the wanted level. Is this intentional? Or am I doing something wrong?
    Full sketch for the arduino:

    // Enable debug prints to serial monitor
    #define MY_DEBUG
    #define MY_RADIO_NRF24
    
    #define MY_RADIO_NRF24
    #define MY_NODE_ID 141
    #define CHILD_ID 123
    #define CHILD_ID2 124
    
    // Enable and select radio type attached
    
    #include <MySensors.h>
    
    #define SN "KitchenCabinet2"
    #define SV "1.5"
    
    #define LED_PIN 3      // Arduino pin attached to MOSFET Gate pin
    #define LED_PIN2 5      // Arduino pin attached to MOSFET Gate pin
    #define FADE_DELAY 10  // Delay in ms for each percentage fade up/down (10ms = 1s full-range dim)
    
    static int16_t currentLevel = 0;  // Current dim level...
    static int16_t currentLevel2 = 0;  // Current dim level...
    MyMessage dimmerMsg(CHILD_ID, V_DIMMER);
    MyMessage lightMsg(CHILD_ID, V_LIGHT);
    
    MyMessage dimmerMsg2(CHILD_ID2, V_DIMMER);
    MyMessage lightMsg2(CHILD_ID2, V_LIGHT);
    /***
       Dimmable LED initialization method
    */
    
    
    void setup()
    {
    }
    
    void presentation()
    {
      // Register the LED Dimmable Light with the gateway
      sendSketchInfo(SN, SV);
      present(CHILD_ID, S_DIMMER);
      present(CHILD_ID2, S_DIMMER);
    }
    
    void loop()
    {
      static bool first_message_sent = false;
      if ( first_message_sent == false ) {
        analogWrite( LED_PIN, 0);
        analogWrite( LED_PIN2, 0);
        Serial.println( "Sending initial state..." );
        send(lightMsg.set(currentLevel));
        send(dimmerMsg.set(currentLevel));
    
        send(lightMsg2.set(currentLevel2));
        send(dimmerMsg2.set(currentLevel2));
        first_message_sent = true;
      }
    }
    
    void receive(const MyMessage &message)
    {
      if (message.type == V_LIGHT || message.type == V_DIMMER) {
        if (message.sensor == CHILD_ID) {
          //  Retrieve the power or dim level from the incoming request message
          int requestedLevel = atoi( message.data );
    
          // Adjust incoming level if this is a V_LIGHT variable update [0 == off, 1 == on]
          requestedLevel *= ( message.type == V_LIGHT ? 100 : 1 );
    
          // Clip incoming level to valid range of 0 to 100
          requestedLevel = requestedLevel > 100 ? 100 : requestedLevel;
          requestedLevel = requestedLevel < 0   ? 0   : requestedLevel;
    
          Serial.print( "led1 Changing level to " );
          Serial.print( requestedLevel );
          Serial.print( ", from " );
          Serial.println( currentLevel );
    
          fadeToLevel( requestedLevel );
    
          // Inform the gateway of the current DimmableLED's SwitchPower1 and LoadLevelStatus value...
          send(lightMsg.set(currentLevel > 0));
    
          // hek comment: Is this really nessesary?
          send( dimmerMsg.set(currentLevel) );
        }
    
        if (message.sensor == CHILD_ID2) {
          //  Retrieve the power or dim level from the incoming request message
          int requestedLevel = atoi( message.data );
    
          // Adjust incoming level if this is a V_LIGHT variable update [0 == off, 1 == on]
          requestedLevel *= ( message.type == V_LIGHT ? 100 : 1 );
    
          // Clip incoming level to valid range of 0 to 100
          requestedLevel = requestedLevel > 100 ? 100 : requestedLevel;
          requestedLevel = requestedLevel < 0   ? 0   : requestedLevel;
    
          Serial.print( "Led2 Changing level to " );
          Serial.print( requestedLevel );
          Serial.print( ", from " );
          Serial.println( currentLevel2 );
    
          fadeToLevel2( requestedLevel );
    
          // Inform the gateway of the current DimmableLED's SwitchPower1 and LoadLevelStatus value...
          send(lightMsg2.set(currentLevel2 > 0));
    
          // hek comment: Is this really nessesary?
          send( dimmerMsg2.set(currentLevel2) );
        }
      }
    }
    
    /***
        This method provides a graceful fade up/down effect
    */
    void fadeToLevel(int toLevel ) {
      int delta = ( toLevel - currentLevel ) < 0 ? -1 : 1;
    
      while ( currentLevel != toLevel ) {
        currentLevel += delta;
        analogWrite( LED_PIN, (int)(currentLevel / 100. * 255) );
        delay( FADE_DELAY );
      }
    }
    
    void fadeToLevel2(int toLevel ) {
      int delta = ( toLevel - currentLevel2 ) < 0 ? -1 : 1;
    
      while (currentLevel2 != toLevel ) {
        currentLevel2 += delta;
        analogWrite(LED_PIN2, (int)(currentLevel2 / 100. * 255) );
        delay(FADE_DELAY );
      }
    }
    
    mfalkviddM 1 Reply Last reply
    0
    • Adam NovakA Adam Novak

      I’d like to turn on my mysensor driver led strips on a certain brightness.
      When I do that the led strips turns on on 100% brightness then immediately dimmed down to the wanted level. Is this intentional? Or am I doing something wrong?
      Full sketch for the arduino:

      // Enable debug prints to serial monitor
      #define MY_DEBUG
      #define MY_RADIO_NRF24
      
      #define MY_RADIO_NRF24
      #define MY_NODE_ID 141
      #define CHILD_ID 123
      #define CHILD_ID2 124
      
      // Enable and select radio type attached
      
      #include <MySensors.h>
      
      #define SN "KitchenCabinet2"
      #define SV "1.5"
      
      #define LED_PIN 3      // Arduino pin attached to MOSFET Gate pin
      #define LED_PIN2 5      // Arduino pin attached to MOSFET Gate pin
      #define FADE_DELAY 10  // Delay in ms for each percentage fade up/down (10ms = 1s full-range dim)
      
      static int16_t currentLevel = 0;  // Current dim level...
      static int16_t currentLevel2 = 0;  // Current dim level...
      MyMessage dimmerMsg(CHILD_ID, V_DIMMER);
      MyMessage lightMsg(CHILD_ID, V_LIGHT);
      
      MyMessage dimmerMsg2(CHILD_ID2, V_DIMMER);
      MyMessage lightMsg2(CHILD_ID2, V_LIGHT);
      /***
         Dimmable LED initialization method
      */
      
      
      void setup()
      {
      }
      
      void presentation()
      {
        // Register the LED Dimmable Light with the gateway
        sendSketchInfo(SN, SV);
        present(CHILD_ID, S_DIMMER);
        present(CHILD_ID2, S_DIMMER);
      }
      
      void loop()
      {
        static bool first_message_sent = false;
        if ( first_message_sent == false ) {
          analogWrite( LED_PIN, 0);
          analogWrite( LED_PIN2, 0);
          Serial.println( "Sending initial state..." );
          send(lightMsg.set(currentLevel));
          send(dimmerMsg.set(currentLevel));
      
          send(lightMsg2.set(currentLevel2));
          send(dimmerMsg2.set(currentLevel2));
          first_message_sent = true;
        }
      }
      
      void receive(const MyMessage &message)
      {
        if (message.type == V_LIGHT || message.type == V_DIMMER) {
          if (message.sensor == CHILD_ID) {
            //  Retrieve the power or dim level from the incoming request message
            int requestedLevel = atoi( message.data );
      
            // Adjust incoming level if this is a V_LIGHT variable update [0 == off, 1 == on]
            requestedLevel *= ( message.type == V_LIGHT ? 100 : 1 );
      
            // Clip incoming level to valid range of 0 to 100
            requestedLevel = requestedLevel > 100 ? 100 : requestedLevel;
            requestedLevel = requestedLevel < 0   ? 0   : requestedLevel;
      
            Serial.print( "led1 Changing level to " );
            Serial.print( requestedLevel );
            Serial.print( ", from " );
            Serial.println( currentLevel );
      
            fadeToLevel( requestedLevel );
      
            // Inform the gateway of the current DimmableLED's SwitchPower1 and LoadLevelStatus value...
            send(lightMsg.set(currentLevel > 0));
      
            // hek comment: Is this really nessesary?
            send( dimmerMsg.set(currentLevel) );
          }
      
          if (message.sensor == CHILD_ID2) {
            //  Retrieve the power or dim level from the incoming request message
            int requestedLevel = atoi( message.data );
      
            // Adjust incoming level if this is a V_LIGHT variable update [0 == off, 1 == on]
            requestedLevel *= ( message.type == V_LIGHT ? 100 : 1 );
      
            // Clip incoming level to valid range of 0 to 100
            requestedLevel = requestedLevel > 100 ? 100 : requestedLevel;
            requestedLevel = requestedLevel < 0   ? 0   : requestedLevel;
      
            Serial.print( "Led2 Changing level to " );
            Serial.print( requestedLevel );
            Serial.print( ", from " );
            Serial.println( currentLevel2 );
      
            fadeToLevel2( requestedLevel );
      
            // Inform the gateway of the current DimmableLED's SwitchPower1 and LoadLevelStatus value...
            send(lightMsg2.set(currentLevel2 > 0));
      
            // hek comment: Is this really nessesary?
            send( dimmerMsg2.set(currentLevel2) );
          }
        }
      }
      
      /***
          This method provides a graceful fade up/down effect
      */
      void fadeToLevel(int toLevel ) {
        int delta = ( toLevel - currentLevel ) < 0 ? -1 : 1;
      
        while ( currentLevel != toLevel ) {
          currentLevel += delta;
          analogWrite( LED_PIN, (int)(currentLevel / 100. * 255) );
          delay( FADE_DELAY );
        }
      }
      
      void fadeToLevel2(int toLevel ) {
        int delta = ( toLevel - currentLevel2 ) < 0 ? -1 : 1;
      
        while (currentLevel2 != toLevel ) {
          currentLevel2 += delta;
          analogWrite(LED_PIN2, (int)(currentLevel2 / 100. * 255) );
          delay(FADE_DELAY );
        }
      }
      
      mfalkviddM Offline
      mfalkviddM Offline
      mfalkvidd
      Mod
      wrote on last edited by
      #2

      @adam-novak do you mean when the node boots initially, or when it receives a change in level?
      What message are you sending?
      What does the debug output show?

      1 Reply Last reply
      0
      • Adam NovakA Offline
        Adam NovakA Offline
        Adam Novak
        wrote on last edited by Adam Novak
        #3

        nope, not when the node boots.
        so steps:
        have the lights turned off.
        turn the lights on with brightness lower than 100 percentage.

        results:

        1. leds turned on with brightness 100 percentage.
        2. immediately after that leds are dimmed to the given level.

        I'm using home assistant so not really sure what do you mean by what message am I sending.

        1 Reply Last reply
        1
        • electrikE Offline
          electrikE Offline
          electrik
          wrote on last edited by
          #4

          @adam-novak said in Dimmer led turns on fully and only after dimms:

          analogWrite(LED_PIN2, (int)(currentLevel2 / 100. * 255) );

          I would rewrite this to

          analogWrite(LED_PIN2, (int)(currentLevel2 * 255L / 100) );
          
          1 Reply Last reply
          0
          • fritsF Offline
            fritsF Offline
            frits
            wrote on last edited by
            #5

            You could add some debug code to see what messages arrive from home assistant, like

            void receive(const MyMessage &message)
            {
              Serial.print ( "received message for sensor " );
              Serial.print ( message.sensor );
              Serial.print ( ", type " );
              Serial.println ( message.type );
              if (message.type == V_LIGHT || message.type == V_DIMMER) {
            
            

            and this to see if the fading routine works well:

              while ( currentLevel != toLevel ) {
                currentLevel += delta;
                Serial.print ( "...fadeToLevel: currentLevel=" );
                Serial.print ( currentLevel );
                Serial.print ( ", pwm value=" );
                Serial.print (  (int)(currentLevel / 100. * 255) );
                Serial.println ( );
                analogWrite( LED_PIN, (int)(currentLevel / 100. * 255) );
            

            post your debug output

            1 Reply Last reply
            0
            • Adam NovakA Offline
              Adam NovakA Offline
              Adam Novak
              wrote on last edited by
              #6

              This is the output:
              69082 TSF:MSG:READ,0-0-150,s=151,c=1,t=2,pt=0,l=1,sg=0:1
              69087 TSF:MSG:ACK REQ
              69091 TSF:MSG:SEND,150-150-0-0,s=151,c=1,t=2,pt=0,l=1,sg=0,ft=0,st=OK:1
              received message for sensor 151, type 2
              led1 Changing level to 100, from 0
              70106 TSF:MSG:SEND,150-150-0-0,s=151,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:1
              70114 TSF:MSG:SEND,150-150-0-0,s=151,c=1,t=3,pt=2,l=2,sg=0,ft=0,st=OK:100
              70121 TSF:MSG:READ,0-0-150,s=151,c=1,t=3,pt=0,l=2,sg=0:16
              70126 TSF:MSG:ACK REQ
              70130 TSF:MSG:SEND,150-150-0-0,s=151,c=1,t=3,pt=0,l=2,sg=0,ft=0,st=OK:16
              received message for sensor 151, type 3
              led1 Changing level to 16, from 100
              70984 TSF:MSG:SEND,150-150-0-0,s=151,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:1
              70993 TSF:MSG:SEND,150-150-0-0,s=151,c=1,t=3,pt=2,l=2,sg=0,ft=0,st=OK:16

              fading seems fine, that part is not posted from the logs

              1 Reply Last reply
              0
              • Adam NovakA Offline
                Adam NovakA Offline
                Adam Novak
                wrote on last edited by
                #7

                it seems to me that HA sends to messages. first to turn on 100% than dim to the desired level. ?

                1 Reply Last reply
                0
                • electrikE Offline
                  electrikE Offline
                  electrik
                  wrote on last edited by
                  #8

                  Yes that seems correct to me. So you could not check for over if the message types, or check why home assistant sends the message twice.
                  Probably it sends one for the dimmer value and I've for the switch. So if you only check on the dimmer it should be okay

                  Adam NovakA 1 Reply Last reply
                  0
                  • electrikE electrik

                    Yes that seems correct to me. So you could not check for over if the message types, or check why home assistant sends the message twice.
                    Probably it sends one for the dimmer value and I've for the switch. So if you only check on the dimmer it should be okay

                    Adam NovakA Offline
                    Adam NovakA Offline
                    Adam Novak
                    wrote on last edited by
                    #9

                    @electrik checked HA source as well, and you are absolutely right.
                    I'll just check for the dim message, thanks for the help.

                    1 Reply Last reply
                    0
                    Reply
                    • Reply as topic
                    Log in to reply
                    • Oldest to Newest
                    • Newest to Oldest
                    • Most Votes


                    13

                    Online

                    11.7k

                    Users

                    11.2k

                    Topics

                    113.1k

                    Posts


                    Copyright 2025 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
                    • Login

                    • Don't have an account? Register

                    • Login or register to search.
                    • First post
                      Last post
                    0
                    • MySensors
                    • OpenHardware.io
                    • Categories
                    • Recent
                    • Tags
                    • Popular