Skip to content

Commit 4117e84

Browse files
committed
also use the battery voltage to set the blink rate
add the current voltage to the blinkvoltage call
1 parent 0352e69 commit 4117e84

File tree

2 files changed

+110
-28
lines changed

2 files changed

+110
-28
lines changed

blinkvoltage

Lines changed: 97 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,37 +17,115 @@
1717
# Date By Description
1818
# 20140826 BL o Add script header
1919
# o try to prevent abmber blinking flipflop red/green
20+
# 20140914 BL Also use the actual voltage to set the blinkling
2021
#============================================================================
2122

2223

23-
side=left
24+
side=left # side to use for the blinking
25+
26+
v0=6000000 # low
27+
v1=7100000
28+
v2=7500000
29+
v3=8000000 # very good
2430

25-
# reset BOTH red and green leds unless we want amber
26-
if [ "$#" -le 0 ]; then
27-
trigger="none"
31+
get_delay() {
32+
# purpose: Determine delay_on and delay_off values depending on current voltage
33+
34+
# make the sum 1000 so a one second interval
35+
36+
pctOK=$(bc <<< "scale=0; ($voltage * 100) / ${v3}")
37+
if [ $pctOK -ge 95 ]; then # 7.6V
38+
intens=10
39+
# dead slow
40+
delay_on=10
41+
delay_off=990
42+
elif [ $pctOK -ge 85 ]; then # 6.8V
43+
intens=127
44+
# 50/50 but a bit faster
45+
delay_on=250
46+
delay_off=250
47+
elif [ $pctOK -ge 75 ]; then # 6.0V
48+
intens=255
49+
#rapid blink
50+
delay_on=50
51+
delay_off=150
2852
else
29-
trigger=$1
53+
intens=255
54+
#rapid blink
55+
delay_on=20
56+
delay_off=180
57+
fi
58+
# echo "\$delay_off=$delay_off \$delay_on=$delay_on \$intens=$intens"
59+
}
60+
# to prevent flipflopping red<-->green set triggers close to eachother
61+
# not ALWAYS successful. Do not have a way (yet) to ensure
62+
# AMBER leds and not flip=flopping green/red
63+
setAmber() {
64+
echo timer > /sys/class/leds/ev3:green:$side/trigger
65+
echo timer > /sys/class/leds/ev3:red:$side/trigger
66+
echo 500 > /sys/class/leds/ev3:green:$side/delay_on
67+
echo 500 > /sys/class/leds/ev3:red:$side/delay_on
68+
echo 500 > /sys/class/leds/ev3:green:$side/delay_off
69+
echo 500 > /sys/class/leds/ev3:red:$side/delay_off
70+
echo $delay_off > /sys/class/leds/ev3:green:$side/delay_off
71+
echo $delay_off > /sys/class/leds/ev3:red:$side/delay_off
72+
echo $delay_on > /sys/class/leds/ev3:green:$side/delay_on
73+
echo $delay_on > /sys/class/leds/ev3:red:$side/delay_on
74+
echo $intens > /sys/class/leds/ev3:green:$side/brightness
75+
echo $intens > /sys/class/leds/ev3:red:$side/brightness
76+
}
77+
78+
setRed() {
79+
echo timer > /sys/class/leds/ev3:red:$side/trigger
80+
echo $intens > /sys/class/leds/ev3:red:$side/brightness
81+
echo $delay_on > /sys/class/leds/ev3:red:$side/delay_on
82+
echo $delay_off > /sys/class/leds/ev3:red:$side/delay_off
83+
}
84+
85+
setGrn() {
86+
echo timer > /sys/class/leds/ev3:green:$side/trigger
87+
echo $intens > /sys/class/leds/ev3:green:$side/brightness
88+
echo $delay_on > /sys/class/leds/ev3:green:$side/delay_on
89+
echo $delay_off > /sys/class/leds/ev3:green:$side/delay_off
90+
91+
}
92+
93+
# make sure we do have the variables
94+
trigger=""
95+
voltage=0
96+
97+
# reset BOTH red and green leds unless we want amber
98+
if [ "$#" -lt 1 ]; then
99+
trigger="none"
100+
else
101+
if [ "$#" -ge 1 ]; then
102+
trigger=$1
103+
if [ "$#" -ge 2 ]; then
104+
voltage=$2
105+
fi
106+
fi
30107
fi
108+
31109
# first set all left colors OFF
32110
ledbase="/sys/class/leds/ev3:red:$side"
33-
echo 0 > $ledbase/brightness
34111
echo none > $ledbase/trigger
112+
echo 0 > $ledbase/brightness
113+
35114
ledbase="/sys/class/leds/ev3:green:$side"
36-
echo 0 > $ledbase/brightness
37115
echo none > $ledbase/trigger
116+
echo 0 > $ledbase/brightness
38117

39-
if [ "$trigger" == none ]; then exit 0 # a good point to leave here
40-
elif [ "$trigger" == amber ]; then
41-
echo timer > /sys/class/leds/ev3:red:$side/trigger
42-
echo timer > /sys/class/leds/ev3:green:$side/trigger
43-
echo 1 > /sys/class/leds/ev3:red:$side/brightness
44-
echo 1 > /sys/class/leds/ev3:green:$side/brightness
45-
elif [ "$trigger" == "red" ]; then setcolor=$trigger
46-
echo timer > /sys/class/leds/ev3:$setcolor:$side/trigger
47-
echo 1 > /sys/class/leds/ev3:$setcolor:$side/brightness
48-
elif [ "$trigger" == "green" ]; then setcolor=$trigger
49-
echo timer > /sys/class/leds/ev3:$setcolor:$side/trigger
50-
echo 1 > /sys/class/leds/ev3:$setcolor:$side/brightness
118+
if [ "$trigger" == none ]; then
119+
exit 0 # a good point to leave here leds have been set already
120+
elif [ "$trigger" == "amber" ]; then
121+
get_delay
122+
setAmber $delay_on $delay_off
123+
elif [ "$trigger" == "red" ]; then
124+
get_delay
125+
setRed $delay_on $delay_off
126+
elif [ "$trigger" == "green" ]; then
127+
get_delay
128+
setGrn $delay_on $delay_off
51129
fi
52130

53131
exit 0

checkpower

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
# Description : Check the battery voltage and warn if the voltage is
55
# less than 7 volts,
66
# also set the left EV3 led to blinking green, amber or red.
7-
# Version : v1.1
7+
# Version : v1.2
88
# Date : 2014-08-26
99
# Usage : checkpower
1010
# No arguments needed nor used
@@ -29,6 +29,10 @@
2929
# Last drop of voltage e.g. was too much
3030
# from 6303066 to 5668733 in 10 minutes (my check interval)
3131
# Causing auto? shutdown.
32+
# 20140902 BL o add the momentary current to the message
33+
# 20140914 BL o add the voltage to the blinkvoltage call,
34+
# to adapt the type of blinking.
35+
# Since kernel 3.16.1 leds can be better controlled.
3236
#============================================================================
3337

3438

@@ -38,31 +42,31 @@
3842
voltage=`cat voltage_now`
3943
# voltage is in microvolt as documented in include/linux/power_supply.h
4044
# Did not take the trouble to format this.
41-
45+
current=`cat current_now`
4246

43-
if [ $voltage -lt 6100000 ]; then
44-
/usr/local/bin/blinkvoltage red
47+
if [ $voltage -lt 6200000 ]; then
48+
/usr/local/bin/blinkvoltage red $voltage
4549
beep
4650
status=LOW
4751
# issue a warning; if setup, then cron can email messages like this.
4852
echo -e "WARNING: voltage $status: $voltage"
4953
elif [ $voltage -lt 6500000 ]; then
50-
/usr/local/bin/blinkvoltage amber
54+
/usr/local/bin/blinkvoltage amber $voltage
5155
status=MED
5256
echo -e "WARNING: voltage $status: $voltage"
5357
elif [ $voltage -lt 7000000 ]; then
54-
/usr/local/bin/blinkvoltage green
58+
/usr/local/bin/blinkvoltage green $voltage
5559
status=WARN
5660
else
57-
/usr/local/bin/blinkvoltage none
61+
/usr/local/bin/blinkvoltage none $voltage
5862
status=OK
5963
fi
6064

6165
# Assign "non-cron" if ENVIRONMENT is unset or null, and thus prevent error "variable unbound":
6266
: "${ENVIRONMENT:=non-cron}"
6367

6468
if [ "$ENVIRONMENT" == "non-cron" ]; then # just a message; no need to add to syslog
65-
echo -e "voltage $status: $voltage"
69+
echo -e "voltage $status: $voltage; current: $current "
6670
else
67-
echo -e "`date +"%b %d %T"` $HOSTNAME cron: $ENVIRONMENT - voltage $status: $voltage" >> /var/log/syslog
71+
echo -e "`date +"%b %d %T"` $HOSTNAME cron: $ENVIRONMENT - voltage $status: $voltage; current: $current" >> /var/log/syslog
6872
fi

0 commit comments

Comments
 (0)