Опрос


Что для Вас Умный Дом?


Результаты


Реклама


Пакет owfs и использование температурных датчиков DS18B20

24/11/2008 16:22:45

У меня опять, 36,5...

В процессе дальнейшего развития системы возник вопрос, почему бы не дополнить сайт домашней автоматизации информацией о наружной и внутренней температуре? К счастью сделать это достаточно просто. Компания Maxim/Dallas в свое время разработала протокол 1-wire. Этот протокол, оказывается, давно присутствует в нашей жизни. Вспомните домофонные ключи-таблетки i-Botton. Они работают по протоколу 1-wire. Для подключения устройств требуется всего 2 провода. Подробнее о технологии 1-wire.
Температурный датчик DS18B20Топология сети общая шина. Для микросетей 1-wire компания Maxim/Dallas выпускает множество компонентов, с помощью которых можно создавать различные модули и устройства. Среди прочих есть и температурные датчики DS1820 и DS18B20. Это маленькие микросхемы с 3-мя ножками. Если вы никогда не держали в руках паяльник и понятия не имеете что такое канифоль или припой, не пугайтесь. Преимущество этих микросхем заключается в том, что они не требуют никакой обвязки. Датчики напрямую цепляются к проводам. Кроме того, эти датчики продаются практически в любом радио-магазине, так как в настоящее время используются повсеместно. Стоимость одного датчика порядка 70 руб. Но как подключить сеть к компьютеру. Для это потребуется ведущей сети, основной и единственный компонент, который является связкой между компьютером/контроллером и сетью 1-wire. Его можно с легкостью собрать самому, но я предпочел купить в Интернет-магазине готовый. Это DS9490R - миниатюрное устройство с портом USB. Есть также устройства для COM-порта.

Но поддерживает ли Linux это устройство? Поддерживает! Благодаря замечательной программе owfs, которую можно найти на сайте www.owfs.org
Компиляция пакета в Linux не вызывает существенных сложностей. Необходимо только убедиться, что в системе установлены такие пакеты (для Debian) как: build-essential, automake, fuse-utils, php5, php5-dev, php5-cli, libfuse-dev, libusb-dev, swig и другие (tcl, tcl-dev), необходимые для работы owfs. Напомню, что пакеты в системах, где используется APT, устанавливаются командой apt-get install имя_пакета или через графический интерфейс (что намного проще для начинающих пользователей, так как аналогично управлению программами в Windows).
Кстати, owfs успешно используется и под ОС Windows с помощью Cygwin.

Стоит отметить, что owfs не единственное решение для работы с сетью 1-wire. Если у вас принципиально нет желания разрабатывать свои программы и вы являетесь пользователем операционной системы Windows, то существуют такие готовые программные продукты как система Бенукс, которая не только умеет работать с 1-wire сетью, но также имеет массу других полезных возможностей.

Но вернемся к owfs. Этот пакет является не только драйвером для DS9490R, но также управляющей программой для элементов сети, предоставляя мне как пользователю высокоуровневый интерфейс для работы с устройствами. Более того, все устройства, висящие на двух проводах, автоматически определяются этой программой и отображаются в системе в виде файлов. Все, что мне требуется для того, чтобы получить температуру с датчика - это дать команду:

cat /mnt/1wire/28.36D1A3010000/temperature

Где, 28.36D1A3010000 уникальный идентификатор любого устройства сети (навроде MAC адреса). Для тех, кто не работал с Linux'ом эта команда просто выводит содержимое файла, в котором, как вы, наверное, догадались, содержится температура устройства. Просто, не правда ли? Более того, owfs сам является Web-сервером и вы можете зайти на него примерно следующим образом:

http://my_server:3001

 

owfs в консоли Linux Веб-интерфейс программы owfs
 

На правом скриншоте показан список свойств простейшего ключа DS2405, на котором у меня выполнено управление уличным освещением. Не нужно быть программистом вовсе, чтобы управлять светом из локальной сети или Интернета. Достаточно зайти в стандартный веб-интерфейс программы owfs, кликнуть на чекбокс свойства PIO и нажать кнопку Change.

owfs даст возможность не только считать все атрибуты и значения устройств, но также задать некоторые значения и настройки. owfs, помимо всего прочего, поддерживает множество сетей 1-wire. Вы можете использовать два и более управляющих элемента DS9490R, использовав одну сеть, например, для работы достаточно медленных температурных датчиков, а другую - для исполнительных механизмов.

Таким образом в текущий момент я подключил 4 датчика. Два датчика DS1820 и два датчика DS18B20. Заявлено, что датчики DS18B20 откалиброваны и более точны, но я разницы в показаниях по сравнению с более простыми собратьями не заметил. Более того, все датчики Dallas, на мой взгляд, завышают температуру примерно на градус. DS18B20 обладает 12-битной разрядностью, но может перестраиваться. Получение температуры максимальной точности занимает порядка 750мс. Если важна скорость считывания, DS18B20 может выдать информацию значительно быстрее, но при этом менее точно. К сожалению DS18B20 не всегда есть в магазинах и я для пробы купил пару DS1820. Эти датчики, несмотря на то, что сняты и с производства, а производитель вроде бы заявляет об ошибке в алгоритме преобразования температуры, с достаточной для меня правдоподобностью отображают температуру.

Интерфейс, доступный через Интернет (на скриншоте), который предлагает owfs для считывания показаний устройств вполне пригоден для отладки и администрирования, но выглядит несколько пугающим для простых домочадцев. Поэтому я воспользовался библиотекой ownet из пакета owfs для считывания показаний из PHP-скриптов. Это оказалось очень просто.

Таким образом данные со всех датчиков я считываю раз в 5 минут и записываю их в базу данных.  Я подумал, что имея такие данные, неплохо было бы отображать какую-нибудь аналитику. Например, среднюю, максимальную и минимальную температуру за день и за сутки, перепад температуры в течение суток. Также неплохо было рисовать температурный график. Сначала я хотел использовать для этих целей известную программу MRTG, но оказалось, что она не умеет работать с минусовыми значениями, поэтому я предпочел другую известную библиотеку jpgraph. Подробнее о том, как вывести график температуры с помощью jpgraph.

Пожалуйста, обратите внимание на наш форум, на котором размещено масса полезной информации о работе сети 1-wire и пакета owfs.
 

Автор: Andrey_B
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.



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



Сортировка комментариев: Последние сверху | Первые сверху

2016-11-13 18:37:33 | Vitaliy
Спасибо за информацию Андрей!

Буду пробовать на тех что вы посоветовали.
Изначально не хотел их использовать изза того что 2 порта на контроллера занимают (у меня их уже не хватает) и на один провод больше (+ еще один кабель тянуть), но видимо вариантов нет.



2016-11-13 15:11:41 | Andrey_B
Vitaliy, не уверен, что можно как-то обеспечить сопряжение DHT22 с 1-wire. Готовые датчики температуры/влажности для 1-wire тоже еще поискать нужно. DHT-22 не очень удачные датчики. Они часто зависают.
Я у себя использую I2C-датчики HTU21D вместе с MegaD-328. Отлично работают.


2016-11-13 11:07:48 | Vitaliy
Спасибо за скорый ответ, Андрей!

Тогда получается у меня 3 варианта:

1 - както сопрягать их с 1wire
2 - подключить их к МЕГЕ напрямую (идея была поставить датчики по дому, и расчет был примерно на 30 метров длины кабеля - значит прийдется тянуть к Меге по 3 провода на датчик)
3 - купить 1wire датчики температуры и влажности

что посоветуете?


2016-11-13 10:52:01 | Andrey_B
Vitaliy, DHT22 не предназначен для работы в 1-wire сетях и с мастером DS9490R он работать не будет.


2016-11-13 10:41:09 | Vitaliy
Добрый день!

Столкнулся с такой проблемой:
есть мастер сети DS9490R и датчик DHT22 (точнее есть два, пробовал оба - поведение одинаковое)
при подключении к компьютеру мастера сети, owfs показывает его наличие
подключение датчика по паразитному питанию никак не определяется
если же подключить питание - то не просто не обнаруживается датчик, но также исчезает мастер сети. если отключить датчик - мастер появляется.

проверялось на двух заказанных у вас датчиках - ведут себя одинаково. Один датчик подключен через адаптер (/ab-log.ru/smart-house/ethernet/sensors-adapter-box), второй распаян сразу на плате адаптера черного цвета.

датчики проверял подключая их сразу к МЕГЕ - данные они показывают - так что исправны.

Поделитесь соображениями куда копать дальше.

Заранее спасибо


2015-03-24 16:15:58 | Andrey_B
Николай, не могу сказать. У меня 7 датчиков, расположенных довольно далеко друг от друга, работающих через адаптер DS9490R с 2008 года. Никогда ничего подобного не наблюдал.


2015-03-24 15:10:47 | Николай
У меня 6 датчиков на raspberry B+ (pidora). Если запускать подряд owdir много раз, то нет нет и появится вариант с отсутствующими датчиками (одним или несколькими). С чем связана такая нестабильность? Спасибо.


2015-03-17 18:43:32 | dmitrydmitry
Первая и третья нога на одном проводе, средняя на другом. Все на работе, маркировку и другой датчик только завтра смогу попробовать.


2015-03-17 18:00:22 | Andrey_B
Дмитрий, если датчик работает на паразитном питании, нога Vdd соединена с ногой GND? Так ведет себя один датчик или остальные также? Какая маркировка на самом датчике?


2015-03-17 16:03:00 | dmitrydmitry
А почему может быть вот такие показания:
cat /mnt/1-wire/10.67C6697351FF/temperature
59.3892root@debian:~ cat /mnt/1-wire/10.67C6697351FF/temperature
18.0372root@debian:~ cat /mnt/1-wire/10.67C6697351FF/temperature
16.3131root@debian:~ cat /mnt/1-wire/10.67C6697351FF/temperature
39.169root@debian:~ cat /mnt/1-wire/10.67C6697351FF/temperature
91.3027root@debian:~ cat /mnt/1-wire/10.67C6697351FF/temperature
81.9695root@debian:~ cat /mnt/1-wire/10.67C6697351FF/temperature
35.9095root@debian:~ cat /mnt/1-wire/10.67C6697351FF/temperature
55.2485root@debian:~

Датчик лежит рядышком, разброса такого быть не может. Тем более в течении 10 сек?
Неужели провода перепутал? Питание паразитное.


2015-03-06 14:26:40 | Дмитрий
Вот датчик температуры который тут описан имеет max135(я точно не помню) а есть ли датчики у которых диапозон выше. Просто температура в потоплении печи выше, нужно её замерять и по необходимости включать насосы и кран. Спасибо


2014-01-14 17:05:19 | Andrey_B
Андрей, лично я не запускал owfs через cygwin, но на нашем форуме есть люди, которые это делали. Там же есть соответствующая ветка. Попробуйте найти ответ там.


2014-01-13 12:20:59 | Андрей
Подскажите, пожалуйста. Какие манипуляции нужно провести, чтобы корректно запустить OWFS через cygwin на винде? Датчики подключаю через COM-порт.


2012-12-28 13:16:56 | Andrey_B
Strangeman, owfs поддерживает "simultaneous conversion".
Обсуждение


2012-12-27 21:03:46 | Strangeman
Может кто-нибудь подскажет относительно низкоуровневый софт, позволяющий посылать команды и читать регистры 1-wire устройств?
Дело в том, что OWFS не очень удобна при большом кол-ве температурных датчиков (или я не разобрался). Хотелось бы посылать команду конвертирования не каждому датчику, а одну на всех по расписанию, а потом читать датчики. OWFS при опросе датчика посылает ему команду конвертирования, а это 750ms на каждый датчик.


2012-11-24 00:20:50 | Andrey_B
Дима, за my_server скрывается IP-адрес или имя сервера.
Это может быть быть, например, localhost или 127.0.0.1 или любые другие имя/адрес.


2012-11-22 22:54:49 | Дима
Андрей поскажите, что в строке /my_server:3001 скрывается за my_server. Я только установил owfs и датчик опрашиваю через коммандную строку. А в браузер как это вывести?


2012-11-01 13:38:25 | buzz
На всякий случай добавлю, что начиная с Ubuntu 12.04 пакет owfs, включая всевозможные биндинги (libow-php5, python-ow и др.), добавлен в репозиторий. Т.е. для установки достаточно набрать:
$ sudo apt-get install owfs


2012-09-07 10:57:28 | Andrey_B
Юрий, как гласит главная страничка owfs на Sorceforge: "OWFS is also ported to embedded routers, Mac OSX and Windows." Поскольку OSX - это потомок BSD, owfs должна компилироваться в этой среде. Наберите в Google "owfs osx", кое-какая информация есть.


2012-09-07 02:34:34 | Юрий
А есть owfs для OSX?


2012-02-10 11:19:37 | Andrey_B
you_too, лучше этот вопрос задать на нашем форуме


2012-02-10 00:51:16 | you_too
И еще вопросик, если позволите. Как вы считаете нужен ли подтягивающий резистор 4.7 кОм от DQ к +5V внешнего питания. Вот здесь avrdevices.ru/termometr-na-ds18b20/ , скажем, об этом оживленная дискуссия.


2012-02-09 23:03:19 | Andrey_B
you_too, да, +5В с компьютера взять можно. В компьютерных БП это действительно красный провод.


2012-02-09 21:29:14 | you_too
А можно взять +5V из компьютера и подать на каждый датчик (3 ножка) Vcc DS18B20. Скажем я возьму свободный провод в первом разветвителе (черный или желтый) и подам туда +5V, ну и соответственно дальше уже сеть будет 3х проводной. Так можно? Насколько я помню в стандартном разъеме для питания ide винчестера красный провод и есть "+5V". Просто буду делать все линуксе, но еще только собираю комп, а работоспособность мастера DS9097U-009 и 3 датчиков проверить захотелось уже сейчас (протестировать). Так вот при запуске всего хозяйства в Винде с системой «Бенукс», последняя все датчики определила я их активировал, но мне сообщается об отсутствии внешнего питания. Я так понимаю это из-за мастера, я использую не с USB портом, а с COM-портом. В связи с этим и родилась идея тупо подать плюс 5 вольт от компа на третий провод.


2012-02-09 11:03:23 | Andrey_B
you_too, Vcc либо подключают к питанию (диапазон напряжений указан в Datasheet), либо, если используется паразитное питание, замыкают на GND (это тоже указано в Datasheet).


2012-02-09 00:53:26 | you_too
Подскажите нубу, если использовать DS9097U-009 и DS18B20 судя по Datasheet /datasheets.maxim-ic.com/en/ds/DS9097U-DS9097U-S09.pdf мы соединяем 4 pin RJ11 c 2 (DQ) выводом DS18B20, 3 pin RJ11 c 1 (GND) выводом DS18B20. Собственно вопрос, что делать с 3 (Vcc) выводом термометра? Кучу всего перерыл и однозначного ответа не нашел. У кого то этот вывод не задействован совсем, а кто то его перемыкает с первым 1 (GND) выводом. Как правильно?


2012-01-30 11:44:18 | Andrey_B
Antti, порт owfs под FreeBSD есть.
Против FreeBSD ничего не имею. Linux выбрал только по той причине, что под эту ОС, как мне кажется, больше всевозможного программного обеспечения для домашней автоматизации, проще найти информацию, ответы на возможные вопроса, она чаще используется в системах энтузиастов.


2012-01-29 23:32:47 | Antti
Подскажите, а есть ли порт owfs под FreeBSD ? В смысле портирован ли ? Может Вы в курсе... предпочитаю эту ОС...И если не трудно, Ваше мнение по постройке ядра управления на этой ОС.


2011-10-21 19:59:49 | Andrey_B
Виктор, на сайте Maxim вы можете найти 1-Wire SDK for Windows.
SDK включает примеры для C#, VB.NET, VB 6.0, C, Delphi и документацию по использованию API в формате HTML. Я думаю, вам имеет смысл скачать этот SDK и изучить его.


2011-10-21 19:41:14 | Виктор
А нет ли готовых библиотек под BorlandC3.11? Самых простейших, шина 1-wire может же работать на одной ноге параллельного порта компа, мне всякие навороты вроде интернетов не нужны, просто надо управлять своей котельной, и при этом иметь возможность сравнительно несложно если что подкорректировать алгоритмы и иметь индикацию на экране. На микроконтроллере это сложнее реализовать(к нему надо кроме1-wire еще экран лепить), а перепрошить контролер тоже целая история, и проверить работоспособность прошивки тоже непросто, а на компе в пошаговом режиме легко прощелкать...


2011-08-04 15:45:12 | Андрей
Большое спасибо, очень познавательно, от себя добавлю ссылку на инструкцию по установке OWFS на новый Debian squeeze /archive.pfb.no/2010/04/01/owfs-on-debian-squeeze/ мне очень помогло


2011-07-18 23:27:41 | Andrey_B
Антон, в Linux есть несколько способов запускать программы автоматически. Самый простой способ - добавить нужную команду в файл rc.local
Этот файл в разных дистрибутивах находится в разном месте
/etc/rc.local
или
/etc/rc.d/rc.local
или
/etc/rc3.d/S99rc.local
Найдите этот файл в своем Linux'е и пропишите указанную вами команду туда. Тогда owfs будет стартовать автоматически.


2011-07-18 23:18:03 | anton
Все получилось. Измерения снимаю. Но пока не понял как сделать так чтобы /mnt/1-wire монтировалась автоматически при запуске компьютера. Сейчас после включения я набираю в терминале такую команду sudo /opt/owfs/bin/owfs --allow_other -u /mnt/1-wire и все начинает работать . Как запускать cron от root я прочитал а как сделать автозапуск от root - непонятно пока. Может подскажете? -)


2011-06-27 10:45:40 | Andrey_B
Xace, уточните, вас интересует PHP-код или SQL-запрос?
SQL-запрос зависит от структуры таблицы. PHP-код зависит от используемой БД. Вас интересует MySQL? Впрочем, и то и другое настолько простое и стандартное...


2011-06-25 13:35:44 | Xace
Андрей , а можно попросить выложить листинги, как значения датчика класть в базу... ?


2010-08-10 23:09:00 | Andrey_B
Иван, подключал так, как вы говорите - последовательно, с записью нового ID в базу данных и присвоением человеческого наименования. С датчиками было и так, что грел их по очереди и следил какой из них меняет свое значение. ;)


2010-08-10 22:50:28 | IvanL
Андрей, а как вы решали у себя проблему с монтажом сразу нескольких 1-wire устройств на линии. В смысле, где какой ID стоит. Или же шли последовательно - подключили одно новое устройство, нашли новый ID, записали в базе, где стоит и т.д.


2010-06-17 11:17:57 | Andrey_B
Константин, вся прелесть owfs заключается в том, что пользователю ничего не нужно знать о низкоуровневой работе сети 1-wire, о командах, которые посылает мастер и многом другом. owfs предоставляет высокоуровневый интерфейс. Все, что нам необходимо как пользователям, это запросить нужный параметр компонента или записать нужное значение в компонент. Всю остальную черновую работу делает owfs. Посылает ли owfs команду Convert или нет мне, как конечному пользователю, знать не нужно. owfs работает с любыми датчиками и при любой схеме подключения, выдавая точные результаты.
Что касается 18S20, то он менее точен, чем 18B20. 18S20 - 9 бит, тогда как 18B20 - 12 бит. Кроме того, 18B20 прекрасно работает на паразитном питании (схема его подключения в таком режиме описана в Datasheet). Стоит сказать, что в моей сети около 10 датчиков DS18B20, работающих на паразитном питании. Самый удаленный датчик находится в земле на глубине 2 метра и на расстоянии 60 метров от мастера.


2010-06-17 10:27:08 | Константин
Да, справедливости ради, должен заметить что то что я писал раньше относится к паразитическому питанию датчика и модели S, но к тоже захочет использовать В, когда есть более точный с, да и тянуть дополнительный провод для питания?
P/S Простите за орфографию... особенно за "в не" -:)


2010-06-17 08:17:32 | Константин
Статья полезна, безусловно! Но как то упущен важный факт... для показания температуры датчику должна быть послана команда Convert T [44h] мастером, а об этом ни чего не сказано... а иначе температура будет показываться минуту, а потом станет 85 С, в не зависимости от реальной температуры!!! это сделано производителем для того чтоб знать о работоспособности датчика. А вот как из owfs послать команду, это ВОПРОС?


2009-06-15 16:59:45 | Andrey_B
Владимир, не совсем понятна ваша просьба. Вы хотите, чтобы я поместил исходные коды для работы с 1-wire на PHP и записи данных в MySQL? Или в общих чертах рассказать о структуре базы данных?


2009-06-12 20:38:57 | Владимир
Полезные статьи.Спасибо. Есть просьба, не могли бы Вы добавит + ко всему процесс сбора данных и их занесение в базу. Скажем два датчик два ключа, как Вы организовали базу и как туда вносите данные.?