RSS блога
Подписка
Контроллер ESP8266. Управляем освещением и смотрим температуру посредством Telegram-бота, который хостится на Android телефоне с помощью Node-RED.
- Цена: 120 руб за ESP8266 и ненужный Android смартфон
- Перейти в магазин
В статье описывается вариант подачи как дискретных, так и ШИМ сигналов, исполнителем которых является плата на контроллере ESP8266, а посредником — Android телефон с доступом в Интернет и с установленной системой визуального потокового программирования Node-RED и MQTT-брокером mosquitto. Аналогично будет продемонстрирован вывод показаний температуры по запросу из Телеграм с помощью датчика ds18b20. Также будет показана возможность сохранения ресурса аккумулятора при постоянно подключенном зарядном устройстве через недозаряд при помощи linux-скрипта ACC.
Обладателям старых Android-смартфонов и газовых котлов на даче посвящается!
На данный момент, существует три наиболее легких способа получить контроль над Arduino-устройством через интернет:
1. Blynk — недостатки в ограниченном количестве контролируемых выводов в бесплатной версии, зависимость от чужого облака. В старой версии приложения можно было делать неограниченное количество контролируемых выводов, но эта версия приложения больше не поддерживается.
2. Arduino cloud — аналогично, ограниченное количество контролируемых выводов в бесплатной версии, зависимость от чужого облака.
3. Node-RED Богатый функционал при бесплатности. Возможность организовать на «белом» IP доступ к выстроенной панели управления приборами из любой точки земли, либо настроить общение через Telegram-бота. Встраивается в системы управления умным домом, например Home assistant, но и сама по себе представляет широкие возможности для построения автоматизации различной сложности.
Следует отметить, что автоматизация на Node-RED уже затрагивалась на данном ресурсе — №1, №2, что говорит об универсальности данной системы программирования.
Мы же будем действовать по такой схеме (чертил в diagrams.net, рекомендую):
Приложение Telegram на компьютере или смартфоне через бота отправляет команду (через меню команд, глобальную клавиатуру или клавиатуру под сообщением). Команда доходит до Node-RED, хостящейся на смартфоне под управлением Android с установленным приложением Termux (на котором поднят Node.js). Далее специальный модуль node-red-contrib-telegrambot обрабатывает полученную команду, интерпретирует ее в команды топиков MQTT, брокер которого тоже хостится на Android-телефоне посредством Termux. Платы контроллеров с wi-fi со специально адаптированной прошивкой (с подписками на соответствующие топики) следят за изменением событий на подписанных топиках и при изменении посылают сигнал на дискретные выходы.
Как видно, при этом мы вольны как угодно распоряжаться балансом сложности логики контроллер-потоки Node-RED и в зависимости от задачи оставлять сложную логику на стороне контроллера или водружать ее на плечи Node-RED.
Видео демонстрирует возможность как дискретного управления 6 светодиодами, так и пропорционального управления ими же, с шагом 25% (чтобы не усложнять логику работы с двумя клавиатурами бота телеграм). А также позволяет запрашивать текущую температуру с датчика ds18b20.
Чтобы организовать всю эту систему нам нужно:
1. Выбрать сервер под Node-RED и mosquitto. Сервером будет служить смартфон под управлением Android версии не ниже 7.
2. Установить на сервер приложение Termux.
3. В Termuxe поднять node.js, установить зависимости для Node-RED и установить саму Node-RED. Установить брокер MQTT mosquitto.
4. Написать логику работы с Телеграм-ботом в Node-RED.
5. Написать прошивку под вышеозначенную логику для wi-fi-контроллеров.
6. Разобраться с деградацией аккумулятора телефона-сервера при постоянно подключенном к сети состоянием посредством скрипта ACC.
Автор уверен, что в современном хозяйстве с большой долей вероятности найдется ненужный Android-телефон, в котором уже имеется Nand-памят и встроенный ИБП в виде аккумулятора. Даже если версия системы будет меньше 7, то на известном ресурсе наверняка найдется ветка с достаточным количеством актуальных прошивок. Для наших нужд достаточно будет от 1.5ГБ ОЗУ (думаю, даже с 1ГБ все заведется).
У меня основным сервером служит Jiayu S3 без физического экрана. Будучи один раз настроенным на отладку по USB в заранее сохраненную виртуальную машину, я, при необходимости увидеть рабочий стол телефона, подключаюсь к нему через программу Scrcpy. Но 99% времени я взаимодействую с сервером через командную строку по SSH.
Внимание, версия из Google Play не поддерживается и не рекомендуется к установке!
Чтобы не мучиться с неудобной клавиатурой смартфона, предлагаю законнектиться к телефону по SSH и с компьютера комфортно вводить команды через копипаст. Для этого надо установить OpenSSH и задать пароль.
Запускаем Termux и в нем проделываем последовательность команд
При первом соединении через командную строку вас попросят подтвердить соединение, на что мы должны вбить yes и дальше можно работать через компьютер. Также можно соединяться по SFTP через программу WinSCP для передачи файлов.
А если вы установите
Начинаем подготовку зависимостей для Node-RED.
Сохраняемся. Вводим в терминале
После перезагрузки в менеджере процессов по команде top должен быть Node-RED.
У данной статьи нет цели описывать органы управления редактора Node-RED, поэтому я буду лишь направлять читателя, давая определенную последовательность действий, ведущую к результату. Подробнее ознакомиться с тонкостями Node-RED можно в русскоязычной Wiki.
Сначала нам нужно установить модуль node-red-contrib-telegrambot. Для этого в правом верхнем углу щелкаем на «гамбургер» и жмем «Manage palette» (alt + p), выбираем «Install» и вводим node-red-contrib-telegrambot, жмем «Install». Если Node-RED просит перезапуститься, чтобы модуль заработал, то перезапускаемся.
Для получения ChatID своего бота cоздаем следующую конструкцию из нод, находящихся в левой части редактора. Это простейший бот, возвращающий отосланное сообщение.
Два быстрых клика на ноде «Telegram receiver» и перед нами окно создания нового бота. Нажимаем на карандаш, вводим имя бота и наш токен. Нажимаем на Done. И применяем изменения по кнопке Deploy в правом верхнем углу
Теперь идем в приложение Телеграм, вписываем в поиск юзернейм бота (заканчивающийся на bot) и вступаем с ним в диалог. Достаточно написать туда «Привет». Бот вернет это сообщение.
А в правой части редактора на вкладке «Debug» будет отображен Payload нашего сообщения (т.к. на выход мы подключили отладочную ноду). Запишем из него chatId.
Далее нам нужно импортировать мой поток (Flow), где я разместил логику работы Телеграм-бота (берем на Pastebin). Жмем на «гамбургер» и выбираем «Import» (ctrl + i). Вставляем мой JSON и после импорта в редакторе должна появиться вкладка Telegram LEDs с настроенным потоком:
Заметьте, что фильтр потока яркости лампы я сделал двумя способами — с функциональной нодой и на стандартных нодах. Первый вариант информативнее, но занимает больше места в редакторе. Сочетание данных стилей позволяет сделать ваши потоки по-настоящему простыми в восприятии.
Перенастраиваем все Telegram-ноды на своего бота. Для этого при двойном клике на соответствующей ноде выбираем свого бота. А также во всех функциональых нодах «Sent to TG light number» в chatId нужно вставить свой chatId. В розовых нодах MQTT нужно поменять IP на IP смартфона. Не забываем задеплоить изменения.
Для этого в BotFather набираем /setcommands выбираем своего бота и задаем список команд с описанием в соответствии с синтаксисом. Например:
После запуска программы настраиваем подключение в соответствии с IP нашего MQTT-сервера.
И после соединения мы уже будем видеть активный топик $SYS. Если сейчас послать в диалог нашего бота команду /temp то появится топик Temp с сообщением Request=Yes. Аналогично и с другими командами.
Осталось настроить микроконтроллер так, чтобы он реагировал на изменения в соответствующих топиках.
Прикрепляю код на Pastebin. Для его работы нужны библиотеки DallasTemperature by Miles Burton, OneWire by Paul Stoffregen и, собственно, сам PubSubClient. Отмечу, что чтобы функционально реализовать работу с ШИМ, мне потребовалось вынести обработку входящих данных из функции callback в основной цикл. Обратите внимание на пины, к которым подключены ds18b20 и светодиоды.
1. Постоянное нахождение в режиме 100% заряженности, что вредно для Li-ion аккумуляторов.
2. Если контроллер заряда телефона не поддерживает прямую поставку тока к потребителю, в обход аккумулятора при достижении 100% зарядки аккумулятора, то он будет находиться в постоянном цикле заряд-микроразряд. Что также вредно.
Для решения эти проблем существует скрипт ACC. Внимание, для его работы нужны root-права! Вот статистика работы аккумулятора моего смартфона с этим скриптом за 20 дней.
Как видно, за этот период батарея ни разу не заряжалась полностью. А если бы не такой большой промежуток, можно было бы увидеть «пилу» между зарядом от 60%, ниже которого при подключенной зарядке телефон не разряжается, и до 70%, после которого идет разряд при подключенном зарядном устройстве.
Скрипт устанавливается как модуль Magisk и после перезагрузки запускается сам. Существует android приложение ACCA, позволяющее наглядно управлять параметрами скрипта.
Обладателям старых Android-смартфонов и газовых котлов на даче посвящается!
Введение
Моя задача на данную статью — показать лишь базовые возможности организации дискретного и ШИМ управления через Telegram-бота, иначе бы текст получился слишком раздутый.На данный момент, существует три наиболее легких способа получить контроль над Arduino-устройством через интернет:
1. Blynk — недостатки в ограниченном количестве контролируемых выводов в бесплатной версии, зависимость от чужого облака. В старой версии приложения можно было делать неограниченное количество контролируемых выводов, но эта версия приложения больше не поддерживается.
2. Arduino cloud — аналогично, ограниченное количество контролируемых выводов в бесплатной версии, зависимость от чужого облака.
3. Node-RED Богатый функционал при бесплатности. Возможность организовать на «белом» IP доступ к выстроенной панели управления приборами из любой точки земли, либо настроить общение через Telegram-бота. Встраивается в системы управления умным домом, например Home assistant, но и сама по себе представляет широкие возможности для построения автоматизации различной сложности.
Следует отметить, что автоматизация на Node-RED уже затрагивалась на данном ресурсе — №1, №2, что говорит об универсальности данной системы программирования.
Мы же будем действовать по такой схеме (чертил в diagrams.net, рекомендую):
Приложение Telegram на компьютере или смартфоне через бота отправляет команду (через меню команд, глобальную клавиатуру или клавиатуру под сообщением). Команда доходит до Node-RED, хостящейся на смартфоне под управлением Android с установленным приложением Termux (на котором поднят Node.js). Далее специальный модуль node-red-contrib-telegrambot обрабатывает полученную команду, интерпретирует ее в команды топиков MQTT, брокер которого тоже хостится на Android-телефоне посредством Termux. Платы контроллеров с wi-fi со специально адаптированной прошивкой (с подписками на соответствующие топики) следят за изменением событий на подписанных топиках и при изменении посылают сигнал на дискретные выходы.
Как видно, при этом мы вольны как угодно распоряжаться балансом сложности логики контроллер-потоки Node-RED и в зависимости от задачи оставлять сложную логику на стороне контроллера или водружать ее на плечи Node-RED.
Видео демонстрирует возможность как дискретного управления 6 светодиодами, так и пропорционального управления ими же, с шагом 25% (чтобы не усложнять логику работы с двумя клавиатурами бота телеграм). А также позволяет запрашивать текущую температуру с датчика ds18b20.
Чтобы организовать всю эту систему нам нужно:
1. Выбрать сервер под Node-RED и mosquitto. Сервером будет служить смартфон под управлением Android версии не ниже 7.
2. Установить на сервер приложение Termux.
3. В Termuxe поднять node.js, установить зависимости для Node-RED и установить саму Node-RED. Установить брокер MQTT mosquitto.
4. Написать логику работы с Телеграм-ботом в Node-RED.
5. Написать прошивку под вышеозначенную логику для wi-fi-контроллеров.
6. Разобраться с деградацией аккумулятора телефона-сервера при постоянно подключенном к сети состоянием посредством скрипта ACC.
1. Выбор сервера
Для систем домашней автоматизации принято использовать одноплатные компьютеры, например: orange pi, banana pi. Однако, в базовой комплектации они хранят свои данные на простой microSD, которая исчерпывает свой срок службы не столько за сравнительно короткое время (от полугода до года), но вдобавок еще и умирает внезапно, что несет определенные риски. Конечно, можно настроить ОС на минимацию записи на диск, но при наличии активной БД, все равно результат будет плачевным. Выходом может служить покупка nand-модуля памяти, но тогда и так не бюджетная система еще сильнее оттягивает карман. А ведь к ней нужно еще докупать ИБП модуль с аккумуляторами.Автор уверен, что в современном хозяйстве с большой долей вероятности найдется ненужный Android-телефон, в котором уже имеется Nand-памят и встроенный ИБП в виде аккумулятора. Даже если версия системы будет меньше 7, то на известном ресурсе наверняка найдется ветка с достаточным количеством актуальных прошивок. Для наших нужд достаточно будет от 1.5ГБ ОЗУ (думаю, даже с 1ГБ все заведется).
У меня основным сервером служит Jiayu S3 без физического экрана. Будучи один раз настроенным на отладку по USB в заранее сохраненную виртуальную машину, я, при необходимости увидеть рабочий стол телефона, подключаюсь к нему через программу Scrcpy. Но 99% времени я взаимодействую с сервером через командную строку по SSH.
2. Установка Termux
Последнюю версию данного приложения можно скачать непосредственно со страницы релизов на GitHub либо установить магазин приложений Fdroid и уже оттуда установить Termux.Внимание, версия из Google Play не поддерживается и не рекомендуется к установке!
3. Поднимаем Node-RED в Termux
Если не собираетесь поднимать Node-RED на смартфоне, можно сразу переходить к п.4.Чтобы не мучиться с неудобной клавиатурой смартфона, предлагаю законнектиться к телефону по SSH и с компьютера комфортно вводить команды через копипаст. Для этого надо установить OpenSSH и задать пароль.
Запускаем Termux и в нем проделываем последовательность команд
Устанавливаем NodeRED в Termux
pkg update
В случае запроса, чей пакет ставить — нажимает Y, т.е. пакет мейнтейнера.pkg install openssh
passwd
Задаем пароль, запускаем сервер SSH командойsshd
и уже с компьютера (который находится в одной сети с телефоном) вводимssh -p 8022 x.x.x.x
Где x.x.x.x ваш IP, который можно узнать через команду ifconfig (секция wlan0).При первом соединении через командную строку вас попросят подтвердить соединение, на что мы должны вбить yes и дальше можно работать через компьютер. Также можно соединяться по SFTP через программу WinSCP для передачи файлов.
А если вы установите
pkg install termux-api
И выполните в консолиtermux-setup-storage
Затем подтвердите на смартфоне запрос на доступ к файловой системе, то в домашней папке Termux будете иметь смонтированную домашнюю директорию Android. Кстати, на скрине Termux с настроенной оболочкой zsh и темой PowerLevel10K. Здесь написано, как все это настроить.Начинаем подготовку зависимостей для Node-RED.
pkg update
pkg install nodejs-lts build-essential binutils-is-llvm python
npm i -g --unsafe-perm node-red
termux-fix-shebang $(which node-red)
Теперь установим mosquitto.pkg install mosquitto
Настроим mosquitto. Для этого создадим отдельный файл конфигурации и в нем запишем параметры мониторинга порта и разрешим анонимный вход. В домашней директории делаем:nano .mosquitto.conf
добавляем в файлlistener 1883
allow_anonymous true
Настроим автозапуск. Для этого из магазина F-Droid нужно скачать приложение Termux:Boot и единоразово запустить его. Далее cd .termux
mkdir boot
cd boot
nano start.sh
После чего попадаем в пустой только созданный файл, в котором вводим #!/data/data/com.termux/files/usr/bin/sh
termux-wake-lock
sshd & mosquitto -c /data/data/com.termux/files/home/.mosquitto.conf & node-red
Внимание! После апгрейда Node-RED на новую версию, нужно сделать termux-fix-shebang $(which node-red)
один раз, иначе автозагрузка Node-RED не будет работать.Сохраняемся. Вводим в терминале
termux-wake-lock
На смартфоне должно высветиться предложение не ограничивать работу приложения Termux в фоне. Соглашаемся. После перезагрузки в менеджере процессов по команде top должен быть Node-RED.
Настраиваем красивый терминал в Termux c oh-my-zsh
1) Устанавливаем необходимые пакеты:
3) Устанавливаем плагины zsh-syntax-highlighting, zsh-autosuggestions
5) Конфигурируем powerlevel10k, для перезапускаем оболочку и при первом запуске с новой темой, она нам предложит удобный пошаговый мастер настройки powerlevel10k:
pkg update
pkg install curl git zsh mc
2) Качаем и инсталлим oh-my-zshsh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
На запрос сделать ли zsh оболочкой по-умолчанию даем утвердительный ответ.3) Устанавливаем плагины zsh-syntax-highlighting, zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git $ZSH_CUSTOM/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions
И прописываем в файле ~/.zshrc дописываем в строку с plugins=: названия наших плагинов. Это удобно делать, запустив либо редактор nano, либо в mc.plugins=(git zsh-syntax-highlighting zsh-autosuggestions)
4) Устанавливаем тему PowerLevel10K (необходимые шрифты в Termux она установит автоматически):git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
И подключаем тему, редактируя файл ~/.zshrc на предмет ZSH_THEME=«powerlevel10k/powerlevel10k».5) Конфигурируем powerlevel10k, для перезапускаем оболочку и при первом запуске с новой темой, она нам предложит удобный пошаговый мастер настройки powerlevel10k:
zsh
При желании всегда можно запустить повторную конфигурацию темы powerlevel10k, запустив в терминале:p10k configure
4. Работа в Node-RED.
Мы уже научились узнавать IP сервера по ifconfig (секция wlan0). Соответственно в браузере компьютера, находящегося в одной сети со смартфоном, вводимhttp://x.x.x.x:1880/
Видим приветственное сообщение и после него редактор Node-REDУ данной статьи нет цели описывать органы управления редактора Node-RED, поэтому я буду лишь направлять читателя, давая определенную последовательность действий, ведущую к результату. Подробнее ознакомиться с тонкостями Node-RED можно в русскоязычной Wiki.
Сначала нам нужно установить модуль node-red-contrib-telegrambot. Для этого в правом верхнем углу щелкаем на «гамбургер» и жмем «Manage palette» (alt + p), выбираем «Install» и вводим node-red-contrib-telegrambot, жмем «Install». Если Node-RED просит перезапуститься, чтобы модуль заработал, то перезапускаемся.
4.1 Создание и настройка бота Телеграм
Теперь наша задача создать своего Телеграм-бота, получить его токен и Chat-ID диалога с ботом, а далее внести эти данные в поток. Переходим в https://t.me/botfather, в меню выбираем /newbot, задаем имя бота, юзернейм, заканчивающийся на «bot» и получаем в ответном сообщении токенДля получения ChatID своего бота cоздаем следующую конструкцию из нод, находящихся в левой части редактора. Это простейший бот, возвращающий отосланное сообщение.
Два быстрых клика на ноде «Telegram receiver» и перед нами окно создания нового бота. Нажимаем на карандаш, вводим имя бота и наш токен. Нажимаем на Done. И применяем изменения по кнопке Deploy в правом верхнем углу
Теперь идем в приложение Телеграм, вписываем в поиск юзернейм бота (заканчивающийся на bot) и вступаем с ним в диалог. Достаточно написать туда «Привет». Бот вернет это сообщение.
А в правой части редактора на вкладке «Debug» будет отображен Payload нашего сообщения (т.к. на выход мы подключили отладочную ноду). Запишем из него chatId.
Далее нам нужно импортировать мой поток (Flow), где я разместил логику работы Телеграм-бота (берем на Pastebin). Жмем на «гамбургер» и выбираем «Import» (ctrl + i). Вставляем мой JSON и после импорта в редакторе должна появиться вкладка Telegram LEDs с настроенным потоком:
Заметьте, что фильтр потока яркости лампы я сделал двумя способами — с функциональной нодой и на стандартных нодах. Первый вариант информативнее, но занимает больше места в редакторе. Сочетание данных стилей позволяет сделать ваши потоки по-настоящему простыми в восприятии.
Перенастраиваем все Telegram-ноды на своего бота. Для этого при двойном клике на соответствующей ноде выбираем свого бота. А также во всех функциональых нодах «Sent to TG light number» в chatId нужно вставить свой chatId. В розовых нодах MQTT нужно поменять IP на IP смартфона. Не забываем задеплоить изменения.
4.2 Создание набора команд в меню Telegram
Удобно иметь наглядное представление набора доступных команд в едином меню.Для этого в BotFather набираем /setcommands выбираем своего бота и задаем список команд с описанием в соответствии с синтаксисом. Например:
temp - Температура ds18b20
leds - Выбор светодиодов
red - 5 степеней ШИМ красного LED
green1 - 5 степеней ШИМ зеленого LED1
4.3 Поток считывания температуры с ds18b20
Делаем уже знакомую нам операцию импортирования потока (берем на Pastebin). Настраиваем ноды Telegram, MQTT и в функциональной ноде записываем свой chatId.4.4 Мониторим сообщения в MQTT-топиках
Уже сейчас мы можем посмотреть первые результаты работы. Для этого нам нужен MQTT-клиент. Рекомендую MQTT Explorer. Им мы будем мониторить изменения в наших топиках.После запуска программы настраиваем подключение в соответствии с IP нашего MQTT-сервера.
И после соединения мы уже будем видеть активный топик $SYS. Если сейчас послать в диалог нашего бота команду /temp то появится топик Temp с сообщением Request=Yes. Аналогично и с другими командами.
Осталось настроить микроконтроллер так, чтобы он реагировал на изменения в соответствующих топиках.
5. Написание прошивки для Wi-Fi микроконтроллера
Для Arduino есть несколько библиотек, реализующих протокол MQTT. Мы остановимся на PubSubClient, как наиболее популярной и имеющей подробную документацию. Примеры ее использования есть в поставляемой документации, а также на замечательном сайте Стива.Прикрепляю код на Pastebin. Для его работы нужны библиотеки DallasTemperature by Miles Burton, OneWire by Paul Stoffregen и, собственно, сам PubSubClient. Отмечу, что чтобы функционально реализовать работу с ШИМ, мне потребовалось вынести обработку входящих данных из функции callback в основной цикл. Обратите внимание на пины, к которым подключены ds18b20 и светодиоды.
6. Скрипт ACC продляет жизнь аккумулятору при постоянно подключенной зарядке
Работа смартфона в серверном режиме предполагает постоянное подключение к сетевой зарядке. Есть несколько факторов, приводящих к ускоренной деградации аккумулятора в таком режиме.1. Постоянное нахождение в режиме 100% заряженности, что вредно для Li-ion аккумуляторов.
2. Если контроллер заряда телефона не поддерживает прямую поставку тока к потребителю, в обход аккумулятора при достижении 100% зарядки аккумулятора, то он будет находиться в постоянном цикле заряд-микроразряд. Что также вредно.
Для решения эти проблем существует скрипт ACC. Внимание, для его работы нужны root-права! Вот статистика работы аккумулятора моего смартфона с этим скриптом за 20 дней.
Как видно, за этот период батарея ни разу не заряжалась полностью. А если бы не такой большой промежуток, можно было бы увидеть «пилу» между зарядом от 60%, ниже которого при подключенной зарядке телефон не разряжается, и до 70%, после которого идет разряд при подключенном зарядном устройстве.
Скрипт устанавливается как модуль Magisk и после перезагрузки запускается сам. Существует android приложение ACCA, позволяющее наглядно управлять параметрами скрипта.
Заключение
Я писал это, чтобы в дальнейших статьях, где описывается более сложная автоматизация на основе NodeRED, ссылаться на уже готовый гайд. Рекомендую группу в телеграме, где вы можете получить консультацию по этой системе программирования. И желаю удачи в освоении программирования в разных его ипостасях!
Самые обсуждаемые обзоры
+73 |
3651
145
|
+53 |
3820
69
|
+34 |
2897
55
|
Три смарта валяются. Пользоваться на постоянку уже старенькие 512 мб, 2 гиг, 4 гиг оперативки а вот присобачить к чему-нибудь еще вполне.
Тот же Termux требует минимум 7 андроид. Да и вообще, 95% приложений хотят не ниже 7 андроида. Ещё год-полтора и будут хотеть восьмёрку. Даже приличное mqtt приложение не поставить.
С помощью Node-RED я решил все задачи автоматизации не зная программирование.
В красной ноде я использую без единой строчки кода, ну иногда буквально 5-10 строк кода:
— нода onvif
— нода hikvision
— нода для командной строки
— ноды для обработки изображений.
И вополняются такие задачи:
Одна камера с широким углом обзора, умная, выдаёт по протоколу isapi координаты объекта (человек, транспорт)
Вторая камера ptz — по протоколу onvif заставляю её вертеться туда, где обнаружен объект первой камерой.
Нода обработки изображений вырезает из снапшотов из камеры тот участок кадра, где обнаружен объект, подписывает его текстом.
На этом же докер контейнере стоит консольный ffmpeg, нода шлёт команду, ffmpeg и он из нескольких снапшотов собирает gif. Эту гифку отправляю в мессенжер. Это контроль огорода.
А на улице тоже самое, но с использованием jetson nano + Deepstack, купленным в
довоенныедоспецоперационные времена на али за 4800р. Тоесть ещё и фейсы распознаются.И всё это я замутил на Node-RED за три-четыре вечера, причём именно так, как хочу, как надо. И нет никаких «неполучилось». Страшно подумать, как это всё можно реализовать на каком-нибудь питоне или c++, сколько лет и нервов потратил бы. И это малая доля, у меня вообще 4 контейнера с нодами, на каждой свои кучи автоматизации.
И главное, когда захожу через год в Node-RED, всё понимаю, что к чему. А когда взгляну на код, даже ардуиновский, через месяц, не могу понять, что там сам накодил.
В общем теперь я не пишу на темы, в которых не разбираюсь на 100%. Да и вообще не пишу, времени нет.
Знаете, какая боль потом смотреть на такой код? А пытаться его использовать в своих проектах? Приведу конкретный пример — датчик температуры/влажности DHT22. Его считывание занимает порядка 5 мс (или даже больше). Код для ардуино (по крайней мере тот, что я находил несколько лет назад) запрещает прерывания и читает всё в цикле. И все работает, просто и без кучи знаний (как вы написали).
Но у меня был проект (тоже в ардуино!), где на прерываниях реализована динамическая индикация, частота прерываний — 25 КГц (или что-то такое). Если я запрещу прерывания, экранчик будет некрасиво мигать при опросе датчика. Если я не запрещу — опрос не работает, т.к. тайминги нарушаются. В итоге, пришлось писать свой код.
А это уже другое дело. Если не нравится реализация — хотя бы надо объяснить, почему не нравится и что можно улучшить, да и как вообще это лучше сделать, потому что человек может просто не знать, что можно время считать с помощью таймера и т.д.
А меня нет на том форуме :)
Я вот только одного не понимаю, вы жалуетесь на то, что там все такие токсичные, лают как дворняжки, но сами-то так же делаете — от каждого вашего предложения негативом веет. Как будто вас сотни лет угнетали, как афроамериканцев, и вот теперь настал момент, когда об этом нужно кричать.
Вы поймите, что выставляя любой проект в общественный доступ, вы автоматически должны быть готовы к критике. И это нормально, люди разные — кому-то не понравится, кто-то мимо пройдет, а кто-то и оценит, у каждого свое мнение. Если вы считаете, что приносите пользу, ориентируйтесь только на последних. Ну и критика разная бывает — к конструктивной надо прислушиваться, неконструктивную мимо пропускать. Как-то так.
Не, потом, спустя какое-то время, я научился собирать контейнеры сам с помощью Портейнера.
А логика… Все 100% нужных мне действий я содрал. Потому что это есть в примерах к ноде от автора ноды, плюс на форуме Node-RED можно найти уже готовые решения много чего. Дольше всего возился с пробросом хранилища, чтоб данные не в контейнере хранились, и с подбором консольной команды для ffmpeg.
PS погуглил цены на джетсон нано — офигел
Deepstack съедает изображение (снапшот с камеры) и через 0.1-0.15 сек выдаёт резолюцию по изображению в виде .xml, что там обнаружено, сколько, где(координаты)…
Это всё, что я знаю. И меня это вполне устраивает. А что там внутри этого Deepstack я не знаю. Может питон, может удав, а может и вообще гадюка.
Но, насколько знаю, проект открыт, можете посмотреть исходники на гите.
Да. Первый я взял за 8500 на авито, 4G. А второй за 5500 на али, 2G, и потом кусал локти, потому что прямо через неделю цена упала до 4800.
А потом санкции… и плюсом Nvidia объявила, что прекращает развитие и поддержку платформы Nano. И настал пипец. Да что там, мне микротик потребовался, hex. Я его брал в dns да 4200. Месяц назад он 22000 стоил. Сейчас появились на Али за 5700.
У меня похожая на вашу хотелка, я хочу знать, кто подходит к воротам и калитке на даче и как часто.
Плюс поставил с удовольствием. Было интересно. Думаю, что многие меня поддержат, ведь это стимулирует авторов писать больше познавательных интересных статей.
Но что касается меня лично — я слишком стар для всего этого
рутования смартфонов и телеграм-ботов.Поставил копеечную ардуину, подключил к ней копеечную SIM800.
Ардуина принимает от меня и отправляет мне смски. Читает с пинов/дёргает ногами. Заодно в эфир через HC-12 плюёт другим моим модулям по участку, если я в смске попрошу. Чего ж ещё-то надо…
*Да, автоматическое включение телефона/планшета
Или вы имели в виду автоматическое включение устройства?
Или городить устройство внешнего запуска, например на ардуинке и подпаиваться к кнопке.
навернов программном коде телефона что нибудь нашаманить. Как вариант можно использовать андроид магнитолы, те сразу начинают включатся при подаче питания, но это не в компетенции данного топика, да и своих тараканов в данном типе устройств не мало.ЗЫ Топик на 4пда с подобным обсуждением. Актуальность решений конечно же не проверял ибо нет необходимости.
Статья, как я уже писал, вводная, я планирую еще по теме, постепенно усложняя контент.
Вот купил я себе ESP8266, а что дальше? Его же надо как-то запитать, прошить, сконектить, докупить какие-то шлейфы, датчики. Для меня это темный лес…
Думаю пост был бы интересен многим, если бы был описан весь процесс, начиная с настройки железа.
Плюсанул авансом. Ждем приквел…
Приквелу быть )
А с точки зрения удобства разработки VS Code удобней среды ардуино, как вы и написали — не знаю, какая там вторая версия (не успел посмотреть), но в первой даже intellisense (или чего-то похожего) не было. Писать на ней в 21-м году было просто болью.
Тем более, если потом потребуется переходить на более продвинутые платы/МК, лучше сразу начинать в платформио.
Табуретку можно собрать имея доски, пилу, молоток и гвозди. Да, если добавить рубанок, шлифмашинку, саморезы, краску, то можно собрать шикарный стул. Но нам не надо стул, мы не хотим тратить время на обучение работать с рубанком, с краской, с шлифмашиной. Я прекрасно знаю, что стул лучше, но табуретка выполняет всё, что мне необходимо, и при этом не забирает лишнее время. Я предпочту покататься на велосипеде, посмотреть киношку, потусить с друзьями..., чем трать время на обучение работы с инструментом, который мне не нужен, каким бы там хорошим он небыл. И так в любой области, в кулинарии, в электрике, в строительстве… Каждому своё.
Понятно теперь за ардуинщиков?
А теперь по теме. Во-первых, почему вы говорите за всех ардуинщиков?
Во-вторых, вы категорически не понимаете, что такое ардуино, ардуино IDE и платформио (и ваше следующее сообщение это еще раз подтверждает). Но при этом, гонора и уверенности в своих словах у вас хоть отбавляй. Я рекомендую вам сначала разобраться с вопросами, а потом уже «набрасывать на вентилятор». И я даже вам помогу. Итак:
1. Ардуино с точки зрения программирования это HAL-фреймворк. То есть, это набор библиотек, которые предоставляют ардуинщику аппаратно независимые функции (такие, как digitalWrite, например). Именно это и позволяет добиваться описанного вами же сценария:
2. Ардуино IDE — это редактор, изначально поставляемый с фреймворком для того, чтобы в блокноте не кодить и командной строкой не пользоваться, ибо это сложно.
3. Платформио же — это вообще среда разработки, устанавливаемая плагином в один из поддерживаемых редакторов.
А теперь самое главное — никто (и я в том числе!) не предлагает вам отказаться от ардуино и использовать любой другой фреймворк вроде RTOS, libopencm3, CMSIS и т.д. Пользуйтесь на здоровье, переходите от плате к плате и т.д.
Я предлагаю лишь отказаться от убогого редактора ардуино IDE (по крайней мере первой версии, что там во второй — пока не видел) и перейти на тандем VS Code + platformio.
Зачем? Да потому, что редактор VS Code в разы удобнее редактора ардуино IDE. Вы можете устанавливать любые требуемые вам плагины (например, проверка правописания), вы можете использовать удобный intellisense, подсказывающий вам возможные имена и идентификаторы и много чего еще другого. VS Code считается лучшим бесплатным редактором для множества языков программирования, тут и спорить бессмысленно, что ардуино IDE ему проиграет.
А теперь к платформио. Во-первых, наверное, вы будете удивлены, но в него можно просто импортировать ардуино-проект, независимо от того, нашли ли вы его на форуме 10-летней давности или вчера взяли у коллеги:
Во-вторых, вот даже простая задача — ставите вы ардуино, захотели на ESP перейти — вам надо искать ссылку на json, добавлять его в настройки. Геморно. В платформио вы просто выбираете плату из списка.
Или заходиш на какой-нибудь проект, например есть очень хороший проект на ESP8266 — UART over Ethernet, или как-то так называется, но он только на ESP8266, потому, что написан на С++. Я на гите спросил автора, портируется ли проект на ESP32, там и Ethernet есть кроме WiFi, и три аппаратных UART… Автор сказал, что на переделку кода уйдёт уйма времени и он не может этим заняться. Так если бы ты изначально писал в Arduino IDE, то почти ничего не пришлось бы переделывать ни под ESP32, ни под следующие ESP которые там когда-либо в будущем придумают.
Вы путаете теплое с мягким. Допустим, возьму я ардуино IDE и под классическую UNO напишу код, использующий напрямую регистры таймера atmega328. Мне это в ардуино запретят? Нет. Этот код будет работать без модификаций на ESP? Тоже нет. И что толку, что я написал его в Arduino IDE?
Потому что для этого и придуман HAL (Hardware Abstraction Layer). Если писать, опираясь на него — будет переносимо. Но сначала этот HAL надо под каждую конкретную плату написать. Посмотрите, например, как сделано управление WS2812 — там внутри для каждой поддерживаемой платы написан свой код, и никак иначе. Потому что управление диодами на atmega и на ESP реализовано абсолютно по-разному. Вы это понимаете?
А теперь представьте, что я хочу решить какую-то задачу, для которой никто никакого HAL не написал. Что я сделаю — либо напишу HAL для моей имеющейся платы, либо просто сделаю всё напрямую. И все могу прекрасно сделать в том же ардуино IDE. В первом случае для переноса на другую необходимо будет добавить HAL для другой платы, во втором — переписать проект заново. Итого, в любом случае просто взять и сменить тип платы в проекте — не выйдет.
Поэтому, вы сначала с вопросом разберитесь, а потом уже пишите и минусы ставьте.
Другое дело когда человек заходит в автоматику из программирования (привет хабр). Многие из таких вообще под системами управления понимают в первую очередь (а иногда и исключительно) софт, что далеко не всегда верно.
В общем я бы не стал так «отшивать» Вашего оппонента. Его мнение вполне справедливо и, уверен, разделяется многими автоматчиками «от сохи», в смысле от кипа). Тем более что он же оговорился в самом начале, что «не всем надо», а не утверждал, что «всем не надо». Да и минусы я вижу только у него, а отнюдь не у Вас.
А за статью спасибо автору, было интересно. Но лично я вряд ли буду повторять этот проект на этом «железе», не смотря на всю любовь делать конфетки из г-на и палок)
Очень часто авторы кода прямо пишут что-то вроде «Собиралось и проверялось под Ардуино IDE (условно ) 1.6.хх. На более свежих версиях — работоспособность не гарантирована!» Компилируешь под (условно) 1.8 — и получаешь кучу ошибок… Начинаешь разбираться — одна (или несколько) установленных по умолчанию библиотек поменяли версии и работают совершенно иначе… Откатываешь библиотеки, заливаешь — и… правда — не работает!
И это на платах с тем же CPU, что и в оригинальной разработке!
Не знаю, как сейчас, но года 2 назад у меня более половины рабочих проектов (особенно с использованием Телеграмма) на ESP8266 невозможно было переделать под ESP32…
Но чаще-то бывает как раз наоборот.
Сложного ничего нет — но есть особенности. Я уже несколько лет не шил свои — обхожусь OTA обновлениями при необходимости. Но помню что иногда процесс обнаружения модуля в программаторе требует шаманства (для готовых плат с встроенным CH340 обычно не актуально). А больше всего достает что современные смарты с современными браузерами пытаются зайти на модуль по https — первое время не понимал почему старый смарт подключается сразу а новый ваще никак…
Да и, судя по всему, у автора все же идет заряд-разряд от 60 до 70 процентов. А тут — практически стабильное напряжение.
В обоих подходах есть плюсы и минусы. Плюс вашего — не надо разбирать телефон и паять. Минус — нужны рут-права. Но если вы собрались подключать ту же плату на есп, вам, скорее всего, паять все равно придется.
Долго искал выход. Помог Tasker благо рут на планшете был. Работает и по сей день. Такая вот история.
P.S. команда dumpsys battery set level 100 (100 естественно уровень заряда), команду обязательно выполнять от su.
Если есть терминал на телефоне, можете попробовать поставить любой уровень заряда аккума вне зависимости от реального
Можно всем небольшим умным домом одной esp32 управлять наверно, но без node-red, что неудобно.
mysku.club/blog/china-stores/48213.html
Библиотека изменилась так что скетч не актуален уже.
В принципе, написать работу с телеграмм-ботом для есп, судя по всему, не сложно. Единственный вопрос — там нужен протокол HTTPS (то есть, с шифрованием) — для есп есть такие клиенты?
У меня-то ардуина оптопарой со штатного звонка напряжение меряет, а регистратор штатным образом по тревожному входу фоткает, складывает и оповещает, — это его работа. Внешне вообще ничего не видно — обычный звонок с обычной советской кнопкой, звонит штатным обычным образом. И городить ничего не надо, да и заморачиваться с зарядками телефонов.
Удлинил шлейф от камеры. Думал, будут наводки, но нет, все работает нормально. Можно, кстати, ESP32 Cam приспособить, но качество будет хуже.
На звонок пришлось поставить отдельную плату микроконтроллера и когда на динамик приходит сигнал, его считывает плата.
Возможно я ошибаюсь, не учитываю чьи-то потребности и особенности задач, но считаю, что самым оптимальный вариантом малонагруженного (и не только «мало») сервера, например для домашней автоматизации, является решение на базе ТВ приставки.
И на сегодня это ТВ-приставки на Amlogic S905X3 (ценой в $40 на али). Пример реализации.
Почему?
Оно маленькое, дешевое, малопотребляющее законченное устройство. С мощным процессором (Мощнее многих Pi) и 4Гб памяти, втроенной EMMC и портами USB 3.0 / 2.
Питается от 5В, то есть резервирование питания сделать можно огромным количеством способов, если оно нужно. Ищите на али «UPS 18650». Хотя мне ближе БП вроде MEANWELL AD55A + stepdown, все же с винтами бокс кушает более 0.5А.
Впрочем это не мешает смотреть и на более старые приставки на том же S912 (USB2) или даже нечто на Rockchip RK3399/RK3329.
А по USB, если недостаточно встроенного EMMC без проблем подключаются хоть флешки, хоть SSD, хоть HDD.
А полноценный Armbian на базе последней Ubuntu 22.04 LTS или последнейго Debian позволяет использовать весь спектр современного линух софта натуральным и удобным способом. И уже имеет встроенную реализацию ZRAM для долгой жизни флешек.
Я тоже сношался с Raspberry Pi и Orange PI, перешивал приставки под Armbian и вот это всё. А потом махнул рукой и попробовал их решение. Оказалось, что оно просто работает. Никакого зоопарка протоколов, запитал — зашуршало. Китайцы освоили прошивку ESP-шек открытым софтом с github.com/maximkulkin/esp-homekit Вот эта кроха за 500 руб. идеально входит за выключатель в подрозетник:
Хочешь чего-то совсем под себя — ковыряешь JSON, прошиваешь, готово.
Хочу теперь обратно угробленные на Android TV и Armbian человеко-месяцы.
Беглый поиск и чтение найденного «по диагонали» навели именно на такую мысль. И если это действительно так, то лично для меня и Apple, и Home, и их Кit все они идут лесом… :)
Рабство это. :))
Не стану я даже ради лучшей в мире программы продукцию Apple закупать…
Рутованый телефон на андроиде дает бОльший выбор в ПО.
С Raspberry Pi не надо сношаться, надо поставить систему на SSD и забыть.
Зоопарк протоколов позволяет смешать в кучу устройства практически из любой экосистемы, что опять же дает бОльший выбор.
скептически смотрю на подобные статьи, хотя все в принципе логично.
Плюс только wifI и скорее всего только на 2.4 плюс вопрос с акумулятором
— все вроде мелочи, а в комплексе — решение для храбрых.
Плюс вопрос бэкапа наработанных «непосильным трудом» настроек.
Ту же карту памяти хотя бы и на комп склонировать можно целиком, заменить быстро.
Если сдохнет телефон (та же память в нем) и так же внезапно, то простых и быстрых способов восстановить все не будет, а настроить бэкап по сети все равно не помешает.
Так что альтернатива дешевая, но надежность старого телефона — не та вещь на которую стоит полагаться.
так регулярно плачутся карточки дескать летят
1) Как построить систему домашней автоматизации используя Node Red + MQTT и бот телеграмы для удаленного управления. В качестве домашнего сервера можно использовать что угодно.
2) Как использовать старый телефон или планшет в качестве сервера домашней автоматизации.
Если например разбить на две статьи то начинающим было бы проще разобраться.
Правда бот в телеге так себе надёжное оповещение… А если инет в этот момент пропадет? Лучше бы звонок настроить какой-то или сирену. Бывают usb-динамики?
например дешеманские колончки с единственным usb проводом
Ух!
У ESP32 и даже ESP8266 достаточно мозгов и RAM чтобы общаться с API Телеграма по HTTPS самостоятельно. Руководств в интернете — вагон.
А у вас 10 плат по квартире, где эти сценарии будут выполняться? Где будете организовывать взаимодействие между ними? Можно, конечно, одну плату сделать «главной», но только вот логику вы тогда на С++ будете для ESP писать, т.к. реализовать управление через веб-интерфейс у есп просто ресурсов не хватит. Вот habl и считает, что для этого надо иметь центральный сервер управления, в качестве которого он предлагает node red использовать, установленную на телефон.
У меня все розетки с EspHome работают c Home Assistant (или с Nodered) как раз по mqtt.
play.google.com/store/apps/details?id=com.okhiroyuki.redmobile,
play.google.com/store/apps/details?id=com.okhiroyuki.redmobilelite
Лайтовая версия прекрасно работает, проверено
Если в Вашей схеме со «стрелочками с двух концов», надо будет прочитать отправленные телеграмм-ботом данные тем же (другим) node-red, это возможно?
У меня esp-шки на «объектах» шлют данные через mqtt в телеграмм. На «большой земле» node-red и желание эти данные читать и обрабатывать.
Везде «динамический серый адрес за nat'ом». Сейчас использую халявно-бесплатный-ненадежный внешний vpn и платить аренду «для поиграться» совсем не хочется.