Diese Seite ist statisches HTML und am besten betrachtet mit Java-Script eingeschaltet!

CO2 Ampel von Watterott - Daten in Conky anzeigen

 ·  ☕ 2 Min. Lesen  ·  🤖 SWU

Die CO2 Ampel von Watterott zeigt mit farbigen LEDs die CO2 Konzentration der Luft an und seit der Firmware Version v7 von hier können serielle Kommandos übertragen werden und Daten werden seriell ausgegeben.
Siehe dazu auch Einträge in den Publikationen auf meiner Seite.

Die serielle Schnittstelle der CO2 Ampel in Linux

Die serielle Schnittstelle bei mir hier heisst /dev/ttyACM0. Man kann sie z. B. mit Minicom oder Screen öffnen, aber auch einfach mit cat auf der Kommandozeile ausgeben. Letzteres nutzen wir für unser Script.

Conky’s Schnittstelle zu shell-scriptn

Conky hat neben eigenen Schnittstellen außerdem die Möglichkeit, über periodische Aufrufe von Shellscripten Informationen zu erhalten. Mit diesen Informationen lässt sich einrichten, Conky über CO2 Werte zu informieren und anzuzeigen.

Ziel: Conky CO2 Werte anzeigen lassen

Es sind zwei shellscripte notwendig, damit zum einen die Informationen ermittelt werden und zum anderen, um sie auszugeben. Das erste Script wird auf Änderungen warten und ist deswegen überwiegend blockiert, weswegen es ausscheidet, kontinuierlich Informationen an Conky weiterzugeben. Daher schreibt es seine jeweils neuen Informationen in eine Textdatei, die von einem anderen Script ausgelesen und an Conky weitergegeben wird.

Einsammeln der seriellen CO2 Ampel Daten

Selbstverständlich muss die CO2 Ampel am Computer eingesteckt sein - was sie also nicht sein könnte. Wir verwenden wieder einen Wächter, der, wenn das Gerät angeschossen ist, die Daten filtert und in einer Datei ausgibt. Ist das Gerät nicht vorhanden, wird ein Nullwert ausgegeben.

Das Bash-Script co2ampel.watcher.sh

 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
#!/bin/bash
INTERFACE='/dev/ttyACM0'
SIGNAL="/var/tmp/co2ampel.txt"

if test -c $INTERFACE
then
        echo "1" > $SIGNAL
        sleep 10 
else
        echo "0" > $SIGNAL
        exit
fi

action() {
        readarray -t ALINE < <(echo $line)
        if [[ ${ALINE[0]} =~ .*c:.* ]]
        then
                echo ${ALINE[0]} | sed -e 's/c:/CO2:/g'> $SIGNAL
        fi
}
cat $INTERFACE |
        while read line; do
                action
        done
echo "0" > $SIGNAL

Das Shell-Script co2ampel.conky.sh

1
2
3
4
#!/bin/sh
SIGNAL="/var/tmp/co2ampel.txt"
pgrep -fl "co2ampel.watcher.sh" >/dev/null || nohup bin/co2ampel.watcher.sh > /var/tmp/co2ampel.watcher.out &
cat $SIGNAL

Der Eintrag in der Conky-Datei

1
${execp ~/bin/co2ampel.conky.sh} ppm

Ausgabebeispiel der Datei co2ampel.txt

1
CO2: 838 ppm

wüsti
Author
SWU
human