Fun with Office 365

Ten post nie traktuje o rozwiązywaniu problemów. Nie opisuje także biznesowych przypadków użycia. Ten post dotyczy tego, co można zrobić za pomocą narzędzi z pakietu Office 365. Opisuję tutaj rozwiązanie, które zbudowałem, aby mój dom był nieco bardziej inteligentny i ułatwił mi życie.

Smart house 365

Wszystko zaczęło się od żarówki wi-fi. Kupiłem ją od firmy myStrom – szwajcarskiego startupu, który koncentruje się na produkcji inteligentnych urządzeń. Zastanawiałem się, jak można ją wykorzystać, oprócz zabawy z kolorami. Powodem, dla którego wybrałem ich produkt było to, że posiada otwarty interfejs REST API, toteż miałem nadzieję, że będę mógł ją kontrolować za pomocą … oczywiście – Microsoft Flow.

Kupiłem ją również dlatego, ponieważ przygotowywałam swoją sesję na temat „Smart House 365” i postanowiłam jej użyć jako inteligentnego urządzenia, które można zdalnie kontrolować.

Pomysłem na demo było zbudowanie rozwiązania, które będzie realizować scenariusz zilustrowany poniżej:

  1. Naciskam przycisk Flic, aby uruchomić Flow.
  2. Flic App pobiera współrzędne mojej lokalizacji i uruchamia Flow.
  3. Flow pobiera prognozę pogody dla lokalizacji.
  4. Wysyła mi e-mail z danymi pogody.
  5. Zapisuje dane w SharePoint, dzięki czemu mogę później utworzyć z nich raport Power BI.
  6. Włącza żarówkę wi-fi myStrom w kolorze, odpowiadającym aktualnym warunkom pogodowym, np. pochmurno – zielony, deszczowy – niebieski, słoneczny – żółty, burza – czerwony i tak dalej …

Proste, działające rozwiązanie pokazujące, że Microsoft Flow może być używany nie tylko do rozwiązań biznesowych, ale również do sterowania urządzeniami w „prawdziwym” świecie 🙂

Ale pomysł ewoluował …

Jednym z największych problemów w miejscu, w którym żyję, jest powietrze. By być bardziej konkretnym – jego czystość. Moim nawykiem stało się, że każdego ranka włączałem aplikację Airly (to polski startup), aby sprawdzić jakie są warunki powietrza. A potem pomyślałem – dlaczego nie zbudować sobie rozwiązania, które zrobi to za mnie?

Toteż lekko przebudowałem opisany wcześniej scenariusz:

  1. Codziennie o 8 rano Flow jest uruchamiany.
  2. Następnie pobiera dane z Airly REST API i z Microsoft Weather.
  3. Wyświetla wiadomość „toast” na moim smartfonie informując o aktualnych warunkach powietrza.
  4. Zapisuje dane na listach programu SharePoint.
  5. Uruchamia odświeżanie zestawu danych w usłudze Power BI.
  6. Następnie włącza żarówkę wi-fi myStrom w kolorze pobranym z danych Airly.

Całe rozwiązanie jest zainstalowane przy drzwiach, więc zanim wyjdę z mieszkania wiem, jakie są warunki pogodowe i powietrzne. Ponadto zainstalowałem tablet z raportem Power BI przedstawiającym aktualne warunki, które są automatycznie odświeżane co 15 minut. W każdym razie działające rozwiązanie wygląda następująco:

Działające rozwiązanie

Krótki opis rozwiązania

Abyś lepiej zaznajomił się z konkretnymi częściami rozwiązania, opisuję je poniżej.

Airly

Zdecydowałem się skorzystać z ich usług, ponieważ są polskim startupem, który instaluje urządzenia do pomiaru warunków powietrza w bardzo wielu miejscach, w całej Polsce. Dostarczają tym samym bardzo precyzyjnych danych. A integracja jest naprawdę łatwa. Wystarczy się zarejestrować, aby uzyskać apikey, a następnie użyć akcji żądania HTTP, aby wywołać i pobrać dane z ich interfejsu REST API (dokumentacja tutaj):

Pobieranie danych z api Airly

Później analizuję odpowiedź za pomocą akcji „Parse JSON”. Dane do zbudowania schematu (sample payload) odczytałem wykonując testowe zapytania za pomocą Postmana.

SharePoint

Zbudowałem 4 listy:

  1. Airly Data – główna lista, na której tworzony jest rekord nagłówka
  2. Airly Indexes – opisowa informacja o aktualnym stanie, plus hash-code koloru
  3. Airly Standards – limity i procenty mówiące o przekroczeniu progów.
  4. Weather Forecast – lista informacji nt. aktualnej prognozy pogody pobranej z Microsoft Weather
Model danych

Dane pochodzące od Airly są tabelaryczne dla Standardów i Indeksów, jednak podczas testów zdałem sobie sprawę, że zawsze jest tylko jeden element w każdej tabeli i dlatego postanowiłem zrobić relacje 1:1. W związku z tym także zapisuję tylko pierwszy element z tabel do SharePoint, np. aby uzyskać kolor:

body('Parse_current_air_details')?['current']?['indexes']?[0]?['color']

Lub, aby uzyskać procentową wartość przekroczenia limitu:

body('Parse_current_air_details')?['current']?['standards']?[0]?['percent']

Odświeżanie zestawu danych w Power BI

Muszę przyznać, że był to jeden z twardych orzechów do zgryzienia. Jak sprawić, by mój raport był odświeżany zaraz po zapisaniu nowych danych? Próbowałem z „Harmonogramem odświeżania”, np. ustawiając go na 8 rano, podczas gdy przepływ został ustawiony na 7.58. Ale szukałem czegoś bardziej przypominającego wiadomość push. I znalazłem to.

Wykonałem rozwiązanie opisane przez Konstantinosa tutaj: https://medium.com/@Konstantinos_Ioannou/refresh-powerbi-dataset-with-microsoft-flow-73836c727c33 posiłkując się dokumentacją Power BI: https://docs.microsoft.com/en-us/rest/api/power-bi/datasets/refreshdataset. Zbudowałem custom connector do łączenia się z usługą Power BI. I wiecie co? Działa jak marzenie!

Odświeżanie zestawu danych Power BI z użyciem custom connectora w Flow
Odświeżanie zestawu danych Power BI z użyciem custom connectora w Flow

Konwertowanie koloru hash do HSV

Żarówka myStrom wymaga podania informacji o kolorze, który ma zostać ustawiony, przy użyciu wartości HSV, a nie RGB lub hash. Dlatego musiałem wykonać rozwiązanie, które będzie konwertować informacje o kolorach, które otrzymywałem z Airly w formacie hash do HSV. Zdecydowałem się użyć Flow w tym celu, jednak użycie Azure Functions jest także możliwe i… raczej sugerowane.

Do zbudowania Flow konwertującego kolory, zdecydowałem się użyć algorytmu opisanego tutaj: http://www.javascripter.net/faq/rgb2hsv.htm i stworzyć przepływ wyzwalany na otrzymanie wiadomości HTTP, i zwracający wartości HSV:

Flow konwertujący kolor zapisany w formacie hash do HSV
Flow konwertujący kolor zapisany w formacie hash do HSV

Algorytm został zaimplementowany z użyciem warunków i porównań:

Włączanie żarówki

Gdy żarówka została do mnie dostarczona, przeczytałem na pudełku, że rzeczywiście można nią zarządzać poprzez niestandardowe połączenia HTTP, ale tylko w sieci lokalnej (!!!) Po chwili zdałem sobie sprawę, że jeśli jestem w stanie kontrolować ją za pomocą mojego telefonu komórkowego i aplikacji, nawet jeśli nie jestem w mojej lokalnej sieci, to musi być jakiś rodzaj API, z którego mogę skorzystać 🙂

Zacząłem szukać i wylądowałem na tejs stronie, z dokumentacją API urządzeń myStrom: https://mystrom.ch/mobile/#device_switch_request. W celu uzyskania authtoken musiałem założyć konto na stronie producenta i następnie wywołać poniższy URL: https://mystrom.ch/mobile/authemail=[MY_MAIL]&password=[MY_PASS]. Bułka z masłem!

Aby uzyskać adres MAC po prostu otworzyłem stronę „Technical details” żarówki w aplikacji mobilnej myStrom używanej do sterowania urządzeniem.

Także kawałek Flow służący do tego, aby przekonwertować kolor, przetworzyć odpowiedź, a następnie włączyć żarówkę wygląda jak poniżej. Zauważyłem, że z jakiegoś powodu nie można ustawić koloru żarówki i włączyć jej w tym samym żądaniu. Muszą być dwa osobne:

Power BI

Ostatnia rzecz – raport Power BI wyświetlany na tablecie. Nie jest bardzo skomplikowany. Pokazuje mi informacje od Airly i Microsoft Weather:

Raport Power BI warunków powietrza i pogody
Raport Power BI warunków powietrza i pogody

Pokazana informacja jest zawsze ostatnim rekordem z konkretnej tabeli, czasami jest to obliczenie lub miara. Istnieją dwie wizualizacje z marketu, których używam tutaj:

  1. htmlViewer (dla aktualnych warunków powietrza i prognozy dnia)
  2. Enlighten Data Story (w celu pokazania szczegółowych informacji na temat wiatru)

Podsumowanie

Muszę powiedzieć, że praca nad tym projektem „smart home 365” była dla mnie bardzo przyjemna. Nauczyłem się kilku nowych rzeczy, ale co najważniejsze – zbudowałem naprawdę działające rozwiązanie, dzięki któremu moje życie stało się w pwenym sensie łatwiejsze. Co więcej, udowodniłem sobie, że aplikacje „power trio” z Office 365 nie są dedykowane wyłącznie do tworzenia internetowych aplikacji biznesowych, ale z powodzeniem mogą być użyte do budowania codziennych rozwiązań.