From e5ab0293c5fc9b9cdca81c05eef7f7161bd77cb9 Mon Sep 17 00:00:00 2001 From: Thorsten von Eicken Date: Sat, 20 Oct 2018 22:46:17 -0700 Subject: [PATCH 1/8] serial bridge marginally working --- code/espurna/config/dependencies.h | 11 ++ code/espurna/config/device.h | 1 + code/espurna/config/general.h | 16 +++ code/espurna/espurna.ino | 3 + code/espurna/serialbridge.ino | 201 +++++++++++++++++++++++++++++ code/platformio.ini | 31 +++++ 6 files changed, 263 insertions(+) create mode 100644 code/espurna/serialbridge.ino diff --git a/code/espurna/config/dependencies.h b/code/espurna/config/dependencies.h index 6bc3f5ab62..88337dc6b1 100644 --- a/code/espurna/config/dependencies.h +++ b/code/espurna/config/dependencies.h @@ -31,6 +31,17 @@ #define TERMINAL_SUPPORT 0 #undef DEBUG_SERIAL_SUPPORT #define DEBUG_SERIAL_SUPPORT 0 +#undef SERIAL_BRIDGE_SUPPORT +#define SERIAL_BRIDGE_SUPPORT 0 +#endif + +#if SERIAL_BRIDGE_SUPPORT +#undef TERMINAL_SUPPORT +#define TERMINAL_SUPPORT 0 +#undef DEBUG_SERIAL_SUPPORT +#define DEBUG_SERIAL_SUPPORT 0 +#undef UART_MQTT_SUPPORT +#define UART_MQTT_SUPPORT 0 #endif #if DOMOTICZ_SUPPORT diff --git a/code/espurna/config/device.h b/code/espurna/config/device.h index fe94841e9e..6ae96eeb44 100644 --- a/code/espurna/config/device.h +++ b/code/espurna/config/device.h @@ -160,6 +160,7 @@ enum devices { defined(TONBUX_MOSQUITO_KILLER) || \ defined(TONBUX_POWERSTRIP02) || \ defined(TONBUX_XSSSA06) || \ + defined(WEMOS_D1_MINI) || \ defined(WEMOS_D1_MINI_RELAYSHIELD) || \ defined(WION_50055) || \ defined(WORKCHOICE_ECOPLUG) || \ diff --git a/code/espurna/config/general.h b/code/espurna/config/general.h index 40cd6a69e1..b73f3b64e8 100644 --- a/code/espurna/config/general.h +++ b/code/espurna/config/general.h @@ -575,6 +575,22 @@ #define UART_MQTT_BUFFER_SIZE 100 // UART buffer size +// ----------------------------------------------------------------------------- +// SERIAL BRIDGE (UART <-> TCP) +// ----------------------------------------------------------------------------- + +#ifndef SERIAL_BRIDGE_SUPPORT +#define SERIAL_BRIDGE_SUPPORT 0 // No support by default +#endif + +#ifndef SERIAL_BRIDGE_BAUDRATE +#define SERIAL_BRIDGE_BAUDRATE 115200 // Serial speed +#endif + +#ifndef SERIAL_BRIDGE_PORT +#define SERIAL_BRIDGE_PORT Serial // Hardware serial port (no real choice) +#endif + // ----------------------------------------------------------------------------- // MQTT // ----------------------------------------------------------------------------- diff --git a/code/espurna/espurna.ino b/code/espurna/espurna.ino index 0cb16bec4d..959aa391de 100644 --- a/code/espurna/espurna.ino +++ b/code/espurna/espurna.ino @@ -190,6 +190,9 @@ void setup() { #if UART_MQTT_SUPPORT uartmqttSetup(); #endif + #if SERIAL_BRIDGE_SUPPORT + serialBridgeSetup(); + #endif // 3rd party code hook #if USE_EXTRA diff --git a/code/espurna/serialbridge.ino b/code/espurna/serialbridge.ino new file mode 100644 index 0000000000..814faa2a85 --- /dev/null +++ b/code/espurna/serialbridge.ino @@ -0,0 +1,201 @@ +/* + +SERIAL_BRIDGE MODULE + +Copyright (C) 2018 by Throsten von Eicken + +Module key prefix: sbr + +*/ + +#if SERIAL_BRIDGE_SUPPORT + +// ----------------------------------------------------------------------------- +// Private +// ----------------------------------------------------------------------------- + +typedef struct { + AsyncClient *client; // handle to ESPAsyncTCP client + uint8_t *rxBuf; // malloc'ed buffer with received characters + uint16_t rxBufSize; // size of buffer in bytes + uint16_t rxBufNext; // next char in buffer to send to UART +} SbrClient; + +static std::vector _sbr_clients; // a list to hold all clients + +// helper functions + +// _sbrRxBufToUart writes cahrs from an rx buffer to the uart. +// The volatile is there to foil the ino-to-cpp converter (sigh). +static volatile void _sbrRxBufToUart(SbrClient *sbr_cli, int writable) { + int w = sbr_cli->rxBufSize - sbr_cli->rxBufNext; + if (w > writable) w = writable; + int n = SERIAL_BRIDGE_PORT.write(sbr_cli->rxBuf+sbr_cli->rxBufNext, w); + if (n == w) { + free(sbr_cli->rxBuf); + sbr_cli->rxBuf = 0; + } else { + sbr_cli->rxBufNext += n; + } +} + +// client socket event handlers + +static void _sbrHandleError(void* arg, AsyncClient* client, int8_t error) { + DEBUG_MSG_P(PSTR("[SERIAL_BRIDGE] conn err client %s: %s\n"), + client->remoteIP().toString().c_str(), + client->errorToString(error)); +} + +static void _sbrHandleData(void* arg, AsyncClient* client, void *data, size_t len) { + SbrClient *sbr_cli = (SbrClient*)arg; + DEBUG_MSG_P(PSTR("[SERIAL_BRIDGE] rcv client %s: %d bytes\n"), + client->remoteIP().toString().c_str(), len); + size_t writable = SERIAL_BRIDGE_PORT.availableForWrite(); + // if we have buffered chars take this opportunity to stuff some into the uart + if (writable > 0 && sbr_cli->rxBuf != 0) { + _sbrRxBufToUart(sbr_cli, writable); + writable = SERIAL_BRIDGE_PORT.availableForWrite(); + } + // if we can write all to uart then we're done + if (writable > len) { + SERIAL_BRIDGE_PORT.write((uint8_t*)data, len); + return; + } + // write what we can, buffer the rest + if (writable > 0) { + client->ackLater(); + SERIAL_BRIDGE_PORT.write((uint8_t *)data, writable); + client->ack(writable); + } else { + client->ackLater(); + } + if (sbr_cli->rxBuf == 0) { + sbr_cli->rxBufSize = len-writable; + sbr_cli->rxBuf = (uint8_t *)calloc(1, sbr_cli->rxBufSize); + sbr_cli->rxBufNext = 0; + memcpy(sbr_cli->rxBuf, (uint8_t*)data+writable, sbr_cli->rxBufSize); + } else { + int sz = sbr_cli->rxBufSize + len-writable; + sbr_cli->rxBuf = (uint8_t *)realloc(sbr_cli->rxBuf, sz); + memcpy(sbr_cli->rxBuf+sbr_cli->rxBufSize, (uint8_t*)data+writable, len-writable); + sbr_cli->rxBufSize = sz; + } +} + +static void _sbrHandleDisconnect(void* arg, AsyncClient* client) { + DEBUG_MSG_P(PSTR("[SERIAL_BRIDGE] client %s disconnect\n"), + client->remoteIP().toString().c_str()); +} + +static void _sbrHandleTimeOut(void* arg, AsyncClient* client, uint32_t time) { + DEBUG_MSG_P(PSTR("[SERIAL_BRIDGE] client %s TCP timeout\n"), + client->remoteIP().toString().c_str()); +} + + +// server socket event handlers + +static void _sbrHandleNewClient(void* arg, AsyncClient* client) { + DEBUG_MSG_P(PSTR("[SERIAL_BRIDGE] connect from %s\n"), + client->remoteIP().toString().c_str()); + + // add to list + SbrClient *sbr_cli = (SbrClient*)calloc(1, sizeof(SbrClient)); + sbr_cli->client = client; + _sbr_clients.push_back(sbr_cli); + + // register events + client->onData(&_sbrHandleData, sbr_cli); + client->onError(&_sbrHandleError, sbr_cli); + client->onDisconnect(&_sbrHandleDisconnect, sbr_cli); + client->onTimeout(&_sbrHandleTimeOut, sbr_cli); +} + +bool _sbrKeyCheck(const char * key) { + return (strncmp(key, "sbr", 3) == 0); +} + + +// ----------------------------------------------------------------------------- +// SETUP & LOOP +// ----------------------------------------------------------------------------- + +// _sbrRecvUartCheck checks whether something arrived on the uart and tries to send it out on +// connected clients. It only pulls out of the uart receive buffer what it can send to all clients. +// The assumption here is that the interrupt handler's buffer is sufficient. +void _sbrRecvUartCheck() { + // check that we have connected clients and there's something to send + if (SERIAL_BRIDGE_PORT.peek() < 0) return; + if (_sbr_clients.empty()) { + // no client connected, drop incoming chars on the floor + while (SERIAL_BRIDGE_PORT.read() != -1) ; + return; + } + // we always send the same to all clients: determine minimum we can send to all + size_t min_sendable = SERIAL_BRIDGE_PORT.available(); + for (SbrClient* cli : _sbr_clients) { + if (cli->client->space() < min_sendable) { + min_sendable = cli->client->space(); + } + } + if (min_sendable <= 0) return; + // read from serial into buffer + char buf[min_sendable]; + for (size_t i=0; iclient->add(buf, min_sendable, 0); + if (n != min_sendable) { + DEBUG_MSG_P(PSTR("[SERIAL_BRIDGE] err client %s: will=%d sendable=%d\n"), + cli->client->remoteIP().toString().c_str(), n, min_sendable); + } + cli->client->send(); + } +} + +// _sbrRecvTCPCheck handles data that got received but couldn't be stuffed into the uart. +void _sbrRecvTCPCheck() { + for (SbrClient* cli : _sbr_clients) { + if (cli->rxBuf == 0) continue; + int writable = SERIAL_BRIDGE_PORT.availableForWrite(); + if (writable <= 0) continue; + // looks like we have something that we can write to the UART, so do it... + int w = cli->rxBufSize - cli->rxBufNext; + if (w > writable) w = writable; + int n = SERIAL_BRIDGE_PORT.write(cli->rxBuf+cli->rxBufNext, w); + if (n == w) { + free(cli->rxBuf); + cli->rxBuf = 0; + } else { + cli->rxBufNext += n; + } + } +} + +void _sbrLoop() { + _sbrRecvUartCheck(); + _sbrRecvTCPCheck(); +} + +void serialBridgeSetup() { + + // Init port + SERIAL_BRIDGE_PORT.setRxBufferSize(2000); // 173ms of buffering at 115200 baud... + SERIAL_BRIDGE_PORT.begin(SERIAL_BRIDGE_BAUDRATE); + + AsyncServer* server = new AsyncServer(2323); + server->onClient(&_sbrHandleNewClient, server); + server->begin(); + + // Register key check + settingsRegisterKeyCheck(_sbrKeyCheck); + + // Register loop + espurnaRegisterLoop(_sbrLoop); + +} + +#endif // SERIAL_BRIDGE_SUPPORT diff --git a/code/platformio.ini b/code/platformio.ini index 9c9602511b..1a4e1cccc0 100644 --- a/code/platformio.ini +++ b/code/platformio.ini @@ -2717,3 +2717,34 @@ upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} monitor_speed = ${common.monitor_speed} extra_scripts = ${common.extra_scripts} + + +;=========== ESP-LINK ========================================================================= + +[common-esp-link] +build_flags = -g -w -DMQTT_MAX_PACKET_SIZE=400 -DNO_GLOBAL_EEPROM ${sysenv.ESPURNA_FLAGS} + -DPIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY +build_flags_512k = ${common-esp-link.build_flags} -Wl,-Teagle.flash.512k0m1s.ld +build_flags_1m0m = ${common-esp-link.build_flags} -Wl,-Teagle.flash.1m0m1s.ld +build_flags_2m1m = ${common-esp-link.build_flags} -Wl,-Teagle.flash.2m1m4s.ld +build_flags_4m1m = ${common-esp-link.build_flags} -Wl,-Teagle.flash.4m1m4s.ld +build_flags_4m3m = ${common-esp-link.build_flags} -Wl,-Teagle.flash.4m3m4s.ld + +[env:esp-link] +platform = ${common.platform_latest} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = qio +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common-esp-link.build_flags_4m1m} -DWEMOS_D1_MINI + -DNOWSAUTHX + -DALEXA_SUPPORT=0 -DDOMOTICZ_SUPPORT=0 -DHOMEASSISTANT_SUPPORT=0 -DTERMINAL_SUPPORT=0 + -DTHINGSPEAK_SUPPORT=0 -DSCHEDULER_SUPPORT=0 -DWEB_SSL_ENABLED=0 + -DSERIAL_BRIDGE_SUPPORT=1 +; -DSPIFFS_SUPPORT=1 +; -DASYNC_TCP_SSL_ENABLED=1 +upload_speed = ${common.upload_speed_fast} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + From b933ec938dc5aaff584cf459594ba6d64646328d Mon Sep 17 00:00:00 2001 From: Thorsten von Eicken Date: Sun, 21 Oct 2018 22:35:05 -0700 Subject: [PATCH 2/8] serial bridge working --- code/devices/086_wifi_pico_12.json | 6 + code/espurna/config/dependencies.h | 8 +- code/espurna/config/device.h | 2 + code/espurna/debug.ino | 9 +- code/espurna/device.ino | 9 + code/espurna/serialbridge.ino | 116 +- code/html/devices.js | 3 +- code/memanalyzer.py | 0 code/package-lock.json | 1440 +++++++-------- code/platformio.ini | 2689 +++++++++++++++++++++++++++- 10 files changed, 3518 insertions(+), 764 deletions(-) create mode 100644 code/devices/086_wifi_pico_12.json mode change 100644 => 100755 code/memanalyzer.py diff --git a/code/devices/086_wifi_pico_12.json b/code/devices/086_wifi_pico_12.json new file mode 100644 index 0000000000..2752b661d9 --- /dev/null +++ b/code/devices/086_wifi_pico_12.json @@ -0,0 +1,6 @@ +{ + "board": 86, + "device": "WIFI_PICO_12", + "ledGPIO0": 0, + "ledLogic0": 1, +} diff --git a/code/espurna/config/dependencies.h b/code/espurna/config/dependencies.h index 88337dc6b1..c84514e981 100644 --- a/code/espurna/config/dependencies.h +++ b/code/espurna/config/dependencies.h @@ -36,10 +36,10 @@ #endif #if SERIAL_BRIDGE_SUPPORT -#undef TERMINAL_SUPPORT -#define TERMINAL_SUPPORT 0 -#undef DEBUG_SERIAL_SUPPORT -#define DEBUG_SERIAL_SUPPORT 0 +//#undef TERMINAL_SUPPORT +//#define TERMINAL_SUPPORT 0 +//#undef DEBUG_SERIAL_SUPPORT +//#define DEBUG_SERIAL_SUPPORT 0 #undef UART_MQTT_SUPPORT #define UART_MQTT_SUPPORT 0 #endif diff --git a/code/espurna/config/device.h b/code/espurna/config/device.h index 6ae96eeb44..cd9958e11a 100644 --- a/code/espurna/config/device.h +++ b/code/espurna/config/device.h @@ -106,6 +106,7 @@ enum devices { DEVICE_IWOOLE_LED_TABLE_LAMP, DEVICE_EXS_WIFI_RELAY_V50, DEVICE_BESTEK_MRJ1011, + DEVICE_WIFI_PICO_12, DEVICE_LAST @@ -162,6 +163,7 @@ enum devices { defined(TONBUX_XSSSA06) || \ defined(WEMOS_D1_MINI) || \ defined(WEMOS_D1_MINI_RELAYSHIELD) || \ + defined(WIFI_PICO_12) || \ defined(WION_50055) || \ defined(WORKCHOICE_ECOPLUG) || \ defined(XENON_SM_PW702U) || \ diff --git a/code/espurna/debug.ino b/code/espurna/debug.ino index 923a28ad4d..cec115c720 100644 --- a/code/espurna/debug.ino +++ b/code/espurna/debug.ino @@ -202,11 +202,10 @@ void debugSetup() { if (_dbg_serial_enabled) { - unsigned char port = getSetting("dbgPort", 0).toInt(); - if (0 == port) { - _dbg_port = Serial; - } else { - _dbg_port = Serial1; + unsigned char port = getSetting("dbgPort", 255).toInt(); + switch (port) { + case 0: _dbg_port = Serial; break; + case 1: _dbg_port = Serial1; break; } unsigned long speed = getSetting("dbgSpeed", DEBUG_SERIAL_SPEED).toInt(); diff --git a/code/espurna/device.ino b/code/espurna/device.ino index c3c6b5d793..a94b3f52c7 100644 --- a/code/espurna/device.ino +++ b/code/espurna/device.ino @@ -71,6 +71,15 @@ void _deviceLoad() { setSetting("rlyGPIO", 0, 5); setSetting("rlyType", 0, RELAY_TYPE_NORMAL); + #elif defined(WIFI_PICO_12) + + setSetting("board", DEVICE_WIFI_PICO_12); + setSetting("device", "WIFI_PICO_12"); + setSetting("fw", ESPURNA_BASIC); + + setSetting("ledGPIO", 0, 0); + setSetting("ledLogic", 0, GPIO_LOGIC_INVERSE); + #elif defined(ITEAD_SONOFF_BASIC) setSetting("board", DEVICE_ITEAD_SONOFF_BASIC); diff --git a/code/espurna/serialbridge.ino b/code/espurna/serialbridge.ino index 814faa2a85..5230b9d8b4 100644 --- a/code/espurna/serialbridge.ino +++ b/code/espurna/serialbridge.ino @@ -10,6 +10,10 @@ Module key prefix: sbr #if SERIAL_BRIDGE_SUPPORT +#define INFO DEBUG_MSG_P +#define DBG(...) +#define TRC(...) + // ----------------------------------------------------------------------------- // Private // ----------------------------------------------------------------------------- @@ -23,6 +27,8 @@ typedef struct { static std::vector _sbr_clients; // a list to hold all clients +static bool _sbr_overrun = false; // only warn once per overrun event + // helper functions // _sbrRxBufToUart writes cahrs from an rx buffer to the uart. @@ -30,66 +36,91 @@ static std::vector _sbr_clients; // a list to hold all clients static volatile void _sbrRxBufToUart(SbrClient *sbr_cli, int writable) { int w = sbr_cli->rxBufSize - sbr_cli->rxBufNext; if (w > writable) w = writable; + DBG(PSTR("[SERIAL_BRIDGE] writing %d buf->uart\n"), w); + TRC(PSTR("wr<%d>"), w); int n = SERIAL_BRIDGE_PORT.write(sbr_cli->rxBuf+sbr_cli->rxBufNext, w); - if (n == w) { + sbr_cli->rxBufNext += n; + if (sbr_cli->rxBufNext == sbr_cli->rxBufSize) { + DBG(PSTR("[SERIAL_BRIDGE] free 0x%x, cli %x\n"), sbr_cli->rxBuf, sbr_cli); free(sbr_cli->rxBuf); sbr_cli->rxBuf = 0; - } else { - sbr_cli->rxBufNext += n; + if (sbr_cli->client) // null if connection is already closed + sbr_cli->client->ack(sbr_cli->rxBufSize); } } // client socket event handlers static void _sbrHandleError(void* arg, AsyncClient* client, int8_t error) { - DEBUG_MSG_P(PSTR("[SERIAL_BRIDGE] conn err client %s: %s\n"), + INFO(PSTR("[SERIAL_BRIDGE] conn err client %s: %s\n"), client->remoteIP().toString().c_str(), client->errorToString(error)); } static void _sbrHandleData(void* arg, AsyncClient* client, void *data, size_t len) { SbrClient *sbr_cli = (SbrClient*)arg; - DEBUG_MSG_P(PSTR("[SERIAL_BRIDGE] rcv client %s: %d bytes\n"), - client->remoteIP().toString().c_str(), len); + DBG(PSTR("[SERIAL_BRIDGE] rcv client %s: %d bytes\n"), + client->remoteIP().toString().c_str(), len); size_t writable = SERIAL_BRIDGE_PORT.availableForWrite(); + TRC(PSTR("rx<%d/%d/%d>"), len, sbr_cli->rxBuf ? sbr_cli->rxBufSize - sbr_cli->rxBufNext : 0, writable); // if we have buffered chars take this opportunity to stuff some into the uart if (writable > 0 && sbr_cli->rxBuf != 0) { _sbrRxBufToUart(sbr_cli, writable); writable = SERIAL_BRIDGE_PORT.availableForWrite(); } // if we can write all to uart then we're done - if (writable > len) { + if (!sbr_cli->rxBuf && writable > len) { + TRC(PSTR("wr{%d}"), len); + DBG(PSTR("[SERIAL_BRIDGE] writing all %d to uart\n"), len); SERIAL_BRIDGE_PORT.write((uint8_t*)data, len); return; } - // write what we can, buffer the rest - if (writable > 0) { + // write what we can + if (!sbr_cli->rxBuf && writable > 0) { client->ackLater(); + TRC(PSTR("wr[%d]"), writable); + DBG(PSTR("[SERIAL_BRIDGE] writing %d to uart\n"), writable); SERIAL_BRIDGE_PORT.write((uint8_t *)data, writable); client->ack(writable); } else { + writable = 0; client->ackLater(); } - if (sbr_cli->rxBuf == 0) { + // buffer what we couldn't write + if (!sbr_cli->rxBuf) { + DBG(PSTR("[SERIAL_BRIDGE] new buffer %d\n"), len-writable); sbr_cli->rxBufSize = len-writable; sbr_cli->rxBuf = (uint8_t *)calloc(1, sbr_cli->rxBufSize); - sbr_cli->rxBufNext = 0; - memcpy(sbr_cli->rxBuf, (uint8_t*)data+writable, sbr_cli->rxBufSize); + if (sbr_cli->rxBuf != 0) { + DBG(PSTR("[SERIAL_BRIDGE] calloc 0x%x, cli %x\n"), sbr_cli->rxBuf, sbr_cli); + sbr_cli->rxBufNext = 0; + memcpy(sbr_cli->rxBuf, (uint8_t*)data+writable, sbr_cli->rxBufSize); + } else { + INFO(PSTR("[SERIAL_BRIDGE] calloc failed\n")); + } } else { + DBG(PSTR("[SERIAL_BRIDGE] append buffer %d\n"), len-writable); int sz = sbr_cli->rxBufSize + len-writable; sbr_cli->rxBuf = (uint8_t *)realloc(sbr_cli->rxBuf, sz); - memcpy(sbr_cli->rxBuf+sbr_cli->rxBufSize, (uint8_t*)data+writable, len-writable); - sbr_cli->rxBufSize = sz; + if (sbr_cli->rxBuf != 0) { + DBG(PSTR("[SERIAL_BRIDGE] realloc 0x%x, cli %x\n"), sbr_cli->rxBuf, sbr_cli); + memcpy(sbr_cli->rxBuf+sbr_cli->rxBufSize, (uint8_t*)data+writable, len-writable); + sbr_cli->rxBufSize = sz; + } else { + INFO(PSTR("[SERIAL_BRIDGE] realloc failed\n")); + } } } static void _sbrHandleDisconnect(void* arg, AsyncClient* client) { - DEBUG_MSG_P(PSTR("[SERIAL_BRIDGE] client %s disconnect\n"), + SbrClient *sbr_cli = (SbrClient*)arg; + INFO(PSTR("[SERIAL_BRIDGE] client %s disconnect\n"), client->remoteIP().toString().c_str()); + sbr_cli->client = 0; } static void _sbrHandleTimeOut(void* arg, AsyncClient* client, uint32_t time) { - DEBUG_MSG_P(PSTR("[SERIAL_BRIDGE] client %s TCP timeout\n"), + INFO(PSTR("[SERIAL_BRIDGE] client %s TCP timeout\n"), client->remoteIP().toString().c_str()); } @@ -97,7 +128,7 @@ static void _sbrHandleTimeOut(void* arg, AsyncClient* client, uint32_t time) { // server socket event handlers static void _sbrHandleNewClient(void* arg, AsyncClient* client) { - DEBUG_MSG_P(PSTR("[SERIAL_BRIDGE] connect from %s\n"), + INFO(PSTR("[SERIAL_BRIDGE] connect from %s\n"), client->remoteIP().toString().c_str()); // add to list @@ -126,20 +157,34 @@ bool _sbrKeyCheck(const char * key) { // The assumption here is that the interrupt handler's buffer is sufficient. void _sbrRecvUartCheck() { // check that we have connected clients and there's something to send - if (SERIAL_BRIDGE_PORT.peek() < 0) return; + if (SERIAL_BRIDGE_PORT.peek() < 0) { + SERIAL_BRIDGE_PORT.hasOverrun(); // clear flag in uart driver + _sbr_overrun = false; + return; + } if (_sbr_clients.empty()) { // no client connected, drop incoming chars on the floor while (SERIAL_BRIDGE_PORT.read() != -1) ; + SERIAL_BRIDGE_PORT.hasOverrun(); // clear flag in uart driver return; } + // warn about input overrun + if (!_sbr_overrun && SERIAL_BRIDGE_PORT.hasOverrun()) { + _sbr_overrun = true; + INFO(PSTR("[SERIAL_BRIDGE] uart input overrun\n")); + } // we always send the same to all clients: determine minimum we can send to all size_t min_sendable = SERIAL_BRIDGE_PORT.available(); + size_t avail = min_sendable; for (SbrClient* cli : _sbr_clients) { - if (cli->client->space() < min_sendable) { + if (!cli->client) continue; // already closed + if (!cli->client->canSend()) { + min_sendable = 0; + } else if (cli->client->space() < min_sendable) { min_sendable = cli->client->space(); } } - if (min_sendable <= 0) return; + if (min_sendable <= 0) { TRC(PSTR("tx{0/%d}"), avail); return; } // read from serial into buffer char buf[min_sendable]; for (size_t i=0; iclient) continue; // already closed size_t n = cli->client->add(buf, min_sendable, 0); - if (n != min_sendable) { - DEBUG_MSG_P(PSTR("[SERIAL_BRIDGE] err client %s: will=%d sendable=%d\n"), + if (n != min_sendable) { // should never occur.. + INFO(PSTR("[SERIAL_BRIDGE] err client %s: will=%d sendable=%d\n"), cli->client->remoteIP().toString().c_str(), n, min_sendable); + } else { + TRC(PSTR("tx<%d/%d>"), n, avail); + DBG(PSTR("[SERIAL_BRIDGE] sent %d bytes to cli %x\n"), n, cli); } - cli->client->send(); + if (!cli->client->send()) INFO(PSTR("[SERIAL_BRIDGE] send failed\n")); } } @@ -163,21 +212,27 @@ void _sbrRecvTCPCheck() { int writable = SERIAL_BRIDGE_PORT.availableForWrite(); if (writable <= 0) continue; // looks like we have something that we can write to the UART, so do it... - int w = cli->rxBufSize - cli->rxBufNext; - if (w > writable) w = writable; - int n = SERIAL_BRIDGE_PORT.write(cli->rxBuf+cli->rxBufNext, w); - if (n == w) { - free(cli->rxBuf); - cli->rxBuf = 0; + _sbrRxBufToUart(cli, writable); + } +} + +// _sbrGC garbage collects client descriptors that have no connection and no buffer +void _sbrGC() { + for (auto cli = _sbr_clients.begin(); cli != _sbr_clients.end(); ) { + if ((*cli)->client || (*cli)->rxBuf) { + cli++; // client connected or buffer still has data } else { - cli->rxBufNext += n; + cli = _sbr_clients.erase(cli); // no connection and no buffer: garbage collect } } } void _sbrLoop() { + if (!_sbr_clients.empty()) TRC("{"); _sbrRecvUartCheck(); _sbrRecvTCPCheck(); + _sbrGC(); + if (!_sbr_clients.empty()) TRC("}"); } void serialBridgeSetup() { @@ -186,6 +241,7 @@ void serialBridgeSetup() { SERIAL_BRIDGE_PORT.setRxBufferSize(2000); // 173ms of buffering at 115200 baud... SERIAL_BRIDGE_PORT.begin(SERIAL_BRIDGE_BAUDRATE); + _sbr_clients.clear(); AsyncServer* server = new AsyncServer(2323); server->onClient(&_sbrHandleNewClient, server); server->begin(); diff --git a/code/html/devices.js b/code/html/devices.js index ae42afb2ff..9102ea1455 100644 --- a/code/html/devices.js +++ b/code/html/devices.js @@ -83,5 +83,6 @@ {"board":82,"dbgSerial":0,"device":"STM_RELAY","rlyCount":2,"rlyProvider":4}, {"board":83,"btnGPIO0":13,"btnMode0":2,"btnRelay0":0,"curRatio":25740,"device":"VANZAVANZU_SMART_WIFI_PLUG_MINI","hlwCF1GPIO":14,"hlwCFGPIO":5,"hlwCurLevel":0,"hlwInt":2,"hlwSELGPIO":3,"ledGPIO0":2,"ledGPIO1":0,"ledLogic0":1,"ledLogic1":1,"ledMode1":4,"ledRelay1":0,"pwrRatio":3414290,"rlyGPIO0":15,"rlyType0":0,"volRatio":313400}, {"board":84,"device":"GENERIC_GEIGER_COUNTER","geiEnabled":1}, -{"board":85,"btnGPIO0":0,"device":"TINKERMAN_RFM69GW","rfm69CSGPIO":15,"rfm69Enabled":1,"rfm69HW":0,"rfm69IRQGPIO":5,"rfm69ResetGPIO":7} +{"board":85,"btnGPIO0":0,"device":"TINKERMAN_RFM69GW","rfm69CSGPIO":15,"rfm69Enabled":1,"rfm69HW":0,"rfm69IRQGPIO":5,"rfm69ResetGPIO":7}, +{"board":86,"device":"WIFI_PICO_12","ledGPIO0":0,"ledLogic0":1} ]} diff --git a/code/memanalyzer.py b/code/memanalyzer.py old mode 100644 new mode 100755 diff --git a/code/package-lock.json b/code/package-lock.json index 0d98891f3c..0da8181d0d 100644 --- a/code/package-lock.json +++ b/code/package-lock.json @@ -4,16 +4,22 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "JSV": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz", + "integrity": "sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c=", + "dev": true + }, "ajv": { "version": "5.5.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } }, "align-text": { @@ -22,9 +28,9 @@ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" }, "dependencies": { "kind-of": { @@ -33,7 +39,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -44,7 +50,7 @@ "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", "dev": true, "requires": { - "ansi-wrap": "0.1.0" + "ansi-wrap": "^0.1.0" } }, "ansi-cyan": { @@ -110,7 +116,7 @@ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "arr-diff": { @@ -173,7 +179,7 @@ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "dev": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": "~2.1.0" } }, "assert-plus": { @@ -230,13 +236,13 @@ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { "define-property": { @@ -245,7 +251,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -254,7 +260,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -263,7 +269,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -272,9 +278,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -286,7 +292,7 @@ "dev": true, "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "beeper": { @@ -313,7 +319,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -323,16 +329,16 @@ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -341,7 +347,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -358,7 +364,7 @@ "integrity": "sha512-ZswyIoBfFb3cVDsnZLLj2IDJ/0ppYdil/v2EGlZXvoefO689FokEmFEldhN5dV7R2QBxFneqTJOMIpfqhj+n0g==", "dev": true, "requires": { - "readable-stream": "2.3.6" + "readable-stream": "^2.3.6" }, "dependencies": { "isarray": { @@ -373,13 +379,13 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "string_decoder": { @@ -388,7 +394,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } } } @@ -399,7 +405,7 @@ "integrity": "sha1-yz0DnmmBOaRE/FdLJh1rOyz0TIk=", "dev": true, "requires": { - "glob": "7.1.3" + "glob": "^7.1.1" }, "dependencies": { "glob": { @@ -408,12 +414,12 @@ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.3.3", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "minimatch": { @@ -422,7 +428,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } } } @@ -439,15 +445,15 @@ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, "camel-case": { @@ -456,8 +462,8 @@ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", "dev": true, "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" + "no-case": "^2.2.0", + "upper-case": "^1.1.1" } }, "camelcase": { @@ -478,8 +484,8 @@ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", "dev": true, "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" } }, "chalk": { @@ -488,11 +494,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "cheerio": { @@ -501,22 +507,22 @@ "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", "dev": true, "requires": { - "css-select": "1.2.0", - "dom-serializer": "0.1.0", - "entities": "1.1.1", - "htmlparser2": "3.9.2", - "lodash.assignin": "4.2.0", - "lodash.bind": "4.2.1", - "lodash.defaults": "4.2.0", - "lodash.filter": "4.6.0", - "lodash.flatten": "4.4.0", - "lodash.foreach": "4.5.0", - "lodash.map": "4.6.0", - "lodash.merge": "4.6.1", - "lodash.pick": "4.4.0", - "lodash.reduce": "4.6.0", - "lodash.reject": "4.6.0", - "lodash.some": "4.6.0" + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash.assignin": "^4.0.9", + "lodash.bind": "^4.1.4", + "lodash.defaults": "^4.0.1", + "lodash.filter": "^4.4.0", + "lodash.flatten": "^4.2.0", + "lodash.foreach": "^4.3.0", + "lodash.map": "^4.4.0", + "lodash.merge": "^4.4.0", + "lodash.pick": "^4.2.1", + "lodash.reduce": "^4.4.0", + "lodash.reject": "^4.4.0", + "lodash.some": "^4.4.0" } }, "clap": { @@ -525,7 +531,7 @@ "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", "dev": true, "requires": { - "chalk": "1.1.3" + "chalk": "^1.1.3" } }, "class-utils": { @@ -534,10 +540,10 @@ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "define-property": { @@ -546,7 +552,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -557,7 +563,7 @@ "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", "dev": true, "requires": { - "source-map": "0.6.1" + "source-map": "~0.6.0" }, "dependencies": { "source-map": { @@ -574,8 +580,8 @@ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "dev": true, "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", + "center-align": "^0.1.1", + "right-align": "^0.1.1", "wordwrap": "0.0.2" } }, @@ -603,9 +609,9 @@ "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", "dev": true, "requires": { - "inherits": "2.0.3", - "process-nextick-args": "2.0.0", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" }, "dependencies": { "isarray": { @@ -620,13 +626,13 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "string_decoder": { @@ -635,7 +641,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } } } @@ -652,7 +658,7 @@ "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", "dev": true, "requires": { - "q": "1.5.1" + "q": "^1.1.2" } }, "collection-visit": { @@ -661,8 +667,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color-convert": { @@ -698,7 +704,7 @@ "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", "dev": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "commander": { @@ -725,7 +731,7 @@ "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", "dev": true, "requires": { - "source-map": "0.6.1" + "source-map": "^0.6.1" }, "dependencies": { "source-map": { @@ -754,9 +760,9 @@ "integrity": "sha512-0gOYgXVAr6KF7xNUv/+QmTrVsMowpuYu9y1SWzMHFrERzxTygqpeBTXI9CMg1NI1AwQ96ZrkaGHVT9eTC66+Tw==", "dev": true, "requires": { - "color-convert": "1.9.3", - "strong-data-uri": "1.0.6", - "svgo": "0.7.2" + "color-convert": "^1.7.0", + "strong-data-uri": "^1.0.4", + "svgo": "^0.7.1" } }, "css-select": { @@ -765,10 +771,10 @@ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "dev": true, "requires": { - "boolbase": "1.0.0", - "css-what": "2.1.0", + "boolbase": "~1.0.0", + "css-what": "2.1", "domutils": "1.5.1", - "nth-check": "1.0.1" + "nth-check": "~1.0.1" }, "dependencies": { "domutils": { @@ -777,8 +783,8 @@ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "dev": true, "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" + "dom-serializer": "0", + "domelementtype": "1" } } } @@ -795,8 +801,8 @@ "integrity": "sha1-Gcw+2jIhYP0/cjKvHLKjYOiYouk=", "dev": true, "requires": { - "clone": "2.1.2", - "parserlib": "1.1.1" + "clone": "~2.1.0", + "parserlib": "~1.1.1" }, "dependencies": { "clone": { @@ -813,8 +819,8 @@ "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", "dev": true, "requires": { - "clap": "1.2.3", - "source-map": "0.5.7" + "clap": "^1.0.9", + "source-map": "^0.5.3" } }, "csswring": { @@ -823,9 +829,9 @@ "integrity": "sha512-Cz2/8nVqI6li/t4hfZbPTQDF7FkE4qP534j1xbBnLxA1cYl51ZRSg0PTDVWzbzlSsR+tfV2Iv/w+0cTmfKS7JA==", "dev": true, "requires": { - "minimist": "1.2.0", - "onecolor": "3.1.0", - "postcss": "6.0.23" + "minimist": "^1.2.0", + "onecolor": "^3.0.5", + "postcss": "^6.0.17" } }, "dashdash": { @@ -834,7 +840,7 @@ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "dateformat": { @@ -876,7 +882,7 @@ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "dev": true, "requires": { - "clone": "1.0.4" + "clone": "^1.0.2" } }, "define-properties": { @@ -885,7 +891,7 @@ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "object-keys": "1.0.12" + "object-keys": "^1.0.12" } }, "define-property": { @@ -894,8 +900,8 @@ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -904,7 +910,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -913,7 +919,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -922,9 +928,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -953,8 +959,8 @@ "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", "dev": true, "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.1" + "domelementtype": "~1.1.1", + "entities": "~1.1.1" }, "dependencies": { "domelementtype": { @@ -977,7 +983,7 @@ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", "dev": true, "requires": { - "domelementtype": "1.3.0" + "domelementtype": "1" } }, "domutils": { @@ -986,8 +992,8 @@ "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "dev": true, "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" + "dom-serializer": "0", + "domelementtype": "1" } }, "duplexer": { @@ -1002,7 +1008,7 @@ "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", "dev": true, "requires": { - "readable-stream": "1.1.14" + "readable-stream": "~1.1.9" } }, "ecc-jsbn": { @@ -1012,8 +1018,8 @@ "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1", - "safer-buffer": "2.1.2" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, "editions": { @@ -1028,7 +1034,7 @@ "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", "dev": true, "requires": { - "once": "1.3.3" + "once": "~1.3.0" } }, "entities": { @@ -1043,11 +1049,11 @@ "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", "dev": true, "requires": { - "es-to-primitive": "1.2.0", - "function-bind": "1.1.1", - "has": "1.0.3", - "is-callable": "1.1.4", - "is-regex": "1.0.4" + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" } }, "es-to-primitive": { @@ -1056,9 +1062,9 @@ "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", "dev": true, "requires": { - "is-callable": "1.1.4", - "is-date-object": "1.0.1", - "is-symbol": "1.0.2" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, "escape-string-regexp": { @@ -1079,14 +1085,14 @@ "integrity": "sha512-dGXNg4F/FgVzlApjzItL+7naHutA3fDqbV/zAZqDDlXTjiMnQmZKu+prImWKszeBM5UQeGvAl3u1wBiKeDh61g==", "dev": true, "requires": { - "duplexer": "0.1.1", - "flatmap-stream": "0.1.1", - "from": "0.1.7", + "duplexer": "^0.1.1", + "flatmap-stream": "^0.1.0", + "from": "^0.1.7", "map-stream": "0.0.7", - "pause-stream": "0.0.11", - "split": "1.0.1", - "stream-combiner": "0.2.2", - "through": "2.3.8" + "pause-stream": "^0.0.11", + "split": "^1.0.1", + "stream-combiner": "^0.2.2", + "through": "^2.3.8" } }, "expand-brackets": { @@ -1095,13 +1101,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -1110,7 +1116,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -1119,7 +1125,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -1130,7 +1136,7 @@ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", "dev": true, "requires": { - "homedir-polyfill": "1.0.1" + "homedir-polyfill": "^1.0.1" } }, "extend": { @@ -1145,8 +1151,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -1155,7 +1161,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -1166,14 +1172,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -1182,7 +1188,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -1191,7 +1197,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -1200,7 +1206,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -1209,7 +1215,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -1218,9 +1224,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -1237,9 +1243,9 @@ "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=", "dev": true, "requires": { - "ansi-gray": "0.1.1", - "color-support": "1.1.3", - "time-stamp": "1.1.0" + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "time-stamp": "^1.0.0" } }, "fast-deep-equal": { @@ -1260,10 +1266,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -1272,7 +1278,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -1289,10 +1295,10 @@ "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", "dev": true, "requires": { - "detect-file": "1.0.0", - "is-glob": "3.1.0", - "micromatch": "3.1.10", - "resolve-dir": "1.0.1" + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" } }, "fined": { @@ -1301,11 +1307,11 @@ "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=", "dev": true, "requires": { - "expand-tilde": "2.0.2", - "is-plain-object": "2.0.4", - "object.defaults": "1.1.0", - "object.pick": "1.3.0", - "parse-filepath": "1.0.2" + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" } }, "first-chunk-stream": { @@ -1338,7 +1344,7 @@ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", "dev": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, "forever-agent": { @@ -1353,9 +1359,9 @@ "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "dev": true, "requires": { - "asynckit": "0.4.0", + "asynckit": "^0.4.0", "combined-stream": "1.0.6", - "mime-types": "2.1.20" + "mime-types": "^2.1.12" }, "dependencies": { "combined-stream": { @@ -1364,7 +1370,7 @@ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "dev": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } } } @@ -1375,7 +1381,7 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "from": { @@ -1402,7 +1408,7 @@ "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", "dev": true, "requires": { - "globule": "0.1.0" + "globule": "~0.1.0" } }, "get-value": { @@ -1417,7 +1423,7 @@ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "glob": { @@ -1426,10 +1432,10 @@ "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", "dev": true, "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "2.0.10", - "once": "1.3.3" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^2.0.1", + "once": "^1.3.0" } }, "glob-stream": { @@ -1438,12 +1444,12 @@ "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", "dev": true, "requires": { - "glob": "4.5.3", - "glob2base": "0.0.12", - "minimatch": "2.0.10", - "ordered-read-streams": "0.1.0", - "through2": "0.6.5", - "unique-stream": "1.0.0" + "glob": "^4.3.1", + "glob2base": "^0.0.12", + "minimatch": "^2.0.1", + "ordered-read-streams": "^0.1.0", + "through2": "^0.6.1", + "unique-stream": "^1.0.0" }, "dependencies": { "readable-stream": { @@ -1452,10 +1458,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "through2": { @@ -1464,8 +1470,8 @@ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } } } @@ -1476,7 +1482,7 @@ "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", "dev": true, "requires": { - "gaze": "0.5.2" + "gaze": "^0.5.1" } }, "glob2base": { @@ -1485,7 +1491,7 @@ "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", "dev": true, "requires": { - "find-index": "0.1.1" + "find-index": "^0.1.1" } }, "global-modules": { @@ -1494,9 +1500,9 @@ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, "requires": { - "global-prefix": "1.0.2", - "is-windows": "1.0.2", - "resolve-dir": "1.0.1" + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" } }, "global-prefix": { @@ -1505,11 +1511,11 @@ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", "dev": true, "requires": { - "expand-tilde": "2.0.2", - "homedir-polyfill": "1.0.1", - "ini": "1.3.5", - "is-windows": "1.0.2", - "which": "1.3.1" + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" } }, "globule": { @@ -1518,9 +1524,9 @@ "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", "dev": true, "requires": { - "glob": "3.1.21", - "lodash": "1.0.2", - "minimatch": "0.2.14" + "glob": "~3.1.21", + "lodash": "~1.0.1", + "minimatch": "~0.2.11" }, "dependencies": { "glob": { @@ -1529,9 +1535,9 @@ "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", "dev": true, "requires": { - "graceful-fs": "1.2.3", - "inherits": "1.0.2", - "minimatch": "0.2.14" + "graceful-fs": "~1.2.0", + "inherits": "1", + "minimatch": "~0.2.11" } }, "graceful-fs": { @@ -1552,8 +1558,8 @@ "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", "dev": true, "requires": { - "lru-cache": "2.7.3", - "sigmund": "1.0.1" + "lru-cache": "2", + "sigmund": "~1.0.0" } } } @@ -1564,7 +1570,7 @@ "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==", "dev": true, "requires": { - "sparkles": "1.0.1" + "sparkles": "^1.0.0" } }, "graceful-fs": { @@ -1573,7 +1579,7 @@ "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", "dev": true, "requires": { - "natives": "1.1.5" + "natives": "^1.1.0" } }, "gulp": { @@ -1582,19 +1588,19 @@ "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", "dev": true, "requires": { - "archy": "1.0.0", - "chalk": "1.1.3", - "deprecated": "0.0.1", - "gulp-util": "3.0.8", - "interpret": "1.1.0", - "liftoff": "2.5.0", - "minimist": "1.2.0", - "orchestrator": "0.3.8", - "pretty-hrtime": "1.0.3", - "semver": "4.3.6", - "tildify": "1.2.0", - "v8flags": "2.1.1", - "vinyl-fs": "0.3.14" + "archy": "^1.0.0", + "chalk": "^1.0.0", + "deprecated": "^0.0.1", + "gulp-util": "^3.0.0", + "interpret": "^1.0.0", + "liftoff": "^2.1.0", + "minimist": "^1.1.0", + "orchestrator": "^0.3.0", + "pretty-hrtime": "^1.0.0", + "semver": "^4.1.0", + "tildify": "^1.0.0", + "v8flags": "^2.0.2", + "vinyl-fs": "^0.3.0" } }, "gulp-append-prepend": { @@ -1603,9 +1609,9 @@ "integrity": "sha512-I7gnMh+YJkXllUdy5+NIzuy9c2lQEHuJwbhVCmLInt5bLADwaUXckgMWanvuZubAeEmsn7B16sDzyb6bbo7dqw==", "dev": true, "requires": { - "gulp-util": "3.0.8", - "read-file": "0.2.0", - "through2": "2.0.3" + "gulp-util": "^3.0.7", + "read-file": "^0.2.0", + "through2": "^2.0.1" } }, "gulp-base64-favicon": { @@ -1620,9 +1626,9 @@ "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=", "dev": true, "requires": { - "concat-with-sourcemaps": "1.1.0", - "through2": "2.0.3", - "vinyl": "2.2.0" + "concat-with-sourcemaps": "^1.0.0", + "through2": "^2.0.0", + "vinyl": "^2.0.0" }, "dependencies": { "clone": { @@ -1649,12 +1655,12 @@ "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", "dev": true, "requires": { - "clone": "2.1.2", - "clone-buffer": "1.0.0", - "clone-stats": "1.0.0", - "cloneable-readable": "1.1.2", - "remove-trailing-separator": "1.1.0", - "replace-ext": "1.0.0" + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" } } } @@ -1665,10 +1671,10 @@ "integrity": "sha1-RtD38aTamVwiG2ftxJNw95i/eNs=", "dev": true, "requires": { - "crass": "0.12.3", - "csswring": "6.0.3", - "gulp-util": "3.0.8", - "through2": "2.0.3" + "crass": "*", + "csswring": "^6.0.1", + "gulp-util": "^3.0.4", + "through2": "^2.0.3" } }, "gulp-css-base64": { @@ -1677,13 +1683,13 @@ "integrity": "sha1-r8pF6DQBBF9HLGe3dtGxUU4RSJ8=", "dev": true, "requires": { - "async": "1.5.2", - "buffers": "0.1.1", - "chalk": "1.1.3", - "gulp-util": "3.0.8", - "mime": "1.6.0", - "request": "2.88.0", - "through2": "2.0.3" + "async": "^1.5.0", + "buffers": "^0.1.1", + "chalk": "^1.1.1", + "gulp-util": "^3.0.3", + "mime": "^1.3.4", + "request": "^2.67.0", + "through2": "^2.0.0" } }, "gulp-csslint": { @@ -1692,12 +1698,12 @@ "integrity": "sha512-Rec56+RpCGg7feK3d/S45oqgxyLV3end0ed+UjWFv6YziQae2Bp4DNSDobwEvJdfCAsOhOSExEEB+jcfMx430w==", "dev": true, "requires": { - "csslint": "1.0.5", - "fancy-log": "1.3.2", - "plugin-error": "1.0.1", - "rcloader": "0.2.2", - "through2": "2.0.3", - "vinyl": "2.2.0" + "csslint": "^1.0.2", + "fancy-log": "^1.3.2", + "plugin-error": "^1.0.1", + "rcloader": "^0.2.1", + "through2": "^2.0.1", + "vinyl": "^2.1.0" }, "dependencies": { "clone": { @@ -1724,12 +1730,12 @@ "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", "dev": true, "requires": { - "clone": "2.1.2", - "clone-buffer": "1.0.0", - "clone-stats": "1.0.0", - "cloneable-readable": "1.1.2", - "remove-trailing-separator": "1.1.0", - "replace-ext": "1.0.0" + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" } } } @@ -1740,12 +1746,12 @@ "integrity": "sha512-ZIxfkUwk2XmZPTT9pPHrHUQlZMyp9nPhg2sfoeN27mBGpi7OaHnOD+WCN41NXjfJQ69lV1nQ9LLm1hYxx4h3UQ==", "dev": true, "requires": { - "ansi-colors": "1.1.0", - "bytes": "3.0.0", - "fancy-log": "1.3.2", - "plugin-error": "1.0.1", - "stream-to-array": "2.3.0", - "through2": "2.0.3" + "ansi-colors": "^1.0.1", + "bytes": "^3.0.0", + "fancy-log": "^1.3.2", + "plugin-error": "^1.0.0", + "stream-to-array": "^2.3.0", + "through2": "^2.0.3" } }, "gulp-htmllint": { @@ -1754,11 +1760,11 @@ "integrity": "sha512-7lE9Doz/NgPVSKKJyCnzWwXTj+sd8opUC9AvuDsy35dniOvDqc2oNX4sB4MR29aCucauFmpeqMvR3XNPHO3YJA==", "dev": true, "requires": { - "ansi-colors": "2.0.5", - "fancy-log": "1.3.2", - "htmllint": "0.7.2", - "plugin-error": "1.0.1", - "through2": "2.0.3" + "ansi-colors": "^2.0.5", + "fancy-log": "^1.3.2", + "htmllint": "^0.7.2", + "plugin-error": "^1.0.1", + "through2": "^2.0.3" }, "dependencies": { "ansi-colors": { @@ -1775,9 +1781,9 @@ "integrity": "sha512-ASlyDPZOSKjHYUifYV0rf9JPDflN9IRIb8lw2vRqtYMC4ljU3zAmnnaVXwFQ3H+CfXxZSUesZ2x7jrnPJu93jA==", "dev": true, "requires": { - "html-minifier": "3.5.20", - "plugin-error": "1.0.1", - "through2": "2.0.3" + "html-minifier": "^3.5.20", + "plugin-error": "^1.0.1", + "through2": "^2.0.3" } }, "gulp-inline": { @@ -1786,10 +1792,10 @@ "integrity": "sha1-iYdqnJNORR12u8tkzAJErA5ZtHw=", "dev": true, "requires": { - "cheerio": "0.22.0", - "event-stream": "3.3.6", - "gulp-util": "3.0.8", - "through2": "2.0.3" + "cheerio": "^0.22.0", + "event-stream": "^3.3.4", + "gulp-util": "^3.0.7", + "through2": "^2.0.3" } }, "gulp-jsonlint": { @@ -1799,11 +1805,11 @@ "dev": true, "requires": { "ansi-colors": "3.0.5", - "fancy-log": "1.3.2", + "fancy-log": "^1.3.2", "jsonlint": "1.6.3", - "map-stream": "0.1.0", + "map-stream": "^0.1.0", "plugin-error": "1.0.1", - "through2": "2.0.3" + "through2": "^2.0.3" }, "dependencies": { "ansi-colors": { @@ -1826,11 +1832,11 @@ "integrity": "sha512-nfGXuE2ra/o008t+XPzd3/dbkgmO4XNLEUibCFlv4KS5+V2cLGU0m9Rmdd4L9ZkduwC1+/AuSEyySt7CZhcLzw==", "dev": true, "requires": { - "bufferstreams": "2.0.1", - "escape-string-regexp": "1.0.5", - "object.entries": "1.0.4", - "plugin-error": "1.0.1", - "through2": "2.0.3" + "bufferstreams": "^2.0.1", + "escape-string-regexp": "^1.0.5", + "object.entries": "^1.0.4", + "plugin-error": "^1.0.1", + "through2": "^2.0.3" } }, "gulp-rename": { @@ -1846,8 +1852,8 @@ "dev": true, "requires": { "istextorbinary": "2.2.1", - "readable-stream": "2.3.6", - "replacestream": "4.0.3" + "readable-stream": "^2.0.1", + "replacestream": "^4.0.0" }, "dependencies": { "isarray": { @@ -1862,13 +1868,13 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "string_decoder": { @@ -1877,7 +1883,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } } } @@ -1888,14 +1894,14 @@ "integrity": "sha1-UkeI2HZm0J+dDCH7IXf5ADmmWMk=", "dev": true, "requires": { - "deap": "1.0.1", - "fancy-log": "1.3.2", - "gulp-util": "3.0.8", - "isobject": "2.1.0", - "through2": "2.0.3", + "deap": "^1.0.0", + "fancy-log": "^1.0.0", + "gulp-util": "^3.0.0", + "isobject": "^2.0.0", + "through2": "^2.0.0", "uglify-js": "2.6.4", - "uglify-save-license": "0.4.1", - "vinyl-sourcemaps-apply": "0.2.1" + "uglify-save-license": "^0.4.1", + "vinyl-sourcemaps-apply": "^0.2.0" }, "dependencies": { "async": { @@ -1925,10 +1931,10 @@ "integrity": "sha1-ZeovswWck5RpLxX+2HwrNsFrmt8=", "dev": true, "requires": { - "async": "0.2.10", - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "async": "~0.2.6", + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" } } } @@ -1939,24 +1945,24 @@ "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", "dev": true, "requires": { - "array-differ": "1.0.0", - "array-uniq": "1.0.3", - "beeper": "1.1.1", - "chalk": "1.1.3", - "dateformat": "2.2.0", - "fancy-log": "1.3.2", - "gulplog": "1.0.0", - "has-gulplog": "0.1.0", - "lodash._reescape": "3.0.0", - "lodash._reevaluate": "3.0.0", - "lodash._reinterpolate": "3.0.0", - "lodash.template": "3.6.2", - "minimist": "1.2.0", - "multipipe": "0.1.2", - "object-assign": "3.0.0", + "array-differ": "^1.0.0", + "array-uniq": "^1.0.2", + "beeper": "^1.0.0", + "chalk": "^1.0.0", + "dateformat": "^2.0.0", + "fancy-log": "^1.1.0", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "lodash._reescape": "^3.0.0", + "lodash._reevaluate": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.template": "^3.0.0", + "minimist": "^1.1.0", + "multipipe": "^0.1.2", + "object-assign": "^3.0.0", "replace-ext": "0.0.1", - "through2": "2.0.3", - "vinyl": "0.5.3" + "through2": "^2.0.0", + "vinyl": "^0.5.0" } }, "gulplog": { @@ -1965,7 +1971,7 @@ "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", "dev": true, "requires": { - "glogg": "1.0.1" + "glogg": "^1.0.0" } }, "har-schema": { @@ -1980,8 +1986,8 @@ "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", "dev": true, "requires": { - "ajv": "5.5.2", - "har-schema": "2.0.0" + "ajv": "^5.3.0", + "har-schema": "^2.0.0" } }, "has": { @@ -1990,7 +1996,7 @@ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "function-bind": "1.1.1" + "function-bind": "^1.1.1" } }, "has-ansi": { @@ -1999,7 +2005,7 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "has-color": { @@ -2020,7 +2026,7 @@ "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", "dev": true, "requires": { - "sparkles": "1.0.1" + "sparkles": "^1.0.0" } }, "has-symbols": { @@ -2035,9 +2041,9 @@ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, "has-values": { @@ -2046,8 +2052,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "kind-of": { @@ -2056,7 +2062,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2073,7 +2079,7 @@ "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", "dev": true, "requires": { - "parse-passwd": "1.0.0" + "parse-passwd": "^1.0.0" } }, "html-minifier": { @@ -2082,13 +2088,13 @@ "integrity": "sha512-ZmgNLaTp54+HFKkONyLFEfs5dd/ZOtlquKaTnqIWFmx3Av5zG6ZPcV2d0o9XM2fXOTxxIf6eDcwzFFotke/5zA==", "dev": true, "requires": { - "camel-case": "3.0.0", - "clean-css": "4.2.1", - "commander": "2.17.1", - "he": "1.1.1", - "param-case": "2.1.1", - "relateurl": "0.2.7", - "uglify-js": "3.4.9" + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.1.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" } }, "htmllint": { @@ -2097,10 +2103,10 @@ "integrity": "sha1-AuR0FvotvrMLXiw+1mfopUB6jzQ=", "dev": true, "requires": { - "bulk-require": "1.0.1", - "htmlparser2": "3.9.2", - "lodash": "4.17.11", - "promise": "8.0.2" + "bulk-require": "^1.0.1", + "htmlparser2": "^3.9.2", + "lodash": "^4.17.4", + "promise": "^8.0.1" }, "dependencies": { "lodash": { @@ -2117,12 +2123,12 @@ "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", "dev": true, "requires": { - "domelementtype": "1.3.0", - "domhandler": "2.4.2", - "domutils": "1.7.0", - "entities": "1.1.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "domelementtype": "^1.3.0", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" }, "dependencies": { "isarray": { @@ -2137,13 +2143,13 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "string_decoder": { @@ -2152,7 +2158,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } } } @@ -2163,9 +2169,9 @@ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.14.2" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "inflight": { @@ -2174,8 +2180,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.3.3", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -2202,8 +2208,8 @@ "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", "dev": true, "requires": { - "is-relative": "1.0.0", - "is-windows": "1.0.2" + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" } }, "is-accessor-descriptor": { @@ -2212,7 +2218,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -2221,7 +2227,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2244,7 +2250,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -2253,7 +2259,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2270,9 +2276,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { @@ -2301,7 +2307,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } }, "is-number": { @@ -2310,7 +2316,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -2319,7 +2325,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2330,7 +2336,7 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "is-regex": { @@ -2339,7 +2345,7 @@ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "dev": true, "requires": { - "has": "1.0.3" + "has": "^1.0.1" } }, "is-relative": { @@ -2348,7 +2354,7 @@ "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", "dev": true, "requires": { - "is-unc-path": "1.0.0" + "is-unc-path": "^1.0.0" } }, "is-symbol": { @@ -2357,7 +2363,7 @@ "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", "dev": true, "requires": { - "has-symbols": "1.0.0" + "has-symbols": "^1.0.0" } }, "is-typedarray": { @@ -2372,7 +2378,7 @@ "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", "dev": true, "requires": { - "unc-path-regex": "0.1.2" + "unc-path-regex": "^0.1.2" } }, "is-utf8": { @@ -2417,9 +2423,9 @@ "integrity": "sha512-TS+hoFl8Z5FAFMK38nhBkdLt44CclNRgDHWeMgsV8ko3nDlr/9UI2Sf839sW7enijf8oKsZYXRvM8g0it9Zmcw==", "dev": true, "requires": { - "binaryextensions": "2.1.1", - "editions": "1.3.4", - "textextensions": "2.2.0" + "binaryextensions": "2", + "editions": "^1.3.3", + "textextensions": "2" } }, "js-yaml": { @@ -2428,8 +2434,8 @@ "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", "dev": true, "requires": { - "argparse": "1.0.10", - "esprima": "2.7.3" + "argparse": "^1.0.7", + "esprima": "^2.6.0" } }, "jsbn": { @@ -2463,8 +2469,8 @@ "integrity": "sha512-jMVTMzP+7gU/IyC6hvKyWpUU8tmTkK5b3BPNuMI9U8Sit+YAWLlZwB6Y6YrdCxfg2kNz05p3XY3Bmm4m26Nv3A==", "dev": true, "requires": { - "JSV": "4.0.2", - "nomnom": "1.8.1" + "JSV": "^4.0.x", + "nomnom": "^1.5.x" } }, "jsprim": { @@ -2479,12 +2485,6 @@ "verror": "1.10.0" } }, - "JSV": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz", - "integrity": "sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c=", - "dev": true - }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", @@ -2503,14 +2503,14 @@ "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=", "dev": true, "requires": { - "extend": "3.0.2", - "findup-sync": "2.0.0", - "fined": "1.1.0", - "flagged-respawn": "1.0.0", - "is-plain-object": "2.0.4", - "object.map": "1.0.1", - "rechoir": "0.6.2", - "resolve": "1.8.1" + "extend": "^3.0.0", + "findup-sync": "^2.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" } }, "lodash": { @@ -2609,7 +2609,7 @@ "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", "dev": true, "requires": { - "lodash._root": "3.0.1" + "lodash._root": "^3.0.0" } }, "lodash.filter": { @@ -2654,9 +2654,9 @@ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", "dev": true, "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" } }, "lodash.map": { @@ -2707,15 +2707,15 @@ "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", "dev": true, "requires": { - "lodash._basecopy": "3.0.1", - "lodash._basetostring": "3.0.1", - "lodash._basevalues": "3.0.0", - "lodash._isiterateecall": "3.0.9", - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0", - "lodash.keys": "3.1.2", - "lodash.restparam": "3.6.1", - "lodash.templatesettings": "3.1.1" + "lodash._basecopy": "^3.0.0", + "lodash._basetostring": "^3.0.0", + "lodash._basevalues": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0", + "lodash.keys": "^3.0.0", + "lodash.restparam": "^3.0.0", + "lodash.templatesettings": "^3.0.0" } }, "lodash.templatesettings": { @@ -2724,8 +2724,8 @@ "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", "dev": true, "requires": { - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0" + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0" } }, "longest": { @@ -2752,7 +2752,7 @@ "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.2" } }, "map-cache": { @@ -2773,7 +2773,7 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "micromatch": { @@ -2782,19 +2782,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, "mime": { @@ -2815,7 +2815,7 @@ "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==", "dev": true, "requires": { - "mime-db": "1.36.0" + "mime-db": "~1.36.0" } }, "minimatch": { @@ -2824,7 +2824,7 @@ "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.0.0" } }, "minimist": { @@ -2839,8 +2839,8 @@ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "dev": true, "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -2849,7 +2849,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -2892,23 +2892,23 @@ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" } }, "natives": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.5.tgz", - "integrity": "sha512-1pJ+02gl2KJgCPFtpZGtuD4lGSJnIZvvFHCQTOeDRMSXjfu2GmYWuhI8NFMA4W2I5NNFRbfy/YCiVt4CgNpP8A==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.6.tgz", + "integrity": "sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA==", "dev": true }, "no-case": { @@ -2917,7 +2917,7 @@ "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", "dev": true, "requires": { - "lower-case": "1.1.4" + "lower-case": "^1.1.1" } }, "nomnom": { @@ -2926,8 +2926,8 @@ "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", "dev": true, "requires": { - "chalk": "0.4.0", - "underscore": "1.6.0" + "chalk": "~0.4.0", + "underscore": "~1.6.0" }, "dependencies": { "ansi-styles": { @@ -2942,9 +2942,9 @@ "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", "dev": true, "requires": { - "ansi-styles": "1.0.0", - "has-color": "0.1.7", - "strip-ansi": "0.1.1" + "ansi-styles": "~1.0.0", + "has-color": "~0.1.0", + "strip-ansi": "~0.1.0" } }, "strip-ansi": { @@ -2961,7 +2961,7 @@ "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", "dev": true, "requires": { - "boolbase": "1.0.0" + "boolbase": "~1.0.0" } }, "oauth-sign": { @@ -2982,9 +2982,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -2993,7 +2993,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "kind-of": { @@ -3002,7 +3002,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -3019,7 +3019,7 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.0" } }, "object.defaults": { @@ -3028,10 +3028,10 @@ "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", "dev": true, "requires": { - "array-each": "1.0.1", - "array-slice": "1.1.0", - "for-own": "1.0.0", - "isobject": "3.0.1" + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" } }, "object.entries": { @@ -3040,10 +3040,10 @@ "integrity": "sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8=", "dev": true, "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.12.0", - "function-bind": "1.1.1", - "has": "1.0.3" + "define-properties": "^1.1.2", + "es-abstract": "^1.6.1", + "function-bind": "^1.1.0", + "has": "^1.0.1" } }, "object.map": { @@ -3052,8 +3052,8 @@ "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", "dev": true, "requires": { - "for-own": "1.0.0", - "make-iterator": "1.0.1" + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" } }, "object.pick": { @@ -3062,7 +3062,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "once": { @@ -3071,7 +3071,7 @@ "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "onecolor": { @@ -3086,9 +3086,9 @@ "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", "dev": true, "requires": { - "end-of-stream": "0.1.5", - "sequencify": "0.0.7", - "stream-consume": "0.1.1" + "end-of-stream": "~0.1.5", + "sequencify": "~0.0.7", + "stream-consume": "~0.1.0" } }, "ordered-read-streams": { @@ -3109,7 +3109,7 @@ "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", "dev": true, "requires": { - "no-case": "2.3.2" + "no-case": "^2.2.0" } }, "parse-filepath": { @@ -3118,9 +3118,9 @@ "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", "dev": true, "requires": { - "is-absolute": "1.0.0", - "map-cache": "0.2.2", - "path-root": "0.1.1" + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" } }, "parse-passwd": { @@ -3159,7 +3159,7 @@ "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", "dev": true, "requires": { - "path-root-regex": "0.1.2" + "path-root-regex": "^0.1.0" } }, "path-root-regex": { @@ -3174,7 +3174,7 @@ "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", "dev": true, "requires": { - "through": "2.3.8" + "through": "~2.3" } }, "performance-now": { @@ -3189,10 +3189,10 @@ "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", "dev": true, "requires": { - "ansi-colors": "1.1.0", - "arr-diff": "4.0.0", - "arr-union": "3.1.0", - "extend-shallow": "3.0.2" + "ansi-colors": "^1.0.1", + "arr-diff": "^4.0.0", + "arr-union": "^3.1.0", + "extend-shallow": "^3.0.2" } }, "posix-character-classes": { @@ -3207,9 +3207,9 @@ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.5.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" }, "dependencies": { "ansi-styles": { @@ -3218,7 +3218,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.3" + "color-convert": "^1.9.0" } }, "chalk": { @@ -3227,9 +3227,9 @@ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "source-map": { @@ -3244,14 +3244,14 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } }, "pretty-hrtime": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "resolved": "http://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", "dev": true }, @@ -3267,7 +3267,7 @@ "integrity": "sha512-EIyzM39FpVOMbqgzEHhxdrEhtOSDOtjMZQ0M6iVfCE+kWNgCkAyOdnuCWqfmflylftfadU6FkiMgHZA2kUzwRw==", "dev": true, "requires": { - "asap": "2.0.6" + "asap": "~2.0.6" } }, "psl": { @@ -3300,7 +3300,7 @@ "integrity": "sha1-8+gPOH3fmugK4wpBADKWQuroERU=", "dev": true, "requires": { - "lodash.clonedeep": "4.5.0" + "lodash.clonedeep": "^4.3.2" } }, "rcloader": { @@ -3309,10 +3309,10 @@ "integrity": "sha1-WNIpi0YtC5v9ITPSoex0+9cFxxc=", "dev": true, "requires": { - "lodash.assign": "4.2.0", - "lodash.isobject": "3.0.2", - "lodash.merge": "4.6.1", - "rcfinder": "0.1.9" + "lodash.assign": "^4.2.0", + "lodash.isobject": "^3.0.2", + "lodash.merge": "^4.6.0", + "rcfinder": "^0.1.6" } }, "read-file": { @@ -3327,10 +3327,10 @@ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "rechoir": { @@ -3339,7 +3339,7 @@ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "requires": { - "resolve": "1.8.1" + "resolve": "^1.1.6" } }, "regex-not": { @@ -3348,8 +3348,8 @@ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, "relateurl": { @@ -3388,9 +3388,9 @@ "integrity": "sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==", "dev": true, "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1", - "readable-stream": "2.3.6" + "escape-string-regexp": "^1.0.3", + "object-assign": "^4.0.1", + "readable-stream": "^2.0.2" }, "dependencies": { "isarray": { @@ -3411,13 +3411,13 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "string_decoder": { @@ -3426,7 +3426,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } } } @@ -3437,26 +3437,26 @@ "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "dev": true, "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.8.0", - "caseless": "0.12.0", - "combined-stream": "1.0.7", - "extend": "3.0.2", - "forever-agent": "0.6.1", - "form-data": "2.3.2", - "har-validator": "5.1.0", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.20", - "oauth-sign": "0.9.0", - "performance-now": "2.1.0", - "qs": "6.5.2", - "safe-buffer": "5.1.2", - "tough-cookie": "2.4.3", - "tunnel-agent": "0.6.0", - "uuid": "3.3.2" + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" } }, "resolve": { @@ -3465,7 +3465,7 @@ "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", "dev": true, "requires": { - "path-parse": "1.0.6" + "path-parse": "^1.0.5" } }, "resolve-dir": { @@ -3474,8 +3474,8 @@ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", "dev": true, "requires": { - "expand-tilde": "2.0.2", - "global-modules": "1.0.0" + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" } }, "resolve-url": { @@ -3496,7 +3496,7 @@ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", "dev": true, "requires": { - "align-text": "0.1.4" + "align-text": "^0.1.1" } }, "run-sequence": { @@ -3505,9 +3505,9 @@ "integrity": "sha512-qkzZnQWMZjcKbh3CNly2srtrkaO/2H/SI5f2eliMCapdRD3UhMrwjfOAZJAnZ2H8Ju4aBzFZkBGXUqFs9V0yxw==", "dev": true, "requires": { - "chalk": "1.1.3", - "fancy-log": "1.3.2", - "plugin-error": "0.1.2" + "chalk": "^1.1.3", + "fancy-log": "^1.3.2", + "plugin-error": "^0.1.2" }, "dependencies": { "arr-diff": { @@ -3516,8 +3516,8 @@ "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-slice": "0.2.3" + "arr-flatten": "^1.0.1", + "array-slice": "^0.2.3" } }, "arr-union": { @@ -3538,7 +3538,7 @@ "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", "dev": true, "requires": { - "kind-of": "1.1.0" + "kind-of": "^1.1.0" } }, "kind-of": { @@ -3553,11 +3553,11 @@ "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", "dev": true, "requires": { - "ansi-cyan": "0.1.1", - "ansi-red": "0.1.1", - "arr-diff": "1.1.0", - "arr-union": "2.1.0", - "extend-shallow": "1.1.4" + "ansi-cyan": "^0.1.1", + "ansi-red": "^0.1.1", + "arr-diff": "^1.0.1", + "arr-union": "^2.0.1", + "extend-shallow": "^1.1.2" } } } @@ -3574,7 +3574,7 @@ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { - "ret": "0.1.15" + "ret": "~0.1.10" } }, "safer-buffer": { @@ -3591,7 +3591,7 @@ }, "semver": { "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "resolved": "http://registry.npmjs.org/semver/-/semver-4.3.6.tgz", "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", "dev": true }, @@ -3607,10 +3607,10 @@ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -3619,7 +3619,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -3636,14 +3636,14 @@ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.2", - "use": "3.1.1" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "dependencies": { "define-property": { @@ -3652,7 +3652,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -3661,7 +3661,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -3672,9 +3672,9 @@ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { @@ -3683,7 +3683,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -3692,7 +3692,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -3701,7 +3701,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -3710,9 +3710,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -3723,7 +3723,7 @@ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.2.0" }, "dependencies": { "kind-of": { @@ -3732,7 +3732,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -3749,11 +3749,11 @@ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "dev": true, "requires": { - "atob": "2.1.2", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-url": { @@ -3774,7 +3774,7 @@ "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dev": true, "requires": { - "through": "2.3.8" + "through": "2" } }, "split-string": { @@ -3783,7 +3783,7 @@ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { - "extend-shallow": "3.0.2" + "extend-shallow": "^3.0.0" } }, "sprintf-js": { @@ -3798,15 +3798,15 @@ "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", "dev": true, "requires": { - "asn1": "0.2.4", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.2", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.2", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "safer-buffer": "2.1.2", - "tweetnacl": "0.14.5" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" } }, "static-extend": { @@ -3815,8 +3815,8 @@ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -3825,7 +3825,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -3836,8 +3836,8 @@ "integrity": "sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg=", "dev": true, "requires": { - "duplexer": "0.1.1", - "through": "2.3.8" + "duplexer": "~0.1.1", + "through": "~2.3.4" } }, "stream-consume": { @@ -3852,7 +3852,7 @@ "integrity": "sha1-u/azn19D7DC8cbq8s3VXrOzzQ1M=", "dev": true, "requires": { - "any-promise": "1.3.0" + "any-promise": "^1.1.0" } }, "string_decoder": { @@ -3867,7 +3867,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-bom": { @@ -3876,8 +3876,8 @@ "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", "dev": true, "requires": { - "first-chunk-stream": "1.0.0", - "is-utf8": "0.2.1" + "first-chunk-stream": "^1.0.0", + "is-utf8": "^0.2.0" } }, "strong-data-uri": { @@ -3886,7 +3886,7 @@ "integrity": "sha512-zhzBZev0uhT2IrFUerenXhfaE0vFUYwAZsnG0gIKGpfM/Gi6jOUQ3cmcvyTsXeDLIPiTubHESeO7EbD6FoPmzw==", "dev": true, "requires": { - "truncate": "2.0.1" + "truncate": "^2.0.1" } }, "supports-color": { @@ -3901,13 +3901,13 @@ "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", "dev": true, "requires": { - "coa": "1.0.4", - "colors": "1.1.2", - "csso": "2.3.2", - "js-yaml": "3.7.0", - "mkdirp": "0.5.1", - "sax": "1.2.4", - "whet.extend": "0.9.9" + "coa": "~1.0.1", + "colors": "~1.1.2", + "csso": "~2.3.1", + "js-yaml": "~3.7.0", + "mkdirp": "~0.5.1", + "sax": "~1.2.1", + "whet.extend": "~0.9.9" } }, "textextensions": { @@ -3928,8 +3928,8 @@ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "readable-stream": "2.3.6", - "xtend": "4.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" }, "dependencies": { "isarray": { @@ -3944,13 +3944,13 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "string_decoder": { @@ -3959,7 +3959,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } } } @@ -3970,7 +3970,7 @@ "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", "dev": true, "requires": { - "os-homedir": "1.0.2" + "os-homedir": "^1.0.0" } }, "time-stamp": { @@ -3985,7 +3985,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -3994,7 +3994,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4005,10 +4005,10 @@ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } }, "to-regex-range": { @@ -4017,8 +4017,8 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } }, "tough-cookie": { @@ -4027,8 +4027,8 @@ "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "dev": true, "requires": { - "psl": "1.1.29", - "punycode": "1.4.1" + "psl": "^1.1.24", + "punycode": "^1.4.1" } }, "truncate": { @@ -4043,7 +4043,7 @@ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { @@ -4059,8 +4059,8 @@ "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", "dev": true, "requires": { - "commander": "2.17.1", - "source-map": "0.6.1" + "commander": "~2.17.1", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -4101,10 +4101,10 @@ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { "extend-shallow": { @@ -4113,7 +4113,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "set-value": { @@ -4122,10 +4122,10 @@ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } @@ -4142,8 +4142,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -4152,9 +4152,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -4224,7 +4224,7 @@ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", "dev": true, "requires": { - "user-home": "1.1.1" + "user-home": "^1.1.1" } }, "verror": { @@ -4233,9 +4233,9 @@ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "requires": { - "assert-plus": "1.0.0", + "assert-plus": "^1.0.0", "core-util-is": "1.0.2", - "extsprintf": "1.3.0" + "extsprintf": "^1.2.0" } }, "vinyl": { @@ -4244,8 +4244,8 @@ "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", "dev": true, "requires": { - "clone": "1.0.4", - "clone-stats": "0.0.1", + "clone": "^1.0.0", + "clone-stats": "^0.0.1", "replace-ext": "0.0.1" } }, @@ -4255,14 +4255,14 @@ "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", "dev": true, "requires": { - "defaults": "1.0.3", - "glob-stream": "3.1.18", - "glob-watcher": "0.0.6", - "graceful-fs": "3.0.11", - "mkdirp": "0.5.1", - "strip-bom": "1.0.0", - "through2": "0.6.5", - "vinyl": "0.4.6" + "defaults": "^1.0.0", + "glob-stream": "^3.1.5", + "glob-watcher": "^0.0.6", + "graceful-fs": "^3.0.0", + "mkdirp": "^0.5.0", + "strip-bom": "^1.0.0", + "through2": "^0.6.1", + "vinyl": "^0.4.0" }, "dependencies": { "clone": { @@ -4277,10 +4277,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "through2": { @@ -4289,8 +4289,8 @@ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } }, "vinyl": { @@ -4299,8 +4299,8 @@ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", "dev": true, "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" + "clone": "^0.2.0", + "clone-stats": "^0.0.1" } } } @@ -4311,7 +4311,7 @@ "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", "dev": true, "requires": { - "source-map": "0.5.7" + "source-map": "^0.5.1" } }, "whet.extend": { @@ -4326,7 +4326,7 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "window-size": { @@ -4359,9 +4359,9 @@ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "dev": true, "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", "window-size": "0.1.0" } } diff --git a/code/platformio.ini b/code/platformio.ini index 1a4e1cccc0..fe55a273e1 100644 --- a/code/platformio.ini +++ b/code/platformio.ini @@ -2719,6 +2719,2688 @@ monitor_speed = ${common.monitor_speed} extra_scripts = ${common.extra_scripts} +;=========== ESP-LINK ========================================================================= + +[common-esp-link] +build_flags = -g -w -DMQTT_MAX_PACKET_SIZE=400 -DNO_GLOBAL_EEPROM ${sysenv.ESPURNA_FLAGS} + -DPIO_FRAMEWORK_ARDUINO_LWIP_HIGHER_BANDWIDTH +build_flags_512k = ${common.build_flags} -Wl,-Teagle.flash.512k0m1s.ld +build_flags_1m0m = ${common.build_flags} -Wl,-Teagle.flash.1m0m1s.ld +build_flags_2m1m = ${common.build_flags} -Wl,-Teagle.flash.2m1m4s.ld +build_flags_4m1m = ${common.build_flags} -Wl,-Teagle.flash.4m1m4s.ld +build_flags_4m3m = ${common.build_flags} -Wl,-Teagle.flash.4m3m4s.ld + +# ------------------------------------------------------------------------------ +# OTA: +# ------------------------------------------------------------------------------ +upload_port = "${sysenv.ESPURNA_IP}" +upload_flags = --auth="${sysenv.ESPURNA_AUTH}" + +# ------------------------------------------------------------------------------ +# OTHER SETTINGS: +# ------------------------------------------------------------------------------ +framework = arduino +board_1m = esp01_1m +board_2m = esp_wroom_02 +board_4m = esp12e +flash_mode = dout +monitor_speed = 115200 +upload_speed = 115200 +upload_speed_fast = 921600 +extra_scripts = extra_scripts.py + +# ------------------------------------------------------------------------------ +# LIBRARIES: required dependencies +# Please note that we don't always use the latest version of a library. +# ------------------------------------------------------------------------------ +lib_deps = + ArduinoJson + https://github.com/marvinroger/async-mqtt-client#v0.8.1 + Brzo I2C + https://github.com/xoseperez/debounceevent.git#2.0.4 + https://github.com/xoseperez/eeprom_rotate#0.9.1 + Embedis + Encoder + https://github.com/plerup/espsoftwareserial#3.4.1 + https://github.com/me-no-dev/ESPAsyncTCP#55cd520 + https://github.com/me-no-dev/ESPAsyncWebServer#05306e4 + https://bitbucket.org/xoseperez/fauxmoesp.git#3.0.1 + https://github.com/xoseperez/hlw8012.git#1.1.0 + https://github.com/markszabo/IRremoteESP8266#v2.2.0 + https://github.com/xoseperez/justwifi.git#2.0.2 + https://github.com/madpilot/mDNSResolver#4cfcda1 + https://github.com/xoseperez/my92xx#3.0.1 + https://bitbucket.org/xoseperez/nofuss.git#0.2.5 + https://github.com/xoseperez/NtpClient.git#0942ebc + OneWire + PZEM004T + PubSubClient + rc-switch + https://github.com/LowPowerLab/RFM69#1.1.3 + https://github.com/xoseperez/Time + NewPing +lib_ignore = + +# ------------------------------------------------------------------------------ +# ESPURNA CORE BUILDS +# ------------------------------------------------------------------------------ + +[env:espurna-core-1MB] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DESPURNA_CORE +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:espurna-core-2MB] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_2m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_2m1m} -DESPURNA_CORE +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:espurna-core-4MB] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DESPURNA_CORE +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +# ------------------------------------------------------------------------------ +# GENERIC OTA ENVIRONMENTS +# ------------------------------------------------------------------------------ + +[env:esp8266-1m-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -D${sysenv.ESPURNA_BOARD} +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:esp8266-2m-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_2m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_2m1m} -D${sysenv.ESPURNA_BOARD} +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:esp8266-4m-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -D${sysenv.ESPURNA_BOARD} +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +# ------------------------------------------------------------------------------ +# SPECIAL BUILDS - DO. NOT. USE. ever --- +# ------------------------------------------------------------------------------ +[env:travis01] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DTRAVIS01 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:travis02] +platform = ${common.platform_latest} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DTRAVIS02 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:travis03] +platform = ${common.platform_latest} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DTRAVIS03 -DNOWSAUTH -DASYNC_TCP_SSL_ENABLED=1 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +# ------------------------------------------------------------------------------ +# DEVELOPMENT BOARDS +# ------------------------------------------------------------------------------ + +[env:wemos-d1mini] +platform = ${common.platform} +framework = ${common.framework} +board = d1_mini +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags} -DWEMOS_D1_MINI -DDEBUG_FAUXMO=Serial -DNOWSAUTH +upload_speed = ${common.upload_speed_fast} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:wemos-d1mini-relayshield] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DWEMOS_D1_MINI_RELAYSHIELD -DDEBUG_FAUXMO=Serial -DNOWSAUTH +upload_speed = ${common.upload_speed_fast} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:wemos-d1mini-relayshield-ssl] +platform = ${common.platform_173} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DWEMOS_D1_MINI_RELAYSHIELD -DDEBUG_FAUXMO=Serial -DNOWSAUTH -DASYNC_TCP_SSL_ENABLED=1 +upload_speed = ${common.upload_speed_fast} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:wemos-d1mini-relayshield-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DWEMOS_D1_MINI_RELAYSHIELD -DDEBUG_FAUXMO=Serial -DNOWSAUTH +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:nodemcu-lolin] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DNODEMCU_LOLIN -DDEBUG_FAUXMO=Serial -DNOWSAUTH +upload_speed = ${common.upload_speed_fast} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:nodemcu-lolin-ssl] +platform = ${common.platform_173} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DNODEMCU_LOLIN -DDEBUG_FAUXMO=Serial -DNOWSAUTH -DASYNC_TCP_SSL_ENABLED=1 +upload_speed = ${common.upload_speed_fast} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:nodemcu-lolin-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DNODEMCU_LOLIN -DDEBUG_FAUXMO=Serial -DNOWSAUTH +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +# ------------------------------------------------------------------------------ +# SPECIFIC BOARDS +# ------------------------------------------------------------------------------ + +[env:tinkerman-espurna-h06] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DTINKERMAN_ESPURNA_H06 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:tinkerman-espurna-h06-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DTINKERMAN_ESPURNA_H06 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:tinkerman-espurna-h08] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DTINKERMAN_ESPURNA_H08 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:tinkerman-espurna-h08-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DTINKERMAN_ESPURNA_H08 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:tinkerman-espurna-switch] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DTINKERMAN_ESPURNA_SWITCH +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:tinkerman-rfm69gw] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DTINKERMAN_RFM69GW +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +# ------------------------------------------------------------------------------ + +[env:itead-sonoff-basic] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_BASIC +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-basic-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_BASIC +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-basic-dht] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_BASIC -DDHT_SUPPORT=1 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-basic-dht-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_BASIC -DDHT_SUPPORT=1 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-basic-dallas] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_BASIC -DDALLAS_SUPPORT=1 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-rf] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_RF +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-rf-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_RF +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-th] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_TH +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-th-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_TH +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-pow] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_POW +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-pow-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_POW +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-pow-r2] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_POW_R2 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-pow-r2-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_POW_R2 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-dual] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_DUAL +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-dual-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_DUAL +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-dual-r2] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_DUAL_R2 +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-dual-r2-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_DUAL_R2 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-4ch] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_4CH +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-4ch-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_4CH +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-4ch-pro] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_4CH_PRO +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-4ch-pro-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_4CH_PRO +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-touch] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_TOUCH +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-touch-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_TOUCH +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-b1] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_B1 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-b1-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_B1 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-t1-1ch] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_T1_1CH +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-t1-1ch-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_T1_1CH +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-t1-2ch] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_T1_2CH +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-t1-2ch-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_T1_2CH +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-t1-3ch] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_T1_3CH +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-t1-3ch-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_T1_3CH +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-led] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_LED +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-led-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_LED +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-rfbridge] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_RFBRIDGE +monitor_speed = 19200 +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-rfbridge-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_RFBRIDGE +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = 19200 +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-rfbridge-direct] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_RFBRIDGE -DRFB_DIRECT +monitor_speed = 19200 +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-rfbridge-direct-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_RFBRIDGE -DRFB_DIRECT +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = 19200 +extra_scripts = ${common.extra_scripts} + +# ------------------------------------------------------------------------------ + +[env:itead-slampher] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SLAMPHER +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-slampher-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SLAMPHER +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-s20] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_S20 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-s20-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_S20 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-1ch-inching] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_1CH_INCHING +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-1ch-inching-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_1CH_INCHING +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-motor] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_MOTOR +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-motor-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_MOTOR +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-sv] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_SV +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-sv-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_SV +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-s31] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_S31 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-s31-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_S31 +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-ifan02] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_IFAN02 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-sonoff-ifan02-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_IFAN02 +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +# ------------------------------------------------------------------------------ + +[env:electrodragon-wifi-iot] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DELECTRODRAGON_WIFI_IOT -DDHT_SUPPORT=1 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:electrodragon-wifi-iot-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DELECTRODRAGON_WIFI_IOT -DDHT_SUPPORT=1 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:workchoice-ecoplug] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DWORKCHOICE_ECOPLUG +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:workchoice-ecoplug-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DWORKCHOICE_ECOPLUG +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:jangoe-wifi-relay-nc] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DJANGOE_WIFI_RELAY_NC +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:jangoe-wifi-relay-nc-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DJANGOE_WIFI_RELAY_NC +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:jangoe-wifi-relay-no] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DJANGOE_WIFI_RELAY_NO +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:jangoe-wifi-relay-no-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DJANGOE_WIFI_RELAY_NO +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:openenergymonitor-mqtt-relay] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DOPENENERGYMONITOR_MQTT_RELAY -DDALLAS_SUPPORT=1 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:openenergymonitor-mqtt-relay-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DOPENENERGYMONITOR_MQTT_RELAY -DDALLAS_SUPPORT=1 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:jorgegarcia-wifi-relays] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DJORGEGARCIA_WIFI_RELAYS +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:jorgegarcia-wifi-relays-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DJORGEGARCIA_WIFI_RELAYS +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:aithinker-ai-light] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DAITHINKER_AI_LIGHT +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:aithinker-ai-light-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DAITHINKER_AI_LIGHT +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:magichome-led-controller] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DMAGICHOME_LED_CONTROLLER +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:magichome-led-controller-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DMAGICHOME_LED_CONTROLLER +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:magichome-led-controller-20] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DMAGICHOME_LED_CONTROLLER_20 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:magichome-led-controller-20-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DMAGICHOME_LED_CONTROLLER_20 +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:huacanxing-h801] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DHUACANXING_H801 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:huacanxing-h801-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DHUACANXING_H801 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:huacanxing-h802] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DHUACANXING_H802 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:huacanxing-h802-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DHUACANXING_H802 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:arilux-al-lc01] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DARILUX_AL_LC01 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:arilux-al-lc01-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DARILUX_AL_LC01 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:arilux-al-lc02] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DARILUX_AL_LC02 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:arilux-al-lc02-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DARILUX_AL_LC02 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:arilux-al-lc06] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DARILUX_AL_LC06 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:arilux-al-lc06-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DARILUX_AL_LC06 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:arilux-al-lc11] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DARILUX_AL_LC11 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:arilux-al-lc11-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DARILUX_AL_LC11 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:arilux-e27] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DARILUX_E27 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:arilux-e27-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DARILUX_E27 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-bnsz01] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_BNSZ01 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:itead-bnsz01-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DITEAD_BNSZ01 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:wion-50055] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DWION_50055 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:wion-50055-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DWION_50055 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:exs-wifi-relay-v31] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DEXS_WIFI_RELAY_V31 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:exs-wifi-relay-v31-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DEXS_WIFI_RELAY_V31 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:exs-wifi-relay-v50] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DEXS_WIFI_RELAY_V50 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:exs-wifi-relay-v50-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DEXS_WIFI_RELAY_V50 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:wemos-v9261f] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DGENERIC_V9261F +upload_speed = ${common.upload_speed_fast} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:wemos-v9261f-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DGENERIC_V9261F +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:esp01-v9261f] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DGENERIC_V9261F +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:esp01-v9261f-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DGENERIC_V9261F +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:wemos-ech1560] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DGENERIC_ECH1560 +upload_speed = ${common.upload_speed_fast} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:wemos-ech1560-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DGENERIC_ECH1560 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:esp01-ech1560] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DGENERIC_ECH1560 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:esp01-ech1560-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DGENERIC_ECH1560 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:mancavemade-esplive] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DMANCAVEMADE_ESPLIVE +upload_speed = ${common.upload_speed_fast} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:mancavemade-esplive-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DMANCAVEMADE_ESPLIVE +upload_speed = ${common.upload_speed_fast} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:intermittech-quinled] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DINTERMITTECH_QUINLED +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:intermittech-quinled-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DINTERMITTECH_QUINLED +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:xenon-sm-pw702u] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DXENON_SM_PW702U +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:xenon-sm-pw702u-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DXENON_SM_PW702U +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:authometion-lyt8266] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DAUTHOMETION_LYT8266 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:authometion-lyt8266-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DAUTHOMETION_LYT8266 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:kmc-70011] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DKMC_70011 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:kmc-70011-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DKMC_70011 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:yjzk-switch-1ch] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DYJZK_SWITCH_1CH +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:yjzk-switch-1ch-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DYJZK_SWITCH_1CH +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:yjzk-switch-2ch] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DYJZK_SWITCH_2CH +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:yjzk-switch-2ch-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DYJZK_SWITCH_2CH +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:yjzk-switch-3ch] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DYJZK_SWITCH_3CH +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:yjzk-switch-3ch-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DYJZK_SWITCH_3CH +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:generic-8ch] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DGENERIC_8CH +upload_speed = ${common.upload_speed_fast} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:gizwits-witty-cloud] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DGIZWITS_WITTY_CLOUD +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:gizwits-witty-cloud-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DGIZWITS_WITTY_CLOUD +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:euromate-wifi-stecker-shuko] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DEUROMATE_WIFI_STECKER_SCHUKO +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:euromate-wifi-stecker-shuko-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DEUROMATE_WIFI_STECKER_SCHUKO +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:tonbux-powerstrip02] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DTONBUX_POWERSTRIP02 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:tonbux-powerstrip02-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DTONBUX_POWERSTRIP02 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:lingan-swa1] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DLINGAN_SWA1 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:lingan-swa1-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DLINGAN_SWA1 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:stm-relay] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DSTM_RELAY +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:stm-relay-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DSTM_RELAY +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:heygo-hy02] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DHEYGO_HY02 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:heygo-hy02-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DHEYGO_HY02 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:maxcio-wus002s] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DMAXCIO_WUS002S +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:maxcio-wus002s-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DMAXCIO_WUS002S +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:yidian-xsssa05] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DYIDIAN_XSSSA05 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:yidian-xsssa05-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DYIDIAN_XSSSA05 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:tonbux-xsssa06] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DTONBUX_XSSSA06 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:tonbux-xsssa06-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DTONBUX_XSSSA06 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:green-esp8266relay] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DGREEN_ESP8266RELAY +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:green-esp8266relay-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DGREEN_ESP8266RELAY +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:ike-espike] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DIKE_ESPIKE +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:ike-espike-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DIKE_ESPIKE +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:arniex-swifitch] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DARNIEX_SWIFITCH +extra_scripts = ${common.extra_scripts} +monitor_speed = ${common.monitor_speed} + +[env:arniex-swifitch-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DARNIEX_SWIFITCH +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:zhilde-eu44-w] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DZHILDE_EU44_W +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:zhilde-eu44-w-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DZHILDE_EU44_W +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:luani-hvio] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DLUANI_HVIO +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:luani-hvio-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DLUANI_HVIO +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:neo-coolcam-power-plug-wifi] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DNEO_COOLCAM_NAS_WR01W +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:neo-coolcam-power-plug-wifi-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DNEO_COOLCAM_NAS_WR01W +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:estink-wifi-power-strip] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DESTINK_WIFI_POWER_STRIP +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:estink-wifi-power-strip-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DESTINK_WIFI_POWER_STRIP +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:iwoole-led-table-lamp] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DIWOOLE_LED_TABLE_LAMP +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:iwoole-led-table-lamp-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DIWOOLE_LED_TABLE_LAMP +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + + +# ------------------------------------------------------------------------------ +# GENERIC OTA ENVIRONMENTS +# ------------------------------------------------------------------------------ + +[env:generic-esp01s-relay-40] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_RELAY_V40 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:generic-esp01s-relay-40-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_RELAY_V40 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:generic-esp01s-rgbled-10] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_RGBLED_V10 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:generic-esp01s-rgbled-10-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_RGBLED_V10 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:generic-esp01s-dht11-10] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_DHT11_V10 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:generic-esp01s-dht11-10-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_DHT11_V10 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:generic-esp01s-ds18b20-10] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_DS18B20_V10 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:generic-esp01s-ds18b20-10-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_DS18B20_V10 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:heltec-touch-relay] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DHELTEC_TOUCHRELAY +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:heltec-touch-relay-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DHELTEC_TOUCHRELAY +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:allnet-4duino-iot-wlan-relais] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DALLNET_4DUINO_IOT_WLAN_RELAIS +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:allnet-4duino-iot-wlan-relais-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DALLNET_4DUINO_IOT_WLAN_RELAIS +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:tonbux-mosquito-killer] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DTONBUX_MOSQUITO_KILLER +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:tonbux-mosquito-killer-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DTONBUX_MOSQUITO_KILLER +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:pilotak-esp-din-v1] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DPILOTAK_ESP_DIN_V1 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:pilotak-esp-din-v1-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DPILOTAK_ESP_DIN_V1 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:nodemcu-geiger] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DGENERIC_GEIGER_COUNTER +upload_speed = ${common.upload_speed_fast} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:nodemcu-geiger-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DGENERIC_GEIGER_COUNTER +upload_speed = ${common.upload_speed_fast} +monitor_speed = ${common.monitor_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:blitzwolf-bwshp2] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DBLITZWOLF_BWSHP2 +upload_speed = ${common.upload_speed} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:blitzwolf-bwshp2-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DBLITZWOLF_BWSHP2 +upload_speed = ${common.upload_speed} +monitor_speed = ${common.monitor_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:homecube-16a] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DHOMECUBE_16A +upload_speed = ${common.upload_speed} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:homecube-16a-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DHOMECUBE_16A +upload_speed = ${common.upload_speed} +monitor_speed = ${common.monitor_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:bh-onofre] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DBH_ONOFRE +upload_speed = ${common.upload_speed_fast} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:bh-onofre-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_4m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_4m1m} -DBH_ONOFRE +upload_speed = ${common.upload_speed_fast} +monitor_speed = ${common.monitor_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:generic-ag-l4] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DGENERIC_AG_L4 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:generic-ag-l4-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DGENERIC_AG_L4 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +extra_scripts = ${common.extra_scripts} + +[env:lohas-e27-9w] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DLOHAS_9W +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:lohas-e27-9w-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DLOHAS_9W +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:allterco-shelly1] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_2m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_2m1m} -DALLTERCO_SHELLY1 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:allterco-shelly1-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_2m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_2m1m} -DALLTERCO_SHELLY1 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:allterco-shelly2] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_2m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_2m1m} -DALLTERCO_SHELLY2 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:allterco-shelly2-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_2m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_2m1m} -DALLTERCO_SHELLY2 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:xiaomi-smart-desk-lamp] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DXIAOMI_SMART_DESK_LAMP +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:xiaomi-smart-desk-lamp-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DXIAOMI_SMART_DESK_LAMP +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:phyx-esp12-rgb] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DPHYX_ESP12_RGB +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:phyx-esp12-rgb-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DPHYX_ESP12_RGB +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:bestek-mrj1011] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DBESTEK_MRJ1011 +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + +[env:bestek-mrj1011-ota] +platform = ${common.platform} +framework = ${common.framework} +board = ${common.board_1m} +board_build.flash_mode = ${common.flash_mode} +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m0m} -DBESTEK_MRJ1011 +upload_speed = ${common.upload_speed} +upload_port = ${common.upload_port} +upload_flags = ${common.upload_flags} +monitor_speed = ${common.monitor_speed} +extra_scripts = ${common.extra_scripts} + + ;=========== ESP-LINK ========================================================================= [common-esp-link] @@ -2737,14 +5419,13 @@ board = ${common.board_4m} board_build.flash_mode = qio lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common-esp-link.build_flags_4m1m} -DWEMOS_D1_MINI +build_flags = ${common-esp-link.build_flags_4m1m} -DWIFI_PICO_12 -DNOWSAUTHX - -DALEXA_SUPPORT=0 -DDOMOTICZ_SUPPORT=0 -DHOMEASSISTANT_SUPPORT=0 -DTERMINAL_SUPPORT=0 + -DALEXA_SUPPORT=0 -DDOMOTICZ_SUPPORT=0 -DHOMEASSISTANT_SUPPORT=0 -DTERMINAL_SUPPORT=1 -DTHINGSPEAK_SUPPORT=0 -DSCHEDULER_SUPPORT=0 -DWEB_SSL_ENABLED=0 - -DSERIAL_BRIDGE_SUPPORT=1 + -DDEBUG_SERIAL_SUPPORT=1 -DDEBUG_PORT=Serial1 -DSERIAL_BRIDGE_SUPPORT=1 ; -DSPIFFS_SUPPORT=1 ; -DASYNC_TCP_SSL_ENABLED=1 upload_speed = ${common.upload_speed_fast} monitor_speed = ${common.monitor_speed} extra_scripts = ${common.extra_scripts} - From 3fd183e68e792d12455c74e2bc578dca27bcb833 Mon Sep 17 00:00:00 2001 From: Thorsten von Eicken Date: Wed, 24 Oct 2018 11:41:11 -0700 Subject: [PATCH 3/8] moved serial bridge to external library --- code/espurna/serialbridge.ino | 237 +--------------------------------- code/platformio.ini | 8 +- 2 files changed, 11 insertions(+), 234 deletions(-) diff --git a/code/espurna/serialbridge.ino b/code/espurna/serialbridge.ino index 5230b9d8b4..27645772f9 100644 --- a/code/espurna/serialbridge.ino +++ b/code/espurna/serialbridge.ino @@ -10,248 +10,23 @@ Module key prefix: sbr #if SERIAL_BRIDGE_SUPPORT -#define INFO DEBUG_MSG_P -#define DBG(...) -#define TRC(...) +#include "SerialBridge.h" -// ----------------------------------------------------------------------------- -// Private -// ----------------------------------------------------------------------------- - -typedef struct { - AsyncClient *client; // handle to ESPAsyncTCP client - uint8_t *rxBuf; // malloc'ed buffer with received characters - uint16_t rxBufSize; // size of buffer in bytes - uint16_t rxBufNext; // next char in buffer to send to UART -} SbrClient; - -static std::vector _sbr_clients; // a list to hold all clients - -static bool _sbr_overrun = false; // only warn once per overrun event - -// helper functions - -// _sbrRxBufToUart writes cahrs from an rx buffer to the uart. -// The volatile is there to foil the ino-to-cpp converter (sigh). -static volatile void _sbrRxBufToUart(SbrClient *sbr_cli, int writable) { - int w = sbr_cli->rxBufSize - sbr_cli->rxBufNext; - if (w > writable) w = writable; - DBG(PSTR("[SERIAL_BRIDGE] writing %d buf->uart\n"), w); - TRC(PSTR("wr<%d>"), w); - int n = SERIAL_BRIDGE_PORT.write(sbr_cli->rxBuf+sbr_cli->rxBufNext, w); - sbr_cli->rxBufNext += n; - if (sbr_cli->rxBufNext == sbr_cli->rxBufSize) { - DBG(PSTR("[SERIAL_BRIDGE] free 0x%x, cli %x\n"), sbr_cli->rxBuf, sbr_cli); - free(sbr_cli->rxBuf); - sbr_cli->rxBuf = 0; - if (sbr_cli->client) // null if connection is already closed - sbr_cli->client->ack(sbr_cli->rxBufSize); - } -} - -// client socket event handlers - -static void _sbrHandleError(void* arg, AsyncClient* client, int8_t error) { - INFO(PSTR("[SERIAL_BRIDGE] conn err client %s: %s\n"), - client->remoteIP().toString().c_str(), - client->errorToString(error)); -} - -static void _sbrHandleData(void* arg, AsyncClient* client, void *data, size_t len) { - SbrClient *sbr_cli = (SbrClient*)arg; - DBG(PSTR("[SERIAL_BRIDGE] rcv client %s: %d bytes\n"), - client->remoteIP().toString().c_str(), len); - size_t writable = SERIAL_BRIDGE_PORT.availableForWrite(); - TRC(PSTR("rx<%d/%d/%d>"), len, sbr_cli->rxBuf ? sbr_cli->rxBufSize - sbr_cli->rxBufNext : 0, writable); - // if we have buffered chars take this opportunity to stuff some into the uart - if (writable > 0 && sbr_cli->rxBuf != 0) { - _sbrRxBufToUart(sbr_cli, writable); - writable = SERIAL_BRIDGE_PORT.availableForWrite(); - } - // if we can write all to uart then we're done - if (!sbr_cli->rxBuf && writable > len) { - TRC(PSTR("wr{%d}"), len); - DBG(PSTR("[SERIAL_BRIDGE] writing all %d to uart\n"), len); - SERIAL_BRIDGE_PORT.write((uint8_t*)data, len); - return; - } - // write what we can - if (!sbr_cli->rxBuf && writable > 0) { - client->ackLater(); - TRC(PSTR("wr[%d]"), writable); - DBG(PSTR("[SERIAL_BRIDGE] writing %d to uart\n"), writable); - SERIAL_BRIDGE_PORT.write((uint8_t *)data, writable); - client->ack(writable); - } else { - writable = 0; - client->ackLater(); - } - // buffer what we couldn't write - if (!sbr_cli->rxBuf) { - DBG(PSTR("[SERIAL_BRIDGE] new buffer %d\n"), len-writable); - sbr_cli->rxBufSize = len-writable; - sbr_cli->rxBuf = (uint8_t *)calloc(1, sbr_cli->rxBufSize); - if (sbr_cli->rxBuf != 0) { - DBG(PSTR("[SERIAL_BRIDGE] calloc 0x%x, cli %x\n"), sbr_cli->rxBuf, sbr_cli); - sbr_cli->rxBufNext = 0; - memcpy(sbr_cli->rxBuf, (uint8_t*)data+writable, sbr_cli->rxBufSize); - } else { - INFO(PSTR("[SERIAL_BRIDGE] calloc failed\n")); - } - } else { - DBG(PSTR("[SERIAL_BRIDGE] append buffer %d\n"), len-writable); - int sz = sbr_cli->rxBufSize + len-writable; - sbr_cli->rxBuf = (uint8_t *)realloc(sbr_cli->rxBuf, sz); - if (sbr_cli->rxBuf != 0) { - DBG(PSTR("[SERIAL_BRIDGE] realloc 0x%x, cli %x\n"), sbr_cli->rxBuf, sbr_cli); - memcpy(sbr_cli->rxBuf+sbr_cli->rxBufSize, (uint8_t*)data+writable, len-writable); - sbr_cli->rxBufSize = sz; - } else { - INFO(PSTR("[SERIAL_BRIDGE] realloc failed\n")); - } - } -} - -static void _sbrHandleDisconnect(void* arg, AsyncClient* client) { - SbrClient *sbr_cli = (SbrClient*)arg; - INFO(PSTR("[SERIAL_BRIDGE] client %s disconnect\n"), - client->remoteIP().toString().c_str()); - sbr_cli->client = 0; -} - -static void _sbrHandleTimeOut(void* arg, AsyncClient* client, uint32_t time) { - INFO(PSTR("[SERIAL_BRIDGE] client %s TCP timeout\n"), - client->remoteIP().toString().c_str()); -} - - -// server socket event handlers - -static void _sbrHandleNewClient(void* arg, AsyncClient* client) { - INFO(PSTR("[SERIAL_BRIDGE] connect from %s\n"), - client->remoteIP().toString().c_str()); - - // add to list - SbrClient *sbr_cli = (SbrClient*)calloc(1, sizeof(SbrClient)); - sbr_cli->client = client; - _sbr_clients.push_back(sbr_cli); - - // register events - client->onData(&_sbrHandleData, sbr_cli); - client->onError(&_sbrHandleError, sbr_cli); - client->onDisconnect(&_sbrHandleDisconnect, sbr_cli); - client->onTimeout(&_sbrHandleTimeOut, sbr_cli); -} +static SerialBridge _sbr; bool _sbrKeyCheck(const char * key) { return (strncmp(key, "sbr", 3) == 0); } - -// ----------------------------------------------------------------------------- -// SETUP & LOOP -// ----------------------------------------------------------------------------- - -// _sbrRecvUartCheck checks whether something arrived on the uart and tries to send it out on -// connected clients. It only pulls out of the uart receive buffer what it can send to all clients. -// The assumption here is that the interrupt handler's buffer is sufficient. -void _sbrRecvUartCheck() { - // check that we have connected clients and there's something to send - if (SERIAL_BRIDGE_PORT.peek() < 0) { - SERIAL_BRIDGE_PORT.hasOverrun(); // clear flag in uart driver - _sbr_overrun = false; - return; - } - if (_sbr_clients.empty()) { - // no client connected, drop incoming chars on the floor - while (SERIAL_BRIDGE_PORT.read() != -1) ; - SERIAL_BRIDGE_PORT.hasOverrun(); // clear flag in uart driver - return; - } - // warn about input overrun - if (!_sbr_overrun && SERIAL_BRIDGE_PORT.hasOverrun()) { - _sbr_overrun = true; - INFO(PSTR("[SERIAL_BRIDGE] uart input overrun\n")); - } - // we always send the same to all clients: determine minimum we can send to all - size_t min_sendable = SERIAL_BRIDGE_PORT.available(); - size_t avail = min_sendable; - for (SbrClient* cli : _sbr_clients) { - if (!cli->client) continue; // already closed - if (!cli->client->canSend()) { - min_sendable = 0; - } else if (cli->client->space() < min_sendable) { - min_sendable = cli->client->space(); - } - } - if (min_sendable <= 0) { TRC(PSTR("tx{0/%d}"), avail); return; } - // read from serial into buffer - char buf[min_sendable]; - for (size_t i=0; iclient) continue; // already closed - size_t n = cli->client->add(buf, min_sendable, 0); - if (n != min_sendable) { // should never occur.. - INFO(PSTR("[SERIAL_BRIDGE] err client %s: will=%d sendable=%d\n"), - cli->client->remoteIP().toString().c_str(), n, min_sendable); - } else { - TRC(PSTR("tx<%d/%d>"), n, avail); - DBG(PSTR("[SERIAL_BRIDGE] sent %d bytes to cli %x\n"), n, cli); - } - if (!cli->client->send()) INFO(PSTR("[SERIAL_BRIDGE] send failed\n")); - } -} - -// _sbrRecvTCPCheck handles data that got received but couldn't be stuffed into the uart. -void _sbrRecvTCPCheck() { - for (SbrClient* cli : _sbr_clients) { - if (cli->rxBuf == 0) continue; - int writable = SERIAL_BRIDGE_PORT.availableForWrite(); - if (writable <= 0) continue; - // looks like we have something that we can write to the UART, so do it... - _sbrRxBufToUart(cli, writable); - } -} - -// _sbrGC garbage collects client descriptors that have no connection and no buffer -void _sbrGC() { - for (auto cli = _sbr_clients.begin(); cli != _sbr_clients.end(); ) { - if ((*cli)->client || (*cli)->rxBuf) { - cli++; // client connected or buffer still has data - } else { - cli = _sbr_clients.erase(cli); // no connection and no buffer: garbage collect - } - } -} - void _sbrLoop() { - if (!_sbr_clients.empty()) TRC("{"); - _sbrRecvUartCheck(); - _sbrRecvTCPCheck(); - _sbrGC(); - if (!_sbr_clients.empty()) TRC("}"); + _sbr.loop(); } void serialBridgeSetup() { - - // Init port - SERIAL_BRIDGE_PORT.setRxBufferSize(2000); // 173ms of buffering at 115200 baud... - SERIAL_BRIDGE_PORT.begin(SERIAL_BRIDGE_BAUDRATE); - - _sbr_clients.clear(); - AsyncServer* server = new AsyncServer(2323); - server->onClient(&_sbrHandleNewClient, server); - server->begin(); - - // Register key check + _sbr.debug(&debugSend_P); + _sbr.begin(2323); settingsRegisterKeyCheck(_sbrKeyCheck); - - // Register loop espurnaRegisterLoop(_sbrLoop); - } -#endif // SERIAL_BRIDGE_SUPPORT +#endif diff --git a/code/platformio.ini b/code/platformio.ini index fe55a273e1..c3481269ad 100644 --- a/code/platformio.ini +++ b/code/platformio.ini @@ -5418,14 +5418,16 @@ framework = ${common.framework} board = ${common.board_4m} board_build.flash_mode = qio lib_deps = ${common.lib_deps} + SerialBridge lib_ignore = ${common.lib_ignore} +lib_extra_dirs = ../../esp-link-v4 build_flags = ${common-esp-link.build_flags_4m1m} -DWIFI_PICO_12 - -DNOWSAUTHX - -DALEXA_SUPPORT=0 -DDOMOTICZ_SUPPORT=0 -DHOMEASSISTANT_SUPPORT=0 -DTERMINAL_SUPPORT=1 - -DTHINGSPEAK_SUPPORT=0 -DSCHEDULER_SUPPORT=0 -DWEB_SSL_ENABLED=0 + -DNOWSAUTHX -DALEXA_SUPPORT=0 -DDOMOTICZ_SUPPORT=0 -DHOMEASSISTANT_SUPPORT=0 + -DTERMINAL_SUPPORT=1 -DTHINGSPEAK_SUPPORT=0 -DSCHEDULER_SUPPORT=0 -DWEB_SSL_ENABLED=0 -DDEBUG_SERIAL_SUPPORT=1 -DDEBUG_PORT=Serial1 -DSERIAL_BRIDGE_SUPPORT=1 ; -DSPIFFS_SUPPORT=1 ; -DASYNC_TCP_SSL_ENABLED=1 +; -DUSE_PASSWORD=0 '-DWIFI1_SSID="tve-home"' '-DWIFI1_PASS="XXX"' upload_speed = ${common.upload_speed_fast} monitor_speed = ${common.monitor_speed} extra_scripts = ${common.extra_scripts} From 480335229c2acef5f5c382be0e81ebb00c6fc5f5 Mon Sep 17 00:00:00 2001 From: Thorsten von Eicken Date: Tue, 30 Oct 2018 12:27:18 -0700 Subject: [PATCH 4/8] added /flashavr to program an attached AVR uC --- code/espurna/serialbridge.ino | 2 +- code/espurna/web.ino | 91 +++++++++++++++++++++++++++++++++++ code/platformio.ini | 2 + 3 files changed, 94 insertions(+), 1 deletion(-) diff --git a/code/espurna/serialbridge.ino b/code/espurna/serialbridge.ino index 27645772f9..1056e9b1bb 100644 --- a/code/espurna/serialbridge.ino +++ b/code/espurna/serialbridge.ino @@ -12,7 +12,7 @@ Module key prefix: sbr #include "SerialBridge.h" -static SerialBridge _sbr; +SerialBridge _sbr; bool _sbrKeyCheck(const char * key) { return (strncmp(key, "sbr", 3) == 0); diff --git a/code/espurna/web.ino b/code/espurna/web.ino index 2fa50771c2..c492398743 100644 --- a/code/espurna/web.ino +++ b/code/espurna/web.ino @@ -12,6 +12,7 @@ Module key prefix: web #include #include +#include #include #include #include @@ -49,6 +50,8 @@ bool _webConfigSuccess = false; std::vector _web_request_callbacks; +AVRFlash *_avrflash = 0; + // ----------------------------------------------------------------------------- // HOOKS // ----------------------------------------------------------------------------- @@ -267,9 +270,11 @@ int _onCertificate(void * arg, const char *filename, uint8_t **buf) { #endif void _onUpgrade(AsyncWebServerRequest *request) { + DEBUG_MSG_P(PSTR("[UPGRADE] Auth\n")); webLog(request); if (!webAuthenticate(request)) { + DEBUG_MSG_P(PSTR("[UPGRADE] Auth failed\n")); return request->requestAuthentication(getHostname().c_str()); } @@ -326,6 +331,91 @@ void _onUpgradeData(AsyncWebServerRequest *request, String filename, size_t inde } } +extern SerialBridge _sbr; + +void _AVRflashRespond(AsyncWebServerRequest *request) { + DEBUG_MSG_P(PSTR("[AVRFLASH] _AVRflashRespond\n")); + char buffer[32]; + int code = 200; + if (!_avrflash->hasError()) { + sprintf_P(buffer, PSTR("OK")); + DEBUG_MSG_P(PSTR("[AVRFLASH] Success\n")); + //DEBUG_MSG_P(PSTR("[AVRFLASH] Success: %u bytes\n"), index + len); + } else { + DEBUG_MSG_P(PSTR("[AVRFLASH] Error #%u\n"), _avrflash->getError()); + sprintf_P(buffer, PSTR("ERROR %s"), _avrflash->getError()); + code = 400; + } + + AsyncWebServerResponse *response = request->beginResponse(code, "text/plain", buffer); + response->addHeader("Connection", "close"); + response->addHeader("X-XSS-Protection", "1; mode=block"); + response->addHeader("X-Content-Type-Options", "nosniff"); + response->addHeader("X-Frame-Options", "deny"); + request->send(response); + + if (_avrflash) delete _avrflash; + _sbr.enable(); +} + +// _onAVRflash is called to finish off the flashing of an attached AVR microprocessor and to return +// an HTTP response. +void _onAVRflash(AsyncWebServerRequest *request) { + DEBUG_MSG_P(PSTR("[AVRFLASH] _onAVRflash\n")); + webLog(request); + if (!webAuthenticate(request)) { + return request->requestAuthentication(getHostname().c_str()); + } + + if (_avrflash) _avrflash->finish(_AVRflashRespond, request); + DEBUG_MSG_P(PSTR("[AVRFLASH] Finishing\n")); +} + +// nned to instatiate template member functions that we use... yuck, I hate c++ +template void AVRFlash::finish( + void(*)(AsyncWebServerRequest*), AsyncWebServerRequest*); +template uint32_t HexRecord::write( + uint8_t *data, size_t len, void (*stop)(AsyncWebServerRequest*), void + (*resume)(AsyncWebServerRequest*), AsyncWebServerRequest* cbArg); + +void _AVRflashStop(AsyncWebServerRequest *request) { request->client()->ackLater(); } +void _AVRflashResume(AsyncWebServerRequest *request) { request->client()->ack(1000000); } + +// _onAVRflashData is called with data to flash an attached AVR microprocessor. +void _onAVRflashData(AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final) { + DEBUG_MSG_P(PSTR("[AVRFLASH] _onAVRflashData i=%d len=%d final=%d\n"), index, len, final); + if (index == 0) { + // Index is zero if this is the very first callback for a request. + if (_avrflash) { + DEBUG_MSG_P(PSTR("[AVRFLASH]Ooops, multiple concurrent flashing operations...\n")); + } + _sbr.disable(); + _avrflash = new AVRFlash(Serial, 12, 57600); + _avrflash->debug(debugSend_P); + _avrflash->sync(); + DEBUG_MSG_P(PSTR("[AVRFLASH] %s @%dbaud reset on pin %d\n"), filename.c_str(), 57600, + 12); + } + + if (_avrflash->hasError()) return; + + if (_avrflash->write(data, len, _AVRflashStop, _AVRflashResume, request) != len) { + DEBUG_MSG_P(PSTR("[AVRFLASH] Error #%u\n"), _avrflash->getError()); + return; + } + DEBUG_MSG_P(PSTR("[AVRFLASH] Progress: %u bytes\r"), index + len); + +#if 0 + // final is true if this is the last callback for a request. + if (!final) return; + if (_avrflash->finish()){ + DEBUG_MSG_P(PSTR("[AVRFLASH] Success: %u bytes\n"), index + len); + } else { + DEBUG_MSG_P(PSTR("[AVRFLASH] Error #%u\n"), _avrflash->getError()); + } +#endif +} + void _webWebSocketOnSend(JsonObject& root) { root["webPort"] = webPort(); } @@ -413,6 +503,7 @@ void webSetup() { _server->on("/config", HTTP_POST | HTTP_PUT, _onPostConfig, _onPostConfigData); _server->on("/upgrade", HTTP_POST, _onUpgrade, _onUpgradeData); _server->on("/discover", HTTP_GET, _onDiscover); + _server->on("/flashavr", HTTP_POST, _onAVRflash, _onAVRflashData); // Serve static files #if SPIFFS_SUPPORT diff --git a/code/platformio.ini b/code/platformio.ini index c3481269ad..2ba1531bad 100644 --- a/code/platformio.ini +++ b/code/platformio.ini @@ -5419,12 +5419,14 @@ board = ${common.board_4m} board_build.flash_mode = qio lib_deps = ${common.lib_deps} SerialBridge + AVRFlash lib_ignore = ${common.lib_ignore} lib_extra_dirs = ../../esp-link-v4 build_flags = ${common-esp-link.build_flags_4m1m} -DWIFI_PICO_12 -DNOWSAUTHX -DALEXA_SUPPORT=0 -DDOMOTICZ_SUPPORT=0 -DHOMEASSISTANT_SUPPORT=0 -DTERMINAL_SUPPORT=1 -DTHINGSPEAK_SUPPORT=0 -DSCHEDULER_SUPPORT=0 -DWEB_SSL_ENABLED=0 -DDEBUG_SERIAL_SUPPORT=1 -DDEBUG_PORT=Serial1 -DSERIAL_BRIDGE_SUPPORT=1 + -DUSE_PASSWORD=1 '-DWIFI1_SSID="tve-home"' '-DWIFI1_PASS="tve@home"' ; -DSPIFFS_SUPPORT=1 ; -DASYNC_TCP_SSL_ENABLED=1 ; -DUSE_PASSWORD=0 '-DWIFI1_SSID="tve-home"' '-DWIFI1_PASS="XXX"' From 4e31eb5a05efca0bd748cda7d6aff013f825dc47 Mon Sep 17 00:00:00 2001 From: Thorsten von Eicken Date: Fri, 2 Nov 2018 10:20:51 -0700 Subject: [PATCH 5/8] starting to add web interface for serial bridge --- .../config/devices/086_wifi_pico_12.json.h | 7 ++ code/espurna/config/progmem.h | 3 + code/espurna/config/webui.h | 12 ++- code/espurna/serialbridge.ino | 22 ++++++ code/espurna/web.ino | 2 + code/gulpfile.js | 8 +- code/html/custom.js | 8 ++ code/html/index.html | 78 +++++++++++++++++++ 8 files changed, 138 insertions(+), 2 deletions(-) create mode 100644 code/espurna/config/devices/086_wifi_pico_12.json.h diff --git a/code/espurna/config/devices/086_wifi_pico_12.json.h b/code/espurna/config/devices/086_wifi_pico_12.json.h new file mode 100644 index 0000000000..c301bd37a6 --- /dev/null +++ b/code/espurna/config/devices/086_wifi_pico_12.json.h @@ -0,0 +1,7 @@ +#define device_config_len 64 +const uint8_t device_config[] PROGMEM = { +0x7b,0x22,0x62,0x6f,0x61,0x72,0x64,0x22,0x3a,0x38,0x36,0x2c,0x22,0x64,0x65,0x76,0x69,0x63,0x65,0x22, +0x3a,0x22,0x57,0x49,0x46,0x49,0x5f,0x50,0x49,0x43,0x4f,0x5f,0x31,0x32,0x22,0x2c,0x22,0x6c,0x65,0x64, +0x47,0x50,0x49,0x4f,0x30,0x22,0x3a,0x30,0x2c,0x22,0x6c,0x65,0x64,0x4c,0x6f,0x67,0x69,0x63,0x30,0x22, +0x3a,0x31,0x2c,0x7d +}; \ No newline at end of file diff --git a/code/espurna/config/progmem.h b/code/espurna/config/progmem.h index c36671b623..87d5935f45 100644 --- a/code/espurna/config/progmem.h +++ b/code/espurna/config/progmem.h @@ -106,6 +106,9 @@ PROGMEM const char espurna_modules[] = #if SENSOR_SUPPORT "SENSOR " #endif + #if SERBRIDGE_SUPPORT + "SERBRIDGE " + #endif #if SPIFFS_SUPPORT "SPIFFS " #endif diff --git a/code/espurna/config/webui.h b/code/espurna/config/webui.h index e7ce37efe0..fca1bc931c 100644 --- a/code/espurna/config/webui.h +++ b/code/espurna/config/webui.h @@ -7,7 +7,8 @@ #define WEBUI_IMAGE_SENSOR 2 #define WEBUI_IMAGE_RFBRIDGE 4 #define WEBUI_IMAGE_RFM69 8 -#define WEBUI_IMAGE_FULL 15 +#define WEBUI_IMAGE_SERBRIDGE 16 +#define WEBUI_IMAGE_FULL 31 #if LIGHT_PROVIDER != LIGHT_PROVIDER_NONE #ifdef WEBUI_IMAGE @@ -45,6 +46,15 @@ #endif #endif +#if SERIAL_BRIDGE_SUPPORT == 1 + #ifndef WEBUI_IMAGE + #define WEBUI_IMAGE WEBUI_IMAGE_SERBRIDGE + #else + #undef WEBUI_IMAGE + #define WEBUI_IMAGE WEBUI_IMAGE_FULL + #endif +#endif + #ifndef WEBUI_IMAGE #define WEBUI_IMAGE WEBUI_IMAGE_SMALL #endif diff --git a/code/espurna/serialbridge.ino b/code/espurna/serialbridge.ino index 1056e9b1bb..a6fc0684ab 100644 --- a/code/espurna/serialbridge.ino +++ b/code/espurna/serialbridge.ino @@ -14,6 +14,22 @@ Module key prefix: sbr SerialBridge _sbr; +#if WEB_SUPPORT + +void _sbrWebSocketOnSend(JsonObject& root) { + root["sbrVisible"] = 1; + root["sbrPort"] = 1234; + root["sbrBaud"] = 38400; +} + +void _sbrWebSocketOnAction(uint32_t client_id, const char * action, JsonObject& data) { + //if (strcmp(action, "rfblearn") == 0) _rfLearn(data["id"], data["status"]); + //if (strcmp(action, "rfbforget") == 0) _rfForget(data["id"], data["status"]); + //if (strcmp(action, "rfbsend") == 0) _rfStore(data["id"], data["status"], data["data"].as()); +} + +#endif + bool _sbrKeyCheck(const char * key) { return (strncmp(key, "sbr", 3) == 0); } @@ -25,6 +41,12 @@ void _sbrLoop() { void serialBridgeSetup() { _sbr.debug(&debugSend_P); _sbr.begin(2323); + + #if WEB_SUPPORT + wsOnSendRegister(_sbrWebSocketOnSend); + wsOnActionRegister(_sbrWebSocketOnAction); + #endif + settingsRegisterKeyCheck(_sbrKeyCheck); espurnaRegisterLoop(_sbrLoop); } diff --git a/code/espurna/web.ino b/code/espurna/web.ino index c492398743..6130f558a3 100644 --- a/code/espurna/web.ino +++ b/code/espurna/web.ino @@ -30,6 +30,8 @@ Module key prefix: web #include "static/index.rfbridge.html.gz.h" #elif WEBUI_IMAGE == WEBUI_IMAGE_RFM69 #include "static/index.rfm69.html.gz.h" +#elif WEBUI_IMAGE == WEBUI_IMAGE_SERBRIDGE + #include "static/index.sbr.html.gz.h" #elif WEBUI_IMAGE == WEBUI_IMAGE_FULL #include "static/index.all.html.gz.h" #endif diff --git a/code/gulpfile.js b/code/gulpfile.js index 277f448d19..960e2d8951 100644 --- a/code/gulpfile.js +++ b/code/gulpfile.js @@ -115,11 +115,12 @@ var htmllintReporter = function(filepath, issues) { var buildWebUI = function(module) { - var modules = {'light': false, 'sensor': false, 'rfbridge': false, 'rfm69': false}; + var modules = {'light': false, 'sensor': false, 'rfbridge': false, 'rfm69': false, 'sbr': false}; if ('all' === module) { modules['light'] = true; modules['sensor'] = true; modules['rfbridge'] = true; + modules['sbr'] = false; // conflicts with other modules, best off unless explicitly enabled modules['rfm69'] = false; // we will never be adding this except when building RFM69GW } else if ('small' !== module) { modules[module] = true; @@ -217,6 +218,10 @@ gulp.task('webui_rfbridge', function() { return buildWebUI('rfbridge'); }); +gulp.task('webui_sbr', function() { + return buildWebUI('sbr'); +}); + gulp.task('webui_rfm69', function() { return buildWebUI('rfm69'); }); @@ -231,6 +236,7 @@ gulp.task('webui', ['devices'], function(cb) { 'webui_sensor', 'webui_light', 'webui_rfbridge', + 'webui_sbr', 'webui_rfm69', 'webui_all' ], cb); diff --git a/code/html/custom.js b/code/html/custom.js index 8e4b928170..a94e57828a 100644 --- a/code/html/custom.js +++ b/code/html/custom.js @@ -797,6 +797,14 @@ function delMapping() { } +// ----------------------------------------------------------------------------- +// SERIAL BRIDGE +// ----------------------------------------------------------------------------- + + + + + // ----------------------------------------------------------------------------- // Wifi // ----------------------------------------------------------------------------- diff --git a/code/html/index.html b/code/html/index.html index 97503036f8..398ff79441 100644 --- a/code/html/index.html +++ b/code/html/index.html @@ -137,6 +137,12 @@

Before using this device you have to change the default password for the use + +
  • + SERIAL BRIDGE +
  • + +
  • SCHEDULE
  • @@ -785,6 +791,78 @@

    + +
    +
    + +
    +

    SERIAL BRIDGE

    +

    + Blah blah blah... +

    +
    + +
    + +
    + + Transparent serial bridge + +
    + + +
    +
    + Plain TCP connections to this TCP port + (e.g. using telnet or netcat) + are bridged transparently to the serial port. +
    + +
    + + +
    +
    + Baud rate to use for the serial bridge. When running an arduino + sketch on the attached uC this would be the baud rate used when + calling Serial.begin. +
    + +
    + + +
    +
    + Size of the (static) UART receive buffer to allocate. There is + no flow-control on the UART and it is easy to overrun the + receive buffer due to Wifi hiccups. On the other hand, memory is + very limited. Change with caution! +
    + + AVR flash-programming + +
    + + +
    +
    + Baud rate to use when flash-programming an attached AVR. + The required baud rate is hard-coded in the optiboot bootloader + in the AVR. The programming tries the baud rate specified, then + 9600, 57600, and finally 115200. +
    + +
    +
    + +
    +
    + +
    From 7ffc775d6b5ac3408f9bc2871f680a130754504d Mon Sep 17 00:00:00 2001 From: Thorsten von Eicken Date: Fri, 2 Nov 2018 10:21:35 -0700 Subject: [PATCH 6/8] starting to add web interface for serial bridge (2) --- code/platformio.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/platformio.ini b/code/platformio.ini index 2ba1531bad..0028f9232b 100644 --- a/code/platformio.ini +++ b/code/platformio.ini @@ -5426,7 +5426,7 @@ build_flags = ${common-esp-link.build_flags_4m1m} -DWIFI_PICO_12 -DNOWSAUTHX -DALEXA_SUPPORT=0 -DDOMOTICZ_SUPPORT=0 -DHOMEASSISTANT_SUPPORT=0 -DTERMINAL_SUPPORT=1 -DTHINGSPEAK_SUPPORT=0 -DSCHEDULER_SUPPORT=0 -DWEB_SSL_ENABLED=0 -DDEBUG_SERIAL_SUPPORT=1 -DDEBUG_PORT=Serial1 -DSERIAL_BRIDGE_SUPPORT=1 - -DUSE_PASSWORD=1 '-DWIFI1_SSID="tve-home"' '-DWIFI1_PASS="tve@home"' + -DUSE_PASSWORD=1 '-DWIFI1_SSID="tve-home"' '-DWIFI1_PASS="XXX"' ; -DSPIFFS_SUPPORT=1 ; -DASYNC_TCP_SSL_ENABLED=1 ; -DUSE_PASSWORD=0 '-DWIFI1_SSID="tve-home"' '-DWIFI1_PASS="XXX"' From 36bc5c3afa60a78c159408e6630fa2c90510eae7 Mon Sep 17 00:00:00 2001 From: Thorsten von Eicken Date: Fri, 2 Nov 2018 21:27:48 -0700 Subject: [PATCH 7/8] fix RX timeout crash in avrflash --- code/espurna/config/general.h | 24 +- code/espurna/serialbridge.ino | 16 +- code/espurna/web.ino | 53 +- code/html/index.html | 10 + code/platformio.ini | 2686 +-------------------------------- 5 files changed, 84 insertions(+), 2705 deletions(-) diff --git a/code/espurna/config/general.h b/code/espurna/config/general.h index b73f3b64e8..c40f301acc 100644 --- a/code/espurna/config/general.h +++ b/code/espurna/config/general.h @@ -583,14 +583,30 @@ #define SERIAL_BRIDGE_SUPPORT 0 // No support by default #endif -#ifndef SERIAL_BRIDGE_BAUDRATE -#define SERIAL_BRIDGE_BAUDRATE 115200 // Serial speed -#endif - #ifndef SERIAL_BRIDGE_PORT #define SERIAL_BRIDGE_PORT Serial // Hardware serial port (no real choice) #endif +#ifndef SBR_PORT +#define SBR_PORT 2323 // Serial bridge TCP properties +#endif + +#ifndef SBR_BAUD +#define SBR_BAUD 115200 // Serial speed for normal bridging +#endif + +#ifndef SBR_RXBUF +#define SBR_RXBUF 2048 // Serial port RX buffer size in bytes +#endif + +#ifndef SBR_AVRBAUD +#define SBR_AVRBAUD 57600 // Serial speed for programming an AVR +#endif + +#ifndef SBR_AVRRESET +#define SBR_AVRRESET 12 // Pin to use to reset attached AVR +#endif + // ----------------------------------------------------------------------------- // MQTT // ----------------------------------------------------------------------------- diff --git a/code/espurna/serialbridge.ino b/code/espurna/serialbridge.ino index a6fc0684ab..7fd9e7e379 100644 --- a/code/espurna/serialbridge.ino +++ b/code/espurna/serialbridge.ino @@ -14,12 +14,19 @@ Module key prefix: sbr SerialBridge _sbr; +// Settings +int _sbrPort, _sbrBaud, _sbrRxBuf; +int _sbrAvrBaud; + #if WEB_SUPPORT void _sbrWebSocketOnSend(JsonObject& root) { root["sbrVisible"] = 1; - root["sbrPort"] = 1234; - root["sbrBaud"] = 38400; + root["sbrPort"] = getSetting("sbrPort", SBR_PORT); + root["sbrBaud"] = getSetting("sbrBaud", SBR_BAUD); + root["sbrRxBuf"] = getSetting("sbrRxBuf", SBR_RXBUF); + root["sbrAvrBaud"] = getSetting("sbrAvrBaud", SBR_AVRBAUD); + root["sbrAvrReset"] = getSetting("sbrAvrReset", SBR_AVRRESET); } void _sbrWebSocketOnAction(uint32_t client_id, const char * action, JsonObject& data) { @@ -40,7 +47,10 @@ void _sbrLoop() { void serialBridgeSetup() { _sbr.debug(&debugSend_P); - _sbr.begin(2323); + _sbr.begin( + getSetting("sbrPort", SBR_PORT).toInt(), + getSetting("sbrBaud", SBR_BAUD).toInt(), + getSetting("sbrRxBuf", SBR_RXBUF).toInt()); #if WEB_SUPPORT wsOnSendRegister(_sbrWebSocketOnSend); diff --git a/code/espurna/web.ino b/code/espurna/web.ino index 6130f558a3..5356aeb987 100644 --- a/code/espurna/web.ino +++ b/code/espurna/web.ino @@ -336,16 +336,16 @@ void _onUpgradeData(AsyncWebServerRequest *request, String filename, size_t inde extern SerialBridge _sbr; void _AVRflashRespond(AsyncWebServerRequest *request) { - DEBUG_MSG_P(PSTR("[AVRFLASH] _AVRflashRespond\n")); - char buffer[32]; + DEBUG_MSG_P(PSTR("[AVRFLASH] _AVRflashRespond req=%x cli=%x\n"), (uint32_t)request, (uint32_t)(request->client())); + char buffer[128]; int code = 200; if (!_avrflash->hasError()) { - sprintf_P(buffer, PSTR("OK")); + sprintf_P(buffer, PSTR("Flashing successful!")); DEBUG_MSG_P(PSTR("[AVRFLASH] Success\n")); //DEBUG_MSG_P(PSTR("[AVRFLASH] Success: %u bytes\n"), index + len); } else { - DEBUG_MSG_P(PSTR("[AVRFLASH] Error #%u\n"), _avrflash->getError()); - sprintf_P(buffer, PSTR("ERROR %s"), _avrflash->getError()); + DEBUG_MSG_P(PSTR("[AVRFLASH] Error: %s\n"), _avrflash->getError()); + sprintf_P(buffer, PSTR("Flashing error: %s"), _avrflash->getError()); code = 400; } @@ -354,45 +354,70 @@ void _AVRflashRespond(AsyncWebServerRequest *request) { response->addHeader("X-XSS-Protection", "1; mode=block"); response->addHeader("X-Content-Type-Options", "nosniff"); response->addHeader("X-Frame-Options", "deny"); + DEBUG_MSG_P(PSTR("sending\n")); request->send(response); + DEBUG_MSG_P(PSTR("[AVRFLASH] Response sent\n")); if (_avrflash) delete _avrflash; + _avrflash = 0; _sbr.enable(); } // _onAVRflash is called to finish off the flashing of an attached AVR microprocessor and to return // an HTTP response. void _onAVRflash(AsyncWebServerRequest *request) { - DEBUG_MSG_P(PSTR("[AVRFLASH] _onAVRflash\n")); webLog(request); + DEBUG_MSG_P(PSTR("[AVRFLASH] _onAVRflash client=%x\n"), (uint32_t)(request->client())); if (!webAuthenticate(request)) { + DEBUG_MSG_P(PSTR("[AVRFLASH] requesting auth\n")); return request->requestAuthentication(getHostname().c_str()); } + DEBUG_MSG_P(PSTR("[AVRFLASH] Finishing req=%x cli=%x\n"), (uint32_t)request, + (uint32_t)(request->client())); if (_avrflash) _avrflash->finish(_AVRflashRespond, request); - DEBUG_MSG_P(PSTR("[AVRFLASH] Finishing\n")); } -// nned to instatiate template member functions that we use... yuck, I hate c++ +// need to instatiate template member functions that we use... yuck, I hate c++ template void AVRFlash::finish( void(*)(AsyncWebServerRequest*), AsyncWebServerRequest*); template uint32_t HexRecord::write( uint8_t *data, size_t len, void (*stop)(AsyncWebServerRequest*), void (*resume)(AsyncWebServerRequest*), AsyncWebServerRequest* cbArg); -void _AVRflashStop(AsyncWebServerRequest *request) { request->client()->ackLater(); } -void _AVRflashResume(AsyncWebServerRequest *request) { request->client()->ack(1000000); } +void _AVRflashStop(AsyncWebServerRequest *request) { + DEBUG_MSG_P(PSTR("[AVRFLASH] Stop TCP\n")); + request->client()->ackLater(); +} + +void _AVRflashResume(AsyncWebServerRequest *request) { + DEBUG_MSG_P(PSTR("[AVRFLASH] Resume TCP\n")); + request->client()->ack(1000000); +} + +void _AVRflashDisconnect() { + DEBUG_MSG_P(PSTR("[AVRFLASH] Disconnect\n")); + if (!_avrflash) return; + _avrflash->abort(); + delete _avrflash; + _avrflash = 0; + _sbr.enable(); +} // _onAVRflashData is called with data to flash an attached AVR microprocessor. void _onAVRflashData(AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final) { - DEBUG_MSG_P(PSTR("[AVRFLASH] _onAVRflashData i=%d len=%d final=%d\n"), index, len, final); + //DEBUG_MSG_P(PSTR("[AVRFLASH] _onAVRflashData i=%d len=%d final=%d\n"), index, len, final); if (index == 0) { // Index is zero if this is the very first callback for a request. if (_avrflash) { - DEBUG_MSG_P(PSTR("[AVRFLASH]Ooops, multiple concurrent flashing operations...\n")); + DEBUG_MSG_P(PSTR("[AVRFLASH] Ooops, multiple concurrent flashing operations...\n")); } - _sbr.disable(); - _avrflash = new AVRFlash(Serial, 12, 57600); + _sbr.disable(); + request->onDisconnect(&_AVRflashDisconnect); + request->client()->setRxTimeout(30); + _avrflash = new AVRFlash(Serial, + getSetting("sbrAvrReset", SBR_AVRRESET).toInt(), + getSetting("sbrAvrBaud", SBR_AVRBAUD).toInt()); _avrflash->debug(debugSend_P); _avrflash->sync(); DEBUG_MSG_P(PSTR("[AVRFLASH] %s @%dbaud reset on pin %d\n"), filename.c_str(), 57600, diff --git a/code/html/index.html b/code/html/index.html index 398ff79441..c27d741f33 100644 --- a/code/html/index.html +++ b/code/html/index.html @@ -856,6 +856,16 @@

    9600, 57600, and finally 115200.

    +
    + + +
    +
    + Pin to reset an attached AVR to begin the flash-programming + sequence. A short (100µs) low reset pulse is issued. +
    + diff --git a/code/platformio.ini b/code/platformio.ini index 0028f9232b..99f2aca208 100644 --- a/code/platformio.ini +++ b/code/platformio.ini @@ -80,2690 +80,8 @@ lib_deps = Embedis Encoder https://github.com/plerup/espsoftwareserial#3.4.1 - https://github.com/me-no-dev/ESPAsyncTCP#55cd520 - https://github.com/me-no-dev/ESPAsyncWebServer#05306e4 - https://bitbucket.org/xoseperez/fauxmoesp.git#3.0.1 - https://github.com/xoseperez/hlw8012.git#1.1.0 - https://github.com/markszabo/IRremoteESP8266#v2.2.0 - https://github.com/xoseperez/justwifi.git#2.0.2 - https://github.com/madpilot/mDNSResolver#4cfcda1 - https://github.com/xoseperez/my92xx#3.0.1 - https://bitbucket.org/xoseperez/nofuss.git#0.2.5 - https://github.com/xoseperez/NtpClient.git#0942ebc - OneWire - PZEM004T - PubSubClient - rc-switch - https://github.com/LowPowerLab/RFM69#1.1.3 - https://github.com/xoseperez/Time - NewPing -lib_ignore = - -# ------------------------------------------------------------------------------ -# ESPURNA CORE BUILDS -# ------------------------------------------------------------------------------ - -[env:espurna-core-1MB] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DESPURNA_CORE -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:espurna-core-2MB] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_2m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_2m1m} -DESPURNA_CORE -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:espurna-core-4MB] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DESPURNA_CORE -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -# ------------------------------------------------------------------------------ -# GENERIC OTA ENVIRONMENTS -# ------------------------------------------------------------------------------ - -[env:esp8266-1m-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -D${sysenv.ESPURNA_BOARD} -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:esp8266-2m-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_2m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_2m1m} -D${sysenv.ESPURNA_BOARD} -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:esp8266-4m-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -D${sysenv.ESPURNA_BOARD} -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -# ------------------------------------------------------------------------------ -# SPECIAL BUILDS - DO. NOT. USE. ever --- -# ------------------------------------------------------------------------------ -[env:travis01] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DTRAVIS01 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:travis02] -platform = ${common.platform_latest} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DTRAVIS02 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:travis03] -platform = ${common.platform_latest} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DTRAVIS03 -DNOWSAUTH -DASYNC_TCP_SSL_ENABLED=1 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -# ------------------------------------------------------------------------------ -# DEVELOPMENT BOARDS -# ------------------------------------------------------------------------------ - -[env:wemos-d1mini] -platform = ${common.platform} -framework = ${common.framework} -board = d1_mini -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DWEMOS_D1_MINI -DDEBUG_FAUXMO=Serial -DNOWSAUTH -upload_speed = ${common.upload_speed_fast} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:wemos-d1mini-relayshield] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DWEMOS_D1_MINI_RELAYSHIELD -DDEBUG_FAUXMO=Serial -DNOWSAUTH -upload_speed = ${common.upload_speed_fast} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:wemos-d1mini-relayshield-ssl] -platform = ${common.platform_173} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DWEMOS_D1_MINI_RELAYSHIELD -DDEBUG_FAUXMO=Serial -DNOWSAUTH -DASYNC_TCP_SSL_ENABLED=1 -upload_speed = ${common.upload_speed_fast} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:wemos-d1mini-relayshield-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DWEMOS_D1_MINI_RELAYSHIELD -DDEBUG_FAUXMO=Serial -DNOWSAUTH -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:nodemcu-lolin] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DNODEMCU_LOLIN -DDEBUG_FAUXMO=Serial -DNOWSAUTH -upload_speed = ${common.upload_speed_fast} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:nodemcu-lolin-ssl] -platform = ${common.platform_173} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DNODEMCU_LOLIN -DDEBUG_FAUXMO=Serial -DNOWSAUTH -DASYNC_TCP_SSL_ENABLED=1 -upload_speed = ${common.upload_speed_fast} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:nodemcu-lolin-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DNODEMCU_LOLIN -DDEBUG_FAUXMO=Serial -DNOWSAUTH -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -# ------------------------------------------------------------------------------ -# SPECIFIC BOARDS -# ------------------------------------------------------------------------------ - -[env:tinkerman-espurna-h06] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DTINKERMAN_ESPURNA_H06 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:tinkerman-espurna-h06-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DTINKERMAN_ESPURNA_H06 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:tinkerman-espurna-h08] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DTINKERMAN_ESPURNA_H08 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:tinkerman-espurna-h08-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DTINKERMAN_ESPURNA_H08 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:tinkerman-espurna-switch] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DTINKERMAN_ESPURNA_SWITCH -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:tinkerman-rfm69gw] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DTINKERMAN_RFM69GW -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -# ------------------------------------------------------------------------------ - -[env:itead-sonoff-basic] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_BASIC -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-basic-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_BASIC -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-basic-dht] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_BASIC -DDHT_SUPPORT=1 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-basic-dht-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_BASIC -DDHT_SUPPORT=1 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-basic-dallas] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_BASIC -DDALLAS_SUPPORT=1 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-rf] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_RF -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-rf-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_RF -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-th] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_TH -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-th-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_TH -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-pow] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_POW -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-pow-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_POW -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-pow-r2] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_POW_R2 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-pow-r2-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_POW_R2 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-dual] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_DUAL -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-dual-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_DUAL -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-dual-r2] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_DUAL_R2 -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-dual-r2-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_DUAL_R2 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-4ch] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_4CH -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-4ch-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_4CH -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-4ch-pro] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_4CH_PRO -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-4ch-pro-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_4CH_PRO -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-touch] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_TOUCH -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-touch-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_TOUCH -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-b1] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_B1 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-b1-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_B1 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-t1-1ch] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_T1_1CH -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-t1-1ch-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_T1_1CH -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-t1-2ch] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_T1_2CH -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-t1-2ch-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_T1_2CH -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-t1-3ch] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_T1_3CH -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-t1-3ch-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_T1_3CH -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-led] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_LED -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-led-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_LED -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-rfbridge] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_RFBRIDGE -monitor_speed = 19200 -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-rfbridge-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_RFBRIDGE -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = 19200 -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-rfbridge-direct] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_RFBRIDGE -DRFB_DIRECT -monitor_speed = 19200 -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-rfbridge-direct-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_RFBRIDGE -DRFB_DIRECT -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = 19200 -extra_scripts = ${common.extra_scripts} - -# ------------------------------------------------------------------------------ - -[env:itead-slampher] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SLAMPHER -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-slampher-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SLAMPHER -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-s20] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_S20 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-s20-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_S20 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-1ch-inching] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_1CH_INCHING -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-1ch-inching-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_1CH_INCHING -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-motor] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_MOTOR -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-motor-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_MOTOR -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-sv] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_SV -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-sv-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_SV -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-s31] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_S31 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-s31-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_S31 -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-ifan02] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_IFAN02 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-sonoff-ifan02-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_IFAN02 -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -# ------------------------------------------------------------------------------ - -[env:electrodragon-wifi-iot] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DELECTRODRAGON_WIFI_IOT -DDHT_SUPPORT=1 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:electrodragon-wifi-iot-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DELECTRODRAGON_WIFI_IOT -DDHT_SUPPORT=1 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:workchoice-ecoplug] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DWORKCHOICE_ECOPLUG -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:workchoice-ecoplug-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DWORKCHOICE_ECOPLUG -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:jangoe-wifi-relay-nc] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DJANGOE_WIFI_RELAY_NC -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:jangoe-wifi-relay-nc-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DJANGOE_WIFI_RELAY_NC -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:jangoe-wifi-relay-no] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DJANGOE_WIFI_RELAY_NO -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:jangoe-wifi-relay-no-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DJANGOE_WIFI_RELAY_NO -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:openenergymonitor-mqtt-relay] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DOPENENERGYMONITOR_MQTT_RELAY -DDALLAS_SUPPORT=1 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:openenergymonitor-mqtt-relay-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DOPENENERGYMONITOR_MQTT_RELAY -DDALLAS_SUPPORT=1 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:jorgegarcia-wifi-relays] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DJORGEGARCIA_WIFI_RELAYS -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:jorgegarcia-wifi-relays-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DJORGEGARCIA_WIFI_RELAYS -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:aithinker-ai-light] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DAITHINKER_AI_LIGHT -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:aithinker-ai-light-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DAITHINKER_AI_LIGHT -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:magichome-led-controller] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DMAGICHOME_LED_CONTROLLER -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:magichome-led-controller-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DMAGICHOME_LED_CONTROLLER -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:magichome-led-controller-20] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DMAGICHOME_LED_CONTROLLER_20 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:magichome-led-controller-20-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DMAGICHOME_LED_CONTROLLER_20 -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:huacanxing-h801] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DHUACANXING_H801 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:huacanxing-h801-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DHUACANXING_H801 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:huacanxing-h802] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DHUACANXING_H802 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:huacanxing-h802-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DHUACANXING_H802 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:arilux-al-lc01] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DARILUX_AL_LC01 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:arilux-al-lc01-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DARILUX_AL_LC01 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:arilux-al-lc02] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DARILUX_AL_LC02 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:arilux-al-lc02-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DARILUX_AL_LC02 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:arilux-al-lc06] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DARILUX_AL_LC06 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:arilux-al-lc06-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DARILUX_AL_LC06 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:arilux-al-lc11] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DARILUX_AL_LC11 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:arilux-al-lc11-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DARILUX_AL_LC11 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:arilux-e27] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DARILUX_E27 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:arilux-e27-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DARILUX_E27 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-bnsz01] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_BNSZ01 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:itead-bnsz01-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DITEAD_BNSZ01 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:wion-50055] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DWION_50055 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:wion-50055-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DWION_50055 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:exs-wifi-relay-v31] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DEXS_WIFI_RELAY_V31 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:exs-wifi-relay-v31-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DEXS_WIFI_RELAY_V31 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:exs-wifi-relay-v50] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DEXS_WIFI_RELAY_V50 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:exs-wifi-relay-v50-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DEXS_WIFI_RELAY_V50 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:wemos-v9261f] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DGENERIC_V9261F -upload_speed = ${common.upload_speed_fast} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:wemos-v9261f-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DGENERIC_V9261F -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:esp01-v9261f] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DGENERIC_V9261F -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:esp01-v9261f-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DGENERIC_V9261F -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:wemos-ech1560] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DGENERIC_ECH1560 -upload_speed = ${common.upload_speed_fast} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:wemos-ech1560-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DGENERIC_ECH1560 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:esp01-ech1560] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DGENERIC_ECH1560 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:esp01-ech1560-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DGENERIC_ECH1560 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:mancavemade-esplive] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DMANCAVEMADE_ESPLIVE -upload_speed = ${common.upload_speed_fast} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:mancavemade-esplive-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DMANCAVEMADE_ESPLIVE -upload_speed = ${common.upload_speed_fast} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:intermittech-quinled] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DINTERMITTECH_QUINLED -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:intermittech-quinled-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DINTERMITTECH_QUINLED -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:xenon-sm-pw702u] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DXENON_SM_PW702U -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:xenon-sm-pw702u-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DXENON_SM_PW702U -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:authometion-lyt8266] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DAUTHOMETION_LYT8266 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:authometion-lyt8266-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DAUTHOMETION_LYT8266 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:kmc-70011] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DKMC_70011 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:kmc-70011-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DKMC_70011 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:yjzk-switch-1ch] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DYJZK_SWITCH_1CH -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:yjzk-switch-1ch-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DYJZK_SWITCH_1CH -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:yjzk-switch-2ch] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DYJZK_SWITCH_2CH -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:yjzk-switch-2ch-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DYJZK_SWITCH_2CH -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:yjzk-switch-3ch] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DYJZK_SWITCH_3CH -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:yjzk-switch-3ch-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DYJZK_SWITCH_3CH -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:generic-8ch] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DGENERIC_8CH -upload_speed = ${common.upload_speed_fast} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:gizwits-witty-cloud] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DGIZWITS_WITTY_CLOUD -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:gizwits-witty-cloud-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DGIZWITS_WITTY_CLOUD -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:euromate-wifi-stecker-shuko] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DEUROMATE_WIFI_STECKER_SCHUKO -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:euromate-wifi-stecker-shuko-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DEUROMATE_WIFI_STECKER_SCHUKO -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:tonbux-powerstrip02] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DTONBUX_POWERSTRIP02 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:tonbux-powerstrip02-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DTONBUX_POWERSTRIP02 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:lingan-swa1] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DLINGAN_SWA1 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:lingan-swa1-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DLINGAN_SWA1 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:stm-relay] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DSTM_RELAY -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:stm-relay-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DSTM_RELAY -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:heygo-hy02] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DHEYGO_HY02 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:heygo-hy02-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DHEYGO_HY02 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:maxcio-wus002s] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DMAXCIO_WUS002S -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:maxcio-wus002s-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DMAXCIO_WUS002S -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:yidian-xsssa05] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DYIDIAN_XSSSA05 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:yidian-xsssa05-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DYIDIAN_XSSSA05 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:tonbux-xsssa06] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DTONBUX_XSSSA06 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:tonbux-xsssa06-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DTONBUX_XSSSA06 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:green-esp8266relay] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DGREEN_ESP8266RELAY -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:green-esp8266relay-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DGREEN_ESP8266RELAY -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:ike-espike] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DIKE_ESPIKE -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:ike-espike-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DIKE_ESPIKE -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:arniex-swifitch] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DARNIEX_SWIFITCH -extra_scripts = ${common.extra_scripts} -monitor_speed = ${common.monitor_speed} - -[env:arniex-swifitch-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DARNIEX_SWIFITCH -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:zhilde-eu44-w] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DZHILDE_EU44_W -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:zhilde-eu44-w-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DZHILDE_EU44_W -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:luani-hvio] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DLUANI_HVIO -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:luani-hvio-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DLUANI_HVIO -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:neo-coolcam-power-plug-wifi] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DNEO_COOLCAM_NAS_WR01W -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:neo-coolcam-power-plug-wifi-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DNEO_COOLCAM_NAS_WR01W -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:estink-wifi-power-strip] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DESTINK_WIFI_POWER_STRIP -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:estink-wifi-power-strip-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DESTINK_WIFI_POWER_STRIP -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:iwoole-led-table-lamp] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DIWOOLE_LED_TABLE_LAMP -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:iwoole-led-table-lamp-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DIWOOLE_LED_TABLE_LAMP -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - - -# ------------------------------------------------------------------------------ -# GENERIC OTA ENVIRONMENTS -# ------------------------------------------------------------------------------ - -[env:generic-esp01s-relay-40] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_RELAY_V40 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:generic-esp01s-relay-40-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_RELAY_V40 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:generic-esp01s-rgbled-10] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_RGBLED_V10 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:generic-esp01s-rgbled-10-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_RGBLED_V10 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:generic-esp01s-dht11-10] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_DHT11_V10 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:generic-esp01s-dht11-10-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_DHT11_V10 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:generic-esp01s-ds18b20-10] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_DS18B20_V10 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:generic-esp01s-ds18b20-10-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_DS18B20_V10 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:heltec-touch-relay] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DHELTEC_TOUCHRELAY -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:heltec-touch-relay-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DHELTEC_TOUCHRELAY -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:allnet-4duino-iot-wlan-relais] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DALLNET_4DUINO_IOT_WLAN_RELAIS -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:allnet-4duino-iot-wlan-relais-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DALLNET_4DUINO_IOT_WLAN_RELAIS -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:tonbux-mosquito-killer] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DTONBUX_MOSQUITO_KILLER -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:tonbux-mosquito-killer-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DTONBUX_MOSQUITO_KILLER -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:pilotak-esp-din-v1] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DPILOTAK_ESP_DIN_V1 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:pilotak-esp-din-v1-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DPILOTAK_ESP_DIN_V1 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:nodemcu-geiger] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DGENERIC_GEIGER_COUNTER -upload_speed = ${common.upload_speed_fast} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:nodemcu-geiger-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DGENERIC_GEIGER_COUNTER -upload_speed = ${common.upload_speed_fast} -monitor_speed = ${common.monitor_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:blitzwolf-bwshp2] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DBLITZWOLF_BWSHP2 -upload_speed = ${common.upload_speed} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:blitzwolf-bwshp2-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DBLITZWOLF_BWSHP2 -upload_speed = ${common.upload_speed} -monitor_speed = ${common.monitor_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:homecube-16a] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DHOMECUBE_16A -upload_speed = ${common.upload_speed} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:homecube-16a-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DHOMECUBE_16A -upload_speed = ${common.upload_speed} -monitor_speed = ${common.monitor_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:bh-onofre] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DBH_ONOFRE -upload_speed = ${common.upload_speed_fast} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:bh-onofre-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_4m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_4m1m} -DBH_ONOFRE -upload_speed = ${common.upload_speed_fast} -monitor_speed = ${common.monitor_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:generic-ag-l4] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DGENERIC_AG_L4 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:generic-ag-l4-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DGENERIC_AG_L4 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -extra_scripts = ${common.extra_scripts} - -[env:lohas-e27-9w] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DLOHAS_9W -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:lohas-e27-9w-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DLOHAS_9W -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:allterco-shelly1] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_2m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_2m1m} -DALLTERCO_SHELLY1 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:allterco-shelly1-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_2m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_2m1m} -DALLTERCO_SHELLY1 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:allterco-shelly2] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_2m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_2m1m} -DALLTERCO_SHELLY2 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:allterco-shelly2-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_2m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_2m1m} -DALLTERCO_SHELLY2 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:xiaomi-smart-desk-lamp] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DXIAOMI_SMART_DESK_LAMP -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:xiaomi-smart-desk-lamp-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DXIAOMI_SMART_DESK_LAMP -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:phyx-esp12-rgb] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DPHYX_ESP12_RGB -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:phyx-esp12-rgb-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DPHYX_ESP12_RGB -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:bestek-mrj1011] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DBESTEK_MRJ1011 -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - -[env:bestek-mrj1011-ota] -platform = ${common.platform} -framework = ${common.framework} -board = ${common.board_1m} -board_build.flash_mode = ${common.flash_mode} -lib_deps = ${common.lib_deps} -lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m0m} -DBESTEK_MRJ1011 -upload_speed = ${common.upload_speed} -upload_port = ${common.upload_port} -upload_flags = ${common.upload_flags} -monitor_speed = ${common.monitor_speed} -extra_scripts = ${common.extra_scripts} - - -;=========== ESP-LINK ========================================================================= - -[common-esp-link] -build_flags = -g -w -DMQTT_MAX_PACKET_SIZE=400 -DNO_GLOBAL_EEPROM ${sysenv.ESPURNA_FLAGS} - -DPIO_FRAMEWORK_ARDUINO_LWIP_HIGHER_BANDWIDTH -build_flags_512k = ${common.build_flags} -Wl,-Teagle.flash.512k0m1s.ld -build_flags_1m0m = ${common.build_flags} -Wl,-Teagle.flash.1m0m1s.ld -build_flags_2m1m = ${common.build_flags} -Wl,-Teagle.flash.2m1m4s.ld -build_flags_4m1m = ${common.build_flags} -Wl,-Teagle.flash.4m1m4s.ld -build_flags_4m3m = ${common.build_flags} -Wl,-Teagle.flash.4m3m4s.ld - -# ------------------------------------------------------------------------------ -# OTA: -# ------------------------------------------------------------------------------ -upload_port = "${sysenv.ESPURNA_IP}" -upload_flags = --auth="${sysenv.ESPURNA_AUTH}" - -# ------------------------------------------------------------------------------ -# OTHER SETTINGS: -# ------------------------------------------------------------------------------ -framework = arduino -board_1m = esp01_1m -board_2m = esp_wroom_02 -board_4m = esp12e -flash_mode = dout -monitor_speed = 115200 -upload_speed = 115200 -upload_speed_fast = 921600 -extra_scripts = extra_scripts.py - -# ------------------------------------------------------------------------------ -# LIBRARIES: required dependencies -# Please note that we don't always use the latest version of a library. -# ------------------------------------------------------------------------------ -lib_deps = - ArduinoJson - https://github.com/marvinroger/async-mqtt-client#v0.8.1 - Brzo I2C - https://github.com/xoseperez/debounceevent.git#2.0.4 - https://github.com/xoseperez/eeprom_rotate#0.9.1 - Embedis - Encoder - https://github.com/plerup/espsoftwareserial#3.4.1 - https://github.com/me-no-dev/ESPAsyncTCP#55cd520 - https://github.com/me-no-dev/ESPAsyncWebServer#05306e4 + https://github.com/me-no-dev/ESPAsyncTCP + https://github.com/me-no-dev/ESPAsyncWebServer https://bitbucket.org/xoseperez/fauxmoesp.git#3.0.1 https://github.com/xoseperez/hlw8012.git#1.1.0 https://github.com/markszabo/IRremoteESP8266#v2.2.0 From 30ef99d2dcff736ef587b7eea103a645e5ae47a1 Mon Sep 17 00:00:00 2001 From: Thorsten von Eicken Date: Mon, 12 Nov 2018 21:04:40 -0800 Subject: [PATCH 8/8] small serial bridge fixes --- code/espurna/serialbridge.ino | 3 ++- code/platformio.ini | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/code/espurna/serialbridge.ino b/code/espurna/serialbridge.ino index 7fd9e7e379..9eafa8c37a 100644 --- a/code/espurna/serialbridge.ino +++ b/code/espurna/serialbridge.ino @@ -21,6 +21,7 @@ int _sbrAvrBaud; #if WEB_SUPPORT void _sbrWebSocketOnSend(JsonObject& root) { + //DEBUG_MSG_P(PSTR("[SERIAL BRIDGE] WebSocket OnSend\n")); root["sbrVisible"] = 1; root["sbrPort"] = getSetting("sbrPort", SBR_PORT); root["sbrBaud"] = getSetting("sbrBaud", SBR_BAUD); @@ -54,7 +55,7 @@ void serialBridgeSetup() { #if WEB_SUPPORT wsOnSendRegister(_sbrWebSocketOnSend); - wsOnActionRegister(_sbrWebSocketOnAction); + //wsOnActionRegister(_sbrWebSocketOnAction); #endif settingsRegisterKeyCheck(_sbrKeyCheck); diff --git a/code/platformio.ini b/code/platformio.ini index 99f2aca208..f49b571a32 100644 --- a/code/platformio.ini +++ b/code/platformio.ini @@ -81,7 +81,7 @@ lib_deps = Encoder https://github.com/plerup/espsoftwareserial#3.4.1 https://github.com/me-no-dev/ESPAsyncTCP - https://github.com/me-no-dev/ESPAsyncWebServer + https://github.com/me-no-dev/ESPAsyncWebServer#4c621f3 https://bitbucket.org/xoseperez/fauxmoesp.git#3.0.1 https://github.com/xoseperez/hlw8012.git#1.1.0 https://github.com/markszabo/IRremoteESP8266#v2.2.0