Již delší dobu jsem chtěl automaticky ovládat předokenní rolety s motorem Somfy RTS, ale nechtělo se mi do toho, protože se používá plovoucí kód a řešení tím pádem není jednoduché. V lednu tohoto roku Martin Hubáček publikoval video, kde ovládá zařízení na 433 MHz. Pro zjištění vysílaného kódu z originálního ovladače použil nástroj Universal Radio Hacker a zkopírovaný kód vysílá z levného čínského modulu připojeného k BigClown Core Module. Nevypadalo to moc složitě, tak jsem zkusil zkopírovat kód z jednoduchého zařízení na 433 MHz a vážně to fungovalo. To mě nakoplo, že bych měl konečně zkusit i Somfy.
Naštěstí jsou pohony Somfy rozšířené po celém světě a našel jsem několik postupů, jak je ovládat pomocí vlastního zařízení:
- nejjednodušší cesta je vzít originální ovladač a jenom simulovat stisky tlačítek
- lze zakoupit krabičku RFXtrx433XL, která umí ovládat různé zařízení na 433 MHz
- můžeme si poskládat vlastní univerzální ovladač s Arduino Mega a nahrát tam uzavřený firmware RFlink
- existuje i oficiální gateway Somfy Tahoma, ale ta stojí přes 14 tisíc
- protokol Somfy RTS už byl rozlousknut a existuje firmware pro Arduino, NodeMCU (ESP8266) nebo Raspberry Pi
Vybral jsem si poslední možnost, ale kód pro Arduino jsem přepsal pro BigClown:
https://github.com/kybermonty/bcf-somfy-controller
Hardware pak vypadá takto jednoduše:
Aby se vše posílalo přesně na mikrosekundy, naučil jsem se pracovat s hardwarovým časovačem TIM3 a využil jej. Použitý plovoucí kód si nikam nezapisuju, posílá se přes MQTT a v Node-RED si jej načítám/ukládám z/na SD kartu v Raspberry Pi.
Pro ovládání se využívá tento topic:
node/{node id}/somfy/s{shutter number}/cmd/{command}
- node id - identifikátor/pojmenování uzlu BigClown sítě
- shutter number - číslo rolety, od 1 do 5
- command - jeden z těchto příkazů - up, stop, down, prog
Ve zprávě se posílá již zmíněný plovoucí kód, může se začít od libovolného čísla (např. 1) a každé další číslo musí být větší než předchozí.
Tento nový ovladač je potřeba s každou roletou spárovat. Postup je následující:
- Na stávajícím originálním ovladači dlouze podržte tlačítko pro programování. Je z druhé strany ovladače a ke stlačení je potřeba nějaký špičatý předmět (např. pinzeta nebo propiska).
- Roleta vyjede kousek nahoru a pak kousek dolů.
- Přes MQTT zašlete novému ovladači příkaz “prog”.
- Roleta opět vyjede kousek nahoru a pak kousek dolů. Tím potvrdila registraci nového ovladače a už budou fungovat ostatní příkazy.
Pokud si uzel sítě pojmenujeme “test” a budeme ovládat roletu pod číslem 3, mohou vypadat MQTT zprávy takto:
mosquitto_pub -t 'node/test/somfy/s3/cmd/prog' -m 1
mosquitto_pub -t 'node/test/somfy/s3/cmd/down' -m 2
mosquitto_pub -t 'node/test/somfy/s3/cmd/stop' -m 3
mosquitto_pub -t 'node/test/somfy/s3/cmd/up' -m 4
V Node-RED poslouchám zprávy s tímto topicem:
node/{node id}/somfy/s{shutter number}/send-cmd
Do každé doplním plovoucí kód, který mám uložený v souboru a převedu zprávu
na výše popsaný formát.
Toto je poměrně složité řešení. Chtěl jsem mít nad plovoucím kódem kontrolu,
protože při ztrátě nelze ovladač jednoduše z motoru smazat a maximum
zaregistrovaných ovladačů je 12. Pro zjednodušení lze tento kód zapisovat
do EEPROM pomocí funkce bc_eeprom_write
a načítat přes bc_eeprom_read
.
Také bude potřeba upravit firmware, pokud máte více zařízení než 5.
Jestliže tedy máte rolety, žaluzie, vrata nebo markýzu s pohonem RTS, můžete vyzkoušet toto řešení. Kdyby jste si nevěděli s něčím rady, klidně mi napište.