first draft to publish HA config
This commit is contained in:
parent
65a14ba679
commit
55b5aa2a33
@ -5,7 +5,6 @@ namespace Bmp {
|
|||||||
Adafruit_BMP280 bmp; // I2C Interface
|
Adafruit_BMP280 bmp; // I2C Interface
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
const char* topic = "esp_clock/sensor/bmp280/data";
|
|
||||||
float temp;
|
float temp;
|
||||||
float pressure;
|
float pressure;
|
||||||
float altitude;
|
float altitude;
|
||||||
|
|||||||
@ -1,13 +1,16 @@
|
|||||||
#include <queue>
|
#include <queue>
|
||||||
#include <AsyncMqttClient.h>
|
#include <AsyncMqttClient.h>
|
||||||
|
#include <ArduinoJson.h>
|
||||||
|
|
||||||
#define MQTT_HOST IPAddress(192, 168, 5, 138)
|
#define MQTT_HOST IPAddress(192, 168, 5, 138)
|
||||||
#define MQTT_PORT 1883
|
#define MQTT_PORT 1883
|
||||||
|
|
||||||
namespace Mqtt {
|
namespace Mqtt {
|
||||||
|
|
||||||
|
void publishConfig();
|
||||||
void publishCommand();
|
void publishCommand();
|
||||||
void publishBmp280();
|
void publishBmp280();
|
||||||
|
Task tPublishConfig(TASK_IMMEDIATE, TASK_ONCE, publishConfig, &ts);
|
||||||
Task tPublish(TASK_SECOND, TASK_FOREVER, publishCommand, &ts);
|
Task tPublish(TASK_SECOND, TASK_FOREVER, publishCommand, &ts);
|
||||||
Task tPublishBmp(5 * TASK_MINUTE, TASK_FOREVER, publishBmp280, &ts);
|
Task tPublishBmp(5 * TASK_MINUTE, TASK_FOREVER, publishBmp280, &ts);
|
||||||
|
|
||||||
@ -27,7 +30,39 @@ namespace Mqtt {
|
|||||||
}
|
}
|
||||||
} commands;
|
} commands;
|
||||||
|
|
||||||
const char* bmpTopic = "esp_clock/sensor/bmp280/data";
|
const char* bmpTopic = "homeassistant/sensor/esp_clock/state";
|
||||||
|
|
||||||
|
void publishConfig() {
|
||||||
|
StaticJsonDocument<255> jsonDoc;
|
||||||
|
JsonObject device = jsonDoc.createNestedObject("device");
|
||||||
|
device["name"] = "ESP Clock";
|
||||||
|
|
||||||
|
JsonObject sensor = jsonDoc.createNestedObject("sensor");
|
||||||
|
sensor["device_class"] = "temperature";
|
||||||
|
sensor["name"] = "Livingroom Temperature";
|
||||||
|
sensor["unique_id"] = "livingroom_temperature";
|
||||||
|
sensor["unit_of_measurement"] = "°C";
|
||||||
|
sensor["state_topic"] = bmpTopic;
|
||||||
|
sensor["value_template"] = "{{ value_json.temperature}}";
|
||||||
|
sensor["device"] = device;
|
||||||
|
char message[255];
|
||||||
|
serializeJson(jsonDoc, message);
|
||||||
|
client.publish("homeassistant/sensor/esp_clock_temperature/config", 0, false, message);
|
||||||
|
|
||||||
|
jsonDoc.clear();
|
||||||
|
sensor.clear();
|
||||||
|
sensor = jsonDoc.createNestedObject("sensor");
|
||||||
|
sensor["device_class"] = "pressure";
|
||||||
|
sensor["name"] = "Livingroom Pressure";
|
||||||
|
sensor["unique_id"] = "livingroom_pressure";
|
||||||
|
sensor["unit_of_measurement"] = "hPa";
|
||||||
|
sensor["state_topic"] = bmpTopic;
|
||||||
|
sensor["value_template"] = "{{ value_json.pressure}}";
|
||||||
|
sensor["device"] = device;
|
||||||
|
char message1[255];
|
||||||
|
serializeJson(jsonDoc, message);
|
||||||
|
client.publish("homeassistant/sensor/esp_clock_pressure/config", 0, false, message1);
|
||||||
|
}
|
||||||
|
|
||||||
void publishCommand() {
|
void publishCommand() {
|
||||||
if (uint8_t cmd = commands.getCurrent()) {
|
if (uint8_t cmd = commands.getCurrent()) {
|
||||||
@ -43,13 +78,18 @@ namespace Mqtt {
|
|||||||
|
|
||||||
void publishBmp280() {
|
void publishBmp280() {
|
||||||
Bmp::data.readAll();
|
Bmp::data.readAll();
|
||||||
|
StaticJsonDocument<255> jsonDoc;
|
||||||
|
JsonObject sensor = jsonDoc.createNestedObject("sensor");
|
||||||
|
sensor["temperature"] = Bmp::data.temp;
|
||||||
|
sensor["pressure"] = Bmp::data.pressure;
|
||||||
char message[255];
|
char message[255];
|
||||||
sprintf(message, "{\"temperature\":%.2f, \"pressure\":%.2f, \"altitude\": %.2f}", Bmp::data.temp, Bmp::data.pressure, Bmp::data.altitude);
|
serializeJson(jsonDoc, message);
|
||||||
client.publish(bmpTopic, 0, true, message);
|
client.publish(bmpTopic, 0, false, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
client.onConnect([](bool sessionPresent) {
|
client.onConnect([](bool sessionPresent) {
|
||||||
|
tPublishConfig.enable();
|
||||||
tPublish.enableDelayed();
|
tPublish.enableDelayed();
|
||||||
tPublishBmp.enable();
|
tPublishBmp.enable();
|
||||||
Serial.println("Connected to MQTT");
|
Serial.println("Connected to MQTT");
|
||||||
|
|||||||
@ -23,6 +23,7 @@ lib_deps =
|
|||||||
arkhipenko/TaskScheduler@^3.4.0
|
arkhipenko/TaskScheduler@^3.4.0
|
||||||
adafruit/Adafruit Unified Sensor @ ^1.1.4
|
adafruit/Adafruit Unified Sensor @ ^1.1.4
|
||||||
adafruit/Adafruit BMP280 Library@^2.5.0
|
adafruit/Adafruit BMP280 Library@^2.5.0
|
||||||
|
bblanchon/ArduinoJson@6.16.1
|
||||||
build_flags = -D IR=0 -D WIFI_ALWAYS_ON=1
|
build_flags = -D IR=0 -D WIFI_ALWAYS_ON=1
|
||||||
|
|
||||||
[env:laptop_home]
|
[env:laptop_home]
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user