From eace33902bb17d6f19916c049148e21c754cd14f Mon Sep 17 00:00:00 2001 From: Nicu Hodos Date: Thu, 2 May 2024 19:40:04 +0200 Subject: [PATCH] separate Ha generic components from gateway specific ones --- gateway/include/devices.h | 63 +++++++++++++++++++++++++++++++++++++++ gateway/include/ha.h | 58 ----------------------------------- gateway/include/mqtt.h | 14 ++++----- 3 files changed, 70 insertions(+), 65 deletions(-) create mode 100644 gateway/include/devices.h diff --git a/gateway/include/devices.h b/gateway/include/devices.h new file mode 100644 index 0000000..eeecfcf --- /dev/null +++ b/gateway/include/devices.h @@ -0,0 +1,63 @@ +#pragma once + +#include "ha.h" + +using namespace Ha; + +struct PollinSwitch : Switch { + const char* group; + unsigned char channel; + + PollinSwitch(const char* name, const char* group, const unsigned char channel) + : Switch(name, Protocol_1::buildId(group, channel)), group(group), channel(channel) { + sprintf(commandTopic, "homeassistant/%s/rc-gateway/%s/set", type, id); + } + + void onCommand(const char* msg) override { + (String{ "ON" }.equals(msg)) ? mySwitch.switchOn(group, channel) : mySwitch.switchOff(group, channel); + publisher(stateTopic, msg); + } + + void buildConfig(JsonDocument& jsonDoc) override { + Switch::buildConfig(jsonDoc); + JsonObject device = jsonDoc["device"]; + device["manufacturer"] = "Pollin"; + } + + void addToMap() override { + p1Switches.insert({ string(id), this }); + } + +}; + +struct EasyHomeSwitch : Switch { + unsigned long on[8] = { 4326554, 4537114, 4767530, 4972714 }; + unsigned long off[8] = { 4483146, 4626810, 4661562, 4819642 }; + + EasyHomeSwitch(const char* name, const char* id, unsigned long on[4], unsigned long off[4]) + : Switch(name, id) { + memcpy(&this->on[4], on, 4 * sizeof(unsigned long)); + memcpy(&this->off[4], off, 4 * sizeof(unsigned long)); + sprintf(commandTopic, "homeassistant/%s/rc-gateway/%s/set", type, id); + } + + void onCommand(const char* msg) override { + mySwitch.setProtocol(4); + String{ "ON" }.equals(msg) ? mySwitch.send(on[4], 24) : mySwitch.send(off[4], 24); + publisher(stateTopic, msg); + } + + void buildConfig(JsonDocument& jsonDoc) override { + Switch::buildConfig(jsonDoc); + JsonObject device = jsonDoc["device"]; + device["manufacturer"] = "Intertek"; + device["model"] = "Easy Home"; + } + + void addToMap() override { + for (int i = 0; i < 8; i++) { + onSwitches.insert({ on[i], this }); + offSwitches.insert({ off[i], this }); + } + } +}; diff --git a/gateway/include/ha.h b/gateway/include/ha.h index 500c12f..959d790 100644 --- a/gateway/include/ha.h +++ b/gateway/include/ha.h @@ -120,64 +120,6 @@ namespace Ha { } }; - struct PollinSwitch : Switch { - const char* group; - unsigned char channel; - - PollinSwitch(const char* name, const char* group, const unsigned char channel) - : Switch(name, Protocol_1::buildId(group, channel)), group(group), channel(channel) { - sprintf(commandTopic, "homeassistant/%s/rc-gateway/%s/set", type, id); - } - - void onCommand(const char* msg) override { - (String{ "ON" }.equals(msg)) ? mySwitch.switchOn(group, channel) : mySwitch.switchOff(group, channel); - publisher(stateTopic, msg); - } - - void buildConfig(JsonDocument& jsonDoc) override { - Switch::buildConfig(jsonDoc); - JsonObject device = jsonDoc["device"]; - device["manufacturer"] = "Pollin"; - } - - void addToMap() override { - p1Switches.insert({string(id), this}); - } - - }; - - struct EasyHomeSwitch : Switch { - unsigned long on[8] = {4326554, 4537114, 4767530, 4972714}; - unsigned long off[8] = {4483146, 4626810, 4661562, 4819642}; - - EasyHomeSwitch(const char* name, const char* id, unsigned long on[4], unsigned long off[4]) - : Switch(name, id) { - memcpy(&this->on[4], on, 4*sizeof(unsigned long)); - memcpy(&this->off[4], off, 4*sizeof(unsigned long)); - sprintf(commandTopic, "homeassistant/%s/rc-gateway/%s/set", type, id); - } - - void onCommand(const char* msg) override { - mySwitch.setProtocol(4); - String{ "ON" }.equals(msg) ? mySwitch.send(on[4], 24) : mySwitch.send(off[4], 24); - publisher(stateTopic, msg); - } - - void buildConfig(JsonDocument& jsonDoc) override { - Switch::buildConfig(jsonDoc); - JsonObject device = jsonDoc["device"]; - device["manufacturer"] = "Intertek"; - device["model"] = "Easy Home"; - } - - void addToMap() override { - for (int i = 0; i < 8; i++) { - onSwitches.insert({on[i], this}); - offSwitches.insert({off[i], this}); - } - } - }; - struct Sensor : Component { const char* deviceClass; const char* unitMeasure; diff --git a/gateway/include/mqtt.h b/gateway/include/mqtt.h index b97d3ab..418c2f0 100644 --- a/gateway/include/mqtt.h +++ b/gateway/include/mqtt.h @@ -2,7 +2,7 @@ #include #include -#include "ha.h" +#include "devices.h" #define MQTT_HOST IPAddress(192, 168, 5, 11) @@ -48,12 +48,12 @@ namespace Mqtt { }; Ha::Switch* switches[] = { - (new Ha::PollinSwitch{"Meeting sensor", "00001", 1})->withArea("Dining room")->withStateTopic(), - (new Ha::PollinSwitch{"Fire Tv", "00001", 2})->withArea("Living room")->withStateTopic(), - (new Ha::PollinSwitch{"Diningroom player", "00001", 3})->withArea("Dining room")->withStateTopic(), - (new Ha::PollinSwitch{"Train", "11111", 4})->withArea("Playroom")->withStateTopic(), - (new Ha::EasyHomeSwitch{"FritzBox", "easy_home_a", (unsigned long[4]) { 4483136, 4626800, 4661552, 4819632 }, (unsigned long[4]) { 4326544, 4537104, 4767520, 4972704 }})->withArea("Basement")->withStateTopic(), - (new Ha::EasyHomeSwitch{"Outside", "easy_home_b", (unsigned long[4]) { 4483140, 4626804, 4661556, 4819636 }, (unsigned long[4]) { 4326548, 4537108, 4767524, 4972708 }})->withArea("Basement")->withStateTopic() + (new PollinSwitch{"Meeting sensor", "00001", 1})->withArea("Dining room")->withStateTopic(), + (new PollinSwitch{"Fire Tv", "00001", 2})->withArea("Living room")->withStateTopic(), + (new PollinSwitch{"Diningroom player", "00001", 3})->withArea("Dining room")->withStateTopic(), + (new PollinSwitch{"Train", "11111", 4})->withArea("Playroom")->withStateTopic(), + (new EasyHomeSwitch{"FritzBox", "easy_home_a", (unsigned long[4]) { 4483136, 4626800, 4661552, 4819632 }, (unsigned long[4]) { 4326544, 4537104, 4767520, 4972704 }})->withArea("Basement")->withStateTopic(), + (new EasyHomeSwitch{"Outside", "easy_home_b", (unsigned long[4]) { 4483140, 4626804, 4661556, 4819636 }, (unsigned long[4]) { 4326548, 4537108, 4767524, 4972708 }})->withArea("Basement")->withStateTopic() }; void publishComponentConfig(Ha::Component& component) {