Přidání teploměru TM - RS232: Porovnání verzí
(Nová stránka: Pokud máme v pc teploměr [http://papouch.com/shop/scripts/_detail.asp?katcislo=0038 TM - RS232] můžeme aktuální teplotu odebírat přes snmp. ==Zobrazení teploty z čidla== T...) |
Bez shrnutí editace |
||
(Není zobrazeno 5 mezilehlých verzí od stejného uživatele.) | |||
Řádek 2: | Řádek 2: | ||
==Zobrazení teploty z čidla== | ==Zobrazení teploty z čidla== | ||
Teplotu z | Teplotu z čidla si můžeme zobrazit více způsoby viz. článek na [http://www.abclinuxu.cz/poradna/linux/show/241310 abclinuxu]. | ||
cat /dev/ttyS0 | cat /dev/ttyS0 | ||
Řádek 16: | Řádek 16: | ||
server:# head -n 1 /dev/ttyS0 | server:# head -n 1 /dev/ttyS0 | ||
+028.1C | +028.1C | ||
==Odebírání teploty přes SNMP== | ==Odebírání teploty přes SNMP== | ||
Jak přidat do snmp vlastní OID už | Jak přidat do snmp vlastní OID už [http://wiki.slfree.net/index.php/P%C5%99id%C3%A1n%C3%AD_vlastn%C3%ADho_OID víme]. | ||
Skript '''get_temperature_template.sh''' pro snmp může vypadat třeba takhle: | Skript '''get_temperature_template.sh''' pro snmp může vypadat třeba takhle: | ||
Řádek 43: | Řádek 42: | ||
esac | esac | ||
Důležitá je pro nás proměnná '''TEMPERATURE''', kde namísto xxx má být naše teplota. | 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 [http://www.samuraj-cz.com/clanek/cacti-snmp-monitoring-a-grafy/ zde]. | |||
====Reference==== | |||
[http://papouch.com/shop/scripts/_detail.asp?katcislo=0038],[http://www.abclinuxu.cz/poradna/linux/show/241310],[http://www.samuraj-cz.com/clanek/cacti-snmp-monitoring-a-grafy/] |
Aktuální verze z 16. 4. 2009, 08:48
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. článek na abclinuxu.
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.