Le REV-SHUTTER de Chacon-Dio fait bien le taf. Il permet de pouvoir gérer manuellement en cas de panne, et il gère d'autres protocoles si besoin (wifi)
Au niveau de l'installation (en remplacement d'un ancien interrupteur), il arrive que le neutre (fil bleu) soit branché en direct avec le store. Il faut aller le récupérer pour le REV-SHUTTER car il est nécéssaire :
Faire identifier le store dans Domoticz (Protocole AC = Lightning 2) dans le cas d'un RFX433
On va maintenant créer un interrupteur virtuel qui se déclenchera lorsque le soleil sera visible depuis l'endroit où est installé le store.
Il faut déterminer la “fenêtre de tir” dans laquelle le soleil sera visible : C'est a dire une fourchette d'azimuts (min/max) et une altitude (élévation) minimale.
L'azimut et l'altitude se calculent en angles (degrés) :
Je vous conseille d'utiliser cet outil, qui vous permettra de calculer la fourchette d'azimuts idéale selon vos coordonnées GPS : https://www.sunearthtools.com/dp/tools/pos_sun.php
L'élévation est l'angle entre le sol, votre position, et celle du soleil.
Si vous habitez en ville par exemple, les immeubles devant vous peuvent cacher le soleil, et donc il est inutile de donner une altitude trop faible, car le soleil ne sera pas directement visible si il se trouve derrière ces immeubles.
Pour trouver l'angle idéal, vous pouvez le mesurer (Technique avec un rapporteur : http://clea-astro.eu/lunap/Coordonnees/CoordActivHauteur.html ) ou bien attendre un jour où le soleil est à la position la plus basse qui vous convient, et consulter son altitude grâce à l'outil de sunearthtools (lien plus haut)
Personnellement, j'ai utilisé la classe SunCalc en php : https://github.com/gregseth/suncalc-php
Le script calcule ensuite la position du soleil et envoie “Off” ou “On” à l'interrupteur virtuel si il se trouve dans la fenêtre de tir :
<?php include __DIR__."/lib/classes/SunCalc.class.php"; include __DIR__."/init.php"; // Définitions define("LATITUDE",44); define("LONGITUDE",7); define("AZIMUT_MIN",150); // Azimut minimal define("AZIMUT_MAX",243); // Azimut maximal define("ALTITUDE_MIN",35); // Altitude minimale $DateTimeZone = new DateTimeZone("Europe/Paris"); $date=new DateTime($date, $DateTimeZone); $sc = new AurorasLive\SunCalc($date, LATITUDE,LONGITUDE); $sunPos = $sc->getSunPosition($date); $sunAzimuth=180+ $sunPos->azimuth*180 / M_PI; $sunAltitude=$sunPos->altitude*180 / M_PI; // echo "Azimut : $sunAzimuth."°" - Altitude : ".$sunAltitude."°"; $status=($sunAzimuth>=AZIMUT_MIN && $sunAzimuth<=AZIMUT_MAX && $sunAltitude>=ALTITUDE_MIN)?"On":"Off"; // Get Current Status $url=$conf["URL"]."?type=devices&rid=".$idSondeSoleil; $reponse=json_decode(file_get_contents($url,false,$context),true); if ($reponse["result"][0]["Data"]!=$status) { $url=$prefixurl."param=switchlight&idx=".$idSondeSoleil."&switchcmd=".$status."&level=0".$suffixurl; fopen($url,"r",false,$context); } ?>
La variable $isSondeSoleil
contient l'ID du swich dans Domoticz qu'on peut retrouver avec le nom “Soleil face au balcon” dans le script LUA suivant.
Vous pouvez utiliser l'API d'openweather pour trouver votre bonheur :
J'utilise une variable Domoticz position-store
au lieu de piloter directement la sonde du store car il sera possible de piloter manuellement le store si l'on souhaite contredire les souhaits de l'algorithme.
local message='' --Variables de condition local temperature_min = 22.5 -- °C local temperature_tolerance = 0.5 -- °C local nebulosite_max = 40 -- % local vent_max = 30 -- Km/h -- ------------------------------------------------------------------------------------------------- commandArray = {} --Sonde déclencheuse local sonde_temperature = 'Météo' --Nom de la sonde de température extérieure --La sonde est mise à jour toutes les 5 minutes (voir cron). Ce sera la fréquence d'exécution de ce script. if (devicechanged[sonde_temperature]) then local temperature_exterieure=tonumber(otherdevices_temperature[sonde_temperature]) -- Sonde de température extérieure local nebulosite = tonumber(otherdevices['Nuages']) --Sonde de nébulosité local vent = tonumber(otherdevices_windspeed['Vent'])*3.6 --Sonde de vent en m/s convertie en Km/h local soleil = otherdevices['Soleil face au balcon'] --Le soleil est face au balcon ? local store = 'Store' --Nom du store local etatActuel=uservariables["position-store"]; -- Si le soleil est en face du balcon, qu'il n'y a pas trop de nuages, que la température est assez chaude, et qu'il n'y a pas trop de vent... if ( soleil=='On' and (temperature_exterieure>=temperature_min+temperature_tolerance) and (nebulosite<=nebulosite_max) and (vent<vent_max)) then etatDesire="On" else etatDesire="Off" end if (etatDesire ~= etatActuel) then if (etatDesire=='On') then message="☂️ Les conditions sont réunies pour déployer le store"; elseif (soleil == 'Off') then message="🌂 Le soleil n'est plus visible -> On rétracte le store"; elseif (temperature_exterieure < temperature_min+temperature_tolerance) then message="🌂 Il fait trop froid -> On rétracte le store"; elseif (nebulosite > nebulosite_max) then message="🌂 Trop de nuages -> On rétracte le store"; elseif (vent >= vent_max) then message="🌂 Trop de vent -> On rétracte le store"; else message="🌂 Raison inconnue !"; end commandArray['Variable:position-store']=etatDesire print(message); commandArray['SendNotification']='Store du Balcon#'..message..'#normal#sound'; if (etatDesire == 'On') then commandArray[store]="Off" -- Off = Closed = Déployé else commandArray[store]="On" -- On = Open = Rétracté end end end return commandArray