2016-12-17
Mise à jour : 2017-02-10

Il est temps de revenir aux plannings ajoutées à certaines lampes dans la section Timers and Notification du dernier billet de la série X10 with Domoticz on Raspberry Pi (Domespic). Les plannings n'y étaient pas activées, car j'affirmais qu'ils seraient activés manuellement avant de m'absenter de la maison. Je stipulais alors qu'il devait y avoir une meilleure façon de faire.

Ce que je suis sur le point de décrire représente une amélioration. Quant à savoir si c'est la meilleure façon ...

Les chronométreurs en eux-mêmes sont une bonne façon de fixé les périodes pendant lesquelles les lampes et autres appareils fonctionneront. Ce peut être utile si vous voulez qu'un éclairage extérieur soit allumé au crépuscule et éteint à minuit en tout temps. Ce n'est pas ce dont j'avais besoin. Je veux que les lumières s'allument et s'éteignent à des heures "habituelles" quand personne n'est à la maison pour simuler une maison habitée. J'estime qu'il s'agit du coté prévention d'un système de sécurité à domicile. L'autre aspect utiliserait des capteurs de détection et sonnerait une alarme quelconque si un intrus devait être détecté. Je reviendrai sur ce sujet plus tard, ... beaucoup plus tard.

Essentiellement, ce que je veux, c'est un planning conditionnel, c'est-à-dire des temporisateurs qui ne fonctionneront que lorsqu'ils seront déclenchés en activant un interrupteur virtuel. La première étape pour atteindre cet objectif est de voir comment activer et désactiver les plannings de Domoticz. La deuxième étape consiste à configurer un déclencheur.

Activer le planning d'un dispositif

Pour commencer, il faut qu'initialement, tous les plannings soient désactivés. Cliquez sur l'onglet Interrupteurs et cliquez sur le bouton Planning du dispositif Dressser lamp.

On peut voir que toutes les commandes "On" et "Off" sont désactivés ( il n'y a que des Non dans la colonne "Activé").

Il est possible d'activer ou de désactiver un événement planifié, mais son numéro d'index doit être connu. Pour autant que je sache, la seule façon d'obtenir ces numéros est à travers l'API JSON. Vous pouvez afficher tous les horaires dans un navigateur Web à l'adresse suivante http://192.168.0.22:8080/json.htm?type=schedules.

Une autre possibilité, avec un ordinateur Linux branché sur le même réseau que le Raspberry Pi, est d'ouvrir un terminal (Alt-Ctrl-T dans Ubuntu) et d'utiliser le programme curl. Si votre bureau est un système Windows, vous pouvez ouvrir une sesssion SSH avec le Raspberry Pi et utiliser son programme curl.

michel@hp:~$ curl "http://192.168.0.22:8080/json.htm?type=schedules" { "result" : [ { "Active" : "false", "Date" : "", "Days" : 512, "DevName" : "Dresser lamp", "DeviceRowID" : 28, "Hue" : 0, "IsThermostat" : "false", "Level" : 100, "MDay" : 0, "Month" : 0, "Occurence" : 0, "Randomness" : "false", "ScheduleDate" : "", "Time" : "00:52", "TimerCmd" : 1, "TimerID" : 9, "TimerType" : 2, "TimerTypeStr" : "On Time", "Type" : "Device" }, { "Active" : "false", "Date" : "", "Days" : 256, "DevName" : "Dresser lamp", "DeviceRowID" : 28, "Hue" : 0, "IsThermostat" : "false", ... and so on } ], "status" : "OK", "title" : "Schedules" }

Nous allons maintenant activer l'événement programmé pour '00:52' ayant le numéro d'identification 'TimerId=9'. Dans un navigateur Web, entrez l'adresse suivante http://192.168.0.22:8080/json.htm?type=command&param=enabletimer&idx=9

Autre façon : entrer le commandement suivant dans un terminal.

michel@hp:~$ curl "http://192.168.0.22:8080/json.htm?type=command&param=enabletimer&idx=9" { "status" : "OK", "title" : "EnableTimer" }

Retournez à l'onglet Interrupteurs et cliquez sur le bouton Timers du dispositif Dressser lamp et vérifiez que l'événement programmé à '00:52' est activé. Vous pouvez à nouveau vérifier en entrant l'adresse suivant http://192.168.0.22:8080/json.htm?type=schedules dans le champ d'adresse d'un navigateur Web.

Pour désactivé un commandement programmé on remplace enabletimer par disabletimer comme dans http://192.168.0.22:8080/json.htm?type=command&param=disabletimer&idx=9

Déclenchement des plannings

Nous allons créer un interrupteur virtuel sur le matériel virtuel (Dummy) qui sera utilisé pour activer ou désactiver les plannings. Nous avons déjà configuré un interrupteur factice sur le matériel virtuel en ajoutant le pont Heyu. Voici qu'un bref rappel des étapes.

  1. Clicker sur l'onglet Réglages.
  2. Clicker sur le choix de menu Matériel.
  3. Remplir les champs
    Non = Virtuel, et
    Type = Dummy (Does nothing... qu'on retrouve dans la liste déroulante.
  4. Clicker sur le boutton Add.
  5. Clicker sur Créer capteurs virtuels dans le matériel Virtuel.
  6. Nommer le capteur virtuel Alleurs et fixer son type à interrupteur.
  7. Clicker sur le bouton OK pour compléter la création de l'interrupteur.
  8. Clicker sur l'onglet Interrupteurs.
  9. Clicker sur le bouton Editer de l'interrupteur Ailleurs et changer l'icône à Generic On/Off switch (démarche optionnelle)
  10. Entrer dans le champ On Action http://192.168.0.22:8080/json.htm?type=command&param=enabletimer&idx=9
  11. Entrer dans le champ Off Action http://192.168.0.22:8080/json.htm?type=command&param=disabletimer&idx=9

Il est temps de tester si cela fonctionne. Cliquez sur l'icône du commutateur Ailleurs dans l'onglet Interrupteurs pour activer et désactiver le périphérique virtuel. Après chaque clic, vérifiez l'état de l'événement programmé à '00:52' comme expliqué ci-dessus. Il devrait être activé et désactivé en synchronisation avec le commutateur virtuel.

Si le principe est trouvé, il n'en reste pas moins qu'il faut changer quelque chose parce qu'il est fort probable que ce sera de nombreuses actions planifiées qui devront être activées ou désactivées. Un script devrait être capable de gérer la tâche au complet.

Script Ailleurs

Le script Lua suivant prend en charge la mise à jour des quatre plannings associés à la lampe. Notez comment le script appelle cURL pour envoyer la chaîne JSON au serveur Domoticz.

commandArray = {} local NAME = 'Away' local VERBOSE = 2 -- 0 = quiet, 1 = logs os.execute commands, 2 = debugs if devicechanged[NAME] then cmd = devicechanged[NAME] if (cmd == 'On') then act = 'enable' elseif (cmd == 'Off') then act = 'disable' else act = 'none' end if (VERBOSE > 1) then print('NAME: ' .. NAME) print('devicechanged[NAME]: '..devicechanged[NAME]) print('otherdevices_svalue[NAME]: ' .. otherdevices_svalues[NAME]) print('act: ' .. act) end if (act ~= 'none') then cmd = 'curl "http://192.168.0.22:8080/json.htm?type=command&param=' .. act .. 'timer&idx=' os.execute(cmd .. '6"') if (VERBOSE > 0) then print(cmd..'6') end os.execute(cmd .. '7"') if (VERBOSE > 0) then print(cmd..'7') end os.execute(cmd .. '8"') if (VERBOSE > 0) then print(cmd..'8') end os.execute(cmd .. '9"') if (VERBOSE > 0) then print(cmd..'9') end end end return commandArray

Alors que le script fonctionne, il suscite le message d'erreur (ou est-ce un avertissement) suivant : Error: EventSystem: Warning!, lua script /home/pi/domoticz/scripts/lua/script_device_away.lua has been running for more than 10 seconds.

Un délai de 10 secondes peut être acceptable pour un script exécuté rarement. Toutefois, j'aime éviter les avertissements quand c'est possible. En lisant le forum, j'ai vu que certains utilisent un script bash pour activer ou désactiver les plannings. J'ai essayé et ça marche.

J'ai décidé d'écrire un seul script bash qui permet soit d'activer ou de désactiver les plannings en fonction de la valeur d'un paramètre donné sur la ligne de commande. Il doit être "1" (sans guillemets) pour activer les plannings et "0" (encore sans guillemets) pour les désactiver. Si une autre valeur est spécifiée, un message "Invalid parameter" est placé sur le journal Domoticz et le script s'arrête et retourne le code d'erreur 1. Voici le script nommé enable_timers.sh :

#!/bin/sh # # /home/pi/domoticz/scripts/bash/enable_timers.sh # bash script to enable or disable all light timers if [ "$1" = "1" ] then ACTION="enabletimer" elif [ "$1" = "0" ] then ACTION="disabletimer" else curl "http://192.168.0.22:8080/json.htm?type=command&param=addlogmessage&message=Invalid%20parameter" echo "Invalid parameter" exit 1 fi # optional but helps to log enabling or disabling of timers curl "http://192.168.0.22:8080/json.htm?type=command&param=addlogmessage&message=$ACTION" # update timers curl "http://192.168.0.22:8080/json.htm?type=command&param=$ACTION&idx=6" curl "http://192.168.0.22:8080/json.htm?type=command&param=$ACTION&idx=7" curl "http://192.168.0.22:8080/json.htm?type=command&param=$ACTION&idx=8" curl "http://192.168.0.22:8080/json.htm?type=command&param=$ACTION&idx=9"

J'ai créé le script sur mon ordinateur de bureau et l'ai enregistré dans un nouveau sous-répertoire appelé bash dans le répertoire scripts. Ensuite, en utilisant FileZilla, j'ai créé un sous-répertoire bash dans scripts du Raspberry Pi et copié le script dans ce nouveau répertoire. Puis j'ai cliqué avec le bouton droit de la souris sur le nom du fichier copié et j'ai choisi l'élément de menu Droits d'accès au fichier...

and coché Exécuter dans les Permissions du propriétaire. Enfin, j'ai cliqué sur le bouton Valider.

Maintenant, le serveur Domoticz doit être invité à invoquer ce script lorsque le bouton Ailleurs est cliqué. Cliquez sur le bouton Modifier du dispositif virtuel.

Le champs Action On doit contenir le lien suivant script:///home/pi/domoticz/scripts/bash/enable_timers.sh 1 alors que le champs Action Off doit contenir le lien script:///home/pi/domoticz/scripts/bash/enable_timers.sh 0

Vacances

Plusieurs on suggéré une autre façon de faire dans un forum de Domoticz. Il s'avère qu'il y a deux jeux de planning indépendants. On passe d'un jeu à l'autre en cliquant sur l'onglet Réglagles, en sélectionnant le choix de menu Paramètres et, enfin, en cliquant sur l'onglet Autre. Trouver Calendrier dans la page Autres paramètres. On peut choisir soit le plan Par défaut ou Vacances. Il ne faut pas oublier de cliquer sur le bouton Appliquer les paramètres à droite dans le coin supérieur.

Ce serait bien s'il y avait une façon de faire ce choix de plan en vigueur à l'aide d'un interrupteur virtuel. Ce serait beaucoup mieux si les notifications étaient aussi dédoublées. Alors, il n'y aurait ni planning ni notifications par défaut, alors qu'avec le plan Vacances planning et notifications seraient fonctionnels.

Panneau de sécurité

Le panneau de sécurité de Domoticz constitue un déclencheur des plannings plus approprié qu'un interrupteur virtuel. Cliquer sur l'onglet Réglages, sélectionner Plus d'options dans le menu puis Panneau de sécurité pour qu'il surgisse.

security panel

Cliquer sur les boutons Disarm, Arm Home etc. C'est amusant à voir et on n'a pas à s'en faire, aucune alarme ne réveillera les voisins si rien n'est encore branché.

J'ai l'intention d'examiner l'utilisation de panneau de sécurité comme déclencheur des planning quand j'aurais des moyens de détecter les intrus.

Mise à jour du 10 février 2017

Il sera nécessaire de modifier la section #update timers du script enable_timers.sh à chaque addition ou élimination d'un événement programmé. Un utilisateur du forum Domoticz, philchillbill, a écrit un script Perl qui récupère les numéros d'identité des plannings pour ensuite engendrer le script. C'est quelque chose à essayer éventuellement, à mesure que je reconstruirai mon système domotique en éliminant le matériel X10.