A couple of scripts that will make the neufbox4 light from 1 to 6 white LEDs corresponding to the quality of the connection of an Internet key, when the front button is pressed.
This is a module with some simple functions to manage the LEDs. Save it as “led.lua” in a folder “lib”.
module(..., package.seeall) white_names = {"NB4-SER-r2:white:adsl", "NB4-SER-r2:white:traffic", "NB4-SER-r2:white:tel", "NB4-SER-r2:white:tv", "NB4-SER-r2:white:wifi", "NB4-SER-r2:white:alarm"} col_names = {"NB4-SER-r2:blue:service", "NB4-SER-r2:green:service", "NB4-SER-r2:red:service"} function get_led(name) local f = io.open("/sys/class/leds/" .. name .. "/brightness") local val = f:read() return val end function set_led(name, value) local f = io.open("/sys/class/leds/" .. name .. "/brightness", "w") f:write(value) f:close() end function switch_led(name) set_led(name, 1-get_led(name)) end function switch_all() for key, name in pairs(white_names) do switch_led(name) end end function anim() for key, name in pairs(white_names) do switch_led(name) os.execute("sleep " .. 1) end for key, name in pairs(col_names) do switch_led(name) os.execute("sleep " .. 1) end for key, name in pairs(col_names) do switch_led(name) os.execute("sleep " .. 1) end end function set_n_leds(n, value) -- Cohercion: nn = 0 + n for key, name in pairs(white_names) do if nn >= key then set_led(name, value) else set_led(name, 1-value) end end end
This script lights from 1 to 6 LEDs depending on the quality of the signal of the connection of an Internet key connected to the box. Save it as “show_signal.lua”.
module(..., package.seeall) require "lib.led" DEVICE = "/dev/ttyACM1" function act() lib.led.set_n_leds(5, 0) local pop = io.popen("comgt -d " .. DEVICE) -- Line 1 out = pop:read() -- Line 2 out = pop:read() -- Line 3 out = pop:read() for p in string.gmatch(out, '([^,]+)') do -- The last is the desired one connection = p end -- Line 4 out = pop:read() for p in string.gmatch(out, "%S+") do -- The last is the desired one quality = p end quality = string.gsub(quality, ",", ".") -- The scale for connection should be -- (http://www.shapeshifter.se/2008/04/30/list-of-at-commands/): -- -- 0. GSM -- 1. Compact GSM -- 2. UTRAN -- 3. GSM with EGPRS -- 4. UTRAN with HSDPA -- 5. UTRAN with HSUPA -- 6. UTRAN with HSDPA and HSUPA -- -- while the scale for quality should be from 1 to 31, with -- -- 0 -113 dBm or less -- 1 -111 dBm -- 2 to 30 -109 to -53 dBm -- 31 -51 dBm or greater -- 99 not known or not detectable -- however, gcom does not return the true connection type for my -- K3806-Z, so I will just use the signal strenght indicator: val = 6 * (quality / 31) lib.led.set_n_leds(val, 1) os.execute("sleep " .. 2) lib.led.set_n_leds(0, 1) end
This script is called on any button event. It does nothing if the button was pressed but only if it was released - to avoid actions being executed twice. If the front button was released, it calls the above script.
#! /usr/bin/lua -- Referred from "/etc/hotplug.d/button/etc/hotplug.d/button/buttons" -- (http://wiki.openwrt.org/doc/howto/hardware.button) print("button.lua running") if os.getenv('ACTION') == "pressed" then os.exit() end if os.getenv('BUTTON') == "BTN_1" then print("OK, go") require "show_signal" show_signal.act() end
Save this as “/etc/hotplug.d/button/button” (and edit “/etc/hotplug2.rules” as suggested in this page, under “Configuration”):
#!/bin/sh logger $BUTTON logger $ACTION cd /root/scripts logger `./button.lua`
(replace “/root/scripts” with the dir where the previous files were saved)