From 2ae0a573d9b38dc0ff24c5af2af53818b1d52e15 Mon Sep 17 00:00:00 2001 From: Marcos Kirsch Date: Sun, 8 Mar 2015 20:10:37 -0500 Subject: [PATCH] Functional garage_door_opener example. --- http/apple-touch-icon.png | Bin 0 -> 4183 bytes http/{button.css => garage_door_opener.css} | 2 +- http/garage_door_opener.html | 20 +++++++++++++ http/garage_door_opener.lua | 30 ++++++++++++++++++++ http/redirect.html | 1 - http/remote.html | 16 ----------- 6 files changed, 51 insertions(+), 18 deletions(-) create mode 100644 http/apple-touch-icon.png rename http/{button.css => garage_door_opener.css} (95%) create mode 100644 http/garage_door_opener.html create mode 100644 http/garage_door_opener.lua delete mode 100644 http/redirect.html delete mode 100644 http/remote.html diff --git a/http/apple-touch-icon.png b/http/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..de91784669ad68839fa56547bb5df8a687335e03 GIT binary patch literal 4183 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 literal 0 HcmV?d00001 diff --git a/http/button.css b/http/garage_door_opener.css similarity index 95% rename from http/button.css rename to http/garage_door_opener.css index 91921c5..5e810f3 100644 --- a/http/button.css +++ b/http/garage_door_opener.css @@ -33,7 +33,7 @@ body { -webkit-box-shadow: inset 0 -1px 1px rgba(255, 255, 255, .15); -moz-box-shadow: inset 0 -1px 1px rgba(255, 255, 255, .15); box-shadow: inset 0 -1px 1px rgba(255, 255, 255, .15); - font-family: 'Pacifico', Arial, sans-serif; + font-family: 'Khand', sans-serif; line-height: 1; text-shadow: 0 -1px 1px rgba(175, 49, 95, .7); -webkit-transition: background-color .2s ease-in-out, -webkit-transform .1s ease-in-out; diff --git a/http/garage_door_opener.html b/http/garage_door_opener.html new file mode 100644 index 0000000..9071409 --- /dev/null +++ b/http/garage_door_opener.html @@ -0,0 +1,20 @@ + + + + + + + Garage Remote + + + + + Door 1 + + + Door 2 + + + + + diff --git a/http/garage_door_opener.lua b/http/garage_door_opener.lua new file mode 100644 index 0000000..e2fd8ae --- /dev/null +++ b/http/garage_door_opener.lua @@ -0,0 +1,30 @@ +-- garage_door_opener.lua +-- Part of nodemcu-httpserver, example. +-- Author: Marcos Kirsch + +local function pushTheButton(connection, pin) + + -- Redirect the user back to the static page where the garage door opener buttons are. + connection:send("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\Cache-Control: private, no-store\r\n\r\n") + connection:send('') + + -- push the button! + -- Note that the relays connected to the garage door opener are wired + -- to close when the GPIO pin is low. This way they don't activate when + -- the chip is reset and the GPIO pins are in input mode. + gpio.write(pin, gpio.LOW) + gpio.mode(pin, gpio.OUTPUT) + gpio.write(pin, gpio.LOW) + tmr.delay(300000) -- in microseconds + gpio.write(pin, gpio.HIGH) + gpio.mode(pin, gpio.INPUT) + +end + +return function (connection, args) + print('Garage door button was pressed!') + print('Door', args.door) + if args.door == "1" then pushTheButton(connection, 3) -- GPIO0 + elseif args.door == "2" then pushTheButton(connection, 4) -- GPIO2 + else dofile("httpserver-error.lc")(connection, {code = 400}) end -- Bad Request +end diff --git a/http/redirect.html b/http/redirect.html deleted file mode 100644 index 7c758a3..0000000 --- a/http/redirect.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/http/remote.html b/http/remote.html deleted file mode 100644 index e582aab..0000000 --- a/http/remote.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - Garage Remote - - - - - ¡Bienvenido! - - - - -