SmartHub – cel projektu

Dziś będzie o projekcie SmartHub. Zgłosiłem się z nim do konkursu „Daj Się Poznać” opisując go jako „Otwartą platformę integracyjną rozwiązań inteligentnego domu”. Co to właściwie znaczy? Jaki jest cel projektu? O tym właśnie będzie ten wpis.

Jeżeli chcesz zobaczyć pozostałe wpisy konkursowe kliknij tutaj.

Na rynku istnieje wiele rozwiązań związanych z inteligentną automatyką budynkową. Problemem jest, że wiele z nich nie jest ze sobą kompatybilnych, a jeżeli są to tylko w zakresie w jakim przewidział to producent. Nawet niektóre otwarte standardy takie jak np. Z-Wave w mojej ocenie nie są do końca takie otwarte jak się je chwali – dostęp do dokumentacji po dokonaniu opłaty nazwałbym bardziej podatnością na otwarcie / chęcią nawiązania współpracy niż otwartością. Otwartość jest wtedy, gdy wchodzę na stronę, przeglądam ją i po chwili mam potrzebną dla mnie informację. Nie oznacza to, że po chwili będę rozumiał tę informację – mam wiedzieć, że to jest to czego szukam. W ukryciu informacji głęboko na stronie lub pod dziwną, nic nie mówiącą nazwą upatrywałbym złamania otwartości. Dobrym jej przykładem są za to projekty open source, gdzie wystarczy wejść na stronę projektu (np. na githubie) i już wszystko widać – chociaż tutaj pojawia się z kolei temat licencji, ale myślę, że omówię go szerzej w oddzielnym wpisie związanym z doborem licencji dla projektu.

Wracając do tematu – jak już możecie się domyślać po przeczytaniu poprzedniego akapitu, projekt SmartHub ma być rozwiązaniem opisanych problemów – niekompatybilności wśród istniejących systemów oraz ich braków funkcjonalnych.
Tak – będzie to kolejne rozwiązanie, z którym istniejące systemy nie będą potrafiły współpracować. Ale nie będzie to problemem, bo SmartHub będzie umiał z nimi współpracować.
Jak? Przecież nowości na rynku pojawiają się tak często, że nikt tego nie ogarnie. Po co wspierać produkty, które nie są popularne? To wszystko racja. Nie da się i nie opłaca się. Dlatego SmartHub nie będzie się skupiał na konkretnych produktach, a jego podstawową funkcjonalnością będzie udostępnienie jak największych możliwości integracji i rozszerzalności. Gotowe moduły będą dotyczyły tylko bardzo podstawowych przypadków użycia i popularnych rozwiązań sprzętowych.

Wszystko fajnie. Tylko co dadzą nawet największe możliwości integracji jak nikt nie będzie chciał się z tym integrować?
I tu rozwiązaniem jest otwarcie projektu. Jeżeli będzie on na tyle dojrzały to programiści sami będą mogli dopisywać własne moduły i obsługę swoich systemów. Dlatego planując pracę nad projektem planowałem go wrzucić do otwartego repozytorium w momencie, gdy podstawowe możliwości integracji zostaną skończone – czyli jak dojrzeje. Jednak trochę też z powodu udziału w konkursie zmieniłem podejście. Może to być szansa na szybszą informację zwrotną od społeczności. Jednak nie przewiduje dużego zainteresowania do momentu wypuszczenia pierwszej działającej wersji.

Kolejny problem. Popularność?
Nawet jak projekt będzie zakończony (co raczej szybko się nie stanie), to nie mam gwarancji, że ktoś go zauważy i się nim zainteresuje. Mniej więcej także w tym celu jest ten blog, żeby prezentować projekt i go trochę promować. Po drugie ważna jest strona główna projektu na githubie, więc myślę, że jednym z kolejnych zadań, które wykonam będzie opisanie projektu i jego głównych przypadków użycia tak, żeby reklamowały projekt. Jako, że będzie chwilę powstawał :-), to ktoś może na niego trafić, zaciekawić się (dać gwiazdkę lub dodać do obserwowanych) i wrócić w momencie, gdy pojawi się pierwsza działająca wersja. Jak tak robię. Za często nie wracam, bo nie mam czasu, ale jednak.

Ostatni problem: Co jak ktoś nie podoła integracji? Polegnie podczas pisania własnej implementacji modułu? Bo będzie ona za trudna?
Mam na to taki pomysł, żeby podczas tworzenia systemu zaczynać od pisania modułu / implementacji przypadku użycia. Pisząc najpierw moduł nic mnie nie ogranicza (bo nie ma jeszcze sztywnej architektury), więc napiszę go tak, żeby kod był jak najbardziej czytelny, krótki i zwięzły. Dopiero po napisaniu dorabiam do niego architekturę tak, żeby wszystko działało jak chcę. To trochę takie TDD dla modułów.
Rozpatrzmy taki przypadek użycia:
Po naciśnięciu dzwonka do drzwi ma odtworzyć się dźwięk zdefiniowany w konfiguracji. Jeżeli aktualnie jest coś odtwarzane to ma zostać ściszone do poziomu zdefiniowanego w konfiguracji. Drugie przyciśniecie dzwonka w trakcie odtwarzania nie powinno rozpocząć odtwarzania od nowa.

Jak widać powyższy kod jest bardzo prosty. Nie zawiera niepotrzebnych linii. Właściwie wszystkie linie, które zawiera są bezpośrednio związane z opisanymi wymaganiami. Pisząc w drugą stronę mamy tendencję do wykorzystywania istniejącego API i tłumaczenia, że tak to musi wyglądać, bo takie jest API i lepiej się nie da. Wtedy taki kod ląduje bezpośrednio w miejscu, gdzie jest potrzebny i powoduje utratę czytelności. Np. w tym wypadku mogłoby to być wyciszanie dźwięków – pętla po wszystkich wyjściach audio przed i po wywołaniu metody Play. A dzięki oderwaniu się od wymagań API i rozpoczęciu z drugiej strony kod jest prostszy i czytelniejszy.

Podsumowując celem projektu będzie rozwiązanie problemu niekompatybilności rozwiązań inteligentnego domu, a co za tym idzie stworzenie systemu, który pozwoli na ich integrację. Koniec problemów z pamiętaniem milionów haseł do NASa, systemu kontroli ogrzewania, kamer IP itp. Koniec z ciągłym przełączaniem między aplikacją od sterowania oświetleniem, a aplikacją od zarządzania lampką nocną. Wszystko w jednym miejscu.

P.S. Oczywiście to wszystko to tylko założenia i w realnym świecie projekt i tak może się nie udać (cele nie zostaną osiągnięte) z powodu opisanych problemów lub pojawienia się nowych, o których w tej chwili nie mam pojęcia. W każdym razie ja wierzę w ten projekt i jak nikt nie będzie chciał z niego korzystać, to ja będę z niego korzystał – mam już instalację w mieszkaniu, która czeka na jego wykonanie :-). To pierwszy motywator dla mnie. Drugim jest pokazanie mojego kodu światu, który będzie dobrą wizytówką podczas rozmów kwalifikacyjnych i po skończeniu na pewno będę mógł z dumą wpisać go w CV. A trzeci to może załapię się na jakieś nagrody 🙂

Mi się nie uda? W końcu „Jestem CZeSiO… Z Polski”.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *