2022-10-25 19:28:31 +02:00

48 lines
1.5 KiB
C++

#pragma once
namespace JsonHA {
bool buildSensor(JsonDocument& jsonDoc, unsigned long value) {
jsonDoc["id"] = ID(value);
float voltage = (float)GET_VCC(value) / 1000;
if (voltage != 0) {
JsonObject diagnostic = jsonDoc.createNestedObject("diagnostic");
diagnostic["voltage"] = voltage;
}
JsonObject sensor = jsonDoc.createNestedObject("sensor");
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;
}
void buildRcSwitch(JsonDocument& jsonDoc, unsigned int protocol, unsigned long value) {
JsonObject rcSwitch = jsonDoc.createNestedObject("rcSwitch");
rcSwitch["protocol"] = protocol;
if (protocol == 1) {
RcDecoder::RcSwitch decoded;
RcDecoder::decode(value, decoded);
rcSwitch["state"] = decoded.state;
rcSwitch["group"] = String(decoded.group, BIN);
rcSwitch["channel"] = decoded.device;
} else {
rcSwitch["value"] = value;
}
}
}