iotaiuto skill

API

ogni comando che arriva da 'echo' si traduce in una richiesta verso la skill 'iotaiuto' (metodo event_handler) il cui payload è:

event

context

in particolare event contiene awstoken (estratto dalla funzione getaws_token)

esempio di event

TODO

amazon api https://api.amazon.com/user/profile:

parametro ingresso awstoken * risposta <code> {'userid': 'amzn1.account.AGH7EXZ2ZZMPAUDFRBZQQFK7HDQQ', 'name': 'Stefano Scipioni', 'email': 'stefano.scipioni@csgalileo.org'}

</code>

AWS

Creare una skill iotaiuto

Stiamo modificando haaska per permettere la gestione di più utenti. La skill chiamerà un service di galileo che, dato l'id dell'utente chiamante, fornirà il giusto endpoint di home assistant.

La creazione di questa skill è analoga a quella di haaska e la repository è:
https://git.csgalileo.org/iotaiuto.git

Per far si che ogni utente venga associato al proprio homeassistant, aggiungere a config.json questa riga:

"api_users": "https://ha.csgalileo.org/api/users"

Quando si arriva alla parte di test della funzione lambda, inserire questo codice:

{
"directive": {
"header": {
"payloadVersion": "3",
"correlationToken": "12345",
"namespace": "Alexa.PowerController",
"name": "TurnOff",
"messageId": "abcd"
},
"endpoint": {
"scope": {
"token": "access-token-from-skill",
"type": "BearerToken"
},
"cookie": {},
"endpointId": "abcd"
},
"payload": {}
}
}

N.B. Questo test restituirà un errore se il “config.json” avrà l'attributo “apiusers” settato, perché avendo un token fake non riuscirà ad autenticarsi per ricevere lo “userid”.

Pubblicare su AWS

[DEVELOP] Go to developer console adn login with amazon account:

click to login with Amazon

creare “security profile” (http://wiki.csgalileo.org/tips:android:gianomobile as privacy URL)

get client id and secret from manage “security profile” –> web settings

–> client id: xxxx

–> client secret: yyyy

freeze browser tab [DEVELOP.1]

[ALEXA] Go to amazon alexa console:

create skill with name, default language and smart home model

get skill ID

freeze browser tab [ALEXA.1]

[AWS] Go to AWS console

open services → IAM

roles → create role → AWS service and Lambda → Next: permissions → DatabaseAdministrator → role name=lambdaiotaiuto * open services → lambda → [Ireland] * create function from scratch with: * function name 'iotaiuto' * runtime python 3.7 * choose execution role, select lambdaiotaiuto and “create function”

add trigger “Alexa Smart Home” with skill ID

get ARN from top/rigth of page

In [ALEXA.1]:

set ARN into default endpoint and into Europe/India region

save

setup account linking

Authorization URI: https://www.amazon.com/ap/oa

Access Token URI: https://api.amazon.com/auth/o2/token

client id and client secret from [DEVELOP.1]

Client Authentication Scheme: http basic

add scope named “profile”

save and get 3 redirect urls

In [DEVELOP.1] compile 3 redirect urls

Create access key from [AWS] → “username on top” → “my security credential”:

“create new access key”

Login in aws console environment with “aws configure”

From linux console upload skill with “make deploy”

From linux run “make log” to see runtime errors

Modificare e testare una funzione lambda

Le funzioni lambda sono codice che viene eseguito dalle skill custom Andare su https://console.aws.amazon.com e cliccare su Lambda.
Selezionare la skill che si desidera modificare/testare

Per modificare una funzione, scorrere giù fino alla sezione Function Code e modificare il codice, poi premere su Save.
In alternativa nel campo “Code entry type” si può selezionare “Upload a .zip file” per ricaricare la skill
Per inserire dei log in python è sufficiente usare la funzione print
Dopo ogni modifica premere su Test per assicurarsi che non ci siano errori nel codice

Per testare una funzione, selezionare una funzione di test e premere Test.
Nella parte alta della pagina compariranno i dati restituiti dalla funzione, in formato json, e il Log output.
Il Log output contiene, oltre a id e orario di richieste e risposte, tutti gli output delle print presenti nel codice.

Per visualizzare i log di una richiesta proveniente da un dispositivo come Echo dot,
andare nella tab Monitoring e cliccare View Logs in CloudWatch e cliccare sul Log Stream più recente.
Cambiare la modalità di visualizzazione da Row a Text potrebbe rendere più chiara la lettura.

Cose da fare

Creare un servizio all'indirizzo https://ha.csgalileo.org/api/users
Il servizio riceverà il parametro “userid” in una richiesta post e restituirà qualcosa del genere: <code> { “endpoint”: “https://ha.csgalileo.org/ha-12/api/”, “bearertoken”: “eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1…” } </code>