Мониторинг температуры Digitemp+MySql
Чтобы осуществлять мониторинг температуры в серверной, на улице и т.д...
Для этого нам понадобится некоторое количество датчиков температуры DS18B20 ( DS1820 ) и адаптер для подключения к COM порту компьютера и Digitemp программа умеет снимать показания с датчиков на 1-Wire шине.
Схема адаптера
или
Первая схема имеет ограничение на 10 датчиков.
Диод Шотки 1N5818
Стабилитрон 1N5228 3.9 V
Стабилитрон 1N5234 6.2 V
Резистор 1.5 кОм.
9 -pin'овый разъем ( для подключения к Com — порту материнской платы )
Установка Digitemp:
# cd /usr/local/src
# sudo mkdir digitemp
# cd digitemp
# sudo wget http://andy.od.ua/pub/digitemp/digitemp-3.5.0_mysql.tar
# sudo tar vxf digitemp-3.5.0_mysql.tar
# cd digitemp-3.5.0_mysql
# sudo apt-get install gcc libmysqlclient15-dev
# sudo make ds9097
# sudo mkdir /usr/local/etc/digitemp
Переместим скомпилированный файл в директорию /usr/local/etc/digitemp
#sudo mv digitemp_DS9097 /usr/local/etc/digitemp/digitemp_DS9097
теперь создадим файл .digitemprc_mysql в нем будут хранится настройки доступа к базе mysql
# sudo nano /usr/local/etc/digitemp/.digitemprc_mysql
вот с таким содержанием
DBNAME digitemp #Имя базы не больше 32 символов DBUSER digitemp #Имя пользователя не больше 16 символов DBPASS pass #Пароль не больше 16 символов DBHOST localhost #Имя хоста или Ip-адрес не больше 16 символов DBTABLE digitemp #Имя таблицы не больше 32 символов DBCOLUMNS BLANK,TIMESTAMP,SERIAL,TEMPC #Имена столбцов которые будут записываться в базу
Описание DBCOLUMNS:
BLANK – пусто
TIMESTAMP – дата и время
TEMPC – температура в Цельсиях
TEMPF – температура в фаренгейтах
SERIAL – серийный номер датчика
SENSOR – номер датчика
Любой из вышеперечисленных столбцов могут быть указаны в любом порядке и могут быть дублированы
Теперь создадим таблицу куда будут записываться показания датчиков
# mysql –uимя пользователя –pпароль имя базы < digitemp.sql
содержимое файла digitemp.sql
CREATE TABLE `digitemp` ( `dtKey` int(11) NOT NULL AUTO_INCREMENT, `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `SerialNumber` varchar(17) COLLATE utf8_unicode_ci NOT NULL, `Fahrenheit` decimal(6,2) NOT NULL, `Celsus` decimal(6,2) NOT NULL, `Sensor` int(3) DEFAULT NULL, PRIMARY KEY (`dtKey`), KEY `serial_key` (`SerialNumber`), KEY `time_key` (`time`) ) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
инициализация датчиков
# cd /usr/local/etc/digitemp
# ./digitemp_DS9097 -i -s /dev/ttyS0
DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane
GNU Public License v2.0 - http://www.digitemp.com
Turning off all DS2409 Couplers
..
Searching the 1-Wire LAN
28D4B1DD030000FC : DS18B20 Temperature Sensor
284FB4DD03000067 : DS18B20 Temperature Sensor
ROM #0 : 28D4B1DD030000FC
ROM #1 : 284FB4DD03000067
Wrote .digitemprc
Программа нашла два датчика, значит устройство работает.
Теперь можно считать информацию со всех датчиков командой
# ./digitemp_DS9097 -a DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane GNU Public License v2.0 - http://www.digitemp.com Sep 04 21:11:57 Sensor 0 C: 21.12 F: 70.03 Sep 04 21:11:58 Sensor 1 C: 29.56 F: 85.21
Теперь можно создать скрипт для крона, он будет проверять, нет ли новых датчиков, и записывать в базу
# sudo nano digitemp.sh
содержимое файла
#!/bin/bash cd /usr/local/etc/digitemp /usr/local/etc/digitemp/digitemp_DS9097 -i -s /dev/ttyS0 > /dev/null /usr/local/etc/digitemp/digitemp_DS9097 -q
# sudo nano /etc/crontab
*/5 * * * * root /usr/local/etc/digitemp/digitemp.sh
# sudo service cron restart