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 [[http://wiki.openwrt.org/doc/techref/hotplug|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)