Умный Дом на Базе Роутера

Краткая предистория
Сначала был хаос… Пропустим этапы сотворения мира и эпоху динозавров и перейдём сразу к 21 веку. Кругом беспроводные технологии, электроника повсюду, космические корабли летят к Марсу…Открыв для себя китайские интернет-магазины разных товаров, я накупил всякого добра. В частности, были куплены наборы для дистанционного управления лампочками: пультик и к нему несколько коробочек. В результате я сделал дома 4 управляемые розетки и теперь, лёжа вечером на диване и читая Хабр, можно зажечь или погасить свет в комнате и в коридоре, не вставая с дивана. Удобно.
Ещё были куплены совершенно чудесные маленькие дешёвые WiFi-роутеры. Один из них использован как «удлинитель» для беспроводного интернета в детской, а другой оставался в резерве. Кстати, рекомендую, весьма неплохие характеристики за сумму менее 600 рублей.
В «закромах Родины» лежало много разных хороших вещей, и были большие новогодние выходные. И родился проект…
Цель и средства
Решено, что совершенно необходимой вещью в моём «умном доме» является электрическая розетка, которой можно управлять через интернет. Для этого были собраны в кучу необходимые детали:- роутер
- плата с микроконтроллером AtMega16 от старого проекта
- твердотельное реле
- 2-строчный ЖКИ-дисплей
- корпус
- провода и прочие расходные материалы
Техническое задание
Устройству было дано имя «MZ-switch», и оно должно было делать следующие вещи:- принимать команды от хозяина через интернет
- работать как реле управления нагрузкой и как реле времени
- работать как «пинговалка» и уметь перезагружать роутер и отключать нагрузку при отсутствии пингов
- программировать параметры работы из командной строки и сохранять их в своей памяти
- показывать статус на дисплее
- радовать хозяина своим существованием
Инжекция кода в роутер
Когда я получил роутер, то, разумеется, сразу полез внутрь. Сначала я полез туда не механически, а метафизически, через телнет.Выяснилось, что внутри у него неонка Линукс, и даже можно при желании написать и запустить собственный скрипт. Можно даже сохранить его в памяти роутера, но вот как заставить скрипт автоматически запускаться при старте?
Несколько дней было убито на то, чтобы найти возможность запуска скрипта. Основная идея была в «инжекции кода» в запуск какого-то стартового скрипта, и такой скрипт был найден! Инжекция выглядит так:
Теперь мой роутер при старте извлекает из своей памяти сохранённые там скрипты и запускает их. Следовательно, можно реализовать свой алгоритм взаимодействия с окружающим миром.
Добившись от роутера запуска скриптов, я полез в него механически. Внутри обнаружился последовательный порт, через который можно получить доступ к консоли. Припаяв 3 штырька к нужным точкам платы, я получил возможность управлять роутером через последовательный порт с помощью микроконтроллера.
Микроконтроллер и программа управления
Микроконтроллер должен уметь общаться через последовательный порт с роутером, управлять нагрузкой, отображать на дисплее результаты работы и вообще делать всю грязную работу. От предыдущего проекта оставалась плата с микросхемой AtMega16, имеющая нужный функционал. Она и пошла в дело.Базовый алгоритм работы микроконтроллера выглядит так: получаем строку с командой, анализируем, выполняем, возвращаем строку с ответом. Это напомнило мне логику работы аналоговых модемов: S-регистры с данными и AT-команды управления.
Уважая копирайты и вообще для разнообразия, алгоритм оперирует понятиями R-регистров и MZ-команд. Регистры хранят числа и строки, а команды позволяют изменять регистры и управлять логикой работы.
Пример команды настройки контраста дисплея: "MZ+R0=200"
Умный алгоритм
Алгоритм работы микроконтроллера состоит из нескольких отдельных задач:Source: geektimes.ru


![[MWC14] Умный дом и тачка от Qualcomm [HQ]](/img/video/mwc14_umniy_dom_i_tachka_ot.jpg)


