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

Netgate 2100 Customization of LEDs (Guide)

Hardware
2
37
2.2k
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.
  • W
    wgstarks @JonathanLee
    last edited by Jul 19, 2024, 1:05 AM

    @JonathanLee said in Netgate 2100 Customization of LEDs (Guide):

    @wgstarks said in Netgate 2100 Customization of LEDs (Guide):

    echo f2 > /dev/led/blue_0
    echo f2 > /dev/led/blue_1
    echo f2 > /dev/led/blue_2

    try this one

    #!/bin/sh
    echo 0 > /dev/led/blue_0
    echo 0 > /dev/led/blue_1
    echo 0 > /dev/led/blue_2
    echo 0 > /dev/led/red_0
    echo 0 > /dev/led/red_1
    echo 0 > /dev/led/red_2
    echo 0 > /dev/led/green_0
    echo 0 > /dev/led/green_1
    echo 0 > /dev/led/green_2
    
    check_current_states=$( pfctl -vvss | grep -e "igc3 icmp" )
    WAN=0
    case "$check_current_states" in
      *icmp* ) WAN=1 ;;
    esac
    if [ $WAN = 0 ];
    then
     echo f2 > /dev/led/red_0
     echo f2 > /dev/led/red_1
     echo f2 > /dev/led/red_2
    else
      /usr/local/sbin/pfSense-led.sh ready
    
    fi
    

    Or to just turn on solid red

    #!/bin/sh
    echo 0 > /dev/led/blue_0
    echo 0 > /dev/led/blue_1
    echo 0 > /dev/led/blue_2
    echo 0 > /dev/led/red_0
    echo 0 > /dev/led/red_1
    echo 0 > /dev/led/red_2
    echo 0 > /dev/led/green_0
    echo 0 > /dev/led/green_1
    echo 0 > /dev/led/green_2
    
    check_current_states=$( pfctl -vvss | grep -e "igc3 icmp" )
    WAN=0
    case "$check_current_states" in
      *icmp* ) WAN=1 ;;
    esac
    if [ $WAN = 0 ];
    then
     echo 1 > /dev/led/red_0
     echo 1 > /dev/led/red_1
     echo 1 > /dev/led/red_2
    else
      /usr/local/sbin/pfSense-led.sh ready
    
    fi
    

    Please let me know if that works unplug wan it should come on red when you test it.

    After set your cron job to what ever amount of timer you want every min check it or whatever you want. Mine runs every min

    make sure you chmod the file also so it can run.

    if you want just do a chmod 777 on it and or a more secure privilege.

    I have some that run in the day and some at night so this is my 6am - 8:59 one

    login-to-view

    I like the blinking red. More of an attention getter IMO. Working beautifully. Thanks for the script and the help.

    Box: SG-4200

    J 1 Reply Last reply Jul 19, 2024, 1:10 AM Reply Quote 1
    • W
      wgstarks
      last edited by wgstarks Jul 19, 2024, 1:11 AM Jul 19, 2024, 1:10 AM

      Is it possible to increase the brightness? And blink all three?

      Box: SG-4200

      J 1 Reply Last reply Jul 19, 2024, 1:12 AM Reply Quote 0
      • J
        JonathanLee @wgstarks
        last edited by Jul 19, 2024, 1:10 AM

        @wgstarks said in Netgate 2100 Customization of LEDs (Guide):

        IMO

        Great, no problem enjoy. I have one that turns purple when my wife has her work stuff on... royal purple means do not mess with firewall when she is working... haha

        Make sure to upvote

        1 Reply Last reply Reply Quote 0
        • J
          JonathanLee @wgstarks
          last edited by Jul 19, 2024, 1:12 AM

          @wgstarks that you would need to ask an official Netgate rep about, I only have a 2100 so I can only use the directives that my model uses.

          I wonder if you can also...

          @stephenw10 Do you know what the LED intensity directive is on the 4200?

          Make sure to upvote

          1 Reply Last reply Reply Quote 0
          • W
            wgstarks
            last edited by Jul 19, 2024, 1:17 AM

            Only the first and third led's are blinking. I'm fairly sure the code is for all three right? I wonder if it's possible to test them?

            Box: SG-4200

            J 1 Reply Last reply Jul 19, 2024, 1:20 AM Reply Quote 0
            • J
              JonathanLee @wgstarks
              last edited by JonathanLee Jul 19, 2024, 1:21 AM Jul 19, 2024, 1:20 AM

              @wgstarks does the 2nd glow red? The f2 directive might only work for led 0 and 2 test with the echo command

              Make sure to upvote

              W 1 Reply Last reply Jul 19, 2024, 1:22 AM Reply Quote 0
              • W
                wgstarks @JonathanLee
                last edited by Jul 19, 2024, 1:22 AM

                @JonathanLee said in Netgate 2100 Customization of LEDs (Guide):

                @wgstarks does the 2nd glow red?

                No but I see 0,1 and 2 in the code so wondering if it's a bad led.

                Box: SG-4200

                J 1 Reply Last reply Jul 19, 2024, 1:27 AM Reply Quote 0
                • J
                  JonathanLee @wgstarks
                  last edited by Jul 19, 2024, 1:27 AM

                  @wgstarks check the file in /dev/led red 2

                  Make sure to upvote

                  W 1 Reply Last reply Jul 19, 2024, 1:32 AM Reply Quote 0
                  • W
                    wgstarks @JonathanLee
                    last edited by wgstarks Jul 19, 2024, 1:41 AM Jul 19, 2024, 1:32 AM

                    @JonathanLee said in Netgate 2100 Customization of LEDs (Guide):

                    @wgstarks check the file in /dev/led red 2

                    Can't open that file. the led directory is locked (555).

                    Box: SG-4200

                    J 2 Replies Last reply Jul 19, 2024, 1:40 AM Reply Quote 0
                    • J
                      JonathanLee @wgstarks
                      last edited by Jul 19, 2024, 1:40 AM

                      @wgstarks 🤔

                      Make sure to upvote

                      1 Reply Last reply Reply Quote 0
                      • J
                        JonathanLee @wgstarks
                        last edited by Jul 19, 2024, 1:41 AM

                        @wgstarks can you cat the file?

                        Make sure to upvote

                        W 1 Reply Last reply Jul 19, 2024, 2:01 AM Reply Quote 0
                        • W
                          wgstarks @JonathanLee
                          last edited by Jul 19, 2024, 2:01 AM

                          @JonathanLee said in Netgate 2100 Customization of LEDs (Guide):

                          @wgstarks can you cat the file?

                          Operation not supported by device.

                          Box: SG-4200

                          J 2 Replies Last reply Jul 19, 2024, 3:01 AM Reply Quote 0
                          • J
                            JonathanLee @wgstarks
                            last edited by Jul 19, 2024, 3:01 AM

                            @wgstarks look at the open source file on GitHub it’s all open source, git hub should be open non locked

                            Make sure to upvote

                            1 Reply Last reply Reply Quote 0
                            • J
                              JonathanLee @wgstarks
                              last edited by JonathanLee Jul 19, 2024, 3:12 AM Jul 19, 2024, 3:11 AM

                              @wgstarks someone made a Morse code LED messager you know the one you use the application on your phone for ? That is cool

                              <?php
                              /*
                               * led.inc
                               *
                               * part of pfSense (https://www.pfsense.org)
                               * Copyright (c) 2009-2013 BSD Perimeter
                               * Copyright (c) 2013-2016 Electric Sheep Fencing
                               * Copyright (c) 2014-2024 Rubicon Communications, LLC (Netgate)
                               * All rights reserved.
                               *
                               * Licensed under the Apache License, Version 2.0 (the "License");
                               * you may not use this file except in compliance with the License.
                               * You may obtain a copy of the License at
                               *
                               * http://www.apache.org/licenses/LICENSE-2.0
                               *
                               * Unless required by applicable law or agreed to in writing, software
                               * distributed under the License is distributed on an "AS IS" BASIS,
                               * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
                               * See the License for the specific language governing permissions and
                               * limitations under the License.
                               */
                              
                              $led_root = "/dev/led/led";
                              
                              /*
                               * Send the control string to an LED
                               */
                              function led_ctl($led, $str) {
                              	global $led_root;
                              	if (led_exists($led)) {
                              		exec("/bin/echo " . escapeshellarg($str) . " > {$led_root}{$led}");
                              		return true;
                              	}
                              	return false;
                              }
                              
                              /*
                               * Blink an LED at set speed from 1-9 (1=Very Fast, 9=Very Slow)
                               */
                              function led_blink($led, $speed = 0) {
                              	switch ($speed) {
                              		case "reallyfast":
                              		case "veryfast":
                              			$speed = 1;
                              			break;
                              		case "fast":
                              			$speed = 3;
                              			break;
                              		case "medium":
                              			$speed = 5;
                              			break;
                              		case "slow":
                              			$speed = 7;
                              			break;
                              		case "reallyslow":
                              		case "veryslow":
                              			$speed = 9;
                              			break;
                              	}
                              	if (is_numeric($speed) && ($speed > 0) && ($speed < 10)) {
                              		return led_ctl($led, "f{$speed}");
                              	}
                              	return false;
                              }
                              
                              /*
                               * Blink an LED in a specific pattern
                               * Letters A-J are on from 1/10s to 1s
                               * Letters a-j are off from 1/10s to 1s
                               */
                              function led_pattern($led, $pattern, $repeat = true) {
                              	/*  End with a . to stop after one iteration. */
                              	$end = $repeat ? "" : ".";
                              	return led_ctl($led, "s{$pattern}{$end}");
                              }
                              
                              /*
                               * Encode a text message into morse code, and send it to an LED
                               */
                              function led_morse($led, $message) {
                              	return led_ctl($led, "m" . str_to_morse($message));
                              }
                              
                              /*
                               * Blink digits out on LED at 1/10s intervals
                               * e.g 1=1 blink, 8=8 blinks
                               * 0 is 10 pulses.
                               * One second pause between digits.
                               */
                              function led_digit($led, $digitstring) {
                              	$i = 0;
                              	$dstring = "d";
                              	while ($i < strlen($digitstring)) {
                              		$thisdigit = substr($digitstring, $i++, 1);
                              		if (is_numeric($thisdigit)) {
                              			$dstring .= $thisdigit;
                              		}
                              	}
                              	led_ctl($led, $dstring);
                              }
                              
                              /*
                               * Turn an LED on
                               */
                              function led_on($led) {
                              	led_ctl($led, "1");
                              }
                              
                              /*
                               * Turn an LED off
                               */
                              function led_off($led) {
                              	led_ctl($led, "0");
                              }
                              
                              /*
                               * Find the number of LEDs present on the system.
                               */
                              function led_count() {
                              	global $led_root;
                              	$count = 0;
                              	$leds = array();
                              	if (is_dir(dirname($led_root))) {
                              		$leds = glob("{$led_root}*");
                              		$count = count($leds);
                              	}
                              	return $count;
                              }
                              
                              /*
                               * Test to see if a given LED exists.
                               */
                              function led_exists($led) {
                              	global $led_root;
                              	if (!is_numeric($led)) {
                              		return false;
                              	}
                              	return file_exists("{$led_root}{$led}");
                              }
                              
                              /*
                               * Sweep across three LEDs in a K.I.T.T.-like way.
                               */
                              function led_kitt() {
                              	if (led_count() != 3) {
                              		/* Wrong LED count for this to work, skip. */
                              		return;
                              	}
                              	led_pattern(1, 'AaaaaA');
                              	led_pattern(2, 'aAaaAa');
                              	led_pattern(3, 'aaAAaa');
                              }
                              
                              /*
                               * Custom pattern for assigning interfaces
                               */
                              function led_assigninterfaces() {
                              	if (led_count() != 3) {
                              		/* Wrong LED count for this to work, skip. */
                              		return;
                              	}
                              	led_pattern(1, 'AaaAaaaaaaaaaaaa');
                              	led_pattern(2, 'aaaaaAaaAaaaaaaa');
                              	led_pattern(3, 'aaaaaaaaaaAaaAaa');
                              }
                              
                              /*
                               * Return the three LEDs to a standard setup (1=on, 2 and 3 = off)
                               */
                              function led_normalize() {
                              	if (led_count() != 3) {
                              		/* Wrong LED count for this to work, skip. */
                              		return;
                              	}
                              	led_on(1);
                              	led_off(2);
                              	led_off(3);
                              }
                              
                              /*
                               * Shut off ALL LEDs.
                               */
                              function led_alloff() {
                              	if (led_count() != 3) {
                              		/* Wrong LED count for this to work, skip. */
                              		return;
                              	}
                              	led_off(1);
                              	led_off(2);
                              	led_off(3);
                              }
                              
                              /*
                               * Translate a string to morse code. Characters not known to have a
                               * valid morse code representation will be ignored.
                               */
                              function str_to_morse($string) {
                              	$i = 0;
                              	$morsestring = "";
                              	while ($i < strlen($string)) {
                              		$morsestring .= char_to_morse(substr($string, $i++, 1)) . " ";
                              	}
                              	return $morsestring . "\n";
                              }
                              
                              /*
                               * Translate a single character to morse code. Characters not known
                               * to have a valid morse code representation will be ignored.
                               */
                              function char_to_morse($char) {
                              	switch (strtoupper($char)) {
                              		case "A":
                              			return ".-";
                              			break;
                              		case "B":
                              			return "-...";
                              			break;
                              		case "C":
                              			return "-.-.";
                              			break;
                              		case "D":
                              			return "-..";
                              			break;
                              		case "E":
                              			return ".";
                              			break;
                              		case "F":
                              			return "..-.";
                              			break;
                              		case "G":
                              			return "--.";
                              			break;
                              		case "H":
                              			return "....";
                              			break;
                              		case "I":
                              			return "..";
                              			break;
                              		case "J":
                              			return ".---";
                              			break;
                              		case "K":
                              			return "-.-";
                              			break;
                              		case "L":
                              			return ".-..";
                              			break;
                              		case "M":
                              			return "--";
                              			break;
                              		case "N":
                              			return "-.";
                              			break;
                              		case "O":
                              			return "---";
                              			break;
                              		case "P":
                              			return ".--.";
                              			break;
                              		case "Q":
                              			return "--.-";
                              			break;
                              		case "R":
                              			return ".-.";
                              			break;
                              		case "S":
                              			return "...";
                              			break;
                              		case "T":
                              			return "-";
                              			break;
                              		case "U":
                              			return "..-";
                              			break;
                              		case "V":
                              			return "...-";
                              			break;
                              		case "W":
                              			return ".--";
                              			break;
                              		case "X":
                              			return "-..-";
                              			break;
                              		case "Y":
                              			return "-.--";
                              			break;
                              		case "Z":
                              			return "--..";
                              			break;
                              		case "0":
                              			return "-----";
                              			break;
                              		case "1":
                              			return ".----";
                              			break;
                              		case "2":
                              			return "..---";
                              			break;
                              		case "3":
                              			return "...--";
                              			break;
                              		case "4":
                              			return "....-";
                              			break;
                              		case "5":
                              			return ".....";
                              			break;
                              		case "6":
                              			return "-....";
                              			break;
                              		case "7":
                              			return "--...";
                              			break;
                              		case "8":
                              			return "---..";
                              			break;
                              		case "9":
                              			return "----.";
                              			break;
                              		case ".":
                              			return ".-.-.-";
                              			break;
                              		case ",":
                              			return "--..--";
                              			break;
                              		case "?":
                              			return "..--..";
                              			break;
                              		case "'":
                              			return ".----.";
                              			break;
                              		case "!":
                              			return "-.-.--";
                              			break;
                              		case "/":
                              			return "-..-.";
                              			break;
                              		case "(":
                              			return "-.--.";
                              			break;
                              		case ")":
                              			return "-.--.-";
                              			break;
                              		case "&":
                              			return ".-...";
                              			break;
                              		case ":":
                              			return "---...";
                              			break;
                              		case ";":
                              			return "-.-.-.";
                              			break;
                              		case "=":
                              			return "-...-";
                              			break;
                              		case "+":
                              			return ".-.-.";
                              			break;
                              		case "-":
                              			return "-....-";
                              			break;
                              		case "_":
                              			return "..--.-";
                              			break;
                              		case "$":
                              			return "...-..-";
                              			break;
                              		case "@":
                              			return ".--.-.";
                              			break;
                              		case '"':
                              			return ".-..-.";
                              			break;
                              		default:
                              			return "";
                              			break;
                              	}
                              }
                              
                              ?>
                              

                              Make sure to upvote

                              1 Reply Last reply Reply Quote 0
                              • J JonathanLee referenced this topic on Jul 20, 2024, 4:20 PM
                              33 out of 37
                              • First post
                                33/37
                                Last post
                              Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.