Aller au contenu

jpr105

Membres confirmés
  • Compteur de contenus

    86
  • Inscription

  • Dernière visite

Réputation sur la communauté

14 Good

À propos de jpr105

  • Rang
    Membre interessé
  • Date de naissance 29/11/1949

Profile Information

  • Sexe :
    Homme
  • Ville :
    Metz
  • Intéret :
    Tant que la curiosité sera là ...
  • Box
    Home Center 2
  • Version
    4.510

Visiteurs récents du profil

455 visualisations du profil
  1. jpr105

    J’ai craqué....

    Tu comprends donc mieux ma demande : je cherche à piloter l'abat-jour du salon avec la touche "domotique" N°1 de ma télécommande Harmony ... sachant que cet abat-jour est une ampoule Philips commandée exclusivement par le Hub ZigBee d'Alexa ! OK je peux dire "Alexa, éteins l'abat-jour" mais ce serait nickel de le commander AUSSI via la télécommande Harmony et/ou l'appli Fibaro. D'où cette demande d'amélioration exposée ici : Ouvrir l'accès au Hub ZigBee de l'Echo plus ... et, sans vouloir être relou, n'hésite pas à voter pour Cordialement - Jean-Paul
  2. jpr105

    J’ai craqué....

    C’est une LG 55EG920V mais peut importe le modèle, ce qui fait la différence c’est la Harmony Élite ... un vrai bijou cet engin. Grâce au logiciel My Harmony et à HA-Bridge on peut quasi tout faire. Cordialement - Jean-Paul
  3. jpr105

    J’ai craqué....

    Bonjour, Finalement j'ai pas mal échangé avec le support Alexa et ils m'ont conseillé de poster une demande d'évolution qui sera prise en compte, ou non, en fonction des votes recueillis (ils utilisent UserVoice.com pour gérer toutes ces demandes). Vos coups de pouces seront donc bienvenus en allant voter ici : Locally control ZigBee devices connected to my Echo Plus Hub Merci d'avance - Jean-Paul PS : je m'éclate vraiment avec Alexa ... je cherchais un moyen de fédérer toutes mes différentes applis en un seul et même outil et ça commence à le faire Commandes vocales 'Saulny' disponibles au 29/12/2018 1 - Concernant les lampes du bas : Alexa, allume l'abat-jour ----> seul appareil commandé en ZigBee Alexa, éteins l'abat-jour Alexa, règle l'abat-jour à x% Alexa, allume l'étagère Alexa, éteins l'étagère Alexa, allume le plafonnier du salon Alexa, éteins le plafonnier du salon Alexa, règle le plafonnier du salon à x% Alexa, allume l'applique Alexa, éteins l'applique Alexa, règle l'applique à x% Alexa, allume le plafonnier de la salle à manger Alexa, éteins le plafonnier de la salle à manger Alexa, règle le plafonnier de la salle à manger à x% Alexa, allume le rez-de-chaussée Alexa, éteins le rez-de-chaussée Alexa, allume le soir ----> concerne Abat-jour, Etagère et Applique Alexa, éteins le soir Alexa, allume le jardin Alexa, éteins le jardin Alexa, allume la cour Alexa, éteins la cour 2 - Appartée concernant l'étagère, l'applique et le plafonnier du salon ----> Ces lampes se commandent aussi par la télécommande Harmony, touches domotiques 2, 3 et 4 ----> La touche domotique 1 est réservée à l'abat-jour qui sera peut-être commandé par autre chose qu'Alexa 3 - Concernant les volets roulants Alexa, ouvre les volets Alexa, ferme les volets ----> tous sauf celui de la véranda Alexa, ferme les volets 4 - Concernant le multimédia Alexa, allume la télé Alexa, éteins la télé Alexa, allume le replay ----> pour SmartShare Alexa, allume le lecteur ----> pour le Blu-ray OPPO Alexa, allume la Chromecast Alexa, la Une Alexa, la Deux Alexa, la Trois Alexa, Canal Plus Alexa, la Cinq Alexa, la Six Alexa, Arte Alexa, plus fort la télé Alexa, moins fort la télé Alexa, pas de son Alexa, remets le son 5 - Concernant le multi-room (SoundTouch Bose) Alexa, mets ... nom de la radio ... sur le salon Alexa, mets ... nom de la radio ... sur la salle à manger Alexa, mets ... nom de la radio ... sur la cuisine 6 - Concernant Netatmo Alexa, quelle est la température dans la véranda Alexa, règle la température véranda à xx ou xx.y (dire point et non virgule) Alexa, demande à Netatmo quelle est la température extérieure Alexa, demande à Netatmo quelle est l'humidité extérieure Alexa, demande à Netatmo quelle est la vitesse du vent Alexa, demande à Netatmo quelle est la température intérieure Alexa, demande à Netatmo quelle est la température intérieure dans la réserve 7 - Services Alexa, départ ----> pour signaler notre départ de la maison à Welcome Netatmo Alexa, retour ----> pour signaler notre retour à Welcome Netatmo Alexa, redémarre le pont ----> pour redémarre le pont Philips Hue virtuel, en fait redémarre le Raspberry Alexa, coupe le Oui Fi ----> pour couper le Wi-Fi la nuit ... et Alexa coupe la branche sur laquelle elle est assise ! Alexa, découvre mes appareils
  4. jpr105

    pb volet roulant

    Perso j'ai testé et laissé tomber le skill Fibaro qui "ramène" trop de choses à Alexa. J'ai privilégié HA-Bridge. Il reconnait bien tout l'univers Fibaro et on peut ainsi "donner à voir" à Alexa que ce que l'on souhaite ... C'est un peu plus fastidieux mais au combien plus "propre" et plus "maitrisé" Bon courage
  5. Bonjour les amis, Rien que le titre tient de l'exploit et comme le dit @Nico ici ... cela va être compliqué ... En bref, je souhaite avoir accès aux périphériques ZigBee connectés à mon Echo Plus. Après contact avec le support développeurs de chez Amazon, il m'a été demandé de poster ma demande sur leur site "boîte à idées", ce que j'ai fait ici : https://alexa.uservoice.com/forums/906892-alexa-skills-developer-voice-and-vote/suggestions/36349165-locally-control-zigbee-devices-connected-to-my-ech Sachant que ceci est basé sur un système de votes, puis-je compter sur vous pour "propulser" cette idée dans le top 10 grâce à vos votes zélés et empressés Merci d'avance et bonnes fêtes à tous - Jean-Paul
  6. jpr105

    J’ai craqué....

    C’est un peu la piste à laquelle je pensais : API Alexa ... bonjour le « chronophage »
  7. jpr105

    J’ai craqué....

    Bonjour @Nico Je crois que l'on ne parle pas de la même chose ... ou bien tu as répondu à un autre post Je parle de l'ampoule Philips HUE livrée avec Alexa et commandée seulement par Alexa. Je précise que je n'ai pas de Hub HUE hormis le « Virtuel » HA-Bridge
  8. jpr105

    J’ai craqué....

    Bonjour les amis, Donc le Black Friday aidant j'ai craqué moi aussi et j'ai pris le kit « Nouvel Echo Plus (2ème génération), Tissu sable + Ampoule connectée Philips Hue » https://www.amazon.fr/gp/product/B07H334QWK/ref=oh_aui_detailpage_o01_s00?ie=UTF8&th=1. Je pensais avoir un pont vers le monde ZigBee ... et bien ce n'est pas si simple. L'ampoule livrée avec le kit est bien commandable par Alexa mais j'aimerais aussi l'inclure dans le monde « Fibaro » (Http, Api, HA-Bridge, VD ... que sais-je ?) Quelqu'un a t-il une idée SVP ? Merci d'avance - Jean-Paul
  9. Non je n'avais rien trouvé sur le projo dans les API ... peut-être mal cherché En tout cas, depuis qu'elles (les caméras Netatmo) sont passées compatibles HomeKit et que je peux dire « SIRI allume le projecteur du jardin » ça m'a un peu énervé et j'ai repris mes recherches pour en arriver là
  10. Bonjour, Voilà un moment que je cherchais le moyen de piloter les projecteurs de mes caméras « Présence » (j'en ai une côté cour et une autre côté jardin). C'est chose faite et je partage ma solution si cela peut aider quelqu'un. Tout d'abord merci à @KiboOst, qui « sévit » sur le forum jeedom, pour son excellent « php-simpleNetatmoAPI ». D'après ce que j'ai compris il s'agit d'un travail de reverse engineering qui s'est terminé par un retour aux API Netatmo ... sauf, qu'en fouillant dans les API officielles de Netatmo, je n'ai trouvé nulle part le moyen de piloter l'allumage du projecteur et encore moins de gérer sa luminosité ! Donc ma solution : - Côté Serveur (mon Raspberry) installation des composants de « php-simpleNetatmoAPI » sur mon Raspberry création d'un fichier TXT de paramétrage de l'API et des projecteurs écriture d'un script PHP destiné à exécuter une action sur un projecteur - Côté Home Center création d'un VD pour piloter mes 2 projecteurs simultanément ... outil prêt pour une utilisation future, ex : allumer tous les extérieurs de la maison en cas de fête et/ou d'intrusion Un peu de contenu si cela vous intéresse : Côté HC2, le VD et ses icônes Côté Raspberry, le fichier TXT et le script PHP Et voilou ... enjoy Cordialement - Jean-Paul Le VD L'export du VD est disponible en fichier joint. Sur le Raspberry 1 - Fichier texte de paramètrages User=.......... Password=.......... ClientId=.......... ClientSecret=.......... Projo1Home=3 Projo1Name=Présence avant Projo2Home=1 Projo2Name=Présence arrière 2 - Script PHP <?php //-------------------------------------------------------------------------------------------------- // // Script de commande du projecteur d'une caméra Presence Netatmo // // Inspiration : https://github.com/KiboOst/php-simpleNetatmoAPI // // Principe : // 1 - Les infos de connexion sont enregistrées dans un fichier texte sur ce serveur // . les 4 premières lignes sont dédiées à la connexion à l'API Netatmo // . puis une paire de lignes par caméra (ligne 1 = code 'Maison', ligne 2 = nom 'Présence') // 2 - Pour connaître les 'Home' et 'Name' des projecteurs : // . ne saisir que les 4 premières lignes dans le fichier texte // . lancer le script comme ceci : /ProjoAutoOnOff.php?projo=1&action=on // . lire ce qui s'affiche // . rechercher "Si le nombre de projecteurs est égal à zéro" dans le code // . débloquer/dupliquer les lignes en commentaires en remplacant 'xx' par le/les codes 'Maison' // 3 - En entrée : // . le numéro du projecteur à piloter (1 ou 2 ... ou plus) // . la commande à envoyer au projecteur ('auto', 'on' et 'off') // 4 - En sortie : // . commande OK // . commande non effectuée car le projo est déjà à l'état demandé // . autre (erreur) // //-------------------------------------------------------------------------------------------------- $Verbose = false; /* Validation du code action */ $Action = $_GET["action"]; if (strlen($Action) == 0) { exit('Missing action code'); } else { if ($Action != 'auto' and $Action != 'on' and $Action != 'off') { exit('Invalid action code'); } } if ($Verbose) {echo 'Code action ----> ', $Action, '<br>';} /* Récupération du numéro de projecteur */ $NumProjo = $_GET["projo"]; if (strlen($NumProjo) == 0) { exit('Missing floodlight number'); } if ($Verbose) {echo 'Numéro de projecteur ----> ', $NumProjo, '<br>';} /* Ouverture du fichier des infos de connexion au routeur et retourne un tableau contenant une ligne par élément */ $lines = file('ProjosCredentials.txt'); $NbLines = count($lines); if ($Verbose) { foreach ($lines as $lineNumber => $lineContent) { echo $lineNumber,' ',$lineContent, '<br>'; } echo 'Nombre de lignes : ', $NbLines, '<br>'; } /* Vérification du nombre de lignes */ if (($NbLines % 2) == 1) { exit('Invalid line number (odd)'); } /* Chargement des variables de connexion */ $Netatmo_User = ""; $Netatmo_Psw = ""; $Netatmo_ClientID = ""; $Netatmo_ClientSecret = ""; /* ----> Netatmo User */ $mystring = trim($lines[0]); $findme = 'User='; $pos = strpos($mystring, $findme); if ($pos === false) { echo "La chaîne '$findme' ne se trouve pas dans la chaîne '$mystring'", '<br>'; exit('Error retrieving Netatmo User'); } else { if ($pos <> 0) { echo 'La chaîne ', $findme, ' n\'est pas au début de ', $mystring, '<br>'; exit('Error retrieving Netatmo User'); } else { if ($Verbose) {echo "La chaine '$findme' a été trouvée dans la chaîne '$mystring' et débute à la position $pos", '<br>';} $Netatmo_User = substr($mystring, strlen($findme)); } } /* ----> Netatmo Password */ $mystring = trim($lines[1]); $findme = 'Password='; $pos = strpos($mystring, $findme); if ($pos === false) { echo "La chaîne '$findme' ne se trouve pas dans la chaîne '$mystring'", '<br>'; exit('Error retrieving Netatmo Password'); } else { if ($pos <> 0) { echo 'La chaîne ', $findme, ' n\'est pas au début de ', $mystring, '<br>'; exit('Error retrieving Netatmo Password'); } else { if ($Verbose) {echo "La chaine '$findme' a été trouvée dans la chaîne '$mystring' et débute à la position $pos", '<br>';} $Netatmo_Psw = substr($mystring, strlen($findme)); } } /* ----> Netatmo Client ID */ $mystring = trim($lines[2]); $findme = 'ClientId='; $pos = strpos($mystring, $findme); if ($pos === false) { echo "La chaîne '$findme' ne se trouve pas dans la chaîne '$mystring'", '<br>'; exit('Error retrieving Netatmo Client ID'); } else { if ($pos <> 0) { echo 'La chaîne ', $findme, ' n\'est pas au début de ', $mystring, '<br>'; exit('Error retrieving Netatmo Client ID'); } else { if ($Verbose) {echo "La chaine '$findme' a été trouvée dans la chaîne '$mystring' et débute à la position $pos", '<br>';} $Netatmo_ClientID = substr($mystring, strlen($findme)); } } /* ----> Netatmo Client Secret */ $mystring = trim($lines[3]); $findme = 'ClientSecret='; $pos = strpos($mystring, $findme); if ($pos === false) { echo "La chaîne '$findme' ne se trouve pas dans la chaîne '$mystring'", '<br>'; exit('Error retrieving Netatmo Client Secret'); } else { if ($pos <> 0) { echo 'La chaîne ', $findme, ' n\'est pas au début de ', $mystring, '<br>'; exit('Error retrieving Netatmo Client Secret'); } else { if ($Verbose) {echo "La chaine '$findme' a été trouvée dans la chaîne '$mystring' et débute à la position $pos", '<br>';} $Netatmo_ClientSecret = substr($mystring, strlen($findme)); } } /* Chargement des numéros de projecteurs */ $i = 4; $NbProjo = 0; $TabProjo = array(); while ($i < $NbLines) { $NbProjo = $NbProjo + 1; $mystring = trim($lines[$i]); $findme = 'Projo' . $NbProjo . 'Home='; $pos = strpos($mystring, $findme); if ($pos === false) { echo "La chaîne '$findme' ne se trouve pas dans la chaîne '$mystring'", '<br>'; exit('Error retrieving Floodlight' . $NbProjo . ' Home'); } else { if ($pos <> 0) { echo 'La chaîne ', $findme, ' n\'est pas au début de ', $mystring, '<br>'; exit('Error retrieving Floodlight' . $NbProjo . ' Home'); } else { if ($Verbose) {echo "La chaine '$findme' a été trouvée dans la chaîne '$mystring' et débute à la position $pos", '<br>';} $TabProjo[$NbProjo][1] = substr($mystring, strlen($findme)); } } $i = $i + 1; $mystring = trim($lines[$i]); $findme = 'Projo' . $NbProjo . 'Name='; $pos = strpos($mystring, $findme); if ($pos === false) { echo "La chaîne '$findme' ne se trouve pas dans la chaîne '$mystring'", '<br>'; exit('Error retrieving Floodlight' . $NbProjo . ' Name'); } else { if ($pos <> 0) { echo 'La chaîne ', $findme, ' n\'est pas au début de ', $mystring, '<br>'; exit('Error retrieving Floodlight' . $NbProjo . ' Name'); } else { if ($Verbose) {echo "La chaine '$findme' a été trouvée dans la chaîne '$mystring' et débute à la position $pos", '<br>';} $TabProjo[$NbProjo][2] = substr($mystring, strlen($findme)); } } $i = $i + 1; } if ($Verbose) { echo 'Netatmo User = ', $Netatmo_User, '<br>'; echo 'Netatmo Password = ', $Netatmo_Psw, '<br>'; echo 'Client ID = ', $Netatmo_ClientID, '<br>'; echo 'Client Secret = ', $Netatmo_ClientSecret, '<br>'; echo 'Nombre de projecteurs = ', $NbProjo, '<br>'; echo 'Table des projecteurs :', '<br>'; for ($i=1; $i<=$NbProjo; $i++) { echo 'Presence', $i, ' Home = ', $TabProjo[$i][1], ' - Presence', $i, ' Name = ', $TabProjo[$i][2], '<br/>'; }; } // Si le nombre de projecteurs est égal à zéro on récupère les infos "Homes" if ($NbProjo == 0) { require($_SERVER['DOCUMENT_ROOT']."/php-simpleNetatmoAPI/class/splNetatmoAPI.php"); $_splNetatmo = new splNetatmoAPI($Netatmo_User, $Netatmo_Psw, $Netatmo_ClientID, $Netatmo_ClientSecret); if (isset($_splNetatmo->error)) die($_splNetatmo->error); // Liste des maisons avec le nombre de caméras rattachées $homes = $_splNetatmo->getHomes(); echo "<pre><br>homes:<br>".json_encode($homes, JSON_PRETTY_PRINT)."</pre><br>"; // -------------------------------------------------------------------------------------------------------------------------------- // Remplacer 'xx' dans l'instruction suivante par le code maison obtenu et décommenter les lignes pour obtenir les infos 'Présence' // // $_splNetatmo = new splNetatmoAPI($Netatmo_User, $Netatmo_Psw, $Netatmo_ClientID, $Netatmo_ClientSecret, xx); // $Cameras = $_splNetatmo->getPresenceCameras(); // echo "<pre>Cameras:<br>".json_encode($Cameras, JSON_PRETTY_PRINT)."</pre><br>"; // --------------------------------------------------------------------------------------------------------------------------------- exit ('Please enter the projectors codes (House and Name)'); } /* Validation du numéro de projecteur */ if ($NumProjo < 1 or $NumProjo > $NbProjo) { exit('Invalid floodlight number'); } // C'est parti /* Récupération du statut du projecteur */ require($_SERVER['DOCUMENT_ROOT']."/php-simpleNetatmoAPI/class/splNetatmoAPI.php"); $ProjoHome = $TabProjo[$NumProjo][1]; $ProjoName = $TabProjo[$NumProjo][2]; $_splNetatmo = new splNetatmoAPI($Netatmo_User, $Netatmo_Psw, $Netatmo_ClientID, $Netatmo_ClientSecret, $ProjoHome); $Cameras = $_splNetatmo->getPresenceCameras(); $StatusProjo = $Cameras[$ProjoName]['light_mode_status']; if ($Verbose) { echo "<pre>Cameras :<br>".json_encode($Cameras, JSON_PRETTY_PRINT)."</pre><br>"; echo "Status du projo '", $ProjoName, "' de la maison '", $ProjoHome, "' = ", $StatusProjo, '<br>'; } /* Si le projo est déjà à l'état demandé on ne fait rien */ if ($Action == $StatusProjo) { if ($Verbose) {echo 'Changement du status du projecteur inutile - On arrête', '<br>';} exit('Floodlight already set'); } /* On passe le projo à l'état demandé */ $_splNetatmo->setLightMode($ProjoName, $Action); if ($Verbose) {echo "Projecteur passé à '", $Action, "'", '<br>';} exit('Floodlight set'); ?> Projecteurs_Caméras.vfib.json
  11. jpr105

    Je n'arrive plus à insérer du code dans mes posts - HELP

    Ben chez moi ça donne ça : -- Déclaration des variables local Bavard = true local Message = "" local Jour = "" local Heure = "" local Horo = "" local Texte = "" local IDiOS = json.decode((fibaro:getGlobal('IDiOS'))) local HC2_AuxServer_IP = fibaro:getGlobalValue('HC2_AuxServer_IP') local HC2_AuxServer_Port = fibaro:getGlobalValue('HC2_AuxServer_Port') local HC2_AuxServer_Request = '/WiFiOnOff.php?action=ON' -- Déclaration des fonctions function Trace(Bavard, Message) if Bavard then fibaro:debug(Message) end end Oups, j'utilisais le bouton « Insérer un extrait de code » (Icône à droite du bouton « Aperçu ») et non le bouton « Code » (</>) ... ouf me voilà soulagé
  12. Bonjour, Tant pis, au risque de passer pour un benêt je crée un post sur une fonctionnalité du forum que j'ai déjà utilisé et qui me résiste à présent : l'insertion de code dans mes posts. Voici ce que je fais : je me connecte à ma box j'affiche du code (ex : le LUA d'un VD) je sélectionne le code et fais un copier je vais sur mon post et je clique sur le symbole <> je sélectionne LUA je fais un coller Constats : pas de colorisation du code quand je clique sur OK je ne vois rien, hormis une ligne que je devine quand je demande la prévisualisation ça "mouline" Je précise que cela le fait quelque soit le navigateur et/ou l'OS. Pour info j'utilise principalement Safari sous macOS High Sierra et je redis que cela a déjà fonctionné pour moi. Strang isn't it Merci d'avance pour vos coups de pouces - Jean-Paul
  13. jpr105

    Couper mon Wi-Fi depuis le fond de mon lit

    Bonjour, Je reviens sur ce sujet pour partager ma solution car ma configuration a un peu changé : mon routeur ASUS RT-AC68U s'est lamentablement crouté lors d'une mise à jour. Je suis donc passé en firmware Asuswrt-Merlin (Ici) ... que du bonheur, par contre bye bye Telnet ce qui est plutôt bien somme toute j'ai pris la décision de dédier un serveur à ma HC2 que je laisserai sur place avec la HC2 en cas de déménagement ... donc bienvenue au Raspberry le principe reste inchangé : un module virtuel pour switcher le WiFi ON ou OFF je peux donc switcher le WiFi avec la télécommande même en l'absence de signal ou bien le gérer par une scène automatique (Ex : réactiver le WiFi 1/2h avant le début de l'arrosage de la pelouse afin que GreenIG puisse récupérer les infos de ma station Netatmo qui est hors ligne la nuit) J'ai mis les fichiers en PJ pour ceux que cela intéresse ... et ne pas saturer le post : Module virtuel, action WiFi ON Module virtuel, action WiFi OFF Sur le Raspberry, fichier d'authentification SSH au routeur Sur le Raspberry, script PHP Bonne journée - Jean-Paul PS : il faut rajouter la bibliothèque LibSSH2 qui n'est pas installée en standard sur le Raspberry : sudo apt install php-ssh2 WiFiOnOff - Module virtuel - WiFiON.txt WiFiOnOff - Module virtuel - WiFiOFF.txt WiFiOnOff - Raspberry - AsusCredentials.txt.txt WiFiOnOff - Raspberry - WiFiOnOff.php.txt
  14. jpr105

    J’ai craqué....

    Bonjour @Guiro et merci @Lazer qui m'a dirigé vers ce post. Un petit retour d'expérience si cela peut servir à quelqu'un ... Je me suis mis quid si je déménage ... que faire de la domotique de la maison ? Ma réponse : je laisse la HC2 en place et le serveur qui héberge les requêtes annexes mais pas question de laisser le NAS qui les gèrent actuellement ! J'ai donc fouillé vers Lubuntu en lorgnant sur un vieux HP-Compaq-DC7100 qui trainait sous 3 couches de poussière pour migrer mes requêtes HTTP dessus ... et ça l'fait ... pour l'instant en proto D'un autre côté j'ai une Harmony Elite dont je suis très content et je souhaitais l'utiliser pour toute la partie Audio/Vidéo ET Éclairage Donc, avec mon nouveau serveur Lubuntu, j'ai suivi la procédure ci-dessus avec les modifs suivantes : sudo apt-get install oracle-java8-jdk ... un peu difficile à trouver le bon dépot Dans WorkingDirectory=/home/pi/ha-bridge et ExecStart=/usr/bin/java -jar -Dconfig.file=/home/pi/ha-bridge/data/habridge.config /home/pi/ha-bridge/ha-bridge-5.2.1.jar ... j'ai remplacé /home/pi/ par /home/<Mon nom de USER>/ Et ça roule ... avec une seule télécommande je gère bien Audio, Vidéo et Lights ... cool Have fun Bonne journée - Jean-Paul
  15. jpr105

    APIs BULKSMS et PRESENCE NETATMO

    Bonjour, Je me réponds à moi-même pour vous faire un retour d’expérience … si cela peut servir à quelqu’un ;-) Ceci concerne l’envoi de SMS à des personnes de confiance dans le cadre d’une procédure d’alarme (donc conso SMS réputée faible) Plusieurs approches pour cela : le téléphone dédié sous Android avec service tournant sur le téléphone relié à un Raspberry, lui-même pilotable par la HC2 (trop geek pour moi) l’utilisation du service « Notifications par SMS » de chez Free qui est bien mais qui sous-entend que vos personnes de confiance soient toutes chez Free passage par un opérateur d’envoi de SMS payant Pour ma part j’ai fait un mixte de SMS envoyés via Free et de SMS envoyés par BulkSMS (https://www.bulksms.com/) BulkSMS, avantages/inconvénients : Avantages mode API disponible et bien documenté possibilité d’envoyer des e-mail qui se transforment en SMS chez eux et donc possibilité d’utiliser le panneau de notifications de Fibaro (ça j’ai pas testé) support technique réactif par courriel et même joignable au téléphone … in English of course espace utilisateur clair possibilité d’envoi de SMS à des « groupes » avec substitution de variables « Nom », « Prénom » possibilité de personnaliser le « Sender ID » du message (Ex : BoxFibaroTartenpion) possibilité de laisser les destinataires répondre aux SMS avec : consultation des réponses dans l’espace client possibilité de faire suivre les réponse par courriel possibilité d’envoyer une réponse automatique (payante bien sûr) achat de pack de crédits non limités dans le temps possibilité de se faire allouer des crédits pour la période de test Inconvénients politique tarifaire un peu glauque : on achète un pack de crédits et non un pack de SMS, ainsi un SMS pour la France peut couter de 1,75 à 2 crédits il y a possibilité d’obtenir une réduction du SMS de 15% en terminant le texte par le tag « : via BulkSMS.com » … mais cela ne fonctionne pas en mode API, c’est juste dans l’espace client, dommage nombre de crédits alloués pour la période de tests vraiment insuffisant (20) … mais après négociations ils me les ont recrédité ;-) Donc du point de vue Fibaro J’utilise 3 variables « BulkSMS », « BulkSMS_ID », « BulkSMS_RC » « BulkSMS_ID » contient tout ce qui est nécessaire à l’exécution de l’API (URL, Token d’identification). Cette variable est remplie une bonne fois pour toute dans une scène au démarrage de la HC2 ou via déclenchement manuel local IDBulk = {} -- Sauvegarde des ID BulkSMS dans la variable globale BulkSMS_ID -- Le Token ID est 8Fxxxxxxxxxxxxxxxxxxxxxxx-7 -- Le Token secret est QQxxxxxxxxxxxxxxxxxxxxN -- La chaîne "TokenID:TokenSecret" sera passée en Base64 on line via le site https://www.base64encode.org/ -- Résultat : OExxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxp4Tg== IDBulk[1] = "https://api.bulksms.com/v1/messages" IDBulk[2] = "OExxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxp4Tg==" fibaro:setGlobal('BulkSMS_ID',json.encode(IDBulk)) « BulkSMS » est la partie « opérationnelle » de l’API. Le changement d’état de cette variable déclenche la scène « Send SMS via BulkSMS ». Je l’ai programmée pour gérer 2 types d’envoi : vers un individu ou vers un groupe car la syntaxe n’est pas la même selon le cas. --[[ %% properties %% events %% globals BulkSMS --]] -- Activation du Debug local log = true -- Récupération de l’identification BulkSMS local IDBulk = json.decode((fibaro:getGlobal('BulkSMS_ID'))) local URLBulk = IDBulk[1] local TokenBulk = IDBulk[2] -- Récupération de l’action à entreprendre local BulkSMS = json.decode((fibaro:getGlobal('BulkSMS'))) local ModeBulk = BulkSMS[1] local DestiBulk = BulkSMS[2] local MessageBulk = BulkSMS[3] -- Codes retours BulkSMS local ReturnCodeTexte = { [201]=" - Created", [400]=" - Bad Request", [403]=" - Forbidden", [999]=" - Error" } local ReturnCodeValue = "" -- Affichage des premières variables if log then fibaro:debug("URL Bulk = " .. URLBulk) fibaro:debug("Token Bulk = " .. TokenBulk) fibaro:debug("Mode d’envoi = " .. ModeBulk) fibaro:debug("Destinataire = " .. DestiBulk) fibaro:debug("Message = " .. MessageBulk) end -- Construction du Body local Body = "" if ModeBulk == "S" then Body = '{"to": "' .. DestiBulk .. '", "body": "' .. MessageBulk .. '"}' else if ModeBulk == "G" then Body = '{"to": { "type": "GROUP", "name": "' .. DestiBulk .. '" }, "body": "' .. MessageBulk .. '"}' else print('Mode d’envoi inconnu : ' .. ModeBulk) fibaro:abort() end end -- Construction de l’authentification local Autorisation = "Basic " .. TokenBulk if log then fibaro:debug("Authentification = " .. Autorisation) fibaro:debug("Body = " .. Body) end -- Et maintenant la requête local http = net.HTTPClient({timeout = 1000}); http:request(URLBulk, { options = { method = 'POST', headers = { ["Authorization"] = Autorisation, ["Content-Type"] = "application/json" }, data = Body }, success = function(data) fibaro:setGlobal('BulkSMS_RC', data.status) end, error = function(err) fibaro:setGlobal('BulkSMS_RC', 999) end }) -- Récupération du code retour depuis la variable globale ReturnCodeValue = tonumber(fibaro:getGlobalValue('BulkSMS_RC')) if log then fibaro:debug("Code retour = " .. ReturnCodeValue .. ReturnCodeTexte[tonumber(ReturnCodeValue)]) end if log then fibaro:debug("C'est fini") end « BulkSMS_RC » contient le code retour de l’envoi du SMS. Pour l’instant je n’ai rien fait mais pourquoi pas une scène déclenchée par cette variable et dédiée à la gestion d’erreur ? Et pour finir, la partie la plus simple … Cas d’un envoi à une seule personne -- Initialisation des variables local Jour = os.date("%d-%m-%Y") local Heure = os.date("%X") local Horo = " le " .. Jour .. " à " .. Heure local Texte = "" local BulkSMS = {} -- Envoi sur portable JPR Texte = "Test Push iBidules - SMS envoyé via BulkSMS sur portable JPR" .. Horo -- On initialise la variable BulkSMS BulkSMS[1] = "S" BulkSMS[2] = "+336xxxxxx87" BulkSMS[3] = Texte fibaro:setGlobal('BulkSMS',json.encode(BulkSMS)) Cas d’un envoi à un groupe -- On envoie au groupe BulkSMS Texte = "Bonjour {fn######}, alarme déclenchée" .. Horo .. "\nNe prenez aucun risque, appelez le 17 !\nMme BIDULE a les clefs - Merci" -- On initialise la variable BulkSMS BulkSMS[1] = "G" BulkSMS[2] = "Liste alarme 01" BulkSMS[3] = Texte fibaro:setGlobal('BulkSMS',json.encode(BulkSMS)) Et voilà c’est fini. Si cela peut servir, tant mieux et merci au post Plugin Free Mobile SMS initié par @Krikroff qui m’a bien inspiré Have a good day - Jean-Paul
×