Page 8 sur 58

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

Publié : 28 janv. 2019, 13:25
par sigalou
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.

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

Publié : 28 janv. 2019, 19:04
par jbecker
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.

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

Publié : 28 janv. 2019, 19:14
par sigalou
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.

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

Publié : 28 janv. 2019, 20:12
par jbecker
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.

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

Publié : 28 janv. 2019, 20:18
par sigalou
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...

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

Publié : 31 janv. 2019, 08:30
par dpm62980
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 !

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

Publié : 31 janv. 2019, 13:28
par sigalou
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.

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

Publié : 31 janv. 2019, 18:14
par Didier3L
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

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

Publié : 31 janv. 2019, 18:34
par gpga
+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

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

Publié : 31 janv. 2019, 21:42
par jbecker
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 ...

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

Publié : 31 janv. 2019, 21:47
par sigalou
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.

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

Publié : 01 févr. 2019, 13:08
par sigalou
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.

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

Publié : 01 févr. 2019, 19:49
par jbecker
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)

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

Publié : 02 févr. 2019, 10:06
par sigalou
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 ?

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

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

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é 263 fois
Si je regardes le log ... je dirais que la librairie a un petit bug.
Untitled.png
Untitled.png (199.82 Kio) Consulté 263 fois
Faut que je fouille un peu ;)

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

Publié : 02 févr. 2019, 13:08
par sigalou
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.

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

Publié : 02 févr. 2019, 14:26
par jbecker
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.

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

Publié : 02 févr. 2019, 14:49
par sigalou
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.

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

Publié : 02 févr. 2019, 17:37
par sigalou
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.

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

Publié : 02 févr. 2019, 19:05
par sigalou
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.