Мониторинг температуры Digitemp+MySql

Дата: 04/09/2012
Тема: Linux

Задача наблюдать за температурой в серверной, на улице и т.д..

Для этого нам понадобится некоторое количество датчиков температуры 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

для отображения показаний в виде графика можно использовать php, скрипт можно взять здесь.



Это статья "Домашняя страничка Andy"
https://andy.od.ua

URL этой статьи: https://andy.od.ua/news_31.html

Яндекс.Метрика