79class Mqtt :
public ProtocolLayer {
84 void onInit()
override;
85 bool onLoadConfig()
override;
86 bool verifyConfig()
override;
87 bool isEnabled()
override;
90 bool isNetworkRestartRequested()
override;
91 uint32_t getConnectionFailTime()
override;
92 bool isConnectionError()
override;
93 bool isConnecting()
override;
94 bool isMqtt()
const override;
95 void publish(
const char *topic,
99 bool ignorePrefix =
false);
100 void publishInt(
const char *topic,
104 void publishBool(
const char *topic,
108 void publishOnOff(
const char *topic,
bool payload,
int qos,
int retain);
109 void publishOpenClosed(
const char *topic,
bool payload,
int qos,
int retain);
110 void publishDouble(
const char *topic,
115 void publishColor(
const char *topic,
121 void publishChannelState(
int channel);
122 void publishExtendedChannelState(
int channel);
123 void subscribeChannel(
int channel);
124 void registerChannelHandler(MqttChannelHandler *handler);
125 void unregisterChannelHandler(MqttChannelHandler *handler);
126 const char *getPrefix()
const;
127 const char *getHostname()
const;
128 void subscribe(
const char *topic,
int qos = -1);
129 bool isUpdatePending()
override;
130 bool isRegisteredAndReady()
override;
131 void notifyConfigChange(
int channelNumber)
override;
133 void sendActionTrigger(uint8_t channelNumber, uint32_t actionId)
override;
134 void sendChannelValueChanged(uint8_t channelNumber, int8_t *value,
135 unsigned char offline, uint32_t validityTimeSec)
override;
136 void sendExtendedChannelValueChanged(uint8_t channelNumber,
139 bool processData(
const char *topic,
const char *payload);
140 void processRelayRequest(
const char *topic,
143 void processRGBWRequest(
const char *topic,
146 void processRGBRequest(
const char *topic,
149 void processDimmerRequest(
const char *topic,
152 void processRollerShutterRequest(
const char *topic,
157 void generateClientId(
char result[MQTT_CLIENTID_MAX_SIZE]);
158 void generateObjectId(
char result[30],
int channelNumber,
int subId);
159 MqttTopic getHADiscoveryTopic(
const char *sensor,
char *objectId);
160 void publishDeviceStatus(
bool onRegistration =
false);
161 void publishHADiscovery(
int channel);
177 void publishHADiscoveryEMParameter(
178 Supla::Element *element,
int parameterId,
const char *parameterName,
179 const char *units, Supla::Protocol::HAStateClass stateClass,
180 Supla::Protocol::HADeviceClass deviceClass);
181 const char *getActionTriggerType(uint8_t actionIdx);
182 bool isActionTriggerEnabled(
Supla::Channel *ch, uint8_t actionIdx);
183 virtual void publishImp(
const char *topic,
187 virtual void subscribeImp(
const char *topic,
int qos) = 0;
188 const char *getStateClassStr(Supla::Protocol::HAStateClass stateClass);
189 const char *getDeviceClassStr(Supla::Protocol::HADeviceClass deviceClass);
191 const char *getRelayChannelName(
int channelFunction)
const;
192 const char *getBinarySensorChannelName(
int channelFunction)
const;
194 bool isPayloadOn(
const char *);
195 bool isOpenClosedBinarySensorFunction(
int channelFunction)
const;
196 MqttChannelHandler *findChannelHandler(
int channelType)
const;
198 friend class HvacMqttHandler;
200 char server[SUPLA_SERVER_NAME_MAXSIZE] = {};
202 char user[MQTT_USERNAME_MAX_SIZE] = {};
203 char password[MQTT_PASSWORD_MAX_SIZE] = {};
204 char hostname[32] = {};
208 bool retainCfg =
false;
210 bool connecting =
false;
211 bool connected =
false;
213 uint16_t prefixLen = 0;
214 uint16_t channelsCount = 0;
215 uint16_t buttonNumber = 0;
216 char *prefix =
nullptr;
217 MqttChannelHandler *channelHandlers =
nullptr;
224 uint8_t configChangedBit[8] = {};