html текст
All interests
  • All interests
  • Design
  • Food
  • Gadgets
  • Humor
  • News
  • Photo
  • Travel
  • Video
Click to see the next recommended page
Like it
Don't like
Add to Favorites

Как из китайского роутера сделать управляемую розетку, или ещё один проект для умного дома и офиса

Последнее время на Хабре всё больше статей на тему «Умный Дом», «Сделай Сам», и меня это радует. Внесу и я свой скромный вклад в развитие цивилизации. Добро пожаловать в мир умных вещей!



image

Краткая предистория

Сначала был хаос… Пропустим этапы сотворения мира и эпоху динозавров и перейдём сразу к 21 веку. Кругом беспроводные технологии, электроника повсюду, космические корабли летят к Марсу…

Открыв для себя китайские интернет-магазины разных товаров, я накупил всякого добра. В частности, были куплены наборы для дистанционного управления лампочками: пультик и к нему несколько коробочек. В результате я сделал дома 4 управляемые розетки и теперь, лёжа вечером на диване и читая Хабр, можно зажечь или погасить свет в комнате и в коридоре, не вставая с дивана. Удобно.

Ещё были куплены совершенно чудесные маленькие дешёвые WiFi-роутеры. Один из них использован как «удлинитель» для беспроводного интернета в детской, а другой оставался в резерве. Кстати, рекомендую, весьма неплохие характеристики за сумму менее 600 рублей.
В «закромах Родины» лежало много разных хороших вещей, и были большие новогодние выходные. И родился проект…

Цель и средства

Решено, что совершенно необходимой вещью в моём «умном доме» является электрическая розетка, которой можно управлять через интернет. Для этого были собраны в кучу необходимые детали:
  • роутер
  • плата с микроконтроллером AtMega16 от старого проекта
  • твердотельное реле
  • 2-строчный ЖКИ-дисплей
  • корпус
  • провода и прочие расходные материалы


Техническое задание

Устройству было дано имя «MZ-switch», и оно должно было делать следующие вещи:
  • принимать команды от хозяина через интернет
  • работать как реле управления нагрузкой и как реле времени
  • работать как «пинговалка» и уметь перезагружать роутер и отключать нагрузку при отсутствии пингов
  • программировать параметры работы из командной строки и сохранять их в своей памяти
  • показывать статус на дисплее
  • радовать хозяина своим существованием


Инжекция кода в роутер

Когда я получил роутер, то, разумеется, сразу полез внутрь. Сначала я полез туда не механически, а метафизически, через телнет.
Выяснилось, что внутри у него неонка Линукс, и даже можно при желании написать и запустить собственный скрипт. Можно даже сохранить его в памяти роутера, но вот как заставить скрипт автоматически запускаться при старте?
Несколько дней было убито на то, чтобы найти возможность запуска скрипта. Основная идея была в «инжекции кода» в запуск какого-то стартового скрипта, и такой скрипт был найден! Инжекция выглядит так:

code_inject

Теперь мой роутер при старте извлекает из своей памяти сохранённые там скрипты и запускает их. Следовательно, можно реализовать свой алгоритм взаимодействия с окружающим миром.

Добившись от роутера запуска скриптов, я полез в него механически. Внутри обнаружился последовательный порт, через который можно получить доступ к консоли. Припаяв 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. А можно включить пароходную сирену, если в доме пропал интернет. А можно подключить к устройству Самый Главный Сервер и перезагружать его, находясь дома.
На самом деле данный проект был реализован в качестве «разминки для ума», чтобы не растерять навыки в программировании микроконтроллеров и владении паяльником.

Материалы проекта разрешается копировать и модифицировать. Желательно со ссылкой на автора проекта.
Читать дальше
Twitter
Одноклассники
Мой Мир

материал с habrahabr.ru

2

      Add

      You can create thematic collections and keep, for instance, all recipes in one place so you will never lose them.

      No images found
      Previous Next 0 / 0
      500
      • Advertisement
      • Animals
      • Architecture
      • Art
      • Auto
      • Aviation
      • Books
      • Cartoons
      • Celebrities
      • Children
      • Culture
      • Design
      • Economics
      • Education
      • Entertainment
      • Fashion
      • Fitness
      • Food
      • Gadgets
      • Games
      • Health
      • History
      • Hobby
      • Humor
      • Interior
      • Moto
      • Movies
      • Music
      • Nature
      • News
      • Photo
      • Pictures
      • Politics
      • Psychology
      • Science
      • Society
      • Sport
      • Technology
      • Travel
      • Video
      • Weapons
      • Web
      • Work
        Submit
        Valid formats are JPG, PNG, GIF.
        Not more than 5 Мb, please.
        30
        surfingbird.ru/site/
        RSS format guidelines
        500
        • Advertisement
        • Animals
        • Architecture
        • Art
        • Auto
        • Aviation
        • Books
        • Cartoons
        • Celebrities
        • Children
        • Culture
        • Design
        • Economics
        • Education
        • Entertainment
        • Fashion
        • Fitness
        • Food
        • Gadgets
        • Games
        • Health
        • History
        • Hobby
        • Humor
        • Interior
        • Moto
        • Movies
        • Music
        • Nature
        • News
        • Photo
        • Pictures
        • Politics
        • Psychology
        • Science
        • Society
        • Sport
        • Technology
        • Travel
        • Video
        • Weapons
        • Web
        • Work

          Submit

          Thank you! Wait for moderation.

          Тебе это не нравится?

          You can block the domain, tag, user or channel, and we'll stop recommend it to you. You can always unblock them in your settings.

          • ellarius
          • домен habrahabr.ru

          Get a link

          Спасибо, твоя жалоба принята.

          Log on to Surfingbird

          Recover
          Sign up

          or

          Welcome to Surfingbird.com!

          You'll find thousands of interesting pages, photos, and videos inside.
          Join!

          • Personal
            recommendations

          • Stash
            interesting and useful stuff

          • Anywhere,
            anytime

          Do we already know you? Login or restore the password.

          Close

          Add to collection

             

            Facebook

            Ваш профиль на рассмотрении, обновите страницу через несколько секунд

            Facebook

            К сожалению, вы не попадаете под условия акции