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 @wgstarks
      last edited by

      @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
      • JonathanLeeJ
        JonathanLee @wgstarks
        last edited by

        @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
        • wgstarksW
          wgstarks
          last edited by

          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

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

            @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

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

              @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

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

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

                Make sure to upvote

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

                  @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

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

                    @wgstarks 🤔

                    Make sure to upvote

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

                      @wgstarks can you cat the file?

                      Make sure to upvote

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

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

                        @wgstarks can you cat the file?

                        Operation not supported by device.

                        Box: SG-4200

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

                          @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
                          • JonathanLeeJ
                            JonathanLee @wgstarks
                            last edited by JonathanLee

                            @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
                            • JonathanLeeJ JonathanLee referenced this topic on
                            • First post
                              Last post
                            Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.