From 53b97e20c356da57951c243ccc9bb5c8cb40ef42 Mon Sep 17 00:00:00 2001 From: Piotr Dobrowolski Date: Tue, 20 Sep 2016 01:03:11 +0200 Subject: [PATCH] Add sensor value pushing --- spejsiot/Endpoint.cpp | 36 ++++++++++++++++++++++++++++++++---- spejsiot/Endpoint.h | 22 +++++++++++++++------- 2 files changed, 47 insertions(+), 11 deletions(-) diff --git a/spejsiot/Endpoint.cpp b/spejsiot/Endpoint.cpp index 07e25a6..5ea533d 100644 --- a/spejsiot/Endpoint.cpp +++ b/spejsiot/Endpoint.cpp @@ -1,8 +1,9 @@ #include #include -void Endpoint::bind(String key, SpejsNode* _parent) { +void Endpoint::bind(String _key, SpejsNode* _parent) { parent = _parent; + key = _key; } void Endpoint::notify(String value) { @@ -10,10 +11,16 @@ void Endpoint::notify(String value) { parent->notify(this, value);*/ } -template void InputEndpoint::updateValue(T newValue) { +template void ValueEndpoint::updateValue(T newValue) { value = newValue; - //if(parent) - // parent->notify(String("xD"), String(value)); + + // TODO parent->notify(this, String(value)) ? + if(parent) + parent->notify(key, String(value)); +} + +template void ValueEndpoint::fillValue(JsonObject& obj) { + obj["value"] = value; } EndpointResult ControlEndpoint::onValue(String key, String value) { @@ -46,3 +53,24 @@ EndpointResult OutputEndpoint::onValue(String key, String value) { digitalWrite(pin, inverted ^ currentValue); return 200; } + +void DHTEndpoint::bind(String _key, SpejsNode* _parent) { + parent = _parent; + key = _key; + + sensor.begin(); + samplingTimer.initializeMs(samplingRate, TimerDelegate(&DHTEndpoint::sample, this)).start(); +} + +void DHTEndpoint::sample() { + TempAndHumidity th; + if(sensor.readTempAndHumidity(th)) + { + updateValue(th.temp); + } + else + { + Serial.print("Failed to read from DHT: "); + Serial.print(sensor.getLastError()); + } +} diff --git a/spejsiot/Endpoint.h b/spejsiot/Endpoint.h index ede94bd..c33710d 100644 --- a/spejsiot/Endpoint.h +++ b/spejsiot/Endpoint.h @@ -17,14 +17,15 @@ public: class Endpoint { protected: - const SpejsNode* parent; + SpejsNode* parent; + String key; public: String type; Endpoint(String _type = "unknown") : type(_type) { } - virtual void bind(String key, SpejsNode* _parent); + virtual void bind(String _key, SpejsNode* _parent); void notify(String value); virtual EndpointResult onValue(String key, String value) { @@ -57,26 +58,33 @@ public: void fillValue(JsonObject& obj); }; -template class InputEndpoint : public Endpoint { +template class ValueEndpoint : public Endpoint { protected: T value; void updateValue(T newValue); public: - InputEndpoint(String _type) : Endpoint(_type) {} + ValueEndpoint(String _type) : Endpoint(_type) {} + + virtual void fillValue(JsonObject& obj); }; #include -class DHT22Endpoint : public InputEndpoint { +class DHTEndpoint : public ValueEndpoint { private: DHT sensor; Timer samplingTimer; int samplingRate; +protected: + void sample(); + public: - DHT22Endpoint(int _pin, int _samplingRate = 10000) : - InputEndpoint("dht22"), sensor(_pin), samplingRate(_samplingRate) {} + DHTEndpoint(int _pin, int _samplingRate = 10000) : + ValueEndpoint("dht"), sensor(_pin, DHT11), samplingRate(_samplingRate) {} + + void bind(String key, SpejsNode* _parent); }; #endif