![](/media/cache/group/ep_srxDLMd.webp.50x50_q85.jpg)
10.2 Kombiniert die Übung 9.3 Licht zeitgesteuert Ein- und Ausschalten mit dem Sunset Sunrise Dienst, damit bei Sonnenuntergang das Licht ein und bei Sonnenaufgang das Licht ausgeschaltet wird
Dependencies: EthernetInterface MbedJSONValue NTPClient mbed-rtos mbed
Fork of SunriseSunset by
main.cpp@6:4a7fd17737bc, 2015-05-27 (annotated)
- Committer:
- stefan1691
- Date:
- Wed May 27 17:47:29 2015 +0000
- Revision:
- 6:4a7fd17737bc
- Parent:
- 5:cfe277d00d6b
10.2 Kombiniert die ?bung 9.3 Licht zeitgesteuert Ein- und Ausschalten mit dem Sunset Sunrise Dienst, ; damit bei Sonnenuntergang das Licht ein und bei Sonnenaufgang das Licht ausgeschaltet wird
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
stefan1691 | 6:4a7fd17737bc | 1 | /** 10.2 Kombiniert die Übung 9.3 Licht zeitgesteuert Ein- und Ausschalten mit dem Sunset Sunrise Dienst, |
stefan1691 | 6:4a7fd17737bc | 2 | damit bei Sonnenuntergang das Licht ein und bei Sonnenaufgang das Licht ausgeschaltet wird |
marcel1691 | 1:2e29a33cd918 | 3 | */ |
WiredHome | 0:fb5060c39dd1 | 4 | #include "mbed.h" |
WiredHome | 0:fb5060c39dd1 | 5 | #include "HTTPClient.h" |
marcel1691 | 1:2e29a33cd918 | 6 | #include "HTTPText.h" |
WiredHome | 0:fb5060c39dd1 | 7 | #include "EthernetInterface.h" |
stefan1691 | 5:cfe277d00d6b | 8 | #include "MbedJSONValue.h" |
stefan1691 | 5:cfe277d00d6b | 9 | #include <string> |
stefan1691 | 6:4a7fd17737bc | 10 | #include "NTPClient.h" |
WiredHome | 0:fb5060c39dd1 | 11 | |
WiredHome | 0:fb5060c39dd1 | 12 | EthernetInterface eth; |
stefan1691 | 6:4a7fd17737bc | 13 | NTPClient ntp; |
stefan1691 | 3:aad64a4b6ff6 | 14 | // HTTPClient Hilfsklasse |
WiredHome | 0:fb5060c39dd1 | 15 | HTTPClient http; |
stefan1691 | 3:aad64a4b6ff6 | 16 | // I/O Buffer |
marcel1691 | 1:2e29a33cd918 | 17 | char message[6000]; |
WiredHome | 0:fb5060c39dd1 | 18 | |
WiredHome | 0:fb5060c39dd1 | 19 | DigitalOut myled(LED1); |
stefan1691 | 6:4a7fd17737bc | 20 | // Licht |
stefan1691 | 6:4a7fd17737bc | 21 | DigitalOut led( D10 ); |
WiredHome | 0:fb5060c39dd1 | 22 | |
marcel1691 | 1:2e29a33cd918 | 23 | int main() |
marcel1691 | 1:2e29a33cd918 | 24 | { |
stefan1691 | 6:4a7fd17737bc | 25 | printf("\tSunriseSunset Cloud Dienst - Licht ein-/ausschalten\n"); |
WiredHome | 0:fb5060c39dd1 | 26 | eth.init(); |
WiredHome | 0:fb5060c39dd1 | 27 | eth.connect(); |
stefan1691 | 6:4a7fd17737bc | 28 | |
stefan1691 | 6:4a7fd17737bc | 29 | // Zeit vom Time Server holen |
stefan1691 | 6:4a7fd17737bc | 30 | printf("Trying to update time...\r\n"); |
stefan1691 | 6:4a7fd17737bc | 31 | if (ntp.setTime("1.pool.ntp.org") == 0) |
stefan1691 | 6:4a7fd17737bc | 32 | { |
stefan1691 | 6:4a7fd17737bc | 33 | printf("Set time successfully\r\n"); |
stefan1691 | 6:4a7fd17737bc | 34 | time_t ctTime; |
stefan1691 | 6:4a7fd17737bc | 35 | ctTime = time(NULL); |
stefan1691 | 6:4a7fd17737bc | 36 | printf("Time is set to (UTC): %s\r\n", ctime(&ctTime)); |
stefan1691 | 6:4a7fd17737bc | 37 | } |
stefan1691 | 6:4a7fd17737bc | 38 | else |
stefan1691 | 6:4a7fd17737bc | 39 | printf("Error\r\n"); |
WiredHome | 0:fb5060c39dd1 | 40 | |
marcel1691 | 1:2e29a33cd918 | 41 | while(1) |
marcel1691 | 1:2e29a33cd918 | 42 | { |
WiredHome | 0:fb5060c39dd1 | 43 | myled = 1; |
stefan1691 | 5:cfe277d00d6b | 44 | int ret = http.get("http://api.sunrise-sunset.org/json?lat=47.3686498&lng=8.5391825", message, sizeof(message)); |
marcel1691 | 1:2e29a33cd918 | 45 | if ( !ret ) |
marcel1691 | 1:2e29a33cd918 | 46 | { |
stefan1691 | 5:cfe277d00d6b | 47 | MbedJSONValue parser; |
stefan1691 | 5:cfe277d00d6b | 48 | // HTTP GET (JSON) parsen |
stefan1691 | 5:cfe277d00d6b | 49 | parse( parser, message ); |
stefan1691 | 5:cfe277d00d6b | 50 | |
stefan1691 | 5:cfe277d00d6b | 51 | std::string sunrise; |
stefan1691 | 5:cfe277d00d6b | 52 | std::string sunset; |
stefan1691 | 5:cfe277d00d6b | 53 | |
stefan1691 | 5:cfe277d00d6b | 54 | sunrise = parser["results"]["sunrise"].get<std::string>(); |
stefan1691 | 5:cfe277d00d6b | 55 | sunset = parser["results"]["sunset"] .get<std::string>(); |
stefan1691 | 5:cfe277d00d6b | 56 | |
stefan1691 | 5:cfe277d00d6b | 57 | // Umwandlung nach int. Damit die Zeiten besser verglichen werden können. |
stefan1691 | 5:cfe277d00d6b | 58 | int rh, rm, rs, sh, sm, ss; |
stefan1691 | 5:cfe277d00d6b | 59 | sscanf( sunrise.c_str(), "%d:%d:%d AM", &rh, &rm, &rs ); |
stefan1691 | 5:cfe277d00d6b | 60 | sscanf( sunset .c_str(), "%d:%d:%d PM", &sh, &sm, &ss ); |
stefan1691 | 5:cfe277d00d6b | 61 | |
stefan1691 | 6:4a7fd17737bc | 62 | printf( "Sonnenauf- %02d.%02d.%02d und untergang %02d.%02d.%02d\n", rh+2, rm, rs, sh+2+12, sm, ss ); |
stefan1691 | 6:4a7fd17737bc | 63 | |
stefan1691 | 6:4a7fd17737bc | 64 | // Aktuelle Zeit |
stefan1691 | 6:4a7fd17737bc | 65 | time_t seconds = time(NULL); |
stefan1691 | 6:4a7fd17737bc | 66 | struct tm * now = localtime( & seconds ); |
stefan1691 | 6:4a7fd17737bc | 67 | printf( "%d.%d.%d %2d:%2d:%2d\n", now->tm_mday, now->tm_mon + 1, now->tm_year + 1900, now->tm_hour, now->tm_min, now->tm_sec ); |
stefan1691 | 6:4a7fd17737bc | 68 | |
stefan1691 | 6:4a7fd17737bc | 69 | // Einfache Variante - nur Stunden abfragen |
stefan1691 | 6:4a7fd17737bc | 70 | if ( now->tm_hour < rh || now->tm_hour > (sh+12) ) |
stefan1691 | 6:4a7fd17737bc | 71 | led = 1; |
stefan1691 | 6:4a7fd17737bc | 72 | else |
stefan1691 | 6:4a7fd17737bc | 73 | led = 0; |
WiredHome | 0:fb5060c39dd1 | 74 | } |
marcel1691 | 1:2e29a33cd918 | 75 | else |
marcel1691 | 1:2e29a33cd918 | 76 | printf("Error - ret = %d - HTTP return code = %d\n", ret, http.getHTTPResponseCode()); |
marcel1691 | 1:2e29a33cd918 | 77 | |
WiredHome | 0:fb5060c39dd1 | 78 | myled = 0; |
marcel1691 | 1:2e29a33cd918 | 79 | |
WiredHome | 0:fb5060c39dd1 | 80 | wait(10); |
WiredHome | 0:fb5060c39dd1 | 81 | } |
stefan1691 | 5:cfe277d00d6b | 82 | //eth.disconnect(); |
WiredHome | 0:fb5060c39dd1 | 83 | } |