X10 Server - IOT device to leverage a collection of old X10 devices for home automation and lighting control.
Dependencies: IniManager mbed HTTPClient SWUpdate mbed-rtos Watchdog X10 SW_HTTPServer SW_String EthernetInterface TimeInterface SSDP
X10 Server
See the X10 Server Nodebook page
main.cpp@4:5da66fab599c, 2018-08-31 (annotated)
- Committer:
- WiredHome
- Date:
- Fri Aug 31 22:51:15 2018 +0000
- Revision:
- 4:5da66fab599c
- Parent:
- 0:de1dfa2ab813
- Child:
- 5:6244e237def1
Updated the demo to set the RTC from an NTP server.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
WiredHome | 0:de1dfa2ab813 | 1 | // |
WiredHome | 0:de1dfa2ab813 | 2 | // A simple SSDP example |
WiredHome | 0:de1dfa2ab813 | 3 | // |
WiredHome | 0:de1dfa2ab813 | 4 | #include "mbed.h" // ver 120; mbed-rtos ver 111 |
WiredHome | 0:de1dfa2ab813 | 5 | #include "EthernetInterface.h" // ver 55 |
WiredHome | 0:de1dfa2ab813 | 6 | #include "SW_HTTPServer.h" // ver 50 |
WiredHome | 0:de1dfa2ab813 | 7 | #include "TimeInterface.h" // ver 23 |
WiredHome | 0:de1dfa2ab813 | 8 | #include "Watchdog.h" // ver 6 |
WiredHome | 0:de1dfa2ab813 | 9 | #include "SW_String.h" // ver 1 |
WiredHome | 0:de1dfa2ab813 | 10 | #include "SSDP.h" // ver 0 |
WiredHome | 0:de1dfa2ab813 | 11 | |
WiredHome | 0:de1dfa2ab813 | 12 | #include "WebPages.h" // Private handler for web queries |
WiredHome | 0:de1dfa2ab813 | 13 | |
WiredHome | 0:de1dfa2ab813 | 14 | RawSerial pc(USBTX, USBRX); |
WiredHome | 0:de1dfa2ab813 | 15 | |
WiredHome | 0:de1dfa2ab813 | 16 | EthernetInterface eth; |
WiredHome | 0:de1dfa2ab813 | 17 | TimeInterface ntp(ð); |
WiredHome | 0:de1dfa2ab813 | 18 | Watchdog wd; |
WiredHome | 0:de1dfa2ab813 | 19 | time_t lastboottime; |
WiredHome | 0:de1dfa2ab813 | 20 | |
WiredHome | 4:5da66fab599c | 21 | PwmOut signOfLife(LED4); // LED sign of life. 100% WD reset, 20% restart, sine-wave: running |
WiredHome | 4:5da66fab599c | 22 | |
WiredHome | 0:de1dfa2ab813 | 23 | //FlashFileSystem flash("flash"); // static files here for reliability and speed |
WiredHome | 0:de1dfa2ab813 | 24 | LocalFileSystem local("local"); // some place to hold settings and maybe the static web pages |
WiredHome | 0:de1dfa2ab813 | 25 | const char * Server_Root = "/local"; |
WiredHome | 0:de1dfa2ab813 | 26 | |
WiredHome | 0:de1dfa2ab813 | 27 | // public for the WebPages handler to see |
WiredHome | 0:de1dfa2ab813 | 28 | // |
WiredHome | 0:de1dfa2ab813 | 29 | const char * BUILD_DATE = __DATE__ " " __TIME__; |
WiredHome | 0:de1dfa2ab813 | 30 | const char * PROG_NAME = "SSDP Server"; |
WiredHome | 4:5da66fab599c | 31 | char * My_Name = "MBED SSDP Node"; |
WiredHome | 0:de1dfa2ab813 | 32 | const char * My_SerialNum = "0000001"; |
WiredHome | 4:5da66fab599c | 33 | int Server_Port = 80; |
WiredHome | 0:de1dfa2ab813 | 34 | // end public information |
WiredHome | 0:de1dfa2ab813 | 35 | |
WiredHome | 0:de1dfa2ab813 | 36 | |
WiredHome | 4:5da66fab599c | 37 | |
WiredHome | 4:5da66fab599c | 38 | |
WiredHome | 4:5da66fab599c | 39 | /// ShowSignOfLife |
WiredHome | 4:5da66fab599c | 40 | /// |
WiredHome | 4:5da66fab599c | 41 | /// Pulse an LED to indicate a sign of life of the program. |
WiredHome | 4:5da66fab599c | 42 | /// This also has some moderate entertainment value. |
WiredHome | 4:5da66fab599c | 43 | /// |
WiredHome | 4:5da66fab599c | 44 | void ShowSignOfLife(int degreeIncrement = 1) |
WiredHome | 4:5da66fab599c | 45 | { |
WiredHome | 4:5da66fab599c | 46 | #define PI 3.14159265359 |
WiredHome | 4:5da66fab599c | 47 | static int degrees = 0; |
WiredHome | 4:5da66fab599c | 48 | float v; |
WiredHome | 4:5da66fab599c | 49 | |
WiredHome | 4:5da66fab599c | 50 | degrees += degreeIncrement; |
WiredHome | 4:5da66fab599c | 51 | v = sin(degrees * PI / 180)/2 + 0.5; |
WiredHome | 4:5da66fab599c | 52 | signOfLife = v; // a little dimmer |
WiredHome | 4:5da66fab599c | 53 | } |
WiredHome | 4:5da66fab599c | 54 | |
WiredHome | 0:de1dfa2ab813 | 55 | int main() { |
WiredHome | 0:de1dfa2ab813 | 56 | pc.baud(460800); |
WiredHome | 0:de1dfa2ab813 | 57 | pc.printf("\r\n%s Build %s\r\n", PROG_NAME, BUILD_DATE); |
WiredHome | 4:5da66fab599c | 58 | lastboottime = ntp.timelocal(); |
WiredHome | 0:de1dfa2ab813 | 59 | if (wd.WatchdogCausedReset()) { |
WiredHome | 0:de1dfa2ab813 | 60 | pc.printf("**** Watchdog Event caused reset at %s ****\r\n", ntp.ctime(&lastboottime)); |
WiredHome | 0:de1dfa2ab813 | 61 | } |
WiredHome | 0:de1dfa2ab813 | 62 | wd.Configure(45); // very generous, but this is a network appliance, so a bit less deterministic. |
WiredHome | 0:de1dfa2ab813 | 63 | |
WiredHome | 0:de1dfa2ab813 | 64 | eth.init(); //Use DHCP |
WiredHome | 0:de1dfa2ab813 | 65 | eth.connect(); |
WiredHome | 0:de1dfa2ab813 | 66 | printf("IP: %s\n", eth.getIPAddress()); |
WiredHome | 0:de1dfa2ab813 | 67 | //Thread thr(SSDPListener, NULL, osPriorityLow); |
WiredHome | 0:de1dfa2ab813 | 68 | HTTPServer svr(Server_Port, Server_Root, 15, 30, 20, 50, &pc); |
WiredHome | 0:de1dfa2ab813 | 69 | svr.RegisterHandler("/", RootPage); |
WiredHome | 0:de1dfa2ab813 | 70 | svr.RegisterHandler("/setup.xml", Setup_xml); |
WiredHome | 4:5da66fab599c | 71 | SSDP ssdp(My_Name, eth.getMACAddress(), eth.getIPAddress(), Server_Port); |
WiredHome | 4:5da66fab599c | 72 | |
WiredHome | 4:5da66fab599c | 73 | ntp.set_dst("3/11,2:00","11/4,2:00"); // mm/dd,hh:mm |
WiredHome | 4:5da66fab599c | 74 | ntp.set_tzo_min(-360); |
WiredHome | 4:5da66fab599c | 75 | int res = ntp.setTime("pool.ntp.org"); |
WiredHome | 4:5da66fab599c | 76 | |
WiredHome | 0:de1dfa2ab813 | 77 | while (1) { |
WiredHome | 0:de1dfa2ab813 | 78 | wd.Service(); |
WiredHome | 0:de1dfa2ab813 | 79 | svr.Poll(); // non-blocking, but also not deterministic |
WiredHome | 0:de1dfa2ab813 | 80 | Thread::yield(); |
WiredHome | 4:5da66fab599c | 81 | ShowSignOfLife(10); |
WiredHome | 4:5da66fab599c | 82 | static time_t tLast; |
WiredHome | 4:5da66fab599c | 83 | time_t tNow = ntp.timelocal(); |
WiredHome | 4:5da66fab599c | 84 | if (tNow != tLast) { |
WiredHome | 4:5da66fab599c | 85 | printf("time is %s\r\n", ntp.ctime(&tNow)); |
WiredHome | 4:5da66fab599c | 86 | tLast = tNow; |
WiredHome | 4:5da66fab599c | 87 | } |
WiredHome | 4:5da66fab599c | 88 | //printf("Mem: %5d, %5d %5d\n", Thread::used_stack(), Thread::max_stack(), Thread::stack_size()); |
WiredHome | 0:de1dfa2ab813 | 89 | } |
WiredHome | 0:de1dfa2ab813 | 90 | } |