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@0:de1dfa2ab813, 2018-07-03 (annotated)
- Committer:
- WiredHome
- Date:
- Tue Jul 03 02:10:23 2018 +0000
- Revision:
- 0:de1dfa2ab813
- Child:
- 4:5da66fab599c
An example program demonstrating the SSDP-based discovery and a companion Web Server to interact with the mbed device. Scan the network (e.g. in Windows Explorer) to identify the node. Click to open its web page to interact with it.
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 | 0:de1dfa2ab813 | 21 | //FlashFileSystem flash("flash"); // static files here for reliability and speed |
WiredHome | 0:de1dfa2ab813 | 22 | LocalFileSystem local("local"); // some place to hold settings and maybe the static web pages |
WiredHome | 0:de1dfa2ab813 | 23 | |
WiredHome | 0:de1dfa2ab813 | 24 | const char * Server_Root = "/local"; |
WiredHome | 0:de1dfa2ab813 | 25 | |
WiredHome | 0:de1dfa2ab813 | 26 | // public for the WebPages handler to see |
WiredHome | 0:de1dfa2ab813 | 27 | // |
WiredHome | 0:de1dfa2ab813 | 28 | const char * BUILD_DATE = __DATE__ " " __TIME__; |
WiredHome | 0:de1dfa2ab813 | 29 | const char * PROG_NAME = "SSDP Server"; |
WiredHome | 0:de1dfa2ab813 | 30 | const char * My_Name = "MBED SSDP Node"; |
WiredHome | 0:de1dfa2ab813 | 31 | const char * My_SerialNum = "0000001"; |
WiredHome | 0:de1dfa2ab813 | 32 | const int Server_Port = 80; |
WiredHome | 0:de1dfa2ab813 | 33 | // end public information |
WiredHome | 0:de1dfa2ab813 | 34 | |
WiredHome | 0:de1dfa2ab813 | 35 | |
WiredHome | 0:de1dfa2ab813 | 36 | int main() { |
WiredHome | 0:de1dfa2ab813 | 37 | pc.baud(460800); |
WiredHome | 0:de1dfa2ab813 | 38 | pc.printf("\r\n%s Build %s\r\n", PROG_NAME, BUILD_DATE); |
WiredHome | 0:de1dfa2ab813 | 39 | if (wd.WatchdogCausedReset()) { |
WiredHome | 0:de1dfa2ab813 | 40 | pc.printf("**** Watchdog Event caused reset at %s ****\r\n", ntp.ctime(&lastboottime)); |
WiredHome | 0:de1dfa2ab813 | 41 | } |
WiredHome | 0:de1dfa2ab813 | 42 | wd.Configure(45); // very generous, but this is a network appliance, so a bit less deterministic. |
WiredHome | 0:de1dfa2ab813 | 43 | |
WiredHome | 0:de1dfa2ab813 | 44 | eth.init(); //Use DHCP |
WiredHome | 0:de1dfa2ab813 | 45 | eth.connect(); |
WiredHome | 0:de1dfa2ab813 | 46 | printf("IP: %s\n", eth.getIPAddress()); |
WiredHome | 0:de1dfa2ab813 | 47 | //Thread thr(SSDPListener, NULL, osPriorityLow); |
WiredHome | 0:de1dfa2ab813 | 48 | HTTPServer svr(Server_Port, Server_Root, 15, 30, 20, 50, &pc); |
WiredHome | 0:de1dfa2ab813 | 49 | svr.RegisterHandler("/", RootPage); |
WiredHome | 0:de1dfa2ab813 | 50 | svr.RegisterHandler("/setup.xml", Setup_xml); |
WiredHome | 0:de1dfa2ab813 | 51 | SSDP ssdp("Friendly Node", eth.getMACAddress(), eth.getIPAddress(), Server_Port); |
WiredHome | 0:de1dfa2ab813 | 52 | |
WiredHome | 0:de1dfa2ab813 | 53 | while (1) { |
WiredHome | 0:de1dfa2ab813 | 54 | wd.Service(); |
WiredHome | 0:de1dfa2ab813 | 55 | svr.Poll(); // non-blocking, but also not deterministic |
WiredHome | 0:de1dfa2ab813 | 56 | Thread::yield(); |
WiredHome | 0:de1dfa2ab813 | 57 | } |
WiredHome | 0:de1dfa2ab813 | 58 | } |