#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.set(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; } };