понедельник, 26 ноября 2012 г.

04 DS9490R с чем его едят


1. Техническая информация (datasheet) DS9490R - тут
2. Что это такое? Это так называемый мастер ключ. Руки моего умного дома.
Если компьютер - это мозг, то адаптер DS9490R это именно руки, которым отдает приказы мозг и которыё "дергают за ниточки" датчики, котроллеры - отдавая команды и принимая данные.

Сегодня получил адаптер в руки.
Попытка его установить окончилась для моего Windows 7x64 крахом - послетали почти всей драйвера. Система назад не откатывалась. Восстановилась только после удаления установленного USB-драйвера.

Пошел шаманить на Ubuntu.
Начал отсюда
Единственное, что поменял: качал по такой ссылке:
wget http://downloads.sourceforge.net/project/owfs/owfs/2.8p20/owfs-2.8p20.tar.gz


Вставляем DS9490R (мастер сети) 1-wire в USB разъем и в терминале вводим:
# dmesg
[15.534873] Driver for 1-wire Dallas network protocol.
[15.777030] usbcore: registered new interface driver DS9490R
[1553882.700959] w1_master_driver w1_bus_master1: Family 81 for 81.0000002d0f1d.39 is not registered.
Ставим пакеты для компиляции owfs:
# apt-get install automake autoconf autotools-dev gcc g++ libtool  libusb-dev fuse-utils libfuse-dev swig python2.7-dev tcl8.4-dev php5-dev
Скачиваем и распаковываем owfs. Я брал самую последнюю версию, но у кого то с ней проблемы и советуют ставить 2.8p13:
# cd /usr/src
# wget http://downloads.sourceforge.net/project/owfs/owfs/2.8p20/owfs-2.8p20.tar.gz
# tar zxpf owfs-2.8p14.tar.gz
Переходим в директорию и вводим:
# cd owfs-2.8p20/
# ./configure
Будет много букв, но в конце должно быть примерно так:
Current configuration:
 
    Deployment location: /opt/owfs
 
Compile-time options:
                  Caching is enabled
                      USB is enabled
                      I2C is enabled
                   HA7Net is enabled
                       W1 is enabled
           Multithreading is enabled
    Parallel port DS1410E is enabled
        TAI8570 barometer is enabled
             Thermocouple is enabled
         Zeroconf/Bonjour is enabled
             Debug-output is enabled
                Profiling is DISABLED
Tracing memory allocation is DISABLED
1wire bus traffic reports is DISABLED
 
Module configuration:
                    owlib is enabled
                  owshell is enabled
                     owfs is enabled
                  owhttpd is enabled
                   owftpd is enabled
                 owserver is enabled
                    ownet is enabled
                 ownetlib is enabled
                    owtap is enabled
                    owmon is enabled
                   owcapi is enabled
                     swig is enabled
                   owperl is enabled
                    owphp is enabled
                 owpython is enabled
                    owtcl is enabled
Компилируем и устанавливаем OWFS:
# make
# make install
Финальная стадия.
Создадим директорию для монтирования датчиков:
# mkdir /var/1-wire
Проверим наличие нашего 1-Wire адаптера. OWFS поддерживает два типа мастера и с USB, и с COM портом. Будет выведен текущий список устройств USB, что-то вроде:
# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 003: ID 04fa:2490 Dallas Semiconductor DS1490F 2-in-1 Fob, 1-Wire adapter
Bus 003 Device 002: ID 0458:003a KYE Systems Corp. (Mouse Systems) NetScroll+ Mini Traveler / Genius NetScroll 120
Bus 001 Device 004: ID 04e8:6761 Samsung Electronics Co., Ltd
Теперь мы знаем, наши адаптер найден, запускаем OWFS:
# /opt/owfs/bin/owfs --allow_other -u /var/1-wire/
DEFAULT: ow_usb_msg.c:(276) Opened USB DS9490 bus master at 2:3.
DEFAULT: ow_usb_cycle.c:(191) Set DS9490 2:3 unique id to 81 C5 86 30 00 00 00 C1
fuse: mountpoint is not empty
fuse: if you are sure this is safe, use the 'nonempty' mount option
Программа запущена, теперь нам необходимо взглянуть на примонтированные 1-Wire датчики:
# ls -lah /var/1-wire
итого 4,0K
drwxr-xr-x  1 root root    8 2012-02-20 15:32 .
drwxr-xr-x 17 root root 4,0K 2012-02-17 19:06 ..
drwxrwxrwx  1 root root    8 2012-02-20 17:32 28.A34A8A030000
drwxrwxrwx  1 root root    8 2012-02-20 17:32 28.A7CD09030000
drwxrwxrwx  1 root root    8 2012-02-20 17:32 81.C58630000000
drwxr-xr-x  1 root root    8 2012-02-20 15:32 alarm
drwxr-xr-x  1 root root    8 2012-02-20 15:32 bus.0
drwxr-xr-x  1 root root    8 2012-02-20 15:32 settings
drwxrwxrwx  1 root root    8 2012-02-20 17:32 simultaneous
drwxr-xr-x  1 root root    8 2012-02-20 15:32 statistics
drwxr-xr-x  1 root root   32 2012-02-20 15:32 structure
drwxr-xr-x  1 root root    8 2012-02-20 15:32 system
drwxr-xr-x  1 root root    8 2012-02-20 15:32 uncached
Мы видим папки — 28.A34A8A030000 и 28.A7CD09030000. Это и есть температурные датчики DS18B20, а 28.A34A8A030000 и 28.A7CD09030000 уникальные идентификаторы устройств (навроде MAC адреса). Считаем температуру:
# cat /var/1-wire/28.A34A8A030000/temperature
  22.4375
# cat /var/1-wire/28.A7CD09030000/temperature
  22.3465
Чтобы датчика монтировались при старте системы в /etc/rc.local до строчки exit 0 пишем:
modprobe -a ds2490 &
/opt/owfs/bin/owfs --allow_other -u /var/1-wire &
OWFS, сам по себе, является Web-сервером. Запустим его:
/opt/owfs/bin/owserver -uall -p 3000
/opt/owfs/bin/owhttpd -s 3000 -p 3001
/opt/owfs/bin/owfs -s 3000 /var/1-wire/
Теперь мы можем зайти на него таким образом, наберем в браузере:
http://localhost:3001/
Результат:
Интерфейс Web-сервера owfs
Интерфейс Web-сервера owfs
owfs, помимо всего прочего, поддерживает множество сетей 1-wire. Вы можете использовать два и более управляющих элемента DS9490R, использовав одну сеть, например, для работы достаточно медленных температурных датчиков, а другую — для исполнительных механизмов.
Интерфейс, доступный через Интернет (на скриншоте), которым располагает owfs для считывания показаний устройств вполне пригоден для отладки и администрирования, но выглядит несколько пугающим для домочадцев, ведь в будующем я рассчитываю наращивать сеть (управляющими датчиками освещения, отопления, видеонаблюдения). Поэтому я решил воспользоваться библиотекой ownet из пакета owfs для считывания показаний из PHP-скриптов.
В планах: считывать датчики раз в 5 минут и записывать их в базу mysql. Неплохо было бы отображать какую-нибудь аналитику. Например, среднюю, максимальную и минимальную температуру за день и за сутки, перепад температуры в течение суток. Также неплохо было рисовать температурный график, думаю RRDtool для этого подойдет. Сделать реагирование на события, например при достижении минимально допустимой температуры в помещении информировать меня по sms и email. Прикрутить датчики движения, тоже с информированием меня о вторжении. Поменять газовый котел в котором есть эл. управлением, например «Vaillant», и рулить им из веб-интерфейса. И да, видеонаблюдение.
Ну, а пока протестируем ownet, создадим виртуальный хост в Apache и кинем туда простейший скриптик:
<?php
require "/opt/owfs/bin/ownet.php";
$ow=new OWNet("tcp://localhost:3000");
$temp1 = $ow->read("28.A34A8A030000/temperature");
$temp2 = $ow->read("28.A7CD09030000/temperature");
echo "small $temp2<br>";
echo "big $temp1";
unset($ow);
?>
Проверим:
http://localhost/
Результат:
Результат работы скрипта
Результат работы скрипта
Наброски сделаны и теперь нужно сваять нормальный, масштабируемый интерфейс.

1 комментарий:

  1. Спасибо получилось с первого раза, осталось поменять адрес сервера

    ОтветитьУдалить