Заметки Красного
714 subscribers
383 photos
65 videos
16 files
60 links
Рецепты умного дома, на базе spruthub, WirenBoard + щепотка Node-RED.

Автор блога - @red_ik
https://batyushin.ru
Download Telegram
Ну что, 📟WBCE 2026 позади, а я, разбирая вещи, сам того не подозревая, увез со стенда 🐙spruthub самый ценный реквизит! 😅

Знакомьтесь, Бейдж с легендарной надписью «Скоро». Эта карточка честно отстояла на стенде все два дня выставки и в одиночку ответила на 90% вопросов к нашей команде.

Кто знает, может, через пару лет продам этот исторический экспонат в какой-нибудь спрут.музей как главную реликвию. 🐙

#скоро
Please open Telegram to view this post
VIEW IN TELEGRAM
😁17👍11🔥82💯1
💬 Уведомления из spruthub в мессенджер Max: Полная инструкция

Мы привыкли отправлять алерты от умного дома в 💬Telegram, но современные реалии меняют правила и приходится выходить из ситуации кто как умеет.

Делюсь готовым решением, как настроить отправку уведомление из 🐙spruthub в мессенджер 💬Max с нуля.

1️⃣ Регистрация и создание бота в Max
Перейдите на бизнес-портал: https://business.max.ru
Создайте своего бота в личном кабинете.
Дождитесь проверки модератором.
После аппрува зайдите в настройки бота и скопируйте его Токен.

Добавьте бота в нужный вам чат (или группу).
💡 Важно: чтобы узнать ID группы (chat_id), можно воспользоваться моим следующим постом, где я через сценарий получаю перечень ChatID. В нашем случаи например: -70949012226596).

2️⃣ Создаем Глобальный сценарий в spruthub
Чтобы не писать огромный код HTTP-запроса в каждом правиле, сделаем красивую глобальную функцию.
В интерфейсе spruthub идем в Сценарии ➔ Глобальные. Нажимаем "+".

Вставляем следующий код, заменив данные на свои:
// Укажите ваши данные
let maxChatIDs = ["ВАШ_CHAT_ID"]; // Например: "-70949012226596"
let maxToken = "ВАШ_ТОКЕН_ОТ_БОТА";

function sendToMax(text) {
try {
if (!Array.isArray(text))
text = [text];

maxChatIDs.forEach(function (chatID) {
HttpClient.POST("https://platform-api.max.ru")
.path("messages")
// Важно: API ждет chat_id для групп!
.queryString("chat_id", chatID)
.header("Authorization", maxToken)
.header("Content-Type", "application/json")
.body(JSON.stringify({
text: text.join("\n")
}))
.send();
});
} catch (e) {
log.error("Ошибка отправки в Макс: " + e.message);
}
}

Нажимаем Сохранить.

3️⃣ Как отправлять сообщения из сценариев
Теперь отправка уведомления из любого сценария превращается в одну короткую строчку.

Зайдите в нужный вам сценарий (например, по срабатыванию датчика протечки).

Добавьте Блок кода и вставьте туда вызов функции:
global.sendToMax("💦 Ахтунг! Протечка воды в ванной!");


Готово! Теперь ваш умный дом умеет писать вам в Max. 🚀

👇P.S. Зеркало канала Заметки Красного в Максе:
https://max.ru/id345914871290_biz

#max #макс
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥19👍95
💬 Как узнать chat_id группы Max напрямую через 🐙spruthub

При настройке уведомлений в мессенджер Max встает проблема: как узнать системный ID нужной группы? Обычно для этого предлагают настраивать сторонние вебхуки (вроде webhook.site), лезть в консоль с curl или собирать цепочки в Node-RED.

Но есть способ гораздо изящнее — получить список всех чатов бота прямо в логах СпрутХаба с помощью одного временного скрипта!

Делюсь готовым решением.

🛠 Как это сделать за 1 минуту:
1️⃣ Подготовка
Сначала добавьте вашего бота в нужную группу в мессенджере Max (иначе он её просто не увидит).

2️⃣ Создаем временный сценарий
В 🐙spruthub создайте новый пустой сценарий (назовите его, например, "Получение ID в Макс"). В качестве триггера можно ничего не ставить — будем запускать его вручную кнопкой Play.

3️⃣ Добавляем код
Добавьте действие «Блок кода» и вставьте туда этот скрипт:

// Вставьте сюда токен вашего бота
let maxToken = "ВАШ_ТОКЕН_ОТ_БОТА";

try {
let response = HttpClient.GET("https://platform-api.max.ru")
.path("chats")
.header("Authorization", maxToken)
.send();

let responseStr = String(response);

let regex = /"chat_id":(-?\d+).*?"title":"([^"]+)"/g;
let match;

while ((match = regex.exec(responseStr)) !== null) {
let chatId = match[1];
let chatName = match[2];

chatName = unescape(chatName.replace(/\\u/g, '%u'));

log.info(chatId + " | " + chatName);
}
} catch (e) {
log.error("Ошибка: " + e.message);
}

4️⃣ Сохраняем и Запускаем сценарий. Смотрим результат в отладке 🐙spruthub

Там вас будет ждать список всех чатов, в которых состоит бот:
-70949012226596 | Заметки Красногого Тест

Просто копируете нужный ID (с минусом) и используете его в своих правилах для отправки алертов.

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

👇P.S. Зеркало канала Заметки Красного в Максе:

https://max.ru/id345914871290_biz

#max #макс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥72
Иногда мне кажется, что мне пора, наверное, завязывать с умными домами и уходить в рулетку. Помните историю, когда я хотел заказать приблуду для снятия показаний с водомера 💧, и просто случайно выиграл её в рандомном розыгрыше? Так вот, магия продолжается!

💻 С появлением удобного веб-конфигуратора от 📟WirenBoard я задумался: а не пора ли прикупить свисток USB to RS-485. Штука в хозяйстве пригодится — вдруг понадобится восстановить модуль или сконфигурировать железку «на коленке», без контроллера. Даже в корзину ее уже положил, подумал: в следующий заказ точно пойдет 🛒.

🎁 И что вы думаете? На прошедшей выставке WBCE я вытащил заветную игрушку! В коробке оказался тот самый адаптер. В предыдущих постах как раз есть фото, где я с этой коробкой в руках. Говорят, мысли не материализуются? Ну-ну. Мечтаешь о чем-то глобальном — фиг тебе. А вот как только подумал о полезной железке для работы — рандом снова на моей стороне.

🖨 Я настолько рад выпавшему «покемону», что сразу распечатал для него персональный домик. Теперь адаптер и все необходимые кабеля лежат в аккуратном кейсе. Полная эстетика и порядок в инструментах! 🧰

🤔 Пойду, пожалуй, подумаю о чем-нибудь еще. А вдруг сработает? 😉

#WirenBoard #умныйдом #3Dпечать #rs485 #удача #diy #автоматизация
Please open Telegram to view this post
VIEW IN TELEGRAM
1🎉16👍12🔥5❤‍🔥4
🛡 Tailscale ушёл? Ну да и фиг с ним!

Надоело зависеть от облаков, которые в любой момент могут “передумать работать” в нашей стране? Поэтому я собрал собственную VPN-инфраструктуру для 📟Wiren Board на базе AmneziaWG.

Схема выглядит так:
ПК Amnezia -> VPS AmneziaWG -> WirenBoard


Почему AmneziaWG оказался идеальным вариантом:
DPI практически не замечает трафик
Никаких облаков и сторонних сервисов
Полный контроль над инфраструктурой
Можно быстро переносить объекты между VPS
Работает стабильнее многих “коробочных” решений

Заодно написал свой installer под 📟Wiren Board:
🔹 установка одной командой
🔹 автоматическая сборка
🔹 безопасная переустановка
🔹 backup конфигов
🔹 восстановление DNS если что-то пошло не так
🔹 автозапуск VPN
🔹 migrate между VPS за пару минут

Теперь новый объект подключается буквально так:
curl -fsSL https://raw.githubusercontent.com/Batyushin/wb-awg-install/main/install_awg.sh | bash


Дальше скрипт сам:
- соберет AmneziaWG
- попросит вставить конфиг
- поднимет туннель
- включит автозапуск

GitHub:
👉 https://github.com/Batyushin/wb-awg-install

Если пользуетесь Wiren Board — возможно кому-то пригодится как альтернатива Tailscale для автоматизации и удалённого доступа.

⭐️ Ну и звёздочку хотя-бы на GitHub можно поставить, чтобы не зря ночами shell-скрипты шаманил.
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍1910🔥9
Недавно обратился знакомый электрик, который профессионально собирает щиты. Попросил напечатать планки для крепления жгутов проводов.

Суть идеи оказалась супер простой: планка клеится на суперклей прямо к обратной стороне DIN-рейки. А уже к ней обычными стяжками намертво крепятся все провода.

Заказ я напечатал и отправил, человек остался безумно доволен. А я смотрел на фотки результата и в голове крутилась только одна мысль: «А что, так можно было? =)»

Оказалось, это очень красивый и удобный способ монтажа. Щит получается просто идеально аккуратным, провода лежат ровно — прям эстетика кабель-менеджмента. Открыл для себя реально классный опыт. Если кто-то тоже перфекционист в сборке щитов и захочет навести такую же красоту — имейте в виду, что такие кастомные детали очень спасают.😉

#электромонтаж
👍237🔥7
❤️Подружил 🖨️Bambu Lab со 🐙spruthub
🤫Щепотка интриги! Пока вариант немного костыльный, но думаю скоро доведу всё до ума.

Уже в интерфейсе:
⚡️ Двустороннее управление
🌡 Температура/влажность (стол, сопло, камера)
📊 Точный прогресс печати
🎨 Данные по всем слотам AMS
и многое другое...

#spruthub #bambulab
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍25🔥144🗿1🆒1
🔴 В продолжение темы 🖨️Bambu Lab 🐙spruthub

Немного привожу архитектуру: теперь интеграция логически разделена на два независимых устройства:
🖨 Сам принтер
📦 Модуль AMS

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

🍒 А теперь вишенка на торте! Посмотрите, как изящно удалось визуализировать слоты AMS. Мы перехватываем сырой HEX-цвет от принтера и на лету конвертируем его в наглядный эмодзи. Максимально информативно и красиво.

#spruthub #bambulab
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍94
Cudy WBR3000UAX = 📶 Keenetic ⁉️ Да ну, бред какой-то… Или все-же не бред? 😏

А если так:
Cudy WBR3000UAX = 📶Keenetic OS + Keenetic Mesh + Удаленный 🐙Sprut.stick ZigBee 2 Pro 🔥

В прошлом месяце пишет мне один хороший знакомый и просит собрать ему роутер «с блэкджеком и куртизанками. Техническое задание звучало предельно конкретно:

- Максимально дешево
- Обязательно мощный ARM-процессор
- Обязательно AX3000
- И чтобы можно было воткнуть официальный стик, пробросив его в spruthub для отдельно стоящей бани.

Вызов принят 🛠
Берем отличный по железу, но недорогой Cudy WBR3000UAX, совершаем немного технической магии и накатываем на него полноценную прошивку от 📶Keenetic.

Что получаем на выходе? У нас на руках оказывается мощный узел для существующей Mesh-сети, который без проблем тянет среду Entware, легко переваривает ser2net и безупречно транслирует Zigbee-радио прямо в spruthub по локалке.

То есть сервер Умного Дома остается безопасно стоять в железном щите в главном доме, а этот заряженный зверек улетает в баню, раздавая там отличный Wi-Fi и создавая независимое покрытие 📶Zigbee. И всё это относительно за копейки по меркам оригинального железа с ARM на борту.

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

🤔 Рассказывать подробнее про эту мутацию? Кому вообще был бы интересен/полезен такой опыт в хозяйстве?
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍387🔥7🤯2
📦 Как пробросить Sprut.stick ZigBee 2 Pro в 🐙 spruthub через удаленный роутер 📶Keenetic

Когда основной сервер автоматизации 🐙spruthub установлен в главном здании, радиосигнал Zigbee (2.4 ГГц) физически не может «пробить» массивные уличные стены, чтобы покрыть отдельно стоящие строения — гараж, баню или гостевой дом.

Решение: Использовать роутер 📶Keenetic в удаленном строении (в качестве узла 📶Mesh-системы), а также отдельный координатор 📶Zigbee сети.

Пошаговый гайд от настройки самого железа до интеграции в интерфейс spruthub.

🛠 Шаг 1. Подготовка Keenetic OS и включение драйверов
Перед тем как лезть в консоль, нужно заставить Keenetic увидеть стик на уровне ядра и подготовить систему для внешних пакетов.

- Откройте веб-интерфейс Keenetic.
- Перейдите в Управление → Настройки системы → Изменить набор компонентов.
- Найдите и обязательно отметьте галочками следующие компоненты:
- Поддержка открытых пакетов (OPKG) — без него не встанет система пакетов.
- Переходники USB – Последовательный порт. Если этот компонент не установлен, Keenetic не сможет инициализировать чип стика, и в системе не появится нужный нам порт.

Нажмите Обновить прошивки и дождитесь перезагрузки роутера.

💾 Шаг 2. Развертывание среды Entware
Для старших моделей Keenetic с достаточным объемом встроенной памяти использовать внешнюю флешку не нужно — ставим всё во внутреннее хранилище storage:.

- Откройте встроенный менеджер файлов Keenetic (Приложения → Файлы и папки).
- В корне накопителя storage: создайте папку с именем install.
- Скачайте на компьютер официальный архив установщика для ARM-архитектур: aarch64-installer.tar.gz.
- Загрузите этот файл внутрь созданной папки install/.
- Перейдите в меню Управление → OPKG.
- В поле Накопитель выберите из выпадающего списка устройство storage: и нажмите Сохранить.

Как проверить успех? Зайдите в Диагностика → Журнал системы. Там должна появиться строка:
Opkg::Manager: /opt/etc/init.d/doinstall: [5/5] "Entware" installed!


🔑 Шаг 3. Подключение по SSH и безопасность
Окружение Entware поднимает свой собственный независимый SSH-сервер на порту 222.

Откройте терминал на компьютере (или PowerShell на Windows) и введите команду подключения:
ssh root@192.168.88.3 -p 222

(Где 192.168.88.3 — IP-адрес вашего удаленного роутера. Стартовый пароль по умолчанию: keenetic).

Сразу же меняем дефолтный пароль, который знают все. Введите:
passwd

Система попросит ввести новый пароль и повторить его для подтверждения.

🔌 Шаг 4. Определение порта Sprut.stick
Физически вставьте Sprut.stick ZigBee 2 Pro в USB-порт роутера.

В терминале выполните команду, чтобы посмотреть логи подключенных устройств:
dmesg | grep tty

Вы увидите лог инициализации. Успешное подключение выглядит так:
usb 1-1: converter now attached to ttyUSB0

Запомните это имя. Путь к нашему стику в системе: /dev/ttyUSB0.

⚙️ Шаг 5. Установка и полная настройка ser2net
Утилита ser2net будет слушать входящие запросы от сети и перенаправлять их в USB-стик.

Обновляем списки пакетов и устанавливаем утилиту:
opkg update
opkg install ser2net

Записываем конфигурационный файл в формате YAML. Мы будем транслировать стик на сетевой порт 8888. Скопируйте и вставьте в терминал этот блок команд:
cat << 'EOF' > /opt/etc/ser2net.yaml
connection: &zigbee
accepter: tcp,8888
enable: on
options:
kickolduser: true
connector: serialdev,/dev/ttyUSB0,115200n81,local
EOF


Теперь создаем скрипт автоматического запуска, чтобы после любого отключения электричества всё поднималось само. Копируем в терминал целиком:
cat << 'EOF' > /opt/etc/init.d/S99ser2net
#!/bin/sh
ENABLED=yes
PROCS=ser2net
ARGS="-c /opt/etc/ser2net.yaml"
DESC=$PROCS
PATH=/opt/sbin:/opt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
. /opt/etc/init.d/rc.func
EOF


Делаем скрипт исполняемым (задаем права):
chmod +x /opt/etc/init.d/S99ser2net


Запускаем службу прямо сейчас:
/opt/etc/init.d/S99ser2net start


Проверяем, что порт открылся:
netstat -plnt | grep 8888

Если в ответ вывелась строчка со статусом LISTEN — роутер успешно транслирует Zigbee в сеть.

🐝 Шаг 6. Интеграция в интерфейс 🐙spruthub
Осталось «привязать» сетевой стик к главному серверу умного дома.

- Зайдите в веб-интерфейс вашего spruthub.
- Откройте настройки ZigBee контроллера.
- Выставьте следующие параметры:
Тип: Sprut.stick ZigBee 2 Pro
Удалённый стик: Активировано
IP адрес: Адрес вашего Keenetic и через двоеточие порт из конфига
Включить: Активировать
- Защита от случайного удаления: Также можно активировать.

Готово! Теперь 🐙spruthub связывается по сети с удаленным 📶Keenetic. Координатор построит независимую Zigbee-сеть в удаленном строении.
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍16🔥62