Температурный датчик DS18s20 (часть 2)

Digitemp во FreeBSD

В первой части материала мы рассмотрели создание простого 1-wire адаптера для com-порта компьютера.

В этой части материала мы узнаем как нам извлечь данные с температурного датчика посредством программы Digitemp, сей продукт разрабатывается под лицензией GNU General Public License, соответственно доступен исходный код, имеются сборки под Linux (.deb и .rpm пакеты), Windows(с помощью  Cygwin), так же с недавних пор (c 26 июня 2011) появился в портах FreeBSD.

Итак мы будем использовать Digitemp в системе FreeBSD 8.1, но Вы без труда сможете его использовать в Linux и в Windows (работу в windows я не проверял) скачав нужный вам пакет. Подключаем адаптер к com-порту, для начала обновляем порты, я использую pertsnap. # portsnap fetch update Далее идем в нужный нам порт и инсталлируем его следующей командой # 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 !

Означающее, что Digitemp использует последовательные устройства /dev/cuau* (* — номер устройства (порта)) и если Вы будете опрашивать эти устройства не от пользователя "root", то пользователя необходимо добавить в группу "dialer".

Проверяем видит ли  Digitemp наш адаптер. # digitemp_DS9097 -q -w -s /dev/cuau0 Где ключи означают следущее: -q — не выводить © -w — пройтись по всем устройствам в сети 1-wire -s — указываем какой серийный порт опрашивать

Если адаптер спаян правильно, то на вывод мы получим следующее: 10F106E901080025 : DS1820/DS18S20/DS1920 Temperature Sensor Начинаем радоваться, программа увидела наш температурный датчик, с уникальным адресом  10F106E901080025 который относится к семейству датчиков DS1820/DS18S20/DS1920 и является Temperature Sensor.

Далее для работы Digitemp надо создать конфигурационный файл. Переходим в директорию где хотим сохранить конфигурационный файл. # cd ~ # digitemp_DS9097 -q -i -s /dev/cuau0 Ключ -i указывает создать конфигурационный файл (файл создастся в директории откуда была запущена команда, имя файла .digitemprc)
Можем просмотреть получившийся файл 

# less .digitemprc 
TTY /dev/cuau0READ_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 1 ROM 0 0x10 0xF1 0x06 0xE9 0x01 0x08 0x00 0x25
Немного разберем его
  1. TTY — Порт в котором находится наш адаптер
  2. READ_TIME — Время опроса в миллисекундах
  3. LOG_TYPE имеет три формата: 1 — Выводить температуру в F° и C° с датой и т.п. 2 — Выводить температуру только в C° и номер датчика 3 — Выводить температуру только в F° и номер датчика
  4. LOG_FORMAT — форматирование вывода, к примеру указанная в конфиге строка "%b %d %H:%M:%S Sensor %s C: %.2C F: %.2F" выведет нам следующее: May 24 21:25:43 Sensor 0 C: 23.66 F: 74.59 %b — Месяц %d — День месяца %H — Час %M — Минуты %S — Секунды %s — Номер датчика, у нас он один, нумерация с нуля %.2C — Выведет температуру в C° с двумя знаками после запятой %.2F  — Выведет температуру в F° с двумя знаками после запятой
  5. CNT_FORMAT — Формат вывода счетчиков типа DS2423, мы его не используем
  6. HUM_FORMAT — Форматированный вывод для датчиков влажности типа HIH-4000
  7. SENSORS 1 — Указывает, что у нас один датчик
  8. ROM — Собственно ROM нашего датчика

Итак нас интересует вывод только температуры в C° и пусть останется номер датчика, для этого меняем переменную LOG_TYPE  в .digitemprc с 1 на 2 и запускаем командой # digitemp_DS9097 -q -a -c .digitemprc 0       22.62 — 0 номер нашего датчика, 22.62 полученная температура в C° Для примера напишем небольшой скрипт, для вывода текущего значения в лог-файл. # vi /home/scripts/temperature.sh

Делаем файл исполняемым # chmod +x /home/scripts/temperature.sh Добавляем в crontab наш скрипт для выполнения раз в 5 минут # crontab -e

Теперь раз в 5 минут наши данные с датчика будут писаться в лог-файл, запись ">/dev/null 2>&1" сделана для того, чтобы данные не отправлялись почтой, в принципе уже можно выводить эти данные куда-нибудь, так же не забываем включить пользователя от которого запускается скрипт отличного от "root" в группу "dialer".

В следующей части статьи мы рассмотрим пакет rrdtool и научимся хранить данные от нашего датчика в RRD (Round-robin Database) и рисовать температурные графики.

Температурный датчик DS18s20 (часть 2): 2 комментария

  1. Спасибо за подробную статью!

    Хотелось бы только отметить, что лог_формат файла .digitemprc позволяет регулировать вывод не прибегая к средствам awk.

    Например, такая строка (при всех остальных вводных командной строки) выведет данные в формате для munin:

    LOG_FORMAT «sensor%s.value %.2C»

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *