Verde (The Brain)
After a lot of thought I have decided to change elements of my now archaic VB6 coded backend. I needed a new system that could meet a set of requirements that I have tailored over the years of custom coding my own solution. Moving to an off the shelf solution has a number of advantages, the first of which is the fact that I don't have to code every solution from the ground up. Sometimes it's handy to implement something quickly even though it might not have every feature I want.
Requirements.
- Scripting Engine. (This has to have access to all physical devices on the system as shared resources.)
- Protocol Support for JSON, XML, RAW TCPIP, HTTP Post, HTTP Get, ZWave and X10. (No one wants to reinvent the wheel in every script)
- Plugins to support new hardware
- SDK for scripting engine as well as external integrations
- USB/Serial/TCPIP device support
- Low Power consumption
In comes the Vera3, a small router based platform based on OpenWRT, this unit has a light weight HTML interface with a LUA scripting back end. This device checks off all of the boxes above but those don't account for its strongest asset, it's user community. The Verde forums are full of users just like me that have created custom drivers via LUA script to support everything from thermostats to light switches and everything in between. The compatibility list is immense and due to the simple XML based scripting language it's easy to take one plugin and transform it into a custom plugin that supports new devices. The Vera3 interface is not targeted as an end user interface, it can best be described as middleware. Think of it as a Bus between physical or virtual devices.
My Devices to Integrate
- Ping (Pings my Router, Internet, Phone Server, Switch and AD server and alerts if one is down)
- Virtual Weather (Using a weather station located close to my home this plugin brings in outside temperature, wind speed, rainfall, and light levels)
- Phone (My Asterisk based server, this brings caller ID and voicemail integrations)
- Door Lock (lock/unlock/Poll, also triggers events if the door is open and cant lock or someone uses an invalid code)
- Motion Sensors (in every room of the house, these also include temp/humidity/light level)
- DSC Alarm (arm/disarm/all sensors)
- TV's (Sharp, LG, NEC, Projector design, TCPIP/Serial)
- XBMC (play, stop, ff, rew, etc, also triggering on those events)
- IR Bridge (play IR events to control stereo equipment that doesn't have serial/TCPIP)
- Blinds (open/close/poll)
- SMART Card Reader (Custom made from Arduino, feeds smart card # back to the Vera)
- Garage Door (open/close/poll)
- Find My Iphone (gets the GPS coordinates of my Iphone from the apple service, this is used to figure out if I am at home or work)
- Doorbell (trigger event on Press)
- PTZ Cameras (Pan/Tilt/Zoom/Record)
- Light switches (whole house)
The Interface
Using the SDK I am able to skin an interface using HTTP posts/reads on the back end. I have wrapped this into a nice little HTML5 interface that I can access from my computers/phones/wall touch screens.
Automation
The complete set of automation logic will be moved over onto the Vera, this will encompass items like turning on the outside lights when my car drives up. Here is a list of items that the Vera will automate
- Turn the outside lights on when my IPhone GPS shows I am within 2 blocks of my house.
- Turn of my wall screen with the traffic cam page when I walk down the stairs in the morning.
- Lock the front door every 30 seconds.
- Turn off the TV when XBMC is not playing as long as the TV is on the XBMC input
- Turn off bedroom lights if there is no motion for 10 minutes
- Turn the hallway light on at night when a kid walks to the bathroom then turn off the bathroom light when there is motion back in their bedroom again.
- Turn on the TV and select the proper input, then send the proper JSON statement to XBMC to play a movie after the movie is selected on the wall screen.
- Announce across the house (speakers)
- Laundry Status
- Parking (Snow day means I cannot park on the street by law)
- When Todd's Iphone leaves the work zone around 5PM
- Battery low on any of the sensors
- Pings, if any cannot be completed ("Internet Down", "Phone Server Down", etc)
- Take a picture of people at the front door when they ring the doorbell. This is done with the front door PTZ camera.
- Take a picture of whoever is at the front door if the door access code is entered wrong, take this picture and txt message it to my cell phone.
- Control the blinds in the house depending on outside weather and light. IE, if it's windy and the window is open then raise the blinds so they don't get wrecked
- ARM/Disarm the alarm depending on upstairs/downstairs motion (night mode)
- Open the garage door when the right HID card is read at the outside SMART Card reader.
- Have one time user cards
- Have timeframe cards (Drywall guy will be here from 12-2PM)
- Have permanent use cards.
- Pantry light, automate based on door open/closed.
- Alert if my quad leaves the radius of the house.
- Send Alerts to XBMC (Display on TV)
- Outside Door Open
- Backyard Motion (Night Time)
- Doorbell
- Caller ID
- Voicemail
- If lights in the living room are off and the living room XBMC is paused, slowly bring the lights up 60%. (also for Bedroom and Basement)
- When the sliding door is opened and it's dark outside turn on the outside light. Then turn the light off if no outside motion for 5 minutes
- Voice control for Door Locks, Lights, Alarm arm, list events, etc.
- At night send the off commands to lights/stereo/TV's if no motion in anything other than bedrooms
- When humidity gets to high in the bathrooms the fan will automatically turn on until the humidity matches the surrounding rooms.
- Enable whole house fan when temp outside is closer to the target temp then inside.
- on Saturday morning, if movement in the kids rooms is followed by movement in the living room it puts on the most watched kids movie from the last 1.5 weeks. (keeps them from waking me up)