Как из китайского роутера сделать управляемую розетку, или ещё один проект для умного дома и офиса
Время на прочтение
5 мин
Количество просмотров 54K
Последнее время на Хабре всё больше статей на тему «Умный Дом», «Сделай Сам», и меня это радует. Внесу и я свой скромный вклад в развитие цивилизации. Добро пожаловать в мир умных вещей!
Краткая предистория
Сначала был хаос… Пропустим этапы сотворения мира и эпоху динозавров и перейдём сразу к 21 веку. Кругом беспроводные технологии, электроника повсюду, космические корабли летят к Марсу…
Открыв для себя китайские интернет-магазины разных товаров, я накупил всякого добра. В частности, были куплены наборы для дистанционного управления лампочками: пультик и к нему несколько коробочек. В результате я сделал дома 4 управляемые розетки и теперь, лёжа вечером на диване и читая Хабр, можно зажечь или погасить свет в комнате и в коридоре, не вставая с дивана. Удобно.
Ещё были куплены совершенно чудесные маленькие дешёвые WiFi-роутеры. Один из них использован как «удлинитель» для беспроводного интернета в детской, а другой оставался в резерве. Кстати, рекомендую, весьма неплохие характеристики за сумму менее 600 рублей.
В «закромах Родины» лежало много разных хороших вещей, и были большие новогодние выходные. И родился проект…
Цель и средства
Решено, что совершенно необходимой вещью в моём «умном доме» является электрическая розетка, которой можно управлять через интернет. Для этого были собраны в кучу необходимые детали:
- роутер
- плата с микроконтроллером AtMega16 от старого проекта
- твердотельное реле
- 2-строчный ЖКИ-дисплей
- корпус
- провода и прочие расходные материалы
Техническое задание
Устройству было дано имя «MZ-switch», и оно должно было делать следующие вещи:
- принимать команды от хозяина через интернет
- работать как реле управления нагрузкой и как реле времени
- работать как «пинговалка» и уметь перезагружать роутер и отключать нагрузку при отсутствии пингов
- программировать параметры работы из командной строки и сохранять их в своей памяти
- показывать статус на дисплее
- радовать хозяина своим существованием
Инжекция кода в роутер
Когда я получил роутер, то, разумеется, сразу полез внутрь. Сначала я полез туда не механически, а метафизически, через телнет.
Выяснилось, что внутри у него
неонка
Линукс, и даже можно при желании написать и запустить собственный скрипт. Можно даже сохранить его в памяти роутера, но вот как заставить скрипт автоматически запускаться при старте?
Несколько дней было убито на то, чтобы найти возможность запуска скрипта. Основная идея была в «инжекции кода» в запуск какого-то стартового скрипта, и такой скрипт был найден! Инжекция выглядит так:
Теперь мой роутер при старте извлекает из своей памяти сохранённые там скрипты и запускает их. Следовательно, можно реализовать свой алгоритм взаимодействия с окружающим миром.
Добившись от роутера запуска скриптов, я полез в него механически. Внутри обнаружился последовательный порт, через который можно получить доступ к консоли. Припаяв 3 штырька к нужным точкам платы, я получил возможность управлять роутером через последовательный порт с помощью микроконтроллера.
Микроконтроллер и программа управления
Микроконтроллер должен уметь общаться через последовательный порт с роутером, управлять нагрузкой, отображать на дисплее результаты работы и вообще делать всю грязную работу. От предыдущего проекта оставалась плата с микросхемой AtMega16, имеющая нужный функционал. Она и пошла в дело.
Базовый алгоритм работы микроконтроллера выглядит так: получаем строку с командой, анализируем, выполняем, возвращаем строку с ответом. Это напомнило мне логику работы аналоговых модемов: S-регистры с данными и AT-команды управления.
Уважая копирайты и вообще для разнообразия, алгоритм оперирует понятиями R-регистров и MZ-команд. Регистры хранят числа и строки, а команды позволяют изменять регистры и управлять логикой работы.
Пример команды настройки контраста дисплея: «MZ+R0=200«
Умный алгоритм
Алгоритм работы микроконтроллера состоит из нескольких отдельных задач:
- передача данных из буфера передачи
- приём данных и сохранение их в буфере приёма
- анализ принятых данных и определение команд
- чтение и запись внутренних R-регистров
- управление нагрузкой и логикой работы
- индикация режимов работы
- отсчёт интервалов времени
Всё это удалось разместить в объёме 8К кода и 512 байт данных, использовав всего половину ресурсов микроконтроллера. Так что можно ещё чего-нибудь придумать и напрограммировать. Например, показывать на дисплее время, погоду, играть музыку и передвигаться по квартире.
Управляющая программа была написана и отлажена на обычном терминале. При этом не пострадало ни одно устройство.
В результате получился следующий функционал устройства:
- пауза после включения: позволяет дождаться загрузки роутера и не реагировать на «мусор», который он при этом выдаёт в консоль
- если требуется авторизация, то ввод логина и пароля в ответ на запрос от роутера
- запуск скрипта, позволяющего настроить конфигурацию роутера для работы с устройством (init)
- запуск основного скрипта, который будет выполняться роутером при работе (loop)
- приём команд от роутера и передача ответных сообщений
- сторожевой таймер для перезагрузки роутера при отстутсвии активности
- запуск скрипта, перезагружающего роутер (halt)
- включение и выключение нагрузки с помощью оптоизолированного реле
- возможность настраивать все параметры и хранить их в памяти микроконтроллера
Шайтан-машина
Почему-то очень часто реализация функционала какой-нибудь простой вещи напоминает мне задачи из игры Incredible machine. Ну как может цель «включить лампочку» состоять из таких затейливых вещей и действий? А вот как:
- Чтобы роутер мог выполнять наши скрипты, сделаем «инжекцию кода» в один из его собственных скриптов.
- Инжектированный код создаёт в папке /tmp несколько служебных скриптов, которыми мы потом воспользуемся.
- Роутер не позволяет создавать файлы с атрибутом «исполняемый» и, благодаря заботливым китайцам, не имеет команды chmod.
- Но мы элегантно обходим эту неприятность: сначала копируем какой-нибудь исполняемый скрипт под нужным нам именем в папку /tmp, а затем перезаписываем его содержимое!
- Роутер имеет WEB-интерфейс для управления, но изменить/добавить свою страничку нельзя: всё read-only
- Но мы элегантно обходим эту неприятность: оказывается, есть страничка для запуска любой команды, но на неё нет прямых ссылок. Набираем адрес этой странички вручную, и можем запускать свои скрипты! Хоть и не красивой кнопкой, а олдскульной командной строкой.
- Чтобы устройство получило команду от пользователя, используем метод «сохрани-и-передай»: один скрипт вызывается из формы ввода команд и сохраняет ввод пользователя в файл. Другой скрипт постоянно проверяет наличие этого файла, а найдя — отправляет через последовательный порт на микроконтроллер.
- Получив ввод пользователя, микроконтроллер выделяет из него команду и выполняет её. Например команду «включить нагрузку».
Всё, задача решена!
Сборка в корпус
Множество проектов не доживают до релиза из-за того, что лень или не из чего делать нормальный корпус. В данном случае изначально была поставлена цель: сделать «промышленный образец», чтобы он выглядел по-взрослому, а не как обычно.
Корпус был взят достаточно просторный, чтобы всё там разместить без тесноты. Пара выходных с дрелью и напильником, йо-хо-хо и бутылка рома, и вот устройство собрано. Все крепёжные элементы были найдены в шкафу, где хранятся остатки от сборки мебели и вообще
хлам
полезные в хозяйстве мелочи. Не удивляйтесь креплениям из дюбелей: винтов с гайками под нужный диаметр не нашлось.
Незаменимым материалом при сборке являются «китайские сопли» — трубочки из пластмассы для клеевых пистолетов. За неимением такого пистолета все работы выполнялись жалом обычного паяльника.
Вот что получилось в итоге:
снаружи
изнутри
Зачем это было нужно
Не буду говорить, что создано уникальное устройство, аналогов которому ещё не существует. Хотя, почему не буду? Буду! Любой новый продукт в маркетинговых материалах именуется не иначе как «уникальный» и «не имеющий аналогов». В крайнем случае «в несколько раз лучше, чем обычный…». Поэтому говорю: получилось действительно уникальное устройство, более чем в 9000 раз умнее, чем обычная розетка.
Можно подключить электрочайник и включать его с ноутбука через Wi-Fi. А можно включить пароходную сирену, если в доме пропал интернет. А можно подключить к устройству Самый Главный Сервер и перезагружать его, находясь дома.
На самом деле данный проект был реализован в качестве «разминки для ума», чтобы не растерять навыки в программировании микроконтроллеров и владении паяльником.
Материалы проекта разрешается копировать и модифицировать. Желательно со ссылкой на автора проекта.
Прошивки с открытым исходным кодом (OpenWrt, DD-WRT)
Прошивки с открытым исходным кодом, такие как OpenWrt и DD-WRT, предлагают пользователям больше возможностей для настройки и управления их роутерами. Эти прошивки заменяют стандартное программное обеспечение, предоставляемое производителями роутеров, и позволяют вам оптимизировать производительность, настроить дополнительные функции и улучшить безопасность вашей сети.
Дополнительные функции и опции
Сторонние прошивки, такие как OpenWrt и DD-WRT, предоставляют доступ к дополнительным функциям и опциям, которые не доступны в стандартных прошивках роутеров. К ним могут относиться продвинутые настройки QoS (Quality of Service) для оптимизации пропускной способности, поддержка VPN-серверов для безопасного подключения к вашей сети из любой точки мира, и даже возможность превратить роутер в полноценный NAS (сетевое хранилище).
Риски и преимущества использования стороннего ПО
Хотя использование стороннего программного обеспечения предоставляет ряд преимуществ, также стоит учесть и возможные риски. Во-первых, установка сторонней прошивки может привести к потере гарантии на ваш роутер, так как производители обычно не поддерживают такие модификации. Во-вторых, процесс установки прошивки может быть сложным и, если что-то пойдет не так, может повредить ваш роутер.
Тем не менее, если вы уверены в своих технических навыках и хотите расширить функционал вашего роутера, сторонние прошивки могут быть отличным решением. Прежде чем приступить к установке, тщательно изучите инструкции и убедитесь, что ваш роутер совместим с выбранной прошивкой.
После завершения настройки роутера и интеграции его с системами умного дома, не забывайте обеспечивать его своевременное обслуживание и поддержку для обеспечения максимальной производительности
Страница 1 из 2
-
- Регистрация:
- 12.05.10
- Сообщения:
-
194
- Благодарности:
- 156
himch
himch@mail.ru
- Регистрация:
- 12.05.10
- Сообщения:
- 194
- Благодарности:
- 156
- Адрес:
- Санкт-Петербург
Сервер домашней автоматики на базе роутераПривет,
после покупки нового Zuxel Keenetic Giga 2 и установки прошивки V1 возникла блестящая идея реализовать бюджетную систему домашней автоматики при помощи роутера.
Основная идея — роутер умеет практически все, что должен уметь навороченный свободнопрограммируемый промконтроллер, стоит на порядок дешевле, да и вообще уже есть почти в каждом доме.У меня сейчас такая конфигурация:
- Роутер;
- USB модем 4G с белым фиксированным IP;
- HDD 1Тб, подключенный к роутеру через USB;
- УПС.
Что имеем (полезного нам)?
- Web-сервер с поддержкой CGI, PHP и т. п.;
- База данных для фиксации логов событий, показаний датчиков и т. п.;
- CMS система для легкой разработки и поддержки сайта системы домашней автоматики;
- Дистанционное оповещение пользователя о событиях при помощи sms (через sim-карту модема), email, twitter и т. п. (через Интернет);
- Управление системой при помощи sms (через sim-карту модема), web-интерфейса, email и т. п. (через Интернет), а так же локально через комп/ноут/планшет/телефон при помощи web-интерфейса;
- Организация подсистемы видеонаблюдения с доступом через Интернет:
- — при помощи дешевых usb web-камер, подключенных непосредственно к роутеру,
- — при помощи ip камер;
- FTP сервер для легкого доступа к своим файлам извне;
- DLNA сервер для трансляции аудиовидеоконтента на домашние ТВ;
- Торрент-клиент для закачки контента;
- Хорошо документированная универсальная среда разработки своих приложений;
- Автоматическая перезапуск модема при отключении от сети;
- Автоматический перезапуск роутера при зависании;
Чего не хватает?
- Среды разработки как в промконтроллерах, с кучей готовых блоков/макросов, с режимом симуляции и отладки;
- Платы цифровых выходов (Dout);
- Платы аналоговых выходов (Aout);
- Платы цифровых входов (Din);
- Платы аналоговых входов (Ain);
Естественно, среду разработки в функциональных блоках взять неоткуда .
Платы расширения.
Требования:- DIN rail;
- LAN (Ethernet);
- Web-интерфейс для настройки;
- желательно CGI.
Плату цифровых выходов (иными словами, реле) я уже заказал за 60 евро.
LAN Relay board 8 каналов с управлением через протокол UDP.Сейчас в поисках плат Aout, Din, Ain.
Буду благодарен за наводки.Кстати, почему CGI. У меня ip камеры посылают и принимают события CGI, было бы круто все сделать единообразно.
Так же интересно поискать ИК датчики LAN PoE, и другие аналогичные девайсы LAN PoE или WiFi.
Что скажете, годная идея?
-
- Регистрация:
- 29.05.13
- Сообщения:
-
277
- Благодарности:
- 85
X13dev
Живу здесь
- Регистрация:
- 29.05.13
- Сообщения:
- 277
- Благодарности:
- 85
- Адрес:
- Германия
На аблоге есть тема про WonderBox. Там за основу взят TP-Link wr703n. Автор показывал свой модуль расширения на 16IO.Тоже хотел на роутер переехать, но требуется MONO, а для MIPS’ов его нет, да и ресурсов маловато.
-
- Регистрация:
- 19.10.09
- Сообщения:
-
572
- Благодарности:
- 74
BOE
Живу здесь
- Регистрация:
- 19.10.09
- Сообщения:
- 572
- Благодарности:
- 74
- Адрес:
- Москва
Если кроме бюджетного контроллера с удобным интерфейсом для пользователей вы также предложите бюджетные актуаторы и датчики, которые будут работать с вашим бюджетным контроллером, желательно по традиционной проводке (т.е не требуется ремонта). После чего огласите получившийся ценник и характеристики системы для сравнения с уже существующими.
А систем таких как грязи уже. -
- Регистрация:
- 12.05.10
- Сообщения:
-
194
- Благодарности:
- 156
himch
himch@mail.ru
- Регистрация:
- 12.05.10
- Сообщения:
- 194
- Благодарности:
- 156
- Адрес:
- Санкт-Петербург
Датчики и актуаторы (кстати что имелось в виду? ) константа же.
А экономия на головном устройстве существенная да и интересно.
Систем как грязи — поделитесь ссылками на софт и LAN платы ввода-вывода.UTP кстати считается традиционной проводкой?
-
- Регистрация:
- 19.10.09
- Сообщения:
-
572
- Благодарности:
- 74
BOE
Живу здесь
- Регистрация:
- 19.10.09
- Сообщения:
- 572
- Благодарности:
- 74
- Адрес:
- Москва
Актуаторы = выключатели, диммеры, термостаты, драйверы rgb …
utp традиционная для локальной сети, а для света, например, пока нет.
То что интересно это понятно, а вот про экономию на головном устройстве сомневаюсь. Так на старый бесплатный писюк можно поставить много разного софта в том числе бесплатного и будет совсем не хуже чем на роутере. -
- Регистрация:
- 20.09.13
- Сообщения:
-
1
- Благодарности:
- 0
shadowfire
Новичок
- Регистрация:
- 20.09.13
- Сообщения:
- 1
- Благодарности:
- 0
- Адрес:
- Самара
День добрый, а затраты не скажите на все это дело?
-
- Регистрация:
- 07.05.10
- Сообщения:
-
1.567
- Благодарности:
- 609
Ivan Kulibin
Electronics Supervisor
- Регистрация:
- 07.05.10
- Сообщения:
- 1.567
- Благодарности:
- 609
- Адрес:
- Ростов-на-Дону
Я уже говорил где то, что стоимость оборудования всего, если делать самому примерно 15 тыров на одну кнопку управления, когда кнопок больше 10 цена падает и не плохо. К примеру сейчас когда у меня все сделано и работает, то для расширения ставлю реле на выход ПЛС и дописываю прогу (в проге у меня уже 120 тэгов внутренних и внешних вместе). Стоимость реле 600 руб. Можно конечно и более дешевые найти.
-
- Регистрация:
- 12.05.10
- Сообщения:
-
194
- Благодарности:
- 156
himch
himch@mail.ru
- Регистрация:
- 12.05.10
- Сообщения:
- 194
- Благодарности:
- 156
- Адрес:
- Санкт-Петербург
Пока я потратил 60 евро на плату реле на 8 выходов, которая еще не пришла по почте (роутер и GSM модем я не считаю, ибо они уже были).
Получается 350 рублей за реле, управляемое программно, либо через Интернет, либо через СМС (то, что здесь называют GSM розеткой ). Это если не нужно подключать мощные нагрузки, тогда плюс стоимость контактора.
Аналоговые выходы мне пока не нужны (диммировать свет точно не буду).
По аналоговым и цифровым входам изучаю технологии ZigBee и Z-Wave, но цена там довольно большая за датчик, зато должно прекрасно сопрягаться с моим роутером.
-
- Регистрация:
- 07.05.10
- Сообщения:
-
1.567
- Благодарности:
- 609
Ivan Kulibin
Electronics Supervisor
- Регистрация:
- 07.05.10
- Сообщения:
- 1.567
- Благодарности:
- 609
- Адрес:
- Ростов-на-Дону
Вам же сюда еще шкаф надо или ящик какой, терминалы провода соеденительные в шкафу и много всякой мелочи, если конечно делать по правилам, а не на соплях.
-
- Регистрация:
- 12.05.10
- Сообщения:
-
194
- Благодарности:
- 156
himch
himch@mail.ru
- Регистрация:
- 12.05.10
- Сообщения:
- 194
- Благодарности:
- 156
- Адрес:
- Санкт-Петербург
Спасибо за замечание, у меня уже стоит полупустой шкаф Призма Плюс Шнайдер Электрик высотой 1500 мм, думаю, в нем места хватит для устройств на din рейку. К шкафу у меня опущен кабельный лоток, так же кабельный лоток подвешен по периметру котельной. Это все я поставил в рамках системы электроснабжения. Соплей не будет.
-
- Регистрация:
- 07.05.10
- Сообщения:
-
1.567
- Благодарности:
- 609
Ivan Kulibin
Electronics Supervisor
- Регистрация:
- 07.05.10
- Сообщения:
- 1.567
- Благодарности:
- 609
- Адрес:
- Ростов-на-Дону
Так тогда уже 60 евро не получется. Шкаф то тоже был куплен для системы, хотя и заранее. Я привел свою цену выше с полностью всем оборудованием.
-
- Регистрация:
- 12.05.10
- Сообщения:
-
194
- Благодарности:
- 156
himch
himch@mail.ru
- Регистрация:
- 12.05.10
- Сообщения:
- 194
- Благодарности:
- 156
- Адрес:
- Санкт-Петербург
Ну уж тогда и стены нужно посчитать)
Упаковка упаковкой — она может быть разная. Кто-то прямо на стену привернет дин рейку да кабель-канал, кто-то купит ящик китайский за 2000, а кто-то ящик за 20000.Эффект то один.
-
- Регистрация:
- 07.05.10
- Сообщения:
-
1.567
- Благодарности:
- 609
Ivan Kulibin
Electronics Supervisor
- Регистрация:
- 07.05.10
- Сообщения:
- 1.567
- Благодарности:
- 609
- Адрес:
- Ростов-на-Дону
Тут же спросили сколько стоит, я ответил. Если делать все по уму. А ящик (шкаф) это не упаковка, а часть системы. 1500 мм шкаф не 2000 стоит и это войдет в систему. Ведь еслы вы будете на стороне заказывать, они же все в шкафу привезут.
-
- Регистрация:
- 29.05.13
- Сообщения:
-
277
- Благодарности:
- 85
X13dev
Живу здесь
- Регистрация:
- 29.05.13
- Сообщения:
- 277
- Благодарности:
- 85
- Адрес:
- Германия
Имхо итоговая стоимость стоимость состоит из:
+ актуаторы и датчики — слабо зависит от системы управления
+ установка и настройка — так как это хобби, можно пренебречь
+ система управления и платы ввода/вывода — основные затраты
+ шкаф и прочее — не зависит от системы управленияна начальном этапе выглядит дешевле, а там, как говорится ‘аппетит приходит во время еды’
Посмотреть на существующие разработки типа Majordome или аблога, выбрать, установить, поиграться и поделиться впечатлениями. Вот и узнаем
-
- Регистрация:
- 27.09.09
- Сообщения:
-
1.554
- Благодарности:
- 640
Abysmo
Живу здесь
- Регистрация:
- 27.09.09
- Сообщения:
- 1.554
- Благодарности:
- 640
Остался один не решенный вопрос — комнатные панели и их дизайн.
Страница 1 из 2
В наличии имеется китайский GL.inet роутер, USB хаб, камера и GSM модем.
Задача: на удаленном объекте с плохой связью настроить видеонаблюдение и элементы управления и мониторинга.
Для прочих свистелок имеем дома или где-то (есть бесплатные хостинги) настроенный WWW(для просмотра снэпшотов),FTP(удаленно складывать снэпшоты),openvpn(не обязательно, рулить удаленно).
Как настроить на роутере SSH и зайти, в текущей статье рассматриваться не будет, так как путей сделать это много. В данном роутере первоначальную настройку я делал в Luci, зайдя по адресу http://192.168.8.15/cgi-bin/luci/
Добрый совет: при настройке SSH, расшарьте его наружу, если требуется удаленное управление, и смените его порт на некий другой, чтобы не соблазнять интересующихся. (С 22 на 2222 например)
Подключаемся к LAN порту роутера по SSH:
(я использую ubuntu, если у вы любитель windows — ваш путь — putty +)
ssh -p2222 -lroot 192.168.8.1
root@192.168.8.1's password:
root@openwrt:~#
root@openwrt:~# uname -a
Linux openwrt 3.18.23 #6 Mon Jan 4 11:55:23 HKT 2016 mips GNU/Linux
MOTION
Motion выбран по причине его гибкости настроек, хотя под такую задачу можно было выбрать что-то по проще, типа mjpeg-streamer. Motion будет сохранять снэпшоты по движению и раз в 5 минут, так как канал плохой и процессор не силен.
Обновляем список пакетов:
opkg update
Устанавливаем поддержку USB модема:
opkg install kmod-usb-serial kmod-usb-serial-wwan kmod-usb-serial-cp210x kmod-usb-serial-option
При удачной установке должны появиться /dev/ttyUSB0 и тд.
Устанавливаем поддержку USB камеры (всяких, для верности) (список — https://wiki.openwrt.org/doc/howto/usb.video):
opkg install kmod-video-core kmod-video-gspca-core kmod-video-uvc kmod-video-gspca-zc3xx kmod-video-gspca-sonixj kmod-video-gspca-sonixb
При удачном определении камеры должно появиться устройство /dev/video
Устанавливаем motion (нужно удалить или остановить предустановленные видео-сервисы, если есть):
opkg install motion wput
Конфигурируем /etc/motion.conf:
(желательно, чтобы логи, pid’ы, jpg’и он складывал в /tmp, чтобы продлить жизнь флэш-памяти)
Примерный конфиг моего /etc/motion.conf. Не забудьте исправить логины и пароли.
создаем скрипт отсылки снэпшотов:
find /tmp/motion/ -name 'video_????????????????????.jpg' > /tmp/dvrdir.lst
cd /tmp/motion/
ls -t | grep -v \/ | head -n 1 | while read var; do echo "$var"; cp $var /tmp/lastsnap.jpg; done
wput -R -i /tmp/dvrdir.lst ftp://ftpuser:ftppassword@server_addr/ddvr/jpgs/
создаем расписание в /etc/crontabs/root для отсылки снэпшотов
*/5 * * * * /etc/motion/wput_dvr.sh
Таким образом получилась схема отправки снэпшотов на удаленный сервер. Можно остановиться на этом, а можно дописать визуализация и формирование видео.
GPIO
В GL.Inet6416 их всего 5 (GPIO18-GPIO22). Не так много, как в raspberry, зато дешевле. С помощью них можно управлять внешними устройствами, контролировать замыкание контактов и снимать данные с некоторых сенсоров. Есть другие модели бюджетных роутеров, у которых разведены GPIO, отдельно, на кнопки и светодиодную индикацию.
Схема разводки выходов GPIO и др на GL.Inet
GPIO (General Purpose Input Output) — низкоуровневый интерфейс ввода-вывода прямого управления.
Базовая схема подключения к GPIO. VCC — 3.3.V.
Схема включения реле.
В моей реализации мониторинг и управление осуществляется связкой Bash-скрипта (демон бэкэнд) и PHP-скрипта (фронтэнд). Два порта будут заведены на сухой контакт (герконы), два — на реле, один — на 1-wire.
Основной принцип работы с GPIO:
Установка ввода — in, или вывода — out порта:
echo in > /sys/class/gpio/18/direction
Чтение состояния порта:
cat /sys/class/gpio/18/value
Запись состояния:
echo 1 > /sys/class/gpio/18/value
Вывод информации о GPIO:
cat /sys/kernel/debug/gpio
В некоторых моделях есть управление питанием USB: (keenetic kn-1211,
echo 0 > /sys/class/gpio/usbpower/value
Устанавлваем lighttpd, php,bash и тд:
opkg install lighttpd lighttpd-mod-auth lighttpd-mod-cgi lighttpd-mod-expire lighttpd-mod-fastcgi php5 php5-cgi php5-mod-curl
Конфигурируя всё это нужно постараться оставить рабочим Luci, если оно вообще было и нужно.
Примерный конфиг /etc/lighttpd/lighttpd.conf:
# version=3.0
server.modules = (
"mod_cgi",
"mod_auth",
)
server.network-backend = "write"
server.error-handler-404="/welcome.html"
server.document-root = "/www/"
server.pid-file = "/tmp/run/lighttpd.pid"
server.errorlog = "/tmp/log/lighttpd/error.log"
index-file.names = ( "welcome.html","login.html","index.php","index.php" )
$HTTP["url"] =~ "\.html" {
expire.url = ( "" => "access plus 1 seconds" )
}
##
# which extensions should not be handle via static-file transfer
#
# .php, .pl, .fcgi are most often handled by mod_fastcgi or mod_cgi
#static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
######### Options that are good to be but not neccesary to be changed #######
## bind to port (default: 80)
server.port = 80
server.upload-dirs = ( "/tmp" )
fastcgi.server = (
"/cgi-bin/download_file" => (
"download_file.handler" => (
"socket" => "download_file.socket",
"check-local" => "disable",
"bin-path" => "/www/cgi-bin/download_file",
"max-procs" => 1,
"allow-x-send-file" => "enable"
)
)
)
#### CGI module
$HTTP["url"] =~ "^/cgi-bin/" {
cgi.assign = ( "" => "" )
}
include "/etc/lighttpd/mime.conf"
include_shell "cat /etc/lighttpd/conf.d/*.conf"
# Access control
#auth.backend = "htpasswd"
#auth.backend.htpasswd.userfile="/etc/lighttpd/lighttpd-htpasswd.user"
#auth.require = ( "/files" =>
# (
# "method" => "basic",
# "realm" => "files",
# "require" => "user"
# )
/etc/lighttpd/conf.d/10-cgi.conf
server.modules += ( "mod_cgi" )
cgi.assign = ( ".pl" => "/usr/bin/perl",
".cgi" => "/usr/bin/perl",
".rb" => "/usr/bin/ruby",
".erb" => "/usr/bin/eruby",
".py" => "/usr/bin/python",
".php" => "/usr/bin/php-cgi" )
Также в php.ini нужно указать корневую директорию, временную — в /tmp и желательно подкрутить timezone.
В конечном итоге должно получиться следующее:
Скрипты и картинки для управления и мониторинга GPIO
Основная логика состоит в создании флагов в /tmp. Фронтэнд создает флаг состояния реле, а бэкэнд реализует его. И наоборот, бэкэнд выставляет флаг срабатывания датчика, а фронтэнд выводит его. Вся конфигурация GPIO происходит в скрипте бэкэнда, и интуитивно понятна. В коде бэкэнда заремирована возможность отправки СМС через gnokii или отправки e-mail через msmtp, предварительно установив их и сконфигурировав.
1-wire
1-wire — двунаправленная шина связи для устройств с низкоскоростной передачей данных. То есть в идеале, имеется жила питания/данных и жила земли. В одной сети могут находится некоторое, в зависимости от удаленности и потребления, количество ведомых (slave) устройств и одно ведущее (master) устройство. В моем случае мастером будет выступать GPIO с драйвером 1w из ядра. Покупка USB мастеров достаточно накладна, но сильно уменьшает количество проблем со slave устройствами, сложнее термодатчиков, но это не наш путь. Устанавливаем поддержку 1-wire на GPIO:
opkg install kmod-w1 kmod-w1-gpio-custom kmod-w1-master-gpio kmod-w1-slave-therm
В данном случае буду использовать GPIO18, поэтому:
echo "w1-gpio-custom bus0=0,18,0" > /etc/modules.d/59-w1-gpio-custom
reboot && exit
ls /sys/bus/w1/drivers/w1_slave_driver/
28-000000483037 29-000000174f7c bind uevent unbind
, где 28-000000483037 — DS18B20 (цифровой датчик температуры), 29-000000174f7c
— DS2408 (8-портовая микросхема ввода/вывода)
Припаиваем длинный гибкий кабель к ногам, запаиваем в термоусадку (головка датчика должна торчать) и выкидываем на теневую сторону избушки.
Схема включения DS18B20
Считываем значение датчика:
cat /sys/bus/w1/drivers/w1_slave_driver/*/w1_slave
a0 00 4b 46 7f ff 10 10 53 : crc=53 YES
a0 00 4b 46 7f ff 10 10 53 t=10000
Температура это значение t=10000, то есть 10.00 гр.С. Делим температуру на 1000:
awk -F= '/t=/ {printf "%.02f\n", $2/1000}' /sys/bus/w1/drivers/w1_slave_driver/*/w1_slave
(Для нескольких датчиков обращаемся конкретно по их ID.)
Есть возможность просматривать историю температуры в виде графика изменения.
Требуется установка curl и bash:
opkg install curl bash
Создаем св /etc/ bash cкрипт themp.update следующего содержания
#!/bin/bash
themp=$(awk -F= '/t=/ {printf "%.00f\n", $2/1000}' /sys/bus/w1/drivers/w1_slave_driver/*/w1_slave)
#testing only
#themp=$(( ( RANDOM % 35 ) - 15 ))
echo $themp
curl -k "http://1.1.1.1/themp-graph.php?p=12345&themp1=$themp"
,где 1.1.1.1 — IP или адрес домашнего сервера. Прописываем его запуск раз в 2 часа в /etc/crontabs/root:
3 0,2,4,6,8,10,12,14,16,18,20,22 * * * /etc/themp.update
На домашнем сервере требуется настроенный PHP с GD. Создаем PHP скрипт учета и построения графика
DS2408
На текущем этапе мне, к сожалению, не удалось завести DS2408. Буду ждать обновлений. Но по идее должно работать так:
ls /sys/devices/w1_bus_master1/29-000000174f7c/
Считывание:
dd if=./rw bs=1 count=1 | hexdump
Запись:
echo -e '\x00' |dd of=rw bs=1 count=1
echo -e '\xff' |dd of=rw bs=1 count=1
DS2408 рассматривалась как експандер портов ввода/вывода, однако для этой цели могут подойти аналоги MCP23017, но уже с использованием шины I2C.
В перспективе думается связать роутер по I2C с AVR и управлять, например светом, как с роутера по беспроводной связи или удаленно, так и с кнопок, установленных вмести выключателей. Таким образом должна будет осуществлена некая защита управления от выхода из строя роутера со всей обвязкой, и лавный контроль управления ложится на AVR. Но об этом позднее…
Возможные проблемы при настройке OpenWRT
* Из webLUCI при настроенной системе нельзя сменить внутренний IP интерфейса и DHCP:
Сделать это можно в консоли:
uci set network.lan.ipaddr=’192.168.2.1′
uci commit
/etc/init.d/network restart
Далее исправить правила фаервола и статических адресов
До этого я писал о выборе роутера для умного дома. Мною был выбран и приобретен маршрутизатор Xiaomi AX6000, осталовсь дождаться его прибытия. Наконец получил долгожданный товар. Не буду приводить все его характеристики и простые настройки как роутера для подключения интернета в доме. Не буду описывать порты Wan, Lan роутера и подключение к ним кабелей, параметры блока питания и т.д. Этой информации по Xiaomi AX6000 полно в интернете. Просто я опишу какие подводные камни могут ожидать тех кто будет использовать его как маршрутизатор для устройств умного дома. В статье краткая инструкция что необходимо сделать по настройке роутера Xiaomi для работы с устройствами умного дома.
Первоначальные настройки роутера Xiaomi для подключения и доступа в интернет (провайдер Ростелеком) прошли практически без всяких лишних заморочек. Во вкладке безопасность интерфейса сменил пароль администратора. Скорость соединения в интернете меня вполне устраивала. Настройку производил вечером поэтому досконально все проверить просто не успел. Но все устройства в сети были обнаружены, на компьютере летал интернет и вроде все было нормально. На ноутбуке интернет также присутствовал. Беспроводная сеть работала. Поэтому оставил все как есть до утра.
Но радость по поводу такой простейшей настройки была омрачена. Утром я попросил колонку с Алисой включить телевизор, но увы это не произошло. При проверке установил, что не работали и другие голосовые команды на большой части устройств умного дома. Набираю в строке браузера 192.168.1.1 и вхожу в настройки параметров роутера Xiaomi AX6000. Все устройства были обнаружены и автоматически прописаны. Утилита Advanced IP Scanner также обнаружил все устройства в сети, правда IP адреса были иные. Загрузить новую программную прошивку роутера не требовалось. Версия прошивки была актуальной. Отключаю маршрутизатор Xiaomi. При подключении старого роутера Asus все чудесным образом тут же заработало. Тут меня просто вынесло — купить крутой роутер Xiaomi (который рекламируют на каждом углу) за 7000 рублей, а это чудо техники просто не в рабочем состоянии для управления устройствами умныго дома.
С наскока перебирая настройки в разных вариантах, но проблему решить не смог. У меня долго лежал и не использовался универсальный пульт производства компании Broadlink модель RM4 PRO, при помощи которого с колонки с Алисой голосовыми командами можно управлять всеми устройствами, имеющими ИК порт или радио пульты. Решил достать его и настроить. В процессе настройки выяснилось, что он не может подключиться к WIFI сети на Xiaomi AX6000. На старом маршрутизаторе Asus пульт подключался без проблем. Перерыл половину интернета, но способа заставить работать эту железку так и не нашел. Подсказку после очередной попытки подключения выдал сайт производителя Broadlink. Его сообщение выглядит примерно так. Если у вас двухдиапазонный роутер и Вы используете одинаковое имя сети (SSID) на обоих диапазонах 2,4 и 5 Ггц то наши умные устройства работать с ним не будут.. Просто и категорично, почему я до сих пор не знаю. Догадываюсь, что будут попытки подключения к сети на 5 Ггц. Что практически невозможно. Но действительно ведь не работает. Думаю что аналогичная пробема будет и на маршрутизоторах других производителей. Поэтому устранение проблемы, описанной в этой статье, будет для них актуальна.
Делаю сброс настроек роутера. Смотрю в интерфейсе что установлено в настройках по умолчанию. Кнопка «Двойной Wi-Fi» у меня в настройках роутера была включена и имя моей сети и пароль следовательно в обоих диапазонах поэтому были совершенно одинаковыми. Необходимо отключить эту функцию. Нажимаем на кнопку и делаем разными логин (SSID) сети на обоих диапазонах 2,4 и 5 Ггц. Пароль пользователя для входа в сеть оставил одинаковым для обоих диапазонах. После перезагрузки роутера, о чудо — пульт RM4 PRO выбрал нужную сеть и подключился к ней. Я прописал в нем управление телевизором, но положительного результата не добился. В приложении Яндекса «Умный дом с Алисой» все устройства были прописаны, половина из них не работала ни при управлении голосовыми командами, ни с кнопок приложения. С Broadlink новые устройства в приложении Яндекса не обнаруживались, а следовательно все прописанные устройства были неработоспособны.
Что же делать? Учитывая, что еще IP адреса устройств были изменены необходимо было провести новую полную настройку всех умных устройств. Следует зайти на сервер MQTT (WQTT), где отвязать все устройства от приложения Яндекс с Алисой. В самом приложении же Яндекса с Алисой создать новый дом, а старый со всеми устройствами необходимо удалить. Это самый быстрый способ. После чего создаем новый дом в приложении Яндекса и прописываем в уже в нем сначала умные колонки, проведя их первоначальную настройку заново, а после этого добавляем все остальные устройства по их типам. При нажатии на кнопку обновить устройства — они появились в приложении Яндекса и после соответствующей их настройки все голосовые команды выполнялись обычным образом. Долгая настройка роутера Xiaomi для устройств умного дома славу богу закончилась удачно.
Шифрование на маршрутизаторе было выставлено гибридное WPA/WPA2, так как некотрые устройства умного дома не поддерживают WPA3. Например два из установленных реле Sonoff. Эксперементировать с этим я не стал, считаю такое шифрование не критичным. При настройке это надо учитывать. Иначе часть устройств не сможет подключиться к сети и будет неработоспособна.
Вот так примерно, я потерял на окончательную настройку два дня и кучу нервных клеток, но все же добился стабильной работы системы умного дома. В расширенных настройках задал проброс необходимых портов роутера. Сам маршрутизатор Xiaomi AX6000 пробивает на диапазоне 5 Ггц через две железобетонные стены и уровень сигнала отличный. Силу сигнала можно настраивать в обоих диапазонах в интерфейсе устройства. Для связи с устройствами Xiaomi умного дома маршрутизатор использует отдельную умную антенну. Я ее отключил, так как у меня других товаров Xiaomi просто нет, а с остальными как я понял она не работает. Ее включение ни какого выигрыша по стабильности или скорости работы не приносило. Маршрутизатор был приобретен с китайской прошивкой. На альтернативные прошивки роутер я не прошивал. Может в будущем сделаю это, но пока меня устраивает так как есть. Для русификации использовал раширение RUMIWIFI для браузера. Весь текст на web странице настроек в интерфейсе отражается корректно на русском языке. Перевод более менее приемлимый. Без труда можно понять что означает данный пункт настроек. Хотя роутер поставляется в Россию разработчики в Xiaomi (а может просто серый ввоз) пока не утруждают себя с полноценным переводом. Установил дополнительно на смартфон приложение Xiaomi Mi Wi-Fi Router и еще одно для управления настройками роутеров Xiaomi. В них в дополнительных настройках есть функция перегрузки по расписанию, которую считаю очень полезной. Выставил перезагружать ежесуточно в три часа ночи. Теперь роутер автоматически перезагрузится в три часа ночи. Приложение miwifi для ОС Android позволяет произвести настройку роутера Xiaomi с смартфона или планшета. В разделах «Настройки» и «Настройки сети». возможно изменять параметры соединения, управлять VPN-сервером, делать резервные копии конфигураций, назначать администратора (устанавливать логин и пароль), устанавливать часовой пояс, отключать световую индикацию, сменить wan порт – функций достаточно много. Информацию в статье подготовил для того чтобы если кто из Вас столкнется с таким случаем — то знал бы что делать, а не наступал на грабли. Все можно сделать в течение нескольких минут, а не искать причину сутки. Ну а какого производителя роутер выбрать решаете Вы !!! Их настройка тоже может иметь свои ньюансы.
При обращении окажу всю необходимую помощь по ремонту, настройке и монтажу оборудования Вашего умного дома, ремонту компьютеров и ноутбуков, установке и настройке программного обеспечения. Консультации и диагностика бесплатно. Обратиться ко мне можно в любое удобное для Вас время по телефону или форму обратной связи на сайте. Мои контакты указаны в верхней части каждой страницы сайта. Цены на монтаж оборудования у меня ниже чем в различных компаниях, занимающихся внедрением «Умного дома», так как нет издержек по оплате аренды помещений и оплаты персонала.