Avant toute chose merci de (re)prendre connaissance de la charte et de la respecter.
Pour résumer :
- Avant de poser une question, je cherche si la réponse existe
- Je suis poli, courtois et je respecte tout un chacun sur le forum
- Si un post m'agace : je m'en éloigne plutôt que de répondre d'une façon qui pourrait être mal interprétée


Il n'est jamais du luxe que de rappeler des choses simples :
Courtoisie, amabilité, politesse et bonne humeur sont les maîtres mots pour un forum sympathique, bienveillant et accueillant :)

Le groupe des Helpers est present pour vous aidez, n'hésitez pas à poser des questions ;)

Toute la communauté vous remercie

[DEV] Plugin Alexa-Api en BETA uniquement

Sous forum pour les plugins Dialogflow et Google Assistant
Avatar de l’utilisateur
sigalou
Actif
Messages : 1006
Inscription : 23 janv. 2017, 16:02

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par sigalou » 28 janv. 2019, 13:25

Hello

J'ai bien enregistré le cookies avec un :
fs.writeFile('/tmp/alexa-cookie.json', JSON.stringify(alexa.cookieData), 'utf8', function(err) {stop();});
C'est impec. cookies bien créé et fonctionnel.

Le script
nodejs scripts/sendCommand.js "Le salon" speak "Bonjour, comment ça va?"
Fonctionne très bien, un petit délai (même en supprimant logger: console.log) ça va.

Je vais bosser, je ferai d'autres essais ce soir ...

Quelques remarques ou questions :
* Tu parles de Token, il faut un token en plus du cookies ? ou c'est la même chose ?
* Tu penses qu'on pourrait envoyer un post par HTTP (sur :3456) plutôt qu'un script nodejs ? Les deux devrait s'intégrer à Jeedom mais le post semble plus facile pour les débutants.
Sigalou

Utilisateur/Développeur Plugin Jeedom
Créateur des plugins Alexa-API & WatchDog



Avatar de l’utilisateur
jbecker
Timide
Messages : 52
Inscription : 27 janv. 2019, 17:46

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par jbecker » 28 janv. 2019, 19:04

Je mélange les deux concepts Token et Cookie (abus de langage).
Le Token est un identifiant contenu dans le Cookie.

La librairie ne permet pas, en l'état, de faire du HTTP.
Ce que je propose, c'est la création d'un plugin Jeedom similaire à easyESP.
Le plugin consisterai en un serveur NodeJS qui écoute un port, reçoit des requêtes HTTP et exécute une commande de librairie en fonction des paramètres de la requête.
Ensuite, dans l'interface Jeedom, il serait possible de créer un équipement (un équipement par Alexa) avec une série de commandes (Nom de la commande + Value). L'exécution de la commande ne serait rien d'autre qu'un appel HTTP au NodeJS (qui à son tour appel la fonction correspondante de la librairie)

Ce que je peux faire, c'est travailler le script NodeJS, par contre, je n'ai pas encore investiguer l’interfaçage avec Jeedom (Création d’équipement, de commandes, de widgets, ...) histoire de faire un truc propre et non un bout de code +/- maintenable.

Je suis encore trop jeune sur Jeedom ;) Je travail mes designs pour l'instant.

Avatar de l’utilisateur
sigalou
Actif
Messages : 1006
Inscription : 23 janv. 2017, 16:02

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par sigalou » 28 janv. 2019, 19:14

La question d'un plugin Jeedom pour Alexa est déjà tranchée puisque ce plugin existe. Donc je ne vois pas pourquoi l'équipe Jeedom en autoriserait deux.
Par contre créer un petit script NodeJS qui tourne sur le réseau, qu'on puisse y envoyer des commandes HTTP, cela semble simple à interfacer. On enverrait des commandes par "script".

Donc pour reprendre ton exemple avec ESPEasy, il faut d'abord créer ESPEasy et ensuite on verra d'interfacer avec Jeedom.
Sigalou

Utilisateur/Développeur Plugin Jeedom
Créateur des plugins Alexa-API & WatchDog



Avatar de l’utilisateur
jbecker
Timide
Messages : 52
Inscription : 27 janv. 2019, 17:46

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par jbecker » 28 janv. 2019, 20:12

Les fonctionnalités que nous proposons sont complémentaires à la version actuelle du plugin. Ce derniers permet à Alexa de contrôler nos équipements. Nous, nous proposons de prendre le pouvoir, de contrôler Alexa comme un équipement.
Ce qui m'intéresse surtout, c'est le TTS :D Pouvoir m'avertir quand la porte d'entrée est restée ouverte, prévenir qu'il reste l'une ou l'autre fenêtre/lampe ouverte quand Jeedom effectue un scénario "Bonne Nuit" ou "Fermer maison". Le rêve :)

Sinon, pour avancer dans notre quête, je vais regarder de mon coté pour faire un joli serveur NodeJS.
Faudra sans doute attendre la fin du week-end avant que je ne sorte quelque chose.

Avatar de l’utilisateur
sigalou
Actif
Messages : 1006
Inscription : 23 janv. 2017, 16:02

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par sigalou » 28 janv. 2019, 20:18

Cool, tout ça c'est une bonne avancée.
tu avais regardé : https://github.com/Apollon77/ioBroker.alexa2 ??

Edit :
------------------------------------------------------------------
J'ai testé les rappels, ça se programme comme ça :

Code : Tout sélectionner

nodejs setReminder.js "La chambre" 1548787800 Rappel
Avec un setReminder.js qui contient un :

Code : Tout sélectionner

alexa.setReminder(process.argv[2], process.argv[3], process.argv[4], function(err)
Je suis arrivé à mettre des rappels et des alarmes, je suis trop content...
Dernière édition par sigalou le 31 janv. 2019, 13:29, édité 1 fois.
Sigalou

Utilisateur/Développeur Plugin Jeedom
Créateur des plugins Alexa-API & WatchDog



dpm62980
Timide
Messages : 95
Inscription : 06 mars 2015, 21:01

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par dpm62980 » 31 janv. 2019, 08:30

Je n'ai pas les compétences pour aider, mais je souhaite bon courage à Jbecker et Sigalou dans leur projet très intéressant.
Un grand merci à vous !

Avatar de l’utilisateur
sigalou
Actif
Messages : 1006
Inscription : 23 janv. 2017, 16:02

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par sigalou » 31 janv. 2019, 13:28

dpm62980 a écrit :
31 janv. 2019, 08:30
Je n'ai pas les compétences pour aider, mais je souhaite bon courage à Jbecker et Sigalou dans leur projet très intéressant.
Un grand merci à vous !
C'est super gentil, on te tiens au courant ici, de mon côté, j'avance bien , je décortique le code.
Aucun souci pour régler le volume, faire parler, les trucs simples quoi.
Je suis arrivé à ajouter des rappels et des alarmes mais avec un souci d'heure, je cherche pourquoi.
Je suis arrivé à lister les rappels, alarmes et autres minuteurs.
Sigalou

Utilisateur/Développeur Plugin Jeedom
Créateur des plugins Alexa-API & WatchDog



Didier3L
Actif
Messages : 1329
Inscription : 01 mai 2016, 13:40

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par Didier3L » 31 janv. 2019, 18:14

jbecker a écrit :
28 janv. 2019, 20:12
Les fonctionnalités que nous proposons sont complémentaires à la version actuelle du plugin. Ce derniers permet à Alexa de contrôler nos équipements. Nous, nous proposons de prendre le pouvoir, de contrôler Alexa comme un équipement.
Ce qui m'intéresse surtout, c'est le TTS :D Pouvoir m'avertir quand la porte d'entrée est restée ouverte, prévenir qu'il reste l'une ou l'autre fenêtre/lampe ouverte quand Jeedom effectue un scénario "Bonne Nuit" ou "Fermer maison". Le rêve :)

Sinon, pour avancer dans notre quête, je vais regarder de mon coté pour faire un joli serveur NodeJS.
Faudra sans doute attendre la fin du week-end avant que je ne sorte quelque chose.
+1
Synology DS216+ / DSM 6.2 / Docker / MariaDB 5
Conteneur : jeedom/Jeedom:master en mode réseau Host
Protocole : MyHOME Play Zigbee/ Xiaomi Aqara / HomeBridge / BLEA

Mon matériel | Tuto MyHOME en Vidéo | Documentation

gpga
Actif
Messages : 752
Inscription : 03 mars 2015, 10:29
Localisation : 67 proche de Strasbourg

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par gpga » 31 janv. 2019, 18:34

+1 également très intéressé, la solution a fonctionné quelques temps mais n'est plus opérationnelle, toutes les solutions proposées dans ce fil n'ont pas permis de revenir à une situation fonctionnelle...
Je suis vraiment impatient d'une solution pérenne

Merci d'avance aux contributeurs
1x Nuc I3 cible / Stick Aeon Gen5 / +- 30 modules Zwave / 7 cameras (Surveillance station)
1 x RPi2 source / Teleinfo USB
1 x Odroid C2 / Stick Aeon Gen 5 / 10 modules Zwave

Avatar de l’utilisateur
jbecker
Timide
Messages : 52
Inscription : 27 janv. 2019, 17:46

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par jbecker » 31 janv. 2019, 21:42

J'ai fait un peu à la va-vite mais ça peut servir de base:
https://github.com/sx-1/alexa-remote-http

Ca permet d'initier une connection avec Amazon (récupération de la liste des devices et autres) et ensuite d'attendre des requêtes HTTP sur le port 3456. J'ai juste essayé la fonctionnalité TTS (speak) pour l'instant. Le temps me manque cette semaine.

Du coup, après exécution du index.js, je n'ai plus qu'a exécuter des requêtes du genre:
http://septimus:3456/speak?device=Salon ... 20mon%20PC
Temps de réaction: 1 sec --> très satisfaisant :)

Ce script suppose toujours que vous ayez eu un premier cookie ...

Avatar de l’utilisateur
sigalou
Actif
Messages : 1006
Inscription : 23 janv. 2017, 16:02

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par sigalou » 31 janv. 2019, 21:47

J'ai trouvé le souci de l'initialisation de l'heure d'une alarme, je partage dès que j'ai une seconde (un souci de value qui était un string et non un nombre dans alexa-remote.js)

Et je regarde rapidement ta solution également.
Sigalou

Utilisateur/Développeur Plugin Jeedom
Créateur des plugins Alexa-API & WatchDog



Avatar de l’utilisateur
sigalou
Actif
Messages : 1006
Inscription : 23 janv. 2017, 16:02

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par sigalou » 01 févr. 2019, 13:08

J'ai testé ta solution, le serveur sur 3456 fonctionne très bien, les commandes passent (sauf Stop pour l'instant).

Speak, impec

Code : Tout sélectionner

http://192.168.0.21:3456/speak?device=Le%20salon&text=Bonjour%20comment%20%C3%A7a%20va%20?
Volume, impec

Code : Tout sélectionner

http://192.168.0.21:3456/volume?device=Le%20salon&value=80
Push, je connais pas trop cette fonction, mais ça m'envoie bien un psuh sur le téléphone

Code : Tout sélectionner

http://192.168.0.21:3456/push?device=Le%20salon&text=Bonjour
Reminder, je n'y suis pas arrivé, c'est le codage de la date qui bloque.
J'envoie :

Code : Tout sélectionner

http://192.168.0.21:3456/reminder?device=Le%20salon&text=Bonjour&when=2019-02-01 10:00:00
Ce qui devient :

Code : Tout sélectionner

http://192.168.0.21:3456/reminder?device=Le%20salon&text=Bonjour&when=2019-02-01%2010:00:00
Ça me répond:
Alexa-API: Alexa.DeviceControls.Volume: Invalid "when" format. Expected: YYYY-MM-DD HH:MI:SS Recu:2019-02-01 10:00:00
(le Recu vient de ' Recu:'+req.query.when que j'ai ajouté au code)

Pour ce codage de date/heure, il faudra, je pense, qu'on regarde à choisir un format facile entre Jeedom et Alexa-API.
A ce stade, je n'ai pas d'avis mais l'utilisation de timestamp me semble être la plus simple.
Sigalou

Utilisateur/Développeur Plugin Jeedom
Créateur des plugins Alexa-API & WatchDog



Avatar de l’utilisateur
jbecker
Timide
Messages : 52
Inscription : 27 janv. 2019, 17:46

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par jbecker » 01 févr. 2019, 19:49

Je viens de régler les soucis:
* /reminder: Formatage de la date, c'est juste l'expression régulière qui ne fonctionnait pas.
* /stop: Ok, il fermera le serveur (faut patienter quelques secondes le temps que les timeouts des connections ouvertes sautent)

Avatar de l’utilisateur
sigalou
Actif
Messages : 1006
Inscription : 23 janv. 2017, 16:02

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par sigalou » 02 févr. 2019, 10:06

Cool, je récupère et teste.
Il faudra probablement diviser Reminder en 3 : Rappel/Alarme/Minuteur (par le type).
Soit faire 3 fonctions soit ajouter un champ à reminder?

Je regarde comment transformer tout cela en plugin Jeedom

edit :--
Stop c'est impec
Reminder, je n'y arrive pas, tu peux me donner l'url que tu utilises sur :3456 ?
Sigalou

Utilisateur/Développeur Plugin Jeedom
Créateur des plugins Alexa-API & WatchDog



Avatar de l’utilisateur
jbecker
Timide
Messages : 52
Inscription : 27 janv. 2019, 17:46

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par jbecker » 02 févr. 2019, 12:43

Code : Tout sélectionner

http://septimus:3456/reminder?device=Salon&text=Hello&when=2019-02-02%2012:29:00
Si je vais voir dans l'interface Alexa, j'ai bien les reminder de programmé ... par contre, il sont programmé pour le lendemain.
Untitled.png
Untitled.png (10.77 Kio) Consulté 262 fois
Si je regardes le log ... je dirais que la librairie a un petit bug.
Untitled.png
Untitled.png (199.82 Kio) Consulté 262 fois
Faut que je fouille un peu ;)

Avatar de l’utilisateur
sigalou
Actif
Messages : 1006
Inscription : 23 janv. 2017, 16:02

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par sigalou » 02 févr. 2019, 13:08

Oui, il y a un bug dans la librairie, (c'est ce dont je parlais précédemment sur ce fil)
j'ai corrigé cela en modifiant la librairie, mais je préfèrerai ne pas le faire.

Dans alexa-remote.js, c'est dans

Code : Tout sélectionner

createNotificationObject(serialOrName, type, label, value, status, sound) { // type = Reminder, Alarm
notification est initialisé avec now mais n'est pas écrasé ensuite par la bonne valeur, j'imagine que ça devrait se faire dans :

Code : Tout sélectionner

  notification = extend(notification, value); // we combine the objects
dans parseValue4Notification

Du coup, comme ça bug, c'est finalement calé le lendemain par :

Code : Tout sélectionner

        if (date.getTime() < Date.now()) {
    	console.log('==>La date est depassee !!!!!!!!!!!!!!!!!!!!!!');
            date = new Date(date.getTime() + 24 * 60 * 60 * 1000);
            notification.originalDate =  `${date.getFullYear()}-${_00(date.getMonth() + 1)}-${_00(date.getDate())}`;
            notification.originalTime = `${_00(date.getHours())}:${_00(date.getMinutes())}:${_00(date.getSeconds())}.000`;
        }
Voilà ce que j'avais vu.
Sigalou

Utilisateur/Développeur Plugin Jeedom
Créateur des plugins Alexa-API & WatchDog



Avatar de l’utilisateur
jbecker
Timide
Messages : 52
Inscription : 27 janv. 2019, 17:46

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par jbecker » 02 févr. 2019, 14:26

Bug fixed :)

L'auteur pensais que la date passerait dans la condition:

Code : Tout sélectionner

case 'date':
Or non. Un objet Date est de type ... object.
Il aurait dû faire un contrôle supplémentaire sur le type d'objet:

Code : Tout sélectionner

if (value instanceof Date)
J'ai rectifié et testé ... je n'ai pas eu à attendre demain pour avoir le "rappel" de la part d'Alexa ;)
... Par contre demain, elle risque de causer pas mal xD

Maintenant que notre POC fonctionne, nous devrions peut-être nous faire un Skype pour nous synchroniser: Quelles fonctionnalités souhaitons exposer, quel nomenclature dans les url, ... Par exemple, il est possible d'avoir la liste des device Alexa via la librairie, est-ce qu'il faut prévoir de récupérer cette liste en vue d'une intégration dans Jeedom.

Avatar de l’utilisateur
sigalou
Actif
Messages : 1006
Inscription : 23 janv. 2017, 16:02

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par sigalou » 02 févr. 2019, 14:49

Du coup, tu as modifié "alexa-remote.js" ? C'est un peu gênant, faudra contacter l'auteur qu'il corrige pour ne pas partir sur une version parallèle.

Pour l'instant, je fais des essais pour créer un plugin qui charge alexa-remote-http en dépendance et je tiens au courant.
Sigalou

Utilisateur/Développeur Plugin Jeedom
Créateur des plugins Alexa-API & WatchDog



Avatar de l’utilisateur
sigalou
Actif
Messages : 1006
Inscription : 23 janv. 2017, 16:02

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par sigalou » 02 févr. 2019, 17:37

Note : J'ai l'impression que le dossier /tmp est purgé en cas de relance du Rasp/Jeedom. Il faudra probablement mettre le cookies ailleurs.
Sigalou

Utilisateur/Développeur Plugin Jeedom
Créateur des plugins Alexa-API & WatchDog



Avatar de l’utilisateur
sigalou
Actif
Messages : 1006
Inscription : 23 janv. 2017, 16:02

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par sigalou » 02 févr. 2019, 19:05

Voila, c'est loin loin d'être parfait mais une première version de plugin Alexa-API

C'est ici : https://github.com/sigalou/jeedom_alexaapi

Pour l'instant, ça installe alexa-remote-http en dépendance, ça lance ou arrête le serveur. C'est déja ça :lol:

Rappel : Il faut le cookie en JSON dans alexa-cookie.json (Je vais voir de faire un bouton dans la config pour le générer facilement)

Si votre cookie est en place, vous pouvez tester avec http://IPdeJeedom:3456/speak?device=NOM ... xt=Bonjour

jbecker, si tu peux renommer index.js en alexaapi.js, ce serait mieux pour le contrôle des processus en cours. J'ai peur que index.js soit déja utilisé ou soit un jour utilisé par un autre plugin. C'est plus sûr.
Pour l'instant, je le renomme dans l'installation des dépendances, mais autant le nommer directement sur ton dépôt.

Nota : Comme dit plus haut, il faudra probablement placer le fichier alexa-cookie.json ailleurs que dans TMP.
Sigalou

Utilisateur/Développeur Plugin Jeedom
Créateur des plugins Alexa-API & WatchDog



Répondre

Revenir vers « [Plugin Officiel] Assistant vocaux »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 0 invité