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
Diff: main.cpp
- 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);