Skip to content

Commit

Permalink
relay: mqtt events and group topics refactoring
Browse files Browse the repository at this point in the history
- fix relay-id check breaking group topics
- group -> pub and sub topics
- wildcard in subscription topic will be properly handled
- make sure on disconnect event only triggers when mqtt is changing
state from connected to disconnected, don't trigger every failed re-try
- replace receive-only mode with separate sub and pub topics
- some more build time settings (and some... questionable code to handle that)
  • Loading branch information
mcspr committed Mar 31, 2021
1 parent cab98cf commit dcc423e
Show file tree
Hide file tree
Showing 7 changed files with 609 additions and 248 deletions.
100 changes: 100 additions & 0 deletions code/espurna/config/defaults.h
Original file line number Diff line number Diff line change
Expand Up @@ -887,6 +887,106 @@
#define RELAY8_PULSE_TIME RELAY_PULSE_TIME
#endif

#ifndef RELAY1_MQTT_TOPIC_SUB
#define RELAY1_MQTT_TOPIC_SUB ""
#endif
#ifndef RELAY2_MQTT_TOPIC_SUB
#define RELAY2_MQTT_TOPIC_SUB ""
#endif
#ifndef RELAY3_MQTT_TOPIC_SUB
#define RELAY3_MQTT_TOPIC_SUB ""
#endif
#ifndef RELAY4_MQTT_TOPIC_SUB
#define RELAY4_MQTT_TOPIC_SUB ""
#endif
#ifndef RELAY5_MQTT_TOPIC_SUB
#define RELAY5_MQTT_TOPIC_SUB ""
#endif
#ifndef RELAY6_MQTT_TOPIC_SUB
#define RELAY6_MQTT_TOPIC_SUB ""
#endif
#ifndef RELAY7_MQTT_TOPIC_SUB
#define RELAY7_MQTT_TOPIC_SUB ""
#endif
#ifndef RELAY8_MQTT_TOPIC_SUB
#define RELAY8_MQTT_TOPIC_SUB ""
#endif

#ifndef RELAY1_MQTT_TOPIC_PUB
#define RELAY1_MQTT_TOPIC_PUB ""
#endif
#ifndef RELAY2_MQTT_TOPIC_PUB
#define RELAY2_MQTT_TOPIC_PUB ""
#endif
#ifndef RELAY3_MQTT_TOPIC_PUB
#define RELAY3_MQTT_TOPIC_PUB ""
#endif
#ifndef RELAY4_MQTT_TOPIC_PUB
#define RELAY4_MQTT_TOPIC_PUB ""
#endif
#ifndef RELAY5_MQTT_TOPIC_PUB
#define RELAY5_MQTT_TOPIC_PUB ""
#endif
#ifndef RELAY6_MQTT_TOPIC_PUB
#define RELAY6_MQTT_TOPIC_PUB ""
#endif
#ifndef RELAY7_MQTT_TOPIC_PUB
#define RELAY7_MQTT_TOPIC_PUB ""
#endif
#ifndef RELAY8_MQTT_TOPIC_PUB
#define RELAY8_MQTT_TOPIC_PUB ""
#endif

#ifndef RELAY1_MQTT_TOPIC_MODE
#define RELAY1_MQTT_TOPIC_MODE RELAY_MQTT_TOPIC_MODE
#endif
#ifndef RELAY2_MQTT_TOPIC_MODE
#define RELAY2_MQTT_TOPIC_MODE RELAY_MQTT_TOPIC_MODE
#endif
#ifndef RELAY3_MQTT_TOPIC_MODE
#define RELAY3_MQTT_TOPIC_MODE RELAY_MQTT_TOPIC_MODE
#endif
#ifndef RELAY4_MQTT_TOPIC_MODE
#define RELAY4_MQTT_TOPIC_MODE RELAY_MQTT_TOPIC_MODE
#endif
#ifndef RELAY5_MQTT_TOPIC_MODE
#define RELAY5_MQTT_TOPIC_MODE RELAY_MQTT_TOPIC_MODE
#endif
#ifndef RELAY6_MQTT_TOPIC_MODE
#define RELAY6_MQTT_TOPIC_MODE RELAY_MQTT_TOPIC_MODE
#endif
#ifndef RELAY7_MQTT_TOPIC_MODE
#define RELAY7_MQTT_TOPIC_MODE RELAY_MQTT_TOPIC_MODE
#endif
#ifndef RELAY8_MQTT_TOPIC_MODE
#define RELAY8_MQTT_TOPIC_MODE RELAY_MQTT_TOPIC_MODE
#endif

#ifndef RELAY1_MQTT_DISCONNECT_STATUS
#define RELAY1_MQTT_DISCONNECT_STATUS RELAY_MQTT_DISCONNECT_STATUS
#endif
#ifndef RELAY2_MQTT_DISCONNECT_STATUS
#define RELAY2_MQTT_DISCONNECT_STATUS RELAY_MQTT_DISCONNECT_STATUS
#endif
#ifndef RELAY3_MQTT_DISCONNECT_STATUS
#define RELAY3_MQTT_DISCONNECT_STATUS RELAY_MQTT_DISCONNECT_STATUS
#endif
#ifndef RELAY4_MQTT_DISCONNECT_STATUS
#define RELAY4_MQTT_DISCONNECT_STATUS RELAY_MQTT_DISCONNECT_STATUS
#endif
#ifndef RELAY5_MQTT_DISCONNECT_STATUS
#define RELAY5_MQTT_DISCONNECT_STATUS RELAY_MQTT_DISCONNECT_STATUS
#endif
#ifndef RELAY6_MQTT_DISCONNECT_STATUS
#define RELAY6_MQTT_DISCONNECT_STATUS RELAY_MQTT_DISCONNECT_STATUS
#endif
#ifndef RELAY7_MQTT_DISCONNECT_STATUS
#define RELAY7_MQTT_DISCONNECT_STATUS RELAY_MQTT_DISCONNECT_STATUS
#endif
#ifndef RELAY8_MQTT_DISCONNECT_STATUS
#define RELAY8_MQTT_DISCONNECT_STATUS RELAY_MQTT_DISCONNECT_STATUS
#endif

// -----------------------------------------------------------------------------
// LEDs
// -----------------------------------------------------------------------------
Expand Down
8 changes: 8 additions & 0 deletions code/espurna/config/general.h
Original file line number Diff line number Diff line change
Expand Up @@ -457,6 +457,14 @@
#define RELAY_MQTT_TOGGLE "2"
#endif

#ifndef RELAY_MQTT_TOPIC_MODE
#define RELAY_MQTT_TOPIC_MODE RELAY_MQTT_TOPIC_NORMAL
#endif

#ifndef RELAY_MQTT_DISCONNECT_STATUS
#define RELAY_MQTT_DISCONNECT_STATUS RELAY_MQTT_DISCONNECT_NONE
#endif

//------------------------------------------------------------------------------
// BUTTON
//------------------------------------------------------------------------------
Expand Down
11 changes: 8 additions & 3 deletions code/espurna/config/types.h
Original file line number Diff line number Diff line change
Expand Up @@ -122,9 +122,14 @@
#define RFB_PROVIDER_RCSWITCH 0
#define RFB_PROVIDER_EFM8BB1 1

#define RELAY_GROUP_SYNC_NORMAL 0
#define RELAY_GROUP_SYNC_INVERSE 1
#define RELAY_GROUP_SYNC_RECEIVEONLY 2
#define RELAY_MQTT_TOPIC_NORMAL RelayMqttTopicMode::Normal
#define RELAY_MQTT_TOPIC_INVERSE RelayMqttTopicMode::Inverse
#define RELAY_MQTT_TOPIC_RECEIVE_ONLY RelayMqttTopicMode::ReceiveOnly

#define RELAY_MQTT_DISCONNECT_NONE PayloadStatus::Unknown
#define RELAY_MQTT_DISCONNECT_ON PayloadStatus::On
#define RELAY_MQTT_DISCONNECT_OFF PayloadStatus::Off
#define RELAY_MQTT_DISCONNECT_TOGGLE PayloadStatus::Toggle

#define RELAY_LOCK_DISABLED RelayLock::None
#define RELAY_LOCK_NONE RelayLock::None
Expand Down
Loading

0 comments on commit dcc423e

Please sign in to comment.