Comme annoncé, ce forum est passé en lecture seule au 1er janvier 2020. Désormais nous vous invitons à vous rendre sur notre nouvelle page communauté :
Image

A très bientôt !

[TUTO] IFTTT : Puissance 10 V2

Pour parler de tout, et surtout de rien !
roxxsuxx
Timide
Messages : 183
Inscription : 14 sept. 2014, 13:36
Localisation : 30330
Contact :

Re: [TUTO] IFTTT : Puissance 10

Message par roxxsuxx » 05 nov. 2018, 19:43

Merci et j’avais bien fait une erreur, par contre j’ai l’impression qu’il manque des ou dans la liste de regex. Par contre vous arrivez à faire de longue phrase sur le GH, dès que je demande plusieurs actions longues elle me répond qu’elle ne peut pas m’aider et rien n’ai envoyé à IFTTT? Merci.


Envoyé de mon iPhone en utilisant Tapatalk

meute
Actif
Messages : 1102
Inscription : 26 août 2017, 11:07
Localisation : Belgique

Re: [TUTO] IFTTT : Puissance 10

Message par meute » 05 nov. 2018, 21:40

roxxsuxx a écrit :
05 nov. 2018, 19:43
Par contre vous arrivez à faire de longue phrase sur le GH, dès que je demande plusieurs actions longues elle me répond qu’elle ne peut pas m’aider et rien n’ai envoyé à IFTTT? Merci.
Ca m'arrive aussi, mais je ne me suis pas encore penché dessus pour voir dans quelles conditions ça arrive, ça m'arrive surtout quand je fais des tests de longues phrases totalement improbables que finalement je ne dirais jamais dans la vie de tous les jours car j'aurais vite oublié comment le dire ...
Au début on voudrais bien pouvoir demander un roman et obtenir une réponse et à l'usage de tous les jours on se rend vite compte qu'au plus c'est court et concis au plus c'est efficace, naturel, reproductible et automatique.

Exemple un truc que je voulais absolument faire au début c'est "allumes la lumière de la table de la salle à manger", en plus devant des invités ça claque, mais j'ai vite reconstruit l'interaction pour la rendre aussi compatible avec simplement "allume la table" car finalement j'ai qu'une table qui dispose d'un lustre au-dessus chez moi et elle est forcément dans la salle à manger alors pourquoi faire compliqué alors que "allume la table" c'est simple, efficace et rapide.
Littéralement ça n'a pas beaucoup de sens d'allumer une table ... mais au final on se rend compte que c'est comme cela qu'on parle dans la vrai vie ... allume la cuisine ... éteins le WC ... éteins le couloir ...
Jeedom VM ESXI sur NUC
Ilot I/O Modbus Wago Z-Wave (11 volets,prises,présences) + RFXCom (sondes T°+RH, prises)
Pont Hue et une vingtaine d'ampoules,une flopée de Xiaomi aquara, Harmony Elite
8 Google Home et un PC tactile All-In accroché au mur

meute
Actif
Messages : 1102
Inscription : 26 août 2017, 11:07
Localisation : Belgique

Re: [TUTO] IFTTT : Puissance 10

Message par meute » 05 nov. 2018, 21:48

kenny a écrit :
05 nov. 2018, 11:56
Bonjour meute,

j'ai travailler sur le même sujet, pour des actions IFTTT multiple.
j'aime le principe de sécurité avec le delais de 90S et beaucoup d'autre point de ton script.

Moi j'ai travaillé d'une façon différente et pouvoir passer des commandes mêmes sans le "Et" donc je pense que l'on devrais essayer de faire un truc en commun qui pourrait être super:
viewtopic.php?f=191&t=40515
Vais aller zieuter ça mais faudrait pas non plus refaire un deuxième moteur d'interaction au-dessus de celui du core qui est vraiment pas mal foutu ... ni faire un code trop ciblé sur des cas particuliers ...

Mon but est d'exploiter autant que possible le moteur d'interaction de jeedom car avec quelques finesses on en fait presque ce qu'on en veut, tout en lui donnant un coup de pouce via mon scripts d'interface IFTTT en faisant du pre-processing léger de quelques bricoles.
Jeedom VM ESXI sur NUC
Ilot I/O Modbus Wago Z-Wave (11 volets,prises,présences) + RFXCom (sondes T°+RH, prises)
Pont Hue et une vingtaine d'ampoules,une flopée de Xiaomi aquara, Harmony Elite
8 Google Home et un PC tactile All-In accroché au mur

meute
Actif
Messages : 1102
Inscription : 26 août 2017, 11:07
Localisation : Belgique

Re: [TUTO] IFTTT : Puissance 10

Message par meute » 05 nov. 2018, 21:52

roxxsuxx a écrit :
05 nov. 2018, 19:43
par contre j’ai l’impression qu’il manque des ou dans la liste de regex
En effet, bien vu, au moins un qui suit :D

C'est corrigé, merci.
Jeedom VM ESXI sur NUC
Ilot I/O Modbus Wago Z-Wave (11 volets,prises,présences) + RFXCom (sondes T°+RH, prises)
Pont Hue et une vingtaine d'ampoules,une flopée de Xiaomi aquara, Harmony Elite
8 Google Home et un PC tactile All-In accroché au mur

meute
Actif
Messages : 1102
Inscription : 26 août 2017, 11:07
Localisation : Belgique

Re: [TUTO] IFTTT : Puissance 10

Message par meute » 06 nov. 2018, 11:11

kenny a écrit :
05 nov. 2018, 11:56
Bonjour meute,

j'ai travailler sur le même sujet, pour des actions IFTTT multiple.
j'aime le principe de sécurité avec le delais de 90S et beaucoup d'autre point de ton script.

Moi j'ai travaillé d'une façon différente et pouvoir passer des commandes mêmes sans le "Et" donc je pense que l'on devrais essayer de faire un truc en commun qui pourrait être super:
viewtopic.php?f=191&t=40515
Hello,

J'ai été voir ton post et ton script mais je ne vois pas trop quelle multi interaction on pourrait lancer sans utiliser la liaison " et ", pour moi une découpe sur " et " est la chose la plus judicieuse et la plus simple.

Dire "allume le salon cuisine" ou "ouvre la grille, éteins le salon" n'a rien de naturel selon moi, quoi qu'il arrive une demande multiple double sera plus naturellement séparée par un " et ", c'est le langage qui veut ça.
Un des seuls cas qui me vient à l'esprit où le " et " pourrait être absent d'une commande dite de façon "naturelle" c'est pour une triple interaction genre "allume le salon, la cuisine et la salle à manger", mais comme la notion de "," est très difficile à interpréter depuis une commande vocale c'est chaud. Il vaut mieux accepter de devoir dire "allume le salon et la cuisine et la salle à manger" à mon sens, ce qui est finalement tout aussi naturel à dire.
En restant objectif et après plus d'un an d'expérience d'utilisation quotidienne et intensive du contrôle vocales sur 100% de la maison pour moi 95% des demandes sont des commandes uniques, 4% des commandes auraient été sympa en commande doubles et peut-être 1% auraient justifiées une commande triple.

De plus si une longue commande multiple est nécessaire il vaut mieux s'interroger si en faire une commande simple et combiner les différentes actions sur une seule interaction n'est pas plus judicieux.
Si par exemple pour aller se coucher tu voudrais dire "OK Google, ferme tous les volets, éteins la télé et les lumières du séjour, verrouille la porte, ..." il vaut mieux faire une IFTTT et une interaction "je vais au lit" ou "je vais me coucher" ou "passe en mode nuit" et rassembler tout ce qu'il faut faire dans ce cas là dans un scénario. Perso c'est comme ça que je travaille.
Pareil quand je pars de chez moi je ne dis pas "ouvre la garage, ouvre la grille, ferme tous les volets, éteins toutes les lumières, active l'alarme, passe le chauffage en eco, ...", j'ai quelques interactions "je m'absente par ...", "je sors par ..." et derrière ça j'ai des scénarios qui s'occupent de tout ... si c'est "je m'absente ..." ça ouvre tout pour sortir et ça referme tout ensuite et en plus ça mets la maison en mode absence et active l'alarme et si c'est "je sors ..." ça ouvre et referme tout automatiquement mais la maison reste en état normal vu que dans ce cas il reste des personnes présentes. En aucun cas je voudrais essayer de gérer ça via des interactions multiples.
Pareil, j'ai des interactions du genre "éclairage en mode TV" qui s'occupent de changer tout l'éclairage du séjour en une fois (14 Hues et quelques autres points d'éclairages ...)

Donc vouloir absolument détecter des multi-interactions même sans mot de liaison et découper sur " " pour extraire chaque mot et reconstruire c'est chercher inutilement les problèmes et ça oblige en plus de connaitre absolument toutes les commandes possible, tous les équipements possibles et normalement pour vraiment palier à toutes les éventualités également tous les objets possibles.

Je sais pas si tu débutes en commandes vocales mais si tu l'utilises en production quelques semaines tu vas vite te rendre compte que finalement c'est pas la peine de chercher à faire trop complexe et qu'il faut essayer d'aller à l'essentiel, au début je cherchais aussi à faire comprendre tout et n'importe quoi et finalement on fini par cibler car c'est beaucoup plus efficace.

Je n'ai pas testé ton script pour voir comment il se comporte dès qu'on le chatouille un peu mais ça me paraît en même temps trop complexe pour le gain que ça peut apporter et en même temps trop simpliste pour l'objectif recherché et donc assez sujet à se retrouver facilement avec des reconstructions d'interactions incohérentes pour un oui ou un non si un équipement ne colle pas ou si une commande n'est pas bien reconnue.

Je pense qu'au final ce que tu voudrais obtenir mériterais quasi un process d'AI et sera très complexe et très lourd à maintenir au fur et à mesure de l'évolution de l'installation domotique et donc de ses équipements et objets.

Même google smart home a souvent du mal à interpréter des commandes multiples trop complexes et pourtant eux ils ont une AI qui tourne derrière, certainement des milliers de lignes de code et connaissent naturellement tous les objets, équipements et commandes qui composent notre système connecté à smart home.
Donc vouloir tenter de reproduire ça dans un script PHP avec 30 lignes de code c'est à mon sens un peu utopique et au final pas vraiment utile.

Pouvoir combiner 2 ou 3 interactions séparées par " et " avec le traitement minimum pour reconstruire les commandes partielles est pour moi amplement suffisant et en plus ça n'impacte pas du tout les interaction uniques, si pas de " ET " donc pas de découpe et pas de pre-traitement, c'est envoyé à l'identique au moteur jeedom, ça rend le système bien plus robuste.
Jeedom VM ESXI sur NUC
Ilot I/O Modbus Wago Z-Wave (11 volets,prises,présences) + RFXCom (sondes T°+RH, prises)
Pont Hue et une vingtaine d'ampoules,une flopée de Xiaomi aquara, Harmony Elite
8 Google Home et un PC tactile All-In accroché au mur

romanais
Actif
Messages : 1999
Inscription : 21 août 2014, 21:36
Localisation : Drôme

Re: [TUTO] IFTTT : Puissance 10

Message par romanais » 06 nov. 2018, 11:53

Bonjour !
Je me suis attelé à ton tuto, très clair !
Pour l'instant je bosse sur la partie "Température" car le reste est fonctionnel tel que je le gérais, et c'est tout ce qu'il me manque.
J'ai donc fait mon scénario, avec ton bloc code.
J'ai créé mon Applet IFTTT.
Quand je lance la commande vocale sur une simple demande, pas de souci ("Donne-moi la température dans la salle de bain"), le scénario est bien
exécuté et j'entends la température de la pièce (depuis une sonde Oregon).

Mais j'ai essayé de demander : Donne-moi la température dans la salle de bain et dans le bureau", et là ça ne passe plus.

J'ai donc testé pour commencer avec l'appel du scénario par l'url :

Code : Tout sélectionner

https://blablaba.jeedom.com/core/api/jeeApi.php?apikey=XXXXXXXXXXXXXX&type=scenario&id=127&action=start&tags=createdat%3D"November 6, 2018 at 11:45AM" phrase%3D"donne-moi la temperature dans la salle de bain et dans le bureau"
J'ai ça en log sur mon scénario

Code : Tout sélectionner

[2018-11-06 11:35:40][SCENARIO] Start : Execution provoquee par un appel API . Tags : {"#createdat#":"\"November 6, 2018 at 11:35AM\"","#phrase#":"\"donne-moi la temp\u00e9rature dans la salle de bain et dans le bureau\""}
[2018-11-06 11:35:40][SCENARIO] Exécution du sous-élément de type [action] : code
[2018-11-06 11:35:40][SCENARIO] Exécution d'un bloc code
[2018-11-06 11:35:40][SCENARIO] IFTTT request Created at : 2018-11-06 11:35:00
[2018-11-06 11:35:40][SCENARIO] IFTTT request Received at : 2018-11-06 11:35:40
[2018-11-06 11:35:40][SCENARIO] Elapsed : 40 sec
[2018-11-06 11:35:40][SCENARIO] IFTTT request time OK
[2018-11-06 11:35:40][SCENARIO] Received Sentence : "donne-moi la température dans la salle de bain et dans le bureau"
[2018-11-06 11:35:40][SCENARIO] Corrected Sentence : donne-moi la temperature via la salle de bain et dans le bureau
[2018-11-06 11:35:40][SCENARIO] Interact 1 : donne-moi la temperature via la salle de bain
[2018-11-06 11:35:40][SCENARIO] Interact 1 key command found : donne-moi la temperature
[2018-11-06 11:35:40][SCENARIO] Send sentence to interact engine
[2018-11-06 11:35:40][SCENARIO] Received response for interract 1 :     Il fait 21virgule6 degré
[2018-11-06 11:35:40][SCENARIO] Interact 2 : dans le bureau
[2018-11-06 11:35:40][SCENARIO] Interact 2 key command found :
[2018-11-06 11:35:40][SCENARIO] Send sentence to interact engine
[2018-11-06 11:35:40][SCENARIO] Received response for interract 2 :     Désolé je n'ai pas compris la demande
[2018-11-06 11:35:40][SCENARIO] All Received responses :     Il fait 21virgule6 degré et     Désolé je n'ai pas compris la demande
[2018-11-06 11:35:40][SCENARIO] Fin correcte du scénario
J'ai viré la partie "via" dans ton code, et ça me donne ça :

Code : Tout sélectionner

[2018-11-06 11:37:19][SCENARIO] Start : Execution provoquee par un appel API . Tags : {"#createdat#":"\"November 6, 2018 at 11:36AM\"","#phrase#":"\"donne-moi la temp\u00e9rature dans la salle de bain et dans le bureau\""}
[2018-11-06 11:37:19][SCENARIO] Exécution du sous-élément de type [action] : code
[2018-11-06 11:37:19][SCENARIO] Exécution d'un bloc code
[2018-11-06 11:37:20][SCENARIO] IFTTT request Created at : 2018-11-06 11:36:00
[2018-11-06 11:37:20][SCENARIO] IFTTT request Received at : 2018-11-06 11:37:20
[2018-11-06 11:37:20][SCENARIO] Elapsed : 80 sec
[2018-11-06 11:37:20][SCENARIO] IFTTT request time OK
[2018-11-06 11:37:20][SCENARIO] Received Sentence : "donne-moi la température dans la salle de bain et dans le bureau"
[2018-11-06 11:37:20][SCENARIO] Corrected Sentence : donne-moi la temperature dans la salle de bain et dans le bureau
[2018-11-06 11:37:20][SCENARIO] Interact 1 : donne-moi la temperature dans la salle de bain
[2018-11-06 11:37:20][SCENARIO] Interact 1 key command found : donne-moi la temperature
[2018-11-06 11:37:20][SCENARIO] Send sentence to interact engine
[2018-11-06 11:37:20][SCENARIO] Received response for interract 1 :     Il fait 21virgule6 degré
[2018-11-06 11:37:20][SCENARIO] Interact 2 : dans le bureau
[2018-11-06 11:37:20][SCENARIO] Interact 2 key command found :
[2018-11-06 11:37:20][SCENARIO] Send sentence to interact engine
[2018-11-06 11:37:20][SCENARIO] Received response for interract 2 :     Je ne comprends pas
[2018-11-06 11:37:20][SCENARIO] All Received responses :     Il fait 21virgule6 degré et     Je ne comprends pas
[2018-11-06 11:37:20][SCENARIO] Fin correcte du scénario
Si je dis "Donne-moi la température dans la salle de bain et donne-moi la température dans le bureau".
Il me donne bien les 2 températures : Il fait 21virgule6 degré et Il fait 20virgule9 degré

Une idée de ce que je foire stp ?
Merci à toute l'équipe pour le taf

Mon matériel

olivvvv
Timide
Messages : 378
Inscription : 16 janv. 2016, 11:34

Re: [TUTO] IFTTT : Puissance 10

Message par olivvvv » 06 nov. 2018, 12:08

Petit retour rapide après 24 heures d'utilisation.
Cela ne va pas faire avancer le truc, mais juste pour te dire @meute que tout fonctionne parfaitement !

J'ai essayer des demandes du style :

Mets france 2 et baisse le son et éteins la cuisine et salon rouge.

ça ne bronche pas !
Impressionnant.
J'en ai rêvé, tu as crée ce tuto ;)

Merci !

meute
Actif
Messages : 1102
Inscription : 26 août 2017, 11:07
Localisation : Belgique

Re: [TUTO] IFTTT : Puissance 10

Message par meute » 06 nov. 2018, 12:24

@romanais

Pour le problème de "dans" c'est car chez moi j'utilise l'astuce de dire "donne-moi .... dans ..." pour cibler la GH qui doit faire le retour
Donc moi je demande "donne-moi la température DE la cuisine DANS le bureau" et c'est donc la GH du bureau qui répond.
Et mon interaction de demande de température est définie comme ça :

Code : Tout sélectionner

donne-moi la #commande# [du |de |de l'|de la | ]#objet#[ via le séjour| via le bureau| via l'atelier| via la salle de bain|]
Ce qui permet au moteur d'interaction de traiter aussi bien "donne-moi la température de la cuisine" que "donne-moi la température de la cuisine via le bureau" (et comme tu l'as vu le "dans" est remplacé par "via" par le script)

Seul truc bizarre dans le premier log avec le remplacement de "dans" activé c'est qu'il a bien remplacé le premier "dans" par "via" mais pas le deuxième et ça ce n'est pas normal, je vais regarder pour ça.

Evidemment si tu veux formuler "donne-moi la température dans la cuisine" ça ne marche plus vu que le "dans" sera remplacé par 'via" pour qu'ensuite le reste du scénario après le code puisse envoyer la demande à la bonne GH.
Tu peut :
- soit changer tes habitudes et demander "donne-moi la température de ..." ou "donne-moi la température de ... dans ..."
- soit ne plus transformer le "dans" en "via" donc désactiver la ligne comme tu l'as fait et toujours dire alors "donne-moi la température dans ... via ..." si tu veux cibler une GH
- soit si tu ne veux pas pouvoir cibler une GH simplement oublier toute la partie "via" et son traitement dans le scénario

Pour le problème ensuite je vois qu'il n'a pas reconstruit la deuxième interaction :

Code : Tout sélectionner

[2018-11-06 11:37:20][SCENARIO] Received Sentence : "donne-moi la température dans la salle de bain et dans le bureau"
[2018-11-06 11:37:20][SCENARIO] Corrected Sentence : donne-moi la temperature dans la salle de bain et dans le bureau
[2018-11-06 11:37:20][SCENARIO] Interact 1 : donne-moi la temperature dans la salle de bain
[2018-11-06 11:37:20][SCENARIO] Interact 1 key command found : donne-moi la temperature
[2018-11-06 11:37:20][SCENARIO] Send sentence to interact engine
[2018-11-06 11:37:20][SCENARIO] Received response for interract 1 :     Il fait 21virgule6 degré
[2018-11-06 11:37:20][SCENARIO] Interact 2 : dans le bureau
[2018-11-06 11:37:20][SCENARIO] Interact 2 key command found :
[2018-11-06 11:37:20][SCENARIO] Send sentence to interact engine
Il a bien trouvé la commande clé dans la première "donne-moi la temperature" mais dans la seconde il a aussi trouvé une commande clé qui est vide

Code : Tout sélectionner

[2018-11-06 11:37:20][SCENARIO] Interact 2 key command found :
Ce qui me laisse penser que tu as dû adapter le RegEx des commandes clé et y faire une erreur pour qu'il puisse considérer qu'un espace ou je ne sais quoi puisse être considéré comme une commande clé valide.

Ca c'est ce que j'ai chez moi pour presque la même chose :

Code : Tout sélectionner

[2018-11-06 12:01:23][SCENARIO] Lancement du scénario en mode synchrone
[2018-11-06 12:01:23][SCENARIO] Start : Lancement provoqué par le scénario  : [Google][GH][IFTTT Retour]. Tags : {"#createdat#":"\"November 6, 2018 at 12:01PM\"","#phrase#":"\"donne-moi la temp\u00e9rature du bureau et de l ' hangar\""}
[2018-11-06 12:01:23][SCENARIO] Exécution du sous-élément de type [action] : code
[2018-11-06 12:01:23][SCENARIO] Exécution d'un bloc code
[2018-11-06 12:01:23][SCENARIO] IFTTT request Created at : 2018-11-06 12:01:00
[2018-11-06 12:01:23][SCENARIO] IFTTT request Received at : 2018-11-06 12:01:23
[2018-11-06 12:01:23][SCENARIO] Elapsed : 23 sec
[2018-11-06 12:01:23][SCENARIO] IFTTT request time OK
[2018-11-06 12:01:23][SCENARIO] Received Sentence : "donne-moi la température du bureau et de l ' hangar"
[2018-11-06 12:01:23][SCENARIO] Corrected Sentence : donne-moi la temperature du bureau et de l'hangar
[2018-11-06 12:01:23][SCENARIO] Interact 1 : donne-moi la temperature du bureau
[2018-11-06 12:01:23][SCENARIO] Interact 1 key command found : donne-moi la temperature
[2018-11-06 12:01:23][SCENARIO] Send sentence to interact engine
[2018-11-06 12:01:23][SCENARIO] Received response for interract 1 :
La température Bureau est de 21virgule77 degrés
[2018-11-06 12:01:23][SCENARIO] Interact 2 : de l'hangar
[2018-11-06 12:01:23][SCENARIO] Interact 2 reconstructed with last key command : donne-moi la temperature de l'hangar
[2018-11-06 12:01:23][SCENARIO] Send sentence to interact engine
[2018-11-06 12:01:23][SCENARIO] Received response for interract 2 :
La température de l'hangar est de 21virgule9 degrés
[2018-11-06 12:01:23][SCENARIO] All Received responses :
La température Bureau est de 21virgule77 degrés et
La température de l'hangar est de 21virgule9 degrés
[2018-11-06 12:01:23][SCENARIO] Fin correcte du scénario
Donc on voit qu'il trouve une clé dans la première et comme il en trouve pas dans la deuxième il utilise la première pour la reconstruire et du coup j'ai reçu un retour TTS nikel "La température Bureau est de 21virgule77 degrés et la température de l'hangar est de 21virgule9 degrés"
(Je vois juste qu'il faut que je retravaille la réponse de mon interaction pour le bureau car "la température du bureau ... " aurait été mieux mais ça ça n'a rien à voir avec le script, c'est la réponse de l'interaction jeedom qui doit être corrigée)

Peux-tu me donner ton RegEx complet pour voir où est ton erreur ?, merci

Edit, finalement donnes-moi ton script complet (sans l'ip et l'API) car chez moi toutes les occurrences de "dans" sont bien remplacées par "via" alors que dans ton premier log il n'a remplacé que le premier "dans" et pas le deuxième, il doit y avoir des modifs vraiment foireuses.
Dernière édition par meute le 06 nov. 2018, 12:59, édité 3 fois.
Jeedom VM ESXI sur NUC
Ilot I/O Modbus Wago Z-Wave (11 volets,prises,présences) + RFXCom (sondes T°+RH, prises)
Pont Hue et une vingtaine d'ampoules,une flopée de Xiaomi aquara, Harmony Elite
8 Google Home et un PC tactile All-In accroché au mur

meute
Actif
Messages : 1102
Inscription : 26 août 2017, 11:07
Localisation : Belgique

Re: [TUTO] IFTTT : Puissance 10

Message par meute » 06 nov. 2018, 12:29

olivvvv a écrit :
06 nov. 2018, 12:08
Petit retour rapide après 24 heures d'utilisation.
Cela ne va pas faire avancer le truc, mais juste pour te dire @meute que tout fonctionne parfaitement !

J'ai essayer des demandes du style :

Mets france 2 et baisse le son et éteins la cuisine et salon rouge.

ça ne bronche pas !
Impressionnant.
J'en ai rêvé, tu as crée ce tuto ;)

Merci !
De rien, en plus tu pousses les tests plus haut que moi, j'ai même pas encore essayer de combiner autant de trucs et pourtant ce sont quasiment toutes des interactions qui existent aussi chez moi :lol:
Jeedom VM ESXI sur NUC
Ilot I/O Modbus Wago Z-Wave (11 volets,prises,présences) + RFXCom (sondes T°+RH, prises)
Pont Hue et une vingtaine d'ampoules,une flopée de Xiaomi aquara, Harmony Elite
8 Google Home et un PC tactile All-In accroché au mur

romanais
Actif
Messages : 1999
Inscription : 21 août 2014, 21:36
Localisation : Drôme

Re: [TUTO] IFTTT : Puissance 10

Message par romanais » 06 nov. 2018, 14:32

Merci d'avoir décortiqué mon souci :-)
En effet, je souhaiterais plutôt conserver ma façon de demander : "dans le bureau, dans la salle de bain, etc"
Comme je me doutais que ça venait d'un truc que j'ai touché, je suis reparti de ton script d'origine (1er post).
J'ai juste commenté la ligne "via".

Code : Tout sélectionner

// Liste des mots clé de toutes vos interractions IFTTT au format RegEx,
//   ne pas utiliser les caractères accentués, le code supprime les accents de l'interaction avant traitement
$keyCommandsREgEx = ("/".
                    "(allume)(s)?( (la|les) (lumiere)(s)?)?|".
                    "(etein)(s|t)?( (la|les) (lumiere)(s)?)?|".
                    "(ouvre)(s)?( (le|les) (volet)(s)?)?|".
                    "(ferme)(s)?( (le|les) (volet)(s)?)?|".
                    "(passe)(s)?|".
                    "(activite)|".
                    "(reduis)|".
                    "(augmente)(s)?|".
                    "(donne-moi l'etat)|".
                    "(donne-moi la temperature)|".
                    "(donne-moi l’hygrometrie)|".
                    "(mode)".
                    "/i"
                    );

$delimiterREgEx = "/ et /i"; // Délimiteur pour interractions multiples au format RegEx

$tags = $scenario->getTags(); // Récupération des tags passés en paramètre.

$scenario->setData("retour_interac","" ,false); //Vide la variable de retour

// Test si le TimeStamp est fourni en tag pour continuer.
if ($tags["#createdat#"]=="") {	
    $scenario->setLog("Exit, No TimeStamp"); //Log
} else {
  // TimeStamp Fourni, on continue
  $createdAtString=str_replace('"',"",$tags["#createdat#"]); //Suppression des "" en trop dans le tag
  $createdAtTime=DateTime::createfromformat("M d, Y * h:ia", $createdAtString); //Convertion de la chaine IFTTT en DateTime
  $scenario->setLog("IFTTT request Created at : ".$createdAtTime->format('Y-m-d H:i:s')); //Log
  
  $actualDateTime=new DateTime(); //Récupération de la date et heure courante
  $scenario->setLog("IFTTT request Received at : ".$actualDateTime->format('Y-m-d H:i:s')); //Log
  
  $deltaSecs=$actualDateTime->getTimestamp() - $createdAtTime->getTimestamp(); //Calcul la différence entre les deux DateTime
  $scenario->setLog("Elapsed : ".$deltaSecs." sec");//Log
  
  // Test si la requête IFTTT a été faite dans les 90s précédentes
  //    90s car IFTTT ne fourni pas les secondes, donc une requète créée à la 59ème seconde et reçue la seconde suivante
  //    donnera déjà un delta de 60s, +30s de tolérance = 90s
  if ($deltaSecs>90) {
    $scenario->setLog("IFTTT request too old"); //Log
  } else {
    // Délai OK, on continue
    $scenario->setLog("IFTTT request time OK"); //Log
    
    $scenario->setLog("Received Sentence : ".$tags["#phrase#"]); //Log
    
    //Remplacement des caractères accentués
    $a = array('À', 'Á', 'Â', 'Ä', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Î', 'Ï', 'Ô', 'Ö', 'Ù', 'Ú', 'Û', 'Ü', 'à', 'â', 'ç', 'è', 'é', 'ê', 'î', 'ï', 'ô', 'õ', 'ö', 'ù', 'ú', 'û', 'ü');
    $b = array('A', 'A', 'A', 'A', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'O', 'O', 'U', 'U', 'U', 'U', 'a', 'a', 'c', 'e', 'e', 'e', 'i', 'i', 'o', 'o', 'o', 'u', 'u', 'u', 'u');
    $tags["#phrase#"]=str_replace($a, $b, $tags["#phrase#"]);
    
    //Correction de la phrase IFTTT pour aider les interaction
    $tags["#phrase#"]=strtolower($tags["#phrase#"]); //tout en minuscules
    $tags["#phrase#"]=str_replace('"',"",$tags["#phrase#"]); //suppression des "" en trop
    $tags["#phrase#"]=str_replace(" ' ","'",$tags["#phrase#"]); //remplace " ' " par "'" correction de l'IFTTT
    $tags["#phrase#"]=str_replace(" - ","-",$tags["#phrase#"]); //remplace " - " par "-" correction de l'IFTTT
    $tags["#phrase#"]=str_replace(" anvers"," en vert",$tags["#phrase#"]); //remplace "anvers" par "en vert" correction de l'IFTTT
    $tags["#phrase#"]=str_replace(" sans"," 100",$tags["#phrase#"]); //remplace pour correction de l'IFTTT
    $tags["#phrase#"]=str_replace(" sens"," 100",$tags["#phrase#"]); //remplace pour correction de l'IFTTT
    $tags["#phrase#"]=str_replace(" depuis "," via ",$tags["#phrase#"]); //permet de dire "depuis" ou "dans" ou "via" pour cibler la GH de retour
    //$tags["#phrase#"]=str_replace(" dans "," via ",$tags["#phrase#"]); //permet de dire "depuis" ou "dans" ou "via" pour cibler la GH de retour
    $tags["#phrase#"]=str_replace("la atelier","l'atelier",$tags["#phrase#"]); //remplace pour correction de l'IFTTT
    
    $scenario->setLog("Corrected Sentence : ".$tags["#phrase#"]); //Log
        
    $scenario->setData("phrase",$tags["#phrase#"] ,false) ; //sauvegarde de la phrase dans une variable pour la suite avant urlencode
    
    $interactArray = preg_split($delimiterREgEx,$tags["#phrase#"],5); //découpe de la phrase pour gerer les interactions multiples, maximum 5 interactions successives
    
    $InteractCount = 0;
    $KeyCommandMatches = [];
    $LastKeyCommand = "";
    
    // Traite les interactions multiples
    foreach($interactArray as $interact) {
      ++$InteractCount; 
      $scenario->setLog("Interact ".$InteractCount." : ".$interact); //Log
      
      // Trouve et mémorise la commande clé de l'interaction
      if (preg_match ($keyCommandsREgEx, $interact, $KeyCommandMatches)) {
      	$LastKeyCommand = $KeyCommandMatches[0];
      	$scenario->setLog("Interact ".$InteractCount." key command found : ".$LastKeyCommand); //Log
      }
      else {
        // Aucune commande clé trouvée, complète avec la dernière commande clé connue 
      	// Cela permet de dire "allume le salon et la cuisine" et de reconstruire deux interractions complètes "allume le salon" et "allume la cuisine"
        if ($LastKeyCommand != "")  {
            $interact = $LastKeyCommand." ".$interact;
            $scenario->setLog("Interact ".$InteractCount." reconstructed with last key command : ".$interact); //Log
        }
      }
  		
      $interactURLFormated=urlencode($interact); //encodage au format URL

      //url d'appel interaction
      $url="http://".$IPJeedom."/core/api/jeeApi.php?apikey=".$APIKey."&type=interact&query=".$interactURLFormated;

      //Exécution et récupération de la réponse des intéractions
      $scenario->setLog("Send sentence to interact engine"); //Log
      $reponseIntract=file_get_contents($url);
    
      $reponseIntract=str_replace(".","virgule",$reponseIntract); //remplace le "." par le mot "virgule" pour le retour TTS de valeurs décimales
      $scenario->setLog("Received response for interract ".$InteractCount." : ".$reponseIntract); //Log
      
      if ($InteractCount == 1) {
      	$reponseString = $reponseIntract; //Ajout de la première réponse à la string de réponse
      }
      else {
        $reponseString = $reponseString." et ".$reponseIntract; //Ajout des réponses suivantes à la string de réponse
      }
      
      $reponseArray[] = $reponseIntract; //Ajout de la réponse au array de réponses
    }
    
    
    //stockage des réponses dans une variable au format string pour post-traitement TTS par le scenario
    $scenario->setData("retour_interac",$reponseString ,false) ;
    $scenario->setLog("All Received responses : ".$reponseString); //Log
    
    //stockage des réponses dans une variable au format "array de string" pour post-traitement TTS par le scenario
    $scenario->setData("retour_interac_array",$reponseArray ,false) ;
  }
}
Si j'appelle cette url

Code : Tout sélectionner

https://xxxxxx.jeedom.com/core/api/jeeApi.php?apikey=xxxxxxxxxxx&type=scenario&id=114&action=start&tags=createdat%3D%22November%206,%202018%20at%202:30PM%22%20phrase%3D%22donne%20moi%20la%20temperature%20dans%20la%20salle%20de%20bain%20et%20dans%20le%20bureau%22
J'ai ce retour dans les logs du scénario

Code : Tout sélectionner

[2018-11-06 14:30:24][SCENARIO] Start : Execution provoquee par un appel API . Tags : {"#createdat#":"\"November 6, 2018 at 2:30PM\"","#phrase#":"\"donne moi la temperature dans la salle de bain et dans le bureau\""}
[2018-11-06 14:30:24][SCENARIO] Exécution du sous-élément de type [action] : code
[2018-11-06 14:30:24][SCENARIO] Exécution d'un bloc code
[2018-11-06 14:30:24][SCENARIO] IFTTT request Created at : 2018-11-06 14:30:00
[2018-11-06 14:30:24][SCENARIO] IFTTT request Received at : 2018-11-06 14:30:24
[2018-11-06 14:30:24][SCENARIO] Elapsed : 24 sec
[2018-11-06 14:30:24][SCENARIO] IFTTT request time OK
[2018-11-06 14:30:24][SCENARIO] Received Sentence : "donne moi la temperature dans la salle de bain et dans le bureau"
[2018-11-06 14:30:24][SCENARIO] Corrected Sentence : donne moi la temperature dans la salle de bain et dans le bureau
[2018-11-06 14:30:24][SCENARIO] Interact 1 : donne moi la temperature dans la salle de bain
[2018-11-06 14:30:24][SCENARIO] Send sentence to interact engine
[2018-11-06 14:30:24][SCENARIO] Received response for interract 1 :     Il fait 21virgule4 degré dans la salle de bain
[2018-11-06 14:30:24][SCENARIO] Interact 2 : dans le bureau
[2018-11-06 14:30:24][SCENARIO] Send sentence to interact engine
[2018-11-06 14:30:25][SCENARIO] Received response for interract 2 :     Désolé je n'ai pas compris
[2018-11-06 14:30:25][SCENARIO] All Received responses :     Il fait 21virgule4 degré dans la salle de bain et     Désolé je n'ai pas compris
[2018-11-06 14:30:25][SCENARIO] Fin correcte du scénario
Merci à toute l'équipe pour le taf

Mon matériel

meute
Actif
Messages : 1102
Inscription : 26 août 2017, 11:07
Localisation : Belgique

Re: [TUTO] IFTTT : Puissance 10

Message par meute » 06 nov. 2018, 14:38

romanais a écrit :
06 nov. 2018, 14:32
Merci d'avoir décortiqué mon souci :-)
En effet, je souhaiterais plutôt conserver ma façon de demander : "dans le bureau, dans la salle de bain, etc"
Comme je me doutais que ça venait d'un truc que j'ai touché, je suis reparti de ton script d'origine (1er post).
J'ai juste commenté la ligne "via".

Code : Tout sélectionner

// Liste des mots clé de toutes vos interractions IFTTT au format RegEx,
//   ne pas utiliser les caractères accentués, le code supprime les accents de l'interaction avant traitement
$keyCommandsREgEx = ("/".
                    "(allume)(s)?( (la|les) (lumiere)(s)?)?|".
                    "(etein)(s|t)?( (la|les) (lumiere)(s)?)?|".
                    "(ouvre)(s)?( (le|les) (volet)(s)?)?|".
                    "(ferme)(s)?( (le|les) (volet)(s)?)?|".
                    "(passe)(s)?|".
                    "(activite)|".
                    "(reduis)|".
                    "(augmente)(s)?|".
                    "(donne-moi l'etat)|".
                    "(donne-moi la temperature)|".
                    "(donne-moi l’hygrometrie)|".
                    "(mode)".
                    "/i"
                    );

$delimiterREgEx = "/ et /i"; // Délimiteur pour interractions multiples au format RegEx

$tags = $scenario->getTags(); // Récupération des tags passés en paramètre.

$scenario->setData("retour_interac","" ,false); //Vide la variable de retour

// Test si le TimeStamp est fourni en tag pour continuer.
if ($tags["#createdat#"]=="") {	
    $scenario->setLog("Exit, No TimeStamp"); //Log
} else {
  // TimeStamp Fourni, on continue
  $createdAtString=str_replace('"',"",$tags["#createdat#"]); //Suppression des "" en trop dans le tag
  $createdAtTime=DateTime::createfromformat("M d, Y * h:ia", $createdAtString); //Convertion de la chaine IFTTT en DateTime
  $scenario->setLog("IFTTT request Created at : ".$createdAtTime->format('Y-m-d H:i:s')); //Log
  
  $actualDateTime=new DateTime(); //Récupération de la date et heure courante
  $scenario->setLog("IFTTT request Received at : ".$actualDateTime->format('Y-m-d H:i:s')); //Log
  
  $deltaSecs=$actualDateTime->getTimestamp() - $createdAtTime->getTimestamp(); //Calcul la différence entre les deux DateTime
  $scenario->setLog("Elapsed : ".$deltaSecs." sec");//Log
  
  // Test si la requête IFTTT a été faite dans les 90s précédentes
  //    90s car IFTTT ne fourni pas les secondes, donc une requète créée à la 59ème seconde et reçue la seconde suivante
  //    donnera déjà un delta de 60s, +30s de tolérance = 90s
  if ($deltaSecs>90) {
    $scenario->setLog("IFTTT request too old"); //Log
  } else {
    // Délai OK, on continue
    $scenario->setLog("IFTTT request time OK"); //Log
    
    $scenario->setLog("Received Sentence : ".$tags["#phrase#"]); //Log
    
    //Remplacement des caractères accentués
    $a = array('À', 'Á', 'Â', 'Ä', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Î', 'Ï', 'Ô', 'Ö', 'Ù', 'Ú', 'Û', 'Ü', 'à', 'â', 'ç', 'è', 'é', 'ê', 'î', 'ï', 'ô', 'õ', 'ö', 'ù', 'ú', 'û', 'ü');
    $b = array('A', 'A', 'A', 'A', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'O', 'O', 'U', 'U', 'U', 'U', 'a', 'a', 'c', 'e', 'e', 'e', 'i', 'i', 'o', 'o', 'o', 'u', 'u', 'u', 'u');
    $tags["#phrase#"]=str_replace($a, $b, $tags["#phrase#"]);
    
    //Correction de la phrase IFTTT pour aider les interaction
    $tags["#phrase#"]=strtolower($tags["#phrase#"]); //tout en minuscules
    $tags["#phrase#"]=str_replace('"',"",$tags["#phrase#"]); //suppression des "" en trop
    $tags["#phrase#"]=str_replace(" ' ","'",$tags["#phrase#"]); //remplace " ' " par "'" correction de l'IFTTT
    $tags["#phrase#"]=str_replace(" - ","-",$tags["#phrase#"]); //remplace " - " par "-" correction de l'IFTTT
    $tags["#phrase#"]=str_replace(" anvers"," en vert",$tags["#phrase#"]); //remplace "anvers" par "en vert" correction de l'IFTTT
    $tags["#phrase#"]=str_replace(" sans"," 100",$tags["#phrase#"]); //remplace pour correction de l'IFTTT
    $tags["#phrase#"]=str_replace(" sens"," 100",$tags["#phrase#"]); //remplace pour correction de l'IFTTT
    $tags["#phrase#"]=str_replace(" depuis "," via ",$tags["#phrase#"]); //permet de dire "depuis" ou "dans" ou "via" pour cibler la GH de retour
    //$tags["#phrase#"]=str_replace(" dans "," via ",$tags["#phrase#"]); //permet de dire "depuis" ou "dans" ou "via" pour cibler la GH de retour
    $tags["#phrase#"]=str_replace("la atelier","l'atelier",$tags["#phrase#"]); //remplace pour correction de l'IFTTT
    
    $scenario->setLog("Corrected Sentence : ".$tags["#phrase#"]); //Log
        
    $scenario->setData("phrase",$tags["#phrase#"] ,false) ; //sauvegarde de la phrase dans une variable pour la suite avant urlencode
    
    $interactArray = preg_split($delimiterREgEx,$tags["#phrase#"],5); //découpe de la phrase pour gerer les interactions multiples, maximum 5 interactions successives
    
    $InteractCount = 0;
    $KeyCommandMatches = [];
    $LastKeyCommand = "";
    
    // Traite les interactions multiples
    foreach($interactArray as $interact) {
      ++$InteractCount; 
      $scenario->setLog("Interact ".$InteractCount." : ".$interact); //Log
      
      // Trouve et mémorise la commande clé de l'interaction
      if (preg_match ($keyCommandsREgEx, $interact, $KeyCommandMatches)) {
      	$LastKeyCommand = $KeyCommandMatches[0];
      	$scenario->setLog("Interact ".$InteractCount." key command found : ".$LastKeyCommand); //Log
      }
      else {
        // Aucune commande clé trouvée, complète avec la dernière commande clé connue 
      	// Cela permet de dire "allume le salon et la cuisine" et de reconstruire deux interractions complètes "allume le salon" et "allume la cuisine"
        if ($LastKeyCommand != "")  {
            $interact = $LastKeyCommand." ".$interact;
            $scenario->setLog("Interact ".$InteractCount." reconstructed with last key command : ".$interact); //Log
        }
      }
  		
      $interactURLFormated=urlencode($interact); //encodage au format URL

      //url d'appel interaction
      $url="http://".$IPJeedom."/core/api/jeeApi.php?apikey=".$APIKey."&type=interact&query=".$interactURLFormated;

      //Exécution et récupération de la réponse des intéractions
      $scenario->setLog("Send sentence to interact engine"); //Log
      $reponseIntract=file_get_contents($url);
    
      $reponseIntract=str_replace(".","virgule",$reponseIntract); //remplace le "." par le mot "virgule" pour le retour TTS de valeurs décimales
      $scenario->setLog("Received response for interract ".$InteractCount." : ".$reponseIntract); //Log
      
      if ($InteractCount == 1) {
      	$reponseString = $reponseIntract; //Ajout de la première réponse à la string de réponse
      }
      else {
        $reponseString = $reponseString." et ".$reponseIntract; //Ajout des réponses suivantes à la string de réponse
      }
      
      $reponseArray[] = $reponseIntract; //Ajout de la réponse au array de réponses
    }
    
    
    //stockage des réponses dans une variable au format string pour post-traitement TTS par le scenario
    $scenario->setData("retour_interac",$reponseString ,false) ;
    $scenario->setLog("All Received responses : ".$reponseString); //Log
    
    //stockage des réponses dans une variable au format "array de string" pour post-traitement TTS par le scenario
    $scenario->setData("retour_interac_array",$reponseArray ,false) ;
  }
}
Si j'appelle cette url

Code : Tout sélectionner

https://xxxxxx.jeedom.com/core/api/jeeApi.php?apikey=xxxxxxxxxxx&type=scenario&id=114&action=start&tags=createdat%3D%22November%206,%202018%20at%202:30PM%22%20phrase%3D%22donne%20moi%20la%20temperature%20dans%20la%20salle%20de%20bain%20et%20dans%20le%20bureau%22
J'ai ce retour dans les logs du scénario

Code : Tout sélectionner

[2018-11-06 14:30:24][SCENARIO] Start : Execution provoquee par un appel API . Tags : {"#createdat#":"\"November 6, 2018 at 2:30PM\"","#phrase#":"\"donne moi la temperature dans la salle de bain et dans le bureau\""}
[2018-11-06 14:30:24][SCENARIO] Exécution du sous-élément de type [action] : code
[2018-11-06 14:30:24][SCENARIO] Exécution d'un bloc code
[2018-11-06 14:30:24][SCENARIO] IFTTT request Created at : 2018-11-06 14:30:00
[2018-11-06 14:30:24][SCENARIO] IFTTT request Received at : 2018-11-06 14:30:24
[2018-11-06 14:30:24][SCENARIO] Elapsed : 24 sec
[2018-11-06 14:30:24][SCENARIO] IFTTT request time OK
[2018-11-06 14:30:24][SCENARIO] Received Sentence : "donne moi la temperature dans la salle de bain et dans le bureau"
[2018-11-06 14:30:24][SCENARIO] Corrected Sentence : donne moi la temperature dans la salle de bain et dans le bureau
[2018-11-06 14:30:24][SCENARIO] Interact 1 : donne moi la temperature dans la salle de bain
[2018-11-06 14:30:24][SCENARIO] Send sentence to interact engine
[2018-11-06 14:30:24][SCENARIO] Received response for interract 1 :     Il fait 21virgule4 degré dans la salle de bain
[2018-11-06 14:30:24][SCENARIO] Interact 2 : dans le bureau
[2018-11-06 14:30:24][SCENARIO] Send sentence to interact engine
[2018-11-06 14:30:25][SCENARIO] Received response for interract 2 :     Désolé je n'ai pas compris
[2018-11-06 14:30:25][SCENARIO] All Received responses :     Il fait 21virgule4 degré dans la salle de bain et     Désolé je n'ai pas compris
[2018-11-06 14:30:25][SCENARIO] Fin correcte du scénario
Ce coup ci tu n'as pas mis de "-" entre "donne" et "moi" dans ton URL de test et donc il ne trouve pas de commande clé vu que le RegEx cherche "donne-moi la temperature". Comme il ne trouve pas de commande clé sur la première interaction il ne peut évidemment pas l'utiliser pour compléter la seconde et donc il transmet simplement les deux interactions tel qu'il les reçoit.

Soit tu ajoute une ligne au RegEx avant le "/i"avec "(donne moi la temperature)|". ou tu corrige la demande pour y mettre un "-"

Ou encore mieux tu modifie simplement le RegEx "(donne-moi la temperature)|". en "(donne(-| )moi la temperature)|".
Jeedom VM ESXI sur NUC
Ilot I/O Modbus Wago Z-Wave (11 volets,prises,présences) + RFXCom (sondes T°+RH, prises)
Pont Hue et une vingtaine d'ampoules,une flopée de Xiaomi aquara, Harmony Elite
8 Google Home et un PC tactile All-In accroché au mur

romanais
Actif
Messages : 1999
Inscription : 21 août 2014, 21:36
Localisation : Drôme

Re: [TUTO] IFTTT : Puissance 10

Message par romanais » 06 nov. 2018, 14:46

Chapeau, t'as vraiment l'oeil, je m'embrouillais à force.
J'ai donc ajouté la regex, et tout roule pour cette partie, avec "donne moi" ou "donne-moi", j'ai bien l'info.

Code : Tout sélectionner

 "(donne-moi la temperature)|".
 "(donne moi la temperature)|".

Code : Tout sélectionner

[2018-11-06 14:42:57][SCENARIO] Start : Execution provoquee par un appel API . Tags : {"#createdat#":"\"November 6, 2018 at 2:42PM\"","#phrase#":"\"donne moi la temperature dans la salle de bain et dans le bureau\""}
[2018-11-06 14:42:57][SCENARIO] Exécution du sous-élément de type [action] : code
[2018-11-06 14:42:57][SCENARIO] Exécution d'un bloc code
[2018-11-06 14:42:57][SCENARIO] IFTTT request Created at : 2018-11-06 14:42:00
[2018-11-06 14:42:57][SCENARIO] IFTTT request Received at : 2018-11-06 14:42:57
[2018-11-06 14:42:57][SCENARIO] Elapsed : 57 sec
[2018-11-06 14:42:57][SCENARIO] IFTTT request time OK
[2018-11-06 14:42:57][SCENARIO] Received Sentence : "donne moi la temperature dans la salle de bain et dans le bureau"
[2018-11-06 14:42:57][SCENARIO] Corrected Sentence : donne moi la temperature dans la salle de bain et dans le bureau
[2018-11-06 14:42:57][SCENARIO] Interact 1 : donne moi la temperature dans la salle de bain
[2018-11-06 14:42:57][SCENARIO] Interact 1 key command found : donne moi la temperature
[2018-11-06 14:42:57][SCENARIO] Send sentence to interact engine
[2018-11-06 14:42:57][SCENARIO] Received response for interract 1 :     Il fait 21virgule4 degré dans la salle de bain
[2018-11-06 14:42:57][SCENARIO] Interact 2 : dans le bureau
[2018-11-06 14:42:57][SCENARIO] Interact 2 reconstructed with last key command : donne moi la temperature dans le bureau
[2018-11-06 14:42:57][SCENARIO] Send sentence to interact engine
[2018-11-06 14:42:57][SCENARIO] Received response for interract 2 :     Il fait 21 degré dans le bureau
[2018-11-06 14:42:57][SCENARIO] All Received responses :     Il fait 21virgule4 degré dans la salle de bain et     Il fait 21 degré dans le bureau
[2018-11-06 14:42:57][SCENARIO] Fin correcte du scénario
Je vais m'atteler au retour TTS à présent :-)
Merci à toute l'équipe pour le taf

Mon matériel

romanais
Actif
Messages : 1999
Inscription : 21 août 2014, 21:36
Localisation : Drôme

Re: [TUTO] IFTTT : Puissance 10

Message par romanais » 06 nov. 2018, 15:26

Je me suis fait une petite modif sur la fin de ton script.

Code : Tout sélectionner

    //stockage des réponses dans une variable au format string pour post-traitement TTS par le scenario
    $scenario->setData("retour_interac",str_replace("     Il fait","",$reponseString),false) ;
    $scenario->setLog("All Received responses : ".str_replace("     Il fait","",$reponseString)); //Log
En cas de demande de température dans 2 pièces, j'ai ça en retour à présent (et ça ne change bien sûr rien pour la demande d'une seule température):
[2018-11-06 15:23:34][SCENARIO] All Received responses : Il fait 22virgule1 degré dans la cuisine et 23virgule3 degré dans le cellier
Merci à toute l'équipe pour le taf

Mon matériel

meute
Actif
Messages : 1102
Inscription : 26 août 2017, 11:07
Localisation : Belgique

Re: [TUTO] IFTTT : Puissance 10

Message par meute » 06 nov. 2018, 15:50

romanais a écrit :
06 nov. 2018, 15:26
Je me suis fait une petite modif sur la fin de ton script.

Code : Tout sélectionner

    //stockage des réponses dans une variable au format string pour post-traitement TTS par le scenario
    $scenario->setData("retour_interac",str_replace("     Il fait","",$reponseString),false) ;
    $scenario->setLog("All Received responses : ".str_replace("     Il fait","",$reponseString)); //Log
En cas de demande de température dans 2 pièces, j'ai ça en retour à présent (et ça ne change bien sûr rien pour la demande d'une seule température):
[2018-11-06 15:23:34][SCENARIO] All Received responses : Il fait 22virgule1 degré dans la cuisine et 23virgule3 degré dans le cellier
Attends, je prépare un truc pour ça aussi ... mais plus redistribuable aussi avec un principe de regex mais c'est pas encore fini.
Ta solution marche oui mais est vraiment très/trop spécifique à ton application.

D'ailleurs pourquoi as tu autant d'espaces devant tes retours jeedom ?
Et si tu ne peux pas les éviter il n'est malgré tout pas utile de les inclures dans le (str_replace) remplacer "Il fait" suffit, avoir trop d'espaces dans une chaine de réponse TTS ne pose pas de problème car le moteur TTS les subprimes pour n'en laisser qu'un. Bien que à mon avis c'est l'espace en plus après le "et" dans la deuxième réponse qui te permet de ne pas retirer aussi le "il fait" de la première.
Jeedom VM ESXI sur NUC
Ilot I/O Modbus Wago Z-Wave (11 volets,prises,présences) + RFXCom (sondes T°+RH, prises)
Pont Hue et une vingtaine d'ampoules,une flopée de Xiaomi aquara, Harmony Elite
8 Google Home et un PC tactile All-In accroché au mur

romanais
Actif
Messages : 1999
Inscription : 21 août 2014, 21:36
Localisation : Drôme

Re: [TUTO] IFTTT : Puissance 10

Message par romanais » 06 nov. 2018, 15:56

Aucune idée pour les multiples espaces, j'ai cherché mais pas trouvé ce qui génère ça.
Et j'ai en effet profité de cette particularité pour supprimer en toute sécurité le 2ème "il fait".
Merci pour les astuces/infos.
Bon j'attends avec impatience ta nouvelle invention alors ^_^
Merci à toute l'équipe pour le taf

Mon matériel

meute
Actif
Messages : 1102
Inscription : 26 août 2017, 11:07
Localisation : Belgique

Re: [TUTO] IFTTT : Puissance 10

Message par meute » 06 nov. 2018, 18:08

Ca va plus trop tarder, j'ai encore un soucis avec un preg_match qui veut rien savoir puis ça sera bon.

Pour les espaces j'ai trouvé et ils auront disparus avec le nouveau script, ce qui est étrange c'est que chez moi j'ai des espaces aussi mais je ne les voyais pas car j'ai aussi un "CR/LF" qui me fait un renvoi à la ligne et qui les caches alors que toi tu ne l'as pas à première vue, ça doit être lié à une différence de version de quelque chose, PHP ou Apache ou je ne sais quoi et on les choppes en faisant le "file_get_contents" en récupérant le retour de l'interaction.
Jeedom VM ESXI sur NUC
Ilot I/O Modbus Wago Z-Wave (11 volets,prises,présences) + RFXCom (sondes T°+RH, prises)
Pont Hue et une vingtaine d'ampoules,une flopée de Xiaomi aquara, Harmony Elite
8 Google Home et un PC tactile All-In accroché au mur

romanais
Actif
Messages : 1999
Inscription : 21 août 2014, 21:36
Localisation : Drôme

Re: [TUTO] IFTTT : Puissance 10

Message par romanais » 06 nov. 2018, 22:07

C'est ce que je voyais dans les logs du scénario.
Côté version je ne saurais trop te dire, suis sur un Rpi3 avec Jeedom à jour en version officielle.
Bon courage
Merci à toute l'équipe pour le taf

Mon matériel

meute
Actif
Messages : 1102
Inscription : 26 août 2017, 11:07
Localisation : Belgique

Re: [TUTO] IFTTT : Puissance 10

Message par meute » 06 nov. 2018, 22:35

romanais a écrit :
06 nov. 2018, 22:07
C'est ce que je voyais dans les logs du scénario.
Côté version je ne saurais trop te dire, suis sur un Rpi3 avec Jeedom à jour en version officielle.
Bon courage
J'ai fais l'update du script, les explications arrivent le temps que je les écrivent ... mais bon le script est commenté comme pas possible ...
Pour info tous les paramètres sont rassemblés en début de script, même les remplacement à faire maintenant, dans une section délimitée et appelée "paramètres utilisateur"
Dernière édition par meute le 07 nov. 2018, 00:07, édité 1 fois.
Jeedom VM ESXI sur NUC
Ilot I/O Modbus Wago Z-Wave (11 volets,prises,présences) + RFXCom (sondes T°+RH, prises)
Pont Hue et une vingtaine d'ampoules,une flopée de Xiaomi aquara, Harmony Elite
8 Google Home et un PC tactile All-In accroché au mur

romanais
Actif
Messages : 1999
Inscription : 21 août 2014, 21:36
Localisation : Drôme

Re: [TUTO] IFTTT : Puissance 10

Message par romanais » 06 nov. 2018, 22:44

Yes je regarde ça demain matin ! Merci encore !
Merci à toute l'équipe pour le taf

Mon matériel

FramboiseNorris
Timide
Messages : 5
Inscription : 07 nov. 2018, 06:54

Re: [TUTO] IFTTT : Puissance 10 V2

Message par FramboiseNorris » 07 nov. 2018, 07:02

Bonjour,

Le tuto que vous avez partager est tres utile.

Répondre

Revenir vers « Discussions Générales »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 5 invités