Задача наблюдать за температурой в серверной, на улице и т.д..
Для этого нам понадобится некоторое количество датчиков температуры 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
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
Теперь можно создать скрипт для крона, он будет проверять, нет ли новых датчиков, и записывать в базу