Agenda Google et Domoticz Version 2- Partie 2

Suite du premier article sur les calendriers google https://easydomoticz.com/agenda-google-et-domoticz-version-2-partie-1/ ou nous avions installé et configuré un agenda google spécifique au pilotage de Domoticz, nous continuons ici avec la mise en place des liens entre l’agenda et Domoticz via des scripts python.

Très long article, bon courage

Comment çà marche ?

Il suffira d’introduire des actions destinées à nos interrupteurs Domoticz dans un agenda google sous la forme IDX=etat , un premier script python à lancer une fois par jour récupérè toutes les actions de la journée, un autre script lancé toutes les minutes exécute les commande à l’heure prévue

Deux façon de donner des ordres via le calendrier sont actuellement acceptées :

  • Une simple commande faisant appel à un seul IDX Domoticz et l’état souhaité (On/Off) Ex: 14=On
  • Une commande multiple pilotant plusieurs IDX Domoticz, Exemple : 14;17;18=On

Rappel : les IDX sont indiqués dans « Configuration », « Périphériques »

Domoticz ID

Domoticz idx

N.B :

  • les commandes on/off ne sont pas sensibles à la casse.On ,ON, off,OfF,Off sont fonctionnels.
  • les heures de fin de l’agenda google ne sont pas utilisées , il faudra faire un IDX=off pour éteindre à l’heure désirée.
  • Les IDX ne sont pas vérifiés, appliquez vous.

I – Le calendrier Google.

Connectez vous à votre compte gmail et dans le calendrier Domoticz ajoutez des événements sous la forme IDX=etat POUR AUJOURD’HUI ou plus tard (pas pour hier SVP)

Cal_domoticz

Lire la suite

Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/

Domoticz et scripts : les bases

Domoticz est vraiment très ouvert pour nous laisser le piloter au travers de son API JSON moyennant que on lui envoie une url bien construite, on peut alors lire l’état de capteurs, envoyer des ordres …

Intérêt des scripts

Les scripts dans Domoticz sont utilisés la plupart du temps,pour lire telle valeur, écrire telle autre, interroger un service web , envoyer un sms

 

Quels langages utiliser ?

Lua

Le langage natif de Domoticz pour le scripting est LUA avec des fonctionnalités assez puissantes puisque Domoticz déclenche automatiquement ces scripts sur  les changements d’états, en fonction du temps…

Il faut apprendre un peu de Lua

Les autres langages

Tous les langages  que vous avez installés.sur votre Raspberry sont utilisables nous allons détailler comment ci-dessous.

Oui mais j’utilise Windows ?

Euh, comment dire , c’est pareil mais en plus compliqué.

L’essentiel est que vous connaissiez le chemin d’accès à l’interpréteur de votre langage (Ex: c:\dev\python\python27\bin\python.exe)  ou que celui ci soit dans le PATH de votre système. Votre script devra prendre en compte ce chemin.

Et pour le Raspberry Pi

C’est la solution que je vais détailler ici.

Ou placer les scripts ?

Il n’y a pas d’emplacement privilégié du moment que domoticz puisse aller lire à cet endroit.

Toutefois les développeurs de Domoticz ont crée domoticz/scripts, domoticz/scripts/lua cela serait quand même logique de les utiliser.

Quitte à créer domoticz/scripts/python, domoticz/scripts/sh, domoticz/scripts/php pour faciliter la gestion des scripts.

Ce qui suit ne s’applique pas aux scripts LUA de domoticz/scripts/lua qui sont entièrement géres par Domoticz et à ce titre doivent correspondre à des « nommages » précis (script_time, script_device…)

Comment écrire un script ?

Je ne vais pas faire un cours de python, perl, shell bash ici? C’est à vous de construire votre outil.

  • Nommez votre script d’un nom explicite et pas toto.py mais clignotement_lampe_exterieur.sh
  • Utilisez les .py,.sh à la fin du fichier, cela n’est pas obligatoire mais pour les pauvres êtres humains que nous sommes c’est mieux.

LA chose qu’il faut savoir c’est que votre script doit commencer par un shebang approprié, j’aime bien le mot shebang. http://fr.wikipedia.org/wiki/Shebang

 

En effet les scripts sont des fichiers texte dont la première ligne devra être le shebang qui indique au système dans quel langage est rédigé le script et le chemin vers ce langage.

 

Ainsi

#!/bin/bash

indique qu’il faut utiliser pour ce script le programme bash situé dans /bin

Il en existe d’autres moins sexy:

  • #!/usr/bin/php pour les scripts php
  • #!/usr/bin/python

Après cette ligne de shebang vous codez votre programme.

N.B : Cas du php :

  • Il faut installer php5-cli par un sudo apt-get install php5-cli
  • Après le shebang on met <?php puis on code

 

Sinon jetez un œil au forum il y un endroit pour en trouver des tout faits.

Comment tester mon script ?

Suivant le langage que vous utilisez mettez des echo, print, aux endroits stratégiques.

Rendez votre script exécutable par un chmod +x lenomquivabien.xx (merci b.folliot)

Vérifiiez que tout ce comporte bien en lançant votre programme par un ./lenomquivabien.xx

Déboguez, jusqu’à obtention du résultat voulu

Ca marche et maintenant ?

Pilotage via Domoticz

On peut appeler un script derrière un interrupteur ou un scenario Domoticz sur un « Action on » ou « Action off » de la façon suivante script:///home/pi/domoticz/script/monscript.php
N.B : il y a 3 / apres script:

Un article détaillé est ici

Ainsi l’appui sur le bouton en question déclenche les actions prévues lorsque le bouton passe à On ou Off

N’oubliez pas que pour déclencher une cascade de périphériques à l’appui  il y a aussi les dispositifs esclaves Domoticz.

Pilotage en fonction de l’heure

On  à parfois besoin de déclencher un script que une fois par jour/par heure…

Exemple récupération du tarif EDF bleu,blanc rouge pour remplir un widget.

Dans ce cas la on utilise le programme crontab Linux

crontab -e permet de programmer  l’exécution régulière de tâches

# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
3 4 * * * root /domotioz/scripts/shell/backupftp.sh
Cette ligne déclenche la procédure backupftp.sh tous les jours à 4H03
 
*/2 * * * * root /domoticz/scripts/check_domoticz.sh

celle ci le script toutes les 2 minutes (*/2)

Le mémo qui va bien : https://fr.wikipedia.org/wiki/Cron

P.S N’oubliez pas de sauvegarder tout cela de temps en temps. 🙂

Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/

La couleur Tempo EDF dans un Widget Domoticz

En utilisant un article ici sur les widget Texte et un article là sur la récupération du tarif tempo EDF depuis api.domogeek.fr on peut faire afficher la couleur actuelle du tarif EDF dans un texte Domoticz :

widget texte domoticz

avec deux lignes comme cela dans un fichier recupedf.sh

Changez mon_idx_du_switch-virtuel par votre Idx à vous (c.f article sur le widget texte)

#!/bin/bash
tempo=$(curl -s "http://domogeek.entropialux.com/tempoedf/now")
curl "http://192.168.1.81:8080/json.htm?type=command&param=udevice&idx=mon_idx_du-switch_virtuel&svalue=$tempo"

 

un chmod +x sur le fichier et un crontab -e plus loin (lancement à 1h10 tous les jours)

10 1 * * * sudo /home/pi/domoticz/scripts/edftempo.sh 2>&1 >> /dev/null

on à ainsi à disposition notre tarif pour d’autres scripts , lua ou blocky.

 

 








Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/

Une API pour de la domotique

Sous ce titre un peu bizarre, ce cache un outil fort pratique et à la limite indispensable, que j’ai découvert avec mes amis du forum (merci à Jackslayter).

Il s’agit de domogeek.entropialux.com qui met à notre disposition un jeu d’API en ligne permettant de renvoyer une foule de choses utiles pour piloter notre domotique.

Comme :

  • savoir si en zone C on est en vacances !
  • sii nous sommes en Week End,
  • récupérer la géolocalisation d’une ville,
  • le tarif EJP EDF,
  • le tarif Tempo EDF,
  • la liste des fêtes du calendrier,
  • les levers et couchers du soleil,
  • l’état de vigilance Méteo France (jaune,rouge orange pour chaque risque) …

C’est parfaitement documenté, hyper clair, simple : le bonheur !

Principe

En appelant une simple url bien formatée on reçoit en retour la réponse attendue.

Exemple ici http://domogeek.entropialux.com/sun/brest/all/now

nous donne les caractéristiques du soleil à Brest pour now.

Magique !

Prérequis

Nous aurons donc besoin d’interroger une url , l’outil de prédilection se nomme curl, chaque langage à le sien, choisissez le votre: curl pour une interrogation en bash, php-curl pour des scripts en php, pyCurl en python …

apt-get install curl, apt-get install php5-curl,…

Description & Exemple d’utilisation

L’utilisation à laquelle nous pensons tout de suite est la récupération des tarifs Tempo EDF.

La documentation nous dit que

http://domogeek.entropialux.com/tempoedf/now nous renvoie ‘bleu’

que

http://domogeek.entropialux.com/tempoedf/tomorrow/json nous renvoie {« tempocolor »: « bleu »} pour la couleur de demain

concernant EJP l’appel de

/ejpedf/:zone/:date/:responsetype

Example usage:

   curl http://domogeek.entropialux.com/ejpedf/nord/today
   curl http://domogeek.entropialux.com/ejpedf/sud/tomorrow
   curl http://domogeek.entropialux.com/ejpedf/paca/today/json

avec

Field Type Description
zone String Donnez la Zone  {nord|sud|ouest|paca}
date String today or tomorrow {today|tomorrow}

nous renvoie True or False selon que l’on soit ou non en période EJP pour today ou tomorrow

La aussi on peut coller un /json à la fin pour avoir les accolades d’emballage JSON.

Exemple en bash

Un fichier contenant

#!/bin/bash
tempo=$(curl http://domogeek.entropialux.com/tempoedf/now)
if [ $tempo = « bleu » ]; then

fi

permettra ainsi de piloter des radiateurs en fonction de la couleur EDF

plus de détails sur la mise en place ici

Sur des réponses plus étoffées comme

{"dayduration": "9:17", "sunset": "17:41", "zenith": "13:02", "sunrise": "8:24"}

il faudra jouer avec les outils de chaine de caractère de votre langage pour récupérer les infos voulues.

Conclusion

l’API de Domogeek.fr est un outil indispensable bien documenté , clair et facile il nous évite de nombreux case tête.

L’auteur de cette API attends nos remarques et aide pour continuer à faire évoluer cet outil, n’hésitez pas si vous désirez aider à enrichir la bibliothèque.

Son blog ici vaut vraiment le détour.

chouette

 








Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/

Utiliser le tarif EDF Tempo

Une discussion sur le forum dont la magnifique réponse à été donné par jackslayter m’a incité à reprendre en partie les propos échangés pour cet article.

La finalité était de récupérer le tarif Tempo EDF en cours (bleu,blanc,rouge) pour piloter les radiateurs électriques, et éviter les casse têtes :

tempoedf

La couleur Tempo d’aujourd’hui et demain est mise à disposition grâce à domogeek.entropialux.com (entre autres choses, mais nous y reviendrons tellement l’outil et l’idée sont pratiques pour de la domotique)

Au final le scénario est celui ci :

Création d’un switch virtuel, interrogation via script bash de l’api, si le tarif est bleu alors passe le switch à On ce qui permettra de piloter nos équipements puis mise en place du script dans un crontab pour interrogation régulières.

1 – Création d’un switch virtuel.

Depuis l’onglet « Matériel » , ajoutez un Interrupteur.

Dans l’onglet des périphériques cliquez sur la flèche verte, nommez le, puis notez l’IDX de cet équipement.

2 – Interrogation du tarif Tempo.

Dans le dossier domoticz/scripts créons un script nommé edftempo.sh

sudo pico domoticz/scripts/edftempo.sh

[codesyntax lang= »bash » lines= »no »]

#!/bin/bash
tempo=$(curl -s http://domogeek.entropialux.com/tempoedf/now)
if [ $tempo = "bleu" ]; then
curl "http://192.168.1.81:8080/json.htm?type=command&param=switchlight&idx=101&switchcmd="On"&level=0"
else
curl "http://192.168.1.81:8080/json.htm?type=command&param=switchlight&idx=101&switchcmd="Off"&level=0"
fi

[/codesyntax]

Changez ici l’IP de Domoticz et le IDX de votre switch virtuel suivant votre config.

un chmod +x sur le fichier puis l’exécution de ./edftempo.sh doit faire basculer l’état du switch virtuel à On si la journée est bleue sinon on reste à Off.

<digresssion>

On peut aussi récupérer les tarifs EJP par zone

/ejpedf/:zone/:date/:responsetype

Example usage:

   curl http://domogeek.entropialux.com/ejpedf/nord/today
   curl http://domogeek.entropialux.com/ejpedf/sud/tomorrow
   curl http://domogeek.entropialux.com/ejpedf/paca/today/json

Les régions sont {nord|sud|ouest|paca} : 1 seule à la fois !!!

on a today ou tomorrow pour les jours

Le retour est False nous ne sommes pas en EJP pour la date demandée

et True quand nous sommes en EJP

Le script bash ci-dessous pourra être modifié pour tenir compte de l’EJP

</digression>

3 – Pilotage des équipements liés

Plusieurs méthodes pour déclencher les radiateurs sont possibles

Soit :

  • Un script blocky qui pilote un groupe de dispositifs en se basant sur l’état du switch virtuel.
  • Soit pilotage direct via le script,

ajoutez autant de lignes que d’équipements à piloter à l’intérieur du if $tempo=bleu en indiquant les idx des radiateurs, supprimez les lignes else et curl, au final on a:

#!/bin/bash
tempo=$(curl -s http://domogeek.entropialux.com/tempoedf/now)
if [ $tempo = "bleu" ]; then
curl "http://192.168.1.81:8080/json.htm?type=command&param=switchlight&idx=67&switchcmd="On"&level=0"
curl "http://192.168.1.81:8080/json.htm?type=command&param=switchlight&idx=68switchcmd="On"&level=0"
curl "http://192.168.1.81:8080/json.htm?type=command&param=switchlight&idx=69&switchcmd="On"&level=0"
fi

4- crontab

un crontab -e puis placer cela qui se lancera tous les jours à 00h 10 minutes

10 00 * * * sudo /home/pi/domoticz/scripts/edftempo.sh 2>&1 >> /dev/null

cron

 








Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/