mirror of
https://github.com/lumapu/ahoy.git
synced 2025-05-10 23:46:37 +02:00
* improved mqtt settings
This commit is contained in:
parent
f92a9509a1
commit
f1b19bccfe
4 changed files with 59 additions and 103 deletions
|
@ -240,21 +240,14 @@ void app::setup(uint32_t timeout) {
|
||||||
// TODO set ntpAddr & ntpPort in main
|
// TODO set ntpAddr & ntpPort in main
|
||||||
|
|
||||||
// mqtt
|
// mqtt
|
||||||
uint16_t mqttPort;
|
mEep->read(ADDR_MQTT_ADDR, config.mqtt.broker, MQTT_ADDR_LEN);
|
||||||
char mqttAddr[MQTT_ADDR_LEN];
|
mEep->read(ADDR_MQTT_USER, config.mqtt.user, MQTT_USER_LEN);
|
||||||
char mqttUser[MQTT_USER_LEN];
|
mEep->read(ADDR_MQTT_PWD, config.mqtt.pwd, MQTT_PWD_LEN);
|
||||||
char mqttPwd[MQTT_PWD_LEN];
|
mEep->read(ADDR_MQTT_TOPIC, config.mqtt.topic, MQTT_TOPIC_LEN);
|
||||||
char mqttTopic[MQTT_TOPIC_LEN];
|
mEep->read(ADDR_MQTT_PORT, &config.mqtt.port);
|
||||||
char mqttDevName[DEVNAME_LEN];
|
|
||||||
mEep->read(ADDR_MQTT_ADDR, mqttAddr, MQTT_ADDR_LEN);
|
|
||||||
mEep->read(ADDR_MQTT_USER, mqttUser, MQTT_USER_LEN);
|
|
||||||
mEep->read(ADDR_MQTT_PWD, mqttPwd, MQTT_PWD_LEN);
|
|
||||||
mEep->read(ADDR_MQTT_TOPIC, mqttTopic, MQTT_TOPIC_LEN);
|
|
||||||
mEep->read(ADDR_DEVNAME, mqttDevName, DEVNAME_LEN);
|
|
||||||
//mEep->read(ADDR_MQTT_INTERVAL, &mMqttInterval);
|
//mEep->read(ADDR_MQTT_INTERVAL, &mMqttInterval);
|
||||||
mEep->read(ADDR_MQTT_PORT, &mqttPort);
|
|
||||||
|
|
||||||
if(mqttAddr[0] > 0) {
|
if(config.mqtt.broker[0] > 0) {
|
||||||
mMqttActive = true;
|
mMqttActive = true;
|
||||||
if(mMqttInterval < MIN_MQTT_INTERVAL)
|
if(mMqttInterval < MIN_MQTT_INTERVAL)
|
||||||
mMqttInterval = MIN_MQTT_INTERVAL;
|
mMqttInterval = MIN_MQTT_INTERVAL;
|
||||||
|
@ -262,10 +255,10 @@ void app::setup(uint32_t timeout) {
|
||||||
else
|
else
|
||||||
mMqttInterval = 0xffff;
|
mMqttInterval = 0xffff;
|
||||||
|
|
||||||
if(0 == mqttPort)
|
if(0 == config.mqtt.port)
|
||||||
mqttPort = 1883;
|
config.mqtt.port = 1883;
|
||||||
|
|
||||||
mMqtt.setup(mqttAddr, mqttTopic, mqttUser, mqttPwd, mqttDevName, mqttPort);
|
mMqtt.setup(&config.mqtt, config.deviceName);
|
||||||
mMqtt.setCallback(std::bind(&app::cbMqtt, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
|
mMqtt.setCallback(std::bind(&app::cbMqtt, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
|
||||||
mMqttTicker = 0;
|
mMqttTicker = 0;
|
||||||
|
|
||||||
|
@ -275,9 +268,9 @@ void app::setup(uint32_t timeout) {
|
||||||
#endif
|
#endif
|
||||||
mSerialTicker = 0;
|
mSerialTicker = 0;
|
||||||
|
|
||||||
if(mqttAddr[0] > 0) {
|
if(config.mqtt.broker[0] > 0) {
|
||||||
char topic[30];
|
char topic[30];
|
||||||
mMqtt.sendMsg("device", mqttDevName);
|
mMqtt.sendMsg("device", config.deviceName);
|
||||||
mMqtt.sendMsg("version", config.version);
|
mMqtt.sendMsg("version", config.version);
|
||||||
for(uint8_t i = 0; i < MAX_NUM_INVERTERS; i ++) {
|
for(uint8_t i = 0; i < MAX_NUM_INVERTERS; i ++) {
|
||||||
iv = mSys->getInverterByPos(i);
|
iv = mSys->getInverterByPos(i);
|
||||||
|
@ -1109,7 +1102,7 @@ void app::sendMqttDiscoveryConfig(void) {
|
||||||
} else {
|
} else {
|
||||||
snprintf(name, 32, "%s CH%d %s", iv->name, iv->assign[i].ch, iv->getFieldName(i));
|
snprintf(name, 32, "%s CH%d %s", iv->name, iv->assign[i].ch, iv->getFieldName(i));
|
||||||
}
|
}
|
||||||
snprintf(stateTopic, 64, "%s/%s/ch%d/%s", mMqtt.getTopic(), iv->name, iv->assign[i].ch, iv->getFieldName(i));
|
snprintf(stateTopic, 64, "%s/%s/ch%d/%s", config.mqtt.topic, iv->name, iv->assign[i].ch, iv->getFieldName(i));
|
||||||
snprintf(discoveryTopic, 64, "%s/sensor/%s/ch%d_%s/config", MQTT_DISCOVERY_PREFIX, iv->name, iv->assign[i].ch, iv->getFieldName(i));
|
snprintf(discoveryTopic, 64, "%s/sensor/%s/ch%d_%s/config", MQTT_DISCOVERY_PREFIX, iv->name, iv->assign[i].ch, iv->getFieldName(i));
|
||||||
snprintf(uniq_id, 32, "ch%d_%s", iv->assign[i].ch, iv->getFieldName(i));
|
snprintf(uniq_id, 32, "ch%d_%s", iv->assign[i].ch, iv->getFieldName(i));
|
||||||
const char* devCls = getFieldDeviceClass(iv->assign[i].fieldId);
|
const char* devCls = getFieldDeviceClass(iv->assign[i].fieldId);
|
||||||
|
|
|
@ -68,40 +68,6 @@ const byte mDnsPort = 53;
|
||||||
#define NTP_PACKET_SIZE 48
|
#define NTP_PACKET_SIZE 48
|
||||||
#define TIMEZONE 1 // Central European time +1
|
#define TIMEZONE 1 // Central European time +1
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
char broker[MQTT_ADDR_LEN];
|
|
||||||
uint16_t port;
|
|
||||||
char user[MQTT_USER_LEN];
|
|
||||||
char pwd[MQTT_PWD_LEN];
|
|
||||||
char topic[MQTT_TOPIC_LEN];
|
|
||||||
char devName[DEVNAME_LEN];
|
|
||||||
} mqttConfig_t;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
char version[12];
|
|
||||||
char deviceName[DEVNAME_LEN];
|
|
||||||
|
|
||||||
// wifi
|
|
||||||
char stationSsid[SSID_LEN];
|
|
||||||
char stationPwd[PWD_LEN];
|
|
||||||
bool apActive;
|
|
||||||
|
|
||||||
// nrf24
|
|
||||||
uint16_t sendInterval;
|
|
||||||
uint8_t maxRetransPerPyld;
|
|
||||||
|
|
||||||
// ntp
|
|
||||||
char ntpAddr[NTP_ADDR_LEN];
|
|
||||||
uint16_t ntpPort;
|
|
||||||
|
|
||||||
// mqtt
|
|
||||||
mqttConfig_t mqtt;
|
|
||||||
|
|
||||||
// serial
|
|
||||||
uint16_t serialInterval;
|
|
||||||
bool serialShowIv;
|
|
||||||
bool serialDebug;
|
|
||||||
} config_t;
|
|
||||||
|
|
||||||
|
|
||||||
#define SAVE_SSID 0x00000001
|
#define SAVE_SSID 0x00000001
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#define VERSION_PATCH 10
|
#define VERSION_PATCH 10
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------
|
//-------------------------------------
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t rxCh;
|
uint8_t rxCh;
|
||||||
|
@ -157,4 +158,41 @@ typedef enum {
|
||||||
#pragma error "Configure less inverters? (MAX_NUM_INVERTERS=" + MAX_NUM_INVERTERS +")"
|
#pragma error "Configure less inverters? (MAX_NUM_INVERTERS=" + MAX_NUM_INVERTERS +")"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------
|
||||||
|
typedef struct {
|
||||||
|
char broker[MQTT_ADDR_LEN];
|
||||||
|
uint16_t port;
|
||||||
|
char user[MQTT_USER_LEN];
|
||||||
|
char pwd[MQTT_PWD_LEN];
|
||||||
|
char topic[MQTT_TOPIC_LEN];
|
||||||
|
} mqttConfig_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char version[12];
|
||||||
|
char deviceName[DEVNAME_LEN];
|
||||||
|
|
||||||
|
// wifi
|
||||||
|
char stationSsid[SSID_LEN];
|
||||||
|
char stationPwd[PWD_LEN];
|
||||||
|
bool apActive;
|
||||||
|
|
||||||
|
// nrf24
|
||||||
|
uint16_t sendInterval;
|
||||||
|
uint8_t maxRetransPerPyld;
|
||||||
|
|
||||||
|
// ntp
|
||||||
|
char ntpAddr[NTP_ADDR_LEN];
|
||||||
|
uint16_t ntpPort;
|
||||||
|
|
||||||
|
// mqtt
|
||||||
|
mqttConfig_t mqtt;
|
||||||
|
|
||||||
|
// serial
|
||||||
|
uint16_t serialInterval;
|
||||||
|
bool serialShowIv;
|
||||||
|
bool serialDebug;
|
||||||
|
} config_t;
|
||||||
|
|
||||||
|
|
||||||
#endif /*__DEFINES_H__*/
|
#endif /*__DEFINES_H__*/
|
||||||
|
|
|
@ -16,27 +16,19 @@ class mqtt {
|
||||||
mClient = new PubSubClient(mEspClient);
|
mClient = new PubSubClient(mEspClient);
|
||||||
mAddressSet = false;
|
mAddressSet = false;
|
||||||
|
|
||||||
memset(mBroker, 0, MQTT_ADDR_LEN);
|
|
||||||
memset(mUser, 0, MQTT_USER_LEN);
|
|
||||||
memset(mPwd, 0, MQTT_PWD_LEN);
|
|
||||||
memset(mTopic, 0, MQTT_TOPIC_LEN);
|
|
||||||
memset(mDevName, 0, DEVNAME_LEN);
|
memset(mDevName, 0, DEVNAME_LEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
~mqtt() { }
|
~mqtt() { }
|
||||||
|
|
||||||
void setup(const char *broker, const char *topic, const char *user, const char *pwd, const char *devname, uint16_t port) {
|
void setup(mqttConfig_t *cfg, const char *devname) {
|
||||||
DPRINTLN(DBG_VERBOSE, F("mqtt.h:setup"));
|
DPRINTLN(DBG_VERBOSE, F("mqtt.h:setup"));
|
||||||
mAddressSet = true;
|
mAddressSet = true;
|
||||||
|
|
||||||
mPort = port;
|
mCfg = cfg;
|
||||||
snprintf(mBroker, MQTT_ADDR_LEN, "%s", broker);
|
|
||||||
snprintf(mUser, MQTT_USER_LEN, "%s", user);
|
|
||||||
snprintf(mPwd, MQTT_PWD_LEN, "%s", pwd);
|
|
||||||
snprintf(mTopic, MQTT_TOPIC_LEN, "%s", topic);
|
|
||||||
snprintf(mDevName, DEVNAME_LEN, "%s", devname);
|
snprintf(mDevName, DEVNAME_LEN, "%s", devname);
|
||||||
|
|
||||||
mClient->setServer(mBroker, mPort);
|
mClient->setServer(mCfg->broker, mCfg->port);
|
||||||
mClient->setBufferSize(MQTT_MAX_PACKET_SIZE);
|
mClient->setBufferSize(MQTT_MAX_PACKET_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,7 +39,7 @@ class mqtt {
|
||||||
void sendMsg(const char *topic, const char *msg) {
|
void sendMsg(const char *topic, const char *msg) {
|
||||||
//DPRINTLN(DBG_VERBOSE, F("mqtt.h:sendMsg"));
|
//DPRINTLN(DBG_VERBOSE, F("mqtt.h:sendMsg"));
|
||||||
char top[64];
|
char top[64];
|
||||||
snprintf(top, 64, "%s/%s", mTopic, topic);
|
snprintf(top, 64, "%s/%s", mCfg->topic, topic);
|
||||||
sendMsg2(top, msg, false);
|
sendMsg2(top, msg, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,35 +59,6 @@ class mqtt {
|
||||||
return mClient->connected();
|
return mClient->connected();
|
||||||
}
|
}
|
||||||
|
|
||||||
char *getBroker(void) {
|
|
||||||
//DPRINTLN(DBG_VERBOSE, F("mqtt.h:getBroker"));
|
|
||||||
return mBroker;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *getUser(void) {
|
|
||||||
//DPRINTLN(DBG_VERBOSE, F("mqtt.h:getUser"));
|
|
||||||
return mUser;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *getPwd(void) {
|
|
||||||
//DPRINTLN(DBG_VERBOSE, F("mqtt.h:getPwd"));
|
|
||||||
return mPwd;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *getTopic(void) {
|
|
||||||
//DPRINTLN(DBG_VERBOSE, F("mqtt.h:getTopic"));
|
|
||||||
return mTopic;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *getDevName(void) {
|
|
||||||
//DPRINTLN(DBG_VERBOSE, F("mqtt.h:getDevName"));
|
|
||||||
return mDevName;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t getPort(void) {
|
|
||||||
return mPort;
|
|
||||||
}
|
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
//DPRINT(F("m"));
|
//DPRINT(F("m"));
|
||||||
if(!mClient->connected())
|
if(!mClient->connected())
|
||||||
|
@ -112,17 +75,17 @@ class mqtt {
|
||||||
if(strlen(mDevName) > 0) {
|
if(strlen(mDevName) > 0) {
|
||||||
// der Server und der Port müssen neu gesetzt werden,
|
// der Server und der Port müssen neu gesetzt werden,
|
||||||
// da ein MQTT_CONNECTION_LOST -3 die Werte zerstört hat.
|
// da ein MQTT_CONNECTION_LOST -3 die Werte zerstört hat.
|
||||||
mClient->setServer(mBroker, mPort);
|
mClient->setServer(mCfg->broker, mCfg->port);
|
||||||
mClient->setBufferSize(MQTT_MAX_PACKET_SIZE);
|
mClient->setBufferSize(MQTT_MAX_PACKET_SIZE);
|
||||||
if((strlen(mUser) > 0) && (strlen(mPwd) > 0))
|
if((strlen(mCfg->user) > 0) && (strlen(mCfg->pwd) > 0))
|
||||||
mClient->connect(mDevName, mUser, mPwd);
|
mClient->connect(mDevName, mCfg->user, mCfg->pwd);
|
||||||
else
|
else
|
||||||
mClient->connect(mDevName);
|
mClient->connect(mDevName);
|
||||||
}
|
}
|
||||||
// ein Subscribe ist nur nach einem connect notwendig
|
// ein Subscribe ist nur nach einem connect notwendig
|
||||||
char topic[MQTT_TOPIC_LEN + 13 ]; // "/devcontrol/#" --> + 6 byte
|
char topic[MQTT_TOPIC_LEN + 13 ]; // "/devcontrol/#" --> + 6 byte
|
||||||
// ToDo: "/devcontrol/#" is hardcoded
|
// ToDo: "/devcontrol/#" is hardcoded
|
||||||
snprintf(topic, MQTT_TOPIC_LEN + 13, "%s/devcontrol/#", mTopic);
|
snprintf(topic, MQTT_TOPIC_LEN + 13, "%s/devcontrol/#", mCfg->topic);
|
||||||
DPRINTLN(DBG_INFO, F("subscribe to ") + String(topic));
|
DPRINTLN(DBG_INFO, F("subscribe to ") + String(topic));
|
||||||
mClient->subscribe(topic); // subscribe to mTopic + "/devcontrol/#"
|
mClient->subscribe(topic); // subscribe to mTopic + "/devcontrol/#"
|
||||||
}
|
}
|
||||||
|
@ -132,11 +95,7 @@ class mqtt {
|
||||||
PubSubClient *mClient;
|
PubSubClient *mClient;
|
||||||
|
|
||||||
bool mAddressSet;
|
bool mAddressSet;
|
||||||
uint16_t mPort;
|
mqttConfig_t *mCfg;
|
||||||
char mBroker[MQTT_ADDR_LEN];
|
|
||||||
char mUser[MQTT_USER_LEN];
|
|
||||||
char mPwd[MQTT_PWD_LEN];
|
|
||||||
char mTopic[MQTT_TOPIC_LEN];
|
|
||||||
char mDevName[DEVNAME_LEN];
|
char mDevName[DEVNAME_LEN];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue