Контролиране на BroadLink RM през Shelly App, използвайки RGBW като Gateway

Автор: Момчил Минков

Дата: декември 8, 2024

Ъпдейт 2025: Вече не използвам това решение. Смених IR blaster-ите с Tapo, защото приложението им е доста по-responsive, а освен това ги комбинирах удобно и с камерите си. Въпреки това концепцията остава интересна и може да бъде полезна, ако искате да свържете устройства и екосистеми, които по принцип не са създадени да работят заедно.

Хората, които ме познават, знаят, че постоянно се опитвам да накарам технологии, хардуер и софтуер, които нормално не комуникират помежду си, да започнат да „говорят“. Напоследък се стремя да събера възможно най-много неща в Shelly App. И тъй като Shelly все още нямат актуален IR blaster, а някога имаха Shelly Sense – за който, признавам, още ме е яд, че не съм успял да пробвам, реших да си направя собствено решение.

Идеята е проста: да контролирам BroadLink RM IR blaster устройства през Shelly App, като използвам неизползвани канали на Shelly RGBW2 като своеобразен gateway.

Свали Python скрипта

 

Защо изобщо ми трябваше това?

Вкъщи ежедневно използвам IoT устройства основно от два производителя: Shelly и BroadLink. Shelly устройствата са, разбира се, от почти цялата гама. BroadLink устройствата при мен са три IR blaster-а. Те работят стабилно с гласови асистенти, но честно казано не харесвам особено приложението им.

От друга страна, имам доста Shelly RGBW2 устройства — както 1st Gen, така и Plus версии — които работят в white mode. Това означава, че често остават неизползвани канали, които реално се виждат като отделни „устройства“, но не правят нищо. Винаги ми се е искало да използвам тези свободни канали за нещо полезно. Например, чрез четири такива канала вече управлявам WLED контролер с Local HTTP Actions през Shelly App. И да, много бих се радвал някой ден да има Shelly устройство за WS2812B. ❤️ (Ъпдейт 2026: Изглежда това вече е възможно, посредством Shelly Pill.)

Защо Shelly App?

Искам максимално много неща да минават през Shelly App, защото вече съм си подредил всичко там. Освен това Shelly App за iOS е едно от малкото приложения, които могат да изпълняват реални действия директно от widgets, без да се отваря самото приложение + Apple Watch & Carplay. И да – нека не започваме темата с Home Assistant. 😄 (Ъпдейт 2026: Вече използвам HA.)

В този случай целта ми беше да мога да управлявам устройства на трети производители през Shelly Cloud, като използвам RGBW каналите като връзка между Shelly App и външен скрипт.

Основната идея

Концепцията е следната: Shelly App Scene променя brightness стойността на неизползван RGBW канал. Скрипт следи тази стойност, изпълнява конкретно действие според нея и след това връща brightness обратно на 0%.

Така един неизползван RGBW канал се превръща в нещо като команден интерфейс.
Пример:

  • Brightness 1% = изключи телевизора
  • Brightness 2% = включи телевизора
  • Brightness 3% = увеличи звука
  • Brightness 4% = намали звука
  • След изпълнение на командата brightness се връща на 0%

На практика имаме до 200 възможни състояния — 100 при off и 100 при on, макар че в моя случай използвах основно стойностите на brightness.

Как изглежда flow-ът?

Логиката е следната:
Shelly App Scene → променя brightness на RGBW канал → скрипт чете стойността → скрипт връща стойността на 0% → скрипт изпълнява съответното действие към IR blaster-а

Или по-просто казано:
Shelly App управлява RGBW канал, а RGBW каналът казва на скрипта какво да направи. RGBW устройството в случая е контролерът, gateway-ят и главният герой в цялата схема.

Shelly Scenes като бутони

В Shelly App създадох Scenes, които променят brightness стойността на конкретен неизползван RGBW канал. Тези сцени могат да се добавят към Dashboard или към iOS Widgets, което ги прави удобни за бързо управление.
Би било страхотно, ако в Shelly App има опция да се скрива бутонът Enable Scene от scene cards, защото при такъв тип употреба той по-скоро пречи визуално, отколкото помага. Но и в сегашния си вид решението работи.

А защо не Virtual Components?

Virtual Components са много добър начин за подобни сценарии, но при мен имаха един важен недостатък: реално са удобни основно през Wall Display.
(Ъпдейт 2026: Вече Virtual Components са достъпни през WD.)

Проблемът е, че не могат да бъдат expose-нати като отделни устройства директно в Dashboard или Widgets. За да натиснеш бутона, трябва да отвориш устройството, в което са компонентите. А идеята ми беше точно обратната – командите да са достъпни бързо и директно от Shelly App, Dashboard или Widget.

Защо не написах всичко на Shelly Script (mJS)?

Първоначално имах амбицията да напиша всичко със Shelly Script. Доста бързо обаче се отказах.

Причината е, че управлението на BroadLink IR blaster-ите локално не е особено приятно, а и исках те да останат свързани към своя cloud, за да продължат да работят с гласовите асистенти. Затова използвах Python библиотека за BroadLink и написах proof of concept скрипт, който да върши тази работа отвън. Ако някой има препоръки за IR blaster-и с добър local API – или още по-добре, ако подобно нещо може да се реализира със Shelly X – с радост бих чул идеи.

Какво прави Python скриптът?

Скриптът, който написах набързо като proof of concept (Don’t Judge the Early AI Coding Days), може да прави няколко основни неща:

  • Чете brightness стойността от 1st Gen Shelly RGBW2 устройство
  • Изпраща IR команда чрез BroadLink библиотеката според зададената brightness стойност
  • Връща brightness стойността обратно на 0%, за да няма повторно изпълнение на същата команда
  • Чете IR данни от BroadLink blaster-а в learning mode, за да могат да се добавят към dictionary с команди
  • Създава Shelly Cloud Scenes автоматично на база dictionary с IR кодове

Разбира се, сцените могат да се създадат и ръчно през Shelly App. Автоматичното им генериране просто спестява време, особено ако командите са много.

Може ли да се разшири?

Да, идеята може да се модифицира доста лесно. Скриптът може да бъде преработен, за да работи с Shelly Plus RGBW устройства. Може да се подобри логиката, да се добави по-добро error handling поведение, да се направи по-стабилен polling или дори да се замени с друг тип trigger.

Също така концепцията не е ограничена само до IR команди. На практика brightness стойността може да бъде използвана като trigger за всякакви действия:

  • HTTP заявки към локални устройства
  • Управление на WLED
  • Команди към други smart home системи
  • Изпълнение на локални scripts
  • Интеграции с устройства, които нямат директна Shelly поддръжка

Ако действията не изискват специфични външни библиотеки, цялата логика потенциално може да се пренапише и като Shelly Script.

Финални мисли

Това решение не е най-елегантното на света и със сигурност не е нещо, което бих нарекъл production-ready. По-скоро е proof of concept, който показва как един неизползван Shelly RGBW канал може да се превърне в gateway между Shelly App и външни устройства.

За мен най-интересната част е самата концепция: използването на brightness стойност като команден код. Просто, малко хакерско и доста приятно, когато започне да работи.

Надявам се идеята да е полезна и на други хора, които като мен обичат да карат устройства от различни светове да си говорят.

Други статии

Коментари

Невидими контакти

Невидими контакти

Имах едно правило: никога да не купувам от Temu или AliExpress нещо, което се включва директно в електрическата мрежа. Поне така си мислех. Така си купих модулна захранваща релса от там. Представете си магнитна релса за ножове, но вместо ножове по нея се поставят контакти.

6 термометъра за 4 евро

6 термометъра за 4 евро

Поръчах комплект от шест обикновени термометъра, с дисплей, за около 4 евро и честно казано – вършат перфектна работа. Сравних ги с основния датчик и отклонението е под 5%, което за цената си е повече от приемливо.

0 Коментара

Изпратете Коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *