blog.vyoralek.cz

HomeAssistant #22 – napojení hlasového asistenta Amazon Alexa

V dnešním 22. dílu seriálu o HomeAssistenovi se podíváme na možnosti jak si připojit hlasový asistent Alexa od Amazonu.

🎙 Poslední aktualizace článku 4.4.2021. Pokud najdete nějaké rozdíly v aktuálním stavu, dejte vědět v komentářích, díky.

Dnes si ukážeme jak propojit hlasového asistenta Amazon Alexa se systém pro integraci chytré domácnosti Home Assistant, ted možnost ovládat zařízení připojené do Home Assistanta pomocí hlasového ovládání přes Alexu.

💡 Pokud jste ještě nečetli můj článek o základních vlastnostech Alexy a jak jej používat, pak doporučuji se nejprve podívat sem. Pokud zatím neznáte Home Assistant doporučuji se postupně prokousat seriálem začínající zde.

Možností propojení Alexy s Home Assistantem jsou defakto dvě:

  1. použití placené služby cloudu Nabu Casa, kdy instalace je poměrně triviální, ale za službu budeme platit cca $5 (110 kč) měsíčně.
  2. ruční konfigurace vzdáleného přístupu do Home Assistenta a integrace pomocí cloudových služeb AWS Amazonu – nutnou podmínkou tohoto řešení je veřejná IP adresa od vašeho poskytovatele internetového připojení.

Rozhodnutí jakou variantu zvolit není úplně triviální, tedy pokud máme veřejnou IP adresu, jelikož první varianta představuje určitou měsíční peněžní zátěž, ale druhá vyžaduje alespoň základní znalosti IT a časově nám jen nastavení může zabrat klidně půl dne.

Pokud se tedy necítíte být alespoň trochu znalí v IT určitě bych vám doporučil jít variantou první a nebo poprosit někoho znalého o alespoň prvotní nastavení – a nebo se můžete trochu jako střelci pustit do nastavení podle mého návodu 🙂

Pojďme tedy na to a nejprve se podíváme na variantu první.

1. Alexa přes Nabu Casa cloud

Pro připojení Alexy prostřednictvím Nabu Case cloudu budeme potřeba mít zejména aktivní předplatné. Pokud ho ještě nemáme, tak ho můžeme aktivovat v menu Nastavení Home Assistanta a je to hned první položka:

K dispozici je zároveň i měsíční zkušební provoz, který nevyžaduje zadání platební karty. Součástí Nabu Casa cloudu získáte zejména:

  1. možnost vzdáleného přístupu (mimo váš domov) k rozhraní Home Assistanta bez nutnosti mít veřejnou IP adresu a otevírat jakékoliv porty na vašem routeru
  2. propojení s hlasovým asistentem Alexa – ten dnes použijeme
  3. propojení s hlasovým asistentem Google Home
  4. Webhooks – umožnující posílat data do Home Asistenta prostřednictvím Cloudu – např. možnost použít pro OwnTracks
  5. Cloud TTS (text to speech) – možnost překladu textu na reč pomocí Cloudové služby – aktuálně jsou podporovány jen tři jazyky – angličtina, němčina a španělština
  6. .. a v neposlední řadě tím podporujete team stojící za Home Assistantem

Předpokládejme nyní, že už máte Nabu Casa cloud aktivní, pak v jeho nastavení uvnitř Home Assistenta je potřeba zapnout podporu Alexy a mít aktivní nějaké Amazon Echo zařízení.

V Alexa aplikaci si v sekci Skils vyhledáme Home Assistant a přihlasíme se do Nabu Casa cloudu.

Hotovo! Ano je to opravdu triviální v pár krocích a pojďme se podívat na poněkud jiný případ se spoustou kroků, který je ale zdarma 🙂

2. Alexa manuálně přes Amazon Cloud

„Manuální“ připojení přes Amazon Cloud je poněkud komplikovanější a tak se pojďme nejprve stručně podívat co vlastně budeme potřebovat nastavit / vytvořit:

  1. Vzdálený přístup do našeho Home Assistenta
  2. Vlastní Alexa Smart Home Skills
  3. Vlastní AWS Lambda
  4. Propojení Alexa Smart Home Skills s AWS Lambda
  5. Přidání Skills do Alexa aplikace

2.1 Vzdálený přístup

Na toto téma už mám poměrně detailní článek, takže se nebudu rozepisovat a pokud vzdálený přístup do Home Assistanta ještě nemáte nastavený tak koukněte tam.

2.2 Alexa Smart Home Skills

Přihlásíme se stejným účtem jako do Alexa aplikace na webové rozhraní Alexa Developer Console a rovnou klikneme na Create Skill.

Nový Skill si nějak pojmenujeme, např. Home Assistant (stejný název později uvidíme v Alexa aplikaci) a v jazycích vybereme angličtinu – já nechávám English (UK).

V sekci model vybereme položku Smart Home a nastavíme jako Provision your own

… a klikneme na Create skill,

V seznamu Skills bychom nyní měli vidět novou položku:

Tím zatím máme hotovo, ale ještě se později budeme muset vrátit pro další dopřesňující nastavení.

2.3 AWS Lambda

Nyní přichází na řadu poněkud komplikovanější část. Cílem v tomto kroku bude vytvořit Lambda funkci pro propojení Skillu vytvořeného výše s HomeAssistantem.

K tomu budeme nejprve potřebovat účet na AWS Cloudu. Nebudu tady úplně zabíhat v detailních krocích jak to udělat, ale tahle část by neměla být komplikovaná. Budete pouze potřebovat přidat platební kartu, ale funkce kterou dále použijeme si vystačí s limitem počtu dotazů na měsíc, který je zdarma. Neměli byste tedy nic měsíčně platit.

Jakmile máme na AWS Cloudu účet přihlásíme se do AWS Console.

Než začneme cokoliv vytvářet je potřeba se ujistit, že jsme ve správném regionu – Amazon v AWS umožňuje vytvářet služby v různých regionech. Jejich seznam dostaneme po kliknutí v pravém horním rohu:

Na internetu koluje poměrně hodně diskuzí jakou lokaci zvolit. Teoreticky my bychom měli pro Evropu vše vytvářet v sekci eu-west-1, tj. Europe (Ireland). Rovnou ale prozradím, že já jsem u této variantě skončil z problémem, že Alexa nenašla vůbec žádné zařízení i když se úspěšně přihlásila do Home Assistanta.

Zatím proto doporučuji vše vytvářet v regionu us-east-1, tj. US East (N. Virginia) a poprosím pokud někdo byl úspěšný s Evropským regionem aby dal vědět v komentářích a nebo mi napsal.

2.3.1 Vytvoření IAM Role pro Lambda funkci

Do hledacího pole zadáme iam a klikneme na nabízenou službu.

V levém menu klikneme na Roles a dáme vytvořit novou roli – Create role.

1/4 – Necháme vše jak je, klikneme na Lambda a dáme Next: Permissions.

2/4 – Do vyhledávacího pole Filter policies zadáme AWSLambdaBasicExecutionRole, roli vybereme pomocí zatržítka vlevo a dáme Next: Tags

3/4 – Sekce Tags je volitelná a úplně ji přeskočíme, tj. dáme Next: Review

4/4 – V posledním kroku nastavíme Role name na nějaká název, např: AWSLambdaBasicExecutionRole-SmartHome a klikneme na Create role.

V seznamu rolí máme novou roli pro AWS lambda službu.

2.3.2 Vytvoření Lambda funkce

Do hledacího pole zadáme lambda a klikneme na nabízenou službu a rovnou klikneme na Create function.

Pro funkci vybereme volbu Author from scratch, vyplníme nějaká název, např. HomeAssistant-API a v sekci runtime vybereme Python 3.8.

Klikneme na Change default execution role, vybereme Use an existing role a v sekci Existing role vybereme roli kterou jsme vytvořili v předešlém kroku.

Vše potvrdíme tlačítkem Create function a hned se vrhneme na nastavení nově vytvořené funkce, kter najdeme po kliknutí na položku v záložce Configuration.

Začneme v sekci Triggers, kde bude potřeba přidat link na Skills, který jsme si vytvořili na začátku. Application ID najdeme v seznamu Skills je u položky možnost Copy Skill ID.

.. který zkopírujeme do Application ID u vytváření Triggeru.

Další sekcí, kterou budeme potřebovat změnit, je Environment variables, kam potřebujeme přidat jen jednu položku BASE_URL s vzdálenou adresou našeho HomeAssistanta

Tím jsme s konfigurační částí hotoví a můžeme se přepnout do sekce Code kam vložíme do souboru lambda_function.py kód z této adresy: https://gist.github.com/awarecan/630510a9742f5f8901b5ab284c25e912

… a nezapomeňte zmáčknout tlačítko Deploy pro nahrání kódu.

2.3.3 Příprava k otestování Lambda funkce

Než začneme s testováním je potřeba si přidat Alexu do configurace Home Assistanta. To není bohužel možné přes UI a budeme tak muset do configuration.yaml souboru, ale nebude to naštěstí složité a stačí nám přidat následující:

alexa:
  smart_home:

… a restartujeme Home Assistant.

Konečně se můžeme vrhnout na poslední sekci u Lambda funkce – Test. V nastavení Lambda funkce na AWS do sekce kódu vložíme následující:

{
  "directive": {
    "header": {
      "namespace": "Alexa.Discovery",
      "name": "Discover",
      "payloadVersion": "3",
      "messageId": "1bd5d003-31b9-476f-ad03-71d471922820"
    },
    "payload": {
      "scope": {
        "type": "BearerToken",
        "token": "<VAS_TOKEN_Z_HOMEASSISTANTA>"
      }
    }
  }
}

… a v HomeAssistantovi si vytvoříme Token s dlouhou životností, která zkopírujeme do sekce token.

Token je možné vytvořit v HA pomocí kliknutí úplně dole vlevo na tvé jméno a úplně dole najdeme sekci Tokeny s dlouhou životností.

Jakmile máme token v testovacím kódu klikneme na Invoke a pokud test skončí zeleně tak je vše správně nastaveno:

Pokud vše funguje můžeme z testu odebrat token.

2.4 Propojení Lambda funkce s Alexa Skills

Nejprve si zkopírujeme tzv. ARN, které budeme potřebovat z nastavení Lambda funkce v AWS konzoli kliknutím na Copy ARN.

Vrátíme se zpět do Alexa Developer Console a klikneme na námi vytvořený a do pole Default endpoint vložíme ARN Lambdy

Kromě ARN bude potřeba ještě vyplnit pár informací v Account Linking Alexa Skill a to konkrétně:

  • Your Web Authorization URL – zadejte adresu: https://<ADRESA_VASEHO_HA>/auth/authorize
  • Access Token URI – zadejte adresu:
    https://<ADRESA_VASEHO_HA>/auth/token
  • Your Client ID – zde záleží na lokaci Lambda funkce. Já jsem zkoušel laborovat s EU lokací, ale nebyl jsem schopen dosáhnout stavu, kdy by se mi do Alexa App natáhly nějaké zařízení. Kupodivu s US verzí to funguje. Pokud přijdu na to jak toto vyřešit, článek ještě zaktualizuji, ale zatím použijte US verzi:
    https://pitangui.amazon.com
  • Your Secret – zadejte cokoliv, nebude použito
  • Your Authentification Scheme – změňte na Credentials in request body
  • Scope – klikněte na Add scope a vyplňte hodnotu smart_home

… a nahoře klikneme na tlačítko Save.

2.5 Přidání Skills do Alexa aplikace

V Alexa aplikaci klikneme na volbu More a vybereme v menu Skills & Games. Vybereme záložku s názvem Your Skills a klikneme na položku Dev, kde byste měli vidět jeden Skill vytvořený výše s popisem Account linking required a dejte Enable To Use.

Ještě bude potřeba se přihlásit do HomeAssistanta a v dalším kroku už byste měli mít účet spárovaný.

Úplně poslední krokem je pak povolení Discover Devices, kde na konci uvidíte v Devices Alexy hlášku o nově nalezených zařízeních.

A máme hotovo. Jak vidíte postup manuálního přidávání je opravdu výrazně delší.

Zhodnocení

Jak jsem již psal na úvod, měl by si každý zvážit své znalosti nebo popř. dostupnost někoho kdo to umí a podle toho se rozhodnout buď pro jednodušší placenou variantu a nebo plně manuální verzi s vyšší obtížností, ale zdarma.

Každopádně je skvělé, že máme na výběr a obě možnosti jsou momentálně plně k dispozici.

Kompletní série o HomeAsistantovi obsahuje následující články:

  • 1. část – Instalace HomeAsisstent
  • 2. částIntegrace Sonoff s firmware Sonoff-Tasmota
  • 3. částIntegrace Homekit
  • 4. částIntegrace Sonoff s firmware Sonoff-Tasmota – 2 část
  • 5. částIntegrace s Wemos D1 a senzory teploty
  • 6. částIntegrace Sonoff s firmware ESPHome
  • 7. částIntegrace Sonoff POW s firmware ESPHome
  • 8. částIntegrace LED Magic Home s firmware ESPHome
  • 9. částIntegrace Xiaomi Mijia a Aqara
  • 10. část – Integrace vlastní Zigbee gateway
  • 11. část – Vzdálený přístup do Hass.io z Internetu
  • 12. část – zobrazení senzorových data pomocí InfluxDB a Grafany
  • 13. část – Hass.io Add-ony, které používám
  • 14. část – Integrace Xiaomi Mi Flora
  • 15. část – Integrace Withings (Nokia)
  • 16. část – náhrada SQLite databází MySQL
  • 17. část – HACS Add-ony – instalace a konfigurace
  • 18. část – Integrace Sonoff s firmware eWeLink
  • 19. část – nová integrace Sonoff pro HA
  • 20. část – měření spotřeby
  • 21. část – automatické zálohy a obnovení ze zálohy
  • 22. část – napojení hlasového asistenta Amazon Alexa
  • 23. část – automatické zálohy na síťový sdílení disk (Samba)
  • 24. část – Bluetooth zařízení a ESPHome proxy
  • 25. část – nefunkční aktualizace HomeAssistanta
  • 26. část – integrace SwitchBot produktů
  • 27. část – integrace fotovoltaiky Growatt

Add comment

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..

Odebírejte blog emailem

Mějte ihned informaci o novém článku ze světa technologií.