Domotica - Dummy to Expert: Automatische slaapstand

Door virtualite op donderdag 11 januari 2018 11:22 - Reacties (8)
Categorie: Domotica, Views: 2.475

In het voorgaande deel had ik een scene "Slapen" aangemaakt. Deze schakelde diverse verlichting, apparaten en de versterker uit wanneer deze op de telefoon "handmatig" werd ingedrukt.

Nu was de situatie vorige week zo dat ik de slaapstand vorige week ben vergeten in te schakelen. Dit grapje heeft me ongeveer §6,00 extra gas/elektra verbruik opgeleverd.

Het is dus tijd om de slaapstand ook te voorzien van een automatische stand.


Na de ontvangst van een Neo CoolCam PIR Motion Detector kon ik direct aan de slag om de automatische stand te gaan configureren.

De automatische slaapstand moet voldoen aan verschillende requirements, namelijk;

- Hij moet nog steeds handmatig te bedienen zijn.
--- Dit blijft nog steeds mogelijk via de telefoon.

- Hij moet niet geactiveerd worden als we nog beneden aanwezig zijn.
--- Controle op basis van tijd, beweging en de status van de versterker.

Het eerste wat ik heb gedaan is het aanmaken van een Dummy Switch. Deze heb ik ook toegevoegd aan de scene "Slapen" zodat de actie niet meerdere keren gestart kan worden.

Vervolgens heb ik in Domoticz een drietal events aangemaakt, de eerste event is een LUA script, de andere twee zijn Blockly.

Het script AutoSlaapstand voert de controle van tijd, beweging en status versterker uit.

De waardes hiervan zijn: Tussen 21.00 en 02.00 gedurende 20 minuten geen beweging gezien en de status van de versterker is off.

Het tweede waar ik rekening mee heb te houden is de verlichting van de keukenkastjes. Het wil wel eens voorkomen dat ik of mijn partner laat thuis komt of midden in de nacht vertrekt. De verlichting die in deze situatie aangaat is de verlichting in de keuken. Deze verlichting hoeft slechts een korte periode aan te gaan. Dit heb ik dan ook meegenomen in het LUA script.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
time = os.date("*t")
function timedifference (s)
    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)
    t1 = os.time()
    t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
    difference = os.difftime (t1, t2)
    return difference
end
commandArray = {}

-- Controle methodiek t.b.v. aanwezigheid, versterker en tijd
if (timedifference(otherdevices_lastupdate['Woonkamer PIR']) > 600 and otherdevices['Woonkamer PIR'] == 'Off' and otherdevices['TV'] == 'Off' and otherdevices['Radio'] == 'Off' and otherdevices['BluRay'] == 'Off' and otherdevices['Gamen'] == 'Off' and otherdevices['Netflix'] == 'Off' and otherdevices['Serie'] == 'Off' and otherdevices['Auto Slaapstand'] == 'Off' and (time.hour >= 21) or (time.hour <= 2)) then
        commandArray['Auto Slaapstand']='On'
-- Aparte afhandeling voor keukenkast verlichting        
elseif (timedifference(otherdevices_lastupdate['Keukenkast']) > 120 and otherdevices['Auto Slaapstand'] == 'On' and otherdevices['Keukenkast'] == 'On') then 
        commandArray['Keukenkast']='Off'
end
return commandArray


De SwitchOn Blocky activeert de scene "Slapen" en plaatst een opmerking in de logs.

code:
1
2
3
4
5
If 
   AutoSlaapstand = On
Do 
   Set scene Slapen = On
   Write to log: "Automatische slaapstand geactiveerd."


De SwitchOff Blockly zet de Dummy Switch uit op een vast tijdstip en plaatst een opmerking in de logs.

code:
1
2
3
4
5
If 
   AutoSlaapstand = On and Time = 02:01
Do 
   Set Auto Slaapstand = Off
   Write to log: "Switch Auto Slaapstand uitgeschakeld."


De verwarming wordt standaard om 20.30 uitgeschakeld middels een Dummy Switch met onderstaande code. Het temperatuurverschil is niet drastisch en het scheelt zeker in de winter direct in de portomonee.

code:
1
2
3
4
If 
   Time = 20.30
Do
   Toon Slaapstand = On


Tot slot
De reden dat ik heb gekozen voor de Dummy Switch is puur om het dubbele uitvoeren te voorkomen. Ook omdat ik in de meeste situaties wel gebruik maak van de handmatige actie. Wellicht kan dit anders en hoor ik dat graag. Dit geldt uiteraard ook voor verbeteringen.

Tweakers @Knielen en @DizzyWeb hebben mij voorzien van een voorbeeldscript en uitleg over het tijdverschil. Bedankt hiervoor, zonder jullie was het mij niet volledig naar wens gelukt.