control led over mqtt
This commit is contained in:
parent
2b5fa8249e
commit
949b4f40d1
@ -76,4 +76,13 @@ namespace Ha {
|
|||||||
jsonDoc["command_topic"] = topic;
|
jsonDoc["command_topic"] = topic;
|
||||||
serializeJson(jsonDoc, output);
|
serializeJson(jsonDoc, output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void buildLedConfig(char(&output)[JSON_SIZE], const char* topic) {
|
||||||
|
StaticJsonDocument<JSON_SIZE> jsonDoc;
|
||||||
|
buildDeviceConfig(jsonDoc);
|
||||||
|
jsonDoc["name"] = "ESP Clock Led";
|
||||||
|
jsonDoc["unique_id"] = "esp_clock_led";
|
||||||
|
jsonDoc["command_topic"] = topic;
|
||||||
|
serializeJson(jsonDoc, output);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -36,30 +36,33 @@ namespace Mqtt {
|
|||||||
|
|
||||||
const char* bmpTopic = "homeassistant/sensor/esp_clock/state";
|
const char* bmpTopic = "homeassistant/sensor/esp_clock/state";
|
||||||
const char* restartTopic = "homeassistant/button/esp_clock/restart";
|
const char* restartTopic = "homeassistant/button/esp_clock/restart";
|
||||||
|
const char* ledTopic = "homeassistant/switch/esp_clock/led/set";
|
||||||
|
const char* espClockTopic = "homeassistant/+/esp_clock/#";
|
||||||
|
|
||||||
void connect() {
|
void connect() {
|
||||||
client.connect();
|
client.connect();
|
||||||
}
|
}
|
||||||
|
|
||||||
void disconnect() {
|
void disconnect() {
|
||||||
|
client.unsubscribe(espClockTopic);
|
||||||
client.disconnect();
|
client.disconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
void publishTempConfig() {
|
void publishTempConfig() {
|
||||||
char message[JSON_SIZE];
|
char message[JSON_SIZE];
|
||||||
Ha::buildSensorConfig(message, Ha::TemperatureConfig{"Living room Temperature", "living_room_temperature", bmpTopic});
|
Ha::buildSensorConfig(message, Ha::TemperatureConfig{ "Living room Temperature", "living_room_temperature", bmpTopic });
|
||||||
client.publish("homeassistant/sensor/esp_clock/temperature/config", 0, true, message);
|
client.publish("homeassistant/sensor/esp_clock/temperature/config", 0, true, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
void publishPressureConfig() {
|
void publishPressureConfig() {
|
||||||
char message[JSON_SIZE];
|
char message[JSON_SIZE];
|
||||||
Ha::buildSensorConfig(message, Ha::PressureConfig{"Living room Pressure", "living_room_pressure", bmpTopic});
|
Ha::buildSensorConfig(message, Ha::PressureConfig{ "Living room Pressure", "living_room_pressure", bmpTopic });
|
||||||
client.publish("homeassistant/sensor/esp_clock/pressure/config", 0, true, message);
|
client.publish("homeassistant/sensor/esp_clock/pressure/config", 0, true, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
void publishAltitudeConfig() {
|
void publishAltitudeConfig() {
|
||||||
char message[JSON_SIZE];
|
char message[JSON_SIZE];
|
||||||
Ha::buildSensorConfig(message, Ha::AltitudeConfig{"Living room Altitude", "living_room_altitude", bmpTopic});
|
Ha::buildSensorConfig(message, Ha::AltitudeConfig{ "Living room Altitude", "living_room_altitude", bmpTopic });
|
||||||
client.publish("homeassistant/sensor/esp_clock/altitude/config", 0, true, message);
|
client.publish("homeassistant/sensor/esp_clock/altitude/config", 0, true, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,12 +72,18 @@ namespace Mqtt {
|
|||||||
client.publish("homeassistant/button/esp_clock/restart/config", 0, true, message);
|
client.publish("homeassistant/button/esp_clock/restart/config", 0, true, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void publishLedConfig() {
|
||||||
|
char message[JSON_SIZE];
|
||||||
|
Ha::buildLedConfig(message, ledTopic);
|
||||||
|
client.publish("homeassistant/switch/esp_clock/led/config", 0, true, message);
|
||||||
|
}
|
||||||
|
|
||||||
void publishConfig() {
|
void publishConfig() {
|
||||||
publishTempConfig();
|
publishTempConfig();
|
||||||
publishPressureConfig();
|
publishPressureConfig();
|
||||||
publishAltitudeConfig();
|
publishAltitudeConfig();
|
||||||
publishRestartConfig();
|
publishRestartConfig();
|
||||||
client.subscribe(restartTopic, 0);
|
publishLedConfig();
|
||||||
ts.deleteTask(tPublishConfig);
|
ts.deleteTask(tPublishConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -102,9 +111,19 @@ namespace Mqtt {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void onMessage(char* topic, char* payload, AsyncMqttClientMessageProperties properties, size_t len, size_t index, size_t total) {
|
void onMessage(char* topic, char* payload, AsyncMqttClientMessageProperties properties, size_t len, size_t index, size_t total) {
|
||||||
if (String{ restartTopic }.equals(topic) && String { payload }.equals("PRESS")) {
|
char msg[len + 1];
|
||||||
|
memcpy(msg, payload, len);
|
||||||
|
msg[len] = 0;
|
||||||
|
if (String{ restartTopic }.equals(topic) && String { "PRESS" }.equals(msg)) {
|
||||||
ESP.restart();
|
ESP.restart();
|
||||||
}
|
}
|
||||||
|
if (String{ ledTopic }.equals(topic)) {
|
||||||
|
if (String{ "ON" }.equals(msg)) {
|
||||||
|
digitalWrite(LED_BUILTIN, LOW);
|
||||||
|
} else {
|
||||||
|
digitalWrite(LED_BUILTIN, HIGH);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
@ -112,6 +131,7 @@ namespace Mqtt {
|
|||||||
tPublishConfig.enable();
|
tPublishConfig.enable();
|
||||||
tPublishBmp.enableIfNot();
|
tPublishBmp.enableIfNot();
|
||||||
tPublishCommand.enableDelayed();
|
tPublishCommand.enableDelayed();
|
||||||
|
client.subscribe(espClockTopic, 0);
|
||||||
tReConnect.disable();
|
tReConnect.disable();
|
||||||
Serial.println("Connected to MQTT");
|
Serial.println("Connected to MQTT");
|
||||||
});
|
});
|
||||||
|
|||||||
@ -18,7 +18,7 @@ lib_deps =
|
|||||||
adafruit/Adafruit GFX Library@^1.10.12
|
adafruit/Adafruit GFX Library@^1.10.12
|
||||||
adafruit/Adafruit BusIO@^1.9.8
|
adafruit/Adafruit BusIO@^1.9.8
|
||||||
jchristensen/Timezone@^1.2.4
|
jchristensen/Timezone@^1.2.4
|
||||||
ottowinter/AsyncMqttClient-esphome@^0.8.5
|
marvinroger/AsyncMqttClient@^0.9.0
|
||||||
crankyoldgit/IRremoteESP8266@^2.7.18
|
crankyoldgit/IRremoteESP8266@^2.7.18
|
||||||
arkhipenko/TaskScheduler@^3.7.0
|
arkhipenko/TaskScheduler@^3.7.0
|
||||||
adafruit/Adafruit Unified Sensor @ ^1.1.4
|
adafruit/Adafruit Unified Sensor @ ^1.1.4
|
||||||
@ -29,7 +29,7 @@ build_flags = -D IR=0 -D WIFI_ALWAYS_ON=1
|
|||||||
[env:laptop_home]
|
[env:laptop_home]
|
||||||
|
|
||||||
[env:ota_home]
|
[env:ota_home]
|
||||||
upload_port = esp-clock
|
upload_port = 192.168.6.191
|
||||||
upload_protocol = espota
|
upload_protocol = espota
|
||||||
upload_flags =
|
upload_flags =
|
||||||
--host_port=10000
|
--host_port=10000
|
||||||
|
|||||||
@ -26,6 +26,9 @@ void setup() {
|
|||||||
|
|
||||||
Serial.begin(9600);
|
Serial.begin(9600);
|
||||||
|
|
||||||
|
pinMode(LED_BUILTIN, OUTPUT);
|
||||||
|
digitalWrite(LED_BUILTIN, HIGH);
|
||||||
|
|
||||||
Display::setup();
|
Display::setup();
|
||||||
Ota::setup();
|
Ota::setup();
|
||||||
Ntp::setup();
|
Ntp::setup();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user