Add sensor value pushing

master
informatic 2016-09-20 01:03:11 +02:00
parent dad701045c
commit 53b97e20c3
2 changed files with 47 additions and 11 deletions

View File

@ -1,8 +1,9 @@
#include <SpejsNode.h>
#include <Endpoint.h>
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 <class T> void InputEndpoint<T>::updateValue(T newValue) {
template <class T> void ValueEndpoint<T>::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 <class T> void ValueEndpoint<T>::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());
}
}

View File

@ -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 T> class InputEndpoint : public Endpoint {
template <class T> 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 <Libraries/DHT/DHT.h>
class DHT22Endpoint : public InputEndpoint<int> {
class DHTEndpoint : public ValueEndpoint<float> {
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