Petit tuto à l'approche des fêtes ...
Je viens de m'équiper complètement en portier vidéo "Ring", avec un Elite au portail alimenté en POE et un Pro à la porte d'entrée alimenté par transfo + 3 Chimes.
Donc dès réception et une fois l'installation faite en une soirée hier soir en remplacement d'un portier vidéo vieux de 12 ans et non connecté de chez Bticino se pose évidemment la question de son interaction avec jeedom ...
Mon instinct m'avait fait rajouter il y a quelques années un câble Ethernet "au cas où" jusqu'au portail en plus du "2 fils" nécessaire au vieux bticino ... ce qui m'a évidemment fait gagner du temps ...
La partie portier vidéo "pure" avec les application Smartphone et PC est suffisante en soit pour sa fonctionnalité principale, la domotique n'apporterait donc pas grand chose de plus en terme de "portier vidéo" ... mais par contre qui ne voudrais pas allumer l'éclairage de son entrée quand on sonne ou balancer en plus un message dans ses Google Home ? Et là l'interconnection domotique prend tout son sens
Donc pour arriver à nos fins on va une fois de plus faire appel à IFTTT ... et ce de façon sécurisée dans la même veine que ce que l'on peut faire pour de l'interaction GH via ce tuto : viewtopic.php?f=59&t=40578
Mais dans ce cas ci c'est beaucoup plus simple ...
Etape 1
Créer un scénario appelé par exemple "IFTTT Event" et noter son ID pour la suite
Dans ce scénario on commence avec un bloc de code et ensuite on continue avec les différentes actions à effectuer pour chaque "Event" que l'on va définir ensuite dans les applets IFTTT
Le bloc de code à copier/coller dans lequel il n'y a aucun paramètre à modifier, il marchera chez tout le monde sans modification :
Ce code gère la sécurisation du délai de la commande IFTTT via le "CreatedAT" et rejette tout ce qui est plus vieux que 90 secondes pour éviter les mauvaises surprises ...
Code : Tout sélectionner
$tags = $scenario->getTags(); // Récupération des tags passés en paramètre.
$scenario->setData("event","" ,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 Event : ".$tags["#event#"]); //Log
//stockage de l'event reçu pour traitement dans le scénario
$scenario->setData("event",$tags["#event#"] ,false) ;
}
}
- event "ring fence" pour le portier du portail qui lance un TTS sur mes GH
- event "ring door" pour le portier de la porte qui lance aussi un TTS sur mes GH
A noter que ces deux event ne sont exécutés que si la maison n'est pas sous alarme et pas en mode absence ...
Viendra ensuite s'ajouter quelques trucs comme l'allumage de certains éclairages ou tout ce qui me passera d'autre par la tête plus tard ...
Etape 2
Ajouter le service "Ring" à son compte IFTTT et le lier au compte utilisateur chez "Ring"
Etape 3
Première applet avec en "If This" l'événement suivant ( pour info mon portier du portail se nomme "Grille") :
et en "Then That" un Webhooks :
Dans l'URL on mets cela, en remplaçant le nom de domaine par celui de votre accès externe à jeedom :
Code : Tout sélectionner
https://votreNomDeDomaine/core/api/jeeApi.php
Ensuite on va utiliser dans le body cette commande :
Code : Tout sélectionner
apikey=VotreCléAPI&type=scenario&id=votreIDScenario&action=start&tags=createdat%3D"{{CreatedAt}}"%20event%3D"ring fence"
Et d"adapter le nom d'event qui chez moi est "ring fence" pour mon portail, j'aurais pu mettre n'importe quoi d'autre comme nom et ensuite l'utiliser dans la suite du scénario.
Et voilà c'est terminé, maintenant lorsque l'on sonne chez vous le scénario jeedom associé sera exécuté, sécurisé et vous pourrez prendre toutes les mesures nécessaires pour faire fuire ce foutu vendeur d'aspirateur ou votre belle-mère ... comme en allumant une électrovanne branchée sur l'eau de ville pour leur en mettre plein les yeux ou ouvrir la porte de la niche du chien ...
Évidemment cet exemple s'applique à "Ring" mais fonctionnera aussi avec tout autre service qui peut être associé à IFTTT, et la liste s'allonge de jour en jour ... il suffit de faire un webhooks en réaction de n'importe quoi qui pointe vers ce même scénario avec un nom d'event adapté pour ensuite pouvoir le traiter dans la suite du scénario. Une nouvelle porte vers encore plus d'interaction avec le monde extérieur et des equipements exotiques vient de s'ouvrir ...