rc-gateway/gateway/include/Protocol_2.h

67 lines
1.9 KiB
C++

#pragma once
#include "Protocol.h"
#include "Tiny.h"
class Protocol_2 : public Protocol {
public:
Protocol_2() : Protocol(2) {
}
void toJson(unsigned long value, JsonDocument& jsonDoc) override {
switch (value) {
case 637541753L:
case 771759481L: {
JsonObject motion = jsonDoc.createNestedObject("motion");
motion["kitchen"] = value == 637541753L ? "on" : "off";
break;
}
case 1879048230L:
case 1879048198L: {
JsonObject motion = jsonDoc.createNestedObject("motion");
motion["basement"] = value == 1879048230L ? "on" : "off";
break;
}
default:
StaticJsonDocument<200> jsonSensor;
if (buildSensorJson(value, jsonSensor)) {
jsonDoc.add(jsonSensor);
} else {
Protocol::toJson(value, jsonDoc);
}
break;
}
}
private:
bool buildSensorJson(unsigned long value, JsonDocument& jsonDoc) {
JsonObject sensor = jsonDoc.createNestedObject("sensor");
sensor["id"] = ID(value);
float voltage = (float)GET_VCC(value) / 1000;
if (voltage != 0) {
JsonObject diagnostic = sensor.createNestedObject("diagnostic");
diagnostic["voltage"] = voltage;
}
switch (GET_TYPE(value)) {
case SensorType::GENERIC:
sensor["value"] = GET_VALUE(value);
break;
case SensorType::TEMPERATURE:
sensor["temperature"] = (float)GET_TEMP(value) / 10;
break;
case SensorType::HUMIDITY:
sensor["humidity"] = (float)GET_HUMIDITY(value) / 10;
break;
case SensorType::CONTACT:
sensor["state"] = GET_STATE(value) ? "on" : "off";
break;
default:
return false;
}
return true;
}
} protocol_2;