diff --git a/tools/esp8266/app.cpp b/tools/esp8266/app.cpp index e74152c2..46f61b32 100644 --- a/tools/esp8266/app.cpp +++ b/tools/esp8266/app.cpp @@ -240,21 +240,14 @@ void app::setup(uint32_t timeout) { // TODO set ntpAddr & ntpPort in main // mqtt - uint16_t mqttPort; - char mqttAddr[MQTT_ADDR_LEN]; - char mqttUser[MQTT_USER_LEN]; - char mqttPwd[MQTT_PWD_LEN]; - char mqttTopic[MQTT_TOPIC_LEN]; - 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_ADDR, config.mqtt.broker, MQTT_ADDR_LEN); + mEep->read(ADDR_MQTT_USER, config.mqtt.user, MQTT_USER_LEN); + mEep->read(ADDR_MQTT_PWD, config.mqtt.pwd, MQTT_PWD_LEN); + mEep->read(ADDR_MQTT_TOPIC, config.mqtt.topic, MQTT_TOPIC_LEN); + mEep->read(ADDR_MQTT_PORT, &config.mqtt.port); //mEep->read(ADDR_MQTT_INTERVAL, &mMqttInterval); - mEep->read(ADDR_MQTT_PORT, &mqttPort); - if(mqttAddr[0] > 0) { + if(config.mqtt.broker[0] > 0) { mMqttActive = true; if(mMqttInterval < MIN_MQTT_INTERVAL) mMqttInterval = MIN_MQTT_INTERVAL; @@ -262,10 +255,10 @@ void app::setup(uint32_t timeout) { else mMqttInterval = 0xffff; - if(0 == mqttPort) - mqttPort = 1883; + if(0 == config.mqtt.port) + 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)); mMqttTicker = 0; @@ -275,9 +268,9 @@ void app::setup(uint32_t timeout) { #endif mSerialTicker = 0; - if(mqttAddr[0] > 0) { + if(config.mqtt.broker[0] > 0) { char topic[30]; - mMqtt.sendMsg("device", mqttDevName); + mMqtt.sendMsg("device", config.deviceName); mMqtt.sendMsg("version", config.version); for(uint8_t i = 0; i < MAX_NUM_INVERTERS; i ++) { iv = mSys->getInverterByPos(i); @@ -1109,7 +1102,7 @@ void app::sendMqttDiscoveryConfig(void) { } else { 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(uniq_id, 32, "ch%d_%s", iv->assign[i].ch, iv->getFieldName(i)); const char* devCls = getFieldDeviceClass(iv->assign[i].fieldId); diff --git a/tools/esp8266/app.h b/tools/esp8266/app.h index 01ee00f8..9f5b9cd7 100644 --- a/tools/esp8266/app.h +++ b/tools/esp8266/app.h @@ -68,40 +68,6 @@ const byte mDnsPort = 53; #define NTP_PACKET_SIZE 48 #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 diff --git a/tools/esp8266/defines.h b/tools/esp8266/defines.h index 0361d0b7..74f9f916 100644 --- a/tools/esp8266/defines.h +++ b/tools/esp8266/defines.h @@ -24,6 +24,7 @@ #define VERSION_PATCH 10 + //------------------------------------- typedef struct { uint8_t rxCh; @@ -157,4 +158,41 @@ typedef enum { #pragma error "Configure less inverters? (MAX_NUM_INVERTERS=" + MAX_NUM_INVERTERS +")" #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__*/ diff --git a/tools/esp8266/mqtt.h b/tools/esp8266/mqtt.h index eab0d043..789cec0c 100644 --- a/tools/esp8266/mqtt.h +++ b/tools/esp8266/mqtt.h @@ -16,27 +16,19 @@ class mqtt { mClient = new PubSubClient(mEspClient); 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); } ~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")); mAddressSet = true; - mPort = port; - 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); + mCfg = cfg; snprintf(mDevName, DEVNAME_LEN, "%s", devname); - mClient->setServer(mBroker, mPort); + mClient->setServer(mCfg->broker, mCfg->port); mClient->setBufferSize(MQTT_MAX_PACKET_SIZE); } @@ -47,7 +39,7 @@ class mqtt { void sendMsg(const char *topic, const char *msg) { //DPRINTLN(DBG_VERBOSE, F("mqtt.h:sendMsg")); char top[64]; - snprintf(top, 64, "%s/%s", mTopic, topic); + snprintf(top, 64, "%s/%s", mCfg->topic, topic); sendMsg2(top, msg, false); } @@ -67,35 +59,6 @@ class mqtt { 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() { //DPRINT(F("m")); if(!mClient->connected()) @@ -112,17 +75,17 @@ class mqtt { if(strlen(mDevName) > 0) { // der Server und der Port müssen neu gesetzt werden, // 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); - if((strlen(mUser) > 0) && (strlen(mPwd) > 0)) - mClient->connect(mDevName, mUser, mPwd); + if((strlen(mCfg->user) > 0) && (strlen(mCfg->pwd) > 0)) + mClient->connect(mDevName, mCfg->user, mCfg->pwd); else mClient->connect(mDevName); } // ein Subscribe ist nur nach einem connect notwendig char topic[MQTT_TOPIC_LEN + 13 ]; // "/devcontrol/#" --> + 6 byte // 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)); mClient->subscribe(topic); // subscribe to mTopic + "/devcontrol/#" } @@ -132,11 +95,7 @@ class mqtt { PubSubClient *mClient; bool mAddressSet; - uint16_t mPort; - char mBroker[MQTT_ADDR_LEN]; - char mUser[MQTT_USER_LEN]; - char mPwd[MQTT_PWD_LEN]; - char mTopic[MQTT_TOPIC_LEN]; + mqttConfig_t *mCfg; char mDevName[DEVNAME_LEN]; };