Дано:
Схема подключения датчика DS1820
На этой схеме:
Два диода Шотки 1N5818
Стабилитрон 1N5228 3.9 V
Стабилитрон 1N5234 6.2 V
Резистор 1.5 кО
9 -pin’овый разъем ( для подключения к Com — порту материнской платы )
При данной реализации схемы мы используем всего 2 провода для подключения датчика (земля и питание закорочены), что уменьшает количество используемых датчиков и максимальную длину кабеля, по данным из интернета — такая схема может вытягивать 10датчиков на длине 60м. Собственно мне больше и не нужно
Для сбора информации с датчиков использую программа Digitemp
Установка
# cd /usr/src # wget https://github.com/bcl/digitemp/archive/v3.7.1.tar.gz # tar -xzvf v3.7.1.tar.gz
После разархивирования появится папка /usr/src/digitemp-3.7.1
#cd digitemp-3.7.1 #gmake ds9097
После компиляции в папке появится исполняемый файл digitemp_DS9097.
Проверяю:
# ./digitemp_DS9097
Программа выведет встроенный Help. Всё ОК.
Создаю рабочую папку программы .
#mkdir /usr/local/etc/digitemp/ #cp digitemp_DS9097 /usr/local/etc/digitemp/digitemp #cd /usr/local/etc/digitemp
Как обнаружил позже, программа есть в портах
# cd /usr/ports/misc/digitemp/ # make install clean # rehash
В конце установки инсталлятор выдаст предупреждение.
NOTE: on FreeBSD Digitemp should use /dev/cuau* serial devices, so if running as non-root user, please tune your devfs rules or add running user to "dialer" group which is the default owner of /dev/cuau* devices !
Контроллер присоединён к COM1, выполняем его инициализацию.
# ./digitemp -i -s /dev/cuau0
Будет выведена информация о найденных датчиках и создан файл конфигурации .digitemprc примерно следующего содержания. Ключ -i указывает создать конфигурационный файл (файл создастся в директории откуда была запущена команда, имя файла .digitemprc):
TTY /dev/cuau0 READ_TIME 1000 LOG_TYPE 1 LOG_FORMAT "%b %d %H:%M:%S Sensor %s C: %.2C F: %.2F" CNT_FORMAT "%b %d %H:%M:%S Sensor %s #%n %C" HUM_FORMAT "%b %d %H:%M:%S Sensor %s C: %.2C F: %.2F H: %h%%" SENSORS 2 ROM 0 0x28 0xFF 0x95 0x5C 0x4C 0x04 0x00 0x56 ROM 1 0x28 0xFF 0xE7 0x17 0x4A 0x04 0x00 0x1D.
Программа нашла два датчика. Нумерация датчиков начинается с нуля.
Снимаю показания.
# /usr/local/etc/digitemp/digitemp -a -s /dev/cuau0 DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane GNU Public License v2.0 - http://www.digitemp.com 14.06 26.94 43.56 # /usr/local/etc/digitemp/digitemp -a -c /usr/local/etc/digitemp/.digitemprc_orig DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane GNU Public License v2.0 - http://www.digitemp.com Apr 06 16:43:26 Sensor 0 C: 14.75 F: 58.55 Apr 06 16:43:27 Sensor 1 C: 27.12 F: 80.83
Можно меняя ключи коммандной строки выборочно опрашивать датчики
# /usr/local/etc/digitemp/digitemp -t 0 -q -o "%.C" -c /usr/local/etc/digitemp/.digitemprc 15
Я изменил стоку в файле конфигурации
LOG_FORMAT «%b %d %H:%M:%S Sensor %s C: %.2C F: %.2F» на LOG_FORMAT «%.2C»
# /usr/local/etc/digitemp/digitemp -t 0 -q -c /usr/local/etc/digitemp/.digitemprc 14.56
Визуализировать показания можно двумя вариантами:
Скрипт который снимает показания с датчика температуры и выдает ее в stdout для первого датчика
cat /scripts/checktemp #!/bin/sh /usr/local/etc/digitemp/digitemp -t 0 -q -c /usr/local/etc/digitemp/.digitemprc | tail -n 1
для второго датчика
cat /scripts/checktemp2 #!/bin/sh /usr/local/etc/digitemp/digitemp -t 1 -q -c /usr/local/etc/digitemp/.digitemprc | tail -n 1
Для того чтобы SNMP знал откуда брать температуру и в какой oid выкладывать значения. Нужно в файл /usr/local/share/snmp/snmpd.conf добовить такую строчку:
extend .1.3.6.1.4.1.2021.2000.1 temp0 /scripts/checktemp - для первого датчика extend .1.3.6.1.4.1.2021.2000.2 temp0 /scripts/checktemp2 - для второго датчика
и т.д.
Перезапускаю SNMP
# /usr/local/etc/rc.d/snmpd restart
Проверяем выдаются ли наши значения по запросу:
# snmpwalk -v1 -c public 10.xxx.xxx.xxx .1.3.6.1.4.1.2021.2000.1 UCD-SNMP-MIB::ucdavis.2000.1.1.0 = INTEGER: 1 UCD-SNMP-MIB::ucdavis.2000.1.2.1.2.5.116.101.109.112.48 = STRING: "/scripts/checktemp" UCD-SNMP-MIB::ucdavis.2000.1.2.1.3.5.116.101.109.112.48 = "" UCD-SNMP-MIB::ucdavis.2000.1.2.1.4.5.116.101.109.112.48 = "" UCD-SNMP-MIB::ucdavis.2000.1.2.1.5.5.116.101.109.112.48 = INTEGER: 5 UCD-SNMP-MIB::ucdavis.2000.1.2.1.6.5.116.101.109.112.48 = INTEGER: 1 UCD-SNMP-MIB::ucdavis.2000.1.2.1.7.5.116.101.109.112.48 = INTEGER: 1 UCD-SNMP-MIB::ucdavis.2000.1.2.1.20.5.116.101.109.112.48 = INTEGER: 4 UCD-SNMP-MIB::ucdavis.2000.1.2.1.21.5.116.101.109.112.48 = INTEGER: 1 UCD-SNMP-MIB::ucdavis.2000.1.3.1.1.5.116.101.109.112.48 = STRING: "13.31" UCD-SNMP-MIB::ucdavis.2000.1.3.1.2.5.116.101.109.112.48 = STRING: "13.31" UCD-SNMP-MIB::ucdavis.2000.1.3.1.3.5.116.101.109.112.48 = INTEGER: 1 UCD-SNMP-MIB::ucdavis.2000.1.3.1.4.5.116.101.109.112.48 = INTEGER: 0 UCD-SNMP-MIB::ucdavis.2000.1.4.1.2.5.116.101.109.112.48.1 = STRING: "13.31"
В последней строке и есть температура.
Захожу в Data Templates
Раздел - Data Templates
Поле Name - SNMP - OID Температура
Раздел Data Source
Поле Name - |host_description| -
Поле Data Input Method - Get SNMP Data
Поле Associated RRA's - оставляю без изменений.
Поле Step - 300
Поле Data Source Active - помечаю галочкой.
Раздел Data Source Item [snmp_oid]
Поле Internal Data Source Name - snmp_oid
Поле Minimum Value ('U' for No Minimum) - -40
Поле Maximum Value ('U' for No Maximum) - 100
Поле Data Source Type - GUAGE
Поле Heartbeat - 600
Раздел Custom Data [data input: Get SNMP Data]
Поле OID - отмечаю галочкой
Поле SNMP Community - xxxxxxx_ro
Поле SNMP IP Address - т.к. digitemp и cacti запущены на одной машине, то 127.0.0.1
Поле SNMP Port - 161
Поле SNMP Version (1, 2, or 3) - 1
Остальные поля без изменений.
Захожу в настройки хоста, жму Data Source List → Add
В поле Selected Data Template выбираю - SNMP - OID Температура
В поле Host - выбираю свой сервер
В разделе Supplemental Data Template Data
Поле Name - |host_description| - улица
Поле OID - .1.3.6.1.4.1.2021.2000.1.4.1.2.5.116.101.109.112.48.1
Зачение для поля OID получаются следующим образом:
extend .1.3.6.1.4.1.2021.2000.1 temp0 /scripts/checktemp
+
UCD-SNMP-MIB::ucdavis.2000.1.4.1.2.5.116.101.109.112.48.1 = STRING: «13.31»
=
.1.3.6.1.4.1.2021.2000.1.4.1.2.5.116.101.109.112.48.1
Далее
Захожу в настройки хоста, жму Graph List → Add
Создаю новый график.
В Поле Title пишу название графика и жму save
После чего в разделе Graph Items создаю сам график.
Graph Item Data Source Graph Item Type CF Type Item Color Item # 1 (snmp_oid): Улица LINE2 AVERAGE 00FF00 Item # 2 (snmp_oid): Сейчас: GPRINT LAST Item # 3 (snmp_oid): Минимум: GPRINT MIN Item # 4 (snmp_oid): Максимум:<HR> GPRINT MAX
Ссылки:
http://mysyura.in.ua/nastroyka-monitoringa-temperatury-v-servernoj/
http://habrahabr.ru/post/55780/#habracut
http://www.lissyara.su/articles/freebsd/programms/mrtg+digitemp/
http://www.unix.ck.ua/content/monitoring-temperatury-s-pomoshchyu-rrdtool
http://blog.marvins.ru/avtomatizaciya/rrdtool-generaciya-grafika-s-pomoshhyu-rrdcgi.html
http://marvins.ru/avtomatizaciya/temperaturnyj-datchik-ds18s20-chast-2.html
http://www.kusto.com.ru/temperature