Watt Eye has a simple purpose - monitor pulses that comes from the home electric meter, measure the interval between the pulses and compute the real-time energy being consumed, broadcast that onto the network using UDP packets so that CouchCalendar has something to do and display, and publish the data to a web server, where it can be used (graphed or placed into a db).

Dependencies:   IniManager mbed HTTPClient SWUpdate StatisticQueue mbed-rtos NTPClient Watchdog SW_HTTPServer EthernetInterface TimeInterface

Features:

  • Reads the time between pulses (which the home electric meter emits as IR for each Watt consumed).
  • Once every 5 seconds, it broadcasts this via UDP to the network, so other nodes can listen to this real-time data.
  • Once every 5 minutes, it posts statistics to a web server for logging.
  • Once a day, it checks the web server to see if there is a SW update (and if so it downloads, installs, and activates it).
  • It syncs to a configured NTP server, but doesn't actually use this information for anything.
  • It hosts a web server, but this is not being used at this time.

So, this is a rather expensive piece of hardware to monitor a single pulse, and yet it is easy to imagine enhancing this:

  • Read the water meter in a similar manner.
  • Read the gas meter in a similar manner.

And even then, there will be many left-over port pins for other uses.

Revision:
3:5c3ba12d155b
Parent:
2:649d91b93824
Child:
4:0a7567195e4b
--- a/main.cpp	Mon Jan 18 21:30:15 2016 +0000
+++ b/main.cpp	Mon Jan 18 21:50:17 2016 +0000
@@ -15,9 +15,8 @@
 #ifdef WIFLY
 #include "WiflyInterface.h"
 #else
-#include "EthernetInterface.h"  // ver 41
+#include "EthernetInterface.h"  // ver 51
 #endif
-#include "EthStatus.h"
 
 #include "SW_HTTPServer.h"
 
@@ -308,11 +307,7 @@
 
 bool NetworkIsConnected(void)
 {
-#ifdef WIFLY
     return eth.is_connected();
-#else
-    return get_link_status();
-#endif
 }
 
 void PulseRisingISR(void)
@@ -487,11 +482,8 @@
             if (0 == eth.connect()) {
                 linkup = true;
                 ShowIPAddress(true);
-#ifdef WIFLY
-#else
-                int speed = get_connection_speed();
+                int speed = eth.get_connection_speed();
                 pc.printf("Connected at %d Mb/s\r\n", speed);
-#endif
                 SoftwareUpdateCheck(true);
                 SyncToNTPServer();  // we hope to have the right time of day now
                 wait(5);