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 smd.iotkit2.ch

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?

UserRevisionLine numberNew 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 }