MajorDoMo — бесплатная платформа для создания умного дома, мощная и гибкая, поддерживающая самое разное оборудование. Платформа написана на PHP, работает через веб сервер и хранит данные на сервере MySQL. Все это подразумевает работу на выделенном сервере.
Первым делом поднял MajorDoMo на одноплатном компьютере Orange PI PC. Для запуска шлюзов с различными устройствами заказал изготовление платки шилда.
В стандартном образе MajorDoMo для Orane PI и Raspberry PI с целью уменьшения количества операций записи на карту памяти и увеличения времени ее жизни БД запускалась на RAMDISK с сохранением дампа на карту памяти раз в несколько минут.
Несколько месяцев эксплуатации выявило ряд проблем:
- Самое страшное — сбои питания. Теряются данные, теряются конфигурации. Пару раз таблицы базы данных были повреждены и БД завелась только с бэкапа.
- Регулярный бэкап и логгирование (включенные по умолчанию) очень быстро приводили к переполнению карточки памяти 16Гб
- Объем базы данных стремительно приближался к критическому в рамках RAMDISK, что постоянно требовало чистки исторических данных (пусть и готовыми скриптами), что на этапе отладке было не очень хорошо
- Несколько раз зависал сервис Mysensors MYSGW
Подключение внешнего жесткого диска сняло часть проблем. Но от сбоев по питанию спасло не до конца. К тому же пару раз видимо не хватило питания на внешнего и сервер уходил в зависание. Да и скорость по USB2 для жесткого диска — совсем не кайф. Уже почти собрал мощный БП с бесперебойником на 5В, но тут в руки попался старый ноутбук SAMSUNG NS110.
Характеристики — процессор Intel Atom N455 1.66Гц, память 2Гб DDR3, жесткий диск SATA 320Гб, встроенный Ethernet 100TX и WiFi и еще живая батарея, самое то для моих задач. Да и консоль для установки и настройки есть.
Загрузил Debian 9.5 Net Install образ на флэшку — LINUX встал с нее пол пинка. MajorDoMo установил при помощи инсталляционного скрипта. В конце скрипта только убрал настройку базы данных на RAMDISK
Mysensors Gateway
Собрал уже довольно много устройств Mysensors на NRF24L01. Если Orange Pi PC позволял подключать NRF24 через SPI интерфейс напрямую, то для нетбука пришлось собирать Mesensors Serial Gateway из Arduino NANO
- Arduino Nano с CH340 USB — $2
- Или Arduino Nano Atmega168 — $1.89 (вполне хватает для данной задачи)
- Модуль NRF24L01 с усилителем сигнала и внешней антенной — $1.88
Кроме собственно Arduino NANO и NRF24L01 в схему добавлены три светодиода, которые обрабатываются библиотекой MySensors — RX, TX и ERROR
На проводах собирать устройства, тем более выполняющие серверную роль — некошерно, поэтому делаю платку:
И раз уж есть 3Д-принтер — корпус
Беру готовый скетч GatewaySerial из проекта Mysensors
Прописываю настройки для своей платы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
// Оставить, если нужно мониторить какие то проблемы // В рабочей версии шлюза закомментарить #define MY_DEBUG // Выбор радио модуля #define MY_RADIO_RF24 //#define MY_RADIO_NRF5_ESB //#define MY_RADIO_RFM69 //#define MY_RADIO_RFM95 #define MY_RF24_PA_LEVEL RF24_PA_HIGH #define MY_NODE_ID 0 #define MY_RF24_CE_PIN 9 #define MY_RF24_CS_PIN 10 // Enable serial gateway #define MY_GATEWAY_SERIAL // Enable inclusion mode #define MY_INCLUSION_MODE_FEATURE // Enable Inclusion mode button on gateway //#define MY_INCLUSION_BUTTON_FEATURE // Inverses behavior of inclusion button (if using external pullup) //#define MY_INCLUSION_BUTTON_EXTERNAL_PULLUP // Set inclusion mode duration (in seconds) #define MY_INCLUSION_MODE_DURATION 60 // Digital pin used for inclusion mode button //#define MY_INCLUSION_MODE_BUTTON_PIN 3 // Set blinking period #define MY_DEFAULT_LED_BLINK_PERIOD 300 // Inverses the behavior of leds #define MY_WITH_LEDS_BLINKING_INVERSE // Flash leds on rx/tx/err // Uncomment to override default HW configurations #define MY_DEFAULT_ERR_LED_PIN 3 // Error led pin #define MY_DEFAULT_RX_LED_PIN 4 // Receive led pin #define MY_DEFAULT_TX_LED_PIN 5 // the PCB, on board LED |
Теперь подключаем наше устройство к USB нетбука
Команда dmesg показывает, что найден CH341 USB serial converter и что ему назначено устройство виртуального терминала /dev/ttyUSB0
В настройках MajorDoMo осталось установить модуль Mysensors в маркете приложений (если еще не установлен) и прописать его настройки. Если все нормально и цикл запустился, то по мере опроса начнут появляться узлы Mysensors, с которыми можно уже работать в системе MajorDoMo
Возможные проблемы
В SerialMonitor при включенном #MY_DEBUG идет ошибка инициализации
Данная проблем возникает из за неправильно подключения NRF24L01 или неисправном радиомодуле
Цикл опроса Mysensors в MajorDoMo не запускается
Скорее всего отсутствует устройство /dev/ttyUSB0 в системе, либо у WEB-сервера нету прав на работу с этим устройством
В данном случае нужно добавить пользователю www-data группы dialout
Список устройств пуст, хотя устройства Mysensors активно работают
Вероятнее всего нет соответствия скорости канала или скорости обмена NRF24L01
В этом случае нужно проверить соответствие данных параметрах на всех устройствах
1 2 3 |
#define MY_RF24_CHANNEL (76) #define MY_RF24_DATARATE (RF24_250KBPS) |
Большое человеческое Спасибо !!! 2 недели пытался побороть usb-шлюз для Majordomo на Апельсине. Ваша статья решила прблему. Простой язык, доступная подача. Удачи !!!
Спасибо за материал. Вопрос: если я развернул Majordomo под Windows, будет ли работать гейт Mysensors?
Serial Gateway нужно пробовать. Сетевой и MQTT точно будут, так как они аппаратно не зависимы
Спасибо, понял.
Добрый день! все сделал по вашей инструкции, к сожалению ничего нее получилось! в модуле mysensors все настройки прописал, но цикл не запускается OFFLINE! подскажите в чем может быть причина? За ранее благодарен! Orange pi pc ОС Dietpi
Проверьте правильность написания COM-порта (что такое устройство есть в системе) и права на него процессу MajorDoMo
Я прошу прощение, но я не силён в Linux , вы не могли бы подробней описать действия с выполнением команд? За ранее благодарен!
На команду dmesg, отвечает так же как и у вас
[46026.933078] usb 8-1: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[46026.933090] usb 8-1: Product: USB2.0-Serial
[46026.984657] usbcore: registered new interface driver usbserial_generic
[46026.984754] usbserial: USB Serial support registered for generic
[46026.988811] usbcore: registered new interface driver ch341
[46026.988950] usbserial: USB Serial support registered for ch341-uart
[46026.989106] ch341 8-1:1.0: ch341-uart converter detected
[46027.005405] usb 8-1: ch341-uart converter now attached to ttyUSB0
root@md:~# ls -l /dev/ttyUSB0
crw-rw—- 1 root dialout 188, 0 Oct 5 19:37 /dev/ttyUSB0
root@md:~#
root@md:~# ps -ef | grep http | grep -v grep
www-data 572 1 0 06:51 ? 00:00:00 /usr/bin/vlc -I http —http-password=12345 —http-port 7070
Использовал команду useradd -G dialout www-data и ничего не изменилось(В данном случае нужно добавить пользователю www-data группы dialout)
Поставьте webmin если сложно разбираться с командной строкой.
Алексей, добрый день! Пользователь www-data добавлен в группу, serial port в windows определяется как com-порт, вроде бы все сделал, но модуль mysensors все равно в offline! подскажите, что не так? и как дать права на него процессу MajorDoMo?
С этим вопросом разобрался)