Zoals je in een vorige blog hebt kunnen lezen gebruik ik Xiaomi Aqara sensoren. Nu heb ik recent ook de Aqara Motion Sensor gekocht en deze bevalt me erg goed.




De motion sensor is lekker klein en detecteert beweging erg goed. De sensor heeft echter 1 nadeel. Zodra deze beweging heeft gedetecteerd, zal deze op “On” staan voor ongeveer 2 minuten en in de tussentijd geen beweging detecteren. Dat kan een issue zijn als je deze gebruikt om een lamp voor een bepaalde tijd aan te zetten met de voorwaarde dat deze lamp aanblijft zolang er nog beweging is.

Dit kan ik het beste uitleggen met onderstaande tijdsdiagram:

     Lamp  +-------------+
 
    Motion +--(1)--+  +--(2)--+

In bovenstaande situatie kun je de lamp voor een bepaalde tijd aanschakelen zodra er beweging wordt gedetecteerd (Motion (1) hier). Als er echter beweging (Motion (2)) wordt gedetecteerd voordat de lamp automatisch uitgaat heb je een probleem. Immers als de lamp uitgaat en je bent nog steeds in de ruimte, dan wil je dat de lamp aanblijft. De motion sensor zal echter als de lamp uitgaat even geen extra beweging kunnen detecteren daar hij al eerder is getriggerd.

Dit valt in Domoticz eenvoudig op te lossen door een user-variabele aan te maken die je gebruikt om beweging vast te leggen. Deze user-variabele kun je dan vervolgens weer gebruiken als de lamp uitgaat. In dat geval controleer je of er in de tussentijd beweging is gedetecteerd en afhankelijk hiervan zet je de lamp dan meteen weer aan.

In Domoticz kun je eenvoudig een gebruikersvariabele aanmaken bij ‘Instellingen > Meer opties > gebruikersvariabelen’.




Vervolgens maak je een LUA ‘Device’ Script. Een LUA ‘Device’ script wordt altijd aangeroepen bij een verandering van een device.

--------------------------------------------------------------------------------
-- Motion
--------------------------------------------------------------------------------
-- Script to check all motion sensors and act accordingly.
--------------------------------------------------------------------------------
commandArray = {}

-- loop through all the changed devices
for deviceName,deviceValue in pairs(devicechanged) do

    if (deviceName == 'Motion Bijkeuken 1') then
    
        if (deviceValue == "On") then
            print("Beweging (1) in Bijkeuken gedetecteerd")
            
            -- Set 'Motion_Bijkeuken_1' toggle
            commandArray['Variable:Motion_Bijkeuken_1'] = tostring(1);
            
            -- Check if 'Lamp Bijkeuken' is not already on
            if (otherdevices['Lamp Bijkeuken'] == 'Off') then
    
                -- Turn 'Lamp Bijkeuken' on for 'x' minutes
                commandArray['Lamp Bijkeuken'] = 'On FOR 3'
    
            end
            
        elseif (deviceValue == "Off") then
            
            -- Reset 'Motion_Bijkeuken_1' toggle
            commandArray['Variable:Motion_Bijkeuken_1'] = tostring(0);
            
        end
    

    -- Lamp Bijkeuken switches Off but motion detected in the meantime?
    elseif ( (deviceName == 'Lamp Bijkeuken') and (deviceValue == "Off") ) then
    
        -- In the meantime motion detected
        if (uservariables["Motion_Bijkeuken_1"] == 1) then
            
            -- Check if 'Lamp Bijkeuken' is not already on
            if (otherdevices['Lamp Bijkeuken'] == 'Off') then
                -- Turn 'Lamp Bijkeuken' on for 'x' minutes
                commandArray['Lamp Bijkeuken'] = 'On FOR 3'
            end
        end

    end
end

return commandArray

Op deze manier onthoud je dus dat er een extra beweging is gedetecteerd in de tussentijd dat de lamp nog aan was. Dit werkt erg goed bij mij.