Přidání teploměru TM - RS232: Porovnání verzí

Z Wiki UnArt Slavičín
Skočit na navigaciSkočit na vyhledávání
Bez shrnutí editace
Bez shrnutí editace
 
(Nejsou zobrazeny 4 mezilehlé verze od stejného uživatele.)
Řádek 2: Řádek 2:


==Zobrazení teploty z čidla==
==Zobrazení teploty z čidla==
Teplotu z čihla si můžeme zobrazit více způsoby viz. [http://www.abclinuxu.cz/poradna/linux/show/241310].
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 19: Řádek 19:
==Odebírání teploty přes SNMP==
==Odebírání teploty přes SNMP==


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]].
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 42: Řá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.

Reference

[1],[2],[3]