In mijn vorige blogpost heb je kunnen lezen hoe je je smartphone toevoegt aan Domoticz op basis van ping. Op die manier bepaalt domoticz 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
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.
- Maak een nieuwe dummy switch aan met de naam ‘Iemand Thuis’ en een met de naam ‘Handschakelaar verlichting’
- Maak een nieuw dzvents script aan via Instellingen -> Meer opties -> Gebeurtenis
Maak een nieuw dzvents script aan en geef het een naam. Plak onderstaande code nadat je standaard code verwijderd hebt. Pas onderstaande code aan met de namen van je eigen apparaten of verwijder ze.
return { on = { devices = { -- Op basis van status verandering van deze apparaten start het script 'Iemand Thuis', 'TV', 'Achterdeur', 'State - IsDonker', 'Beweging woonkamer', 'Beweging keuken' }, timer = { -- Het script start sowieso elke 5 minuten 'every 5 minutes' }, }, data = { -- Lokale variabele om de huidige status van Iemand thuis te bepalen. 'NuIemandThuis' }, execute = function(domoticz, device) scriptname = "Verlichtingscript " domoticz.log(scriptname ..'************ Verlichting v2.0 **************', domoticz.LOG_INFO) -- Bepalen of er iemand thuis is. We gaan eerst ervan uit dat er niemand thuis is. domoticz.data.NuIemandThuis = 'Off' if (domoticz.devices('TV').state == 'On' or domoticz.devices('Smartphone_1').state == 'On' or domoticz.devices('Smartphone_2').state == 'On' or domoticz.devices('Achterdeur').lastUpdate.minutesAgo < 14 or domoticz.devices('Beweging woonkamer').state == 'On' or domoticz.devices('Beweging keuken').state == 'On' ) then -- Als een van deze apparaten aan is, of minder 15 min geleden gewijzigd is, -- is er iemand in beweging of is de smartphone in bereik of TV aan. domoticz.log(scriptname ..'Er is iemand thuis', domoticz.LOG_INFO) -- Om te voorkomen dat het script gaat loopen checkFirst() domoticz.devices('Iemand Thuis').switchOn().checkFirst() -- De variabele Nuiemandthuis op aan zetten domoticz.data.NuIemandThuis = 'On' elseif (domoticz.devices('TV').state == 'Off' and domoticz.devices('Smartphone_1').state == 'Off' and domoticz.devices('Smartphone_2').state == 'Off' and domoticz.devices('Achterdeur').lastUpdate.minutesAgo > 14 ) then -- Als al deze apparaten uit zijn of er meer dan 15min geen beweging, -- geen tv aan of geen smartphone in bereik. Dan is er niemand thuis -- er is niemand thuis, maar staat de IemandThuis switch nog aan? if (domoticz.devices('Iemand Thuis').state == 'On' and domoticz.devices('Iemand Thuis').lastUpdate.minutesAgo > 14) then domoticz.log(scriptname ..'Er is NIEMAND thuis, maar IemandThuis staat nog aan. Die zetten we uit.', domoticz.LOG_INFO) -- Als iemand thuis nog steeds aan staat en meer dan een kwartier niet gewijzigd is domoticz.devices('Iemand Thuis').switchOff() domoticz.data.NuIemandThuis = 'Off' elseif (domoticz.devices('Iemand Thuis').state == 'On' and domoticz.devices('Iemand Thuis').lastUpdate.minutesAgo < 14) then domoticz.log(scriptname ..'Er is waarschijnlijk NIEMAND thuis. We wachten nog max een kwartier op beweging of smartphone', domoticz.LOG_INFO) domoticz.data.NuIemandThuis = 'On' elseif (domoticz.devices('Iemand Thuis').state == 'Off') then domoticz.log(scriptname ..'Er is NIEMAND thuis.', domoticz.LOG_INFO) domoticz.data.NuIemandThuis = 'Off' end else -- in een bijzondere situatie komt het script hier maar gebeurd vrijwel nooit. domoticz.log(scriptname ..'Afvangen', domoticz.LOG_INFO) end status = 'Tv: '..domoticz.devices('TV').state ..' Smartphone_1: ' ..domoticz.devices('Smartphone_1').state ..' Smartphone_2: ' ..domoticz.devices('Smartphone_2').state ..' Achterdeur LU: ' ..domoticz.devices('Achterdeur').lastUpdate.minutesAgo ..' MS WK kast LU: ' ..domoticz.devices('Bewegingsmelder kast').lastUpdate.minutesAgo ..' MS keuken LU: ' ..domoticz.devices('Bewegingsmelder keuken').lastUpdate.minutesAgo domoticz.log(status) -- einde check iemand thuis. -- moeten we de verlichting aanzetten? -- Als er iemand thuis is en het is donker dan de verlichting aan -- dan moet de TV wel aan staan of er bewging zijn -- wanneer er meer dan een half uur geen beweging is dan geen verlichting aan. if (domoticz.devices('Handschakelaar verlichting').state == 'On') then -- wanneer de Handschakelaar aan staat niets aan de verlichting doen! else if (domoticz.data.NuIemandThuis == 'On' and domoticz.devices('State - IsDonker').state == 'On') then domoticz.log(scriptname ..'Er is iemand thuis en het is donker', domoticz.LOG_INFO) if (domoticz.devices('Beweging woonkamer').state == 'On' or domoticz.devices('TV').state == 'On') then -- er is iemand in de Woonkamer domoticz.log(scriptname ..'en er is beweging of de tv staat aan.', domoticz.LOG_INFO) domoticz.devices('Woonkamerlamp').switchOn().checkFirst() if (domoticz.devices('TV').state == 'On' and domoticz.devices('Beweging keuken').state == 'Off') then if (domoticz.time.isNightTime == true) then -- de tv staat aan en geen beweging keuken domoticz.log(scriptname ..'TV staat aan en geen beweging keuken dus sfeerlicht in keuken aan.', domoticz.LOG_INFO) -- alleen als het na zonsondergang is. In de zomer kan het wel 'donker' zijn, -- maar hoeft het sfeerlicht nog niet aan. domoticz.devices('Keukenlamp').switchOn().checkFirst() end elseif (domoticz.devices('Beweging keuken').state == 'On') then -- er is beweging in de keuken domoticz.log(scriptname ..'Er is iemand in de keuken. Feller zetten keukenspotjes.', domoticz.LOG_INFO) domoticz.devices('Woonkamerlamp').switchOn().checkFirst() domoticz.devices('Keukenlamp').switchOn().checkFirst() elseif (domoticz.devices('TV').state == 'Off' and domoticz.devices('Beweging keuken').state == 'Off') then domoticz.log(scriptname ..'Er is NIEMAND in de keuken,TV is ook uit. Alleen basis verlichtng aan.', domoticz.LOG_INFO) domoticz.devices('Woonkamerlamp').switchOn().checkFirst() if (domoticz.time.isNightTime == true) then -- alleen als het na zonsondergang is. In de zomer kan het wel 'donker' zijn, -- maar hoeft het sfeerlicht nog niet aan. -- if (domoticz.time.matchesRule('after last saturday in march and before last saturday in october')) then -- geen Keukenverlichting --else domoticz.devices('Keukenlamp').switchOn().checkFirst() --end end end elseif (domoticz.devices('Beweging woonkamer').state == 'Off' and domoticz.time.matchesRule('between sunset and 23:00')) then -- tussen zonsondergang en 23.00 de ledstrip aan -- er is iemand thuis, het is donker en er is een half uur geen beweging. domoticz.log(scriptname ..'maar er is al een kwartier geen beweging beneden. Verlichting uitzetten behalve de Ledstrip.', domoticz.LOG_INFO) domoticz.devices('Avondlamp').switchOn().checkFirst() domoticz.devices('Keukenlamp').switchOff().checkFirst() elseif (domoticz.devices('Beweging woonkamer').state == 'Off' and domoticz.time.matchesRule('at 23:00-06:00')) then -- slapen/nacht domoticz.log(scriptname ..'maar het is tussen 23.00 en 06.00 dus slapen we waarschijnlijk', domoticz.LOG_INFO) domoticz.devices('Woonkamer').switchOff().checkFirst() domoticz.devices('Keukenlamp').switchOff().checkFirst() elseif (domoticz.devices('Beweging woonkamer').state == 'Off' and domoticz.time.matchesRule('after sunset and 23:00')) then domoticz.log(scriptname ..'maar er is al een kwartier geen beweging beneden. Verlichting uitzetten behalve de Ledstrip. Na sunset en voor 23.00', domoticz.LOG_INFO) domoticz.devices('Avondlamp').switchOn().checkFirst() domoticz.devices('Keukenlamp').switchOff().checkFirst() else -- overige situaties zoals zondag ochtend domoticz.log(scriptname ..'overige situatie. Verlichting uitzetten', domoticz.LOG_INFO) domoticz.devices('Woonkamer').switchOff().checkFirst() domoticz.devices('Keukenlamp').switchOff().checkFirst() end elseif (domoticz.data.NuIemandThuis == 'On' and domoticz.devices('State - IsDonker').state == 'Off') then -- Er is iemand thuis maar het is niet donker. domoticz.log(scriptname ..'Er is iemand thuis maar het is niet donker. Verlichting uitzetten.', domoticz.LOG_INFO) domoticz.devices('Woonkamerlamp').switchOff().checkFirst() domoticz.devices('Keukenlamp').switchOff().checkFirst() elseif (domoticz.data.NuIemandThuis == 'Off' and domoticz.devices('State - IsDonker').state == 'Off') then -- Er is niemand thuis maar het is niet donker. domoticz.log(scriptname ..'Er is NIEMAND thuis en het is niet donker. Verlichting uitzetten.', domoticz.LOG_INFO) domoticz.devices('Woonkamerlamp').switchOff().checkFirst() domoticz.devices('Keukenlamp').switchOff().checkFirst() elseif (domoticz.data.NuIemandThuis == 'Off' and domoticz.devices('State - IsDonker').state == 'On' and (domoticz.time.hour > 16 and domoticz.time.hour < 23)) then -- Er is niemand thuis en het is donker, avondlamp aan. -- maar alleen tussen 16.00 en 23.00 domoticz.log(scriptname ..'Er is NIEMAND thuis maar WEL donker. Avondlampje aanzetten.', domoticz.LOG_INFO) domoticz.devices('Avondlamp').switchOn().checkFirst() domoticz.devices('Keukenlamp').switchOff().checkFirst() end end domoticz.log(scriptname ..'************* einde verlichting v2.0 ****************', domoticz.LOG_INFO) end }
Binnen de code staat al de nodige uitleg.
Het werkt!
Als je alles juist ingevuld hebt gaan de lampen automatisch aan en uit op basis van je aanwezigheid en beweging. 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!
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
Beide interessant…………..
Waar kan ik dat “checkfirst() functie van dzvents” vinden ??
Of misschien wil jij dat ook delen Wouter ?
Hoi Nico,
Meer info over dzvents kun je vinden op
https://www.domoticz.com/wiki/DzVents:_next_generation_LUA_scripting
Onder hoofdstuk Command options (delay, duration, event triggering) kun je meer lezen over checkfirst.
Mijn script kan ik morgen wel even 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) doif (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
Hoi Rob,
Het lijkt erop dat je dezelfde problemen hebt als Jan. Zie onze reacties onderaan deze pagina :
https://www.twoenter.nl/blog/domotica/presence-detection-aanwezigheids-detectie-domoticz/
Of is er iets anders aan de hand?
Wouter
Hoi Wouter,
Ik ben een beginnende PI gebruiker icm domoticz. Ik heb je ping-script met succes gekopieerd en naar mijn hand gezet (lees: ip veranderd en dummy gemaakt)
Toen ik er achter kwam dat dit zoooo simpel werkt (nadat jij dus mij het script hebt laten kopieren), staan nu ook de tv, ps4, tablets en iphone’s onder de ping.
Hiermee kan ik de kids in de gaten houden mbt beeldschermtijd. (en daar een gebeurtenis aan toe voegen wat ik wenselijk vind).
Ik ondervind ook de false ping bij een gsm in ruststand, dat is hier geen issue maar meer een mededeling.
ik stuur je dit bericht om te laten weten dat er anno 2021 nog steeds gebruik gemaakt wordt van je kennis. Dat zal je vast leuk vinden om eens te horen.
Gr Iwan
Hoi Iwan,
Leuk dat je zo enthousiast aan de slag gegaan bent! Leuk om te lezen dat het allemaal gelukt is! Positieve reacties motiveren altijd naar nieuwe artikelen en het bijhouden van de site, dus dank je wel!
Voor vragen en tips etc kun je altijd reageren onder een artikel 😉👍
Groet Wouter