Меню Рубрики

Установка majordomo на роутер

Универсальный Wi-Fi узел

Идея: сделать универсальный узел (или модуль) домашней автоматики, используя Arduino + бюджетный wifi-роутер.

Wi-Fi роутер DLink DIR 320

В итоге мы должны получить возможность передавать данные, полученные с помощью Arduino на внешний веб-сервер — в нашем случае с установленной системой MajorDoMo.

Шаг 1. Подготовка роутера

Для начала нам следует обновить прошивку роутера. Я использовал прошивку от Олега. Вероятно, большая часть из нижеописанного будет справедливо и для прошивок на базе OpenWRT/DDWRT, но я экспериментировал именно с вышеуказанной прошивкой. Инструкций по загрузке прошивки можно найти много в интернете — процесс не совсем элементарный и у меня получилось не с первого раза, но в конце концов удалось.

Следующим шагом после перепрошивки у меня была смена MAC-адреса, т.к. в сети уже был работающий роутер перешитый этой же прошивкой, которая, в свою очередь, всегда ставит устройству один и тот же MAC-адрес. Устройства с одинаковыми MAC-адресами в сети жутко конфликтуют, поэтому их надо обязательно менять. Процедура смены MAC-адреса хорошо расписана здесь.

Далее, нам нужно, чтобы роутер был в роли «клиента» для имеющейся WiFi-сети — мы ведь хотим, чтобы наш узел был беспроводным.

Я по неопытности довольно долго промучался с этим шагом и поэтому просто представлю ниже картинки с итоговыми настройкми. Основная идея — «клиентский» роутер должен иметь практически такие же настройки беспроводной сети, что и «родительский», но находится в режиме «клиента» (спасибо, Кэп!).

Настройки на «родительском» роутере:

Нажмите для отображения картинок

Настройки на «клиентском» роутере: Настройки на «родительском» роутере:

Нажмите для отображения картинок

Статус на «клиентском роутере» после соединения:

Нажмите для отображения картинок

Статус на «родительском» роутере после соединения:

Нажмите для отображения картинок

Итак, у нас на данном этапе должно быть готово беспроводное устройство, которое при включении питания может подключаться к существующей WiFi-сети. Но для работы Arduino нам понадобится ещё небольшая модификация начинки роутера.

В прошивку встроен драйвер USB-serial, но его нужно активировать зайдя на роутер по SSH и выполнив следующие команды:

А для того, чтобы эти команды выполнялись автоматически при загрузке роутера, делаем следующее:

1. создаём файл инициализации порта:

в этот файл вносим следующие строчки:

(в vi редакторе надо нажать INS для перехода в режим редактирования, после редактирования нажимаем ESC, затем нажатием на «:» переходим в режим команд и там набираем «!wq» для записи изменений и выхода)

и ставим атрибут разрешения запуска скрипта

2. создаём каталог командой

3. создаём файл post-boot командами

4. редактируем файл post-boot с помощью vi и вносим в него следующий код:

5. сохраняем все изменения в память роутера и перегружаемся

Теперь, если подключить к роутеру Arduino, то в системе должно обнаружиться устройство /dev/usb/tts/0 , через которое мы будем общаться с контроллером.

Шаг 2. Подготовка Arduino

На самом деле никакой особенной подготовки для контроллера не нужно. Можно использовать готовый код, который представлен на этой странице. Фактически, задача контроллера сводится к том, чтобы при необходимости передать данные, выводить строчку вида: GET http:// Корректность работы контроллера желательно проверять вообще без роутера, просто подключив его по USB к компьютеру и загрузив программу мониторинга порта — будь-то терминал или специализированная программа, доступная по вышеуказанной ссылке. Роутер, в свою очередь, будет нами использоваться для передачи запроса на сервер.

Шаг 3. Передача команд от Arduino на сторонний веб-сервер

Итак, у нас есть роутер в режиме клиента WiFi-сети, есть контроллер Arduino с загруженным скетчем. Подключаем Arduino к роутеру, используя встроенный USB-порт.

Следующим шагом будет создание bash-скрипта мониторинга состояния Arduino. Для этого делаем следующее:

1. С помощью vi создаём файл /tmp/local/etc/monitor.sh следующего содержания:

При этом заменяем 192.168.0.17 на адрес вашего сервера.

2. Ставим на этот файл атрибуты запуска

3. Добавляем файл в автозагрузку с помощью редактирования созданного выше скрипта:

Итоговое содержимое post-boot должно быть следующим:

4. Записываем все изменения в память и перегружаемся

На этом настройка связки «arduino-роутер» можно считать завершённой.

Шаг 4. Настройка MajorDoMo для приёма и обработки команд

Здесь всё так же, как и при работе с Arduino, имеющим ethernet-shield на борту. Пример создания объектов и сценариев можно посмотреть на этой странице.

Что дальше?

Дальше всё зависит от вашей фантазии — подключайте к Arduino всё, что угодно — датчики температуры, движения, дыма и прочее. Кроме того, можно использовать более широко сам роутер — поставьте USB-хаб и подключите дополнительную периферию, например веб-камеру.

Кроме того, при желании можно организовать не только реакцию на датчики, но и приём команд для исполнительных механизмов — последнее не рассматривется в этой статье, но дело лишь за модификацией программной части, т.к. «железная» платформа уже имеется.

Page last modified on January 08, 2014, at 12:35 PM by sergejey

источник

Делаем умный дом с нуля. Часть 5 — установка MajorDoMo на Raspberry pi

В прошлой статье мы с вами установили Web-сервер на микрокомпьютер Raspberry pi, и теперь у нас все готово для установки платформы умного дома — MajorDoMo.

Итак, давайте приступим к установке.

Для начала нам нужно подключить питание к микрокомпьютеру и зайти на него удаленно, при помощи программы Putty.

Читайте также:  Установка катлов на твердом топливе

Так как любая установка начинается с загрузки дистрибутива, то нам нужно загрузить дистрибутив MajorDoMo на наш микрокомпьютер.

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

sudo mkdir /home/majordomo

Здесь mkdir — собственно команда на создание папки, а /home/majordomo — папка (полный путь), которую создает эта команда.

Далее, мы переходим в эту папку при помощи команды:

cd /home/majordomo

Здесь cd — это команда, которая изменяет текущую рабочую папку на ту, которая указана после команды.

Теперь мы можем скачать дистрибутив MajorDoMo c githab (он будет загружен в рабочую папку, в которую мы перешли при помощи предыдущей команды). Для этого давайте введем в командную строку следующую команду:

sudo wget https://github.com/sergejey/majordomo/archive/master.zip

Команда wget позволяет скачать файл, ссылка на который располагается сразу после команды . Если эта команда у вас не работает, то возможно у вас не установлен wget. Установить его можно командой sudo apt-get install wget -y.

Поскольку дистрибутив заключен в zip архив, нам нужно его разархивировать при помощи команды:

sudo unzip master.zip

Здесь unzip — команда, которая извлекает файлы из архива в текущую рабочую папку, а master.zip — архив с MajorDomo, который мы с вами скачали. Если у вас эта команда не работает, то нужно будет установить ее командой sudo apt-get install unzip -y.

Далее, нам нужно перенести разархивированную систему умного дома MajorDoMo в директорию Web-сервера. Делается это при помощи следующей команды:

sudo cp -rp /home/majordomo/majordomo-master/* /var/www

Здесь cp — команда копирования (сокращение от copy). -rp — опции команды cp, означающие следующее: r — копирует как указанный каталог, так и все входящие в него подкаталоги, т. е. сохраняет исходную форму дерева каталогов; р — сохраняет владельца, временные метки и флаги доступа при копировании. /home/majordomo/majordomo-master/* — файл источник (откуда будет копироваться). /var/www — директория приемник (куда будет копироваться).

Предыдущая команда скопировала нам все, кроме скрытого файла .htaccess. Давайте скопируем и его тоже:

sudo cp -rp /home/majordomo/majordomo-master/.htaccess /var/www

Эта команда аналогична предыдущей, только копирует 1 скрытый файл.

Настройка прав на файлы и директории

Для файлов нам нужно выставить права 0644 (все пользователи имеют право чтения; владелец может редактировать). Сделать это можно следующей командой:

sudo find /var/www/ -type f -exec chmod 0644 <> \;

Здесь, мы с помощью команды find ищем в каталоге /var/www/ и его подкаталогах только файлы (о чем нам говорит -type f, где f означает files или файлы), и ко всем найденным файлам применяем команду chmod 0644 (которую в свою очередь запускает команда -exec). Команда chmod собственно и изменяет существующие права на те, которые следуют за этой командой (в нашем случае — 0644).

Для директорий же, нам надо выставить права 0755 (каждый пользователь имеет право читать и запускать на выполнение; владелец может редактировать). Эти права выставляются почти аналогичной командой:

sudo find /var/www/ -type d -exec chmod 0755 <> \;

Данная команда, в отличие от предыдущей, работает только с директориями, о чем нам говорит -type d (где d означает directories или директории).

Теперь давайте проверим установленные права командой:

ls -lh /var/www

Команда ls позволяет посмотреть, что у нас находится в директории /var/www. Опция этой команды -lh выводит подробный список, в котором отображаются владелец, группа, дата создания, размер и другие параметры.

Права для директорий в выведенном списке должны иметь вид drwxr-xr-x, а для файлов — -rw-r—r— (директории подсвечены синим цветом):

Если если у вас по какой-то причине система на моменте начального конфигурирования не работает совсем или не работает частично, то проблемы, в большинстве случаев, связаны с неправильно установленными правами.

Меняем права доступа к файлам по принципу: всем-всё.

sudo find /var/www/ -type f -exec chmod 0666 <> \;

sudo find /var/www/ -type d -exec chmod 0777 <> \;

ls -lh /var/www

Права для директорий в выведенном списке должны иметь вид drwxrwxrwx , а для файлов — -rw-rw-rw- .

В случае если права по какой-то причине не установились, то можно сделать вариант, в котором устанавливаются полные права для всех рекурсивно по директориям и файлам. Команда выглядит так:

sudo chmod -R 777 /var/www

Необходимо заметить, что данный способ, не самый безопасный, но самый простой.

Установка собственника и группы на файлы и директории

MajorDoMo (а именно сервисы: apache и php) работает от пользователя www-data. Права доступа к каталогу /var/www, где лежат файлы Majordomo по умолчанию принадлежат root. Изменим владельца директории /var/www на www-data при помощи следующей команды:

sudo chown -R www-data:www-data /var/www

Здесь, chown — команда, изменяющая владельца и/или группу для указанных файлов (в нашем случае — это директория /var/www, указанная в конце команды). -R означает рекурсивное изменение владельца указанного каталога и всего его содержимого. www-data:www-data — это новый пользователь/группа.

Проверяем собственника рассмотренной ранее командой:

ls -lh /var/www

Вывод этой команды должен быть примерно таким:

Далее, нам нужно предоставить доступ пользователю www-data к медиа устройствам. Для этого его необходимо добавить в группу audio. Делается это следующей командой:

sudo usermod -a -G audio www-data

Читайте также:  Установка кондиционера на правую сторону

Команда usermod изменяет учетную запись пользователя (в нашем случае пользователя www-data). Параметр (append) этой команды добавляет пользователя в дополнительную группу (в нашем случае в группу audio). Этот параметр используется только вместе с параметром -G.

Проверить, что пользователь www-data появился в группе audio можно командой:

cat /etc/group | grep audio

Команда cat здесь читает данные из файла /etc/group и выводит их на экран. Однако в нашем случае на экран выводятся не все данные, а только те, которые отфильтровывает команда grep, а отфильтровывает она для показа только строчку audio.

Если пользователь www-data был добавлен в группу audio, то вывод этой команды будет примерно следующий:

Создание базы данных

Поскольку платформа MajorDoMo является Web-приложением, все ее данные будут храниться в базе данных MySQL. Давайте эту базу создадим.

Для начала нам нужно открыть какой-нибудь браузер, например Google Chrome. В адресной строке этого браузера нужно ввести адрес:

http://IP_адрес_сервера/phpmyadmin

Вместо IP_адрес_сервера нужно ввести IP адрес своего микрокомпьютера, на который устанавливается MajorDoMo. По данному адресу у нас откроется веб-интерфейс для администрирования MySQL — PhpMyAdmin. В моем случае адрес выглядит следующим образом http://192.168.1.14/phpmyadmin.

После того, как мы ввели адрес и нажали кнопку Enter, мы попадаем на страницу ввода логина и пароля phpMyAdmin:

В поле Пользователь здесь нужно ввести root, а в поле Пароль — тот пароль который мы создали и запомнили при установке MySQL . Далее, нажимаем кнопку Вперед, и попадаем в панель управления PhpMyAdmin:

Теперь нам нужно создать базу данных db_terminal. Чтобы ее создать, нажимаем «Создать БД» в левой части окна:

Затем, в поле Имя базы данных вводим db_terminal и нажимаем кнопку Создать:

Сразу после нажатия кнопки Создать, мы переходим в созданную нами базу данных db_terminal. Если перехода не произошло, то нужно в левой части окна выбрать созданную БД, путём нажатия один раз на её название.

В верхней части окна ищем кнопку Импорт, и нажимаем её (у меня окно браузера не развернуто во весь экран, поэтому кнопка Импорт скрыта за кнопкой Еще):

Теперь нам нужен сам файл базы данных db_terminal.sql, из которого мы импортируем все данные. Чтобы получить этот файл, давайте скачаем архив с дистрибутивом MajorDoMo себе на компьютер. Скачать его можно по ссылке: https://github.com/sergejey/majordomo/archive/master.zip

Я этот архив скачал себе на рабочий стол и разархивировал. В разархивированной папке находится нужный нам файл db_terminal.sql:

Переходим в панель управления PhpMyAdmin, и в загрузившейся странице, в разделе «Импортируемый файл» нажимаем кнопку Выберите файл:

Откроется проводник вашего компьютера, в котором нужно выбрать файл db_terminal.sql, о котором мы только что говорили. После выбора, название файла должно отобразиться рядом с кнопкой Выберите файл:

Перематываем это окно в самый низ, и нажимаем кнопку Вперед:

Произойдет импорт базы данных. После успешного импорта должна отобразится строка с подобным текстом:

Теперь необходимо создать пользователя и предоставить этому пользователю права на созданную базу данных. Для этого в левой части окна phpMyAdmin нажимаем на название БД: db_terminal.

Далее необходимо нажать Привилегии в правой части окна вверху:

Будет отображена страница с уже существующими пользователями, которые имеют доступ к этой БД. Для создания нового пользователя необходимо нажать «Добавить учетную запись пользователя» в разделе «Новый«.

Здесь мы заполняем поля: Имя пользователя, Пароль, Подтверждение (обязательно запоминаем или записываем):

Перематываем окно немного вниз и проверяем, чтобы была установлена галочка: «Предоставить все привилегии на базу данных «db_terminal».«.

Теперь перематываем окно в самый низ и нажимаем кнопку Вперед:

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

Правка основного конфигурационного файла MajorDoMo

После установки MajorDoMo у нас есть только пример конфигурационного файла config.php.sample. Нам нужно скопировать этот пример в рабочий конфигурационный файл config.php . Чтобы произвести копирование, нужно снова перейти в консоль (программа PuTTY) и ввести в командную строку следующую команду:

sudo cp /var/www/config.php.sample /var/www/config.php

Далее, нам нужно владельцем только что созданного конфигурационного файла config.php сделать пользователя www-data:

sudo chown www-data: /var/www/config.php

Теперь открываем файл config.php в редакторе Nano для редактирования:

sudo nano /var/www/config.php

Здесь нам нужно прописать имя пользователя и пароль пользователя базы данных в следующих строчках:

DB_USER — это пользователь, которого мы создали выше

DB_PASSWORD — пароль от этого пользователя

Сохраняем сделанные изменения комбинацией клавиш Ctrl+O, и выходим из редактора Nano комбинацией Ctrl+X. На этом правка конфигурационного файла считается законченной.

Основной цикл

Подробно о циклах можно прочитать на официальном сайте MajorDoMo по следующей ссылке: https://kb.smartliving.ru/osnovnoy-cikl-v-majordomo/

Сначала нам нужно создать файл описание сервиса для запуска основного цикла системы. Создадим мы его в редакторе Nano следующей командой:

sudo nano /etc/systemd/system/majordomo.service

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

Сохраним изменения в файле комбинацией клавиш Ctrl+O, и выйдем из редактора Nano комбинацией Ctrl+X.

Так же необходимо отключить режим «Strict mode» для MySQL (изначально MajorDoMo писался под прошлые версии PHP, MySQL и без отключения режима «строгого соответствия правилам SQL» получим криво работающую систему) . Для этого создадим конфигурационный файл:

Читайте также:  Установка деревянных плинтусов на паркет

sudo nano /etc/mysql/conf.d/disable_strict_mode.cnf

и введем в него следующие две строки (переноса второй строки, как показано ниже, быть не должно, вторая строка единое целое:

[mysqld]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_
FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Далее нам нужно добавить главный цикл в автозагрузку. Сделаем это при помощи следующей команды:

sudo systemctl enable majordomo

Теперь осталось только запустить основной цикл системы:

sudo systemctl start majordomo

Все, система готова к работе, но желательно все же перезапустить микрокомпьютер командой:

sudo shutdown -r now

Давайте попробуем войти в интерфейс MajorDoMo. Для этого нужно перейти в браузер, и в адресной строке набрать ip вашего микрокомпьютера. В моем случае, я набрал 192.168.1.14.

После ввода ip адреса меня ждал сюрприз в виде сообщения об ошибке следующего содержания:

Помотав вниз я насчитал три таких ошибки, и связаны они похоже с базой данных. Под ошибками, в самом низу окна, я увидел нечто похожее на интерфейс MajorDoMo, через который мы можем войти в панель управления, нажав на кнопку Control Panel. Нажимаем на эту кнопку.

В панели управления нужно найти то место, где можно обновить систему. Для этого нажимаем на кнопочку System:

После нажатия у нас раскрывается список, в котором надо выбрать Check updates:

В открывшемся окне нажимаем на Update to the latest code. Галочку на чекбоксе рядом я не ставил и вам пока не советую (у меня после этого остановились все циклы и поднять я их не смог, пришлось переустанавливать все заново).

После обновления системы вы увидите надпись Updates Installed, и теперь можно попробовать перейти в основной интерфейс MajorDoMo, нажав на кнопку Front End.

Как видим, ошибок теперь нет. Вся система работает нормально, о чем нам сигнализируют зеленые значки (я их выделил красным овалом).

Теперь нам нужно настроить русский язык, выбрать временную зону и цветовое оформление. Проще всего это сделать, набрав в адресной строке браузера следующий адрес: ваш_ip/popup/first_start.html (в моем случае 192.168.1.14/popup/first_start.html). После ввода адреса мы попадаем на страницу первоначальной настройки.

Здесь я думаю все понятно. Выбираем свою временную зону, выбираем язык, выбираем тему (темную или светлую) и жмем Continue. Интерфейс у нас теперь стал на русском языке:

Но, через короткий промежуток времени, у меня остановились циклы (значок циклов стал красным).

Без циклов система работать не будет, вся ее работа завязана на циклы. Запускаем циклы снова через консоль:

sudo systemctl start majordomo

После этой команды циклы снова восстановились, но часто начали падать. Причем запускать их приходилось вручную вышеприведенной командой.

Для предотвращения остановки циклов, я сделал автоматический быстрый их перезапуск, если статус меняется на жёлтый или красный. Чтобы реализовать перезапуск, нам нужно создать сценарий и шаблон поведения. Давайте это сделаем.

До создания сценария и шаблона, нам необходимо создать файл restart.sh. Сделаем это в консоли, при помощи редактора Nano:

sudo nano /var/www/restart.sh

Введем в открывшийся файл следующие строки:

sudo systemctl restart majordomo

Сохраняем произведенные изменения комбинацией клавиш Ctrl+O, и выходим из редактора комбинацией Ctrl+X.

Теперь нам нужно выставить пользователя и группу на только что созданный файл restart.ch:

sudo chown www-data:www-data /var/www/restart.sh

sudo chmod 755 /var/www/restart.sh

Для того, чтобы этот файл (restart.sh) запускался от пользователя www-data с правами root нужно внести изменения в файл /etc/sudoers. Давайте откроем его в редакторе Nano:

sudo nano /etc/sudoers

перейдем в самый конец документа и вставим следующую строчку:

www-data ALL=(root) NOPASSWD: /var/www/restart.sh

Сохраним произведенные изменения комбинацией клавиш Ctrl+O, и выйдем из редактора комбинацией Ctrl+X.

Далее, нам нужно создать шаблон поведения и сценарий. Сначала мы создадим сценарий. Для этого переходим в панель управления MajorDoMo, нажимаем на кнопку Объекты , в раскрывшемся списке выбираем Сценарии, и в открывшемся окне нажимаем кнопку Добавить новый сценарий:

В открывшемся окне заполняем следующие данные. Названиеrestart_md. Категория — выбираем Режимы работы. Нажимаем кнопку Добавить.

После нажатия кнопки нам для заполнения открывается еще несколько полей. Выбираем КодРНР, и в открывшемся поле вводим следующие строчки:

echo shell_exec( ‘sudo /var/www/restart.sh’ );
say («Произошло падение системы, произвожу рестарт циклов!», 2);

и внизу страницы нажимаем кнопку Сохранить.

Далее мы создадим шаблон поведения. Для этого переходим в панель управления MajorDoMo, нажимаем на кнопку Объекты, в раскрывшемся списке выбираем Шаблоны поведения, и в открывшемся окне нажимаем кнопку Добавить новую запись:

В открывшемся окне вводим Название шаблона (я его назвал Автоматический перезапуск циклов при их остановке), оставляем отмеченным пункт Типа шаблонаНа основе сообщений, в поле приоритет выставляем значение 110 и нажимаем кнопку Добавить

После этого нам открывается для заполнения еще несколько полей. Ставим галочку в чекбоксе не проверять другие шаблоны при совпадении. В поле Шаблон прописываем: main цикл остановлен. Выбираем Сценарий в разделе Выполнить при совпадении, и в раскрывающемся списке выбираем ранее созданный сценарий restart_md. Далее, нажимаем Сохранить.

После всех проведенных манипуляций мы получаем рабочую систему умного дома Majordomo, которая автоматически восстанавливается в случае падения циклов.

Подключив наушники к микрокомпьютеру, я хотел послушать голосовые оповещения MajorDoMo (а он должен говорить), но ничего не услышал. Решением этой проблемы мы и займемся в следующей статье.

источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *