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.
LEDs library
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
The signalometer
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
Dispatcher script
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
Hotplug configuration file
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)
