blob: 8d90c029ed3a0365ecac84d841dd79757046e967 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
#!/bin/bash
display_help() {
>&2 printf 'lights-out version #VERSION#\n'
>&2 printf '\n'
>&2 printf 'usage:\n'
>&2 printf ' lights-out get $input: display inverted pin state of $input\n'
>&2 printf ' lights-out help: display this help and exit\n'
>&2 printf ' lights-out init: init gpio\n'
>&2 printf ' lights-out name: print the name of the server\n'
>&2 printf ' lights-out push $output $time: simulate push on $output for $time seconds\n'
>&2 printf ' lights-out turn on: turn on machine if not yet running\n'
}
check_argument_count() {
local count="$1"
shift
if [ $# -ne "${count}" ]; then
>&2 printf 'wrong number of arguments: "%s" expects %s argument' "$1" "${count}"
if [ "${count}" -ne 1 ]; then
printf 's'
fi
printf ', but %s were given\n\n' "$#"
display_help
exit 1
fi
}
if [ $# -lt 1 ]; then
display_help
exit 1
fi
if [ ! -r '#ETCDIR#/lights-out.conf' ]; then
>&2 printf 'cannot read config file "#ETCDIR#/lights-out.conf"\n'
exit 1
fi
if ! command -v gpio >/dev/null 2>&1; then
>&2 printf 'cannot find command "gpio" - is it installed?\n'
exit
fi
unset inputs
unset outputs
declare -A inputs
declare -A outputs
. '#ETCDIR#/lights-out.conf'
if [ -z "${inputs['power']}" ]; then
>&2 printf 'invalid config "#ETCDIR#/lights-out.conf": no power input defined.\n'
exit 1
fi
if [ -z "${outputs['power']}" ]; then
>&2 printf 'invalid config "#ETCDIR#/lights-out.conf": no power output defined.\n'
exit 1
fi
if [ -z "${server}" ]; then
>&2 printf 'invalid config "#ETCDIR#/lights-out.conf": no server name defined.\n'
exit 1
fi
case "$1" in
'get')
check_argument_count 2 "$@"
if [ -z "${inputs["$2"]}" ]; then
>&2 printf 'unknown input "%s"\n\n' "$2"
display_help
exit 1
fi
value=$(
gpio read "${inputs["$2"]}"
) || exit $?
echo $((1-value))
;;
'help')
display_help
;;
'init')
check_argument_count 1 "$@"
for input in "${inputs[@]}"; do
gpio mode "${input}" in || exit $?
gpio mode "${input}" up || exit $?
done
for output in "${outputs[@]}"; do
gpio write "${output}" 0 || exit $?
gpio mode "${output}" out || exit $?
done
;;
'name')
printf '%s\n' "${server}"
;;
'push')
check_argument_count 3 "$@"
if [ -z "${outputs["$2"]}" ]; then
>&2 printf 'unknown output "%s"\n\n' "$2"
display_help
exit 1
fi
gpio write "${outputs["$2"]}" 1 || exit $?
sleep "$3"
gpio write "${outputs["$2"]}" 0 || exit $?
;;
'turn')
if [ $# -ne 2 ] \
|| [ "x$2" != 'xon' ]; then
>&2 printf 'unknown command "%s"\n\n' "$*"
display_help
exit 1
fi
value=$(
"$0" get power
) || exit $?
if [ "${value}" -eq 0 ]; then
"$0" push power 0.1 || exit $?
fi
;;
'turn on')
check_argument_count 1 "$@"
value=$(
"$0" get power
) || exit $?
if [ "${value}" -eq 0 ]; then
"$0" push power 0.1 || exit $?
fi
;;
*)
>&2 printf 'unknown command "%s"\n\n' "$1"
display_help
exit 1
;;
esac
|