yet another 18B20 Temperature sensor. variable number of sensors working in parasite mode, serial 16x2 display with diagnostic output and post to a rest web service

Dependencies:   EthernetInterface HTTPClient NTPClient mbed-rtos mbed

Revision:
1:9e88b2508768
Parent:
0:53f05303850a
--- a/main.cpp	Mon Dec 31 12:08:24 2012 +0000
+++ b/main.cpp	Thu Jan 03 18:50:43 2013 +0000
@@ -9,6 +9,8 @@
 #include "collector_proxy.h"
 #include "sensor.h"
 #include "temperature_sensor.h"
+#include "switch_sensor.h"
+#include "local_time.h"
 
 SparkFun display(p28);
 list<Sensor *> sensors;
@@ -27,7 +29,7 @@
     ntp Thread: poll NTP Server every 3 hours
 */
 void ntp_thread(void const *args) {
-    NtpProxy ntp;
+    NtpProxy ntp((const char *) args);
     
     while (true) {
         display.show_ntp_status('t');
@@ -49,7 +51,7 @@
 void display_thread(void const *args) {
     char buffer[20];
     int last_minute = -1;
-    time_t seconds;
+    LocalTime l;
     struct tm *t;
     list<Sensor *>::iterator it = sensors.begin();
     
@@ -60,8 +62,7 @@
         if (it == sensors.end()) it = sensors.begin();
         
         // display time if minute is different from displayed value
-        seconds = time(NULL) + 3600; // FIXME: time-zone calculations wanted -- toggle switch?
-        t = localtime(&seconds);
+        t = l.tm();
         if (last_minute != t->tm_min) {
             last_minute = t->tm_min;
             strftime(buffer, 20, "%H:%M", t);
@@ -101,10 +102,10 @@
     send Thread: post measures to Statistics Collector every 15 minutes
 */
 void send_thread(void const *args) {
-    CollectorProxy collector("http://kinkeldei-net.de:81/sensor");
+    CollectorProxy collector((const char *) args);
 
     while (true) {
-        // 10 minute delay with feedback in the last 9 minutes
+        // 11 minute delay with feedback in the last 10 minutes
         for (int i=10; i>=0; i--) {
             display.show_network_status(i > 9 ? ' ' : '0' + i);
             wait_minutes(1);
@@ -123,31 +124,32 @@
 
 /*
     main Thread: initialize and flash a LED
+    
+    TODO: check or modify string constants    
 */
 int main() {
     display.print_init_message();
 
-    // ConfigReader c('config.ini');
-    // c.read_config();
-    
-    sensors.push_back((Sensor *) new TemperatureSensor(p21, "erlangen/temperatur/demo", "demo"));
+    // testing only:
+    sensors.push_back((Sensor *) new TemperatureSensor(p21, "erlangen/temperatur/demo", "Temperatur"));
+    sensors.push_back((Sensor *) new SwitchSensor(     p25, "erlangen/schalter/demo",   "Schalter"));
 
-    /*
-    sensors.push_back((Sensor *) new TemperatureSensor(p21, "trainmeusel/temperatur/heizung", "heizung"));
-    sensors.push_back((Sensor *) new TemperatureSensor(p22, "trainmeusel/temperatur/keller",  "keller"));
-    sensors.push_back((Sensor *) new TemperatureSensor(p23, "trainmeusel/temperatur/flur",    "flur"));
-    sensors.push_back((Sensor *) new TemperatureSensor(p24, "trainmeusel/temperatur/aussen",  "aussen"));
+    /* live setting:
+    sensors.push_back((Sensor *) new TemperatureSensor(p21, "trainmeusel/heizung/temperatur",     "Heizung"));
+    sensors.push_back((Sensor *) new TemperatureSensor(p22, "trainmeusel/waschkueche/temperatur", "Waschkueche"));
+    sensors.push_back((Sensor *) new TemperatureSensor(p23, "trainmeusel/flur/temperatur",        "Flur"));
+    sensors.push_back((Sensor *) new TemperatureSensor(p24, "trainmeusel/aussen/temperatur",      "Aussen"));
+    sensors.push_back((Sensor *) new SwitchSensor(     p25, "trainmeusel/oel/schwimmer",          "Oel"));
     */
     
-    // must come from configreader later, then remove:
     EthernetInterface eth;
     eth.init("192.168.2.175", "255.255.255.0", "192.168.2.1");
     eth.connect();
 
-    Thread t1(ntp_thread);
+    Thread t1(ntp_thread, (void *)"time.apple.com");
     Thread t2(display_thread);
     Thread t3(measure_thread);
-    Thread t4(send_thread);
+    Thread t4(send_thread, (void *)"http://kinkeldei-net.de:81/sensor");
 
     // a periodical flash should indicate "we are alive"
     DigitalOut led(LED1);