add presence sensor into rc-gateway
This commit is contained in:
parent
77422d5f59
commit
f245443a4d
@ -50,6 +50,19 @@ auto tankSensor = Builder<Sensor>::instance(new Sensor{ "Level", OIL_SENSOR })
|
|||||||
.addDiagnostic(new BatterySensor{OIL_SENSOR, "Battery level", "{{ ((value_json.sensor.diagnostic.voltage|float-4.0)|round(2)*100/2.4)|int }}"})
|
.addDiagnostic(new BatterySensor{OIL_SENSOR, "Battery level", "{{ ((value_json.sensor.diagnostic.voltage|float-4.0)|round(2)*100/2.4)|int }}"})
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
auto presenceTracker = Builder<BinarySensor>::instance(PRESENCE_SENSOR)
|
||||||
|
.asDevice(&DeviceConfig::create(PRESENCE_SENSOR)
|
||||||
|
.withName("Kid presence")
|
||||||
|
.withManufacturer("Atmel")
|
||||||
|
.withModel("AtTiny85")
|
||||||
|
.withParent(gatewayDevice))
|
||||||
|
.withValueTemplate("{{ value_json.sensor.state }}")
|
||||||
|
.addDiagnostic(new VoltageSensor{PRESENCE_SENSOR, "Battery voltage", "{{ value_json.sensor.diagnostic.voltage }}"})
|
||||||
|
.addDiagnostic(new BatterySensor{PRESENCE_SENSOR, "Battery level", "{{ ((value_json.sensor.diagnostic.voltage|float-2.5)|round(2)*100/2)|int }}"})
|
||||||
|
.withOffDelaySeconds(5*60)
|
||||||
|
.withDeviceClass("presence")
|
||||||
|
.build();
|
||||||
|
|
||||||
struct PollinSwitch : Switch {
|
struct PollinSwitch : Switch {
|
||||||
constexpr static const char* man = "Pollin";
|
constexpr static const char* man = "Pollin";
|
||||||
const char* group;
|
const char* group;
|
||||||
|
|||||||
@ -98,7 +98,7 @@ namespace Board {
|
|||||||
void parseSensors(JsonDocument& jsonDoc, char* message) {
|
void parseSensors(JsonDocument& jsonDoc, char* message) {
|
||||||
JsonObjectConst json = jsonDoc["sensor"];
|
JsonObjectConst json = jsonDoc["sensor"];
|
||||||
string id = to_string((unsigned int)json["id"]);
|
string id = to_string((unsigned int)json["id"]);
|
||||||
auto sensor = Sensor::mapSensors[id];
|
auto sensor = GenericSensor::mapSensors[id];
|
||||||
if (sensor) sensor->updateState(message);
|
if (sensor) sensor->updateState(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -52,4 +52,5 @@ WATER_SENSOR(3),
|
|||||||
TEMP_SENSOR(4),
|
TEMP_SENSOR(4),
|
||||||
LIGHT_SENSOR(5),
|
LIGHT_SENSOR(5),
|
||||||
MOVEMENT_SENSOR(6),
|
MOVEMENT_SENSOR(6),
|
||||||
OIL_SENSOR(7);
|
OIL_SENSOR(7),
|
||||||
|
PRESENCE_SENSOR(8);
|
||||||
|
|||||||
@ -33,7 +33,7 @@ framework = arduino
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${env.lib_deps}
|
${env.lib_deps}
|
||||||
arkhipenko/TaskScheduler@^3.8.5
|
arkhipenko/TaskScheduler@^3.8.5
|
||||||
https://git.hodos.ro/libraries/ha-mqtt.git@^1.10.0
|
https://git.hodos.ro/libraries/ha-mqtt.git@^1.11.0
|
||||||
https://git.hodos.ro/libraries/wifi.git@^2.0.0
|
https://git.hodos.ro/libraries/wifi.git@^2.0.0
|
||||||
esphome/ESPAsyncWebServer-esphome@^3.4.0
|
esphome/ESPAsyncWebServer-esphome@^3.4.0
|
||||||
upload_port = 192.168.6.161
|
upload_port = 192.168.6.161
|
||||||
|
|||||||
@ -12,7 +12,7 @@ void tearDown(void) {
|
|||||||
void test_unknown_sensor_type(void) {
|
void test_unknown_sensor_type(void) {
|
||||||
StaticJsonDocument<200> jsonDoc;
|
StaticJsonDocument<200> jsonDoc;
|
||||||
unsigned long value = TYPE(0);
|
unsigned long value = TYPE(0);
|
||||||
TEST_ASSERT_EQUAL(false, buildSensorJson(value, jsonDoc));
|
TEST_ASSERT_FALSE(buildSensorJson(value, jsonDoc));
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_max_temp(void) {
|
void test_max_temp(void) {
|
||||||
@ -45,7 +45,7 @@ void test_overflow_value(void) {
|
|||||||
void test_max_voltage(void) {
|
void test_max_voltage(void) {
|
||||||
StaticJsonDocument<200> jsonDoc;
|
StaticJsonDocument<200> jsonDoc;
|
||||||
unsigned long value = VCC(8191) | TYPE(SensorType::GENERIC);
|
unsigned long value = VCC(8191) | TYPE(SensorType::GENERIC);
|
||||||
TEST_ASSERT_EQUAL(true, buildSensorJson(value, jsonDoc));
|
TEST_ASSERT_TRUE(buildSensorJson(value, jsonDoc));
|
||||||
|
|
||||||
JsonObject diagnostic = jsonDoc["sensor"]["diagnostic"];
|
JsonObject diagnostic = jsonDoc["sensor"]["diagnostic"];
|
||||||
TEST_ASSERT_EQUAL(8.191, diagnostic["voltage"]);
|
TEST_ASSERT_EQUAL(8.191, diagnostic["voltage"]);
|
||||||
@ -54,7 +54,7 @@ void test_max_voltage(void) {
|
|||||||
void test_overflow_voltage(void) {
|
void test_overflow_voltage(void) {
|
||||||
StaticJsonDocument<200> jsonDoc;
|
StaticJsonDocument<200> jsonDoc;
|
||||||
unsigned long value = VCC(8192) | TYPE(SensorType::GENERIC);
|
unsigned long value = VCC(8192) | TYPE(SensorType::GENERIC);
|
||||||
TEST_ASSERT_EQUAL(true, buildSensorJson(value, jsonDoc));
|
TEST_ASSERT_TRUE(buildSensorJson(value, jsonDoc));
|
||||||
|
|
||||||
JsonObject diagnostic = jsonDoc["sensor"]["diagnostic"];
|
JsonObject diagnostic = jsonDoc["sensor"]["diagnostic"];
|
||||||
TEST_ASSERT_EQUAL(0, diagnostic["voltage"]);
|
TEST_ASSERT_EQUAL(0, diagnostic["voltage"]);
|
||||||
@ -63,7 +63,7 @@ void test_overflow_voltage(void) {
|
|||||||
void test_temp_sensor(void) {
|
void test_temp_sensor(void) {
|
||||||
StaticJsonDocument<200> jsonDoc;
|
StaticJsonDocument<200> jsonDoc;
|
||||||
unsigned long value = ID(TEMP_SENSOR) | TEMP(210) | TYPE(SensorType::TEMPERATURE);
|
unsigned long value = ID(TEMP_SENSOR) | TEMP(210) | TYPE(SensorType::TEMPERATURE);
|
||||||
TEST_ASSERT_EQUAL(true, buildSensorJson(value, jsonDoc));
|
TEST_ASSERT_TRUE(buildSensorJson(value, jsonDoc));
|
||||||
|
|
||||||
JsonObject sensor = jsonDoc["sensor"];
|
JsonObject sensor = jsonDoc["sensor"];
|
||||||
TEST_ASSERT_EQUAL(TEMP_SENSOR, sensor["id"]);
|
TEST_ASSERT_EQUAL(TEMP_SENSOR, sensor["id"]);
|
||||||
@ -73,7 +73,7 @@ void test_temp_sensor(void) {
|
|||||||
void test_temp_sensor_with_voltage(void) {
|
void test_temp_sensor_with_voltage(void) {
|
||||||
StaticJsonDocument<200> jsonDoc;
|
StaticJsonDocument<200> jsonDoc;
|
||||||
unsigned long value = ID(TEMP_SENSOR) | TEMP(320) | TYPE(SensorType::TEMPERATURE) | VCC(2847L);
|
unsigned long value = ID(TEMP_SENSOR) | TEMP(320) | TYPE(SensorType::TEMPERATURE) | VCC(2847L);
|
||||||
TEST_ASSERT_EQUAL(true, buildSensorJson(value, jsonDoc));
|
TEST_ASSERT_TRUE(buildSensorJson(value, jsonDoc));
|
||||||
|
|
||||||
JsonObject sensor = jsonDoc["sensor"];
|
JsonObject sensor = jsonDoc["sensor"];
|
||||||
TEST_ASSERT_EQUAL(TEMP_SENSOR, sensor["id"]);
|
TEST_ASSERT_EQUAL(TEMP_SENSOR, sensor["id"]);
|
||||||
@ -86,7 +86,7 @@ void test_temp_sensor_with_voltage(void) {
|
|||||||
void test_oil_sensor(void) {
|
void test_oil_sensor(void) {
|
||||||
StaticJsonDocument<200> jsonDoc;
|
StaticJsonDocument<200> jsonDoc;
|
||||||
unsigned long value = ID(OIL_SENSOR) | VALUE(150) | TYPE(SensorType::GENERIC);
|
unsigned long value = ID(OIL_SENSOR) | VALUE(150) | TYPE(SensorType::GENERIC);
|
||||||
TEST_ASSERT_EQUAL(true, buildSensorJson(value, jsonDoc));
|
TEST_ASSERT_TRUE(buildSensorJson(value, jsonDoc));
|
||||||
|
|
||||||
JsonObject sensor = jsonDoc["sensor"];
|
JsonObject sensor = jsonDoc["sensor"];
|
||||||
TEST_ASSERT_EQUAL(OIL_SENSOR, sensor["id"]);
|
TEST_ASSERT_EQUAL(OIL_SENSOR, sensor["id"]);
|
||||||
@ -96,7 +96,7 @@ void test_oil_sensor(void) {
|
|||||||
void test_oil_sensor_with_voltage(void) {
|
void test_oil_sensor_with_voltage(void) {
|
||||||
StaticJsonDocument<200> jsonDoc;
|
StaticJsonDocument<200> jsonDoc;
|
||||||
unsigned long value = ID(OIL_SENSOR) | TEMP(200) | TYPE(SensorType::GENERIC) | VCC(2847L);
|
unsigned long value = ID(OIL_SENSOR) | TEMP(200) | TYPE(SensorType::GENERIC) | VCC(2847L);
|
||||||
TEST_ASSERT_EQUAL(true, buildSensorJson(value, jsonDoc));
|
TEST_ASSERT_TRUE(buildSensorJson(value, jsonDoc));
|
||||||
|
|
||||||
JsonObject sensor = jsonDoc["sensor"];
|
JsonObject sensor = jsonDoc["sensor"];
|
||||||
TEST_ASSERT_EQUAL(OIL_SENSOR, sensor["id"]);
|
TEST_ASSERT_EQUAL(OIL_SENSOR, sensor["id"]);
|
||||||
@ -106,6 +106,29 @@ void test_oil_sensor_with_voltage(void) {
|
|||||||
TEST_ASSERT_EQUAL(2.847, diagnostic["voltage"]);
|
TEST_ASSERT_EQUAL(2.847, diagnostic["voltage"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void test_presence_sensor(void) {
|
||||||
|
StaticJsonDocument<200> jsonDoc;
|
||||||
|
unsigned long value = ID(PRESENCE_SENSOR) | STATE(1) | TYPE(SensorType::CONTACT);
|
||||||
|
TEST_ASSERT_TRUE(buildSensorJson(value, jsonDoc));
|
||||||
|
|
||||||
|
JsonObject sensor = jsonDoc["sensor"];
|
||||||
|
TEST_ASSERT_EQUAL(PRESENCE_SENSOR, sensor["id"]);
|
||||||
|
TEST_ASSERT_EQUAL_STRING("ON", sensor["state"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_presence_sensor_with_voltage(void) {
|
||||||
|
StaticJsonDocument<200> jsonDoc;
|
||||||
|
unsigned long value = ID(PRESENCE_SENSOR) | STATE(0) | TYPE(SensorType::CONTACT) | VCC(3847L);
|
||||||
|
TEST_ASSERT_TRUE(buildSensorJson(value, jsonDoc));
|
||||||
|
|
||||||
|
JsonObject sensor = jsonDoc["sensor"];
|
||||||
|
TEST_ASSERT_EQUAL(PRESENCE_SENSOR, sensor["id"]);
|
||||||
|
TEST_ASSERT_EQUAL_STRING("OFF", sensor["state"]);
|
||||||
|
|
||||||
|
JsonObject diagnostic = sensor["diagnostic"];
|
||||||
|
TEST_ASSERT_EQUAL(3.847, diagnostic["voltage"]);
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
UNITY_BEGIN();
|
UNITY_BEGIN();
|
||||||
RUN_TEST(test_unknown_sensor_type);
|
RUN_TEST(test_unknown_sensor_type);
|
||||||
@ -118,6 +141,8 @@ int main(int argc, char **argv) {
|
|||||||
RUN_TEST(test_temp_sensor_with_voltage);
|
RUN_TEST(test_temp_sensor_with_voltage);
|
||||||
RUN_TEST(test_oil_sensor);
|
RUN_TEST(test_oil_sensor);
|
||||||
RUN_TEST(test_oil_sensor_with_voltage);
|
RUN_TEST(test_oil_sensor_with_voltage);
|
||||||
|
RUN_TEST(test_presence_sensor);
|
||||||
|
RUN_TEST(test_presence_sensor_with_voltage);
|
||||||
UNITY_END();
|
UNITY_END();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user