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

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

# config
l1="500"     # green
l2="1000"    # yellow
l3="1500"    # red
l4="2000"    # purple
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 $l1; then
	tty_rgb 0 255 0
    elif test $ppm -lt $l2; then
	red=$(( ($ppm - $l1) * 255 / ($l2 - $l1) ))
	tty_rgb $red 255 0
    elif test $ppm -lt $l3; then
	green=$(( ($ppm - $l2) * 255 / ($l3 - $l2) ))
	green=$(( 255 - $green ))
	tty_rgb 255 $green 0
    elif test $ppm -lt $l4; then
	blue=$(( ($ppm - $l3) * 255 / ($l4 - $l3) ))
	tty_rgb 255 0 $blue
    else
	tty_rgb 255 0 255
    fi
}

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

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

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

if test "$topic" = "test"; then
    for ppm in $(seq $l1 50 $l4); do
	colorize_ppm $ppm
	echo -n " -*- test -*- $ppm -*-"
	tty_reset
	echo ""
    done
    exit 0
fi

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