Wiki CgX

Parce que j'ai un cerveau, mais pas trop.

Outils pour utilisateurs

Outils du site


it:domotique:domoticz:chacon-dio:storebanne

Gestion automatique d'un store banne

Matériel requis (RFX433)

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 :

Création des sondes dans Domoticz

Contrôle du store

Faire identifier le store dans Domoticz (Protocole AC = Lightning 2) dans le cas d'un RFX433

Course du soleil devant le store

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) :

Azimut

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

Altitude (Elévation)

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)

Le script

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 :

sendBalconSoleil.php
<?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.

Variables Météo

Vous pouvez utiliser l'API d'openweather pour trouver votre bonheur :

  • Sonde de vent
  • Sonde de nébulosité (Pourcentage de nuages dans le ciel)
  • Sonde de température extérieure (si vous n'en avez pas)

Création du script d'événements (LUA)

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.

storeBanne.lua
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
it/domotique/domoticz/chacon-dio/storebanne.txt · Dernière modification : 23 Aug 2023 :: 13:39 de CgX