diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e46691b..c03cf2a2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,12 +3,20 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). -## [Unreleased] +## [1.4.0] 2016-12-31 ### Added - Domoticz support via MQTT (https://www.domoticz.com/wiki/MQTT) +- Support for static IP connections + +### Fixed +- #16 Enforce minimum password strength in web interface ### Changed - Using default client_id provided by AsyncMqttClient +- Allow up to 5 different WIFI networks + +### Removed +- File system version file ## [1.3.1] 2016-12-31 ### Fixed @@ -126,8 +134,6 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Changed - Moving wifi management to library (JustWifi) - -### Changed - Split code into modules ## [0.9.6] 2016-08-12 diff --git a/README.md b/README.md index 4a4fbd21..b16af092 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ # ESPurna Firmware ESPurna ("spark" in Catalan) is a custom firmware for ESP8266 based smart switches. -It was originally developed with the **[IteadStudio Sonoff][1]** in mind but now it supports a growing number of ESP8266-based boards. +It was originally developed with the **[IteadStudio Sonoff](https://www.itead.cc/sonoff-wifi-wireless-switch.html)** in mind but now it supports a growing number of ESP8266-based boards. It uses the Arduino Core for ESP8266 framework and a number of 3rd party libraries. -**Current Release Version is 1.3.1**, read the [changelog](CHANGELOG.md). +**Current Release Version is 1.4.0**, read the [changelog](CHANGELOG.md). ## Features * Support for **multiple ESP8266-based boards** ([check list](#supported-hardware)) -* Wifi **AP Mode** or **STA mode** with **multiple network definitions** +* Wifi **AP Mode** or **STA mode** with **multiple network definitions** and static IP support * **MQTT** enabled * Switch on/off and toggle relays * LED notifications @@ -17,7 +17,7 @@ It uses the Arduino Core for ESP8266 framework and a number of 3rd party librari * DHT11 / DHT22 / DHT21 / AM2301 * DS18B20 * HLW8012 (Sonoff POW) - * Non-invasive current sensor using the [EmonLiteESP Library][3] (requires some hacking) + * Non-invasive current sensor using the [EmonLiteESP Library](https://bitbucket.org/xoseperez/emonliteesp) (requires some hacking) * Fast asynchronous **HTTP Server** * Basic authentication * Web-based configuration @@ -28,8 +28,9 @@ It uses the Arduino Core for ESP8266 framework and a number of 3rd party librari * **Command line configuration** * **Over-The-Air** (OTA) updates even for 1Mb boards * Manually from PlatformIO or Arduino Inside - * Automatic updates through the [NoFUSS Library][2] + * Automatic updates through the [NoFUSS Library](https://bitbucket.org/xoseperez/nofuss) * **Alexa** integration (requires staging version of Arduino Core for ESP8266) +* [**Domoticz**](https://domoticz.com/) integration via MQTT ## Documentation @@ -61,8 +62,3 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . - - -[1]: https://www.itead.cc/sonoff-wifi-wireless-switch.html -[2]: https://bitbucket.org/xoseperez/nofuss -[3]: https://bitbucket.org/xoseperez/emonliteesp diff --git a/code/espurna/config/general.h b/code/espurna/config/general.h index c153bbdf..3d06436b 100644 --- a/code/espurna/config/general.h +++ b/code/espurna/config/general.h @@ -6,7 +6,6 @@ #define HOSTNAME DEVICE #define BUFFER_SIZE 1024 #define HEARTBEAT_INTERVAL 300000 -#define FS_VERSION_FILE "/fsversion" //-------------------------------------------------------------------------------- // RELAY diff --git a/code/espurna/config/version.h b/code/espurna/config/version.h index ab3295d3..1fccd043 100644 --- a/code/espurna/config/version.h +++ b/code/espurna/config/version.h @@ -1,4 +1,4 @@ #define APP_NAME "ESPurna" -#define APP_VERSION "1.3.1" +#define APP_VERSION "1.4.0" #define APP_AUTHOR "xose.perez@gmail.com" #define APP_WEBSITE "http://tinkerman.cat" diff --git a/code/espurna/data/fsversion b/code/espurna/data/fsversion deleted file mode 100644 index f0bb29e7..00000000 --- a/code/espurna/data/fsversion +++ /dev/null @@ -1 +0,0 @@ -1.3.0 diff --git a/code/espurna/data/index.html.gz b/code/espurna/data/index.html.gz index d879c641..29724261 100644 Binary files a/code/espurna/data/index.html.gz and b/code/espurna/data/index.html.gz differ diff --git a/code/espurna/data/script.js.gz b/code/espurna/data/script.js.gz index 046d536b..777cb053 100644 Binary files a/code/espurna/data/script.js.gz and b/code/espurna/data/script.js.gz differ diff --git a/code/espurna/data/style.css.gz b/code/espurna/data/style.css.gz index 1ed7c596..c6e249dc 100644 Binary files a/code/espurna/data/style.css.gz and b/code/espurna/data/style.css.gz differ diff --git a/code/espurna/espurna.ino b/code/espurna/espurna.ino index 24b6ae57..874b6744 100644 --- a/code/espurna/espurna.ino +++ b/code/espurna/espurna.ino @@ -28,7 +28,7 @@ along with this program. If not, see . #include #include #include -#include "FS.h" + void mqttRegister(void (*callback)(unsigned int, const char *, const char *)); template bool setSetting(const String& key, T value); template String getSetting(const String& key, T defaultValue); @@ -48,18 +48,6 @@ void hardwareSetup() { SPIFFS.begin(); } -void getFSVersion(char * buffer) { - File h = SPIFFS.open(FS_VERSION_FILE, "r"); - if (!h) { - DEBUG_MSG("[SPIFFS] Could not open file system version file.\n"); - strcpy(buffer, APP_VERSION); - return; - } - size_t size = h.size(); - h.readBytes(buffer, size - 1); - h.close(); -} - void hardwareLoop() { // Heartbeat diff --git a/code/espurna/mqtt.ino b/code/espurna/mqtt.ino index 8b9dc84a..d47d5f58 100644 --- a/code/espurna/mqtt.ino +++ b/code/espurna/mqtt.ino @@ -84,9 +84,6 @@ void _mqttOnConnect(bool sessionPresent) { // Say hello and report our IP and VERSION mqttSend(MQTT_IP_TOPIC, getIP().c_str()); mqttSend(MQTT_VERSION_TOPIC, APP_VERSION); - char buffer[50]; - getFSVersion(buffer); - mqttSend(MQTT_FSVERSION_TOPIC, buffer); // Send connect event to subscribers for (unsigned char i = 0; i < _mqtt_callbacks.size(); i++) { diff --git a/code/espurna/web.ino b/code/espurna/web.ino index 327dcbe7..1905d166 100644 --- a/code/espurna/web.ino +++ b/code/espurna/web.ino @@ -177,6 +177,7 @@ void _wsParse(uint32_t client_id, uint8_t * payload, size_t length) { } if (value != getSetting(key)) { + //DEBUG_MSG("[WEBSOCKET] Storing %s = %s\n", key.c_str(), value.c_str()); setSetting(key, value); dirty = true; if (key.startsWith("mqtt")) dirtyMQTT = true; diff --git a/code/gulpfile.js b/code/gulpfile.js index 181cfeb4..1bf02633 100644 --- a/code/gulpfile.js +++ b/code/gulpfile.js @@ -91,4 +91,4 @@ gulp.task('html', function() { /* Build file system */ gulp.task('buildfs_split', ['clean', 'files', 'html']); gulp.task('buildfs_inline', ['clean', 'files', 'inline']); -gulp.task('default', ['buildfs_inline']); +gulp.task('default', ['buildfs_split']); diff --git a/code/html/fsversion b/code/html/fsversion deleted file mode 100644 index 3a3cd8cc..00000000 --- a/code/html/fsversion +++ /dev/null @@ -1 +0,0 @@ -1.3.1 diff --git a/code/html/index.html b/code/html/index.html index 3e9718ae..ee8ab0c2 100644 --- a/code/html/index.html +++ b/code/html/index.html @@ -388,12 +388,12 @@
-
+
-
+
diff --git a/code/pio_hooks.py b/code/pio_hooks.py index 7abf6075..5b818421 100644 --- a/code/pio_hooks.py +++ b/code/pio_hooks.py @@ -5,24 +5,7 @@ import socket from SCons.Script import DefaultEnvironment env = DefaultEnvironment() -def is_valid_ip(ip): - try: - socket.inet_aton(ip) - return True - except socket.error: - return False - def before_build_spiffs(source, target, env): - env.Execute("gulp buildfs_split") - -def before_upload(source, target, env): - upload_port = env.get('UPLOAD_PORT', False) - if upload_port and upload_port[0] == '/': - cmd = ["mosquitto_sub", "-t", upload_port, "-h", "192.168.1.10", "-N", "-C", "1"] - ip = subprocess.check_output(cmd) - if is_valid_ip(ip): - env['UPLOAD_PORT'] = '"' + ip + '"' + env.Execute("gulp") -#env.AddPreAction("uploadfs", before_upload) -#env.AddPreAction("upload", before_upload) env.AddPreAction(".pioenvs/%s/spiffs.bin" % env['PIOENV'], before_build_spiffs)