Domotique

Premier rôle de Shirley : ouvrir les volets

Pendant ces trois premières semaines passées à s’installer, j’ai aussi « perdu » du temps sur la domotique de la maison. Il faut dire qu’une fois que le réseau était raccordé et qu’Internet était dans les PC, il m’était difficile de résister à la tentation, il fallait absolument que je branche et que je configure cette Vera 3 de MiCasaVerde… Cet article fait office de tuto allégé, je ne reviendrai pas sur toute l’installation de la Vera 3 ni sur sa description. D’autre le font beaucoup mieux que moi, comme Cédric avec son blog Maison et Domotique et ses tests sur les modules Fibaro ou sur la Vera. Il me servira aussi de pense-bête pour plus tard, au cas où je changeais trop de choses en même temps.

J’ai bénéficié d’une commande groupée sur le forum Toute la Domotique en partenariat avec la boutique en ligne Domadoo. J’ai acheté quatre modules pour volets roulant (des Fibaro FGR-221), la box domotique (une Vera 3) et Shirley le Karotz. J’en ai déjà parlé dans un précédent billet. Je passerai sur la configuration initiale de la box avec la création des pièces virtuelles (qui servent à catégoriser les modules, pour « ranger » les lumières du salon dans la pièce « Salon », etc etc).

Voici ici un détail qui a son importance et qui simplifiera la vie à nombre d’utilisateurs perdus dans la campagne: un réseau Z-Wave est un réseau radio maillé unique qui dépend du contrôleur (la box domotique), il faut inclure chaque module dans le réseau. Ainsi, personne d’autre ne pourra piloter les modules (ils seront même invisibles pour un nouveau contrôleur). Logiquement, pour inclure un module, il faut qu’il soit à moins de trois mètres du contrôleur. C’est gênant parce qu’il faut le câbler, l’inclure, le décâbler puis le recâbler à sa vraie place (dans l’interrupteur) et enfin, le configurer. Beaucoup de coups de tournevis pour pas grand chose… C’est sans compter une option planquée dans les menus de la Vera 3: « Full Power inclusion ». Cette option permet de scanner les modules Z-Wave à pleine puissance pendant 30 secondes sans qu’ils soient dans les trois mètres. La portée du Z-Wave est d’environ 30 mètres, largement plus grande que la maison… On va utiliser cette option que je trouve plus pratique (mais beaucoup moins sécurisée parce qu’à 30 mètres, le contrôleur rayonne dans la rue; et moins sain, on prend des ondes plein la figure…) Voilà pour la parenthèse…

Reprenons… Pour mettre tout ce petit monde en œuvre, j’ai commencé par raccorder les modules Z-Wave sur les interrupteurs des volets roulants. Une fois raccordés à leurs places, j’ai placé le contrôleur en mode « inclusion à pleine puissance », j’ai couru vers le premier module et j’ai appuyé 3 fois en moins d’une seconde et demie sur le bouton d’inclusion, et quand la box réagit, c’est que le module est reconnu. Il m’a fallu répéter l’opération quatre fois de suite pour intégrer les quatre volets roulant de la pièce de vie.

Une fois rangés dans leurs pièces respectives (Bureau / Cuisine / Salon / Séjour), j’ai pu jouer avec et tenter de les calibrer. Déjà, première chose à faire, changer le type d’interrupteur. Les modules sont préréglés pour fonctionner avec des boutons poussoirs monostables (qui envoient le courant quand ils sont maintenus par l’utilisateur); or nous avons des interrupteurs bistables (qui envoient le courant même si on relâche l’interrupteur). Un petit tour dans les paramètres du module, on passe la variable 14 à 1 (en 1 byte decimal) et le module saura qu’il est relié à un bistable. Ensuite, ce fût le drame… Pour pouvoir jouer sur la position « relative » des volets, les modules Fibaro pour volets roulant n’acceptent que des moteurs avec fin de course électromécaniques, c’est à dire avec un bouton ou une butée physique pour stopper leur alimentation. Or, nous avons ici des moteurs Somfy avec fin de course purement électronique. Je ne connais pas la technologie employée mais en tous cas, les modules Fibaro n’arrivent à rien. Soit ils bougent de 20 centimètres et s’arrêtent, soit ils ne répondent pas. J’ai du désactiver la fonction en passant la variable 10 à 1 (en 1 byte decimal, toujours). En conséquence, impossible de programmer un arrêt du volet à mi hauteur (ou 25% ou 75% ouvert). Et ça, c’est franchement dommage, si j’avais su plus tôt, j’aurais fait changer le type de moteur. Fibaro prévoit de sortir un nouveau module pour volets roulants qui prendra en compte ces volets à fin de course électronique… Pour le moment, on fera sans variation.

Nos volets sont inclus dans le système, on peut les piloter depuis l’interrupteur ou depuis la box domotique (sur le PC ou sur le smartphone), il faut pouvoir les ouvrir tous en même temps. Pour ça, j’ai créé une nouvelle scène dans la Vera 3 qui lance l’ouverture des volets, tour à tour avec une seconde de décalage entre chaque (pour ne pas avoir d’appel de courant trop important d’un seul coup). Depuis le smartphone, on lance la scène et miracle, tous les volets s’ouvrent gentiment.

Voyons comment préparer Shirley à son nouveau job.

J’avais envie que Shirley lance l’ordre d’ouvrir les volets sans avoir à lancer l’appli du smartphone et sans avoir à chercher le lien sur le PC, simplement en lui passant un tag RFID sous le nez. Une rapide recherche sur Google et l’application Kron pour Karotz fait son apparition. C’est une appli qui permet d’envoyer une requête HTTP sur un événement du Karotz (reconnaissance vocale, tag RFID, déclenchement programmé ou aléatoire, etc etc etc). Via l’aide en ligne de la Vera 3, on chope l’URL de la requête et on la colle dans l’appli Kron :

http://ip_de_la_vera:3480/data_request?id=lu_action&serviceId=urn:micasaverde-com:serviceId:HomeAutomationGateway1&action=RunScene&SceneNum=numero_de_la_scene

On indique un déclenchement par tag RFID et on tente. Miracle encore, les volets s’ouvrent en passant un porte-clefs sous le nez de Shirley.

Ah oui mais il y a un problème… Il est 10 heures du matin, il fait beau, et voilà le soleil qui tape au sud-est et la TV est exposée en plein rayonnement. C’est pas très bon.

Pour contrôler s’il faut ouvrir ou non le volet du salon, il va falloir coder un programme en LUA, un langage encore inconnu pour moi mais qui s’apprend très vite parce qu’il ressemble très fortement au C. J’ai besoin de connaitre la météo et la position du soleil. Ça tombe bien puisque deux add-on de la Vera 3 offrent ces informations: Wunderground Weather Plugin et Heliotrope. Voyons ce programme d’un peu plus près

On se fixe quelques raccourcis de lecture :

SID_AstronomicalPosition_Sun = "urn:futzle-com:serviceId:AstronomicalPosition_Sun"
SID_HomeAutomationGateway1 = "urn:micasaverde-com:serviceId:HomeAutomationGateway1"
SID_Weather1 = "urn:upnp-micasaverde-com:serviceId:Weather1"
id_Heliotrope = xx --penser à changer le numéro du module heliotrope
id_Meteo = xx --penser à changer le numéro du module météo
id_VR_Salon = xx --penser à changer le numéro du module du volet roulant du salon
id_VR_Bureau = xx --penser à changer le numéro du module du volet roulant du bureau
id_VR_Cuisine = xx --penser à changer le numéro du module du volet roulant de la cuisine
id_VR_Sejour = xx --penser à changer le numéro du module du volet roulant du séjour

On commence le vrai code en récupérant les infos sur la position du soleil pour définir une variable isSoleilSurTV oui/non qui indique si le soleil tape sur la TV (le soleil tape quand l’azimut est compris entre 100° et 137°) :

local tmp_Azimuth = luup.variable_get(SID_AstronomicalPosition_Sun, "Azimuth", id_Heliotrope)
local isSoleilSurTV = 0
if ((tonumber(tmp_Azimuth) > 100) and (tonumber(tmp_Azimuth) < 137)) then
 isSoleilSurTV = 1
end

On continue en récupérant les infos sur les conditions météo actuelles, pour définir une variable isBadMeteoForTV oui/non qui indique si la météo est mauvaise (« mauvaise » pour la TV, donc grand soleil) :

local tmp_Meteo = luup.variable_get(SID_Weather1, "ConditionGroup", id_Meteo)
local isBadMeteoForTV = 0
if ((tmp_Meteo == "clear")
 or (tmp_Meteo == "hazy")
 or (tmp_Meteo == "sunny")
 or (tmp_Meteo == "mostlysunny")
 or (tmp_Meteo == "partlycloudy")
 or (tmp_Meteo == "partlysunny")) then 
 isBadMeteoForTV = 1
end

Résumons: si le soleil n’est pas dans la zone vue par la TV, on peut ouvrir le volet du salon, sinon on vérifie la météo. S’il fait beau, on laisse fermé, sinon on ouvre. On fait le tri avec des conditions if / then / else, et on lance l’ouverture des autres volets une fois qu’on a fait la vérification du salon :

if (isSoleilSurTV == 1) then
 if (isBadMeteoForTV == 1) then
  -- ben on fait rien, on laisse fermé
 else
  luup.call_action(SID_SwitchPower1, "SetTarget", {newTargetValue = "1"}, id_VR_Salon)
 end
else
 luup.call_action(SID_SwitchPower1, "SetTarget", {newTargetValue = "1"}, id_VR_Salon)
end
luup.call_action(SID_SwitchPower1, "SetTarget", {newTargetValue = "1"}, id_VR_Bureau)
luup.call_action(SID_SwitchPower1, "SetTarget", {newTargetValue = "1"}, id_VR_Cuisine)
luup.call_action(SID_SwitchPower1, "SetTarget", {newTargetValue = "1"}, id_VR_Sejour)

Voilà, Shirley est capable d’envoyer l’ordre, et l’ordre est interprété par la box qui annule l’ouverture du salon si les conditions sont réunies. J’ai codé une dernière scène qui ouvre le volet du salon à 11 heures le matin, puisque quoi qu’il arrive, le soleil sera passé.

Commentaires fermés sur Premier rôle de Shirley : ouvrir les volets