добавляет HALightBrightness
This commit is contained in:
@@ -1,32 +1,16 @@
|
||||
#include <HALight.hpp>
|
||||
|
||||
HALight::HALight(PubSubClient &client, const char *name, const char *unique_id)
|
||||
: HAControllableDevice(client, "light", name, unique_id) {}
|
||||
|
||||
HALight::HALight(PubSubClient &client, const char *name, const char *unique_id,
|
||||
HALightController &baseLight)
|
||||
: HAControllableDevice(client, "light", name, unique_id),
|
||||
light(&baseLight) {}
|
||||
|
||||
void HALight::sendState() {
|
||||
StaticJsonDocument<256> doc;
|
||||
|
||||
buffer[0] = '\0';
|
||||
|
||||
if (light->getState()) {
|
||||
doc["state"] = "ON";
|
||||
} else {
|
||||
doc["state"] = "OFF";
|
||||
}
|
||||
|
||||
serializeJson(doc, buffer, buffer_size);
|
||||
|
||||
Serial.println(state_topic);
|
||||
client.publish(state_topic, buffer, true);
|
||||
}
|
||||
|
||||
void HALight::sendConfig() {
|
||||
StaticJsonDocument<256> doc;
|
||||
|
||||
buffer[0] = '\0';
|
||||
|
||||
JSON_DOCUMENT_TYPE HALight::createConfigJSON() {
|
||||
JSON_DOCUMENT_TYPE doc;
|
||||
|
||||
doc["~"] = device_topic;
|
||||
doc["name"] = name;
|
||||
doc["unique_id"] = unique_id;
|
||||
@@ -34,6 +18,42 @@ void HALight::sendConfig() {
|
||||
doc["stat_t"] = "~/state";
|
||||
doc["schema"] = "json";
|
||||
|
||||
return doc;
|
||||
}
|
||||
|
||||
JSON_DOCUMENT_TYPE HALight::createStateJSON() {
|
||||
JSON_DOCUMENT_TYPE doc;
|
||||
|
||||
if (light->getState()) {
|
||||
doc["state"] = "ON";
|
||||
} else {
|
||||
doc["state"] = "OFF";
|
||||
}
|
||||
|
||||
return doc;
|
||||
}
|
||||
|
||||
void HALight::innerHanlder(JSON_DOCUMENT_TYPE &doc) {
|
||||
if (strcmp(doc["state"], "ON") == 0) {
|
||||
light->setState(true);
|
||||
} else {
|
||||
light->setState(false);
|
||||
}
|
||||
}
|
||||
|
||||
void HALight::sendState() {
|
||||
JSON_DOCUMENT_TYPE doc = createStateJSON();
|
||||
|
||||
buffer[0] = '\0';
|
||||
serializeJson(doc, buffer, buffer_size);
|
||||
|
||||
Serial.println(state_topic);
|
||||
client.publish(state_topic, buffer, true);
|
||||
}
|
||||
|
||||
void HALight::sendConfig() {
|
||||
JSON_DOCUMENT_TYPE doc = createConfigJSON();
|
||||
buffer[0] = '\0';
|
||||
serializeJson(doc, buffer, buffer_size);
|
||||
client.publish(config_topic, buffer, true);
|
||||
}
|
||||
@@ -42,14 +62,10 @@ void HALight::handle(char *topic, byte *payload, unsigned int length) {
|
||||
if (strcmp(topic, command_topic) != 0)
|
||||
return;
|
||||
|
||||
StaticJsonDocument<256> doc;
|
||||
JSON_DOCUMENT_TYPE doc;
|
||||
deserializeJson(doc, (const byte *)payload, length);
|
||||
|
||||
if (strcmp(doc["state"], "ON") == 0) {
|
||||
light->setState(true);
|
||||
} else {
|
||||
light->setState(false);
|
||||
}
|
||||
innerHanlder(doc);
|
||||
|
||||
sendState();
|
||||
}
|
@@ -8,10 +8,17 @@ public:
|
||||
virtual bool getState() = 0;
|
||||
};
|
||||
|
||||
#define JSON_DOCUMENT_TYPE StaticJsonDocument<256>
|
||||
|
||||
class HALight : public HAControllableDevice {
|
||||
private:
|
||||
HALightController *light;
|
||||
|
||||
protected:
|
||||
virtual JSON_DOCUMENT_TYPE createConfigJSON();
|
||||
virtual JSON_DOCUMENT_TYPE createStateJSON();
|
||||
virtual void innerHanlder(JSON_DOCUMENT_TYPE &doc);
|
||||
HALight(PubSubClient &client, const char *name, const char *unique_id);
|
||||
public:
|
||||
HALight(PubSubClient &client, const char *name, const char *unique_id,
|
||||
HALightController &baseLight);
|
||||
|
37
lib/HomeAssistantDevices/HALightBrightness.cpp
Normal file
37
lib/HomeAssistantDevices/HALightBrightness.cpp
Normal file
@@ -0,0 +1,37 @@
|
||||
#include <HALightBrightness.hpp>
|
||||
|
||||
|
||||
HALightBrightness::HALightBrightness(PubSubClient &client, const char *name, const char *unique_id,
|
||||
HALightBrightnessController &baseLight)
|
||||
: HALight(client, "light", name, baseLight),
|
||||
light(&baseLight) {}
|
||||
|
||||
|
||||
JSON_DOCUMENT_TYPE HALightBrightness::createConfigJSON() {
|
||||
JSON_DOCUMENT_TYPE doc = HALight::createConfigJSON();
|
||||
|
||||
doc["brightness"] = true;
|
||||
doc["brightness_scale"] = light->getBrightnessScale();
|
||||
// doc["color_mode"] = true;
|
||||
// doc["supported_color_modes"] =
|
||||
|
||||
// JSON_DOCUMENT_TYPE doc;
|
||||
return doc;
|
||||
}
|
||||
|
||||
JSON_DOCUMENT_TYPE HALightBrightness::createStateJSON() {
|
||||
JSON_DOCUMENT_TYPE doc = HALight::createStateJSON();
|
||||
|
||||
doc["brightness"] = light->getBrightness();
|
||||
|
||||
// JSON_DOCUMENT_TYPE doc;
|
||||
return doc;
|
||||
}
|
||||
|
||||
void HALightBrightness::innerHanlder(JSON_DOCUMENT_TYPE &doc) {
|
||||
if (doc.containsKey("brightness")) {
|
||||
light->setBrightness(doc["brightness"]);
|
||||
}
|
||||
delay(50);
|
||||
HALight::innerHanlder(doc);
|
||||
}
|
25
lib/HomeAssistantDevices/HALightBrightness.hpp
Normal file
25
lib/HomeAssistantDevices/HALightBrightness.hpp
Normal file
@@ -0,0 +1,25 @@
|
||||
#pragma once
|
||||
|
||||
#include <HALight.hpp>
|
||||
|
||||
class HALightBrightnessController: public HALightController {
|
||||
public:
|
||||
virtual void setBrightness(int value) = 0;
|
||||
virtual int getBrightness() = 0;
|
||||
|
||||
|
||||
virtual int getBrightnessScale() = 0;
|
||||
};
|
||||
|
||||
class HALightBrightness : public HALight {
|
||||
private:
|
||||
HALightBrightnessController *light;
|
||||
|
||||
protected:
|
||||
JSON_DOCUMENT_TYPE createConfigJSON();
|
||||
JSON_DOCUMENT_TYPE createStateJSON();
|
||||
void innerHanlder(JSON_DOCUMENT_TYPE &doc);
|
||||
public:
|
||||
HALightBrightness(PubSubClient &client, const char *name, const char *unique_id,
|
||||
HALightBrightnessController &baseLight);
|
||||
};
|
@@ -1,3 +1,4 @@
|
||||
#pragma once
|
||||
|
||||
#include <HALight.hpp>
|
||||
#include <HALight.hpp>
|
||||
#include <HALightBrightness.hpp>
|
Reference in New Issue
Block a user