API systemu
#
WprowadzenieRESTful API działa na protokole http. Komunikacja poprzez ten protokół odbywa się za pomocą kilku standardowych metod, my wykorzystujemy głównie metodę POST (do wysłania danych) i GET (do pobierania). Webserwisy udostępniane są jako zasoby, do których dostęp możliwy jest poprzez odpowiedni adres URL wywoływany z poziomu protokołu http za pomocą określonej metody.
Na bramce mamy dwa webowe API:
- API bramki (dostęp do natywnych zasobów systemu Android) na porcie 8122
- Standardowe webowe API Home Assistant/Asystenta domowego na tych samych portach, co serwer WWW (80 i 8180 lub w przypadku dostępu z zewnątrz 433)
Wskazówka
Interfejsy API akceptują i zwracają tylko obiekty zakodowane w JSON.
W przykładach poniżej używamy lokalnej nazwy hosta bramki: ais-dom.local, jeżeli bramka nie jest dostępna w Twojej sieci pod tą nazwą to zamiast ais-dom.local użyj jej lokalnego adresu IP.
#
Lokalne API bramkiObecnie dostępne są 2 zasoby http://ais-dom.local:8122/text_to_speech
i http://ais-dom.local:8122/command
Uwaga
To api dostępne jest tylko w sieci lokalnej, dlatego nie wymagamy uwierzytelnienia i szyfrowania.
Wywołanie API bramki spoza sieci lokalnej (z Internetu) możliwe jest przez API Asystenta domowego. Takie wywołania wymagają uwierzytelnienia i szyfrowania (protokół https). Całe lokalne API bramki jest dostępne przez API Asystenta domowego - opisujemy to dokładnie poniżej.
Tekst JSON MUSI być zakodowany w Unicode. Domyślne kodowanie to UTF-8.
Znaki inne niż ASCII (np. symbole istniejące w językach świata), przed wysłaniem do api należy skonwertować do ich znaków kodowych w UTF-8. Takie konwertowanie wykonywane jest zwykle automatycznie przez program / klienta REST.
#
Zasób /text_to_speechTen zasób pozwala nam na wysłanie do bramki metodą POST tekstu do przeczytania:
Dostępne parametry TTS
Parametr | Domyślna wartość | Opis / Dostępne opcje |
---|---|---|
text | - | Tekst do przeczytania / Dowolny tekst |
pitch | 1.0 | Ton mowy / 1.0 to normalny ton, niższe wartości obniżają ton syntetyzowanego głosu, większe wartości go zwiększają. |
rate | 1.0 | Szybkość mowy / 1.0 to normalna szybkość mowy, niższe wartości spowalniają mowę (0,5 to połowa normalnej szybkości mowy), większe wartości ją przyspieszają (2,0 to dwukrotność normalnej szybkości mowy). |
language | pl_PL | Język / Inne dostępne opcje to uk_UA, en_GB, en_US |
voice | Jola | Głos / Dostępne opcje to: pl_PL: Jola, Celina, Anżela, Asia, Sebastian, Bartek, Andrzej uk_UA: Mariya en_GB: Allison, Jon en_US: Sophia, Sam |
path | - | Ścieżka do zapisu pliku / TODO |
format | - | Format pliku / mp3 lub wav |
Dla uproszczenia, zasób text_to_speech pozwala też na wywolanie metodą GET - czyli wystarczy np. wkleić adres bramki z tekstem do przeczytania do przeglądarki internetowej żeby wywołać API. W przypadku metody GET należy parametry podać w ciągu zapytania (Query string). Przykłady komunikatów wywoływanych metodą GET:
- informacja o alarmie pożarowym po angielsku
http://ais-dom.local:8122/text_to_speech?language=en_GB&voice=allison&rate=1&pitch=1&text=Attention. Attention. This is Fire alarm! Evacuation on fire route number five in two minutes
- informacja o przerwie po ukraińsku
http://ais-dom.local:8122/text_to_speech?language=uk_UA&voice=mariya&rate=1&pitch=1&text=Ми запрошуємо вас на 30-хвилинну перерву на сніданок. Смачного.
- ogłoszenie po polsku
http://ais-dom.local:8122/text_to_speech?language=pl_PL&voice=jola&rate=1&pitch=1&text=Mamy więcej zamówień do zrealizowania, prosimy chętnych o pozostanie 2 godziny dłużej w pracy. Płacimy 200% extra.
Przykład wywołania API z języka Python
#
Zasób /commandTen zasób pozwala nam na wysłanie komendy do wykonania. Przykładowa komenda to wysłanie audio do odtwarzania na bramce:
Dostępne komendy
Komenda | Przykładowa wartość | Opis |
---|---|---|
playAudio | http://stream3.<br/>polskieradio.<br/>pl:8080/ | Odtwarzanie audio/video |
stopAudio | true | Zatrzymanie odtwarzacza |
pauseAudio | true | Pauza odtwarzacza |
setVolume | 50 | Ustawienie głośności odtwarzacza od 0 do 100 |
upVolume | true | Głośniej, to samo co naciśnięcie przycisku w pilocie |
downVolume | true | Ciszej, to samo co naciśnięcie przycisku w pilocie |
setPlaybackPitch | 1 | Częstotliwość audio, szczegóły w [dokumentacji PlaybackParams Android] (https://developer.android.com/reference/android/media/PlaybackParams) |
setPlaybackSpeed | 1 | Szybkość odtwarzania |
seekTo | 100 | Przewiń do pozycji w Milisekundach (ms) |
skipTo | 100 | Przeskocz do pozycji w Milisekundach (ms) |
tone | 86 | Odtworzenie tonu , szczegóły w [dokumentacji ToneGenerator Android] (https://developer.android.com/reference/android/media/ToneGenerator) |
setPlayerShuffle | false | Odtwarzanie losowe, przydatne przy Spotify |
setTtsVoice | pl-pl-x-oda-local | Zmiana głosu asystenta, dostępne opcje to:
|
micOn | true | Włączenie mikrofonu |
micOff | true | Wyłączenie mikrofonu |
addBookmark | true | Dodanie zakładki do odtwarzanych multimediów, przydatne przy audiobookach |
goToActivity | ActivityMenu | Przejście do aktywności (ekranu na bramce). Dostępne opcje to:
|
showCamera | {"streamUrl": "rtsp://192.168.2.38/unicast", "haCamId": "camera.domek"} | Wyświetlanie wideo (obraz i dźwięk) z kamery w aktywności. W parametrze haCamId podajemy identyfikator camery w Asystencie domowym - z tym identyfikatorem zostaną zgłoszone zdarzenia naciśnięcia przycisków (otwieranie drzwi/bramy) w systemie. |
#
RESTful API Home AssistantAsystent Domowy udostępnia serwer WWW na porcie 80 oraz 8180
- http://ais-dom.local:8180/ tu znajduje się aplikacja do kontrolowania systemu
- http://ais-dom.local:8180/api/ tu znajduje się RESTful API
#
Wywoływanie/testowanie usług w aplikacjiWskazówka
Aby sprawdzić dostępne usługi w aplikacji, z głównego menu przejdź do Narzędzia deweloperskie
-> USŁUGI
Z tego miejsca możesz wywoływać/testować dowolne usługi dostępne na bramce.
informacja
Każda usługa ma w aplikacji:
- opis
- wylistowane parametry (parametr, opis i przykładowa wartość parametru)
dlatego nie będziemy szczegółowo opisywać usług w dokumentacji, podamy tu tylko przykładowe wywołania.
W celu wywołania/przetestowania usługi:
- Zaloguj się do aplikacji Asystent domowy z uprawnieniami
Administrator
. - Przejdź do
Narzędzia deweloperskie
->USŁUGI
. - Wybierz usługę do wywołania z dostępnej listy.
- Podajemy parametry do przekazania w formacie JSON lub YAML.
- Naciśnij przycisk "Wywołaj usługę".
Przykładowy parametr w formacie JSON:
odpowiednik w formacie YAML:
Wskazówka
Całe API bramki (opisane szczegółowo powyżej), dostępne jest z poziomu Asystenta domowego za pomocą usługi ais_ai_service.publish_command_to_frame
.
Dzięki temu możemy wywoływać api na bramce także z zewnątrz, w bezpieczny sposób (szyfrowanie i uwierzytelnienie tokenem).
#
Wywoływanie usług z curlinformacja
Żeby wywołać API Asystenta domowego z zewnętrznego systemu, potrzebujemy token dostępu. Najpierw z poziomu aplikacji wygenerujmy długoterminowy token dostępu (long-lived access token), który będzie ważny 10 lat.
#
Generowanie tokena dostępuPrzechodzimy w aplikacji na nasz profil, następnie przewijamy na dół strony i wybieramy UTWÓRZ TOKEN
:
podajemy nazwę dla tokena:
kopiujemy token:
Uwaga
Nie ma możliwości ponownego sprawdzenia wartości tokena, dlatego należy go skopiować w bezpieczne miejsce.
Jeżeli chcemy odwołać dostęp do api, to usuwamy token.
#
Metoda GET na zasobie /api/Sprawdzamy czy /api/ jest dostępne i czy działa nam uwierzytelnianie.
Zwraca następującą odpowiedź, jeżeli API działa:
#
Metoda POST na /api/services/<domain>/<service>Komponenty dostępne na bramce udostępniają swoje usługi. Te same usługi komponentu, które automatycznie wywołujemy w systemie po wystąpieniu okreśonego zdarzenia, można również wywołać z zewnętrznego systemu za pomocą API.
Przykład wywołania usługi czytania tekstu przez bramkę za pomocą curl: