Categorieën
Domotica Domoticz

Verlichting inschakelen als je thuis bent

In mijn vorige blogpost heb je kunnen lezen hoe je je smartphone toevoegt aan Domoticz op basis van of je thuis bent of niet. In deze post laat ik je zien hoe je je verlichting inschakelt als je thuis bent in je smarthome.

Aanwezigheidsdetectie in het kort

Advertenties

In je huis heb je je eigen WiFi netwerk waarin je router IP-adressen uitdeelt aan ieder verbonden apparaat. Als je verbonden smartphone altijd hetzelfde ip-adres krijgt, kun je dus zien of dat apparaat op een bepaald moment binnenshuis is. In de vorige blogpost heb je één of meerdere smartphones aangemaakt in Domoticz op basis van een Dummy device. Zodra je smartphone te pingen is binnen het netwerk gaat deze dummy switch aan. Hierop gaan we nu verder werken.

Het maakt niet uit of je van het simpele ping script gebruikt maakt of van de meer geavanceerde presence detection methode.

Verlichting inschakelen als er iemand thuis is

Je lampen kun je aansluiten op een draadloze schakelset van bijvoorbeeld Promax, Flamingo of KlikAanKlikUit in combinatie met een RFXcom. Hoe dat in zijn werk gaat lees in je in ‘in  1 minuut draadloze schakelaars in Domoticz‘. Heb je dat (al) werkend dan gaan we een nieuwe ‘gebeurtenis’ maken in Domoticz. Ik vind script meer het juiste woord, maar dat terzijde.

  1. Maak een nieuwe UserVariable aan met de naam NiemandThuisTeller van het type integer.
  2. Maak een nieuwe dummy switch aan met de naam IemandThuis
  3. Maak een nieuw script aan via Instellingen -> Meer opties -> Gebeurtenissen

Maak een nieuw Lua Time type script en geef het een naam of vul je ping script aan met onderstaande code.

function DevicePing(ip, device)
    ping_success=""
    ping_success=os.execute('ping -c1 -w1 ' .. ip)
    if ping_success then
        print("ping success " ..device)
        DeviceOnOff('On',device)
    else
        print("ping fail " ..device)
        DeviceOnOff('Off',device)
    end
 
end

function DeviceOnOff(Action, device)
    
    for deviceName,deviceValue in pairs(otherdevices) do
        if (deviceName==device) then
            if deviceValue == Action then
                print(tostring(device) .." staat al ".. tostring(Action))
            else
                commandArray[device] = Action
                print(tostring(device) .." " ..tostring(Action).. "  gezet")
            end
       end
    end
end
    


commandArray = {}

 print("*****************   start pingen     *******************")
 DevicePing('IP ADRES','APPARAATNAAM')
 DevicePing('IP ADRES','Chromecast')
 DevicePing('8.8.8.8','Internet')
print("*****************   end pingen     *******************") 

print ("****** Iemand Thuis *******")

 if (otherdevices['SMARTPHONE1'] == 'On' or otherdevices['SMARTPHONE2'] == 'On') then
            print("Er is iemand thuis")
            DeviceOnOff("On","Iemand Thuis")
            commandArray['Variable:NiemandThuisTeller']=tostring(0)

            
    elseif (otherdevices['SMARTPHONE1'] == 'Off' and otherdevices['SMARTPHONE2'] == 'Off') then
            -- hier niet iemandthuis uitzetten, maar alleen de var laten optellen 
            commandArray['Variable:NiemandThuisTeller'] = tostring(tonumber(uservariables['NiemandThuisTeller']) + 1)
            print("Er is al ") 
            print (tostring(tonumber(uservariables['NiemandThuisTeller']) + 1))
            print (" minuten niemand thuis")
    end


-- je moet minimaal 15 minuten uit bereik zijn
    if (tonumber(uservariables['NiemandThuisTeller']) > 15) then 
        
        print ("Er is meer dan een kwartier niemand thuis. Iemand thuis is nu 0")
        DeviceOnOff("Off","Iemand Thuis")
    end
    
print ("****** end Iemand Thuis *******")

Binnen de code staat al de nodige uitleg. Pas alleen de SMARTPHONE 1, 2 en de IP adressen aan.

Dit script pingt steeds de ingevoerde smartphones of andere apparaten. Zolang het apparaat antwoord, blijft de smartphonedummy aan en staat Iemand Thuis ook aan.

Advertenties

Als de apparaten niet te pingen zijn, schakelt het script de smartphonedummy uit. Maar het laat de dummyswitch Iemand Thuis aan totdat een kwartier lang de smartphones niet meer te pingen zijn. Het kwartier word bijgehouden in de NiemandThuisTeller. Het script wordt iedere minuut uitgevoerd waardoor de waarde steeds met 1 wordt opgehoogd. Iemand Thuis zal uit gaan en op basis van die gebeurtenis kun je je verlichting of verwarming lager schakelen.

Je kunt de tijd naar wens verhogen of verlagen. Let wel op dat veel smartphones na een bepaalde tijd in stroombesparingsmodus gaan en je een tijdje niet kunt pingen. Bij mij blijkt een kwartier te kort en 20 minuten tot een half uur prima.

Het werkt!

Als je alles juist ingevuld hebt gaan de lampen automatisch aan en uit op basis van je aanwezigheid. Zodra je het huis verlaat, blijft de verlichting nog even aan totdat je langer dan een kwartier weg bent.

 

Heb je vragen, is het gelukt of kom je er niet uit? Laat een reactie achter!

Wat vond je van dit artikel?

Geef hieronder je stem via de sterren. Laat weten wat je vindt van het artikel en stel je vragen in de reacties!

1 Star2 Stars3 Stars4 Stars5 Stars (Nog geen stemmen.)
Loading...
Advertenties

30 reacties op “Verlichting inschakelen als je thuis bent”

Hallo Wouter,

Script werkt uitstekend, maar mijn Samsung S7 geeft geen reactie op een ping als het scherm is uitgeschakeld. Ik heb WiFi altijd aan staan, ook in slaapstand.
Enig idee of suggestie?

André

Beste André,

Ik hoor dit probleem vaker. Heb er zelf ook last van. Je kunt er jammer genoeg weinig aan doen. Android probeert gewoon batterij te besparen.

Er is nog een mogelijkheid met behulp van nmap. Omdat ik domoticz gebruik op een synology nas en die geen nmap ondersteund heb ik er geen ervaring mee. http://blog.quindorian.org/2015/02/domoticz-bash-script-for-presence-detection-using-nmap.html/ . dat zou je nog kunnen proberen.

Succes

Wouter

Beste Andre,

Ik heb de het artikel inmiddels uitgebreid met een deel over een extra ‘iemand thuis’ dummyswitch. Misschien heb je er iets aan.

Wouter

Beste Wouter,

Script werkt! Telt uiteraard ook op.. echter bij de eerste minuut nadat de telefoon in ‘slaapmodus’ gaat, gaat ook de dummyswitch al uit… En blijft niet aan tot de 15 minuten ON staan. Vreemde is ook dat de teller doorgaat na de 15…loopt gewoon door… Wat zou ik fout hebben staan?

Beste Erwin,

Bedankt voor je reactie. Ik zie dat ik nooit gereageerd heb! In de reactie op de vraag van Hendrik vind je je antwoord.

Succes,

Wouter

Wouter bedankt. De teller gaat veel.sneller bij mij dus waarde 15 naar 900 gezet. (Erwin wellicht ook.handig voor.jou ) Soms krijg ik een valse positieve ping en gaat de schakelaar om.. terwijl er geen systeem thuis het statisch adres kan hebben gekregen

Beste Hendrik,

Leuk dat je reageert! Aangezien je teller zo hard op loopt, heb je denk ik het script type op “All” staan. Het script wordt dan bij iedere trigger uitgevoerd. Dus bij iedere update van een apparaat, iedere minuut etc. Dat gebeurd wel vaker dan 1x per minuut.

Dat van de false positives merk ik soms ook, daarom zou je eens naar de geavanceerde manier kunnen kijken. Daarmee geef je de presence detection uit handen aan je pi of nas. Dat werkt wat betrouwbaarder.

Succes!

Wouter

Beste Wouter,

Het script werkt prima, echter loop ik tegen 2 kleine foutmeldingen. Ik weet niet hoe ik dit op kan lossen. Kun jij me verder helpen?

De eerste foutmelding ziet er als volgt uit:

Error: EventSystem: in Ping iemand thuis: [string “function DevicePing(ip, device)…”]:49: attempt to perform arithmetic on a nil value

Deze fout hoort bij onderstaande regel.

commandArray[‘Variable:NiemandThuisTeller’] = tostring(tonumber(uservariables[‘NiemandThuisTeller’]) + 1)

De tweede foutmelding luidt als volgt:

Error: EventSystem: in Ping iemand thuis: [string “function DevicePing(ip, device)…”]:57: attempt to compare number with nil

Deze melding hoort bij de onderstaande regel uit het script
if (tonumber(uservariables[‘NiemandThuisTeller’]) > 30) then…….

Bij voorbaat dank voor je inspanning.

Gr. Ron

Het probleem is al opgelost. De aangemaakte variabele NiemandThuisTeller had binnen Domoticz een spatie achter de benaming waardoor deze afweek van de benaming in het script zelf. Nu werkt alles zoals het hoort.

Hallo Wouter,

ik ben een beetje aan het experimenteren met Domoticz en stel jouw artikelen erg op prijs.
Het is me gelukt verschillende knoppen te maken die reageren op mijn telefoon ping.
So far so good.

Nu is het zo dat ik meerdere lichtschakelaars op een bepaalde tijd laat inschakelen en om een bepaalde tijd wordt alle verlichting middels een groep uitgeschakeld.

Nu wil ik de beide situaties eigenlijk combineren…
Ik wil dat 1 schakelaar altijd aan/uit gaat op de geplande momenten.
De rest van de schakelaars moeten aan gaan als ik thuis ben, maar alleen tussen de geplande momenten.
Uiteraard moeten deze lampen als ze aan staan ook weer uit gaan als ik weg ben.

Hoe zou ik dit kunnen realiseren?

Beste Martijn,

Leuk dat je aan de slag gaat aan de hand van mijn werk! Ik help je graag verder.
Toevallig heb ik bij mij thuis het een jaar of 2 ongeveer zo geregeld. Ik zal het script hierbij delen. Nu gebruik ik het niet meer, omdat ik nu een bewegingssensor in de woonkamer heb waarmee je veel flexibeler bent. Je kunt namelijk niet alle scenarios van te voren uitdenken waardoor je (of je vrouw) weleens in het donker zit. Maar het is een leuk begin en het werkt redelijk goed!

Wat ik heb gedaan is een Tijdschema dummy maken waarin je de momenten instelt wanneer de lamp(en) aan zou willen hebben. Dat kun je doen met de timer functies.
Daarbij heb ik een KAKU schemerschakelaar die detecteert of het donker is ja of nee. Heb je die niet, dan kun je de zonsopgang en zonsondergang functies hiervoor gebruiken, maar denk aan een regenachtige dag, dan zal je verlichting niet automatisch inschakelen. Het script kijkt ook of de TV aanstaat, dan laat ie zo lang dat zo is de verlichting aan. Ook heb ik voor de zekerheid een overrule dummy, als die aanstaat doet hij niets meer automatisch. Er staat genoeg uitleg in de code dus ik denk dat je een eind moet komen.

Succes!

Wouter

[cc lang=”lua”]–

function DeviceOnOff(device,action)

if otherdevices[device] == action then
print(tostring(device) ..” staat al “.. tostring(action))
else

if device == “Touwlamp” and action == “On” then
commandArray[‘Touwlamp’]=’Set Level 65′
print(‘Touwlamp gedimd naar 60%’)
else
commandArray[device] = action
print(tostring(device)..” ” ..tostring(action).. ” gezet”)
end

end
end

commandArray = {}

— Tijd MA DI WOE DO VRIJ ZAT ZON
— aan 5.30 5.30 5.30 5.30 5.30
— uit 6.10 6.10 6.10 6.10 6.10

— aan 7.30 7.30 7.30 6.30
— uit 8.15 8.15 8.15 7.15

— aan ZONON -1
— uit 22.30 23.30

— Verder alleen op schemerschakelaar reageren als we thuis zijn
— alle schemerschakelingen na 23.30 negeren

print (“************ Verlichtingsschema ***************”)

— Het Verlichtingsschema is leidend en volgt bovenstaand schema.
— ‘s avond zal het schema een uur voor zonsondergang gaan checkken of het al aan moet
— Als er iemand thuis is schakelt de groep, anders alleen de ledstrip
— Als je de verlichting handmatig wilt schakelen moet je de tijdschema schakelaar gebruiken

if (otherdevices[‘Handschakelaar verlichting’] == ‘Off’) then

if (otherdevices[‘Tijdschema Verlichting’] == ‘On’) then

— Volgens het schema zou de verlichting aan moeten

print (“Schema = On”)

if (otherdevices[‘State – IsDonker’] == ‘On’) then

— het is donker genoeg om de verlichting aan te zetten

print (“Donker = On”)

if (otherdevices[‘Iemand Thuis’] == ‘On’) then

— er is iemand thuis dus alle verlichting aan

print (“Iemand thuis = On”)
print (“Verlichting = aan”)

DeviceOnOff(“Ledstrip kast”, “On”)
DeviceOnOff(“Touwlamp”, “On”)
DeviceOnOff(“Statieflamp”, “On”)

else

— er is niemand thuis dus alleen de ledstrip en de buitenlamp aan

print (“Iemand thuis = Off”)
print (“Ledstrip = aan”)

if (uservariables[‘StaatDeKerstboom’] == “True”) then
— in de kerstperiode staat de kerstboom aangesloten op de statieflamp schakelaar

DeviceOnOff(“Ledstrip kast”, “Off”)
DeviceOnOff(“Touwlamp”, “Off”)
DeviceOnOff(“Statieflamp”, “On”)

else
DeviceOnOff(“Ledstrip kast”, “On”)
DeviceOnOff(“Touwlamp”, “Off”)
DeviceOnOff(“Statieflamp”, “Off”)

end

— als er niemand thuis is voor de zekerheid ook de Handschakelaar uitzetten
DeviceOnOff(“Off”,”Handschakelaar verlichting”)

end

elseif (otherdevices[‘State – IsDonker’] == ‘Off’) then

— volgens het schema moet de verlichting aan
— maar het is nog niet donker genoeg

print (“Donker = Off”)
print (“Verlichting = uit”)

if (uservariables[‘Time-Variable’] == “Ochtend” or uservariables[‘Time-Variable’] == “Middag” or uservariables[‘Time-Variable’] == “Vooravond”) then
if (uservariables[‘StaatDeKerstboom’] == “True” and otherdevices[‘Iemand Thuis’] == ‘On’ ) then
print (“Het donker maar hoeft niet aan volgens het schema. Het is kerstperiode en dan mag de kerstboom overdag aan als er iemand thuis is.”)
DeviceOnOff(“Ledstrip kast”, “Off”)
DeviceOnOff(“Touwlamp”, “Off”)
DeviceOnOff(“Statieflamp”, “On”)

end
else

DeviceOnOff(“Ledstrip kast”, “Off”)
DeviceOnOff(“Touwlamp”, “Off”)
DeviceOnOff(“Statieflamp”, “Off”)

end
end

else

— geen verlichting aan volgens schema.
print (“Schema = Off”)

— staat de TV aan? Dan zijn we misschien nog laat op. Dan alles aanlaten.
— dit gaan we overdag negeren, als het overdag is

if (otherdevices[‘State – IsDonker’] == ‘On’ and otherdevices[‘Philips TV (2.19)’] == ‘On’) then
if (uservariables[‘Time-Variable’] == “Avond” or uservariables[‘Time-Variable’] == “Nacht”) then

print (“Donker en TV = On, Het is avond of nacht”)

DeviceOnOff(“Ledstrip kast”, “On”)
DeviceOnOff(“Touwlamp”, “On”)
DeviceOnOff(“Statieflamp”, “On”)

else

if (uservariables[‘StaatDeKerstboom’] == “True”) then

DeviceOnOff(“Ledstrip kast”, “Off”)
DeviceOnOff(“Touwlamp”, “Off”)
DeviceOnOff(“Statieflamp”, “On”)

print(“Donker en TV = On, maar het is overdag, ochtend of vooravond tijdens kerst dus kerstboom aan”)
else
DeviceOnOff(“Ledstrip kast”, “Off”)
DeviceOnOff(“Touwlamp”, “Off”)
DeviceOnOff(“Statieflamp”, “Off”)

print (“Donker en TV = On, maar het is overdag, ochtend of vooravond dus verlichting uit”)
end
end

else
— in de periode de kerstboom aanzetten als er iemand thuis is. maakt niet uit of het donker of licht is. daarom buiten schema. binnen schema reageert hij zoals het moet
if (uservariables[‘Time-Variable’] == “Ochtend” or uservariables[‘Time-Variable’] == “Middag” or uservariables[‘Time-Variable’] == “Vooravond”) then
if (uservariables[‘StaatDeKerstboom’] == “True” and otherdevices[‘Iemand Thuis’] == ‘On’ ) then
print (“Het is kerstperiode en dan mag de kerstboom overdag aan als er iemand thuis is.”)

DeviceOnOff(“Ledstrip kast”, “Off”)
DeviceOnOff(“Touwlamp”, “Off”)
DeviceOnOff(“Statieflamp”, “On”)
else
print(“Donker en/of TV = off, verlichting uit.”)

DeviceOnOff(“Ledstrip kast”, “Off”)
DeviceOnOff(“Touwlamp”, “Off”)
DeviceOnOff(“Statieflamp”, “Off”)
end
else
print (“Donker en/of TV = Off”)

DeviceOnOff(“Ledstrip kast”, “Off”)
DeviceOnOff(“Touwlamp”, “Off”)
DeviceOnOff(“Statieflamp”, “Off”)

end

end

end

else

print (“Handschakelaar staat aan. Niks doen aan verlichting”)

end

print (“************ eind Verlichtingsschema ***************”)

return commandArray
[/cc]

hi wouter,

ik zit nog met een aantal vraagjes. bij stap 1 zeg je Maak een nieuwe UserVariable aan met de naam NiemandThuisTeller van het type integer. dit is gewoon een nieuwe hardware toevoegen met de naam NiemandThuisTeller en type Dummy?

tevens krijg ik telkens de foutmelding: Error: EventSystem: in PingScript: [string “– Ping script by Wouter …”]:54: attempt to compare number with nil

het is uiteindelijk de bedoeling dat wanneer de Playstation aangaat de verlichting ook aangaat en ook weer uit wanneer de playstation uit is. het hoeft dus niet te zijn dat de verl. nog 15 min aan blijft. zodra de ps4 aangaat moet de verl. ook meteen aan en bij uitgaan meteen weer uit. is dit ook mogelijk aan te passen?

Dag Danny,

Je foutmelding komt doordat je geen uservariable hebt aangemaakt. Dat kun je doen via het instellingen menu. Uit m’n hoofd instellingen – > meer opties – > gebruikersvariabelen. Het is niet hetzelfde als een dummy hardware.

Je zou het script aan kunnen passen zodat hij 0 minuten wacht met het uitzetten van de verlichting. Als de verbinding met de Playstation stabiel is werkt dat wel, maar anders zou je eens 2 of 3 minuten kunnen proberen. Als er om wat voor reden een ping failt gaat ook niet direct je verlichting uit terwijl je aan het gamen bent.

Groet Wouter

Hallo Wouter,

Nu ben ik nog niet zo lang bezig met deze boeiende materie maar jouw script heb ik werkend.
Dat wil zeggen als mijn mobiel in het netwerk aanwezig is dan schakelt de dummy switch keurig aan.
Bij niet aanwezig zijn ook weer keurig uit ..
Wat ik mij afvraag of ik het script ook kan gebruiken om mijn verwarming te schakelen. Op dit moment gebruik ik een OpenThermGateway in Domoticz wat op zich prima werkt.
Het enigste probleem is dat ik mijn instelling qua graden allen met ‘Room setpoint’ kan instellen tot het volgende schakel moment. ( ‘OTGW: TT: 19.99’).
Ik zou ook graag het Temp.Constant (TC) willen kunnen sturen.
Enig idee of dat mogelijk is ??

Hallo Wouter

Eureka het werkt
Heb het opgelost en het werkt geweldig met dit script.
Dat het nog zo eenvoudig was had ik niet in de gaten maar zoals ik zei nog maar net bezig met deze materie.
In de aan / uit actie van de virtuele schakelaar de desbetreffende url geplaatst met de commando’s en zie daar.
Dus mijn eerste bericht was wat te voorbarig..

Hallo Nico,

Vanochtend was ik even bezig geweest met wat research om een goed antwoord te kunnen geven. Ik hem namelijk zelf geen OpenThermGateway dus ik wist niet zo een antwoord te geven.

Geweldig dat je er zelf uitgekomen bent. Zo leer je steeds bij een blijf je dingen ontdekken!

Veel lees plezier verder op mijn blog.

Groet Wouter

Hi Wouter, ik was benieuwd of je dit systeem nog steeds gebruikt…
Ik ben zelf over geschakeld op een Device trigger script.
Alleen als ik zelf of mijn partner thuis kom of weg ga moet er wat gebeuren, daarnaast rekening houdend met het feit of het donker is of niet.
Dit stelt me in staat af te wijken van het schema.

Bijvoorbeeld:
Op een gegeven moment wordt de verlichting in mijn woonkamer ingeschakeld, rond 12 uur ‘s avonds weer uitgeschakeld.
Als we, om wat voor reden dan ook, afwijken van de standaard instellingen, bijvoorbeeld een extra lamp aan, wordt deze weer uitgeschakeld door het script omdat dit zo geprogrammeerd is.

Per apparaat afwijken van het lichtschema is hierbij praktisch onmogelijk.
Met de ‘device trigger’ wordt het volledige lichtschema alleen aangepast als we beiden niet thuis zijn en/of het licht/donker wordt.
Per apparaat afwijken van het script is hierbij geen enkel probleem, aangezien we niet vertrekken/thuis komen en het niet donker/licht wordt.

Het thuis komen en vertrekken heb ik ingericht met een Apple Automatisering.

Mocht je geïnteresseerd zijn, kan ik het script met je delen.

Hoi Martijn,

Je aanpak klinkt interessant! Het script zoals ie hier staat heb ik niet meer in gebruik, maar wel de basis.

Ik heb het script aangepast en maak nu gebruik van de checkfirst() functie van dzvents. Die zorgt ervoor dat als je een on commando stuurt en de schakelaar staat al on, dat het commando dan niet verstuurd wordt. Dat betekend dat je dus handmatig kunt bij sturen.

Ik ben toch wel benieuwd hoe jouw script eruit ziet, waarschijnlijk kan ik nog wel een en ander verbeteren!

Zou je m willen delen?

Groet Wouter

Geweldig Wouter zie ik het morgen wel verschijnen.
In ieder geval ga ik de wiki eens doorlezen maar zoals ik altijd tijd zeg.
Beter een goed script ‘gejat’ dan een slecht script zelf geschreven..

Hoi Nico en Martijn,

Zoals beloofd mijn verlichtingsscript als voorbeeld van wat ik nu in gebruik heb.

Het bestaat uit 2 delen. Een script dat bepaald of er iemand thuis is en op basis daarvan een actie bepaald, en een script dat de actie uitvoert. Dat heb ik gescheiden zodat ik maar op 1 plek lampen hoef toe te voegen of te verwijderen wanneer ik het lichtbeeld wil veranderen.

De scripts heb ik op Github gezet.
verlichting script dzvents

Het global helpers script moet global_helpers heten.
global_helpers dzvents script domoticz

Succes.

Ik ben benieuwd naar jouw script Martijn.

Wouter

Hi Wouter, ik denk dat het simpelweg plakken van mijn script niet helemaal goed gaat in dit reactievenster. Moet ik dit nog tussen bepaalde tags zetten ofzo?

Heb het inmiddels 2 keer geprobeerd, maar lijkt niet te werken…

Hoi Martijn,

Ik denk dat de code te lang is of zo iets. Kun je de code ergens online plaatsen zoals pastebin of github?

Hi Wouter,

Ik heb hem op GitHub geplaatst…

Voor de werking van het script heb ik 3 dummy switches aangemaakt.
1 voor mijzelf, 1 voor mijn partner.
Deze schakelaars schakelen we via Apple Automatisering, met de hand, of met Siri.
Daarnaast een schakelaar ‘Donker t/m 00:30’, die aan gaat bij zonsondergang en uit gaat om 00:30 uur.

Zoals je in het script wel tegen zult komen, er zitten nog wat uitzonderingen in.
Zo wil ik bijvoorbeeld niet dat de tuinverlichting na 23:30 uur nog aan gaat en wil ik dat de ‘Lampen naast TV’ aan gaan, ook als we niet thuis zijn.

Ik ben benieuwd wat je er van vindt en zie je reactie graag tegemoet.

https://github.com/mbomhof/devicetriggerscript/

Hi Wouter,

Ik heb het script op github geplaatst.

Voor de werking van het script heb ik 3 dummy switches aangemaakt.
1 voor mijzelf, 1 voor mijn partner.
Deze schakelaars schakelen we via Apple Automatisering, met de hand, of met Siri.
Daarnaast een schakelaar ‘Donker t/m 00:30’, die aan gaat bij zonsondergang en uit gaat om 00:30 uur.

Zoals je in het script wel tegen zult komen, er zitten nog wat uitzonderingen in.
Zo wil ik bijvoorbeeld niet dat de tuinverlichting na 23:30 uur nog aan gaat en wil ik dat de ‘Lampen naast TV’ aan gaan, ook als we niet thuis zijn.

Ik ben benieuwd wat je er van vindt en zie je reactie graag tegemoet.

github.com/mbomhof/devicetriggerscript

Hi Wouter,
Ik was benieuwd of je al gelegenheid hebt gehad naar mijn script te kijken.
Wat vind je er van? Heb je nog tips/tricks?

Hoi Martijn,

Excuses voor mijn late reactie. Ik heb zeker naar je script gekeken en er kunnen wel dingen verbeterd worden. Ten eerste het advies om het script om te bouwen naar het DZvents framework/taal. Het is even stoeien maar wel veelzijdiger. Je kunt gebruik maken van de checkfirst functie, veel makkelijkere tijd functies en script triggers. Verdiep je maar eens in de wiki (https://www.domoticz.com/wiki/DzVents:_next_generation_LUA_scripting) of kijk met een schuin oog naar mijn voorbeelden uit mijn vorige reactie.

Dan wat specifieker:

1. Leuk dat je mijn DeviceOnOff functie gebruikt, wat mij betreft prima. Maar kan vervangen worden door de checkfirst functie van dzvents.

2. De for/do loop: for deviceName,deviceValue in pairs(devicechanged) do werkt goed maar is niet de juiste toepassing hier. Hij gaat namelijk steeds alle schakelaars langs en checkt dan de status. Wanneer je veel schakelaars hebt loopt de functie die dus steeds opnieuw door. In jouw script doet ie dat dus al minimaal 5x. Dat verlengt de uitvoering van je script enorm. Binnen die 5 blokken doe je steeds hetzelfde. Of aanzetten, of uitzetten van lampen. Je kunt het script inkorten door het combineren van de scenario’s. De enige die je hoeft te behouden en klein beetje moet uitbreiden is deze:

for deviceName,deviceValue in pairs(devicechanged) do

if (deviceName=='Donker t/m 00:30') then
if deviceValue == "On" then
print("*** Het is donker ***")
if (otherdevices["Persoon1 Thuis"] == "On" or otherdevices["Persoon2 Thuis"] == "On") then
print("*** Er is iemand thuis, lampen aan ***")
DeviceOnOff("Lampen naast TV", "On")
DeviceOnOff("Lampen achter", "On")
DeviceOnOff("Garderobe", "On")
DeviceOnOff("Kast Keuken", "On")
DeviceOnOff("Keukenkastje", "On")
DeviceOnOff("Kerstboom", "On")
if (os.date("%H%M") <= "2330" and os.date("%H%M") >= "0300") then
DeviceOnOff("Tuin", "On")
end
else
print("*** Niets doen, er is niemand thuis ***")
end
end
end

De else hoef je alleen maar uit te breiden met het uitschakelen van de verlichting. De DeviceName en deviceValue if’s aanpassen naar

otherdevices["Donker t/m 00:30"] == "On"

en je bent er.

Succes!

Wouter

Hoi Martijn,
Ik krijg het script mbt iemandthuis niet werken….wel werkt het pingen naar onze beide foons hetgeen binnen 30 a 40 seconden netjes schakelt…
Als ik 1 van de wifi afhaal gebeurt er niets…ok…moet ook niets uitgaan…..doe ik de 2e van de wifi af gebeurt er niets……omgekeerd bij op de wifi zetten ook niet…..wat doe ik fout 😦
Groetjes Rob

Laat weten wat je van dit artikel vindt!

Deze website gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.