Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    Netgate 2100 Customization of LEDs (Guide)

    Scheduled Pinned Locked Moved Hardware
    37 Posts 2 Posters 3.7k Views
    Loading More Posts
    • 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.
    • JonathanLeeJ
      JonathanLee
      last edited by

      Photos Restored Jan 28 23:36

      1 Reply Last reply Reply Quote 0
      • JonathanLeeJ JonathanLee referenced this topic on
      • JonathanLeeJ JonathanLee referenced this topic on
      • wgstarksW
        wgstarks
        last edited by

        I’m trying to figure out how I can modify this to work with system status? Specifically I would like to set all the led’s on my 4200 to bright red when the wan gateway is down. Not finding a bash script to do this though.

        Box: SG-4200

        JonathanLeeJ 2 Replies Last reply Reply Quote 1
        • JonathanLeeJ
          JonathanLee @wgstarks
          last edited by JonathanLee

          @wgstarks

          You can.. all you would have to do is find some WAN connection you can use with a variable with pfctl -vsss
          maybe just search for any WAN connections if you have a static IP it would be the best just search for that IP address with.

          So really basic "if else" it could be..

          if-->
          WAN not found
          turn LEDs RED!!!
          else-->
          turn LEDS off or GREEN

          use this command in shell to find something that would work...

          pfctl -vvss
          

          To make all the LEDS red on 2100 is...

          sysctl -q dev.gpio.2.led.0.pwm=0
          gpioctl -f /dev/gpioc2 0 duty 200 >/dev/null
          sysctl -q dev.gpio.2.led.1.pwm=0
          gpioctl -f /dev/gpioc2 3 duty 200 >/dev/null
          sysctl -q dev.gpio.2.led.2.pwm=0
          gpioctl -f /dev/gpioc2 6 duty 200 >/dev/null
          

          So basically ...

          #!/bin/sh
          check_current_states=$( pfctl -vvss | grep -e ‘STATIC WAN IP ADDRESS HERE’ )
          WAN=1
          case "$check_current_states" in
            *WAN IP* ) WAN=1 ;;
          esac
          if [ $WAN = 0 ];  #meaning if it is offline turn them to red
          then
           sysctl -q dev.gpio.2.led.0.pwm=0
           gpioctl -f /dev/gpioc2 0 duty 200 >/dev/null
           sysctl -q dev.gpio.2.led.1.pwm=0
           gpioctl -f /dev/gpioc2 3 duty 200 >/dev/null
           sysctl -q dev.gpio.2.led.2.pwm=0
           gpioctl -f /dev/gpioc2 6 duty 200 >/dev/null
          else #turn all LEDs off or what ever you need....
            sysctl -q dev.gpio.2.led.0.pwm=1
            gpioctl -f /dev/gpioc2 0 duty 0 >/dev/null
            gpioctl -f /dev/gpioc2 1 duty 0 >/dev/null
            gpioctl -f /dev/gpioc2 2 duty 0 >/dev/null
            sysctl -q dev.gpio.2.led.1.pwm=1
            gpioctl -f /dev/gpioc2 3 duty 0 >/dev/null
            gpioctl -f /dev/gpioc2 4 duty 0 >/dev/null
            gpioctl -f /dev/gpioc2 5 duty 0 >/dev/null
            sysctl -q dev.gpio.2.led.2.pwm=1
            gpioctl -f /dev/gpioc2 6 duty 0 >/dev/null
            gpioctl -f /dev/gpioc2 7 duty 0 >/dev/null
            gpioctl -f /dev/gpioc2 8 duty 0 >/dev/null
          fi
          

          Or for the else condition you could set it to green if WAN is online

            sysctl -q dev.gpio.2.led.1.pwm=1
            gpioctl -f /dev/gpioc2 3 duty 0 >/dev/null
            gpioctl -f /dev/gpioc2 4 duty 0 >/dev/null
            sysctl -q dev.gpio.2.led.2.pwm=1
            gpioctl -f /dev/gpioc2 6 duty 0 >/dev/null
            gpioctl -f /dev/gpioc2 7 duty 50 >/dev/null
            gpioctl -f /dev/gpioc2 8 duty 0 >/dev/null
          

          Make a cron job to run the scrip every so often to check...

          keep in mind you would have to also disable the current LEDS too

            sysctl -q dev.gpio.2.led.0.pwm=1
            gpioctl -f /dev/gpioc2 0 duty 0 >/dev/null
            gpioctl -f /dev/gpioc2 1 duty 0 >/dev/null
            gpioctl -f /dev/gpioc2 2 duty 0 >/dev/null
            sysctl -q dev.gpio.2.led.1.pwm=1
            gpioctl -f /dev/gpioc2 3 duty 0 >/dev/null
            gpioctl -f /dev/gpioc2 4 duty 0 >/dev/null
            gpioctl -f /dev/gpioc2 5 duty 0 >/dev/null
            sysctl -q dev.gpio.2.led.2.pwm=1
            gpioctl -f /dev/gpioc2 6 duty 0 >/dev/null
            gpioctl -f /dev/gpioc2 7 duty 0 >/dev/null
            gpioctl -f /dev/gpioc2 8 duty 0 >/dev/null
          

          or just create a while loop to do that..

          1 Reply Last reply Reply Quote 0
          • JonathanLeeJ
            JonathanLee @wgstarks
            last edited by

            @wgstarks

            Side Note:

            if your 4200 has lots of traffic... I am talking thousands of clients... running pfctl over and over every minute might not be for you,, as it takes up some memory when you do this..

            However for a small office or a dozen or so clients this is no big deal....

            wgstarksW 1 Reply Last reply Reply Quote 0
            • wgstarksW
              wgstarks @JonathanLee
              last edited by

              @JonathanLee
              So I could just use something like 8.8.8.8 for the static WAN?

              Box: SG-4200

              JonathanLeeJ 1 Reply Last reply Reply Quote 1
              • JonathanLeeJ
                JonathanLee @wgstarks
                last edited by

                @wgstarks That's the DNS yes if the gateway went offline I am sure that state would no longer exist. Try that unplug wan for 10 mins see if it glows red plug it v=back in wait ten mins see if it normalizes. Great idea

                wgstarksW 1 Reply Last reply Reply Quote 0
                • wgstarksW
                  wgstarks @JonathanLee
                  last edited by

                  @JonathanLee
                  Do you know what the factory default is for the “or else”?

                  Box: SG-4200

                  JonathanLeeJ 1 Reply Last reply Reply Quote 0
                  • JonathanLeeJ
                    JonathanLee @wgstarks
                    last edited by JonathanLee

                    @wgstarks

                    I think it is very close too..

                    sysctl -q dev.gpio.2.led.2.pwm=0
                    gpioctl -f /dev/gpioc2 8 duty  30 >/dev/null
                    

                    it pulses blue like that... I never used the default once I went to custom blinking light mode

                    Remember you have to disable the others before you change it back with

                    sysctl -q dev.gpio.2.led.0.pwm=1
                      gpioctl -f /dev/gpioc2 0 duty 0 >/dev/null
                      gpioctl -f /dev/gpioc2 1 duty 0 >/dev/null
                      gpioctl -f /dev/gpioc2 2 duty 0 >/dev/null
                      sysctl -q dev.gpio.2.led.1.pwm=1
                      gpioctl -f /dev/gpioc2 3 duty 0 >/dev/null
                      gpioctl -f /dev/gpioc2 4 duty 0 >/dev/null
                      gpioctl -f /dev/gpioc2 5 duty 0 >/dev/null
                      sysctl -q dev.gpio.2.led.2.pwm=1
                      gpioctl -f /dev/gpioc2 6 duty 0 >/dev/null
                      gpioctl -f /dev/gpioc2 7 duty 0 >/dev/null
                      gpioctl -f /dev/gpioc2 8 duty 0 >/dev/null
                    

                    This would be like a reset turns them all off..

                    wgstarksW 1 Reply Last reply Reply Quote 0
                    • wgstarksW
                      wgstarks @JonathanLee
                      last edited by

                      @JonathanLee
                      Thanks. Might be simpler to just set it to red and green. I never remember what the default patterns mean anyway.😁

                      Box: SG-4200

                      JonathanLeeJ 1 Reply Last reply Reply Quote 0
                      • JonathanLeeJ
                        JonathanLee @wgstarks
                        last edited by

                        @wgstarks One other item with the custom LEDs you will not see the firmware LED program run so I added a email alert for updates program with it that another user shared on Netgate...

                        https://forum.netgate.com/topic/137707/auto-update-check-checks-for-updates-to-base-system-packages-and-sends-email-alerts/

                        That way you still get a alert that you have updates without the Orange LED

                        1 Reply Last reply Reply Quote 0
                        • wgstarksW
                          wgstarks
                          last edited by

                          Thanks. Have had that installed for a while.

                          Box: SG-4200

                          1 Reply Last reply Reply Quote 1
                          • JonathanLeeJ JonathanLee referenced this topic on
                          • JonathanLeeJ
                            JonathanLee
                            last edited by JonathanLee

                            @stephenw10 Can you please help me?
                            Where is the standard led program in pfSense filesystem located it would be easier to just call that program if the gateway is up for @wgstarks request. He wants to normalize the LED behavior if the gateway is up. I could just set the scrip to call that program if needed. /dev/led is not listed in 2100 file system

                            1 Reply Last reply Reply Quote 0
                            • JonathanLeeJ
                              JonathanLee
                              last edited by JonathanLee

                              @wgstarks

                              To normalize it call this program originally sets bootup conditions, I am searching for the file it calls

                              /usr/local/sbin/pfSense-led.sh

                              1 Reply Last reply Reply Quote 0
                              • JonathanLeeJ
                                JonathanLee
                                last edited by JonathanLee

                                @wgstarks

                                set the program to call

                                /usr/local/sbin/pfSense-led.sh ready
                                

                                Use that for the else condition that would normalize it automatically for your model

                                a3546bbe-3d59-486a-817b-4078c3e5db46-image.png

                                1 Reply Last reply Reply Quote 0
                                • wgstarksW
                                  wgstarks
                                  last edited by

                                  Thanks. I’ll test this and see if I can get it working.

                                  Box: SG-4200

                                  JonathanLeeJ 1 Reply Last reply Reply Quote 1
                                  • JonathanLeeJ
                                    JonathanLee @wgstarks
                                    last edited by JonathanLee

                                    This post is deleted!
                                    1 Reply Last reply Reply Quote 0
                                    • JonathanLeeJ
                                      JonathanLee
                                      last edited by JonathanLee

                                      I got it don't use DNS use the interfaces name and pinger

                                      pfctl -vvss | grep -e "mvneta0 icmp"

                                      that works!!!

                                      #!/bin/sh
                                      led_intensity=0
                                      while [ $led_intensity -le 8 ]; do
                                        gpioctl -f /dev/gpioc2 $led_intensity duty 0 >/dev/null
                                        led_intensity=$(( led_intensity + 1 ))
                                      done
                                      
                                      check_current_states=$( pfctl -vvss | grep -e "mvneta0 icmp" )
                                      WAN=0
                                      case "$check_current_states" in
                                        *icmp* ) WAN=1 ;;
                                      esac
                                      if [ $WAN = 0 ];
                                      then
                                       sysctl -q dev.gpio.2.led.0.pwm=0
                                       gpioctl -f /dev/gpioc2 0 duty 200 >/dev/null
                                       sysctl -q dev.gpio.2.led.1.pwm=0
                                       gpioctl -f /dev/gpioc2 3 duty 200 >/dev/null
                                       sysctl -q dev.gpio.2.led.2.pwm=0
                                       gpioctl -f /dev/gpioc2 6 duty 200 >/dev/null
                                      else
                                        /usr/local/sbin/pfSense-led.sh ready
                                      
                                      fi
                                      
                                      

                                      2f125920-7993-4542-8edc-f2c09f326fd7-image.png

                                      Your mvneta0 might be different over the 2100 check it on Interface Assignments, that is the pinger state used to check to see if gateway is up just use it for the program also

                                      YEAH!!

                                      Just updated after testing 4:07 7-18-24

                                      1 Reply Last reply Reply Quote 0
                                      • JonathanLeeJ
                                        JonathanLee
                                        last edited by

                                        Update to mine to reflect the gateway offline

                                        #!/bin/sh
                                        check_current_states=$( pfctl -vvss | grep -e ', rule 105' -e ', rule 52' -e '192.168.1.11' -e '192.168.1.15' -e 'mvneta0 icmp' )
                                        res=1
                                        resb=1
                                        resc=1
                                        resd=1
                                        WAN=1
                                        case "$check_current_states" in
                                          *icmp* ) WAN=0 ;;
                                        esac
                                        if [ $WAN = 1 ];
                                        then
                                         sysctl -q dev.gpio.2.led.0.pwm=0
                                         gpioctl -f /dev/gpioc2 0 duty 200 >/dev/null
                                         sysctl -q dev.gpio.2.led.1.pwm=0
                                         gpioctl -f /dev/gpioc2 3 duty 200 >/dev/null
                                         sysctl -q dev.gpio.2.led.2.pwm=0
                                         gpioctl -f /dev/gpioc2 6 duty 200 >/dev/null
                                         exit 1
                                         fi
                                        case "$check_current_states" in 
                                          *", rule 105"* ) res=0 ;;
                                        esac
                                        case "$check_current_states" in
                                          *192.168.1.11* ) resb=0 ;;
                                        esac
                                        case "$check_current_states" in
                                          *192.168.1.15* ) resc=0 ;;
                                        esac
                                        case "$check_current_states" in
                                          *", rule 52"* ) resd=0 ;;
                                        esac
                                        if [ $res = 0 ] && [ $resb = 0 ]; 
                                        then
                                          sysctl -q dev.gpio.2.led.1.pwm=1
                                          gpioctl -f /dev/gpioc2 3 duty 50 >/dev/null
                                          gpioctl -f /dev/gpioc2 4 duty 15 >/dev/null
                                          sysctl -q dev.gpio.2.led.2.pwm=0
                                          gpioctl -f /dev/gpioc2 6 duty 55 >/dev/null
                                          gpioctl -f /dev/gpioc2 7 duty 20 >/dev/null
                                          gpioctl -f /dev/gpioc2 8 duty 15 >/dev/null
                                        elif [ $res = 0 ];
                                        then
                                          sysctl -q dev.gpio.2.led.1.pwm=1
                                          gpioctl -f /dev/gpioc2 3 duty 0 >/dev/null
                                          gpioctl -f /dev/gpioc2 4 duty 0 >/dev/null
                                          sysctl -q dev.gpio.2.led.2.pwm=0
                                          gpioctl -f /dev/gpioc2 6 duty 55 >/dev/null
                                          gpioctl -f /dev/gpioc2 7 duty 20 >/dev/null
                                          gpioctl -f /dev/gpioc2 8 duty 15 >/dev/null
                                        elif [ $resb = 0 ];
                                        then
                                          sysctl -q dev.gpio.2.led.2.pwm=1
                                          gpioctl -f /dev/gpioc2 6 duty 0 >/dev/null
                                          gpioctl -f /dev/gpioc2 7 duty 0 >/dev/null
                                          gpioctl -f /dev/gpioc2 8 duty 0 >/dev/null
                                          sysctl -q dev.gpio.2.led.1.pwm=1
                                          gpioctl -f /dev/gpioc2 3 duty 50 >/dev/null
                                          gpioctl -f /dev/gpioc2 4 duty 15 >/dev/null
                                        else
                                          sysctl -q dev.gpio.2.led.1.pwm=1
                                          gpioctl -f /dev/gpioc2 3 duty 0 >/dev/null
                                          gpioctl -f /dev/gpioc2 4 duty 0 >/dev/null
                                          sysctl -q dev.gpio.2.led.2.pwm=1
                                          gpioctl -f /dev/gpioc2 6 duty 0 >/dev/null
                                          gpioctl -f /dev/gpioc2 7 duty 50 >/dev/null
                                          gpioctl -f /dev/gpioc2 8 duty 0 >/dev/null
                                          
                                        fi
                                        if [ $resc = 0 ] || [ $resd = 0 ];
                                        then
                                          sysctl -q dev.gpio.2.led.0.pwm=1
                                          gpioctl -f /dev/gpioc2 2 duty 50 >/dev/null
                                          gpioctl -f /dev/gpioc2 0 duty 50 >/dev/null
                                        else
                                          sysctl -q dev.gpio.2.led.0.pwm=1
                                          gpioctl -f /dev/gpioc2 2 duty 0 >/dev/null
                                          gpioctl -f /dev/gpioc2 0 duty 0 >/dev/null
                                        
                                        fi
                                        
                                        1 Reply Last reply Reply Quote 0
                                        • wgstarksW
                                          wgstarks
                                          last edited by

                                          When I test in shell I get the following result-

                                          gpio_open: No such file or directory
                                          gpio_open: No such file or directory
                                          gpio_open: No such file or directory
                                          gpio_open: No such file or directory
                                          gpio_open: No such file or directory
                                          gpio_open: No such file or directory
                                          gpio_open: No such file or directory
                                          gpio_open: No such file or directory
                                          gpio_open: No such file or directory
                                          

                                          My script-

                                          #!/bin/sh
                                          led_intensity=0
                                          while [ $led_intensity -le 8 ]; do
                                            gpioctl -f /dev/gpioc2 $led_intensity duty 0 >/dev/null
                                            led_intensity=$(( led_intensity + 1 ))
                                          done
                                          
                                          check_current_states=$( pfctl -vvss | grep -e "igc3 icmp" )
                                          WAN=0
                                          case "$check_current_states" in
                                            *icmp* ) WAN=1 ;;
                                          esac
                                          if [ $WAN = 0 ];
                                          then
                                           sysctl -q dev.gpio.2.led.0.pwm=0
                                           gpioctl -f /dev/gpioc2 0 duty 200 >/dev/null
                                           sysctl -q dev.gpio.2.led.1.pwm=0
                                           gpioctl -f /dev/gpioc2 3 duty 200 >/dev/null
                                           sysctl -q dev.gpio.2.led.2.pwm=0
                                           gpioctl -f /dev/gpioc2 6 duty 200 >/dev/null
                                          else
                                            /usr/local/sbin/pfSense-led.sh ready
                                          
                                          fi
                                          
                                          
                                          

                                          Box: SG-4200

                                          JonathanLeeJ 1 Reply Last reply Reply Quote 0
                                          • JonathanLeeJ
                                            JonathanLee @wgstarks
                                            last edited by JonathanLee

                                            @wgstarks

                                            Do me a favor take a look in
                                            /usr/local/sbin/pfSense-led.sh

                                            Find your model firewall and tell me what directive is used to change the LEDS…

                                            Also peek in /dev/led see if you have that folder, if you do it should be easy to adapt with the directive used for your model

                                            wgstarksW 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.