Показаны сообщения с ярлыком owfs. Показать все сообщения
Показаны сообщения с ярлыком owfs. Показать все сообщения

5 февраля 2014 г.

Управление и оповещение через jabber в openHAB

Отлично, у нас есть показания открытой двери и замка. Теперь было бы неплохо, получать какие-нибудь оповещения о событиях. Например, для начала, о том что замок закрылся или открылся.

Я решил оповещения сделать на основе jabber, тем более, что данный вариант позволяет даже управлять openHABом из jabber. Создаем учетную запись (xmpp или jabber). Ищем секцию xmpp в openhab.cfg. Прописываем сервер, логин, пароль.
Отправляем команду help:

(15:22:48) I: help
(15:22:49) my****@jabber.org: Usage: 
update ⟨item⟩ ⟨state⟩ - sends a status update for an item
send ⟨item⟩ ⟨command⟩ - sends a command for an item
status ⟨item⟩ - shows the current status of an item
items [⟨pattern⟩] - lists names and types of all items matching the pattern
say ⟨sentence to say⟩ - Says a message through TTS on the host machine
⟩ ⟨script to execute⟩ - Executes a script


Теперь разберемся, как нам послать сообщение о смене статуса открытого замка. Для этого просто создадим новое правило в home.rules:

rule "Door Check Lock Send"
when
        Item Main_Door_Lock changed
then
        if(Main_Door_Lock.state==1)
        {
            sendXMPP("jabber@jabber.org", "Замок двери открыт!")
        }
        else if(Main_Door_Lock.state==0)
        {
            sendXMPP("jabber@jabber.org", "Замок двери закрыт!")
        }
        else{
            sendXMPP("jabber@jabber.org", "Неполадки с датчиком замка двери!")
        }
end


Очень помогает в написании правил функция авто-дополнения в дизайнере (Ctrl+Space), ибо документация по этому поводу хромает.

Поэкспериментировав понимаем, что время отклика оставляет желать лучшего. Смотрим лог owfs - датчик опрашивается openHAB'ом раз в минуту - это как раз настройка в openHAB. К сожалению на данный момент время обновления едино для всех датчиков 1-wire в openHAB. Поэтому ничего не остается, как сменить частоту обновления хотя бы на раз в 10 секунд.

Кеш owfs для датчиков по умолчанию 15 секунд. Поэтому, чтобы получать свежие значения, надо изменить его на 10 секунд. Пропишем в owfs.conf:
timeout_volatile = 10
#error_print = 1
error_print = 3
error_level = 2

error_print = 3 обозначает подавление логов - при опросе раз в 10 секунд из слишком много.

Протестировав я понял, что и 10 секунд слишком много. Но дальше увеличивать частоту опросов всех датчиков накладно. И вообще неплохо бы использовать unchached значения из owfs для датчиков, а кеш использовать только для датчиков, данные которых не критичны в времени опроса - например, датчики температуры. Но в openHAB пока с этим проблемы. Поэтому будем использовать небольшой хак. Для датчиков мы будем использовать exec binding и получать данные с файловой системы. Формат запроса:

in:  exec:"<[<commandline execute="" to="">:<refreshintervalinmilliseconds>:<transformationrule>]"

items:

Number Main_Door_Lock "Замок в двери C: [MAP(ru.map):%s]"<door>(Doors) { exec="<[/bin/cat /mnt/1wire/uncached/12.A214B2000000/sensed.A:5000:REGEX((.*?))]" }

В принципе, тут можно использовать и Contact.
Результат срабатывания правила:





Последний штрих - теперь нам надо настроить запуск приложения файловой системы owfs, потому что мы с него получаем данные. (Проверьте, что у вас запускается при старте в директориях rc.d).
# update-rc.d owfs defaults 30

Не забудьте выставить очередь запуска после owserver (у меня, как видно 30, а у owserver 20)!

4 февраля 2014 г.

Датчик открытого замка\двери\окна на 1-wire и openHAB

После небольшого перерыва на софт вновь перейду к железной стороне. Следующим устройством в сети мне надо сделать датчик открытого замка. Если вы помните, мы использовали электронную метку ds2401 для определения наличия датчика в сети. Как мы убедились, а умные люди нам подсказали - это работает слишком медленно. Поэтому мы будем использовать не определение датчика в сети, а сигналы от датчика-ключа ds2406p (такую микросехму я нашел, можно использовать и другие). Заодно мы сделаем и датчик открытой двери, ибо в таком исполнении у микросхемы два канала.

DS2406P универсальный элемент стандарта 1-Wire-net. Она содержит два независимых транзисторных ключа, с током потребления до 50 мА на предельном коммутируемом напряжении +13 В (для канала А) и до 8 мА на предельном коммутируемом напряжении +6 В (для канала B). DS2406P может быть использована также для контроля двух независимых датчиков дискретных сигналов типа "сухой контакт". (с).

Изучаем схему с сайта http://www.benuks.ru/



Схема аналогична этой. Только тут используется более "продвинутая" микросхема.

Освоим технологию создания плат (типа продинутый ЛУТ), мне понравилось вот это видео (пришлось даже ламинатор купить):



Единственно, я заменил самоклейку на фотобумагу. Но с ней у меня ничего не вышло, в итоге я взял лист от тонкого глянцевого журнала. Процесс травления не показан, ну можно поискать, или вот он:



Качаем архив со схемами в формате layout4. Находим там схему и печатаем на листе  тонкого глянцевого журнала, прогоняем результат с ламинатором.



То, что получилось у меня после печати и прогона в ламинаторе (160 градусов Цельсия):



Травим, получаем (снизу артефакты от первой печати с фотобумагой, сверху - плохой журнальный лист - тонер отскочил от него - подкрасил маркером):



Моем (бензин или ацетон) и сверлим отверстия (я собрал мини дрель - держатель в сборе в радио магазине, двигатель от детской машины).



Для покупки-сбора инструмента, освоение технологий, ушло пару-тройку рабочих недель. Цанговый патрон брал в местном радио-магазине, сверла здесь. Отличные сверла, рекомендую. Лудим, паяем плату.






Обратите внимание - в схеме надо делать перемычку для подачи 5 вольт на ds2406. Далее, я подпаял разъем rj11 и подключил к нашей сети 1wire . Заходим в директорию /mnt/1wire и смотрим - у нас должен появиться новый датчик. Подключив геркон к выводу "земля" и А (или B), а магнит приклеив к замку - получаем датчик закрытого\открытого замка:
root@truck:/mnt/1wire/12.***4B2000000# cat sensed.A
0
root@truck:/mnt/1wire/12.***4B2000000# cat sensed.B
1

B - можно использовать тут же, например, для датчика закрытой двери.

Стабилизатор с 18 на 12 вольт я впаивать не стал - в данном случае нам 12 вольт не нужно.

OpenHAB

Теперь нам надо показания датчиков открытия отобразить в OpenHAB. Я пытался использовать стандартный Contact item. Но по-видимому он еще не работает с 1wire. Поэтому пришлось прописать показания открытого замка как Number.

/* Active Group */
Group:Number:SUM        Doors   "Двери [открыто: %d]"     (All)

/* Contacts */

Number  Main_Door      "Входная дверь: [MAP(ru.map):%s]"       <door>  (Doors) { onewire="12.A234B4000000#sensed.B" }
Number  Main_Door_Lock "Замок в двери: [MAP(ru.map):%s]"        <door>  (Doors) { onewire="12.A234B4000000#sensed.A" }

1 - открытая дверь/замок, 0 - закрытая. Группа Doors (привет поклонникам Джима :) ) - показывает суммарное значение показаний item в группе - соответственно, количество открытых дверей.
ru.map пишем по аналогу en.map. В sitemap выводим просто группу.

Так как doors у нас через number, а иконка door завязана на Contact с показаниями open\close, то картинку door-open.png копируем в door-1.png, а door-close.png копируем в door-0.png.

Результат:


ps. Только я спросил про патч, сразу товарищи разработчики его наложили. Так что можете пробовать Contact item в ночном билде (я думаю это исправление войдет в версию 1.4, которая выйдет 9-го февраля 2014 года). Я пробовать не буду, так как меня пока устраивает на основе Numbers.

2 февраля 2014 г.

Owfs - установка из исходников

Начнем с лирического отступления. Проанализировав показания термометра DS18B20 я понял, что он немного завышает показания.   Погуглив я нашел две причины: либо самонагрев датчика от частого опроса, либо неоткаллиброванный датчик. Решил получше изучить логи owfs.

1. Включаем логи: /etc/owfs.conf

error_print = 1 
error_level = 3 

Перезапускаем owserver и смотрим что у нас в логах. (Обратите внимание, что я рассказываю про версию из deb пакета в init.d скрипте которого уже указан путь к конфигу). А в логах у нас пусто. Помните, как мы устанавливали систему? Позже мы поставили rsyslod.

Ищем # whereis owserver , чтобы запустить его не в режиме сервиса , а в консоли.

#/usr/bin/owserver --debug  --error_level=9 --error_print=2 --foreground -c /etc/owfs.conf --pid-file /var/run/owfs/owserver.pid
DEBUG MODE
libow version:
        2.8p15


И снова пусто. Но не только у нас. Похоже, что в deb пакете owfs логирование выключено.

Посему удаляем owfs (сохраним init.d скрипты и owfs.conf - хотя они удалиться не должны). Качаем версию посвежее. Распаковываем tar -xvzf... Устанавливаем необходимое для компиляции и сборки.

#apt-get install autoconf libtool libusb-dev libfuse-dev make ed
#cd /usr/src/owfs-2.9p1
#./configure --help
#/owfs-2.9p1# autoreconf -i

Я сконфигурировал следующим образом (также можно добавить опцию --enable-owtraffic Enable bus traffic reports (default false) - очень интересная опция, дающая возможность отслеживать трафик в самой 1-wire сети):

#./configure --enable-debian --disable-owftpd --disable-owperl --disable-owphp --disable-parport --disable-owpython
# make -j4
# make install

По умолчанию все устанавливается в директорию /opt/owfs/ . Сделаем линк в /usr/bin , что бы было проще использовать и не переписывать скрипты запуска.

# for p in owfs owserver owhttpd owftpd owread owwrite owdir ; do ln -sf /opt/owfs/bin/$p /usr/bin/$p ; done

Пробуем запускать:

/usr/bin/owserver --debug  --error_level 9 --error_print 2 --foreground -c /etc/owfs.conf --pid-file /var/run/owfs/owserver.pid

Если все хорошо, перезапускаем сервер с помощью init скрипта и смотрим syslog. Отлично! Теперь укажем всем клиентским приложениям использовать tcp сервер (owserver) для работы, ибо usb устройство уже занято им (то есть все приложения пакета owfs должны работать через owserver - если он запущен, либо по одиночке). Пропишем в конфиг (он должен автоматически подхватываться (ключ -c) всеми init.d скриптами пакета owfs, которые у нас остались после установки deb пакета из репозитория):

# With this setup, any client (but owserver) uses owserver on the
# local machine...
! server: server = localhost:4304

В конфиге программы с репозитория эта строчка уже указана.

Но скрипта для приложения (не пакет) owfs в init.d нет (вообще странный пакет в репозитории дебиана - логов нет, управление не понятно, такое ощущение, что делал человек, плохо знакомый с owfs). Можем сделать на основе скрипта owhttpd и запускаем:

# /etc/init.d/owfs start
[ ok ] Starting 1-Wire owfs Daemon: owfs.
root@debtruck:/etc/init.d# ps -A | grep ow
 2478 ?        00:00:01 owserver
 3262 ?        00:00:00 owfs

Смотрим работающие логи.

5 января 2014 г.

Платформа умного дома OpenRemote. Знакомство. Подключаем 1-wire через owfs.

Пока я жду DS2406P+ и DS2408S+ занялся серверной и клиентской стороной умного дома.

OpenRemote представляет из себя сервер, который получает команды от мобильного или веб приложения и дальше транслирует их другому контроллеру или серверу.

OpenRemote это:

1) Сервер умного дома, работает на десятке платформ, даже на NAS Synology и Windows.

2) Онлайн-cреда для разработки приложения.

3) Мобильное приложение, которое загружает данные для своей работы из среды для разработки.




Поддерживаемые технологии.
AMX, KNX, Lutron, Z-Wave, 1-Wire, EnOcean, xPL, Insteon, X10, Infrared, Russound, GlobalCache, IRTrans, XBMC, VLC, panStamps, Denon AVR, FreeBox, MythTV и другие.

У нас есть owfs с показаниями термометра. Давайте посмотрим как нам связать все это дело воедино.

Установка.

Сubietruck похож на Raspberry Pi, поэтому мы воспользуемся следующим мануалом.

Процессор в Cubietruck версии ARMv7, который поддерживает операции с плавающей точкой на аппаратном уровне (Hard-float). Наш Debian ( ARMv7 (EABI hard-float ABI, «armhf») ) также поддерживает.

Вообще пишут, что использование java машины с плавающей точкой на аппаратном уровне может иметь проблемы со стабильностью и совместимостью. Посмотрим, что у нас в дебиане. Перед тем как ставить java я немного изучил возможные проблемы и какую все таки версию ставить. Читаем комментарий ANDREAS DROLLINGER по ссылке - в нем написано:

OpenJDK (IcedTea6 Zero VM) is slower than Oracle Java, but it is available for hard float installation and the Drools rule engine 5.1.1 works.


В общем-то рекомендует нам использовать OpenJDK 6 с IcedTea6 (с поддержкой таки hard float), оно немного помедленней, ну и ладно, у нас нагрузка не высокая, будет критично - переустановим. Смотрим, что есть у нас в наличии.

root@debtruck:~# apt-cache search icedtea-6-jre
icedtea-6-jre-cacao - Alternative JVM for OpenJDK, using Cacao
icedtea-6-jre-jamvm - Alternative JVM for OpenJDK, using JamVM


Судя по довольно интересным статье сравнения JamVM немного получше, чем Cacao, поэтому буду пробовать его. Ставим:

# apt-get install icedtea-6-jre-jamvm
root@debtruck:~# which java
/usr/bin/java
# java -version
java version "1.6.0_27"
OpenJDK Runtime Environment (IcedTea6 1.12.6) (6b27-1.12.6-1~deb7u1)
root@debtruck:~# which java
/usr/bin/java
# java -jamvm -version
java version "1.6.0_27"
OpenJDK Runtime Environment (IcedTea6 1.12.6) (6b27-1.12.6-1~deb7u1)
JamVM (build 1.6.0-devel, inline-threaded interpreter with stack-caching)
# export JAVA_HOME=/usr

Редактируем /etc/java-6-openjdk-armhf/jvm-armhf.cfg перенеся -jamvm KNOWN в начало списка.

# java -version
java version "1.6.0_27"
OpenJDK Runtime Environment (IcedTea6 1.12.6) (6b27-1.12.6-1~deb7u1)
JamVM (build 1.6.0-devel, inline-threaded interpreter with stack-caching)

Видим, что у нас JamVM используется по умолчанию.

Качаем контроллер.
# cd /usr/src/
# wget http://download.openremote.org/

У меня скачался OpenRemote-Controller-2.1.0_SNAPSHOT-2013-06-17.zip.

Настройка и использование OpenRemote

Теперь давайте создадим пользователя под которым будет запускаться контроллер. ( #adduser openremote , #su openremote ). Создадим под root директорию /srv/or/ дадим chown openremote на нее. Распакуем архив в нее.
$ cd /srv/or/bin
$ chmod +x openremote.sh
$ ./openremote.sh run
....
INFO: Server startup in 19386 ms
Регистрируемся на сайте. Заходим в online редактор. Я обычно не доверяю таким онлайн штукам. Но да ладно, в принципе есть исходники - пишут, что можно и оффлайн устанавливать дизайнер, но пока я смысла в этом не вижу. Создаем новый Device.



Теперь создаем команду (тут можно не прописывать хост и порт каждый раз в версии 2.2, там есть config for controller onewire. В версии 2.1. пока его нет).



Теперь создаем сенсор.



Теперь перейдем во вкладку "Дизайн". Создадим новую панель Android (у меня только андроид :) ). Добавим в нее пару Label - один просто текст, во втором выберем наш сенсор. Ну вот вроде и готово. Перейдем по адресу http://openremoteserver:8080/controller/ и нажмем Sync with Online Designer, тем самым загрузим созданное приложение на контроллер OpenRemote (Что интересно, можно делать это и оффлайн, тем самым сохранив бекап с приложением - в онлайн редакторе есть возможность сохранить приложение как zip файл, а на контроллере импортировать). После синхронизации заходим на веб-консоль ( http://192.168.xx.xx:8080/webconsole/ ) и нажимаем найти контроллер, после этого вебконсоль находит наш локальный контроллер, нажимаем на него и видим наше созданное приложение. И опять не работает. :)

Проблема вот в чем, по умолчанию owserver отвечает только по адресу localhost:4304 , то есть контроллер по имени благополучно подключается, а вот по ip (127.0.0.1) нет. Поэтому пропишем так server: port = 127.0.0.1:4304 (для доступа из сети просто пишем server: port = 4304) в owfs.conf. Перезапускаем сервер owserver: #service owserver restart . Работает:



Для установки приложения на мобильный телефон, устанавливаем приложение для андроид и оно само находит контроллер в локальной сети - подключаемся, работает.
Добавляем строчку cd /srv/openremote/bin в openremote.sh, иначе при запуске из другого места могут вылезти косяки. Скрипт init.d для контроллера

#!/bin/sh
### BEGIN INIT INFO
# Provides:          openremote
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

#!/bin/sh

User=openremote
orpass=/srv/openremote/bin

case "$1" in

stop)
        echo "Stopping OpenRemote Controller..."
        su -l $User -c "$orpass/openremote.sh stop" > /dev/null 2>&1 &
        ;;

start)
        # start OpenRemote in background mode
        su -l $User -c "$orpass/openremote.sh start" > /dev/null 2>&1 &
        echo "OpenRemote Controller started..."
        ;;

restart)
        $0 stop
        sleep 5
        $0 start
        ;;
*)
        echo "usage: $0 { start | stop | restart}" >&2
        exit 1
        ;;

esac

Ну и автозапуск update-rc.d.

ps. Вообще для доступа через интернет ip адрес контроллера должен быть внешним.

24 декабря 2013 г.

Подключение контроллера сети 1-wire (DS9490R) к Cubietruck. Первое устройство в сети 1-wire (ds2401).

Ну что, теперь можно раскрыть секрет - не просто так же покупался cubietruck. А покупался он для создания сети умного дома 1-wire. Что это такое рассказывать не буду, в интернете полно информации. Просто буду записывать некоторые не очевидные для меня, как чайника вещи. Итак, для начала подключим контроллер DS9490R к нашему cubietruck.
Вставляем контроллер в cubietruck.


# dmesg
[  512.230242] The port change to OHCI now!
[  512.532997] usb 5-1: new full-speed USB device number 2 using sw-ohci
# apt-get install owfs
# lsusb
Bus 005 Device 003: ID 04fa:2490 Dallas Semiconductor DS1490F 2-in-1 Fob, 1-Wire adapter
# mkdir /mnt/1wire
# owfs -C -uall -m /mnt/1wire --allow_other
# ls -lah /mnt/1wire
total 4.0K
drwxr-xr-x 1 root root    8 Dec 24 06:15 .
drwxr-xr-x 4 root root 4.0K Dec 24 06:14 ..
drwxrwxrwx 1 root root    8 Dec 24 06:16 05.4AEC29CDBAAB
drwxrwxrwx 1 root root    8 Dec 24 06:16 10.67C6697351FF
drwxrwxrwx 1 root root    8 Dec 24 06:16 81.EE6F32000000
drwxr-xr-x 1 root root    8 Dec 24 06:15 alarm
drwxr-xr-x 1 root root    8 Dec 24 06:15 bus.0
drwxr-xr-x 1 root root    8 Dec 24 06:15 bus.1
drwxr-xr-x 1 root root    8 Dec 24 06:15 settings
drwxrwxrwx 1 root root    8 Dec 24 06:16 simultaneous
drwxr-xr-x 1 root root    8 Dec 24 06:15 statistics
drwxr-xr-x 1 root root   32 Dec 24 06:15 structure
drwxr-xr-x 1 root root    8 Dec 24 06:15 system
drwxr-xr-x 1 root root    8 Dec 24 06:15 uncached

Информация:
owfs - это программа, которая отображает сеть в виде файловой системы. То, что owfs совпадает с названием всего пакета - чистая случайность.
owhttpd - это программа, которая делает доступной сеть по HTTP протоколу (по-народному, через браузер)
И та и другая программы могу работать с мастером сети самостоятельно, но не вместе!
Чтобы owfs и owhttpd работали одновременно, нужно запустить owserver.
owserver -u -p 3000
Запускает сервер работы с сетью, -u значит физическое устройство USB типа DS9490R, и отвечает на запросы по 3000 порту.
owhttpd -s 3000 -p 3001
-s 3000 - порт, на котором запущено owserver
-p 3001 - порт, на котором owhttpd сам отвечает по протоколу HTTP
owfs -s 3000 /mnt/1wire/
-s 3000 понятно, дальше идет mount point, который является обязательным параметром

Пробуем зайти http://192.168.xx.xx:2121/

Добавим в /etc/modprobe.d/fbdev-blacklist.conf (чтобы не использовать модули ядра линукс, а брать из пакета owfs)
blacklist ds9490r
blacklist ds2490
blacklist wire


Редактируем файл /etc/owfs.conf
# Sample configuration file for the OWFS suite for Debian GNU/Linux.
# This is the main OWFS configuration file. You should read the
# owfs.conf(5) manual page in order to understand the options listed
# here.
######################## SOURCES ########################
# With this setup, any client (but owserver) uses owserver on the
# local machine...
! server: server = localhost:4304
# ...and owserver uses the real hardware, by default fake devices
# This part must be changed on real installation
#server: FAKE = DS18S20,DS2405
# USB device: DS9490
server: usb = all
# Serial port: DS9097
#server: device = /dev/ttyS1
# owserver tcp address
#server: server = 192.168.10.1:3131
# random simulated device
#server: FAKE = DS18S20,DS2405
######################### OWFS ##########################
mountpoint = /mnt/1wire
allow_other
####################### OWHTTPD #########################
http: port = 2121
####################### OWFTPD ##########################
ftp: port = 2120
####################### OWSERVER ########################
server: port = localhost:4304


Редактируем /etc/fuse.conf:
# Set the maximum number of FUSE mounts allowed to non-root users.
# The default is 1000.
#
#mount_max = 1000  

# Allow non-root users to specify the 'allow_other' or 'allow_root'
# mount options.
#

user_allow_other


После этого монтировать можно командой # owfs. Хотя в прицнипе монтирование нам особо и не нужно ибо есть tcp owserver, монтировать датчики в файловую систему удобно для тестов. Поэтому процесс автомонтирования при загрузке рассматривать не будем (примеры скрипта можно найти в сети) update. или здесь.

Создание сети 1-wire.

Небольшой ликбез по поводу сети 1-wire для новичков как я (после моего месячного изучения урывками). Если профи увидят ошибки, прошу комментировать. Итак, сеть 1-wire - сеть на одной шине, компоненты которой подключаются последовательно. Компонентами могут выступать как уже готовые микросхемы с датчиками и так и микросхемы управления вводом\выводом (то есть для подключения дополнительных цифровых или аналоговых датчиков). В сети 1-wire по умолчанию всего два контакта - data и земля. В data передаются данные (как видно по названию), а также т.н. паразитное питание. То есть можно использовать всего два провода. Вначале я не очень понимал это принцип, поэтому накупил штук 10 ds2401 которые как раз от него и работают - сегодня будем тестировать сеть на них. Так вот, строить сеть на паразитном питании (питание идет с контроллера DS9490R) можно, но не нужно. :) Для пары датчиков и короткой шине можно использовать паразитное питание, а вот если шина длиной более 30 метров и датчиков много - ожидается просадка по напряжению, поэтому умные люди придумали (по ссылке много интересного про 1wire) и используют отдельное питание 5V, но не простое, а канал с повышенным напряжением. По ссылке прекрасно все описано. Я лишь дополню зачем это надо - 12 V в каждом модуле преобразуется стабилизатором в 5V, а 18V в 12V. Это сделано для того, чтобы даже при просадке напряжения в шине на компоненты гарантировано поступало 5V и на некоторые датчики 12V. Далее, сразу используем витую пару 5ой категории, чтобы не переделывать потом. Для коммутации также используем телефонные (rj11\12) коннекторы и внешние телефонные розетки.
Ну вот в принципе и все.

Делаем первое устройство сети 1-wire.

Сейчас мы будем делать устройство с паразитным питанием, потому что пока у меня нет нужной микросхемы 1-wire с внешним питанием. Тырим одну картинку по ссылке выше:



Итак, используем так:
светло-зеленый:data (3ий пин в контроллере)
зеленый:земля(GRND) (4ый пин в контроллере)


Обжимаем два провода, остальные пока не нужны. Обжато не очень, в следующий раз наверное по другому обожму. Но для теста пойдет.


Подключать мы будем устройство, которое выдает уникальный id (например, если устройство с определенным id доступно - дверь закрыта, а если не доступно - значит дверь открыта) - ds2401. Нагло тырим еще одну картинку с форума.



Второй конец я впаял в макет плату. Распиновку ds2401 смотрим здесь.


Подключаем (геркон замкнут - вот эти две коричневые цилиндрические штуки и есть магнит с герконом):
/mnt/1wire# ls -l
total 0
drwxrwxrwx 1 root root  8 Dec 24 14:47 01.E890ED150000
drwxrwxrwx 1 root root  8 Dec 24 14:47 81.EE6F32000000
drwxr-xr-x 1 root root  8 Dec 24 10:12 bus.0
drwxr-xr-x 1 root root  8 Dec 24 10:12 settings
drwxr-xr-x 1 root root  8 Dec 24 10:12 statistics
drwxr-xr-x 1 root root 32 Dec 24 10:12 structure
drwxr-xr-x 1 root root  8 Dec 24 10:12 system
drwxr-xr-x 1 root root  8 Dec 24 10:12 uncached

/mnt/1wire/01.E890ED150000# cat type
DS2401

/mnt/1wire/01.E890ED150000# cat r_address
A9000015ED90E801

/mnt/1wire/01.E890ED150000# cat id
E890ED150000

Вот у нас и новый элемент сети 1-wire. r_address это и есть уникальный id ds2401, который по идее гарантирует уникальность микросхемы. Я брал в китайском интернет магазине, где-то слышал что они штампуют все под одну гребенку (надо будет поставить вторую ds2401 и проверить). Пробуем убрать магнит от геркона. Смотрим - элемент отсутствует. Вот вам и элементарная проверка на открытую дверь. Я пока не выбрал (может кто посоветует) систему, которая все эти данные собирает в базу, имеет веб-интерфейс и разные плюшки (например работа с tcp сервером 1-wire, jabber), пока в поиске. Но смысл понятен.
Обратите внимание, что появление датчика в сети 1wire может занять некоторое время (около 15 секунд, а может и больше).
ps. Почти все элементы покупались онлайн, могу поделиться ссылками.