Tuesday, 25 September 2012 20:53
Wireless Router Home Automation
This project eliminate the use of an expensive Wifi/Network Shield but still able to control home appliances from any where. You may already own a wireless router which support OpenWRT or else you can get a very cheap wireless router such as WR703N for this project.
In order to eliminate install many packages on the router, I am using HTML and Javascript for the web interface, while hardware interface is using Lua which is come with OpenWRT. The whole process is just install a serial driver (see step below) to make the instruction simple & keep the router free of resources.
Prerequisite
-
Wireless router flashed with OpenWRT. This project based on TP-LINK TL-WR1043ND wireless router, you can use TL-WR703N or TL-MR3420 if budget is concerned, any other router that support OpenWRT should work as well.
-
Arduino code, sketch using Ocean Controls KTA223, or any serial device that use the following protocol.
Syntax for receiving message: @aaccpp
Syntax for replying message: #aapp
|
- Disabling auto reset for Arduino
- Relay that can handle large loads, you can use this 8 channel relay box or purchase the KTA-223 module from Ocean Control
Installing Serial Driver
Select the correct serial driver for your serial device. I'm using Arduino duemilanove, so SSH to router and enter code below:
opkg update opkg install kmod-usb-serial-ftdi |
If you are using Teensy or Arduino Uno
opkg install kmod-usb-acm |
If you are using PL2303 based USB/serial adapters
opkg install kmod-usb-serial-pl2303 |
If you are using CP201x based USB/serial adapters
opkg install kmod-usb-serial-cp210x |
If you are using CH340 based USB/serial adapters
opkg install kmod-usb-serial-ch341 |
Verifying Serial Port
Plug in Arduino to the USB port of router, make sure the serial device is working with router, and know the port name assigned to the serial device.
Plug in Arduino to the USB port of router, make sure the serial device is working with router, and know the port name assigned to the serial device.
dmesg | grep -i usb |
It should look like this


Download
Arduino sketch from Ocean Controls: KTA223 RelayDuino
Web interface: wireless router home automation v1.zip
Arduino sketch from Ocean Controls: KTA223 RelayDuino
Web interface: wireless router home automation v1.zip
Installation
- Download the web interface and extract to any folder of computer
- You should see three files and two folders on your computer
- Using WinSCP copy all the files and folders to /www folder of router
- Now your router should have
/www/main.html
/www/main.js
/www/cgi-bin/
/www/images/
- You must have enough permission to run the file in /www/cgi-bin folder. So change the luaSerial file permission to 0755.
chmod 0755 /www/cgi-bin/luaSerial |
Test the CGI (luaSerial) script
All ON: http://192.168.1.1/cgi-bin/[email protected]
All OFF: http://192.168.1.1/cgi-bin/luaSerial?@00OF0
Running the program
- Open up a browser and navigate to http://192.168.1.1/main.html (192.168.1.1 is the router IP, you should use your own router IP)


- Click on each images to toggle ON and OFF, images will change accordingly.
- The Tools image & navigator images is not use at the moment.
- The status bar is use to display serial message which reply from Arduino
Testing
As shown in figure below is the Arduino and LED that I use to test the software.
How it works
- The main program split into 3 files for easy understanding (main.html, main.css, main.js)
- When main.html started, it load two external files (main.css & main.js)
- onload (line 9) triggered and execute autoRun() function from main.js
- Update image caption on screen
- Issue runCmd(0) to get status from Arduino then start Timer to query status every 10 seconds
- Update images based on results from Arduino
- Startup process completed. Waiting for user input......
- User click on imageButton, say first image
- javascript:runCmd(1) triggered
- Clear old Timer and start a new Timer
- Ajax deal with serialLua
- serialLua reply status (I name it Arduino message) to Ajax
- Display Arduino message on status bar
- Update first imageButton according to Arduino message
Detailed explanation for the code is written inside the source code, I have commented throughout to make modification easy.
All the while I'm using Ms Access and Delphi for my projects. I have only little knowledge of HTML and Javascript, recenlty I'm learning how to use Lua because of this project. I'm facing a minor problem in luaSerial.
I don't have a good solution to clear the serial buffer, I have to use the most stupid way (very shy) to clear the buffer. Refer to code below, I have to issue readSerial() function instead of just using serial:read and serial:flush.
function readSerial() if string.len(serialData)>0 then if string.len(serialData) == 0 then end |
Please let me know if you got a good solution.
Authentication
Authentication is very very very...... simple. Thanks to OpenWRT team.
SSH to router and execute code below. User name & password is same as router login user name & password.
echo '/cgi-bin:root:$p$root' > /etc/httpd.conf; /etc/init.d/uhttpd restart |
Control Home Appliances over Internet
To control home appliances from any where, you must have a DDNS account and open port for the router. This article explain how to control device over internet.
Future Plan
- Rewrite web interface
- More control, for example analog control
- Web cam integrated
- More......
This is a very preliminary release, please report any bugs you may find to the project.
Published in
Projects
Tagged under