diff --git a/things.ino b/things.ino index a6f08ff..3963d30 100644 --- a/things.ino +++ b/things.ino @@ -19,16 +19,16 @@ extern "C" { //#define DHTTYPE DHT21 // DHT21 (AM2301) #define DHTTYPE DHT22 // DHT22 (AM2302) -//define your default values here, if there are different values in config.json, they are overwritten. +// define your default values here, if there are different values in config.json, they are overwritten. char mqtt_server[40]; char mqtt_port[6] = "1883"; char mqtt_topic[34] = "OutTopic"; -//flag for saving data +// flag for saving data bool shouldSaveConfig = false; -//callback notifying us of the need to save config -void saveConfigCallback () { +// callback notifying us of the need to save config +void saveConfigCallback() { Serial.println("Should save config"); shouldSaveConfig = true; } @@ -67,7 +67,7 @@ void configModeCallback (WiFiManager *myWiFiManager) { } bool isEqual(float a, float b, float epsilon=0.001) { - return fabs(a - b) <= epsilon * fabs(a); + return fabs(a - b) <= epsilon * fabs(a); } void read_sensor() { @@ -96,20 +96,20 @@ void read_sensor() { dtostrf(temperature, 1, 2, str_temperature); dtostrf(heatindex, 1, 2, str_heatindex); - char pub_topic[34]; + char pub_topic[34]; if (!isEqual(humidity, previousHumidity)) { - strcpy(pub_topic,mqtt_topic); - strcat(pub_topic,"/humidity"); + strcpy(pub_topic,mqtt_topic); + strcat(pub_topic,"/humidity"); client.publish(pub_topic, str_humidity); } if (!isEqual(temperature, previousTemperature)) { - strcpy(pub_topic,mqtt_topic); - strcat(pub_topic,"/temperature"); + strcpy(pub_topic,mqtt_topic); + strcat(pub_topic,"/temperature"); client.publish(pub_topic, str_temperature); } if (!isEqual(heatindex, previousHeatindex)) { - strcpy(pub_topic,mqtt_topic); - strcat(pub_topic,"/heatindex"); + strcpy(pub_topic,mqtt_topic); + strcat(pub_topic,"/heatindex"); client.publish(pub_topic, str_heatindex); } @@ -151,9 +151,9 @@ void reconnect() { while (!client.connected()) { Serial.print("Attempting MQTT connection..."); // Attempt to connect - char pub_topic[34]; - strcpy(pub_topic,mqtt_topic); - strcat(pub_topic,"/online"); + char pub_topic[34]; + strcpy(pub_topic,mqtt_topic); + strcat(pub_topic,"/online"); if (client.connect(wifi_station_get_hostname(), pub_topic, MQTTQOS1, true, "0")) { Serial.println("connected"); // Once connected, publish an announcement... @@ -170,18 +170,18 @@ void reconnect() { } } - int stringToNumber(String thisString) { - int i, value, length; - length = thisString.length(); - char blah[(length + 1)]; - for (i = 0; i < length; i++) { - blah[i] = thisString.charAt(i); - } - blah[i] = 0; - value = atoi(blah); - return value; - } - +int stringToNumber(String thisString) { + int i, value, length; + length = thisString.length(); + char blah[(length + 1)]; + for (i = 0; i < length; i++) { + blah[i] = thisString.charAt(i); + } + blah[i] = 0; + value = atoi(blah); + return value; +} + void setup() { // put your setup code here, to run once: Serial.begin(9600); @@ -191,52 +191,48 @@ void setup() { // start ticker with 0.5 because we start in AP mode and try to connect ticker.attach(0.6, toggle_led); + //clean FS, for testing + //SPIFFS.format(); - //clean FS, for testing - //SPIFFS.format(); + //read configuration from FS json + Serial.println("mounting FS..."); - //read configuration from FS json - Serial.println("mounting FS..."); - - if (SPIFFS.begin()) { - Serial.println("mounted file system"); - if (SPIFFS.exists("/config.json")) { - //file exists, reading and loading - Serial.println("reading config file"); - File configFile = SPIFFS.open("/config.json", "r"); - if (configFile) { - Serial.println("opened config file"); - size_t size = configFile.size(); - // Allocate a buffer to store contents of the file. - std::unique_ptr buf(new char[size]); - - configFile.readBytes(buf.get(), size); - DynamicJsonBuffer jsonBuffer; - JsonObject& json = jsonBuffer.parseObject(buf.get()); - json.printTo(Serial); - if (json.success()) { - Serial.println("\nparsed json"); - - strcpy(mqtt_server, json["mqtt_server"]); - strcpy(mqtt_port, json["mqtt_port"]); - strcpy(mqtt_topic, json["mqtt_topic"]); - - } else { - Serial.println("failed to load json config"); - } - } + if (SPIFFS.begin()) { + Serial.println("mounted file system"); + if (SPIFFS.exists("/config.json")) { + //file exists, reading and loading + Serial.println("reading config file"); + File configFile = SPIFFS.open("/config.json", "r"); + if (configFile) { + Serial.println("opened config file"); + size_t size = configFile.size(); + // Allocate a buffer to store contents of the file. + std::unique_ptr buf(new char[size]); + configFile.readBytes(buf.get(), size); + DynamicJsonBuffer jsonBuffer; + JsonObject& json = jsonBuffer.parseObject(buf.get()); + json.printTo(Serial); + if (json.success()) { + Serial.println("\nparsed json"); + strcpy(mqtt_server, json["mqtt_server"]); + strcpy(mqtt_port, json["mqtt_port"]); + strcpy(mqtt_topic, json["mqtt_topic"]); + } else { + Serial.println("failed to load json config"); } - } else { - Serial.println("failed to mount FS"); } - //end read + } + } else { + Serial.println("failed to mount FS"); + } + //end read - // The extra parameters to be configured (can be either global or just in the setup) - // After connecting, parameter.getValue() will get you the configured value - // id/name placeholder/prompt default length - WiFiManagerParameter custom_mqtt_server("server", "mqtt server", mqtt_server, 40); - WiFiManagerParameter custom_mqtt_port("port", "mqtt port", mqtt_port, 5); - WiFiManagerParameter custom_mqtt_topic("topic", "mqtt topic", mqtt_topic, 32); + // The extra parameters to be configured (can be either global or just in the setup) + // After connecting, parameter.getValue() will get you the configured value + // id/name placeholder/prompt default length + WiFiManagerParameter custom_mqtt_server("server", "mqtt server", mqtt_server, 40); + WiFiManagerParameter custom_mqtt_port("port", "mqtt port", mqtt_port, 5); + WiFiManagerParameter custom_mqtt_topic("topic", "mqtt topic", mqtt_topic, 32); //WiFiManager //Local intialization. Once its business is done, there is no need to keep it around @@ -247,13 +243,13 @@ void setup() { //set callback that gets called when connecting to previous WiFi fails, and enters Access Point mode wifiManager.setAPCallback(configModeCallback); - //set config save notify callback - wifiManager.setSaveConfigCallback(saveConfigCallback); + //set config save notify callback + wifiManager.setSaveConfigCallback(saveConfigCallback); - //add all your parameters here - wifiManager.addParameter(&custom_mqtt_server); - wifiManager.addParameter(&custom_mqtt_port); - wifiManager.addParameter(&custom_mqtt_topic); + //add all your parameters here + wifiManager.addParameter(&custom_mqtt_server); + wifiManager.addParameter(&custom_mqtt_port); + wifiManager.addParameter(&custom_mqtt_topic); //fetches ssid and pass and tries to connect //if it does not connect it starts an access point with the specified name @@ -272,30 +268,30 @@ void setup() { //keep LED on digitalWrite(BUILTIN_LED, LOW); - //read updated parameters - strcpy(mqtt_server, custom_mqtt_server.getValue()); - strcpy(mqtt_port, custom_mqtt_port.getValue()); - strcpy(mqtt_topic, custom_mqtt_topic.getValue()); + //read updated parameters + strcpy(mqtt_server, custom_mqtt_server.getValue()); + strcpy(mqtt_port, custom_mqtt_port.getValue()); + strcpy(mqtt_topic, custom_mqtt_topic.getValue()); - //save the custom parameters to FS - if (shouldSaveConfig) { - Serial.println("saving config"); - DynamicJsonBuffer jsonBuffer; - JsonObject& json = jsonBuffer.createObject(); - json["mqtt_server"] = mqtt_server; - json["mqtt_port"] = mqtt_port; - json["mqtt_topic"] = mqtt_topic; + //save the custom parameters to FS + if (shouldSaveConfig) { + Serial.println("saving config"); + DynamicJsonBuffer jsonBuffer; + JsonObject& json = jsonBuffer.createObject(); + json["mqtt_server"] = mqtt_server; + json["mqtt_port"] = mqtt_port; + json["mqtt_topic"] = mqtt_topic; - File configFile = SPIFFS.open("/config.json", "w"); - if (!configFile) { - Serial.println("failed to open config file for writing"); - } + File configFile = SPIFFS.open("/config.json", "w"); + if (!configFile) { + Serial.println("failed to open config file for writing"); + } - json.printTo(Serial); - json.printTo(configFile); - configFile.close(); - //end save - } + json.printTo(Serial); + json.printTo(configFile); + configFile.close(); + //end save + } client.setServer(mqtt_server, stringToNumber(mqtt_port)); client.setCallback(callback); @@ -304,15 +300,15 @@ void setup() { // Initial read read_sensor(); - char pub_topic[34]; - strcpy(pub_topic,mqtt_topic); - strcat(pub_topic,"/humidity"); + char pub_topic[34]; + strcpy(pub_topic,mqtt_topic); + strcat(pub_topic,"/humidity"); client.publish(pub_topic, str_humidity); - strcpy(pub_topic,mqtt_topic); - strcat(pub_topic,"/temperature"); + strcpy(pub_topic,mqtt_topic); + strcat(pub_topic,"/temperature"); client.publish(pub_topic, str_temperature); - strcpy(pub_topic,mqtt_topic); - strcat(pub_topic,"/heatindex"); + strcpy(pub_topic,mqtt_topic); + strcat(pub_topic,"/heatindex"); client.publish(pub_topic, str_heatindex); // Handle http requests