DZVents : Automatisation store banne

L’utilisation d’un store banne motorisé doit être soumis à la surveillance des phénomènes météorologiques tels que la pluie, le soleil, le vent (vitesse et/ou rafale)…
Si vous souhaitez laisser votre store baissé en journée, pour par exemple limiter l’apport solaire dans votre maison, difficile de s’absenter sans risquer sa détérioration.
Remb0, un membre actif du forum domoticz.com a conçu un script DZvents plutôt bien pensé.
Je l’ai modifié pour mes propres besoins, et traduit.


Son principe est assez simple :
vous définissez des seuils pour chacune des sondes que vous souhaitez utiliser. Si vous ne disposez pas de sondes physiques pour remplir cette mission, vous pouvez utiliser les sondes virtuelles de Forecast.io par exemple.
Six devices sont utilisable et définissable dans le tableau local sensors : La température extérieure, le vent (vitesse et rafale), la pluie, les prévisions de pluie, les UV et la luminosité.
Trois paramètres sont personnalisable :

  • active => true (pour prendre en compte le capteur) ou false (pour l’ignorer)
  • device => Le nom du device tels qu’il est déclaré dans domoticz
  • closeRule => le ou les seuils à prendre en compte
  • Ensuite déclarez le nom du device actionnant votre store via la variable local sunscreenDevice
    Un mode test vous permet de tester le fonctionnement du script sans actionner votre store, pour cela passez la variable local dryRun à « Y »
    Déclarez un éventuel device pour mettre votre store en fonctionnement manuel via la variable local manualOverrideSwitch Définir sur false pour désactiver cette fonctionnalité
    La variable local timeBetweenOpens vous permet de définir un délai (en minutes) entre deux mouvements du store
    local notification = "Y" Active les notifications, local notification = "N" les désactive
    pour une notification via un ou plusieurs sous système de notification, personnalisez la variable local SubSystem Les Systèmes de notification disponibles sont :

  • domoticz.NSS_GOOGLE_CLOUD_MESSAGING
  • domoticz.NSS_HTTP
  • domoticz.NSS_KODI
  • domoticz.NSS_LOGITECH_MEDIASERVER
  • domoticz.NSS_NMA
  • domoticz.NSS_PROWL
  • domoticz.NSS_PUSHALOT
  • domoticz.NSS_PUSHBULLET
  • domoticz.NSS_PUSHOVER
  • domoticz.NSS_PUSHSAFER
  • Pour une notification sur plusieurs systèmes, séparez les systèmes par une virgule et entourez l’ensemble par des {}. Exemple :{domoticz.NSS_TELEGRAM, domoticz.NSS_HTTP}

    le script complet

    
    -- v1.00 Auteur Remb0  https://gadget-freakz.com/make-you-sunscreen-smart-with-dzvents-scripting/
    -- v1.1 papoo traduction, suppression log csv, ajout notifications subsystem... 
    
    -- Définir tous les capteurs qui doivent être pris en compte pour la fermeture du store
    local sensors = {
        temperature = {
            active = true,
            device = 'Temperature exterieure',
            closeRule = function(device)
            return device.temperature <= 20
            end
            },
        wind = {
            active = true,
            device = 'Anémomètre',
            closeRule = function(device)
            return device.speed >= 50 or device.gust >= 150
            end
            },
        rain = {
            active = true,
            device = 'Pluviomètre',
            closeRule = function(device)
            return device.rainRate > 0
            end
            },
        rainExpected = {
            active = false,
            device = 'IsItGonnaRain', -- Ce doit être un capteur virtuel de type "pourcentage"
            closeRule = function(device)
            return device.percentage > 15
            end
            },
        uv = {
            active = true,
            device = 'UV Index',
            closeRule = function(device)
            return device.uv <= 0
            end
            },
        lux = {
            active = false,
            device = 'Lux',
            closeRule = function(device)
            return device.lux <= 500
            end
            }
    }
    
    local sunscreenDevice = 'Store' -- Définissez le nom de votre périphérique d'écran solaire (type on/off ou blind)
    local dryRun = 'N'              -- Activer ce mode de fonctionnement (Y) pour tester le script de protection solaire sans activer réellement le store
                                    -- Définissez le nom d'un commutateur virtuel que vous pouvez utiliser pour désactiver le script d'automatisation du store.
                                    -- Définir sur false pour désactiver cette fonctionnalité
    local manualOverrideSwitch = 'presences'
    local timeBetweenOpens = 10     -- Minutes à attendre après la fermeture du store avant de l'ouvrir à nouveau.
    local notification = "Y"  -- (Y) Active les notifications, (N) les désactive 
    local SubSystem =   domoticz.NSS_TELEGRAM--[[ Systèmes de notification disponibles :
                            NSS_GOOGLE_CLOUD_MESSAGING NSS_HTTP NSS_KODI NSS_LOGITECH_MEDIASERVER NSS_NMA NSS_PROWL NSS_PUSHALOT NSS_PUSHBULLET NSS_PUSHOVER NSS_PUSHSAFER
                            Pour une notification sur plusieurs systèmes, séparez les systèmes par une virgule et entourez l'ensemble par des {}.
                            Exemple :{domoticz.NSS_TELEGRAM, domoticz.NSS_HTTP}
                        --]]
    local message = '.'
    
    return {
        active = true,
        on = {
        timer = {'every minute'}
        },
        logging = {
            -- level = domoticz.LOG_INFO,                                             -- Seulement un niveau peut être actif; commenter les autres
            -- level = domoticz.LOG_ERROR,
            level = domoticz.LOG_DEBUG,
            -- level = domoticz.LOG_MODULE_EXEC_INFO,
        marker = 'STORE v1.1 '
        },
        execute = function(domoticz)
    
        -- FUNCTIONS
    
        local function switchOn(sunscreen, message)
            if (sunscreen.state == 'Closed' or sunscreen.state == 'Off') then
                if dryRun == 'N' then
                    sunscreen.switchOn()
                    if notification == "Y" then
                        if SubSystem ~= nil then 
                            domoticz.notify('Store', message, '', '', '', SubSystem)
                            else
                            domoticz.notify('Store', message)
                        end 
                    end
                end
                domoticz.log(message, domoticz.LOG_INFO)
            else
                domoticz.log('Le store est déjà baissé' , domoticz.LOG_INFO)
            end
        end
    
        local function switchOff(sunscreen, message)
            if (sunscreen.state == 'Open' or sunscreen.state == 'On') then
                if dryRun == 'N' then
                    sunscreen.switchOff()
                    if notification == "Y" then
                        if SubSystem ~= nil then 
                            domoticz.notify('Store', message, '', '', '', SubSystem)
                            else
                            domoticz.notify('Store', message)
                        end 
                    end
                end
                domoticz.log(message, domoticz.LOG_INFO)
            end
        end
    
        -- PROGRAM STARTS
    
        if (manualOverrideSwitch and domoticz.devices(manualOverrideSwitch).state == 'On') then
            domoticz.log('Le script store automatique est désactivé manuellement', domoticz.LOG_DEBUG)
            return
        end
    
        local sunscreen = domoticz.devices(sunscreenDevice)
        -- Le store doit toujours être remonté pendant la nuit
        if (domoticz.time.isNightTime) then
            switchOff(sunscreen, 'Fermeture du store, c\'est la nuit')
            message = 'Fermeture du store, c\'est la nuit'
            return
        end
        -- Check all sensor tresholds and if any exeeded close sunscreen
        for sensorType, sensor in pairs(sensors) do
            if (sensor['active'] == true) then
                local device = domoticz.devices(sensor['device'])
                local closeRule = sensor['closeRule']
                domoticz.log('Checking sensor: ' .. sensorType, domoticz.LOG_DEBUG)
                if (closeRule(device)) then
                    switchOff(sunscreen, sensorType .. ' seuil dépassé, remontée du store')
                    domoticz.log(sensorType .. ' seuil dépassé', domoticz.LOG_DEBUG)
                    message = (sensorType .. ' seuil dépassé')
                    -- Return early when we exeed any tresholds
                    return
                end
            else
                domoticz.log('Sonde non active ignorée : ' .. sensorType, domoticz.LOG_DEBUG)
            end
        end
    
        -- Tous les seuils sont corrects, le store peut être abaissé
        domoticz.log('Dernière action du store (en minutes) : ' .. sunscreen.lastUpdate.minutesAgo, domoticz.LOG_DEBUG)
        domoticz.log('Minutes à attendre après la fermeture du store avant de l\'ouvrir à nouveau : ' .. timeBetweenOpens, domoticz.LOG_DEBUG)
        if (sunscreen.lastUpdate.minutesAgo > timeBetweenOpens) then
            message = 'Le soleil brille, tous les seuils sont corrects, abaissement du store'
            switchOn(sunscreen, message)
        end
    
    end
    }
    

    retrouver la dernière version de ce script sur [homepage]https://github.com/papo-o/domoticz_scripts/blob/master/dzVents/scripts/store.lua[/homepage]

    Laisser un commentaire