#!/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 [ | 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