Fix khatus_sensor_bluetooth_power
[khatus.git] / bin / khatus
CommitLineData
438d0d5f
SK
1#! /bin/bash
2
4d314e0f
SK
3set -e
4
6339a4f8 5consume() {
438d0d5f 6 pipe="$1"
2b221665 7 debug="$2"
f37162a4
SK
8 dir_bin="$3"
9 prefixes_of_net_interfaces_to_show="$4"
438d0d5f 10 tail -f "$pipe" \
f37162a4 11 | stdbuf -o L "$dir_bin"/khatus_controller \
2b221665 12 -v opt_debug="$debug" \
365549a9 13 -v opt_mpd_song_max_chars=10 \
f37162a4 14 -v opt_prefixes_of_net_interfaces_to_show="$prefixes_of_net_interfaces_to_show"
438d0d5f
SK
15}
16
9ab9a718 17run_producer() {
ab99b556
SK
18 pipe="$1"
19 dir_bin="$2"
20 log="$3"
21 cmd="$4"
22 msg_head="$5"
23 "$dir_bin"/$cmd | while read line; do
24 echo "${msg_head} $line" > "$pipe"
25 done \
9ab9a718
SK
26 2> "$log"
27 # TODO: Perhaps direct log to pipe, so that controller can monitor sensors?
ab99b556
SK
28}
29
9ab9a718
SK
30fork_reactor() {
31 run_producer "$@" &
32}
33
34fork_poller() {
35 interval="$1"
36 shift
37 while true
38 do
39 run_producer "$@"
2b221665 40 sleep "$interval"
438d0d5f
SK
41 done &
42}
43
44main() {
4d314e0f 45 # Defaults
2b221665 46 debug=0
f37162a4 47 dir_bin="$HOME/bin"
75347e52
SK
48 dir_logs=$(mktemp -d)
49 file_pipe=$(mktemp)
4d314e0f 50 weather_station_id='KJFK'
bbb42518 51 screen_brightness_device_name='acpi_video0'
2b221665 52 prefixes_of_net_interfaces_to_show='w' # comma-separated
c0e8473e 53 disk_space_device='/'
cf698ca8 54 disk_io_device='sda'
5dd1535a 55 thermal_zone=0
b9bdec44 56 fan_path='/proc/acpi/ibm/fan'
4d314e0f 57
3716523b
SK
58 interval_inp_datetime=1
59 interval_inp_brightness=1
60 interval_inp_weather=$(( 30 * 60)) # 30 minutes
61 interval_inp_mpd_state=1
62 interval_inp_mpd_song=1
63 interval_inp_volume=1
64 interval_inp_bluetooth=5
65 interval_inp_net_wifi=5
66 interval_inp_net_io=1
67 interval_inp_disk_space=5
68 interval_inp_disk_io=1
69 interval_inp_loadavg=1
70 interval_inp_temp=1
71 interval_inp_fan=1
72 interval_inp_mem=1
29b3b10d 73
4d314e0f 74 # User-overrides
6a12cab1
SK
75 # ---------------------------------------------------------------------
76 # IMPORTANT:
77 # In order for automatic value reporting, at startup, to work - ensure that
78 # long option names match corresponding variable names!
79 # ---------------------------------------------------------------------
2b221665
SK
80 long_options=''
81 long_options+='debug'
6a12cab1 82 long_options+=',dir_bin:'
75347e52
SK
83 long_options+=',dir_logs:'
84 long_options+=',file_pipe:'
6a12cab1
SK
85 long_options+=',weather_station_id:'
86 long_options+=',screen_brightness_device_name:'
2b221665 87 long_options+=',prefixes_of_net_interfaces_to_show:'
c0e8473e 88 long_options+=',disk_space_device:'
8fe8971a 89 long_options+=',disk_io_device:'
5dd1535a 90 long_options+=',thermal_zone:'
b9bdec44 91 long_options+=',fan_path:'
3716523b
SK
92 long_options+=',interval_inp_datetime:'
93 long_options+=',interval_inp_brightness:'
94 long_options+=',interval_inp_weather:'
95 long_options+=',interval_inp_mpd_state:'
96 long_options+=',interval_inp_mpd_song:'
97 long_options+=',interval_inp_volume:'
98 long_options+=',interval_inp_bluetooth:'
99 long_options+=',interval_inp_net_wifi:'
100 long_options+=',interval_inp_net_io:'
101 long_options+=',interval_inp_disk_space:'
102 long_options+=',interval_inp_disk_io:'
103 long_options+=',interval_inp_loadavg:'
104 long_options+=',interval_inp_temp:'
105 long_options+=',interval_inp_fan:'
106 long_options+=',interval_inp_mem:'
4d314e0f
SK
107 OPTS=$(
108 getopt \
2b221665
SK
109 -o 'd' \
110 -l $long_options \
4d314e0f
SK
111 -- "$@"
112 )
113 eval set -- "$OPTS"
114 while true
115 do
116 case "$1" in
2b221665
SK
117 -d|--debug)
118 debug=1
119 shift
120 ;;
6a12cab1 121 --dir_bin)
f37162a4
SK
122 dir_bin="$2"
123 shift 2
124 ;;
75347e52
SK
125 --dir_logs)
126 dir_logs="$2"
127 shift 2
128 ;;
129 --file_pipe)
130 file_pipe="$2"
4d314e0f
SK
131 shift 2
132 ;;
6a12cab1 133 --weather_station_id)
4d314e0f
SK
134 weather_station_id="$2"
135 shift 2
136 ;;
6a12cab1 137 --screen_brightness_device_name)
bbb42518
SK
138 screen_brightness_device_name="$2"
139 shift 2
140 ;;
2b221665
SK
141 --prefixes_of_net_interfaces_to_show)
142 prefixes_of_net_interfaces_to_show="$2"
143 shift 2
144 ;;
c0e8473e
SK
145 --disk_space_device)
146 disk_space_device="$2"
147 shift 2
148 ;;
cf698ca8
SK
149 --disk_io_device)
150 disk_io_device="$2"
151 shift 2
152 ;;
5dd1535a
SK
153 --thermal_zone)
154 thermal_zone="$2"
155 shift 2
156 ;;
b9bdec44
SK
157 --fan_path)
158 fan_path="$2"
159 shift 2
160 ;;
3716523b
SK
161 --interval_inp_datetime)
162 interval_inp_datetime="$2"
29b3b10d
SK
163 shift 2
164 ;;
3716523b
SK
165 --interval_inp_brightness)
166 interval_inp_brightness="$2"
29b3b10d
SK
167 shift 2
168 ;;
3716523b
SK
169 --interval_inp_weather)
170 interval_inp_weather="$2"
29b3b10d
SK
171 shift 2
172 ;;
3716523b
SK
173 --interval_inp_mpd_state)
174 interval_inp_mpd_state="$2"
29b3b10d
SK
175 shift 2
176 ;;
3716523b
SK
177 --interval_inp_mpd_song)
178 interval_inp_mpd_song="$2"
29b3b10d
SK
179 shift 2
180 ;;
3716523b
SK
181 --interval_inp_volume)
182 interval_inp_volume="$2"
29b3b10d
SK
183 shift 2
184 ;;
3716523b
SK
185 --interval_inp_bluetooth)
186 interval_inp_bluetooth="$2"
29b3b10d
SK
187 shift 2
188 ;;
3716523b
SK
189 --interval_inp_net_wifi)
190 interval_inp_net_wifi="$2"
29b3b10d
SK
191 shift 2
192 ;;
3716523b
SK
193 --interval_inp_net_io)
194 interval_inp_net_io="$2"
29b3b10d
SK
195 shift 2
196 ;;
3716523b
SK
197 --interval_inp_disk_space)
198 interval_inp_disk_space="$2"
29b3b10d
SK
199 shift 2
200 ;;
3716523b
SK
201 --interval_inp_disk_io)
202 interval_inp_disk_io="$2"
29b3b10d
SK
203 shift 2
204 ;;
3716523b
SK
205 --interval_inp_loadavg)
206 interval_inp_loadavg="$2"
29b3b10d
SK
207 shift 2
208 ;;
3716523b
SK
209 --interval_inp_temp)
210 interval_inp_temp="$2"
29b3b10d
SK
211 shift 2
212 ;;
3716523b
SK
213 --interval_inp_fan)
214 interval_inp_fan="$2"
29b3b10d
SK
215 shift 2
216 ;;
3716523b
SK
217 --interval_inp_mem)
218 interval_inp_mem="$2"
29b3b10d
SK
219 shift 2
220 ;;
4d314e0f
SK
221 --)
222 shift
223 break
224 ;;
225 esac
226 done
227
bbb42518
SK
228 screen_brightness_device_path='/sys/class/backlight'
229 screen_brightness_device_path+="/$screen_brightness_device_name"
0c0ebbe1 230
6a12cab1
SK
231 (
232 echo '=============================================='
233 echo "Khatus starting with the following parameters:"
234 echo '=============================================='
235 for param in \
236 $(echo -n "$long_options" \
237 | awk -v RS=, '{sub(":$", ""); print $0}'
238 )
239 do
240 echo "$param := ${!param}"
241 done \
242 | column -ts:
243 echo '----------------------------------------------'
4d314e0f
SK
244 ) >&2
245
75347e52
SK
246 rm -f "$file_pipe"
247 mkfifo "$file_pipe"
438d0d5f 248
f37162a4
SK
249 cmd_sens_screen_brightness='khatus_sensor_screen_brightness'
250 cmd_sens_screen_brightness+=" $screen_brightness_device_path"
2b221665 251
f37162a4 252 cmd_sens_weather="khatus_sensor_weather $weather_station_id"
f37162a4 253 cmd_sens_disk_space="khatus_sensor_disk_space $disk_space_device"
f37162a4 254 cmd_sens_disk_io="khatus_sensor_disk_io $disk_io_device"
f37162a4 255 cmd_sens_temperature="khatus_sensor_temperature $thermal_zone"
f37162a4 256 cmd_sens_fan="khatus_sensor_fan $fan_path"
fd22859b 257 cmd_sens_bluetooth="khatus_sensor_bluetooth_power $dir_bin"
e7a3c6ab 258 cmd_sens_mpd_state="khatus_sensor_mpd_state $dir_bin"
0819928a 259 cmd_sens_net_addr_io="khatus_sensor_net_addr_io $dir_bin"
d06e7260 260 cmd_sens_volume="khatus_sensor_volume $dir_bin"
fd22859b 261
4d314e0f 262 # TODO: Redirect each worker's stderr to a dedicated log file
75347e52
SK
263 pipe="$file_pipe"
264 log="$dir_logs"/khatus_sensors.log
ab99b556 265
9ab9a718 266 fork_reactor "$pipe" "$dir_bin" "$log" "khatus_sensor_energy $dir_bin" 'in:ENERGY'
ab99b556 267
9ab9a718
SK
268 fork_poller $interval_inp_datetime "$pipe" "$dir_bin" "$log" khatus_sensor_datetime 'in:DATE_TIME'
269 fork_poller $interval_inp_brightness "$pipe" "$dir_bin" "$log" "$cmd_sens_screen_brightness" 'in:SCREEN_BRIGHTNESS'
270 fork_poller $interval_inp_weather "$pipe" "$dir_bin" "$log" "$cmd_sens_weather" 'in:WEATHER'
e7a3c6ab 271 fork_poller $interval_inp_mpd_state "$pipe" "$dir_bin" "$log" "$cmd_sens_mpd_state" 'in:MPD_STATE'
9ab9a718 272 fork_poller $interval_inp_mpd_song "$pipe" "$dir_bin" "$log" khatus_sensor_mpd_song 'in:MPD_SONG'
d06e7260 273 fork_poller $interval_inp_volume "$pipe" "$dir_bin" "$log" "$cmd_sens_volume" 'in:VOLUME'
fd22859b 274 fork_poller $interval_inp_bluetooth "$pipe" "$dir_bin" "$log" "$cmd_sens_bluetooth" 'in:BLUETOOTH_POWER'
9ab9a718 275 fork_poller $interval_inp_net_wifi "$pipe" "$dir_bin" "$log" khatus_sensor_net_wifi_status 'in:NET_WIFI_STATUS'
0819928a 276 fork_poller $interval_inp_net_io "$pipe" "$dir_bin" "$log" "$cmd_sens_net_addr_io" 'in:NET_ADDR_IO'
9ab9a718
SK
277 fork_poller $interval_inp_disk_space "$pipe" "$dir_bin" "$log" "$cmd_sens_disk_space" 'in:DISK_SPACE'
278 fork_poller $interval_inp_disk_io "$pipe" "$dir_bin" "$log" "$cmd_sens_disk_io" 'in:DISK_IO'
279 fork_poller $interval_inp_loadavg "$pipe" "$dir_bin" "$log" khatus_sensor_loadavg 'in:LOAD_AVG'
280 fork_poller $interval_inp_temp "$pipe" "$dir_bin" "$log" "$cmd_sens_temperature" 'in:TEMPERATURE'
281 fork_poller $interval_inp_fan "$pipe" "$dir_bin" "$log" "$cmd_sens_fan" 'in:FAN'
282 fork_poller $interval_inp_mem "$pipe" "$dir_bin" "$log" khatus_sensor_memory 'in:MEMORY'
2b221665
SK
283
284 consume \
285 "$pipe" \
286 "$debug" \
f37162a4 287 "$dir_bin" \
2b221665 288 "$prefixes_of_net_interfaces_to_show"
438d0d5f
SK
289}
290
291main $@
This page took 0.095965 seconds and 4 git commands to generate.