Domotica - Dummy to Expert: Automatische slaapstand

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

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.

Domotica - Dummy to Expert: Eerste configuraties en scenes

Door virtualite op donderdag 14 december 2017 10:42 - Reacties (17)
Categorie: Domotica, Views: 2.941

In het eerste deel van heb ik mijn domoticz setup geheel geïnstalleerd en met behulp van mede tweakers mijn (voorlopig) laatste aanpassing aan de Raspberry Pi installatie voltooid.

De eerste stap is de reeds bestaande hardware toevoegen in domoticz. Dit is in principe heel gemakkelijk te doen confirm de wiki artikelen van domoticz.

Philips Hue & Onkyo receiver
Het toevoegen van de Philips Hue en de Onkyo receiver ging geheel foutloos. Beide zijn als standaard hardware type beschikbaar in Domoticz. Na het toevoegen worden gekoppelde lampen, scenes, instellingen etc. direct toegevoegd als devices.

Eneco Toon
Tijdens het toevoegen van Toon liep ik tegen vrij veel problemen op. Ik heb hiervoor deze handleiding gebruikt. Echter, deze werkt in mijn situatie niet zonder een aantal kleine aanpassingen.

De eerste stap, het toevoegen van de hardware verliep zonder problemen. Deze is net als de Philips Hue en Onkyo receiver beschikbaar in domoticz.

De eerste problemen die ik tegen kwam had te maken met de JSON Calls:

code:
1
/json.htm?type=command&param=udevice&idx=28&nvalue=0&svalue=12.3



code:
1
/json.htm?type=command&param=thermostatstate&idx=28&state=3



Deze werkte in de browser prima, maar wanneer deze werd aangesproken vanuit Domoticz gebeurde er niets. Het eerste probleem had te maken met user credentials. Ik heb Domoticz beveiligd met een username/password. Deze moest dus ook worden meegegeven in de link waarmee je de JSON Call wilt uitvoeren.

Het tweede probleem was vervelender en ben ik met behulp van mede tweaker marcel19 uitgekomen. De link werd aangepast waardoor er dus een verkeerde JSON Call plaats vond.

Ingevoerde link

code:
1
json.htm?type=command&param=udevice&idx=5&nvalue=0&svalue=19



Output link

code:
1
json.htm?type=command¶m=udevice&idx=5&nvalue=0&svalue=19



Dus in andere woorden, &para werd vervangen door een paragraph symbool.

De oplossing was de onderstaande JSON Call.


code:
1
http://username:password@ip:port/json.htm?param=udevice&type=command&idx=5&nvalue=0&svalue=19



Toon werkt nu naar behoren in Domoticz. Het enige wat ik structureel terug zie in de Domoticz logs is de onderstaande Error.


code:
1
Error: ToonThermostat: Error getting current state!



Bij mijn weten is deze error vrij logisch te verklaren, hij kan geen programma/state ophalen. Deze melding verschijnt dan ook alleen wanneer ik geen programma gebruik, maar handmatig de temp. instel.

Mocht er een manier zijn om deze error uit mijn logs te krijgen houd ik mij aanbevolen.

Mijn eerste scene "Slapen"
De scene Slapen spreekt denk ik voor zich. Alles wat aan staat moet uit en de temperatuur moet omlaag.

Voor de verlichting en Onkyo receiver waren er switches aangemaakt, deze kon ik dan ook direct toevoegen in de scene.

Voor juiste temperatuur heb ik een dummy switch aangemaakt en deze Slapen genoemd. Deze heb ik een On Action gegeven met de JSON Call om te Toon slapen scene te activeren.


code:
1
http://username:password@ip:port/json.htm?param=thermostatstate&type=command&idx=0&state=2


Deze heb ik ook toegevoegd aan de scene slapen.

Het nadeel van deze manier is dat de Dummy switch Slapen niet automatisch terug gaat naar Off, hier heb ik dan ook een simpel Blocky script voor gemaakt.


code:
1
2
If Slapen = ON
Do Set Slapen = OFF After 10 seconds



De scene Slapen werkt volledig en zal in huidige en aanstaande projecten nog flink worden uitgebreid.

Het activeren van deze scene gebeurd handmatig door één druk op de knop.

Tot slot
Ik ben echter nog op zoek naar een manier om dit volledig te automatiseren, loop alleen tegen diverse vraagstukken op.

Als ik dit doe d.m.v. bewegingsdetectie moet ik een hele ruime marge nemen en is zonde van de energie.

Als ik dit doe d.m.v. tijd loop ik het risico dat alles uit gaat terwijl wij nog beneden zitten.

Hoe pakken jullie dit aan?

Mocht ik dingen verkeerd toepassen of beter toegepast kunnen worden hoor ik het graag.

Domotica - Dummy to Expert: Introductie

Door virtualite op woensdag 13 december 2017 09:08 - Reacties (13)
Categorie: Domotica, Views: 2.452

In het eerste deel van mijn blog wil ik jullie meenemen in mijn leerproces om van Dummy naar Expert in de categorie domotica te raken. Op het moment van schrijven heb ik net mijn eerste stappen gezet en zie mezelf dan ook nog als beginner.

Gedurende deze blog reeks hoop ik mijzelf te kunnen ontwikkelen tot een echte domotica expert.

In de volgende blogs zal ik werken per project en zal ik dieper ingaan in de gebruikte scripts, codes, hardware etc.

De oorsprong
Mijn interesse in domotica is begonnen door een aanbieding van Eneco, namelijk; Toon. Toon is de “slimme” thermostaat van Eneco. Er ging een hele wereld voor mij open. Niet heel veel later kreeg ik daar twee slimme rookmelders bij van Fibaro en heb ik een Philips Hue starterspakket aangeschaft.

Nu wil ik dit geen smart home noemen, maar mijn interesse in domotica werd getriggerd.

Als dummy, weinig ervaring met domotica (en programmeren/scripten ) ben ik gaan googlen naar de mogelijkheden die goed aansluiten bij mijn idee van een slim huis. Zo kwam ik o.a. hier op Tweakers een topic tegen over Domoticz waar ik veel informatie heb kunnen vinden.

Hoe zie ik mijn ideale Smart Home?
Mijn ideale situatie is dat ik vele dagelijkse handelingen niet meer hoef uit te voeren en met één druk op de knop, of automatisch op basis van tijd, omstandigheden (weer, licht sensitiviteit, etc.) laat plaats vinden. Een voorbeeld die ik tevens in het volgende blog beschrijf is het schema slapen. Dit schema zorgt er voor dat al mijn verlichting en apparatuur wordt uitgeschakeld en het alarm wordt ingeschakeld.

De besturing vindt grotendeels automatisch plaats, maar moet ten alle tijden ook met de hand beschikbaar blijven.

De eerste stappen naar een Smart Home
Na de keuze die ik eerder had gemaakt, namelijk Domoticz, ben ik gaan kijken welke andere systeemvereisten ik nodig had om dit draaiende te krijgen. Ik was reeds in het bezit van een Synology nas, maar heb uiteindelijk gekozen een Raspberry pi 3 model b aan te schaffen.

Om het direct goed (en helaas ook duurder) te doen heb ik gekozen om Z-Wave te gebruiken. Ik heb daarvoor dan ook een Aeon Labs Z-wave stick gekocht.

De installatie van de Raspberry Pi en Domoticz
Na de Raspberry in een case te hebben geplaatst en netjes te hebben aangesloten op mijn monitor ben ik begonnen met de installatie van Raspbian. Dit alles ging gelukkig erg gemakkelijk en goed door de voorgeïnstalleerde NOOBS software op de Raspberry.

Mijn eerste uitdaging kwam echter vrijwel direct na de installatie van Raspbian. Ik had een vast ip adres nodig om domoticz te kunnen configureren.

Ik had (en heb nog steeds) geen idee hoe ik dit in de command prompt voor elkaar moet krijgen, maar gelukkig kon het ook nog via de GUI.

Door de goede installatie documentatie van Domoticz was het installeren via de command prompt zo gedaan. Na een herstart van de Raspberry draaide Domoticz naar behoren.

De beveiliging van de Raspberry en Domoticz is zo ingesteld dat deze alleen van het lokale netwerk bereikbaar is. Om toch remote te kunnen werken heb ik een VPN server ingericht.

Tot slot
Al met al heeft dit meer tijd gekost dan dat ik vooraf had verwacht. Momenteel loop ik nog tegen één onopgelost probleem aan. De AEON labs stick verliest nog wel eens connectie en krijgt dan een andere port naam. Mocht iemand een oplossing weten om deze een statische portnaam te geven houd ik mij uiteraard aanbevolen. Bedankt Aragornwj en Ranjo, jullie link was precies wat ik zocht.