Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Huisstatus Normaal
- function alarmShorter(old, new)
- if (old ~= new) then
- grp.write('1/3/34', new)
- end
- end
- -- De status van het pand mag zijn: Thuis/Korte afwezigheid/Lang afwezig/Bewaken/Nacht/Gast/Niet Storen/Handbediening.
- value = grp.getvalue('1/3/32')
- alarm = grp.getvalue('1/3/34')
- if value == 0 then
- grp.write('32/1/3', "Thuis")
- alarmShorter(alarm, 0)
- elseif value == 1 then
- grp.write('32/1/3', "Kort afwezig")
- alarmShorter(alarm, 1)
- elseif value == 2 then
- grp.write('32/1/3', "Lang afwezig")
- alarmShorter(alarm, 1)
- elseif value == 3 then
- grp.write('32/1/3', "Bewaken")
- alarmShorter(alarm, 1)
- elseif value == 4 then
- grp.write('32/1/3', "Nacht")
- alarmShorter(alarm, 0)
- elseif value == 5 then
- grp.write('32/1/3', "Gast")
- alarmShorter(alarm, 0)
- elseif value == 6 then
- grp.write('32/1/3', "Niet storen")
- alarmShorter(alarm, 0)
- elseif value == 7 then
- grp.write('32/1/3', "Hanbediening")
- alarmShorter(alarm, 0)
- script.disable('Camerabeweging')
- script.disable('Lichtsensor')
- script.disable('Bewegingssensor')
- script.disable('Verlichting')
- script.disable('Audiodetectie')
- end
- if (value ~= 7) then
- script.enable('Camerabeweging')
- script.enable('Lichtsensor')
- script.enable('Bewegingssensor')
- script.enable('Verlichting')
- script.enable('Audiodetectie')
- end
- -- Indien het pand op "afwezig" gezet wordt moet alle binnenverlichting worden uitgeschakeld.
- if (value == 1 or value == 2) then
- grp.write('1/0/5', 0)
- log('Indien het pand op "afwezig" gezet wordt moet alle binnenverlichting worden uitgeschakeld.')
- end
- -- Huisstatus Panic
- -- Middels een drukknop wordt het huis PANIC gezet
- if (grp.getvalue('1/3/34') ~= 2) then
- setPanic(true)
- log('Middels een drukknop wordt het huis PANIC gezet.')
- end
- -- Huisstatus Alarm
- value = grp.getvalue('1/3/34')
- to = 'yanickvanbarneveld@gmail.com'
- alias_to = 'Yanick van Barneveld'
- if value == 0 then -- Inactief
- subject = 'Alarm uitgeschakeld!'
- messagetxt = 'Het alarm in huis Alfa is zojuist uitgeschakeld!'
- mail(to, subject, messagetxt)
- log('Indien het alarm uitgezet wordt moet er een mail gestuurd worden naar de eigenaar.')
- setAlarm(false)
- elseif value == 1 then -- Actief
- subject = 'Alarm ingeschakeld!'
- messagetxt = 'Het alarm in huis Alfa is zojuist ingeschakeld!'
- mail(to, subject, messagetxt)
- log('Indien het alarm aangezet wordt moet er een mail gestuurd worden naar de eigenaar.')
- setAlarm(false)
- elseif value == 2 then -- Gaat af
- subject = 'Alarm gaat af!'
- messagetxt = "Het alarm in huis Alfa heeft een beweging gedetecteert, het alarm gaat af en de andere bewoners worden op de hoogte gebracht. Zie in de bijlage een afbeelding van de voordeur, indien noodzakelijk schakel de hulpdiensten in!"
- cameraurl = 'http://student:Studentdomo@10.0.0.202/jpg/1/image.jpg'
- filetype = 'jpg'
- bijlagenaam = 'Snapshot'
- mail_camera(to, alias_to, subject, messagetxt, cameraurl, filetype, bijlagenaam)
- log('Indien een alarm optreedt dient er direct een mail naar de eigenaar gestuurd te worden.')
- setPanic(false)
- setAlarm(true)
- elseif value == 3 then -- Storing
- subject = 'Alarm storing!'
- messagetxt = 'Het alarm in huis Alfa heeft een storing. Er wordt een mail verstuurd naar de beheerder van het Domoticasysteem zodat deze storing zo spoedig mogelijk kan worden opgelost.'
- mail(to, subject, messagetxt)
- log('Indien het alarm een storing heeft moet er een mail gestuurd worden naar de eigenaar.')
- end
- -- Lichtsensor
- -- Indien de lichtsterkte buiten onder de 300 LUX komt moet de buitenverlichting op 30% worden ingeschakeld.
- if (grp.getvalue('1/6/0') < 300) then
- grp.write('1/1/28', 30)
- log('Indien de lichtsterkte buiten onder de 300 LUX komt moet de buitenverlichting op 30% worden ingeschakeld.')
- end
- -- Indien de lichtsterkte buiten boven de 600 LUX komt moet de buitenverlichting worden uitgeschakeld.
- if (grp.getvalue('1/6/0') > 600) then
- grp.write('1/1/28', 0)
- log('Indien de lichtsterkte buiten boven de 600 LUX komt moet de buitenverlichting worden uitgeschakeld.')
- end
- -- Bewegingssensor
- -- De buitenverlichting moet op 100% ingeschakeld worden in geval van inbraakalarm.
- if (getHuisstatus() == 3 or getHuisstatus() == 2 or getHuisstatus() == 1) then
- if (grp.getvalue('1/6/1') == true and grp.getvalue('1/3/34') == 1) then
- grp.write('1/1/28', 100)
- grp.write('1/3/34', 2)
- log('De buitenverlichting moet op 100% ingeschakeld worden in geval van inbraakalarm.')
- end
- end
- -- Camerabeweging
- -- Indien camera een beweging detecteerd moet de buitenverlichting op 75% gezet worden gedurende 1 minuut.
- if (grp.getvalue('1/6/2') == true) then
- grp.write('1/1/28', 75)
- log('Indien camera een beweging detecteerd moet de buitenverlichting op 75% gezet worden gedurende 1 minuut.')
- else
- grp.write('1/1/28', 0)
- end
- -- Audiodetectie
- -- Indien camera een geluid detecteerd moet de buitenverlichting op 75% gezet worden gedurende 10 seconden.3
- if (grp.getvalue('1/6/3') == true and grp.getvalue('1/6/2') == false) then
- grp.write('1/1/28', 75)
- log('Indien camera een geluid detecteerd moet de buitenverlichting op 75% gezet worden gedurende 10 seconden.')
- elseif (grp.getvalue('1/6/2') == false) then
- grp.write('1/1/28', 0)
- end
- -- Disco
- value = grp.getvalue('32/1/11')
- if (value == true) then
- log('Er moet een scene ontwikkeld worden waarmee alle aspecten van de bollamp tot zijn recht komen. De projectgroep moet hiervoor een goed voorstel doen aan de opdrachtgever.')
- grp.write('1/1/12', 0)
- grp.write('1/1/13', 0)
- grp.write('1/1/14', 0)
- grp.write('1/1/20', 0)
- grp.write('1/1/21', 0)
- grp.write('1/1/22', 0)
- grp.write('1/0/13', 1)
- sleep(1)
- grp.write('1/0/13', 0)
- grp.write('1/1/20', 255)
- sleep(1)
- grp.write('1/1/20', 0)
- grp.write('1/1/12', 255)
- sleep(1)
- grp.write('1/1/12', 0)
- grp.write('1/1/21', 255)
- sleep(1)
- grp.write('1/1/21', 0)
- grp.write('1/1/13', 255)
- sleep(1)
- grp.write('1/1/22', 255)
- grp.write('1/1/13', 0)
- sleep(1)
- grp.write('1/1/22', 0)
- grp.write('1/1/14', 255)
- sleep(1)
- grp.write('1/1/14', 0)
- grp.write('1/0/13', 1)
- sleep(1)
- grp.write('1/0/13', 0)
- grp.write('32/1/11', 0)
- end
- -- Algemeen
- -- Datum
- grp.write('32/1/2', os.date('%B %d, %Y'))
- -- Tijd
- grp.write('32/1/1', os.date('%H:%M'))
- -- Buitentempratuur
- require('ssl.https')
- require('json')
- data = ssl.https.request('http://weerlive.nl/api/json-10min.php?locatie=Utrecht')
- datatable = json.pdecode(data)
- datatable = datatable['liveweer'][1]
- grp.write('32/1/4', datatable['temp'] .. '℃');
- -- Huisstatuts
- -- Op de grafische front-end moet op een pagina de status (aanwezig/afwezig/alarm) te zien zijn van elk huis.
- function getHuisstatusExtern(huisnaam, huisstatus, panic, alarm)
- if (huisstatus == 1 or huisstatus == 2 or huisstatus == 3) then
- status = "Afwezig"
- else
- status = "Aanwezig"
- end
- if (alarm == 2) then
- return status .. ' (Alarm)'
- elseif (panic == true or panic == 1) then
- return status .. ' (Panic)'
- else
- return status
- end
- end
- grp.write('32/1/10', getHuisstatusExtern('Beta', grp.getvalue('2/3/27'), grp.getvalue('2/3/28'), grp.getvalue('2/3/29')))
- grp.write('32/1/9', getHuisstatusExtern('Gamma', grp.getvalue('3/3/32'), grp.getvalue('3/3/33'), grp.getvalue('3/3/34')))
- grp.write('32/1/5', getHuisstatusExtern('Delta', grp.getvalue('4/3/12'), grp.getvalue('4/3/13'), grp.getvalue('4/3/14')))
- grp.write('32/1/6', getHuisstatusExtern('Epsilon', grp.getvalue('5/3/50'), grp.getvalue('5/3/51'), grp.getvalue('5/3/52')))
- grp.write('32/1/8', getHuisstatusExtern('Theta', grp.getvalue('8/3/75'), grp.getvalue('8/3/76'), grp.getvalue('8/3/77')))
- -- Verlichting
- -- De buitenverlichting dient automatisch aan te gaan bij zonsondergang.
- sunrise, sunset = rscalc(52.085665, 5.178099)
- if (os.date('%H:%M') == os.date('%H:%M', sunset * 60)) then
- grp.write('1/1/10', 100)
- log('De buitenverlichting dient automatisch aan te gaan bij zonsondergang.')
- end
- -- De buitenverlichting gaat om 11.30 uur op 40% vermogen indien de unit op bewaken staat.
- if (getHuisstatus() == 3 and os.date('%H:%M') == "11:30") then
- grp.write('1/1/10', 40)
- log('De buitenverlichting gaat om 11.30 uur op 40% vermogen indien de unit op bewaken staat.')
- end
- -- Common Functies
- -- user function library
- function mail(to, subject, message)
- --Sender for e-mail
- from = '<domotica@vanduijn.xyz>'
- alias_from = 'Domotica - Huis Alfa'
- --Create table to include mail settings
- local settings = {
- from = from,
- rcpt = to,
- --user = user,
- --password = password,
- server = 'vps.onoz.nl',
- port = 25,
- --secure = 'STARTTLS',
- }
- --Load required modules to send email with attachment
- local smtp = require("socket.smtp")
- --Create e-mail header
- settings.source = smtp.message{
- headers = {
- from = '' .. alias_from .. ' ' .. from .. '',
- to = '' .. alias_to .. ' ' .. to .. '',
- subject = subject
- },
- --Load attachment inside body
- body = messagetxt
- }
- --Send the email
- r, e = smtp.send(settings)
- --Create alert when sending gives an error with error message
- if (e) then
- log("Could not send email: ", e, "\n")
- alert("Could not send email: ", e, "\n")
- end
- end
- -- mail camera
- function mail_camera(to, alias_to, subject, messagetxt, source_image_url, image_type, image_name_attachment)
- user = ''
- password = ''
- --Sender for e-mail
- from = '<domotica@vanduijn.xyz>'
- alias_from = 'Domotica - Huis Alfa'
- --Attachment and filetype (set filetype as 'gif', 'png', 'bmp', 'jpg' or 'jpeg' according image source)
- image_description = 'Schermafbeelding'
- --Message on bottom of email (will only be showed when client don't understand attachment)
- epilogue = 'End of message'
- --***********************************************************--
- --******************** End of parameters ********************--
- --***********************************************************--
- --********** DON'T CHANGE ANYTHING UNDER THIS LINE **********--
- --***********************************************************--
- --Get remote (from HTTP) image and put image file to HL (will be deleted when end of script)
- os.execute('wget -O /www/scada/vis/' .. image_name_attachment .. '.' .. image_type .. ' ' .. source_image_url .. '')
- --Create filename and location
- local fileName = '/www/scada/vis/' .. image_name_attachment .. '.' .. image_type
- --Create table to include mail settings
- local settings = {
- from = from,
- rcpt = to,
- --user = user,
- --password = password,
- server = 'vps.onoz.nl',
- port = 25,
- --secure = 'STARTTLS',
- }
- --Load required modules to send email with attachment
- local smtp = require("socket.smtp")
- local mime = require("mime")
- local ltn12 = require("ltn12")
- --Create e-mail header
- settings.source = smtp.message{
- headers = {
- from = '' .. alias_from .. ' ' .. from .. '',
- to = '' .. alias_to .. ' ' .. to .. '',
- subject = subject
- },
- --Load attachment inside body
- body = {
- -- the message content
- [1] = {
- body = messagetxt
- },
- --Bijlage
- [2] = {
- headers = {
- ["content-type"] = 'image/' .. image_type .. '; name="' .. image_name_attachment .. '.' .. image_type .. '"',
- ["content-disposition"] = 'attachment; filename="' .. image_name_attachment .. '.' .. image_type .. '"',
- ["content-description"] = '' .. image_description .. '',
- ["content-transfer-encoding"] = "BASE64"
- },
- body = ltn12.source.chain(
- ltn12.source.file(io.open(fileName, "rb")),
- ltn12.filter.chain(
- mime.encode("base64"),
- mime.wrap()
- )
- )
- },
- epilogue = epilogue
- }
- }
- --Send the email
- r, e = smtp.send(settings)
- --Create alert when sending gives an error with error message
- if (e) then
- log("Could not send email: ", e, "\n")
- alert("Could not send email: ", e, "\n")
- end
- --Delete downloaded image file from HL
- os.remove(fileName)
- end
- -- sunrise / sunset calculation
- function rscalc(latitude, longitude, when)
- local pi = math.pi
- local doublepi = pi * 2
- local rads = pi / 180.0
- local TZ = function(when)
- local ts = os.time(when)
- local utcdate, localdate = os.date('!*t', ts), os.date('*t', ts)
- localdate.isdst = false
- local diff = os.time(localdate) - os.time(utcdate)
- return math.floor(diff / 60) / 60
- end
- local range = function(x)
- local a = x / doublepi
- local b = doublepi * (a - math.floor(a))
- return b < 0 and (doublepi + b) or b
- end
- when = when or os.date('*t')
- local y2k = { year = 2000, month = 1, day = 1 }
- local y2kdays = os.time(when) - os.time(y2k)
- y2kdays = math.ceil(y2kdays / 86400)
- local meanlongitude = range(280.461 * rads + 0.9856474 * rads * y2kdays)
- local meananomaly = range(357.528 * rads + 0.9856003 * rads * y2kdays)
- local lambda = range(meanlongitude + 1.915 * rads * math.sin(meananomaly) + rads / 50 * math.sin(2 * meananomaly))
- local obliq = 23.439 * rads - y2kdays * rads / 2500000
- local alpha = math.atan2(math.cos(obliq) * math.sin(lambda), math.cos(lambda))
- local declination = math.asin(math.sin(obliq) * math.sin(lambda))
- local LL = meanlongitude - alpha
- if meanlongitude < pi then
- LL = LL + doublepi
- end
- local dfo = pi / 216.45
- if latitude < 0 then
- dfo = -dfo
- end
- local fo = math.min(math.tan(declination + dfo) * math.tan(latitude * rads), 1)
- local ha = 12 * math.asin(fo) / pi + 6
- local timezone = TZ(when)
- local equation = 12 + timezone + 24 * (1 - LL / doublepi) - longitude / 15
- local sunrise, sunset = equation - ha, equation + ha
- if sunrise > 24 then
- sunrise = sunrise - 24
- end
- if sunset > 24 then
- sunset = sunset - 24
- end
- return math.floor(sunrise * 60), math.ceil(sunset * 60)
- end
- -- Alarm
- -- De buitenverlichting moet op 100% ingeschakeld worden in geval van inbraakalarm.
- function setAlarm(active)
- value = grp.getvalue('1/3/34')
- grp.write('1/1/12', 0)
- grp.write('1/1/13', 0)
- grp.write('1/1/14', 0)
- grp.write('1/1/20', 0)
- grp.write('1/1/21', 0)
- grp.write('1/1/22', 0)
- grp.write('1/0/13', 0)
- grp.write('1/1/28', 0)
- -- Alarm
- if (grp.getvalue('1/3/34') == 2 and active == true) then
- grp.write('1/3/33', false)
- repeat
- grp.write('1/1/28', 100)
- if (grp.getvalue('1/1/20') == 255) then
- grp.write('1/0/13', 1)
- else
- grp.write('1/0/13', 0)
- end
- if (grp.getvalue('1/1/20') == 255) then
- grp.write('1/1/20', 0)
- grp.write('1/1/12', 0)
- else
- grp.write('1/1/20', 255)
- grp.write('1/1/12', 255)
- end
- sleep(1)
- value = grp.getvalue('1/3/34')
- until (value == 0)
- end
- end
- -- Panic
- -- Middels een drukknop wordt het huis PANIC gezet.
- function setPanic(active)
- if (grp.getvalue('1/3/34') ~= 2) then
- value = grp.getvalue('1/3/33')
- grp.write('1/1/12', 0)
- grp.write('1/1/13', 0)
- grp.write('1/1/14', 0)
- grp.write('1/1/20', 0)
- grp.write('1/1/21', 0)
- grp.write('1/1/22', 0)
- grp.write('1/0/13', 0)
- grp.write('1/1/10', 0)
- if (active == false) then
- grp.write('1/3/33', false)
- end
- -- Alarm
- if (grp.getvalue('1/3/33') == true and active == true) then
- log('Middels een drukknop wordt het huis PANIC gezet.')
- repeat
- if (grp.getvalue('1/1/20') == 255) then
- grp.write('1/1/20', 0)
- grp.write('1/1/12', 0)
- else
- grp.write('1/1/20', 255)
- grp.write('1/1/12', 255)
- end
- sleep(1)
- value = grp.getvalue('1/3/33')
- until (value == false)
- end
- end
- if (actice == false) then
- grp.write('1/3/33', false)
- end
- end
- -- Huisstatus
- function getHuisstatus()
- return grp.getvalue('1/3/32')
- end
Add Comment
Please, Sign In to add comment