From c6b6d1802503f0d413db3d83a719a8046cb231b4 Mon Sep 17 00:00:00 2001 From: Dawid Chyrzynski Date: Sun, 20 Dec 2020 12:46:04 +0100 Subject: [PATCH] fix compilation errors --- library.properties | 2 +- src/HAMqtt.cpp | 8 ++++---- src/HAMqtt.h | 19 +++++++++++++++++++ src/device-types/BaseDeviceType.h | 2 +- src/device-types/HASwitch.cpp | 4 ++-- src/device-types/HASwitch.h | 2 +- src/device-types/HATriggers.cpp | 6 +++--- src/device-types/HATriggers.h | 4 ++-- 8 files changed, 33 insertions(+), 14 deletions(-) diff --git a/library.properties b/library.properties index 817ebd1..cd5617c 100644 --- a/library.properties +++ b/library.properties @@ -6,5 +6,5 @@ sentence=Home Assistant MQTT integration for Arduino paragraph=Lightweight library that provides easy to use API for integrating your Arduin-based device with Home Assistant. category=Communication url=https://github.com/dawidchyrzynski/arduino-home-assistant -architectures=avr +architectures=* depends=PubSubClient diff --git a/src/HAMqtt.cpp b/src/HAMqtt.cpp index b905e5e..6d4b6c1 100644 --- a/src/HAMqtt.cpp +++ b/src/HAMqtt.cpp @@ -22,7 +22,7 @@ _devicesTypes(nullptr) static const char* DefaultDiscoveryPrefix = "homeassistant"; -HAMqtt* instance = nullptr; +static HAMqtt* instance = nullptr; void onMessageReceived(char* topic, uint8_t* payload, uint16_t length) { @@ -128,7 +128,7 @@ bool HAMqtt::publish(const char* topic, const char* payload, bool retained) #endif _mqtt->beginPublish(topic, strlen(payload), retained); - _mqtt->write(payload, strlen(payload)); + _mqtt->write((const uint8_t*)(payload), strlen(payload)); return _mqtt->endPublish(); } @@ -151,7 +151,7 @@ bool HAMqtt::beginPublish( bool HAMqtt::writePayload(const char* data, uint16_t length) { - return (_mqtt->write(data, length) > 0); + return (_mqtt->write((const uint8_t*)(data), length) > 0); } bool HAMqtt::writePayload_P(const char* src) @@ -159,7 +159,7 @@ bool HAMqtt::writePayload_P(const char* src) char data[strlen_P(src) + 1]; strcpy_P(data, src); - return _mqtt->write(data, strlen(data)); + return _mqtt->write((const uint8_t*)(data), strlen(data)); } bool HAMqtt::endPublish() diff --git a/src/HAMqtt.h b/src/HAMqtt.h index e8195a2..22bd902 100644 --- a/src/HAMqtt.h +++ b/src/HAMqtt.h @@ -88,7 +88,26 @@ public: bool writePayload(const char* data, uint16_t length); bool writePayload_P(const char* src); bool endPublish(); + + /** + * Subscribes to the given topic. + * Whenever a new message is received the onMqttMessage callback in all + * devices types is called. + * + * Please note that you need to subscribe topic each time the connection + * with the broker is acquired. + * + * @param topic Topic to subscribe + */ bool subscribe(const char* topic); + + /** + * Processes MQTT message received from the broker (subscription). + * + * @param topic Topic of the message. + * @param payload Content of the message. + * @param length Length of the message. + */ void processMessage(char* topic, uint8_t* payload, uint16_t length); private: diff --git a/src/device-types/BaseDeviceType.h b/src/device-types/BaseDeviceType.h index 2805d9c..3a56d32 100644 --- a/src/device-types/BaseDeviceType.h +++ b/src/device-types/BaseDeviceType.h @@ -17,7 +17,7 @@ public: virtual void onMqttConnected() = 0; virtual void onMqttMessage( const char* topic, - const char* payload, + const uint8_t* payload, const uint16_t& length ) { }; diff --git a/src/device-types/HASwitch.cpp b/src/device-types/HASwitch.cpp index b3b8f34..0cf9ca7 100644 --- a/src/device-types/HASwitch.cpp +++ b/src/device-types/HASwitch.cpp @@ -38,7 +38,7 @@ void HASwitch::onMqttConnected() void HASwitch::onMqttMessage( const char* topic, - const char* payload, + const uint8_t* payload, const uint16_t& length ) { @@ -56,7 +56,7 @@ void HASwitch::onMqttMessage( strcat(suffix, CommandTopic); if (HAUtils::endsWith(topic, suffix)) { - bool onState = (strncmp(payload, StateOn, length) == 0); + bool onState = (length == strlen(StateOn)); setState(onState); } } diff --git a/src/device-types/HASwitch.h b/src/device-types/HASwitch.h index ab84a0d..56b20f7 100644 --- a/src/device-types/HASwitch.h +++ b/src/device-types/HASwitch.h @@ -33,7 +33,7 @@ public: */ virtual void onMqttMessage( const char* topic, - const char* payload, + const uint8_t* payload, const uint16_t& length ) override; diff --git a/src/device-types/HATriggers.cpp b/src/device-types/HATriggers.cpp index ec1c785..7c1a3c8 100644 --- a/src/device-types/HATriggers.cpp +++ b/src/device-types/HATriggers.cpp @@ -31,7 +31,7 @@ bool HATriggers::add(const char* type, const char* subtype) return false; } - HATrigger* triggers = realloc(_triggers, sizeof(HATrigger) * (_triggersNb + 1)); + HATrigger* triggers = (HATrigger*)realloc(_triggers, sizeof(HATrigger) * (_triggersNb + 1)); if (triggers == nullptr) { return false; } @@ -133,7 +133,7 @@ void HATriggers::publishConfig() uint16_t HATriggers::calculateTopicLength( const char* component, - HATrigger *trigger, + const HATrigger *trigger, const char* suffix, bool includeNullTerminator ) const @@ -150,7 +150,7 @@ uint16_t HATriggers::calculateTopicLength( uint16_t HATriggers::generateTopic( char* output, const char* component, - HATrigger *trigger, + const HATrigger *trigger, const char* suffix ) const { diff --git a/src/device-types/HATriggers.h b/src/device-types/HATriggers.h index bf6401e..8600f63 100644 --- a/src/device-types/HATriggers.h +++ b/src/device-types/HATriggers.h @@ -22,7 +22,7 @@ public: protected: uint16_t calculateTopicLength( const char* component, - HATrigger *trigger, + const HATrigger *trigger, const char* suffix, bool includeNullTerminator = true ) const; @@ -30,7 +30,7 @@ protected: uint16_t generateTopic( char* output, const char* component, - HATrigger *trigger, + const HATrigger *trigger, const char* suffix ) const;