Page 6 sur 21

Re: Alexa / Controlicz

Publié : 26 août 2018, 11:17
par Damsee
I'm back et le skill refonctionne.
J'avais joué à modifier 2/3 trucs et notamment la version de l'API Smarthome qui ne supporte que la v2 (bientôt deprecated par Amazon).

J'ai regardé rapidement les différences v2/v3 ; y'en a pas mal avec les headers qui changement notamment.
J'essaierai de regarder à l'occasion mais de toute façon, le skill fonctionne en v2.

PS : J'ai réussi à gérer mes radiateurs ^^
=> J'ai un switch selecteur virtuel qui s'appuie sur des switchs variateur (via Qubino fil pilote)
=> Je peux piloté directement les variateurs en donnant un % (3% pour arrêt, 53% pour confort...)
Bref, pas très WAF mais cela fonctionne :)

Re: Alexa / Controlicz

Publié : 26 août 2018, 19:55
par rimram31
La version sur laquelle je bosse en python est en v3 j'ai pas mal avance (mais j'ai pas de switch avec %). J'essaierai de poser une version dans la semaine. Je me prends la tete actuellement pour imaginer un thermostat virtuel (avec gestion confort/eco) pas de standard en domoticz jimagine utiliser un selecteur si vous avez des idees.

Re: Alexa / Controlicz

Publié : 27 août 2018, 23:36
par Damsee
Ah tu bosses sur du python en v3 quand je bosse sur une version modifiée de Madgeni en nodejs (je connais un peu le JS mais pas le python ^^).

Quand je regarde le lien que tu donnais : https://github.com/auchter/haaska/blob/master/haaska.py, je n'y comprends pas grand chose si ce n'est que le script est pour l'API Smarthome v2, donc il y a bcp à modifier.
Peut-être es-tu parti de cette base qui me semble plus claire : https://github.com/alexa/alexa-smarthome ?

En terme de taille de lambda, tu arrives à combien ?
J'ai réussi à descendre à 1,3M de mon côté. Le Discovery (requête et réponse) ainsi que les requêtes de contrôle sont quasi finis, je dois terminé les réponses de contrôle, bcp de taf encore... sans compter les tests. Il y aura surement de l'optimisation ensuite, peut-être en by-passant l'API Domoticz NODEJS et en passant directement des commandes via l'API Domoticz JSON avec du contrôle d'erreurs à gérer.

Sinon, je ne sais pas si tu as lu mais pour répondre à une de tes questions, le linking de compte est obligatoire pour les skills Smarthome, linking avec ton propre système comme le fait Madgeni avec Controlicz ou avec ton compte Amazon comme le propose les tutos de skills.
L'info est ici en anglais : https://developer.amazon.com/docs/accou ... nking.html
=> Account linking is required for smart home skills.

Côté sélecteurs, cela me semble très compromis en fait. Nous devons parlé le langage d'Alexa et cela ne comprend pas les sélecteurs :
INTERFACE ---------------------------------- DIRECTIVE
---------------------------------------------------------------------------
Alexa ----------------------------------------- ReportState
Alexa.PowerController -------------------- TurnOn/TurnOff
Alexa.PowerLevelController ------------- SetPowerLevel/AdjustPowerLevel
Alexa.LockController --------------------- Lock/Unlock
Alexa.ThermostatController ------------- SetTargetTemperature/AdjustTargetTemperature/SetThermostatMode/ResumeSchedule
Alexa.PercentageController ------------- SetPercentage/AdjustPercentage
Alexa.BrightnessController -------------- AdjustBrightness/SetBrightness
Alexa.ColorController -------------------- SetColor
Alexa.ColorTemperatureController ----- DecreaseColorTemperature/IncreaseColorTemperature/SetColorTemperature
Alexa.CameraStreamController --------- InitializeCameraStreams
Alexa.ChannelController ----------------- ChangeChannel/SkipChannels
Alexa.InputController --------------------- SelectInput
Alexa.PlaybackController ---------------- FastForward/Next/Pause/Play/Previous/Rewind/StartOver/Stop
Alexa.StepSpeaker ------------------------ AdjustVolume/SetMute
Alexa.Speaker ------------------------------ SetVolume/AdjustVolume/SetMute
Alexa.Cooking ------------------------------ SetCookingMode
Alexa.Cooking.TimeController ---------- CookByTime/AdjustCookTime
Alexa.Cooking.PresetController --------- CookByPreset
Alexa.TimeHoldController --------------- Hold/Resume

Celui qui s'en rapproche le plus à mon sens serait "Alexa.InputController / SelectInput", ce qui signifie que nous devrions enregistrer le sélecteur (virtual switch selector dans Domoticz) en tant que "Smart TV" avec cette interface pour modifier l'input.
Autre souci, le français n'est pas supporté pour cette interface... https://developer.amazon.com/docs/devic ... oller.html

Du coup, l'utilisation d'un dimmer est plus facile en utilisant un % avec le langage Alexa au choix :
- Alexa.PowerLevelController => SetPowerLevel/AdjustPowerLevel
- Alexa.PercentageController => SetPercentage/AdjustPercentage

Re: Alexa / Controlicz

Publié : 28 août 2018, 09:37
par rimram31
En fait, je suis plutôt parti de ça: https://github.com/home-assistant/home- ... rt_home.py comme base, c'est le code source de Home Assistant, la lambda de home assistant se contente de faire proxy, le traitement est fait localement. Pour le moment j'utilise le même principe mais pour tests (+ efficace de modifier le code localement que de reimporter la lambda) mais ensuite j'inclurai directement dans la lambda.

Testé et "a peu près" validé, j'ai le on/off, le brigthness et color, le get temperature d'un capteur, le set T d'un thermostat (mais voir plus loin ...) pas du tout touché media player (si ce n'est l'interface du code mais rien derrière) et je veux simuler/tester d'abord un "set percentage" pour être a peu près au niveau du skill de madgeni.

Le souci sur un thermostat est qu'on a pas d'objet aussi elaboré en domoticz que ce que peux gérer Alexa: https://developer.amazon.com/fr/docs/de ... oller.html et notamment le mode style confort/eco ... comme ça par exemple: https://sensi.emerson.com/en-us/support ... azon-alexa Le seul objet thermostat de domoticz est un objet permettant de régler une température (de consigne), je m'en sert de 3 dans ma programmation de chauffage (consignes confort, eco, bain en partie partagées par 3 zones de chauffage jour, nuit et bain)

Idéalement donc j'imaginais virtualiser un "thermostat Alexa" avec des commandes du style "Alexa règle le <thermostat> sur 20°" mais aussi "Alexa met <thermostat> a confort", d'ou mon idée d'utiliser un switch "selector" pour gérer le mode confort/eco ... et autant de thermostat dz pour les t de consignes. A charge de scripts dz derrière de faire le boulot correspondant (de controle de T :-))

Rem: Attention au sujet de la v2/v3, j'ai noté que la v3 demande parfois a remplir context dans la réponse indiquant en retour le detail de l'action qui a été faite. Sinon on a bien l'action effectuée, le code est appelé, mais Alexa indique une erreur, exemple set/adjust brightness, set temperature ... Autre changement, certains device doivent avoir un "discovery" plus détaillé comme un thermostat qui indique les modes qu'il peut supporter (-> https://developer.amazon.com/fr/docs/de ... figuration)

Sur la taille du code, ma lambda en zip fait 33k ;) Je veux voir si ça a un effet sur le "temps de réaction" de la lambda. Il faut savoir qu'une lambda sera "chargée" mais une fois "chaude" les appels suivants sont + rapides. Je veux voir si a taille fait qque chose.

Re: Alexa / Controlicz

Publié : 28 août 2018, 13:47
par rimram31
En complément mon idée est une version simplifiée de: https://www.domoticz.com/wiki/Plugins/S ... ostat.html. Un switch selector avec confort/eco modes voir 3 avec un off et thermostats virtuels domoticz pour les T de consigne. Il serait identifié par le skill avec un champ type Alexa_thermostat (description) qui indiquerait les modes et les id des thermostats liés style: { "CONFORT": 1234, "ECO": 47689 }

Après il est pas trop compliqué de scripter et/ou adapter sa programmation de chauffage en fonction. A l'heure actuelle je gère ça avec des interrupteurs virtuels classiques on/off (confort on/off), mes scripts vont chercher la consigne selon l'etat de ces switchs.

Re: Alexa / Controlicz

Publié : 29 août 2018, 12:23
par rimram31
Pouff ... j'ai poussé la toute première version de mon skill https://github.com/rimram31/dz_smarthome

J'ai testé avec succès les on/off, les dimmer (avec dimmer virtuel), lumieres (mais avec yeelight, dz ne semble pas savoir revenir en "blanc"), capteurs de T et aussi thermostat mais en l'etat version "basique", thermostat domoticz que l'on peut régler: Alexa regle "..." sur ... degres" pas les modes de thermostat que j'ai pas su encore faire marcher.

Il y a peut-être des coquilles, mes tests se sont limités aux devices que j'ai sous la main, si vous jouez avec, dites-moi. Sinon finalement le skill fait 9k :-) (j'avais par erreur zippé des choses inutiles)

Heu ne pas se fier aux devices de type "lock"/contact, je n'ai pas compris comment les faire fonctionner, ni en device de type lock/contact, ni en switch et switch type lock ... un Alexa ferme ... ne marche pas. Idem pour un thermostat, je n'arrive pas a dire "Alexa regle ... sur heat/cool/auto" pas la traduction de l'équivalent en français, a me demander tout court si ça marche (en fr)

Edit: Je me disais d'ailleurs qu'on pourrait peut-être repartir sur un post tout neuf ...

Re: Alexa / Controlicz

Publié : 30 août 2018, 00:17
par Damsee
Fichtre !! Tu avances vite, bravo :D

Côté thermostats, je ne sais pas car je n'ai que de l'électrique avec fil pilote... les thermostats dans Alexa pourraient donc convenir.
Il faudra que je regarde ton code pour voir si je comprends qchse ^^

PS : Oui, un nouveau sujet de type "Alternative à Controlicz - Alexa" pourrait être intéressant.

Et sinon, au delà de la taille, as-tu comparé la vitesse d'exécution de ta skill Python versus la skill de Madgeni en NodeJS ?
(au delà du fait que tu utilises l'API v3 et Madgeni la v2...)

Re: Alexa / Controlicz

Publié : 30 août 2018, 07:03
par Jeff
rimram31 a écrit :Pouff ... j'ai poussé la toute première version de mon skill https://github.com/rimram31/dz_smarthome


Edit: Je me disais d'ailleurs qu'on pourrait peut-être repartir sur un post tout neuf ...
Oui et surtout avec un bref tuto, je vous suis mais je suis perdu. Comptes amazon (liens) , où mettre le script, comment l'ajouter à Alexa...
Le niveau est devenu trop élevé :?

Re: Alexa / Controlicz

Publié : 30 août 2018, 10:31
par rimram31
Jeff a écrit :Oui et surtout avec un bref tuto, je vous suis mais je suis perdu....
Je vais m'y essayer, ça servira de base a une doc a ajouter sous github. Tout d'abord avoir sous la main le tuto original de madgeni https://github.com/madgeni/alexa_domo qui s'applique tel quel sauf la création du skill qui a changé depuis.

Sous Amazon Developper Console, creation du skill:
=============================================
. Alexa Skill kit => Skill name, Default language (j'ai mis "FR"), "skill model" => Smart Home
puis une fois créé => payload version = v3
noter le skill id (copy to clipboard) et aller sur la console AWS Services

Sous AWS Management console, creation d'une lambda:
===========================================
. Aller dans région Ireland (obligatoire pour un skill Alexa), voir en haut a droite de la console
. Aller dans "Services" => Lambda => Functions
Creer une lambda ("function"): "From scratch", donner un nom, Runtime Python 3.6, Choose a role (a creer la 1ere fois ?) => lambda_basic _execution, puis:
-> Partie designer => "Add trigger" -> 'Alexa Smart Home' -> "configuration required' -> entrer le skill id (coller de developer console)
-> Partie "Function code" => "Code entry type" -> upload zip -> uploader l'archve zip
Mettre dans Handler: lambda.event_handler (c'est le nom du <module>.<function> point d'entree de la lambda)

Coller/noter l'arn de la lambda "en haut a droite", type arn:aws:lambda:eu-west-1:...
S'assurer qu'on a bien fait "save", il est possible d'y revenir au besoin ensuite

Pas d'angoisse si toutes ces manips ne sont pas faites "consécutivement", la console lambda est parfois déroutante, on peut très bien le faire par "petite touches" en y revenant plusieurs fois tant qu'on a bien fait "Save".

Re Amazon developer console:
==========================
. Coller l'arn de la lambda dans le "Default endpoint" et aussi partie "Europe" (notre cas), j'ai laissé vide pour les autres régions

On a fait l'essentiel skill + lambda, reste le "souci" de l'account linking

Tout d'abord créer un "security profile" (voir doc de madgeni):
- Console developpeur, https://developer.amazon.com/home.html, creer "Security profile": "Apps & Services" -> "Security Profile"

Puis dans la partie "Account linking" du skill, entrer

Code : Tout sélectionner

   - Authorization URI: https://www.amazon.com/ap/oa?redirect_url=https://pitangui.amazon.com/api/skill/link/xxxxxxxx
         remplacer le xxxxx par ce qui est affiché en bas de la page dans "Redirect URLs" https://pitangui.amazon.com/...
   - Access Token URI: https://api.amazon.com/auth/o2/token
   - Client ID/ Client secret: recopier id/secret du security profile créé
   - Client Authentication Scheme: HTTP Basic
   - Scope: En ajouter un, je l'ai nommé "profile"

Attention, revenir a "Security profile" créé précédemment, modifier dans l'onglet "Web settings" la partie "Allowed return URL" et y ajouter les 3 URLS en bas de la page "Account linking"
style https://pitangui.amazon.com/api/skill/link/xxxxxxx, https://layla.amazon.com/api/skill/link/xxxxxx, https://alexa.amazon.co.jp/api/skill/link/xxxxxxx

Enregistrer tout ça, ça devrait etre ok.

Rem: En fait l'account linking permet de se lier avec un login sur une autre plateforme, normalement celle du fournisseur du skill, ce qui permet de savoir qui l'appelle (skill partagés par tous), la comme on en a pas besoin, on utilise un service amazon pour s'authentifier, le "security profile". Après dans les détails, ne me demandez pas, certaines parties restent un peu obscures pour moi.

Le skill créé apparait dans la conf. Alexa partie "Skills -> Mes skills" (en haut a droite) -> "Developpement". Dans notre cas, l'account linking va demander de s'authentifier, ici une nouvelle fois a Amazon (avec son login/pwd habituel de son compte Amazon, classique celui-là, avec lequel on a acheté l'Alexa ...)

Il est possible d'utiliser un outil de "test" dans la partie developer console (en haut a droite quand on est dans un "skill", il y a un bouton "Tester"). Pas top et attention on teste les phrases qu'on dirait a Alexa, tout skills confondus (il faut etre chez soi entre autre pour tester ...). Pour la partie Lambda, on peut voir les appels et éventuellement des "logs": onglet "monitoring", ca permet de vérifier a minima les appels.

En espérant Jeff que cela soit suffisant dans un premier temps.

Re: Alexa / Controlicz

Publié : 30 août 2018, 18:36
par Damsee
Vu comme ça, ça peut faire peur ! :lol:
J'étais un peu perdu la première fois dans les pages Amazon mais une fois dedans, c'est facile maintenant.

A voir pour remettre à jour la doc de Madgeni avec une création from "scratch"...
J'avais pris des screenshots lors de la création de mes skills (smathome v2 qui tourne actuellement et mes tests en v3 / nodeJS et Python), il faut que je trouve du temps pour remettre ça en forme.