From a7f571a5811f07378fad8ad10eb687a21d890086 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Tue, 25 Oct 2022 00:08:27 +0200 Subject: [PATCH] HASS: Move create of device object so separate method --- include/MqttHassPublishing.h | 2 ++ src/MqttHassPublishing.cpp | 26 +++++++++++++++++--------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/include/MqttHassPublishing.h b/include/MqttHassPublishing.h index 366f41c7..caa71e11 100644 --- a/include/MqttHassPublishing.h +++ b/include/MqttHassPublishing.h @@ -3,6 +3,7 @@ #include "Configuration.h" #include +#include #include #include @@ -59,6 +60,7 @@ public: private: void publishField(std::shared_ptr inv, uint8_t channel, byteAssign_fieldDeviceClass_t fieldType, bool clear = false); + void createDeviceInfo(JsonObject& object, std::shared_ptr inv); bool _wasConnected = false; bool _updateForced = false; diff --git a/src/MqttHassPublishing.cpp b/src/MqttHassPublishing.cpp index aaa50d9d..513f159f 100644 --- a/src/MqttHassPublishing.cpp +++ b/src/MqttHassPublishing.cpp @@ -3,7 +3,6 @@ * Copyright (C) 2022 Thomas Basler and others */ #include "MqttHassPublishing.h" -#include "ArduinoJson.h" #include "MqttPublishing.h" #include "MqttSettings.h" #include "NetworkSettings.h" @@ -102,13 +101,8 @@ void MqttHassPublishingClass::publishField(std::shared_ptr inv } DynamicJsonDocument deviceDoc(512); - deviceDoc[F("name")] = inv->name(); - deviceDoc[F("ids")] = String(serial); - deviceDoc[F("cu")] = String(F("http://")) + String(WiFi.localIP().toString()); - deviceDoc[F("mf")] = F("OpenDTU"); - deviceDoc[F("mdl")] = inv->typeName(); - deviceDoc[F("sw")] = AUTO_GIT_HASH; JsonObject deviceObj = deviceDoc.as(); + createDeviceInfo(deviceObj, inv); DynamicJsonDocument root(1024); root[F("name")] = name; @@ -129,8 +123,22 @@ void MqttHassPublishingClass::publishField(std::shared_ptr inv char buffer[512]; serializeJson(root, buffer); MqttSettings.publishHass(configTopic, buffer); - } - else { + } else { MqttSettings.publishHass(configTopic, ""); } +} + +void MqttHassPublishingClass::createDeviceInfo(JsonObject& object, std::shared_ptr inv) +{ + char serial[sizeof(uint64_t) * 8 + 1]; + snprintf(serial, sizeof(serial), "%0x%08x", + ((uint32_t)((inv->serial() >> 32) & 0xFFFFFFFF)), + ((uint32_t)(inv->serial() & 0xFFFFFFFF))); + + object[F("name")] = inv->name(); + object[F("ids")] = String(serial); + object[F("cu")] = String(F("http://")) + String(WiFi.localIP().toString()); + object[F("mf")] = F("OpenDTU"); + object[F("mdl")] = inv->typeName(); + object[F("sw")] = AUTO_GIT_HASH; } \ No newline at end of file