Commandes simples avec 1 applet IFTTT

Tags: #<Tag:0x00007f38582920d8>

Salut a tous,

Ci-apres un petit resume de mes bidouilles du jour afin d’utiliser IFTTT avec 1 seul applet pour commander les equipemets / scenarios / etc …
Desole, j’ecris depuis un PC anglais et je n’ai donc pas de touche avec nos caracteres francais …

Comme deja trouve sur la toile, il existe des methodes pour utiliser IFTTT avec 1 seul applet et faire la liaison avec Jeedom par les interractions, ceci je ne souhaitais pas le faire.
J’ai aussi trouve des articles montrant comment envoyer le TextField de l’applet IFTTT vers des Tags de scenario mais les Tags n’acceptent pas les caracteres speciaux et des lors qu’un TextField en contient un alors rien n’arrive (dumoins chez moi) …

J’ai donc utilise une variable comme moyen de passer la phrase venant du TextField de IFTTT et le scenario de Jeedom et ca fonctionne!

Petite demonstration:

1) Creer son unique applet IFTTT
image
image
image

Donc des qu’on va dire ‹ OK GOOGLE, Jeedom allume la lumiere de la cuisine ›, le signe $ va etre utilise en tant que TextField et c’est ce que je souhaite renvoyer a Jeedom pour l’interpreter dans un scenario.

Il faut noter que le champ URL est construit de cette maniere:
https://monjeedom.jeedom.com/core/api/jeeApi.php?apikey=MonAPIKey&type=variable&name=IFTTT&value={{TextField}}

Cette commande va envoyer la valeur du TextField (autrement dit, ce que l’on demande a son Google Home) dans la variable ‹ IFTTT › dans Jeedom.

2) Construction du scenario dans Jeedom

Le scenario est tres simple et va contenir l’ensemble des commandes que l’on souhaite piloter depuis notre Google Home.

image

Voyez que le scenario est simplement declanche par la variable ‹ IFTTT ›.
Autrement dit, des que l’on passe un ordre a son Google Home, IFTTT recupere cette commande et va l’envoyer dans la variable ‹ IFTTT › de Jeedom et hop le scenario se declanche.

Pour les actions, super simple aussi:
image

J’ai mis un popup (pour debugguer et recuperer la phrase envoye depuis IFTTT).
Ceci me sert car la aussi les caracteres speciaux ne passent pas mais ce n’est pas important… ce qui est important est de recuperer la chaine de caracteres qu’intercepte Jeedom.
Puis les actions sont super simples a creer, il suffit de comparer la variable ‹ IFTTT › par le texte/string que l’on souhaite identifer puis d’executer une commande en fonction.
Si variable(IFTTT) == « allume la lumi?re de la cuisine » alors execute la commande sur mon equipement.

Voila c’est tout :slight_smile:

Sebastien

2 J'aimes

Encore mieux… la tout y est, on peut meme gerer la puissance des lampes …

Petit CODE a rajouter dans le scenario.
Ainsi le message SIMPLE venant de IFTTT est analyse par le script et le decoupe:
En gros, si on veut regler l’intensite d’une lampe on dirait ceci:

OK GOOGLE, Jeedom lumiere du salon a 60 %

S’il y a ‹ % › ou ‹ pourcents › a la fin du message alors le script va decouper la premiere partie comme etant la phrase (et stocker dans la variable IFTTTMessage) et la second partie comme etant le chiffre de variation a donner a l’equipement (et stocker dans la variable IFTTTNumber)

image

$arg = $scenario->getData('IFTTT');
$message = $arg;
$number = -1;

if (strpos($arg, '%')  !== false || strpos($arg, 'pourcents')  !== false) {
	$pos = my_ofset($arg);
  	$number = substr($arg, $pos, strlen($arg)-$pos);
  	$number = substr($number, 0, strpos($number, ' ')); 
	$message = substr($arg, 0, $pos);
}

$scenario->setData('IFTTTMessage', trim(strtolower($message)));
$scenario->setData('IFTTTNumber', trim(strtolower($number)));

function my_ofset($text){
    preg_match('/^\D*(?=\d)/', $text, $m);
    return isset($m[0]) ? strlen($m[0]) : false;
}

Pour l’action sur la commande d’un variateur ca donne ceci:
image

Ahhh c’est cool !

Sebastien

1 J'aime

C’est du génie :flushed::flushed::flushed:
Bravo, je vais tester c’est super :+1::ok_hand::pray::clap:

1 J'aime

Tu es un chef Sattaz !!!

Si votre Google home vous dit qu’elle ne comprend pas, faire un reset de l’enceinte, je l’ai fait et tout fonctionne à la perfection. Vérifier bien dans le popup quand une demande ne fonctionne pas ça peut être un problème de majuscule que Google a inséré à « Prise » par exemple et donc si votre phrase de comparaison est « allume la prise du salon » ça ne va pas marcher.

1 J'aime

@marco67660, j’ai modife le script et maintenant tout arrive uniquement en minuscule …

1 J'aime

Bonjour,
D’abord un grand merci à Sattaz pour l’astuce car j’avais 163 applets et je ne savais pas comment j’allais faire.
J’ai juste un petit souci avec les caractères spéciaux : é è …
Exemple : « allumer le salon » ok mais « éteindre le salon » erreur.
J’ai essayé de rajouter : « &utf8=1 » mais cela ne marche pas.

Voici ce que je reçois : [MySQL] Error code : 22007 (1366). Incorrect string value: ‹ \xE9teind… › for column jeedom.dataStore.value at row 1 : UPDATE dataStore SET id = :id, type = :type, link_id = :link_id, key = :key, value = :value WHERE id = :id

Merci d’avance

Bonjour je ne comprends pas a quoi ça sert de s’embêter a créer une action dans jeedom pour chaque phrase

Cela fonctionne très bien avec les interactions

1 J'aime

Bonjour bartounet,
Je suis novice mais je n’ai rien contre les interactions que j’utilisais avant.
Mais comment actionner une interaction avec la voix ?
Merci

Il y a des tutos partout
Je te laisse chercher
Tu tappes sur Google jeedom interaction Google home
Y en a des dizaines

Merci pour ta réponse.
J’avais déjà fait des recherches : DialogFlow, Goolgle SmatHome …
Mais il faut un abonnement Jeedom, ce qui ne me gêne pas en soit (12€/an), mais est-ce que les caractères spéciaux vont marcher et là je n’ai rien trouvé ?

Effectivement, comme @bartounet, j’ai également du mal à comprendre l’intérêt de passer par des actions plutôt que des intéractions.
L’avantage des intéractions est qu’il y a une certaine tolérances aux erreurs (y compris les caractères spéciaux). Si on dit « allumer LE lumière », avec les intéractions la lumière s’allumera quand même (cf Reglages->Système->Interactions: Sensibilité). Alors qu’avec les actions, la lumière ne sera pas commandée. => Si quelqu’un peux m’expliquer si j’ai raté qqch

Pour info, dans IFTTT, je remplace « Jeedom $ » par « Peux tu $ ». Celà me donne des phrases très naturelles telles que « OK google, peux tu allumer la lumière ».

Oui,
pour moi ce fonctionnement reste « la roue de secours »
je l’utilise vraiment en dernier recours.

La famille ne pense pas à dire Ok Google, Jeedom …

Je préfère passer par le plugin GSH et avoir des vraies phrases naturelle

Oui, moi aussi je passe par « Peux tu $ ».
C’est le retour « Peux tu allumer le salon » : ça marche
mais « Peux tu éteindre le salon » : erreur à cause du « é »
Après dans mon scénario je récupère cette variable et je rajoute même des « ou » pour pas trop verrouiller la réponse.

Salut,

Tout a fait d’accord avec vos commantaires… j’ai fais ce script / test pour m’amuser a remplacer ce que j’avais avec IFTTT mais l’astuce des interractions est bien sympa aussi.
Le top c’est quand meme GSH avec le service Jeedom, on a fait le test chez un ami et c’est vraiment au point.

Maintenant pour ceux qui mentionnent le problemes des erreurs lors de l’utilisation de caracteres speciaux, sous quelle version de Jeedom etes-vous?
Moi en 3.3.22 sous Debian lorsque IFTTT me retourne des caracteres speciaux j’ai un ‹ ? › qui se glisse dans la phrase a la place de ce caractere, exemple:
allume la lumi?re de la cuisine

Mais ceci je peux l’exploiter…

Sebastien

Bonjour,
Je suis en 4.0.61
J’aime bien aller au fond des choses, c’est pour cela que je cherchais.
Mais il faut savoir lâcher l’affaire quand on ne peut pas la résoudre.
Je vais donc me pencher sur GSH.
Merci

Poussons le bouchon un peu plus loin :slight_smile:

Par simple interret, afin d’obtenir le meme resultat qu’avec les interractions Jeedom (ou meme plus) j’ai fait appliquer ces changements:

  1. Dans le script:
$arg = $scenario->getData('IFTTT');
$message = $arg;
$number = -1;

if (strpos($arg, '%')  !== false || strpos($arg, 'pourcents')  !== false) {
	$pos = my_ofset($arg);
  	$number = substr($arg, $pos, strlen($arg)-$pos);
  	$number = substr($number, 0, strpos($number, ' ')); 
	$message = substr($arg, 0, $pos);
}

$scenario->setData('IFTTTMessage', trim(strtolower($message)));
$scenario->setData('IFTTTNumber', trim(strtolower($number)));

function my_ofset($text){
    preg_match('/^\D*(?=\d)/', $text, $m);
    return isset($m[0]) ? strlen($m[0]) : false;
}

function contains_words($string, $array_of_words)
{
   if (!$array_of_words) return false;
 
   $i = 0;
 
   foreach ($array_of_words as $words)
   {
        if (strpos($string, $words) !== FALSE) $i++;
   }
 
   return ($i == count($array_of_words)) ? true : false;
}

// On utilisera la variable IFTTTMessage pour faire parler notre Google Home, c'est la reponse a la commande execute. Je vide cette variable au debut.
$scenario->setData("IFTTTMessage", "");

// Exemples pour allumer ou eteindre une lumiere: si la phrase de du retour IFTTT dans la variable $message contient '?tein' et 'lumi' et 'rez' (lorsque je dis 'ok google peux-tu ETEINdre les LUMIeres du REZ-de-chausse') alors j'attribue la valeur 'Les lumieres du rez-de-chaussée vont s'éteindre'.
// Idem avec 'ALLUme la LUMIere de la cuisine', ici j'attribue la a la variable IFTTTMessage la valeur 'Lumière cuisine allumée'
if(contains_words(trim(strtolower($message)), array("?tein", "lumi", "rez")))
{
  $scenario->setData("IFTTTMessage", "Les lumières du rez-de-chaussée vont s'éteindre");
}

if(contains_words(trim(strtolower($message)), array("allum", "lumi", "cuisine")))
{
  $scenario->setData("IFTTTMessage", "Lumière cuisine allumée");
}

// Pour le reglage de l'intensite d'une lampe c'est pareil, je procede comme suit:
if(contains_words(trim(strtolower($message)), array("lumi", "bar")) && $number != -1)
{
  $scenario->setData("IFTTTMessage", "Lumière du bar à " .$number. " %");
}

// Pour le lancement d'un scenario c'est aussi fonctionnel: 'ok google peux-tu me dire quelle est la PROduction PHOTOvoltaique?' declanchera le scenario 73 ...
if(contains_words(trim(strtolower($message)), array("prod", "photo")) || contains_words(trim(strtolower($message)), array("prod", "?lec")))
{
  $scenario = scenario::byId(73);
  $scenario->launch();
}
  1. Les blocs d’actions:
    Puis dans le scenario je cree un bloc SI/ALORS pour chacune des actions a faire en fonction de la variable IFTTTMessage et/ou IFTTTNumber:

Pour une action simple (ex:allumer la lumiere de la cuisine):
image

Pour varier l’intensite sur une lumiere:
image

  1. On fait parler notre Google Home
    Tout a la fin du scenario on place une condition, si notre variable IFTTTMessage contient quelque chose (rappelez-vous au debut du script je la vide) c’est qu’un retour de IFTTT a ete reconnu par notre script. Alors je le fais dire par Google Home:
    image

Pour ceux que cela interresse.
Avec ceci on n’est plus limite a dire des phrases specifiques mais il suffit d’inclure des mots clefs!

:slight_smile:

Sebastien

1 J'aime

Ce script a l’air super, mais dans la recette IFTTT quand je met

https://xxxxxx/jeeApi.php?apikey=xxxxxx&type=variable&name=IFTTT&value={{TextField}}

il me dit que l’ingrédient {{TextField}} n’existe pas, c’est réservé à la version payante ?

Tu as bien créé une requête de type ‹ Say a phrase with a text ingredient › ?

1 J'aime

Merci c’était exactement ça et ça fonctionne à merveille! j’avais édité une ancienne recette sans cette option, du coup j’en ai fait une nouvelle avec cette requête. J’adore, merci pour le partage.

1 J'aime

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.