A sprinkler controller that takes HTTP command for zone and duration.

Dependencies:   EthernetNetIf mbed HTTPServer

Committer:
dminear
Date:
Wed Mar 09 03:44:43 2011 +0000
Revision:
1:91c2c52b4691
Parent:
0:810ec1936452
Fixed constant setting of time via NTP.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dminear 0:810ec1936452 1 #include "mbed.h"
dminear 0:810ec1936452 2 #include "EthernetNetIf.h"
dminear 0:810ec1936452 3 #include "HTTPServer.h"
dminear 0:810ec1936452 4 #include "sprinkler_handler.h"
dminear 0:810ec1936452 5 #include "share.h"
dminear 0:810ec1936452 6 #include "NTPClient.h"
dminear 0:810ec1936452 7
dminear 0:810ec1936452 8 NTPClient ntp;
dminear 0:810ec1936452 9
dminear 0:810ec1936452 10 DigitalOut led1(LED1, "led1");
dminear 0:810ec1936452 11 DigitalOut led2(LED2, "led2");
dminear 0:810ec1936452 12 DigitalOut led3(LED3, "led3");
dminear 0:810ec1936452 13 DigitalOut led4(LED4, "led4");
dminear 0:810ec1936452 14 DigitalOut ledgreen(p29);
dminear 0:810ec1936452 15 DigitalOut ledyellow(p30);
dminear 0:810ec1936452 16
dminear 0:810ec1936452 17 LocalFileSystem fs("webfs");
dminear 0:810ec1936452 18
dminear 0:810ec1936452 19 EthernetNetIf eth;
dminear 0:810ec1936452 20 HTTPServer svr;
dminear 0:810ec1936452 21 Timer activity_timer;
dminear 0:810ec1936452 22
dminear 0:810ec1936452 23 DigitalIn bypass(p16);
dminear 0:810ec1936452 24 DigitalIn zone1in(p17);
dminear 0:810ec1936452 25 DigitalIn zone2in(p18);
dminear 0:810ec1936452 26 DigitalIn zone3in(p19);
dminear 0:810ec1936452 27 DigitalIn zone4in(p20);
dminear 0:810ec1936452 28
dminear 0:810ec1936452 29 DigitalOut zone1out(p24);
dminear 0:810ec1936452 30 DigitalOut zone2out(p23);
dminear 0:810ec1936452 31 DigitalOut zone3out(p22);
dminear 0:810ec1936452 32 DigitalOut zone4out(p21);
dminear 0:810ec1936452 33
dminear 0:810ec1936452 34 int compute1out = 0;
dminear 0:810ec1936452 35 int compute2out = 0;
dminear 0:810ec1936452 36 int compute3out = 0;
dminear 0:810ec1936452 37 int compute4out = 0;
dminear 0:810ec1936452 38
dminear 0:810ec1936452 39 void lanActivity( void ) {
dminear 0:810ec1936452 40 activity_timer.start();
dminear 0:810ec1936452 41 ledgreen = 0;
dminear 0:810ec1936452 42 }
dminear 0:810ec1936452 43
dminear 0:810ec1936452 44 int main() {
dminear 0:810ec1936452 45 //Base::add_rpc_class<DigitalOut>();
dminear 0:810ec1936452 46 ledyellow = 0;
dminear 0:810ec1936452 47 ledgreen = 0;
dminear 0:810ec1936452 48 activity_timer.reset();
dminear 0:810ec1936452 49
dminear 0:810ec1936452 50 printf("Setting up...\n");
dminear 0:810ec1936452 51 EthernetErr ethErr = eth.setup();
dminear 0:810ec1936452 52 if(ethErr) {
dminear 0:810ec1936452 53 printf("Error %d in setup.\n", ethErr);
dminear 0:810ec1936452 54 return -1;
dminear 0:810ec1936452 55 } else {
dminear 0:810ec1936452 56 ledgreen = 1;
dminear 0:810ec1936452 57 }
dminear 0:810ec1936452 58
dminear 0:810ec1936452 59 printf("Setup OK\n");
dminear 0:810ec1936452 60
dminear 0:810ec1936452 61 FSHandler::mount("/webfs", "/files"); //Mount /webfs path on /files web path
dminear 0:810ec1936452 62 FSHandler::mount("/webfs", "/"); //Mount /webfs path on web root path
dminear 0:810ec1936452 63
dminear 0:810ec1936452 64 svr.addHandler<SimpleHandler>("/check");
dminear 0:810ec1936452 65 // the main url with be http://a.b.c.d/sprinkler
dminear 0:810ec1936452 66 // a GET request will return current status
dminear 0:810ec1936452 67 // a POST with parameters of zone<n> and duration in seconds will set it
dminear 0:810ec1936452 68 svr.addHandler<SprinklerHandler>("/sprinkler");
dminear 0:810ec1936452 69 svr.addHandler<RPCHandler>("/rpc");
dminear 0:810ec1936452 70 svr.addHandler<FSHandler>("/files");
dminear 0:810ec1936452 71 svr.addHandler<FSHandler>("/"); //Default handler
dminear 0:810ec1936452 72 //Example : Access to mbed.htm : http://a.b.c.d/mbed.htm or http://a.b.c.d/files/mbed.htm
dminear 0:810ec1936452 73
dminear 0:810ec1936452 74 svr.bind(80);
dminear 0:810ec1936452 75
dminear 0:810ec1936452 76 printf("Listening...\n");
dminear 0:810ec1936452 77
dminear 0:810ec1936452 78 Timer tm;
dminear 0:810ec1936452 79 int timesync = 0;
dminear 0:810ec1936452 80 tm.start();
dminear 0:810ec1936452 81 time_t initialtime = time(NULL);
dminear 0:810ec1936452 82 printf("Time as a basic string = %s\r", ctime(&initialtime));
dminear 0:810ec1936452 83 //Listen indefinitely
dminear 0:810ec1936452 84 while(true) {
dminear 0:810ec1936452 85 //wait(0.01);
dminear 0:810ec1936452 86 Net::poll();
dminear 0:810ec1936452 87 if(tm.read()>0.5) {
dminear 0:810ec1936452 88 ledyellow = !ledyellow; //Show that we are alive
dminear 0:810ec1936452 89 tm.start();
dminear 0:810ec1936452 90 timesync++;
dminear 0:810ec1936452 91 }
dminear 0:810ec1936452 92 if(activity_timer > 0.2) {
dminear 0:810ec1936452 93 ledgreen = 1;
dminear 0:810ec1936452 94 }
dminear 0:810ec1936452 95
dminear 0:810ec1936452 96 if (timesync > 3600 * 2) { // every hour
dminear 0:810ec1936452 97 printf( "Setting time...\r\n" );
dminear 0:810ec1936452 98 Host server2(IpAddr(), 123, "pool.ntp.org");
dminear 0:810ec1936452 99 ntp.setTime(server2);
dminear 0:810ec1936452 100 time_t seconds = time(NULL);
dminear 0:810ec1936452 101 printf("Time as a basic string = %s\r", ctime(&seconds));
dminear 1:91c2c52b4691 102 timesync = 0;
dminear 0:810ec1936452 103 }
dminear 0:810ec1936452 104
dminear 0:810ec1936452 105 if (bypass) { // ignore all other choices other than inputs
dminear 0:810ec1936452 106 led1 = zone1out = zone1in;
dminear 0:810ec1936452 107 led2 = zone2out = zone2in;
dminear 0:810ec1936452 108 led3 = zone3out = zone3in;
dminear 0:810ec1936452 109 led4 = zone4out = zone4in;
dminear 0:810ec1936452 110 } else { // take computed outputs
dminear 0:810ec1936452 111 led1 = zone1out = compute1out;
dminear 0:810ec1936452 112 led2 = zone2out = compute2out;
dminear 0:810ec1936452 113 led3 = zone3out = compute3out;
dminear 0:810ec1936452 114 led4 = zone4out = compute4out;
dminear 0:810ec1936452 115 }
dminear 0:810ec1936452 116 }
dminear 0:810ec1936452 117 }
dminear 0:810ec1936452 118