Home automation using Xbee radios

Dependencies:   EthernetNetIf HTTPServer RPCInterface mbed C12832_lcd

Link to Notebook Page

Revision:
5:ae3cbcf75d78
Parent:
4:6091cb494e73
Child:
8:e32fcca16102
--- a/main.cpp	Thu Nov 28 21:40:10 2013 +0000
+++ b/main.cpp	Mon Dec 02 19:28:26 2013 +0000
@@ -1,8 +1,33 @@
 #include "mbed.h"
+#include "EthernetNetIf.h"
+#include "HTTPServer.h"
+#include "SerialRPCInterface.h"
 
 DigitalIn pb(p8);
 
 
+//Create port variables
+float ReadTemperatureSensor1;
+float ReadTemperatureSensor2;
+int ReadMotionDetector1;
+int ReadMotionDetector2;
+int ReadLightSwitch1;
+int ReadLightSwitch2;
+int WriteLightSwitch1;
+int WriteLightSwitch2;
+
+//Make these variables accessible over RPC by attaching them to an RPCVariable
+RPCVariable<float> RPCTemperatureSensor1(&ReadTemperatureSensor1, "TemperatureSensor1");
+RPCVariable<float> RPCTemperatureSensor2(&ReadTemperatureSensor2, "TemperatureSensor2");
+RPCVariable<int> RPCMotionDetector1(&ReadMotionDetector1, "MotionDetector1");
+RPCVariable<int> RPCMotionDetector2(&ReadMotionDetector2, "MotionDetector2");
+RPCVariable<int> RPCReadLightSwitch1(&ReadLightSwitch1, "ReadLightSwitch1");
+RPCVariable<int> RPCReadLightSwitch2(&ReadLightSwitch2, "ReadLightSwitch2");
+RPCVariable<int> RPCWriteLightSwitch1(&WriteLightSwitch1, "WriteLightSwitch1");
+RPCVariable<int> RPCWriteLightSwitch2(&WriteLightSwitch2, "WriteLightSwitch2");
+
+EthernetNetIf eth;  
+HTTPServer svr;
 
 struct xbee {              // radio prototype with addresss, location, pointer to sensor list
     unsigned int addrHigh;        // upper 16 bits address of sensor
@@ -21,6 +46,23 @@
 void analogInputHandle(struct xbee* ,unsigned int , unsigned int , int , float );
 
 int main() {
+
+  // Ethernet Setup
+  EthernetErr ethErr = eth.setup();
+  if(ethErr)
+  {
+    printf("Error %d in setup.\n", ethErr);
+    return -1;
+  }
+  printf("Setup OK\n");
+  
+  // Add RPCHandler
+  svr.addHandler<RPCHandler>("/rpc");
+
+  // Show that the server is ready and listening
+  svr.bind(80);
+  printf("Listening...\n");
+  
  /* This won't change, or we would lose the list in memory */
     struct xbee *root;
     root->next = NULL; 
@@ -33,6 +75,16 @@
      xbee1 = addnode(root,0,1);
      xbee2 = addnode(root,0,2);
      xbee3 = addnode(root,0,3);
+     
+     // TODO: Read sensors and set RPC variables to initial values
+     
+  //Main program loop
+  while(true){
+     Net::poll();
+    
+     // TODO: Poll sensors and reset RPC variables. 
+    
+  }
 }
 
 struct xbee* addnode(struct xbee* root,unsigned int addrhigh,unsigned int addrlow){