PowerEYE is an application to receive and store power readings (watts) from the
Rainforest Eagle HAN device by implementing a listener for the Eagle Uploader API. It even pushes the data into your
Universal Devices ISY-994 home controller (if you have one).
This WebAPP is meant to be a personal
-use application to enable both a
persistence database for Eagle UploaderAPI messages and a frontend to
expose and report, using charts & tables. It is a single instance,
self contained application that includes 4 distinct components:
- webApp server,
- database,
- Eagle message listener and other supporting software classes,
- web presentation layer.
It
stores all power reading information on your local networked computer
in an embedded database with a configurable location and is only exposed
through this WebApp.
Software Details
Functional Diagram

Objectives
- Keep my power meter data local to my own home computer network
- View, chart, report and export my power usage
- Learn something new and have fun doing it
- Control Devices via my ISY-994 home controller
- Transfer power data to my ISY-994 home controller so me and my ISY can use the information to control devices in my smart-house
Measurable Objectives
- Receive the Eagle Uploader API messages from the Rainforest Eagle
- Store the readings data, locally in a database
- Provide access to the data, in XML, for further analytics via RESTful style URLs
- A responsive Web Application for use through a web browser using AJAX and html5. Specifically target Android Pad size format.
Secondary Objectives
- Release as a Freely available application
- Release as open source
- Interface with UDI ISY-994
- Eat some PNE mini doughnuts
Functional Components
- PowerEYE Listener Java Servlet
- PowerEYE Helper Class
- provide all back-end middleware functions
- an abstraction layer for the web interface to gather data from the DB
- Apache Derby Database (Embedded)
- Store all the power, pricing and energy data
- Embedded Jetty Web Server/Servlet Engine
- serve the PowerEYE listener and
- to server the Web Interface
- PowerEYE WebAPP
- HTML5, responsive, AJAX based user interface
- Power panel
- Power & Energy Usage Charts
- Power & Energy tables
- EXPORT to XML, JSON, CSV, XLS, other formats
- Embed Control for ISY-994 devices into WebAPP
REST style URLs
The PowerEYE servlet also provides your archived power, energy and pricing information to external applications on demand via HTTP requests that mimic REST style URLs.
It is NOT a full REST implementation - it only listens to http GET methods, and really only mimics REST URLs, but it works.
It provides the data as XML format responses.
the following http request URLs have been implemented:
http://localhost:8080/powereye/rest/price/current
http://localhost:8080/powereye/rest/price/recent
http://localhost:8080/powereye/rest/price/<timestamp>
http://localhost:8080/powereye/rest/power/current
http://localhost:8080/powereye/rest/power/recent
http://localhost:8080/powereye/rest/power/<timestamp>
http://localhost:8080/powereye/rest/energy/current
http://localhost:8080/powereye/rest/energy/recent
http://localhost:8080/powereye/rest/energy/<timestamp>
'recent' requests dump the number of readings in the PowerEYE cache - as of PowerEYE version 1.0, this cache size is a configurable parameter set in the options page.
As of v 1.0, full database table contents can be dumped out in XML via REST service calls:
http://localhost:8080/powereye/rest/db/table/<tablename>
<tablename> can be reading, energy, load_device, load_type
or with the optional <number of rows>
positive number means sorted descending (newest 1st)
negative number means sorted ascending (oldest 1st)
http://localhost:8080/powereye/rest/db/table/<tablename>/100
These database calls are LOOOOooong so you might want to use a commandline URL query tool like
wget, or perl or java or whatever.
Try them out on your own PowerEYE install, to see what they give you.
ISY-994 Variables
If you have a Universal Devices ISY-994 configured, this PowerEYE servlet will push the current power, energy (meter reading) and current price to 3 state variables in the ISY.
The ISY-994 state variables are:
- eagle.power.current.watts
- eagle.energy.current.wattshours
- eagle.price.current.centsperkwhr
NOTE:the power reading gets updated (pushed) every ~10 seconds.
ISY-994 Device Control
You can control your
Universal Devices ISY-994 Insteon devices from within Power
EYE!
Turn ON/OFF your lights or other controlled electric devices and then see the changes in power use, all in one WebApplication, from your phone, pad or computer.
Your devices show up on the PowerEYE Devices page when you have your ISY-994 configured.
Source Code
All the source code is included in the download packages. See the powereye/WEB-INF/src
directory.
3rd Party Libraries
Jetty
The
WebApp engine is an embedded server based on
Jetty version 9 - a Web and Java servlet/JSP engine and serves 2 functions
- Provides a Java Servlet Engine to serve as the listener for the Eagle Uploader API messages. It also manages the
- http POST messages from the Eagle,
- http GET messages from the user as a portal for AJAX calls,
- as a way to send Eagle Uploader API commands back to the Eagle to change the operation of the EAGLE
- REST GET messages in the URLs listed above
- a Java WebApp Server for, serving the web page reporting and configuration
com.oreilly.servlet
The Power
EYE listener servlet uses and includes the com.oreilly.servlet package (from
http://www.servlets.com/cos/) to help out.
- The source code, object code, and documentation in the com.oreilly.servlet package is copyright and owned by Jason Hunter.
- Further licensing details are in the included PowerEYEWebAPP-LICENSE.txt and online.
Apache Derby
The
database used by Power
EYE is an
Apache Derby embedded instance.
- It stores ALL the messages that the Eagle sends out so you can go back to them and analyze them any which way you want.
- The DB files are in a sub-directory called EagleDB.
jQWidgets
The
web presentation pages are exposed through a (optionaly secure SSL)
Java WebAPP.
- It uses an Advanced jQuery and HTML5 UI framework called jQWidgets for all its functional widgets.
-
This WebAPP must only be used for non-commercial personal use.
- Utility customers are allowed (and encouraged) to use PowerEYE for their personal use.
WebARTS Library
Both the WebAPP presentation layer and the supporting Java source files depend on
the
WebARTS library of widgets and tools.
Licenses
You are allowed to use and run all components of this application for your
personal use for free.
Utility customers are allowed (and encouraged) to use Power
EYE for their personal use.
You are also allowed to see and make changes to the various parts or re-distribute it, but you need to do so under the following licenses:
- This WebAPP presentation layer files and web content (item 4 in the the above functional components)
- The supporting Java source files (items 1, 2 & 3 in the the above functional components)