JBWOPR
Loading...
Searching...
No Matches
jbwoprmqtt.h
Go to the documentation of this file.
1
9#ifndef ARDUINO_WOPR_JBWOPRMQTT_H
10#define ARDUINO_WOPR_JBWOPRMQTT_H
11
12#include "jbwoprwifi.h"
13#include <PubSubClient.h> // https://github.com/knolleary/pubsubclient
14#include <WiFiManager.h>
15#include <JBLogger.h>
17
18#define DEFAULT_MQTT_PREFIX "wopr"
19#define DEFAULT_MQTT_PORT 1883
20
21// ====================================================================
22//
23// W.O.P.R. device with WiFiManager and MQTT support
24//
25// ====================================================================
28 bool useMqtt;
29 std::string mqttServerName;
30 uint16_t mqttServerPort;
31 std::string mqttUserName;
32 std::string mqttPassword;
33 std::string mqttPrefix;
34};
35
39public:
40 // ====================================================================
41 // General
42 //
45
52 bool begin(JBWoprBoardVariant variant) override;
53
60 bool begin(JBWoprBoardVariant variant, JBWoprBoardPins pins) override;
61
65 void loop() override;
66
67 // ====================================================================
68 // Logger
69 //
74 void setLogLevel(LogLevel level) override;
75
79 LogLevel getLogLevel() override;
80
81 // ====================================================================
82 // MQTT
83 //
91 bool mqttPublishMessage(const std::string& topic, JsonDocument &jsonDoc, bool retain = false);
92
100 bool mqttPublishMessage(const std::string& topic, const std::string& value, bool retain = false);
101
109 bool mqttPublishMessage(const char* topic, const char* value, bool retain = false);
110
111 // ====================================================================
112 // Effects
113 //
116 void effectsStartCurrentEffect() override;
117
120 virtual void effectsStopCurrentEffect();
121
126 void effectsStartEffect(JBWoprEffectBase* effect) override;
127
132 void effectsStartEffect(const std::string& effect) override;
133
138 void effectsStartEffect(const char* effect) override;
139
140 // ====================================================================
141 // Display
142 //
148 void displaySetState(bool state) override;
149
154 void displayClear() override;
155
161 void displaySetBrightness(uint8_t val) override;
162
169 void displayShowText(const char* text, JBTextAlignment alignment) override;
170
177 void displayShowText(const std::string& text, JBTextAlignment alignment) override;
178
185 void displayShowText(const String& text, JBTextAlignment alignment) override;
186
192 void displayShowText(const char* text) override;
193
199 void displayShowText(const std::string& text) override;
200
206 void displayShowText(const String& text) override;
207
216 void displayScrollText(const char* text, uint16_t delay_ms) override;
217
226 void displayScrollText(const std::string& text, uint16_t delay_ms) override;
227
236 void displayScrollText(const String& text, uint16_t delay_ms) override;
237
246 virtual void displayScrollText(const char* text);
247
256 virtual void displayScrollText(const std::string& text);
257
266 virtual void displayScrollText(const String& text);
267
268 // ====================================================================
269 // Defcon
270 //
276 void defconLedsSetState(bool state) override;
277
283 void defconLedsSetDefconLevel(JBDefconLevel level) override;
284
290 void defconLedsSetColor(uint32_t color) override;
291
297 void defconLedsSetBrightness(uint8_t brightness) override;
298
305 void defconLedSetColor(JBDefconLevel level, uint32_t color);
306
307protected:
308 // ====================================================================
309 // Configuration
310 //
312
313 const char* JSON_KEY_MQTT_USE_MQTT = "useMqtt";
314 const char* JSON_KEY_MQTT_SERVER_NAME = "mqttServerName";
315 const char* JSON_KEY_MQTT_SERVER_PORT = "mqttServerPort";
316 const char* JSON_KEY_MQTT_USER_NAME = "mqttUserName";
317 const char* JSON_KEY_MQTT_PASSWORD = "mqttPassword";
318 const char* JSON_KEY_CONF_MQTT_PREFIX = "mqttPrefix";
319
323 void _setConfigFromJsonDocument(const JsonDocument &jsonDoc);
324
328 void _setJsonDocumentFromConfig(JsonDocument &jsonDoc);
329
333 void _dumpConfig() override;
334
335 // ====================================================================
336 // WiFi
337 //
338 WiFiClient _wifiClient;
339
340 const char* HTML_MQTT_TITLE = "<h2>MQTT settings</h2>";
342
343 // WifiManager parameters
344 WiFiManagerParameter* _mqttTitleParam;
345 WiFiManagerParameter* _useMqttParam;
346 WiFiManagerParameter* _mqttServerNameParam;
347 WiFiManagerParameter* _mqttServerPortParam;
348 WiFiManagerParameter* _mqttUserNameParam;
349 WiFiManagerParameter* _mqttPasswordParam;
350 WiFiManagerParameter* _mqttPrefixParam;
351 WiFiManagerParameter* _break2Param;
352
356 void _setupWiFiManager() override;
357
362 void _saveParamsCallback() override;
363
364 // ====================================================================
365 // MQTT
366 //
367 PubSubClient* _mqttClient;
368 bool _mqttActive = false;
369
370 const char* ENTITY_NAME_DEVICE = "device";
371 const char* ENTITY_NAME_CONFIG = "config";
372 const char* ENTITY_NAME_EFFECT = "effect";
373 const char* ENTITY_NAME_DISPLAY = "display";
374 const char* ENTITY_NAME_DEFCON = "defcon";
375 const char* ENTITY_NAME_BUTTON_FRONT_LEFT = "button_front_left";
376 const char* ENTITY_NAME_BUTTON_FRONT_RIGHT = "button_front_right";
377 const char* ENTITY_NAME_BUTTON_BACK_TOP = "button_back_top";
378 const char* ENTITY_NAME_BUTTON_BACK_BOTTOM = "button_back_bottom";
379
380 const char* SUBENTITY_NAME_STATE = "state";
381 const char* SUBENTITY_NAME_BRIGHTNESS = "brightness";
382 const char* SUBENTITY_NAME_COLOR = "color";
383 const char* SUBENTITY_NAME_TEXT = "text";
384 const char* SUBENTITY_NAME_SCROLLTEXT = "scrolltext";
385 const char* SUBENTITY_NAME_EVENT = "event";
386 const char* SUBENTITY_NAME_LEVEL = "level";
387 const char* SUBENTITY_NAME_NAME = "name";
388 const char* SUBENTITY_NAME_EFFECTS_TIMEOUT = "effects_timeout";
389 const char* SUBENTITY_NAME_TIME_FORMAT = "time_format";
390 const char* SUBENTITY_NAME_DATE_FORMAT = "date_format";
391 const char* SUBENTITY_NAME_DEFCON_BRIGHTNESS = "defcon_brightness";
392 const char* SUBENTITY_NAME_DISPLAY_BRIGHTNESS = "display_brightness";
393 const char* SUBENTITY_NAME_WIFI_HOST_NAME = "host_name";
394 const char* SUBENTITY_NAME_WIFI_USE_WEB_PORTAL = "use_web_portal";
395
396 const char* STATE_ON = "ON";
397 const char* STATE_OFF = "OFF";
398
399 const char* EVENT_CLICK = "click";
400 const char* EVENT_DOUBLE_CLICK = "double_click";
401
402 const char* COMMAND_SET = "set";
403
408 bool _mqttStart();
409
413 void _mqttStop();
414
419 bool _mqttReconnect();
420
424 virtual bool _onMqttConnect();
425
433 void _mqttCallback(const char* topic, const byte* payload, unsigned int length);
434
442 virtual void _handleCommand(const std::string& entity, const std::string& subEntity, const std::string& command, const std::string& payload);
443
450 virtual void _handleDeviceCommand(const std::string& subEntity, const std::string& command, const std::string& payload);
451
458 virtual void _handleConfigCommand(const std::string& subEntity, const std::string& command, const std::string& payload);
459
466 virtual void _handleEffectCommand(const std::string& subEntity, const std::string& command, const std::string& payload);
467
474 virtual void _handleDisplayCommand(const std::string& subEntity, const std::string& command, const std::string& payload);
475
482 virtual void _handleDefconCommand(const std::string& subEntity, const std::string& command, const std::string& payload);
483
489 virtual std::string _getTopic(const char * entityId, const char* subEntityId);
490
496 virtual std::string _getTopic(const std::string& entityId, const std::string& subEntityId);
497
501 virtual std::string _getSubscriptionTopic();
502
506 virtual std::string _getAvailabilityTopic();
507
508 // ====================================================================
509 // Buttons
510 //
513 void _buttonFrontLeftClick() override;
514
517 void _buttonFrontLeftDoubleClick() override;
518
521 void _buttonFrontRightClick() override;
522
525 void _buttonFrontRightDoubleClick() override;
526
529 void _buttonBackTopClick() override;
530
533 void _buttonBackTopDoubleClick() override;
534
537 void _buttonBackBottomClick() override;
538
541 void _buttonBackBottomDoubleClick() override;
542
543private:
544 // ====================================================================
545 // Logger
546 //
547 JBLogger* _log;
548
549};
550
551#endif //ARDUINO_WOPR_JBWOPRMQTT_H
Abstract effect base class.
Definition jbwopreffects.h:42
W.O.P.R. WiFi and MQTT device class.
Definition jbwoprmqtt.h:38
const char * SUBENTITY_NAME_DISPLAY_BRIGHTNESS
Display brightness key name.
Definition jbwoprmqtt.h:392
const char * ENTITY_NAME_EFFECT
Effect entity name.
Definition jbwoprmqtt.h:372
WiFiClient _wifiClient
WiFi client.
Definition jbwoprmqtt.h:338
JBWoprMqttConfig _mqttConfig
MQTT configuration.
Definition jbwoprmqtt.h:311
WiFiManagerParameter * _mqttServerPortParam
MQTT server port WiFiManager parameter.
Definition jbwoprmqtt.h:347
char _mqttServerPortValue[6]
MQTT server port value.
Definition jbwoprmqtt.h:341
bool begin(JBWoprBoardVariant variant) override
Initialize JBWoprMqttDevice.
Definition jbwoprmqtt.cpp:27
const char * SUBENTITY_NAME_EFFECTS_TIMEOUT
Effects timeout key name.
Definition jbwoprmqtt.h:388
JBWoprMqttDevice()
JBWoprMqttDevice constructor.
Definition jbwoprmqtt.cpp:14
const char * JSON_KEY_MQTT_USER_NAME
MQTT user name key name.
Definition jbwoprmqtt.h:316
const char * ENTITY_NAME_BUTTON_BACK_BOTTOM
Button back bottom entity name.
Definition jbwoprmqtt.h:378
const char * SUBENTITY_NAME_COLOR
Color subentity name.
Definition jbwoprmqtt.h:382
bool _mqttActive
MQTT active flag, set tp true after initialization.
Definition jbwoprmqtt.h:368
const char * ENTITY_NAME_DISPLAY
Display text entity name.
Definition jbwoprmqtt.h:373
const char * STATE_ON
State ON.
Definition jbwoprmqtt.h:396
WiFiManagerParameter * _break2Param
Break WiFiManagerparameter.
Definition jbwoprmqtt.h:351
const char * JSON_KEY_MQTT_SERVER_PORT
MQTT server port key name.
Definition jbwoprmqtt.h:315
const char * JSON_KEY_MQTT_PASSWORD
MQTT password key name.
Definition jbwoprmqtt.h:317
PubSubClient * _mqttClient
MQTT client.
Definition jbwoprmqtt.h:367
const char * SUBENTITY_NAME_DATE_FORMAT
Date Format key name.
Definition jbwoprmqtt.h:390
const char * JSON_KEY_MQTT_USE_MQTT
Use MQTT key name.
Definition jbwoprmqtt.h:313
const char * ENTITY_NAME_CONFIG
Config entity name.
Definition jbwoprmqtt.h:371
const char * SUBENTITY_NAME_NAME
Effect subentity name.
Definition jbwoprmqtt.h:387
const char * ENTITY_NAME_BUTTON_FRONT_RIGHT
Button front right entity name.
Definition jbwoprmqtt.h:376
const char * SUBENTITY_NAME_TIME_FORMAT
Time format key name.
Definition jbwoprmqtt.h:389
const char * STATE_OFF
State OFF.
Definition jbwoprmqtt.h:397
const char * HTML_MQTT_TITLE
MQTT title.
Definition jbwoprmqtt.h:340
const char * JSON_KEY_MQTT_SERVER_NAME
MQTT server name key name.
Definition jbwoprmqtt.h:314
WiFiManagerParameter * _useMqttParam
Use MQTT WiFiManager parameter.
Definition jbwoprmqtt.h:345
WiFiManagerParameter * _mqttServerNameParam
MQTT server name WiFiManager parameter.
Definition jbwoprmqtt.h:346
WiFiManagerParameter * _mqttUserNameParam
MQTT user name WiFiManager parameter.
Definition jbwoprmqtt.h:348
LogLevel getLogLevel() override
Get log level.
Definition jbwoprmqtt.cpp:78
const char * ENTITY_NAME_DEFCON
DEFCON LED entity name.
Definition jbwoprmqtt.h:374
const char * ENTITY_NAME_BUTTON_BACK_TOP
Button back top entity name.
Definition jbwoprmqtt.h:377
const char * SUBENTITY_NAME_WIFI_USE_WEB_PORTAL
Use portal key name.
Definition jbwoprmqtt.h:394
const char * ENTITY_NAME_BUTTON_FRONT_LEFT
Button front left entity name.
Definition jbwoprmqtt.h:375
const char * SUBENTITY_NAME_STATE
State subentity name.
Definition jbwoprmqtt.h:380
void _setJsonDocumentFromConfig(JsonDocument &jsonDoc)
Set JSON document values with JBWoprMqttDevice specific config values.
Definition jbwoprmqtt.cpp:269
const char * COMMAND_SET
Set command.
Definition jbwoprmqtt.h:402
const char * SUBENTITY_NAME_DEFCON_BRIGHTNESS
DEFCON LEDs brightness key name.
Definition jbwoprmqtt.h:391
WiFiManagerParameter * _mqttTitleParam
MQTT title WiFiManager parameter.
Definition jbwoprmqtt.h:344
WiFiManagerParameter * _mqttPasswordParam
MQTT password WiFiManager parameter.
Definition jbwoprmqtt.h:349
const char * JSON_KEY_CONF_MQTT_PREFIX
MQTT prefix key name.
Definition jbwoprmqtt.h:318
void _setConfigFromJsonDocument(const JsonDocument &jsonDoc)
Set JBWoprMqttDevice specific config values from JSON document.
Definition jbwoprmqtt.cpp:247
WiFiManagerParameter * _mqttPrefixParam
MQTT prefix WiFiManager parameter.
Definition jbwoprmqtt.h:350
const char * SUBENTITY_NAME_LEVEL
Level subentity name.
Definition jbwoprmqtt.h:386
void setLogLevel(LogLevel level) override
Set log level.
Definition jbwoprmqtt.cpp:73
void _dumpConfig() override
Dump configuration to logger.
Definition jbwoprmqtt.cpp:279
void loop() override
JBWoprMqttDevice loop.
Definition jbwoprmqtt.cpp:55
const char * SUBENTITY_NAME_WIFI_HOST_NAME
Host name key name.
Definition jbwoprmqtt.h:393
const char * ENTITY_NAME_DEVICE
Device entity name.
Definition jbwoprmqtt.h:370
const char * SUBENTITY_NAME_SCROLLTEXT
Scroll text subentity name.
Definition jbwoprmqtt.h:384
const char * EVENT_CLICK
Click event.
Definition jbwoprmqtt.h:399
const char * SUBENTITY_NAME_TEXT
Text subentity name.
Definition jbwoprmqtt.h:383
const char * EVENT_DOUBLE_CLICK
Double click event.
Definition jbwoprmqtt.h:400
const char * SUBENTITY_NAME_BRIGHTNESS
Brightness subentity name.
Definition jbwoprmqtt.h:381
const char * SUBENTITY_NAME_EVENT
Event subentity name.
Definition jbwoprmqtt.h:385
W.O.P.R. WiFi device class.
Definition jbwoprwifi.h:38
void _buttonFrontLeftDoubleClick() override
Button front left double click callback.
Definition jbwoprmqtt.cpp:659
void _buttonBackBottomDoubleClick() override
Button back bottom double click callback.
Definition jbwoprmqtt.cpp:707
void _buttonBackTopDoubleClick() override
Button back top double click callback.
Definition jbwoprmqtt.cpp:691
void _buttonBackTopClick() override
Button back top click callback.
Definition jbwoprmqtt.cpp:683
void _buttonFrontRightClick() override
Button front right click callback.
Definition jbwoprmqtt.cpp:667
void _buttonFrontRightDoubleClick() override
Button front right double click callback.
Definition jbwoprmqtt.cpp:675
void _buttonBackBottomClick() override
Button back bottom click callback.
Definition jbwoprmqtt.cpp:699
void _buttonFrontLeftClick() override
Button front left click callback.
Definition jbwoprmqtt.cpp:651
void defconLedsSetBrightness(uint8_t brightness) override
DEFCON LEDs set brightness.
Definition jbwoprmqtt.cpp:235
void defconLedSetColor(JBDefconLevel level, uint32_t color)
Set color of a specified DEFCON LED.
Definition jbwoprmqtt.cpp:240
void defconLedsSetColor(uint32_t color) override
DEFCON LEDs set color.
Definition jbwoprmqtt.cpp:230
void defconLedsSetState(bool state) override
DEFCON LEDs set state.
Definition jbwoprmqtt.cpp:221
void defconLedsSetDefconLevel(JBDefconLevel level) override
DEFCON LEDs set DEFCON level.
Definition jbwoprmqtt.cpp:226
void displayScrollText(const char *text, uint16_t delay_ms) override
Display scrolling text.
Definition jbwoprmqtt.cpp:193
void displayShowText(const char *text, JBTextAlignment alignment) override
Display show text.
Definition jbwoprmqtt.cpp:168
void displaySetState(bool state) override
Display set state.
Definition jbwoprmqtt.cpp:153
void displayClear() override
Display clear.
Definition jbwoprmqtt.cpp:158
void displaySetBrightness(uint8_t val) override
Display set brightness.
Definition jbwoprmqtt.cpp:163
virtual void effectsStopCurrentEffect()
Stop current effect.
Definition jbwoprmqtt.cpp:127
void effectsStartCurrentEffect() override
Effects start current effect.
Definition jbwoprmqtt.cpp:122
void effectsStartEffect(JBWoprEffectBase *effect) override
Effects start effect.
Definition jbwoprmqtt.cpp:132
bool _mqttReconnect()
Reconnect MQTT.
Definition jbwoprmqtt.cpp:376
virtual void _handleDisplayCommand(const std::string &subEntity, const std::string &command, const std::string &payload)
Handle MQTT display command message.
Definition jbwoprmqtt.cpp:549
void _mqttCallback(const char *topic, const byte *payload, unsigned int length)
MQTT callback.
Definition jbwoprmqtt.cpp:419
virtual void _handleDeviceCommand(const std::string &subEntity, const std::string &command, const std::string &payload)
Handle MQTT device command message.
Definition jbwoprmqtt.cpp:467
bool _mqttStart()
Start MQTT.
Definition jbwoprmqtt.cpp:337
void _mqttStop()
Stop MQTT.
Definition jbwoprmqtt.cpp:369
bool mqttPublishMessage(const std::string &topic, JsonDocument &jsonDoc, bool retain=false)
MQTT publish message.
Definition jbwoprmqtt.cpp:85
virtual void _handleConfigCommand(const std::string &subEntity, const std::string &command, const std::string &payload)
Handle MQTT config command message.
Definition jbwoprmqtt.cpp:490
virtual std::string _getAvailabilityTopic()
Get availability topic.
Definition jbwoprmqtt.cpp:643
virtual std::string _getSubscriptionTopic()
Get subscription topic.
Definition jbwoprmqtt.cpp:638
virtual void _handleCommand(const std::string &entity, const std::string &subEntity, const std::string &command, const std::string &payload)
Handle MQTT command message.
Definition jbwoprmqtt.cpp:450
virtual std::string _getTopic(const char *entityId, const char *subEntityId)
Get publish topic for specified entity.
Definition jbwoprmqtt.cpp:629
virtual bool _onMqttConnect()
Called when MQTT client get connected.
Definition jbwoprmqtt.cpp:408
virtual void _handleDefconCommand(const std::string &subEntity, const std::string &command, const std::string &payload)
Handle MQTT defcon command message.
Definition jbwoprmqtt.cpp:588
virtual void _handleEffectCommand(const std::string &subEntity, const std::string &command, const std::string &payload)
Handle MQTT effect command message.
Definition jbwoprmqtt.cpp:525
void _setupWiFiManager() override
Setup WiFiManager.
Definition jbwoprmqtt.cpp:293
void _saveParamsCallback() override
Set WiFiManager parameter callback.
Definition jbwoprmqtt.cpp:320
JBDefconLevel
DEFCON levels.
Definition jbwopr.h:34
JBWoprBoardVariant
W.O.P.R. board version.
Definition jbwopr.h:28
Header file for the JBWopr library.
Source file for the JBWOPR library.
W.O.P.R. board pin assignments.
Definition jbwopr.h:44
JBWoprMqttDevice MQTT configuration.
Definition jbwoprmqtt.h:27
std::string mqttServerName
MQTT server name.
Definition jbwoprmqtt.h:29
std::string mqttPassword
MQTT password.
Definition jbwoprmqtt.h:32
std::string mqttPrefix
MQTT prefix.
Definition jbwoprmqtt.h:33
std::string mqttUserName
MQTT user name.
Definition jbwoprmqtt.h:31
uint16_t mqttServerPort
MQTT server port.
Definition jbwoprmqtt.h:30
bool useMqtt
Use MQTT.
Definition jbwoprmqtt.h:28