Přidání teploměru TM - RS232
Pokud máme v pc teploměr TM - RS232 můžeme aktuální teplotu odebírat přes snmp.
Zobrazení teploty z čidla
Teplotu z čidla si můžeme zobrazit více způsoby viz. [1].
cat /dev/ttyS0 sed 's/\r.*//;q' /dev/ttyS0 head -n 1 /dev/ttyS0 read teplota < /dev/ttyS0 && echo -n $teplota
způsobů je více a výstup by měl vypadat třeba takhle
server:# head -n 1 /dev/ttyS0 +028.1C
Odebírání teploty přes SNMP
Jak přidat do snmp vlastní OID už víme.
Skript get_temperature_template.sh pro snmp může vypadat třeba takhle:
#!/bin/sh -f PATH=:/bin:/usr/bin TEMPERATURE=xxx; PLACE=".1.3.6.1.4.1.2021.255" REQ="$2" case "$REQ" in $PLACE) RET=$PLACE.1 ;; *) exit 0 ;; esac echo "$RET" case "$RET" in $PLACE.1) echo "integer"; echo $TEMPERATURE; exit 0 ;; esac
Důležitá je pro nás proměnná TEMPERATURE, kde namísto xxx má být naše teplota. Jelikož SNMP umí jen celá čísla, tak se musíme zbavit desetinných míst. Teploměr vrací hodnotu ve tvaru [znaménko][celá část].[desetinná část]C, např. 044.5C . Desetinné části ze zbavíme tak, že číslo vynásobíme 10 a po přečtení hodnoty z snmp zase vydělíme. Bohužel se mi nedaří získát tuto hodnotu pomocí výše uvedených příkazů přímo v tomto skriptu. Resp. hodnota získat jde ale pokud si prohlédneme dané OID, tak hodnota není definovaná. Pokud někdo ví jak na to, tak sem s tím:-)
Pro je tu ještě jeden skript getnsavet.sh, který ze skriptu get_temperature_template.sh vytváří skript get_temperature.sh ve kterém edituje řádek s teplotou. Výsledným skriptem pro SNMP je tedy get_temperature.sh.
Skript getnsavet.sh:
#!/bin/sh read TEMP < /dev/ttyS0 SIGN=${TEMP:0:1} if [ "$SIGN" = "+" ]; then VAR=10; else VAR=-10; fi # Remove sign TEMP=${TEMP#?} # Remove C as Celsius TEMP=${TEMP%C} # If number has a float point then we save numner after it. FLOAT=${TEMP#???.} # If number has a float point then we remove it and everything after. TEMP=${TEMP%.?} # If first digit in number is zero then we remove it. TEMP=${TEMP#0} TEMP=$(($TEMP*$VAR + ($FLOAT*$VAR/10))); sed "5s/.*/TEMPERATURE=$TEMP;/" /var/net-snmp/get_temperature_template.sh > /var/net-snmp/get_temperature.sh
No a jeho pravidelné spuštění každou minutu zajistíme třeba pomocí cronu:
*/1 * * * * sh /var/net-snmp/getnsavet.sh
Pokud používáme monitorovací systém Cacti, můžeme jednoduže zaznamenávat teplotu přímo do grafu. Hezký návod je na zde.