MQTT topics refactoring (sub-properties, set) to better compatibility, modify default topic prefix from /myhome to myhome

This commit is contained in:
2019-03-08 03:55:59 +03:00
parent 515728207f
commit cd32554175
5 changed files with 91 additions and 16 deletions

View File

@@ -1,3 +1,4 @@
#pragma once
const char state_P[] PROGMEM = "$state";
const char disconnected_P[] PROGMEM = "disconnected";
@@ -28,10 +29,10 @@ const char format_P[] PROGMEM = "$format";
const char true_P[] PROGMEM = "true";
const char false_P[] PROGMEM = "false";
const char enumformat_P[] PROGMEM = "ON,OFF,HALT,REST,XON,XOFF,TOGGLE";
const char enumformat_P[] PROGMEM = "ON,OFF,HALT,REST,XON,XOFF,TOGGLE";
const char intformat_P[] PROGMEM = "0-100";
const char stats_P[] PROGMEM = "$stats";
const char statsval_P[] PROGMEM = "uptime,freeheap";
const char uptime_P[] PROGMEM = "uptime";
const char freeheap_P[] PROGMEM = "freeheap";
const char stats_P[] PROGMEM = "$stats";
const char statsval_P[] PROGMEM = "uptime,freeheap";
const char uptime_P[] PROGMEM = "uptime";
const char freeheap_P[] PROGMEM = "freeheap";

View File

@@ -17,6 +17,7 @@ GIT: https://github.com/anklimov/lighthub
e-mail anklimov@gmail.com
*/
#include "options.h"
#include "item.h"
#include "aJSON.h"
@@ -32,7 +33,28 @@ e-mail anklimov@gmail.com
#endif
#include <PubSubClient.h>
const char ON_P[] PROGMEM = "ON";
const char OFF_P[] PROGMEM = "OFF";
const char REST_P[] PROGMEM = "REST";
const char TOGGLE_P[] PROGMEM = "TOGGLE";
const char HALT_P[] PROGMEM = "HALT";
const char XON_P[] PROGMEM = "XON";
const char XOFF_P[] PROGMEM = "XOFF";
const char INCREASE_P[] PROGMEM = "INCREASE";
const char DECREASE_P[] PROGMEM = "DECREASE";
const char TRUE_P[] PROGMEM = "true";
const char FALSE_P[] PROGMEM = "false";
const char SET_P[] PROGMEM = "set";
const char TEMP_P[] PROGMEM = "temp";
const char MODE_P[] PROGMEM = "mode";
const char SETPOINT_P[] PROGMEM = "setpoint";
const char POWER_P[] PROGMEM = "power";
const char VOL_P[] PROGMEM = "vol";
const char HEAT_P[] PROGMEM = "heat";
const char CSV_P[] PROGMEM = "csv";
const char RGB_P[] PROGMEM = "rgb";
const char RPM_P[] PROGMEM = "rpm";
short modbusBusy = 0;
extern aJsonObject *pollingItem;
@@ -51,15 +73,17 @@ int txt2cmd(char *payload) {
int cmd = -1;
// Check for command
if (strcmp(payload, "ON") == 0) cmd = CMD_ON;
else if (strcmp(payload, "OFF") == 0) cmd = CMD_OFF;
else if (strcmp(payload, "REST") == 0) cmd = CMD_RESTORE;
else if (strcmp(payload, "TOGGLE") == 0) cmd = CMD_TOGGLE;
else if (strcmp(payload, "HALT") == 0) cmd = CMD_HALT;
else if (strcmp(payload, "XON") == 0) cmd = CMD_XON;
else if (strcmp(payload, "XOFF") == 0) cmd = CMD_XOFF;
else if (strcmp(payload, "INCREASE") == 0) cmd = CMD_UP;
else if (strcmp(payload, "DECREASE") == 0) cmd = CMD_DN;
if (strcmp_P(payload, ON_P) == 0) cmd = CMD_ON;
else if (strcmp_P(payload, OFF_P) == 0) cmd = CMD_OFF;
else if (strcmp_P(payload, REST_P) == 0) cmd = CMD_RESTORE;
else if (strcmp_P(payload, TOGGLE_P) == 0) cmd = CMD_TOGGLE;
else if (strcmp_P(payload, HALT_P) == 0) cmd = CMD_HALT;
else if (strcmp_P(payload, XON_P) == 0) cmd = CMD_XON;
else if (strcmp_P(payload, XOFF_P) == 0) cmd = CMD_XOFF;
else if (strcmp_P(payload, TRUE_P) == 0) cmd = CMD_ON;
else if (strcmp_P(payload, FALSE_P) == 0) cmd = CMD_OFF;
else if (strcmp_P(payload, INCREASE_P) == 0) cmd = CMD_UP;
else if (strcmp_P(payload, DECREASE_P) == 0) cmd = CMD_DN;
else if (*payload == '-' || (*payload >= '0' && *payload <= '9')) cmd = 0;
else if (*payload == '{') cmd = -2;
else if (*payload == '#') cmd = -3;
@@ -67,6 +91,23 @@ int txt2cmd(char *payload) {
return cmd;
}
int txt2subItem(char *payload) {
int cmd = -1;
if (!payload || !strlen(payload)) return 0;
// Check for command
if (strcmp_P(payload, SET_P) == 0) cmd = S_SET;
else if (strcmp_P(payload, TEMP_P) == 0) cmd = S_TEMP;
else if (strcmp_P(payload, MODE_P) == 0) cmd = S_MODE;
else if (strcmp_P(payload, SETPOINT_P) == 0) cmd = S_SETPOINT;
else if (strcmp_P(payload, POWER_P) == 0) cmd = S_POWER;
else if (strcmp_P(payload, VOL_P) == 0) cmd = S_VOL;
else if (strcmp_P(payload, HEAT_P) == 0) cmd = S_HEAT;
else if (strcmp_P(payload, CSV_P) == 0) cmd = S_CSV;
else if (strcmp_P(payload, RGB_P) == 0) cmd = S_RGB;
return cmd;
}
const short defval[4] = {0, 0, 0, 0}; //Type,Arg,Val,Cmd
Item::Item(aJsonObject *obj)//Constructor
@@ -200,7 +241,26 @@ boolean Item::getEnableCMD(int delta) {
int Item::Ctrl(char * payload, boolean send, char * subItem){
if (!payload) return 0;
// debugSerial<<F("'")<<payload<<F("'")<<endl;
char* subsubItem = NULL;
int subItemN = 0;
int subsubItemN = 0;
bool isSet = false;
if (subItem && strlen(subItem))
{
if (subsubItem = strchr(subItem, '/'))
{
*subsubItem = 0;
subsubItem++;
subsubItemN = txt2subItem(subsubItem);
}
subItemN = txt2subItem(subItem);
if (subItemN==S_SET || subsubItemN==S_SET) isSet = true;
} else isSet = true; /// To be removed - old compatmode
if (isSet)
{
int cmd = txt2cmd(payload);
switch (cmd) {
case 0: {
@@ -245,6 +305,7 @@ int Item::Ctrl(char * payload, boolean send, char * subItem){
} //ctrl
}
}
int Item::Ctrl(short cmd, short n, int *Parameters, boolean send, char * subItem) {

View File

@@ -19,6 +19,17 @@ e-mail anklimov@gmail.com
*/
#include "options.h"
#define S_SET 1
#define S_TEMP 2
#define S_MODE 3
#define S_SETPOINT 4
#define S_POWER 5
#define S_VOL 6
#define S_HEAT 7
#define S_CSV 8
#define S_RGB 9
#define S_RPM 10
#define CH_DIMMER 0 //DMX 1 ch
#define CH_RGBW 1 //DMX 4 ch
#define CH_RGB 2 //DMX 3 ch

View File

@@ -66,7 +66,7 @@
#endif
#ifndef HOMETOPIC
#define HOMETOPIC "/myhome"
#define HOMETOPIC "myhome"
#endif
/*
#ifndef OUTTOPIC

View File

@@ -100,6 +100,8 @@ lib_ignore =
ModbusMaster
Artnet
https://github.com/anklimov/Artnet.git
https://github.com/anklimov/ESP-Dmx
HTTPClient
FastLED
Adafruit Unified Sensor
DHT sensor library for ESPx