Chyba wszystko śmiga jak ma teraz. Dzięki!
Podmieniłem /usr/bin/gcom (który był symlinkiem do comgt) tym skryptem który przepuszcza tylko jeden proces:
#!/bin/sh
LOCK=/tmp/modem.lock
LOG=/tmp/modem.log
/bin/lock $LOCK
chmod 777 $LOCK > /dev/null 2>&1
echo -e "$@" >> $LOG
chmod 777 $LOG > /dev/null 2>&1
/usr/bin/comgt $@
ret=$?
echo -e "exit: $ret\r\n" >> $LOG
/bin/lock -u $LOCK
exit $ret
Także teraz 3ginfo i mój collectd i skrypt directip nie wchodzą sobie w drogę.
A co do zbierania danych z modemu to dla tych co to interesuje to taki mam skrypt:
opengt
set com 115200n81
set senddelay 0.05
waitquiet 1 0.2
//send "AT^m"
//waitfor 1 "OK"
//if % != 0 goto error
send "AT!PCVOLT?^m"
get 2 "^m" $s
get 2 "^m" $s
get 2 "^m" $s
waitfor 5 "OK"
if % != 0 goto error
let $r=$left($s,22)
let $r=$right($r,21)
if $r <> "Power supply voltage:" goto error
let a=len($s)
let a=a-23
let $s=$right($s,a)
let v=val($s)
if v=0 let v=0
send "AT!GSTATUS?^m"
get 2 "^m" $s
get 2 "^m" $s
get 2 "^m" $s
get 2 "^m" $q
get 2 "^m" $q
get 2 "^m" $q
get 2 "^m" $q
get 2 "^m" $q
get 2 "^m" $q
get 2 "^m" $q
get 2 "^m" $q
get 2 "^m" $q
waitfor 5 "OK"
if % != 0 goto error
let $s=$right($s,3)
let t=val($s)
let a=len($q)
let $r=$right($q,a-16)
let s=val($r)
print "",v,",",t,",",s,"\n"
exit 0
:error
exit 1
A collectd exec'uje ten oto skrypt:
#!/bin/sh
PORT=/dev/ttyUSB3
HOST=$COLLECTD_HOSTNAME
INTERVAL=$COLLECTD_INTERVAL
INTERVAL=$(awk -v i=$INTERVAL 'BEGIN{print int(i)}')
while true; do
val=$(gcom -d $PORT -s /opt/modem.collectd)
v="$(echo "$val" | cut -d',' -f1)"
t="$(echo "$val" | cut -d',' -f2)"
s="$(echo "$val" | cut -d',' -f3)"
echo "PUTVAL \"$HOST/exec-modem/temperature\" interval=$INTERVAL N:$t"
echo "PUTVAL \"$HOST/exec-modem/voltage\" interval=$INTERVAL N:$v"
echo "PUTVAL \"$HOST/exec-modem/signal_power\" interval=$INTERVAL N:$s"
sleep $INTERVAL
done
Do tego UI do luci_statistics (/usr/lib/lua/luci/statistics/rrdtool/definitions/exec.lua):
module("luci.statistics.rrdtool.definitions.exec", package.seeall)
function item()
return luci.i18n.translate("Exec")
end
function rrdargs( graph, plugin, plugin_instance )
return {
{
per_instance = true,
title = "%H: %pi - temperature",
vlabel = "\176C",
number_format = "%4.0lf \176C",
data = {
types = { "temperature" },
options = {
temperature__value = {
color = "ff0000",
title = "Temperature"
}
}
}
},
{
per_instance = true,
title = "%H: %pi - voltage",
vlabel = "mV",
number_format = "%4.0lf mV",
data = {
types = { "voltage" },
options = {
voltage__value = {
color = "ff0000",
title = "Voltage"
}
}
}
},
{
per_instance = true,
title = "%H: %pi - signal",
vlabel = "dBm",
number_format = "%3.0lf dBm",
data = {
types = { "signal_power" },
options = {
signal_power__value = {
color = "0000ff",
noarea = true,
title = "Signal quality"
}
}
}
}
}
end
