make relay-cmd have config to replace libremanage
[libremanage.git] / relay-cmd
1 #!/bin/bash
2
3 trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR
4
5 usage() {
6 cat <<EOF
7 Usage: relay-cmd poweroff|poweron|reboot HOSTNAME|CHANNEL [RELAY_ID]
8
9 For CHANNEL and RELAY_ID, run hidusb-relay-cmd and hidusb-relay-cmd state.
10 I recommend writing a config to use HOSTNAME instead. Config is /etc/relay-cmd.conf
11 Example config:
12
13 # This config is just bash that gets sourced.
14 # relay_id is not needed if only 1 relay is connected.
15 cephserver3_channel=1
16 cephserver3_relay_id=HURTM
17 EOF
18 exit $1
19 }
20
21
22 if (( $# < 2 )); then
23 usage
24 fi
25
26 read action chan relay_id <<<"$@"
27
28 if [[ -e /etc/relay-cmd.conf ]]; then
29 source /etc/relay-cmd.conf
30 fi
31
32 if [[ $chan != [0-9]* ]]; then
33 chan_var=${chan}_channel
34 chan=${!chan_var}
35 if [[ ! $chan ]]; then
36 echo "error: channel not found in /etc/relay-cmd.conf" >&2
37 exit 1
38 fi
39 if [[ ! $relay_id ]]; then
40 relay_id_var=${chan}_relay_id
41 relay=${!relay_id_var}
42 fi
43 fi
44
45
46 if hidusb-relay-cmd state | grep ON; then
47 printf "%s\n" "WARNING: output from hidusb-relay-cmd state shows an ON relay. this could mean another command instance is running, or it got stuck on due to an uncompleted command." >&2
48 fi
49
50
51 case $(hidusb-relay-cmd state|wc -l) in
52 0)
53 echo "error: got 0 lines from running hidusb-relay-cmd state" >&2
54 exit 1
55 ;;
56 1) : ;;
57 *)
58 if [[ ! $relay_id ]]; then
59 echo "error: more than 1 relay device, so passing its id is required" >&2
60 exit 1
61 fi
62 ;;
63 esac
64
65
66 if [[ $relay_id ]]; then
67 # leave this as an empty var if its not passed
68 relay_id_arg="id=$relay_id"
69 fi
70
71 # verbose command
72 v() {
73 printf "+ %s\n" "$*"
74 "$@"
75 }
76
77
78 # ignore hup so we complete even if there is a connection problem.
79 trap '' HUP
80 echo "$0: doing $action. shell commands are printed to the terminal:"
81 case $action in
82 poweroff)
83 v hidusb-relay-cmd $relay_id_arg on $chan
84 v sleep 6
85 v hidusb-relay-cmd $relay_id_arg off $chan
86 ;;
87 poweron)
88 v hidusb-relay-cmd $relay_id_arg on $chan
89 v sleep 1
90 v hidusb-relay-cmd $relay_id_arg off $chan
91 ;;
92 reboot)
93 v hidusb-relay-cmd $relay_id_arg on $chan
94 v sleep 6
95 v hidusb-relay-cmd $relay_id_arg off $chan
96 v sleep 1
97 v hidusb-relay-cmd $relay_id_arg on $chan
98 v sleep 1
99 v hidusb-relay-cmd $relay_id_arg off $chan
100 ;;
101 *)
102 echo "error: action arg not supported" >&2
103 exit 1
104 esac
105 echo "$0: script ended. exiting"