О Z-Wave
Всегда интересно взглянуть на привычные вещи с новой, необычной стороны. Знаете ли вы, что обычный роутер может сообщать вам о присутствии конкретных людей в доме? Да, именно так, без приобретения каких-либо дополнительных устройств и установки сложных систем он может отправлять вам сообщения следующего вида:
DD-WRT Log - XXX ушла в 13:05:22, 2015.04.XX
DD-WRT Log - XXX пришла в 16:55:03, 2015.04.XX
DD-WRT Log - XXX ушел в 19:15:24, 2015.04.XX
Теперь вы легко сможете узнать во сколько ваша жена ушла на работу и когда сын вернулся из школы.
Метод, приведенный в статье является достаточно трудоемким. Получить аналогичный результат можно гораздо меньшими усилиями при наличии контроллера умного дома VeraLite или Vera3 (подробнее читайте в статье «Люди в доме – простые способы определения присутствия» *1).
Для реализации поставленной задачи можно использовать любой роутер, требуется лишь поставить на него альтернативную прошивку с открытым исходным кодом. Мной был остановлен выбор на DD-WRT (*2), как на самой популярной.
Рис. 1,2. Внешний вид Wi-Fi точк и доступа Asus RT-N10U B1
В качестве подопытного роутера выступил недорогой (около 1 500 рублей) и достаточно распространённый Asus RT-N10U (*3). Из дополнительного оборудования понадобится только USB флэш-накопитель минимального размера (стоимостью около 300 руб).
Важное предостережение! Неопытный пользователь рискует в процессе перепрошивки роутера, поскольку это может привести к полному выходу устройства из строя. При наличии сомнений, лучше не осуществляйте это самостоятельно.
1. Замена стандартной прошивки Asus RT-N10U B1 на альтернативную mini DD-WRT
Для начала найдем подходящую прошивку для роутера Asus. На сайте DD-WRT (*4) вводим в поисковой строке индекс модели, рис. 3.
Рис. 3. Выбор прошивки для Asus RT-N10U
Необходимо скачать первоначальную прошивку для замены заводской с расширением .trx. И дополнительно любую, какая больше нравится, я выбрал K26 mini_usb_nas. Подробнее о различиях в версиях можно прочитать здесь (*5).
Первым шагом физически снимаем роутер с того места где он установлен и подключаем к компьютеру напрямую, подключив Ethernet кабель к одному из желтых LAN портов.
Далее заходим в панель управления роутера с вашим логином паролем. Адрес по умолчанию http://192.168.1.1, пользователь admin, пароль admin (если не был изменен), рис. 4.
Рис. 4. Вход в панель управления роутером Asus RT-N10U
Затем необходимо сбросить все настройки на заводские. Предварительно перепишите настройки доступа в Интернет и Wi-Fi, чтобы снова восстановить их на другой прошивке.
Восстановление заводских настроек: Администрирование -> Управление настройками -> кнопка Восстановить, рис. 5,6,7.
Рис. 5. Восстановление заводских настроек
Рис. 6. Восстановление заводских настроек
Рис. 7. Процесс восстановления заводских настроек
После сброса настроек роутер загрузится и предложит настроить параметры заново, рис. 8.
Рис. 8. Загрузка на стандартной прошивке после восстановления заводских настроек
Установите новый пароль и то, что роутер потребует ввести, без особой настройки, для того, чтобы попасть на страницу обновления прошивки.
Рис. 9. Пропуск шагов настройки на стандартной прошивке после восстановления заводских настроек
На странице обновления прошивки, рис. 10, загрузите скаченный .trx файл через меню: Администрирование / Обновление микропрограммы и нажмите «Обновить».
Рис. 10. Загрузка первоначального файла прошивки DD-WRT
Ждите, пока маршрутизатор обновляет прошивку, ни в коем случае не выключайте питание во время этого процесса, рис. 11. По времени это занимает до 15 минут, так что наберитесь терпения.
Рис. 11. Загрузка первоначального файла прошивки DD-WRT
По истечении 15 минут, если ничего не изменилось переходите на http://192.168.1.1. После этого необходимо задать имя и пароль администратора, рис. 12.
Рис. 12. Первая загрузка DD-WRT v24-sp2 (03/25/13) mini
Первое окно, после установки пароля администратора, рис. 13. Затем обязательно надо снова сбросить все настройки на заводские.
Рис. 13. Первая загрузка DD-WRT v24-sp2 (03/25/13) mini
Переходим на вкладку Administration -> Factory Defaults -> Apply Setting.
Рис. 14. Сброс DD-WRT v24-sp2 (03/25/13) mini на заводские настройки
Соглашаемся со сбросом к заводским параметрам, рис. 15.
Рис. 15. Сброс DD-WRT v24-sp2 (03/25/13) mini на заводские настройки
Немного ждем, рис. 16.
Рис. 16. Процесс сброса DD-WRT v24-sp2 (03/25/13) mini на заводские настройки
Снова задаем пароль администратора, рис. 17.
Рис. 17. Сброс DD-WRT v24-sp2 (03/25/13) mini на заводские настройки
Только после этого можно считать, что вы стали обладатель прошивки DD-WRT на вашем роутере. Установленная версия показана в правом верхнем углу. В данном случае это версия DD-WRT v24-sp2 (03/25/13) mini.
2. Обновление с mini DD-WRT на версию с поддержкой USB
DD-WRT mini хороша, но она не поддерживает работу с USB, поэтому необходимо установить другую редакцию. Ранее я уже скачал mini_usb_nas, вы можете прошить любую версию с поддержкой USB. Дополнительно о различиях в версиях, как уже упоминалось, можно прочитать здесь (*5).
Для того, чтобы установить версию mini_usb_nas повторим часть предыдущих шагов:
1. Прошиваем нужную прошивку. Переходим на вкладку Administration -> Firmware Upgrade, где выберите файл с версией mini_usb_nas, в моем случае это «dd-wrt.v24-21061_NEWD-2_K2.6_mini_usb_nas.bin».
2. После окончания прошивки обязательно снова сбрасываем все настройки на заводские. На вкладке Administration -> Factory Defaults -> Apply Setting.
3. Задаем настоящий пароль администратора после перезагрузки.
Только сейчас можно считать, что ваш роутер имеет необходимую прошивку для дальнейшей работы по отслеживанию присутствия людей через домашний роутер.
Роутер можно физически вернуть на место первоначальной установки, вручную восстановить настройки, полученные от оператора связи и настроить Wi-Fi. Здесь мы не будет этого касаться, исходим из предположения что это не составит проблемы.
Дополнительно DD-WRT позволяет переключить интерфейс прошивки на русский язык. Для этого перейдите Administration -> Management -> Language Selection, где и выберите Russian. Для меня показался более дружелюбным иной стиль интерфейса, который задается через Administration -> Management -> Router GUI Style, стиль xirian.
Рис. 18. Прошивка DD-WRT v24-sp2 (03/25/13) mini-usb-nas с русским языком, стиль xirian
3. Подключение USB флэш накопителя к DD-WRT
Для установки дополнительных программ понадобится внешний USB флэш-накопитель минимального размера, как по объему памяти, так и по размеру. После прогулки до ближайшего магазина им оказался SanDisk Cruzer Fit, стоимость около 300 руб.
Рис. 19. USB флэш-накопитель минимального размера SanDisk Cruzer Fit
Для смены файловой системы из-под Windows можно воспользоваться программой MiniTool Partition Wizard (*6), рис. 20,21.
Рис. 20. MiniTool Partition Wizard для смены файловой системы из Windows
Рис. 21. MiniTool Partition Wizard для смены файловой системы из Windows
После ряда проб USB накопитель был разбит на две части – меньшая с журналируемой файловой системой, используемой в операционных системах на ядре Linux, Ext3. Большая часть с FAT32.
Для отображения накопителя в прошивке вначале включаем поддержку USB-дисков. Для этого переходим Службы -> USB и включаем «Базовая поддержка USB», «Поддержка USB-дисков», «Automatic Drive Mount». После перезагрузки роутера «Тех.обслуживание -> Управление -> Перезагрузить маршрутизатор», можно увидеть информацию о подключенном USB накопителе, рис. 22.
Рис. 22. Информация о подключенном USB накопителе
Далее обеспечим доступ по сети к подключенному накопителю, для того чтобы облегчить задачу себе в дальнейшем.
Перейдем Службы -> NAS и включим сетевую файловую систему «Samba», в разделе File Sharing, рис. 23.
Рис. 23. Информация о подключенном USB накопителе
После перезагрузки роутера, при обращении по адресу роутера из проводника, в моем случае это \\192.167.0.200\, будут доступны фалы, содержащиеся на накопителе, рис. 24.
Рис. 24. Файлы на накопителе, подключенном к роутеру
4. Отправка писем с прошивки DD-WRT
DD-WRT имеет в своей стандартной комплектации агента передачи почты для отправки писем /usr/sbin/sendmail, но заставить его работать мне так и не удалось. Дальше ошибки «Segmentation fault», после соединения с несколькими почтовыми серверами, дело так и не продвинулось. Поэтому выбор был остановлен на msmtp — лёгком SMTP-клиенте.
4.1. Установка msmtp из Optware
Optware – это система управления пакетами, применяемая в основном для встраиваемых версий Linux Embedded, то есть для устройств небольшого размера и небольшой производительности. Прелесть данной системы в том, что она представляет собой репозиторий, содержащий в себе тысячи пакетов свободного программного обеспечения, исполняемые файлы которого скомпилированы для огромного числа разнообразных платформ.
Для удалённого доступа к роутеру будем использовать PuTTY – свободно распространяемый клиент для различных протоколов удалённого доступа, включая Telnet (*7). В настройках программы набираем адрес роутера и выбираем протокол, рис. 25.
Рис. 25. Окно PuTTY с настройками для соединения
Логин для подключения всегда root, пароль – ваш установленный пароль. После подключения наблюдаем следующую картину:
DD-WRTv24-sp2 mini(c)2013NewMedia-NETGmbH
Release:03/25/13(SVN revision:21061)
DD-WRT login: root
Password:
==========================================================
DD-WRT v24-sp2
http://www.dd-wrt.com
==========================================================
BusyBox v1.21.0 (2013-03-2502:20:44 CET) built-in shell (ash)
Enter 'help' for a list of built-in commands.
root@DD-WRT:~#
Проверяем, подключен ли USBнакопитель, командой df – выводим список всех файловых систем по именам устройств, а также их размер, занятое и свободное пространство и точки монтирования
root@DD-WRT:~# df
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 3456 3456 0100%/
/dev/root 3456 3456 0100%/
/dev/discs/disc0/part5
2029971 8229 1916936 0%/jffs
root@DD-WRT:~#
Далее подготавливаем место для установки Optware. Создаем каталог командой mkdir /jffs/opt:
root@DD-WRT:~# mkdir /jffs/opt
root@DD-WRT:~#
Проверяем, подключен ли USBнакопитель, командой df – выводим список всех файловых систем по именам устройств, а также их размер, занятое и свободное пространство и точки монтирования
root@DD-WRT:~# df
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 3456 3456 0100%/
/dev/root 3456 3456 0100%/
/dev/discs/disc0/part5
2029971 8229 1916936 0%/jffs
root@DD-WRT:~#
Далее подготавливаем место для установки Optware. Создаем каталог командой mkdir /jffs/opt:
root@DD-WRT:~# mkdir /jffs/opt
root@DD-WRT:~#
Далее подготавливаем место для установки Optware. Создаем каталог командой mkdir /jffs/opt:
root@DD-WRT:~# mkdir /jffs/opt
root@DD-WRT:~#
Монтируем устройство в каталог командой: mount -o bind /jffs/opt /opt
root@DD-WRT:~# mount -o bind /jffs/opt /opt
root@DD-WRT:~#
Скачиваем установочный скрипт: wget http://www.3iii.dk/linux/optware/optware-install-ddwrt.sh -O - | tr -d "\r" > /tmp/optware-install.sh
root@DD-WRT:~# wget http://www.3iii.dk/linux/optware/optware-install-ddwrt.sh -O-|tr -d "\r">/tmp/optware-install.sh
Connecting to www.3iii.dk (46.30.212.129:80)
- 100%|*******************************| 2895 0:00:00 ETA
root@DD-WRT:~#
и запускаем его: sh /tmp/optware-install.sh
root@DD-WRT:~# sh /tmp/optware-install.sh
Checking system config ...
Using 192.167.0.5 as default gateway.
Using the following nameserver(s):
nameserver 192.167.0.200
Installing package uclibc-opt_0.9.28-13_mipsel.ipk ...
Some newer versions of DD-WRT does not show download progress bar,
so just be patient - or check STATUS -> BANDWIDTH tab for download
activity in your routers Web-GUI, and then still wait a minute or two.
Connecting to ipkg.nslu2-linux.org (140.211.169.161:80)
uclibc-opt_0.9.28-13 100%|*******************************| 832k 0:00:00 ETA
Updating /opt/etc/ld.so.cache
Installing package ipkg-opt_0.99.163-10_mipsel.ipk ...
Some newer versions of DD-WRT does not show download progress bar,
so just be patient - or check STATUS -> BANDWIDTH tab for download
activity in your routers Web-GUI, and then still wait a minute or two.
Connecting to ipkg.nslu2-linux.org (140.211.169.161:80)
ipkg-opt_0.99.163-10 100%|*******************************|75850 0:00:00 ETA
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable/Packages.gz
Connecting to ipkg.nslu2-linux.org (140.211.169.161:80)
Packages.gz 100%|*******************************| 119k 0:00:00 ETA
Inflating http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable/Packages.gz
Updated list of available packages in /opt/lib/ipkg/lists/optware
Successfully terminated.
Installing uclibc-opt (0.9.28-13) to /opt/...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable/uclibc-opt_0.9.28-13_mipsel.ipk
Connecting to ipkg.nslu2-linux.org (140.211.169.161:80)
uclibc-opt_0.9.28-13 100%|*******************************| 832k 0:00:00 ETA
package uclibc-opt suggests installing ipkg-opt
Configuring uclibc-opt
Updating /opt/etc/ld.so.cache
Successfully terminated.
Installing ipkg-opt (0.99.163-10) to /opt/...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable/ipkg-opt_0.99.163-10_mipsel.ipk
Connecting to ipkg.nslu2-linux.org (140.211.169.161:80)
ipkg-opt_0.99.163-10 100%|*******************************|75850 0:00:00 ETA
Configuring ipkg-opt
Successfully terminated.
root@DD-WRT:~#
Полный список всех пакетов из Optware можно получить командой ipkg-opt list
root@DD-WRT:~# ipkg-opt list
abook -0.5.6-2- Abook is a text-based addressbook program designed to use with mutt mail client.
ack -1.96-1- grep-like text finder
...
zoo -2.10-1- zoo - File archiving utility with compression
zsh -4.3.17-1- Zsh is a shell designed for interactive use.
Successfully terminated.
root@DD-WRT:~#
Для интереса вы можете познакомиться с его содержимым (более тысячи пакетов) в отдельном файле ipkg-opt list.html
root@DD-WRT:~# /opt/bin/ipkg-opt update
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable/Packages.gz
Inflating http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable/Packages.gz
Updated list of available packages in /opt/lib/ipkg/lists/optware
Successfully terminated.
root@DD-WRT:~#
Скачиваем необходимый пакет для отправки почты, устанавливаем и запускаем его командой: /opt/bin/ipkg-opt install msmtp
root@DD-WRT:~# /opt/bin/ipkg-opt install msmtp
Installing msmtp (1.4.28-1) to /opt/...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable/msmtp_1.4.28-1_mipsel.ipk
Installing gnutls (2.6.5-1) to /opt/...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable/gnutls_2.6.5-1_mipsel.ipk
Installing libtasn1 (2.13-1) to /opt/...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable/libtasn1_2.13-1_mipsel.ipk
Installing libgcrypt (1.5.0-1) to /opt/...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable/libgcrypt_1.5.0-1_mipsel.ipk
Installing libgpg-error (1.10-1) to /opt/...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable/libgpg-error_1.10-1_mipsel.ipk
Installing zlib (1.2.5-1) to /opt/...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable/zlib_1.2.5-1_mipsel.ipk
Installing libgsasl (1.6.1-1) to /opt/...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable/libgsasl_1.6.1-1_mipsel.ipk
Installing libidn (1.25-1) to /opt/...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable/libidn_1.25-1_mipsel.ipk
Configuring gnutls
Configuring libgcrypt
Configuring libgpg-error
Configuring libgsasl
Configuring libidn
Configuring libtasn1
Configuring msmtp
Configuring zlib
Successfully terminated.
root@DD-WRT:~#
После этого пакет установлен и можно им пользоваться, но необходимо сделать записи в параметры запуска, чтобы не делать это вручную после каждой перезагрузки.
4.2. Восстановление работы msmtp после перезагрузки роутера
Чтобы приведенное монтирование сохранялось при перезагрузке, а также (как обнаружилось позднее), чтобы избежать нестыковок при работе планировщика, необходимо добавить записи:
mount -o bind /jffs/opt /opt &
stopservice cron && startservice cron
в параметры запуска (вкладка Тех. Обслуживание -> Команды), рис. 26.
Для того, чтобы подключенные к роутеру диски корректно отключались при его перезагрузке, добавляем Shutdown скрипт через веб-интерфейс:
umount /opt &
umount /jffs &
sleep 2
Рис. 26. Задание параметров запуска и выключения
После этого можно смело перезагружаться.
4.3. Отправка тестового письма при помощи msmtp
После перезагрузки проверим, что отправка писем работает. Снова подключимся через telnet к роутеру, используя программу PuTTY, и выполним нижеследующую команду (предварительно впишите имя и пароль от gmail ящика, откуда вы отправляете письмо, а также ваш почтовый ящик получателя recipient@):
root@DD-WRT:~# echo -e "From: DD-WRT <Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. >;\nContent-Type: text/plain;charset=utf-8\nContent-Transfer-Encoding: 8bit\nSubject: DD-WRT Log – тестовое сообщение\n" | /opt/bin/msmtp -d --host="smtp.gmail.com" --port=587 --protocol=smtp --auth=on --tls=on --tls-starttls=on --tls-certcheck=off --user="Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. "; --passwordeval="echo 'password-here'" --from="Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. "; Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
using account specified on command line
host = smtp.gmail.com
port = 587
timeout = off
protocol = smtp
domain = localhost
auth = choose
user = Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
password = *
passwordeval = echo 'password-here'
ntlmdomain = (not set)
tls = on
tls_starttls = on
tls_trust_file = (not set)
tls_crl_file = (not set)
tls_fingerprint = (not set)
tls_key_file = (not set)
tls_cert_file = (not set)
tls_certcheck = off
tls_force_sslv3 = off
tls_min_dh_prime_bits = (not set)
tls_priorities = (not set)
auto_from = off
maildomain = (not set)
from = Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
dsn_notify = (not set)
dsn_return = (not set)
keepbcc = off
logfile = (not set)
syslog = (not set)
aliases = (not set)
reading recipients from the command line
<-- 220 mx.google.com ESMTP lv10sm372526lac.24 - gsmtp
--> EHLO localhost
<-- 250-mx.google.com at your service, [178.161.155.55]
<-- 250-SIZE 35882577
<-- 250-8BITMIME
<-- 250-STARTTLS
<-- 250-ENHANCEDSTATUSCODES
<-- 250-PIPELINING
<-- 250-CHUNKING
<-- 250 SMTPUTF8
--> STARTTLS
<-- 220 2.0.0 Ready to start TLS
TLS certificate information:
Owner:
Common Name: smtp.gmail.com
Organization: Google Inc
Locality: Mountain View
State or Province: California
Country: US
Issuer:
Common Name: Google Internet Authority G2
Organization: Google Inc
Country: US
Validity:
Activation time: Wed Feb 18 10:19:56 2015
Expiration time: Thu Dec 31 00:00:00 2015
Fingerprints:
SHA1: D3:7C:82:FC:D0:5F:8F:XX:DA:A2:59:8C:42:D7:XX:9F:C1:9F:7E:60
MD5: 5A:01:9E:79:12:XX:BF:B1:68:XX:ED:FA:9E:CD:C0:F5
--> EHLO localhost
<-- 250-mx.google.com at your service, [178.161.155.55]
<-- 250-SIZE 35882577
<-- 250-8BITMIME
<-- 250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN
<-- 250-ENHANCEDSTATUSCODES
<-- 250-PIPELINING
<-- 250-CHUNKING
<-- 250 SMTPUTF8
--> AUTH PLAIN AHJvYm90QU1XXXXXXXWlsLmNvbQBXXXXXdGd1VWJua145OWZu
<-- 235 2.7.0 Accepted
--> MAIL FROM:<Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
>;
--> RCPT TO:<Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
>;
--> DATA
<-- 250 2.1.0 OK lv10sm372526lac.24 - gsmtp
<-- 250 2.1.5 OK lv10sm372526lac.24 - gsmtp
<-- 354 Go ahead lv10sm372526lac.24 - gsmtp
--> From: DD-WRT <Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
>;
--> Content-Type: text/plain;charset=utf-8
--> Content-Transfer-Encoding: 8bit
--> Subject: DD-WRT Log - тестовое сообщение
-->
--> .
<-- 250 2.0.0 OK 1428246750 lv10sm372526lac.24 - gsmtp
--> QUIT
<-- 221 2.0.0 closing connection lv10sm372526lac.24 - gsmtp
root@DD-WRT:~#
5. Отслеживание присутствия людей через домашний роутер
Осталось совсем немного до начала получения уведомления о присутствии людей.
Первоначально установим правильное время на роутере – задаем свой часовой пояс в разделе Установка -> Основные установки -> Настройки времени. Дополнительно можете задать «IP/Имя сервера»: time.nist.gov.
Далее определитесь – уведомления об активности каких устройств вы хотите получать – только телефоны? Телевизор? Планшет? Ноутбук? В данной статье мы рассмотрим только определение человека по телефону.
За телефоном надо закрепить статический IP адрес в настройках DHCP в разделе Службы -> Службы, рис. 27. Опытные люди могут заметить, что также можно работать с MAC-адресом, но на получаемый результат это не повлияет, к тому же скрипт можно легко модифицировать.
Рис. 27. Закрепление статического IP адреса за телефоном
После этого переходим в «Тех. Обслуживание -> Команды», вставляем нижеприведенный скрипт в поле и нажимаем «Сохр.скрипт». В скрипте измените адрес телефона 192.167.0.151 на свой и измените параметры отправки почты на те, которыми пользовались при отправке тестового письма.
#!/bin/bash
# z-wave.ru, Mikhail Shardin
# смена текущего каталога перед записью лога
cd /jffs/log
# инициализация переменной результата
LOGFILE="/jffs/log/z-wave-ru-phone"
read result < $LOGFILE
# пинг с последующей проверкой на ошибки
errorscount="$(ping -c 3 192.167.0.151 2<&1| grep -icE 'unknown|expired|unreachable|time out|100% packet loss')"
# если предыдущий пинг был удачен, а текущий нет, т.е. вывод ping содержит ошибки, то
if [ "$result" = 1 -a "$errorscount" != 0 ]; then
# запоминаем результат текущего пинга
echo 0 > $LOGFILE
result=0
# и пишем время разрыва соединения с устройством
echo 'DD-WRT Log - XXX ушел в '`date +%H:%M:%S`', '`date +%Y.%m.%d`
echo -e "From: DD-WRT <Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
>;\nContent-Type: text/plain;charset=utf-8\nContent-Transfer-Encoding: 8bit\nSubject: DD-WRT Log - XXX ушел в "`date +%H:%M:%S`", "`date +%Y.%m.%d` | /opt/bin/msmtp -d --host="smtp.gmail.com" --port=587 --protocol=smtp --auth=on --tls=on --tls-starttls=on --tls-certcheck=off --user="Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
"; --passwordeval="echo 'password-here'" --from="Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
"; Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
fi
# если предыдущий пинг был неудачен, а текущий успешен, то
if [ "$result" = 0 -a "$errorscount" = 0 ]; then
# запоминаем результат текущего пинга
result=1
echo 1 > $LOGFILE
# и пишем в лог время установки соединения
echo 'DD-WRT Log - XXX пришел в '`date +%H:%M:%S`', '`date +%Y.%m.%d`
echo -e "From: DD-WRT <Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
>;\nContent-Type: text/plain;charset=utf-8\nContent-Transfer-Encoding: 8bit\nSubject: DD-WRT Log - XXX пришел в "`date +%H:%M:%S`", "`date +%Y.%m.%d` | /opt/bin/msmtp -d --host="smtp.gmail.com" --port=587 --protocol=smtp --auth=on --tls=on --tls-starttls=on --tls-certcheck=off --user="Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
"; --passwordeval="echo 'password-here'" --from="Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
"; Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
fi
После вставки русские буквы отображаются некорректно, рис. 28, но на работоспособность это не повлияет, письма приходят с читаемыми символами.
Рис. 28. Скрипт отслеживания присутствия людей через домашний роутер
Скрипт сохранен, но, для получения уведомлений, необходимо задать его автоматическое исполнение на роутере один раз в определенное количество минут. Например, один раз в 5 минут. Воспользовавшись демоном-планировщиком cron, рис. 28, вставим команду:
*/5 * * * * root /bin/sh /tmp/custom.sh &
Рис. 29. Скрипт отслеживания присутствия людей через домашний роутер
После этого выключите Wi-Fi на телефоне, подождите минут 10 для проверки, затем включите.
Уведомления должны прийти. Поскольку уведомлений может быть довольно много, предлагаю провести некоторую оптимизацию в почтовом ящике, которая описана в разделе «Настройки почтового ящика Gmail», статьи *8.
Важное замечание – если вы отслеживаете iOS устройство, то разумнее определять присутствие человека не через пинг, а через таблицу cat /proc/net/arp:
root@DD-WRT:~# cat /proc/net/arp
IP address HW type Flags HW address Mask Device
192.167.0.151 0x1 0x2 8C:3A:XX:XX:D5:3B * br0
192.167.0.150 0x1 0x2 00:21:XX:XX:A1:B0 * br0
root@DD-WRT:~#
Дополнительно, для поддержания работоспособности устройства и работоспособности скрипта, рекомендую установить выполнение плановой перезагрузки роутера, в разделе Тех.обслуживание -> Поддержание жизни -> Плановая перезагрузка. Можно задать или конкретное время выполнения, например, раз в неделю или интервал, например, один раз в три дня.
Выводы
В результате применения статьи мы получаем систему понятных оповещений о присутствии людей в доме, работу которой обеспечивает ваш домашний роутер. При этом полностью сохраняется основной функционал устройства. Расширьте границы возможного без дополнительных затрат ;)
Ссылки, упоминаемые в статье:
*1. http://www.z-wave.ru/obzory/262-lyudi-v-dome-prostye-sposoby-opredeleniya-prisutstviya.html
*2. http://www.dd-wrt.com/site/index
*3. http://market.yandex.ru/product/9366696/
*4. http://www.dd-wrt.com/site/support/router-database
*5. http://www.dd-wrt.com/wiki/index.php/What_is_DD-WRT%3F#K2.6_Build_Features
*6. http://www.partitionwizard.com/free-partition-manager.html
*7. http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
*8. http://z-wave.ru/obzory/259-sozdanie-prostykh-i-ponyatnykh-uvedomlenij-v-ui5-vera.html
Информация актуальна на дату написания статьи: апрель 2015 года.
Автор: Михаил Шардин