Domoticz

Mechanische afzuiging met timer uitzetten Domoticz en Lua

Je wilt graag je douche netjes houden en je afzuiging niet uren en uren laten draaien zolang dit niet nodig is, ik schakel hem bijvoorbeeld uit met een klik aan klik uit wandcontactdoos. Nu kan je dit zelf doen maar dit kan je ook automatische uit laten schakelen. Dit gaat met een timer die je zelf in kunt stellen.

pv output domoticzv2020 1 5

Om te beginnen ga je naar instellingen
en daarna ook instellingen
daarna klik je het knopje overige aan

pv output domoticzv2020 1 6

Nu zal bijna onder aan het vakje DZEVENTS staan hier moet het vinkje voor staan. En nu moet je boven aan de pagina op Bewaar Instellingen drukken anders slaat hij het niet op.

advertentie :

Het script en de behorende uitleg volgt hieronder:

Nu mag je weer naar instellingen gaan , daarna naar meer opties.
Daarna naar Gebeurtenissen.
En mag je op het plusje drukken. (plaatje is van pvoutput maar stappen zijn het zelfde)

pv output domoticzv2020 1 3

Hier ga je naar DZEVENTS en dan Timer.
(dit zorgt er voor dat het script een aantal minuten gaat aftellen en dan de schakelaar om haalt en je een bericht via telegram krijgt wat er gebeurd)

pv output domoticzv2020 1 4

En hier geef je aan welke gegevens je wilt gaan gebruiken, verander de tijden naar je eigen tijden welke je wilt gaan gebruiken.

       local klaarDelay = 30 -- tijd in minuten
        local OffDelay = 60 - klaarDelay -- tijd in minuten

Verander hier de naam van je Badkamer_afzuiging of een ander apparaat wat je automatische uit wilt laten schakelen en ook bij de andere plekken waar die naam staat.

local myDevicename = 'Badkamer_afzuiging'

De Complete gebruikte code staat hieronder en na eigen instellingen veranderen.

Nu selecteer je onderstaande script en plakt deze er in :

--[[ Badkamer_afzuiging dzVents script time
     Script gedownload van huizebruin.nl
    Te gebruiken voor domoticz versie >= V4.11305
]]--
local myDevicename = 'Badkamer_afzuiging'
local myEvent = 'Badkamer'

return
{
    on =
    {
        devices =
        {
            myDevicename,           
        },
        customEvents =
        {
            myEvent,
        },
    },
   
    logging =
    {
        level = domoticz.LOG_DEBUG,  -- change to LOG_ERROR when ok
        marker = 'Badkamer_afzuiging',
    },

    execute = function(dz, item)
       
        local myDevice = dz.devices(myDevicename)
       
        local msgAan = 'De Badkamer_afzuiging is aangezet!'
        local msgKlaar = 'Het douchen is klaar om Badkamer_afzuiging na te laten draaien!'
        local msgWordt = 'De Badkamer_afzuiging staat nog aan en wordt nu uitgezet!'
        local msgUit = 'De Badkamer_afzuiging is uitgezet!'
      
        local klaarDelay = 30 -- tijd in minuten
        local OffDelay = 60 - klaarDelay -- tijd in minuten
       
       
        local function osCommand(cmd, foreGround)
            local foreGround = foreGround and '' or ' &'
            local cmd = cmd .. foreGround
           
            dz.log('Executing Command: ' .. cmd,dz.LOG_DEBUG)
           
            local fileHandle = assert(io.popen(cmd .. ' 2>&1 || echo ::ERROR::', 'r'))
            local commandOutput = assert(fileHandle:read('*a'))
            local returnTable = {fileHandle:close()}

            if commandOutput:find '::ERROR::' then     -- something went wrong
                dz.log('Error ==>> ' .. tostring(commandOutput:match('^(.*)%s+::ERROR::') or ' ... but no error message ' ) ,dz.LOG_DEBUG)
            else -- all is fine!!
                dz.log('ReturnCode: ' .. returnTable[3] .. '\ncommandOutput:\n' .. commandOutput, dz.LOG_DEBUG)
            end

            return commandOutput,returnTable[3] -- rc[3] contains returnCode
        end
       
       
        local function sendMQTT(message, topic)
            local MQTTTopic = topic or 'domoticz/out'
            local json = {} json.msg = message
            json = dz.utils.toJSON(json)
        
            osCommand ( 'mosquitto_pub' ..  ' -t '  .. MQTTTopic .. " -m '" .. json .. "'")
        end
       
        local function sendMessage(message, emitMinutes)
           
            local subject = (dz.moduleLabel or 'Badkamer_afzuiging'):gsub('#','')
            dz.notify(subject, message, dz.PRIORITY_MEDIUM, dz.SOUND_PERSISTENT, nil, dz.NSS_TELEGRAM)

            sendMQTT(message)
           
            dz.log(message,dz.LOG_DEBUG)
            if emitMinutes ~= nil then dz.emitEvent(myEvent, emitMinutes).afterMin(emitMinutes) end
            -- if emitMinutes ~= nil then dz.emitEvent(myEvent, emitMinutes).afterSec(emitMinutes) end -- for test only
        end
       
        if item.isDevice and item.state == 'On' then
            sendMessage(msgAan, klaarDelay)
                       
        elseif item.isCustomEvent and myDevice.state == 'On' and tonumber(item.data) == klaarDelay then
            sendMessage(msgKlaar, OffDelay)
           
        elseif item.isCustomEvent and myDevice.state == 'On' and tonumber(item.data) == OffDelay then
            myDevice.switchOff().silent()
            sendMessage(msgWordt)
           
        elseif item.isDevice and item.state == 'Off' then
            sendMessage(msgUit)
           
        end
    end
}

Deze sla je op als Badkamer_fan dzVents script
Nu druk je op AAN en daarna op OPSLAAN.

Badkamer afzuiging dzVents time script

Nu zou je script moeten gaan lopen zodra je de schakelaar van je Badkamer_afzuiging hebt aangezet. .

( voor de test of het werkt kan je de tijd aanpassen naar een paar minuten later nadat je hem hebt aangezet )
Mits je dit verandert hebt.
check je log voor eventuele fouten

Zorg wel dat je telegram al hebt ingesteld zie ook
Zorg ook dat je al een schakelaar hebt met de naam Badkamer_afzuiging en deze al werkt.

bron huizebruin.nl

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *