From 1560c48efea98135268a07ef56a98f33cb27fee7 Mon Sep 17 00:00:00 2001 From: Hieromon Ikasamo Date: Sun, 7 Apr 2019 21:17:42 +0900 Subject: [PATCH] Revised the process --- examples/mqttRSSI/mqttRSSI.ino | 80 +++++++++++++++++----------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/examples/mqttRSSI/mqttRSSI.ino b/examples/mqttRSSI/mqttRSSI.ino index 15d69b4..31e9a8e 100644 --- a/examples/mqttRSSI/mqttRSSI.ino +++ b/examples/mqttRSSI/mqttRSSI.ino @@ -173,6 +173,7 @@ String userKey; String apiKey; String apid; String hostName; +bool uniqueid; unsigned int updateInterval = 0; unsigned long lastPub = 0; @@ -227,14 +228,32 @@ int getStrength(uint8_t points) { return points ? static_cast(rssi / points) : 0; } +void getParams(AutoConnectAux& aux) { + serverName = aux["mqttserver"].value; + serverName.trim(); + channelId = aux["channelid"].value; + channelId.trim(); + userKey = aux["userkey"].value; + userKey.trim(); + apiKey = aux["apikey"].value; + apiKey.trim(); + AutoConnectRadio& period = aux["period"].as(); + updateInterval = period.value().substring(0, 2).toInt() * 1000; + uniqueid = aux["uniqueid"].as().checked; + hostName = aux["hostname"].value; + hostName.trim(); +} + // Load parameters saved with saveParams from SPIFFS into the // elements defined in /mqtt_setting JSON. String loadParams(AutoConnectAux& aux, PageArgument& args) { (void)(args); File param = SPIFFS.open(PARAM_FILE, "r"); if (param) { - if (aux.loadElement(param)) + if (aux.loadElement(param)) { + getParams(aux); Serial.println(PARAM_FILE " loaded"); + } else Serial.println(PARAM_FILE " failed to load"); param.close(); @@ -257,33 +276,14 @@ String saveParams(AutoConnectAux& aux, PageArgument& args) { // The 'where()' function returns the AutoConnectAux that caused // the transition to this page. AutoConnectAux& mqtt_setting = portal.where(); - + getParams(mqtt_setting); AutoConnectInput& mqttserver = mqtt_setting["mqttserver"].as(); - serverName = mqttserver.value; - serverName.trim(); - - channelId = mqtt_setting["channelid"].value; - channelId.trim(); - - userKey = mqtt_setting["userkey"].value; - userKey.trim(); - - apiKey = mqtt_setting["apikey"].value; - apiKey.trim(); - - AutoConnectRadio& period = mqtt_setting["period"].as(); - updateInterval = period.value().substring(0, 2).toInt() * 1000; - - bool uniqueid = mqtt_setting["uniqueid"].as().checked; - - hostName = mqtt_setting["hostname"].value; - hostName.trim(); // The entered value is owned by AutoConnectAux of /mqtt_setting. // To retrieve the elements of /mqtt_setting, it is necessary to get // the AutoConnectAux object of /mqtt_setting. File param = SPIFFS.open(PARAM_FILE, "w"); - mqtt_setting.saveElement(param, { "mqttserver", "channelid", "userkey", "apikey", "uniqueid", "hostname" }); + mqtt_setting.saveElement(param, { "mqttserver", "channelid", "userkey", "apikey", "uniqueid", "period", "hostname" }); param.close(); // Echo back saved parameters to AutoConnectAux page. @@ -351,14 +351,14 @@ void setup() { if (portal.load(FPSTR(AUX_mqtt_setting))) { AutoConnectAux& mqtt_setting = *portal.aux(AUX_SETTING_URI); - AutoConnectCheckbox& uniqueidElm = mqtt_setting["uniqueid"].as(); - AutoConnectInput& hostnameElm = mqtt_setting["hostname"].as(); - if (uniqueidElm.checked) { + PageArgument args; + loadParams(mqtt_setting, args); + if (uniqueid) { config.apid = String("ESP") + "-" + String(GET_CHIPID(), HEX); Serial.println("apid set to " + config.apid); } - if (hostnameElm.value.length()) { - config.hostName = hostnameElm.value; + if (hostName.length()) { + config.hostName = hostName; Serial.println("hostname set to " + config.hostName); } config.bootUri = AC_ONBOOTURI_HOME; @@ -378,10 +378,7 @@ void setup() { } else { Serial.println("connection failed:" + String(WiFi.status())); - while (1) { - delay(100); - yield(); - } + Serial.println("Needs WiFi connection to start publishing messages"); } WiFiWebServer& webServer = portal.host(); @@ -390,16 +387,19 @@ void setup() { } void loop() { - portal.handleClient(); - if (updateInterval > 0) { - if (millis() - lastPub > updateInterval) { - if (!mqttClient.connected()) { - mqttConnect(); + if (WiFi.status() == WL_CONNECTED) { + // MQTT publish control + if (updateInterval > 0) { + if (millis() - lastPub > updateInterval) { + if (!mqttClient.connected()) { + mqttConnect(); + } + String item = String("field1=") + String(getStrength(7)); + mqttPublish(item); + mqttClient.loop(); + lastPub = millis(); } - String item = String("field1=") + String(getStrength(7)); - mqttPublish(item); - mqttClient.loop(); - lastPub = millis(); } } + portal.handleClient(); }