Zonwering automatisch open en dicht laten gaan

Gestart door Joost, 27 oktober 2019, 07:36:53

Vorige topic - Volgende topic

Joost

Onderstaand dzVents-script kun je gebruiken om je zonwering automatisch open en dicht te laten gaan op basis van:

       
  • temperatuur
  • windkracht
  • windstoten
  • regen
  • regen
  • UV
  • LUX
Na zonsondergang zal de zonwering altijd open gezet worden en uiteraard is het ook mogelijk om de regels handmatig te overrulen.


-- Define all the sensors which needs to be considered for the sunscreen to close
local sensors = {
    temperature = {
        active = true,
        device = 'Temperature',
        closeRule = function(device)
            return device.temperature <= 15
        end
    },
    wind = {
        active = true,
        device = 'Wind',
        closeRule = function(device)
            return device.speed >= 50 or device.gust >= 150
        end
    },
    rain = {
        active = true,
        device = 'Rain',
        closeRule = function(device)
            return device.rainRate > 0
        end
    },
    rainExpected = {
        active = false,
        device = 'Rain expected', -- This needs to be a virtual sensor of type 'percentage'
        closeRule = function(device)
            return device.percentage > 15
        end
    },
    uv = {
        active = true,
        device = 'UV',
        closeRule = function(device)
            return device.uv <= 3
        end
    },
    lux = {
        active = false,
        device = 'Lux',
        closeRule = function(device)
            return device.lux <= 500
        end
    }
}

-- Define the name of your sunscreen device
local sunscreenDevice = 'Sunscreen'

-- Enable dry run mode to test the sunscreen script without actually activating the sunscreen
local dryRun = false

-- Define the name of a virtual switch which you can use to disable the sunscreen automation script
-- Set to false to disable this feature
local manualOverrideSwitch = false

-- Minutes to wait after a sunscreen close before opening it again.
local timeBetweenOpens = 10

return {
    active = true,
    on = {
        timer = {'every minute'}
    },
    logging = {
        level = domoticz.LOG_DEBUG,
        marker = 'Sunscreen'
    },
    execute = function(domoticz)

        local function switchOn(sunscreen, message)
            if (sunscreen.state == 'Closed') then
                if (not dryRun) then
                    sunscreen.switchOn()
                    domoticz.notify('Sunscreen', message)
                end
                domoticz.log(message, domoticz.LOG_INFO)
            end
        end

        local function switchOff(sunscreen, message)
            if (sunscreen.state == 'Open') then
                if (not dryRun) then
                    sunscreen.switchOff()
                    domoticz.notify('Sunscreen', message)
                end
                domoticz.log(message, domoticz.LOG_INFO)
            end
        end

        if (manualOverrideSwitch and domoticz.devices(manualOverrideSwitch).state == 'On') then
            domoticz.log('Automatic sunscreen script is manually disabled', domoticz.LOG_DEBUG)
            return
        end

        local sunscreen = domoticz.devices(sunscreenDevice)

        -- Sunscreen must always be up during nighttime
        if (domoticz.time.isNightTime) then
            switchOff(sunscreen, 'Closing sunscreen, It is night')
            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 .. ' treshold exceeded, Sunscreen up')

                    domoticz.log(sensorType .. ' treshold exceeded', domoticz.LOG_DEBUG)
                    -- Return early when we exeed any tresholds
                    return
                end
            else
                domoticz.log('Sensor not active skipping: ' .. sensorType, domoticz.LOG_DEBUG)
            end
        end

        -- All tresholds OK, sunscreen may be lowered
        if (sunscreen.lastUpdate.minutesAgo > timeBetweenOpens) then
            switchOn(sunscreen, 'Sun is shining, all thresholds OK, lowering sunscreen')
        end
    end
}


Peter_Celica

Hoi Joost,

Mooi script en het voldoet ook wel volgens mij, heb nu gelijk de Buienradar data gebruikt hier want splitsen van de TVL in de andere post is niks geworden en jij weet het waarschijnlijk ook niet waarom het fout gaat, heb al van alles geprobeerd tot ik Buienradar tegen kwam en die heeft de waarde gevoels temperatuur dus die maar gepakt.

Maar bij dit script krijg ik elke minuut een melding op mijn telefoon en via de mail welke actie er wordt uitgevoerd, hoe kan ik die meldingen stoppen ??

En ik heb nog 2 zonneschermen, kan ik die aan dit script ergens toevoegen en hoe ? of moet ik voor elk scherm een script laten draaien  ;)


Alvast bedankt,
Peter.

dude

Joost, dank voor dit script,

Kun je aangegeven met een voorbeeld hoe ik dit script daadwerkelijk koppel aan devices in domotics ?

bijv Device  = 'temperature'    en de combinatie function (device)
Hetzelfde geld voor sunscreen

is er aanvullende software nodig ? want bij mij werkt dit niet zo.
Hoop dat je hierop kunt reageren, want script ziet er functioneel leuk uit.

mvg

Gerard



Joost

Citaat van: dude op 27 mei 2020, 19:49:42
Kun je aangegeven met een voorbeeld hoe ik dit script daadwerkelijk koppel aan devices in domotics ?

bijv Device  = 'temperature'    en de combinatie function (device)
Hetzelfde geld voor sunscreen

temperature moet je vervangen door de de device-naam van jouw temperatuur-sensor in Domoticz. Hetzelfde geldt voor sunscreen.

ricvee

Hallo,

Ik ben een variant op dit script aan het maken.
Weet iemand hoe dat handmatig overrulen werkt?
Dat lukt me nog niet.

Met vriendelijke groet,

Richard
Oplossing gevonden!
Ik heb inmiddels begrepen hoe het werkt: je maakt een extra virtuele switch die je kunt uitzetten om het script uit te zetten, en daarna kun je dan handmatig schakelen.
Ik was in de veronderstelling dat er iets aan de zonwering gekoppeld kon worden waardoor het script dan automatisch uitgezet zou worden, maar zo werkt het dus niet...