Sterowanie bramą Somfy przez telefon z Androidem

Po co sterować bramą wjazdową inaczej niż standardowym pilotem? Powodów jest kilka. Po pierwsze można otworzyć bramę jadąc do domu, kilkaset metrów wcześniej, żeby nie czekać aż się otworzy. Po drugie gdy trzeba zamknąć bramę (a nie zrobiło się tego będąc w samochodzie), to nie trzeba szukać drugiego pilota, który leży gdzieś w domu. Po trzecie, będąc na nartach nie trzeba prosić nikogo, żeby w dzień zabierania śmieci podjechał z kluczem uchylić furtkę, żeby śmieciarze opróżnili kosz (bo jak nie opróżnią to przez kolejny tydzień nie będzie gdzie wyrzucać śmieci i popiołu z pieca). Można zamiast tego rano otworzyć bramę przez Internet (o furtce też można pomyśleć, ale to kiedy indziej). Oczywiście ostatni przypadek może wydać się wyimaginowany, bo przecież można zrobić osobną furtkę tylko do koszy. Oczywiście, tylko trzeba ją mieć. A jak się nie ma, to można w 15 minut zrobić zdalne otwieranie bramy (z programowaniem w trochę ponad pół godziny).

Czy informacja o 15 minutach jest przesadzona? Nie, chociaż głównie dlatego, że funkcja była dorabiana do istniejącej już infrastruktury i poprzedzona wcześniejszymi przemyśleniami oraz poszukiwaniami rozwiązania. Do rzeczy jednak. Brama wjazdowa ma zainstalowany napęd rodem z marketów, konkretnie Somfy SGS 500 (lub 501), ponoć nazywane wcześniej Somfy Paseo 500. Oczywiście mój system nie różniłby się specjalnie, gdyby chodziło jakiś inny napęd. Zapewne prawie każda centralka do sterowania bramą ma wejście, które po zwarciu odpowiednich styków uruchamia siłowniki. A jeżeli nawet nie ma, to ma piloty zdalnego sterowania.

Ciężko znaleźć sensowną dokumentację techniczną do Somfy SGS, ale w opisie dodatkowych akcesoriów można odnaleźć informację o możliwości podłączenia włącznika kluczykowego. Moje przekonanie o tym, że jak się zewrze styki służące do podłączenia przełącznika kluczykowego, to brama się otworzy lub zamknie, graniczy z pewnością. Rozwiązanie jest o tyle dobre, że nie zużywa baterii w pilocie, a z mojego doświadczenia wynika, że jej wymiana powoduje konieczność ponownego programowania bramy (z czym zawsze są u mnie kłopoty). Niestety w moim przypadku rozwiązanie kablowe jest, póki co, nierealne do zastosowania. Wymagałoby rozbierania kostki na podjeździe. Musiałem wymyślić zatem coś innego.

Do Somfy dołączone były dwa piloty. Co więcej kolejne można dokupić na allegro za około 30 zł. Co jeszcze istotne, do zestawu można dokupić odbiornik uniwersalny i sterować drogą radiową innym urządzeniem elektrycznym (czy bramą innej firmy) przy pomocy tego samego pilota (warto wiedzieć na przyszłość, bo na razie nie mam pomysłu na zastosowanie). Zdjąłem więc obudowę pilota i, jak łatwo się domyślić, dotarłem do mikrostyków przy przyciskach. Pozostało do dwóch złączy przycisku podłączyć kabelki i założyć ponownie obudowę.

Pilot trafił do skrzynki z kartą przekaźnikową podłączoną do routera z OpenWRT. Skrzynkę z kartą zainstalowałem przy okazji przygotowywania sterowania piecem (przez wejście termostatu pokojowego), o czym pewnie napiszę jeszcze kiedyś, bo planuję rozbudowę “logi piecowej”. Samo sterowanie przekaźnikiem z poziomu skryptu php już opisywałem w tekstach o karcie przekaźnikowej i systemie nawadniania ogródka . Ruch bramy wywołuje się więc przez załączenie na moment (u mnie 100ms) i wyłączenie przekaźnika.

Jak to się ma do sterowania bramą przez telefon z Androidem? Wystarczyło tylko wykonać jakąś komunikację między tymi dwoma elementami. Jakimś rozwiązaniem byłoby samodzielne napisanie programu od obsługi do telefonu. Tak się jednak składa, że niedawno kupiłem sobie Arduino , które także z pewnością jeszcze opiszę. Co ma Arduino do OpenWRT i bramy? Póki co nie za dużo, poza tym, że przeszukując Internet trafiłem na projekt Domotic Home , który w skrócie rzecz ujmując pozwala sterować zautomatyzowanym domem przez ethernetową wersją Arduino zapytaniami http. Co ciekawe na potrzeby projektu powstał program sterujący na Androida, a także zostały opublikowane informacje dotyczące protokołu komunikacyjnego, który jest oparty na http i JSON. Nie bardzo nadaje się do wystawienia na zewnątrz, ale do sieci lokalnej nic więcej nie potrzebuję. Prostota i wystarczająca funkcjonalność w jednym.

W moim routerze z OpenWRT nie miałem serwera www, bo nie używam konfiguratorów typu LuCI - wolę pliki konfiguracyjne i linię poleceń. Zainstalowałem więc szybko uhttp i php5-cgi. W ciągu 5 minut wynik działania pierwszego, testowego skryptu miałem w oknie przeglądarki na komputerze. Potem musiałem zmienić jeszcze stronę domyślną na index.php, bo tego wpisu brakowało w konfiguracji.

W następnym kroku, w najprostszy możliwy sposób, zgodnie z protokołem przedstawiłem informację o urządzeniach, którymi aplikacja Domotic Home powinna sterować: _<?php

$ip=“192.168.10.1”; $outbrama=1; $outogrzewanie=2;

if( $_GET[‘out’]==“all” ) { echo ‘{“ip” : “’.$ip.’”, “devices” : [{ “type” : “gate”, “name” : “brama wjazdowa”, “out” : “1”}, {“type” : “plug”, “name” : “ogrzewanie”, “out” : “’.$outogrzewanie.’”}]}’; } ?>_ Teraz po podaniu adresu IP i portu aplikacji w telefonie oraz uruchomieniu synchronizacji, w menu pokazały się opcje sterowania bramą i ogrzewaniem.

Oczywiście samo sterowanie jeszcze nie działa, bo skrypt w php tego nie obsługuje, ale wystarczy dodać do kodu krótki fragment, żeby można było otwierać bramę przy pomocy telefonu. elseif( $_GET[‘out’]=="$outbrama" ) { echo ‘{“out”: “$outbrama”, “status” : “1”}’; exec( ‘/mojdom/brama’ ); } Po kliknięciu na kłódkę przy przycisku brama wjazdowa uruchamiany jest skrypt /mojdom/brama, a dołączony do karty przekaźnikowej pilot wysyła sygnał do centralki Somfy SGS, a ta uruchamia siłowniki i otwiera lub zamyka bramę. Proste, prawda? Dlaczego skrypt /mojdom/brama a nie bezpośrednie wywołanie obsługi przekaźnika z poziomu serwera www? Bo skrypt już istnieje i może być wywoływany z tego samego miejsca przez różne mechanizmy (np. można nim otworzyć bramę z crona/at planując to na czas zabierania śmieci podczas wakacyjnego wyjazdu).

Co dalej? Pewne funkcje można dodać jeszcze do Domotic Home (jak sterowanie ogrzewaniem czy odczyty temperatur z czujników), jednak brakuje jeszcze jednej funkcjonalności - otwierania bramy podczas jazdy samochodem. Domotic Home działa tylko w sieci lokalnej (łatwo to zmienić, ale nie chcę tego robić ze względu bezpieczeństwa). Rozwiążę to prawdopodobnie przez wywołanie skryptu przez ssh z poziomu zewnętrznego serwera www (bezpiecznego, dedykowanego). Napiszę też najprostszą możliwą aplikację Androidową, która po uruchomieniu wyśle jedno proste zapytanie http. A aplikację można uruchomić przez zestaw głośnomówiący wypowiadając słowa “uruchom brama wjazdowa”, jako że do wybirania numerów w samochodzie używam Cyberon Voice Commander .

Spodziewam się, że opisanie powyższego mechanizmu zajęło mi więcej czasu niż jego wykonanie. Wyraźnie natomiast widać, że jak już ma się zbudowane jakieś zalążki inteligentnego domu, to dodawanie kolejnych funkcji jest (przynajmniej w niektórych przypadkach) bardzo proste. Pomysły na nowe funkcje przychodzą z czasem, często w obszarach, których automatyzacja początkowo wydała się zbędna.