aboutsummaryrefslogtreecommitdiffstats
path: root/watch-co2.sh
blob: 4a20708db0f7df25a06c48c429c36e87b52941cd (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
#!/bin/bash

# args
topic="$1"
host="${2-mqtt}"

# config
low="600"      # green
medium="1000"  # yellow
high="2000"    # red
sleep="60"

######################################################################################

function tty_rgb() {
    local r="$1"
    local g="$2"
    local b="$3"

    echo -ne "\x1b[38;2;${r};${g};${b}m"
}

function tty_reset() {
    echo -ne "\x1b[0m"
}

function colorize_ppm() {
    local ppm="$1"

    if test $ppm -lt $low; then
	tty_rgb 0 255 0
#	echo "$ppm: low"
    elif test $ppm -lt $medium; then
	red=$(( ($ppm - $low) * 255 / ($medium - $low) ))
	tty_rgb $red 255 0
#	echo "$ppm: low-medium: red $red"
    elif test $ppm -lt $high; then
	green=$(( ($ppm - $medium) * 255 / ($high - $medium) ))
	green=$(( 255 - $green ))
	tty_rgb 255 $green 0
#	echo "$ppm: medium-high: green $green"
    else
	tty_rgb 255 0 0
#	echo "$ppm: high"
    fi
}

function show_ppm() {
    local ppm="$1"

    colorize_ppm $ppm
    figlet -t -c -k -f big $ppm
    tty_reset
}

######################################################################################

if test -f /var/lib/scd/values.json; then
    # direct mode
    while true; do
	ppm=$(jq .co2 /var/lib/scd/values.json)
	show_ppm $ppm
	sleep $sleep
    done
    exit 0
fi

# mqtt mode
if test "$topic" = ""; then
    echo "usage: $0 [ <mqtt-topic> | list ]"
    exit 1
fi
	
if test "$topic" = "list"; then
    mqtt-simple -h "$host" -s "sensors/co2/#"
    exit 0
fi

while true; do
    ppm=$(mqtt-simple -1 -h "$host" -s "$topic")
    show_ppm $ppm
    sleep $sleep
done