Automatiser la création de tâches dans todoist depuis jeedom

Suite à la mise en place des messages d’entretien de mon robot aspirateur (vous avez pas lu l’article ?!), je me suis retrouvé avec une gestion simple des compteurs et une information envoyé à l’utilisateur pour la mise à jour.

Sauf que comme j’étais jamais chez moi quand je recevais ce message, et bien je créais une action dans notre outils de gestion des tâches (todoist) et je réinitialisais le bon compteur via un scenario/widget. C’est-à-dire, exactement ce qu’on faisait précédemment dans l’application Xiaomi.

Ma tendre moitié m’a alors demandé :

  • ça serait pas possible de créer automatiquement une tâche partagée pour l’entretien ?  Comme ça, le premier qui fait l’opération coche l’action et hop, cela met à jour le compteur. ..
  • C’est pas bête ça… mais pffft y’a pas de plugin todoist dans jeedom… je vais y réfléchir…

Bon, je vous spoile un peu mais OUI c’est possible. Evidemment sinon j’aurai pas fait cet article.

Il existe même DEUX méthodes pour créer des tâches todoist ; Une méthode avec une interface toute jolie, plus facile… et une méthode « barbue » ligne de commande. Cet article ne détaillera que la méthode facile mais je vous donnerai des indices sur la méthode barbue si cela vous intéresse.

Et pour cela, IFTTT est votre copain Mais si, mais si vous allez voir.

Prérequis

  • avoir un compte IFTTT
  • avoir un Jeedom fonctionnel
  • avoir un compte todoist (ET des tâches partagées si vous êtes plusieurs…)

Installer le plugin IFTTT dans jeedom

Le plugin est gratuit, on l’installe et on suit la procédure habituelle.

Ajouter todoist dans IFTTT

Il faut activer le service dans IFTTT

Ajouter un webhook dans IFTTT

Webquoi ? webhook. C’est un mécanisme intégré dans IFTTT pour obtenir une URL spécifique à appeler depuis l’extérieur.

On active le service dans IFTTT : https://ifttt.com/maker_webhooks

Cela vous donne une clé. On en aura besoin plus tard pour jeedom, mais pas besoin de la noter de suite.

Créer un scénario IFTTT pour générer une tâche todoist depuis ifttt

IFTTT permet de récupérer plusieurs éléments dans un webhook : un nom d’évènement, et trois valeurs facultatives. On crée donc une nouvelle recette en partant de webhook. J’ai nommé le mien ainsi : robot

Il faut créer le projet au préalable dans totoist
A vous de voir comment organiser la tâche
Tâche du jour, bonjour.

Configurer IFTTT dans Jeedom

Pas trop compliqué, mais il faut recopier notre clé depuis ifttt vers jeedom. Commencer par récupérer la clé dans votre configuration IFTTT

La clé est dans la zone rouge

Ensuite dans le plugin Jeedom, commencer par “Ajouter” un nouveau IFTTT. Donnez lui un nom explicite (genre IFTTT Robot)


On recopie la clé de notre webhook dans l’emplacement … clef du plugin.

Ensuite, on crée les différentes actions. Dans la partie nom, on indique le nom à utiliser dans les scénarios Jeedom. Evenement contient le nom de l’évenement dans IFTTT et enfin les valeurs contiennent les valeurs à passer à IFTTT. Dans mon cas je n’ai besoin que de “valeur 1”

Configurer le scénario pour appeler ifttt

La aussi, ce n’est pas compliqué. Quand on a besoin de créer la tâche, on fait appel à notre action IFTTT.

A ce niveau-là, plus qu’à tester pour vérifier que tout va bien. Mais le scénario devrait automatiquement créer une tâche dans todoist.

Hourra. Allez prendre un café, vous l’avez bien mérité…. quoi ? Ah oui, la version barbue!

Bonus : API Todoist

Alors, oui IFTTT est vraiment un truc cool, pratique. Et je vous le conseille grandement.

MAIS on utilise un intermédiaire de plus. Et en informatique, un intermédiaire de plus, cela signifie des délais allongés, des conditions de service pouvant être dégradés… On a pas de garantie qu’IFTTT ne deviendra pas payant… et qui s’occupe des mises à jour d’API ?

TODOIST a bien fait son travail : ils ont directement fournis leur API.

todoist a même créé un script python sous github :
https://github.com/doist/todoist-python . Cela tombe bien, les scripts python sont utilisables dans Jeedom via le plugin script.

Attention à ne pas oublier de créer une application pour obtenir un token valide.

https://developer.todoist.com/appconsole.html

J’ai par exemple créé une application … jeedom_skipcool.

On peut ensuite créer un script python pour aller créer automatiquement une tâche : voir ici unexemple fourni https://developer.todoist.com/sync/v7/?python#add-two-new-tasks

Une fois le script fini, on peut l’utiliser dans Jeedom via le plugin script.

Domotiser la charge d’une tablette ou téléphone Android

Dans ma salle de bain, j’ai intégré un petit téléphone Android pas cher et surtout, qui ne craint pas l’eau. Ce téléphone est utilisé pour plusieurs choses :

On ne juge pas!

Oui, mais voilà, utiliser un téléphone / tablette tous les matins et tous les soirs imposent la contrainte de … penser à le recharger.

Et plutôt que de le laisser brancher en permanence… j’ai souhaité domotiser sa charge.

Prérequis

  • 1 prise commandable via Jeedom : dans mon cas, il s’agit d’une Kasa TPLink (lien affiliée)

Une fois reçue, la prise doit être configurée avec l’application android Kasa. L’application existe également sous iOS : Kasa Smart

  • 1 téléphone / tablette sous Android. 
  • 1 Jeedom fonctionnel
  • 1 compte Telegram fonctionnel ou Pushbullet

Configuration de Jeedom

Côté Jeedom : installer les plugins nécessaires

  • 1 plugin Jeedom Telegram ou Pushbullet préalablement configuré.
  • 1 plugin Jeedom pour gérer votre prise (dans mon cas: kkasa )

Si vous souhaitez de l’aide pour installer le plugin Telegram, je vous conseille le tutoriel suivant : https://www.maison-et-domotique.com/70896-piloter-jeedom-avec-telegram/

Une fois le plugin installé sur votre jeedom, commencer par activer le plugin… Puis installer les dépendances.

N’oubliez pas de rentrer votre compte / mot de passe kasa.

Puis rendez vous dans la page de configuration : menu plugin, Objets Connectés, kKasa

Un clic sur synchroniser, puis appuyer sur F5… Magie, vos prises apparaissent dans périphériques

Votre seule activité consistera alors à régler vos prises en renommant le périphérique avec un nom explicite, unique.

Dans mon cas, j’ai nommé la prise en “Prise téléphone“, associé à la zone “salle de bain”. Retenez bien ce nom, ça sera utile pour la suite!

Configuration d’android

Il est nécessaire d’installer quelques applications sur le téléphone android :

Programmation de Tasker

Sur le téléphone Android, j’ai programmé Tasker ainsi :

J’ai créer une première tâche “Activation prise” consistant à envoyer une notifcation via l’application pushbullet/Telegram à destination de Jeedom le message “Prise téléphone on

J’ai ensuite créé une seconde tâche “Désactivation prise”, envoyant sur le même principe “Prise téléphone off

Ensuite, j’ai créé deux profils “Prise on” et “Prise off“.

Prise On se déclenche sur les events suivants :

  • “Niveau de batterie de 10% à 10%” et
  • “Source AC” case “Inverser” à oui

Et son action consiste à démarrer la tâche “Activation prise“.

Prise off se déclenche sur les événements suivants :

  • Niveau de batterie de 100% à 100% et
  • “Source AC” case Inverser non coché

Et bien entendu l’action associée… consiste à démarrer la tâche “Prise off“.

En rédigeant cet article, je ne pouvais pas m’empêcher de penser à JourNuit de Pixar…

Et là normalement tout marche par la magie Jeedom! Enfin presque. Car si comme moi, vous avez désactiver les interactions automatiques… ben rien ne se passe.

Configuration de Jeedom

Dans le menu configuration, Interactions, pensez à activer les interactions automatiques.

Pour conclure : pensez aux économies

Cet article m’a été inspiré en partie de l’article de Sarakha63 sur son centre de contrôle. Je le remercie grandement 🙂

Le fait de ne pas avoir à penser a la recharge du téléphone c’est pratique… mais vu que je vous ai fait installer Tasker, profitez-en pour régler finement vos paramètres d’énergie avec des modes agressifs pendant les périodes d’absences : par exemple pas de réseau, pas de GPS, puissance minimale etc. L’électricité qu’on ne dépense pas, c’est toujours de l’électricité qu’on ne paie pas !

Piloter une TV Philips ambilight récente par ligne de commande

Les TV Philips récentes sous Android TV (> 2016) utilisent une API basée sur JointSpace

C’est beau tout de même!

MAIS, pour faire simple, Philips a décidé de masquer cet API via d’une part un changement de port, l’utilisation du https au lieu du http… et en prime, cela nécessite un appairage, intégré aux applications philips… Mais pas accessible ailleurs.

Heureusement, il existe sur github un script permettant de réaliser “facilement” cet appairage. Enfin, facilement…

https://github.com/suborb/philips_android_tv

Je vais décrire le process pour installer ce script.

Prérequis

  • Avoir un pc / serveur (linux de préférence) avec python d’installé.
  • Avoir git d’installé : rappel sur ubuntu
sudo apt-get install git

  • Connaître l’adresse IP de votre télé philips. Si vous ne la connaissez pas, elle est indiquée dans le menu android!

Installation du script et appairage

Sur votre PC/Serveur, dans le dossier de votre choix, on commence par récupérer le script :

git clone https://github.com/suborb/philips_android_tv.git <votre_dossier>
cd <votre dossier>

ensuite, on installe les pré-requis du scripts :

sudo pip install -r requirements.txt

Il faut ensuite démarrer votre téléviseur puis lancer l’appairage de votre TV via le script

python philips.py --host <adresse IP Philips TV> pair

Le script vous demande un code affiché à l’écran, puis il va vous fournir un utilisateur et un mot de passe. Ces deux éléments sont essentiels et à conserver absolument. Rassurer vous, on peut toujours relancer l’appairage si on les oublie…

Utilisation du script

On peut utiliser le script pour récupérer des infos … mais surtout réaliser quelques actions (limitées… très limitées…)

Pour cela on exécute le script ainsi :

python philips.py --host <adresse IP TV> --user <VOTRE USER> --pass <VOTRE PASS> <command>

Avec <command> ayant pour valeur possible : get_volume, get ou standby

Bon, le script est pas super complet… Donc, j’ai réalisé quelques modifications pour avoir quelques commandes supplémentaires.

Sur demande, je peux fournir un patch… en attendant, faute de mieux, remplacer les lignes > 99

if args.command.startswith("get"):
if args.command == "get_ambilight_cached":
config['path'] = "6/ambilight/cached"
elif args.command == "get_ambilight":
config['path'] = "6/ambilight/currentconfiguration"
elif args.command == "get_ambilight_mode":
config['path'] = "6/ambilight/mode"
elif args.command == "get_ambilight_topology":
config['path'] = "6/ambilight/topology"
elif args.command == "get_applications":
config['path'] = "6/applications"
elif args.command == "get_channeldb_tv":
config['path'] = "6/channeldb/tv"
elif args.command == "get_channeldb_channellists":
config['path'] = "6/channeldb/tv/channelLists/all"
elif args.command == "get_menuitems_settings":
config['path'] = "6/menuitems/settings/structure"
elif args.command == "get_powerstate":
config['path'] = "6/powerstate"
elif args.command == "get_recordings":
config['path'] = "6/recordings/list"
elif args.command == "get_system":
config['path'] = "6/system"
elif args.command == "get_system_epgsource":
config['path'] = "6/system/epgsource"
elif args.command == "get_system_storage":
config['path'] = "6/system/storage"
elif args.command == "get_system_timestamp":
config['path'] = "6/system/timestamp"
elif args.command == "get_volume":
config['path'] = "6/audio/volume"
else:
print("Invalid get command (see source for details)")
return
get_command(config)
if args.command.startswith("post"):
if args.command == "post_standby":
config['path'] = "6/input/key"
config['body'] = { "key" : "Standby" }
elif args.command == "post_home":
config['path'] = "6/input/key"
config['body'] = { "key" : "Home" }
elif args.command == "post_mute":
config['path'] = "6/input/key"
config['body'] = { "key" : "Mute" }
else:
print("Invalid post command")
return
post_command(config)
main()

Cela me permet d’avoir des commandes intéressantes du point de vue domotique

  • post_standy => arrêt / mise en route de la télé
  • post_home => mise en route du menu home
  • post_mute => mute …
  • get_powerstate => status de la télé (allumée, eteinte)

Bon, après tout ça, c’est TOUJOURS pas user friendly, mais ça permet d’interroger la télévision, de lui demander de s’allumer, de s’éteindre…

Mais ensuite, il reste à intégrer tout ça dans Jeedom, et cela fera partie d’un deuxième article.

Inspiration du week-end en domotique

Voici quelques liens vers des articles pour donner des inspirations dans la réalisation de scénarios de domotique.

La surveillance des équipements c’est l’un des points faibles de Jeedom qui n’informe pas si un capteur est “hors ligne”. Voilà une méthode utile et pas trop complexe pour faire remonter l’info. Attention, cela nécessite au préalable un plugin de messagerie configuré.

http://sarakha63-domotique.fr/surveillance-equipement-z-wave-xiaomi-blea/

Quand on est dans la cuisine et qu’on a besoin d’aller à la réserve, c’est souvent qu’on a quelque chose dans les mains… Et ouvrir une porte, ça devient compliqué. Heureusement, Sarakha63 à la solution une porte “magique” et totalement intégrée dans la cuisine. 

http://sarakha63-domotique.fr/la-porte-magique-domotisee/

Les Yeelights sont des lampes Wi-Fi très bien pensé, pas cher, fiable et pratique. On peut les utiliser assez facilement dans Jeedom… Mais comment faire appel aux scènes Yeelight sans les recréer “à la main” ? Via le plugin IFTTT. Pas forcément simple… mais pratique.

http://sarakha63-domotique.fr/scenes-yeelight-ifttt/

Avoir un aquarium, c’est bien, ça fait jolie, mais cela nécessite une surveillance accrue pour détecter les problèmes de l’eau (température, trop haute, trop baisse, ph, etc.). Et si la domotique venait nous aider? C’est le principe de Reef-pi, avec un ensemble de tutoriaux.

https://www.raspberrypi.org/blog/reef-pi-raspberry-pi-fish-tank-management-system/

Bon week-end à tous!

Jeedom et Xiaomi MiRobot Vacum

L’ajout dans Jeedom du Xiaomi MiRobot Vacum (v1 ou v2) nécessite un token à récupérer dans l’application Mi Home.

http://domo-attitude.fr/domoticz-guide-dutilisation-robot-aspirateur-xiaomi/

  • Quelques forums sur le sujet :

Seul souci : les dernières versions de Mi Home sur Android ne stockent plus ce token. Les méthodes consistent donc à prendre une ancienne version de Mi Home ou à utiliser une sauvegarde d’un … iPhone.

Voir ici pour la méthode 

https://www.home-assistant.io/components/vacuum.xiaomi_miio/#ios

En français, voici les étapes :

Prérequis :

  • avoir le robot configuré et relié à l’application Mi-Home.
  • avoir Mi-Home d’installé sur l’iPhone
  • avoir ITunes d’installé
  • avoir installé le logiciel  iBackup Viewer
  • avoir installé DB Browser for SQLite.

Etapes :

  1. Démarrer iTunes et lancer une sauvegarde non chiffré de l’iPhone
  2. Démarrer iBackup Viewer et charger la sauvegarde
  3. Démarrer le module “Raw Data”
  4. Naviguer jusqu’à com.xiaomi.mihome
  5. Rechercher un fichier du type 123456789_mihome.sqlite
  6. Sauvegarder le fichier dans vos documents
  7. Ouvrir DB Browser et charger le fichier précédent
  8. Cliquer sur “Execute SQL”
  9. Entrer et exécuter la requêle SQL suivante:
SELECT ZTOKEN FROM ZDEVICE WHERE ZMODEL LIKE "%vacuum%"

Normalement, une clé hexa de 32 bits de longueur va s’afficher. Faites un copier. Mais si vous avez pas de chance, votre ZToken fera 96 caractères. Il faut alors la déchiffrer pour obtenir 32 caractères

Dans un terminal, exécuter la commande suivante

echo '0: ' | xxd -r -p | openssl enc -d -aes-128-ecb -nopad -nosalt -K 00000000000000000000000000000000

Le résultat affiché sera votre clé, que vous pouvez utiliser dans le plugin Xiaomi de Jeedom

A noter l’existence d’un outils python permettant un contrôle plus fin de votre xiaomi

https://github.com/rytilahti/python-miio