Détecteur de mouvement v2 et v2.1

27 novembre 2017

Une petite mise à jour du script de détection de mouvement qui allume une lampe sur détection de mouvement.

Le voici :

-- ##### Configuration start here ####
-- Define morning hour
morning = 6
-- Define night hour
night = 22
-- Define motion sensor
local motion_sensor  = 'Xiaomi Motion Sensor Entree'
-- Define light bulb
local light_bulb = 'YeelightWhite'
-- To turn debug on set to true
debug=false
-- #### Configuration stop here ####

s = otherdevices_lastupdate[motion_sensor]
time = os.date("*t")
t1 = os.time()
year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)

commandArray = {}
    t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
    difference = (os.difftime (t1, t2))
    if (devicechanged[motion_sensor] == 'On') then
        if (debug) then print("Motion on") end
        if (otherdevices[light_bulb] == 'Off') then
            if (time.hour < morning or time.hour > night) then
                if (debug) then print('its nighttime') end
                commandArray[1]={[light_bulb]='On'}
                commandArray[2]={[light_bulb]='Set Level 1'}
            else
                if (debug) then print('its daytime') end
                commandArray[1]={[light_bulb]='On'}
                commandArray[2]={[light_bulb]='Set Level 40'}
            end
        end
    end
    if (otherdevices[light_bulb] ~= 'Off' and otherdevices[motion_sensor] == 'Off' and difference > 30) then
        if (debug) then print('Turning ' .. light_bulb .. ' Off after '..difference..'.') end
        commandArray[light_bulb]='Off'
    end
return commandArray

Il y a deux différences. La première, je n’utilise plus timeofday[Nighttime] car en période d’hiver, la lampe s’éclaire faiblement au alentour de 17h du coup ce n’est pas pratique.

J’ai donc définis moi même les heures avec les variables morning et night.

Du coup la lampe ne s’éclaire faiblement qu’entre 23h et 5h du matin. A vous de les changer en fonction.

Deuxième changement, je défini le nom du détecteur de mouvement et de la lampe une seule fois au début du script, comme ça s’il change j’ai juste à changer le variable motion_sensor et light_bulb en fonction et je n’ai pas besoin de reparcourir tout le script.

EDIT: Voici une v2.1 :

-- ##### Configuration start here ####
nowday = os.date("%w")
-- Define morning hour
if (nowday == 0 or nowday == 6) then
    morning = 10
else
    morning = 6
end
-- Define night hour
night = 22
nolight = 1
-- Define motion sensor
local motion_sensor  = 'Xiaomi Motion Sensor Entree'
-- Define light bulb
local light_bulb = 'YeelightWhite'
-- To turn debug on set to true
debug=false
-- #### Configuration stop here ####

s = otherdevices_lastupdate[motion_sensor]
time = os.date("*t")
t1 = os.time()
year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)

commandArray = {}
    t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
    difference = (os.difftime (t1, t2))
    if (devicechanged[motion_sensor] == 'On') then
        if (debug) then print("Motion on") end
        if (otherdevices[light_bulb] == 'Off') then
            if (time.hour < morning and time.hour < nolight or time.hour > night and time.hour < nolight) then
                if (debug) then print('its nighttime') end
                commandArray[1]={[light_bulb]='On'}
                commandArray[2]={[light_bulb]='Set Level 1'}
            elseif (time.hour >= morning and time.hour < nolight or time.hour <= night ) then
                if (debug) then print('its daytime') end
                commandArray[1]={[light_bulb]='On'}
                commandArray[2]={[light_bulb]='Set Level 40'}
            end
        end
    end
    if (otherdevices[light_bulb] ~= 'Off' and otherdevices[motion_sensor] == 'Off' and difference > 30) then
        if (debug) then print('Turning ' .. light_bulb .. ' Off after '..difference..'.') end
        commandArray[light_bulb]='Off'
    end
return commandArray

J’ai rajouté la variable nolight qui permet de spécifier à partir de quelle heure la lampe ne s’allume plus la nuit.

Dans mon cas, la lampe ne s’allume plus entre 1h du matin et 6h.

Pas de commentaire

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.