Wireless Router Home Automation
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
Select the correct serial driver for your serial device. I'm using Arduino duemilanove, so SSH to router and enter code below:
opkg install kmod-usb-serial-ftdi
|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|
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|
Arduino sketch from Ocean Controls: KTA223 RelayDuino
Web interface: wireless router home automation v1.zip
- 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
- 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|
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
- 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
- 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
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.
if string.len(serialData)>0 then
if string.len(serialData) == 0 then
|echo '/cgi-bin:root:$p$root' > /etc/httpd.conf; /etc/init.d/uhttpd restart|
- Rewrite web interface
- More control, for example analog control
- Web cam integrated
This is a very preliminary release, please report any bugs you may find to the project.