diff --git a/sonoff/_changelog.ino b/sonoff/_changelog.ino index e2e608d79..4698dc463 100644 --- a/sonoff/_changelog.ino +++ b/sonoff/_changelog.ino @@ -1,4 +1,7 @@ -/* 6.5.0.6 20190409 +/* 6.5.0.7 20190410 + * Add command LedMask to assign which relay has access to power LED (#5602, #5612) + * + * 6.5.0.6 20190409 * Add WebColor parameters to Settings making them persistent and remove the need for using a rule * Add alternative IRSend command syntax IRSend raw,,
,
,,,, (#5610) * diff --git a/sonoff/i18n.h b/sonoff/i18n.h index cd6893489..ab7063407 100644 --- a/sonoff/i18n.h +++ b/sonoff/i18n.h @@ -266,6 +266,7 @@ #define D_CMND_ALTITUDE "Altitude" #define D_CMND_LEDPOWER "LedPower" #define D_CMND_LEDSTATE "LedState" +#define D_CMND_LEDMASK "LedMask" #define D_CMND_I2CSCAN "I2CScan" #define D_CMND_SERIALSEND "SerialSend" #define D_CMND_SERIALDELIMITER "SerialDelimiter" diff --git a/sonoff/my_user_config.h b/sonoff/my_user_config.h index 042a01cd5..c076574e5 100644 --- a/sonoff/my_user_config.h +++ b/sonoff/my_user_config.h @@ -187,6 +187,7 @@ #define APP_TIMEZONE 1 // [Timezone] +1 hour (Amsterdam) (-13 .. 14 = hours from UTC, 99 = use TIME_DST/TIME_STD) #define APP_LEDSTATE LED_POWER // [LedState] Function of led // (LED_OFF, LED_POWER, LED_MQTTSUB, LED_POWER_MQTTSUB, LED_MQTTPUB, LED_POWER_MQTTPUB, LED_MQTT, LED_POWER_MQTT) +#define APP_LEDMASK 0xFFFF // [LedMask] Assign Relay to Power led (0xFFFF is default) #define APP_PULSETIME 0 // [PulseTime] Time in 0.1 Sec to turn off power for relay 1 (0 = disabled) #define APP_POWERON_STATE POWER_ALL_SAVED // [PowerOnState] Power On Relay state // (POWER_ALL_OFF, POWER_ALL_ON, POWER_ALL_SAVED_TOGGLE, POWER_ALL_SAVED, POWER_ALL_ALWAYS_ON, POWER_ALL_OFF_PULSETIME_ON) diff --git a/sonoff/settings.h b/sonoff/settings.h index b0413207d..1bb48ab8b 100644 --- a/sonoff/settings.h +++ b/sonoff/settings.h @@ -341,9 +341,7 @@ struct SYSCFG { uint32_t displays; // 7B0 uint32_t energy_kWhtotal_time; // 7B4 unsigned long weight_item; // 7B8 Weight of one item in gram * 10 - - uint8_t free_7BC[2]; // 7BC - + uint16_t ledmask; // 7BC uint16_t weight_max; // 7BE Total max weight in kilogram unsigned long weight_reference; // 7C0 Reference weight in gram unsigned long weight_calibration; // 7C4 diff --git a/sonoff/settings.ino b/sonoff/settings.ino index b5984ddf1..f84173504 100644 --- a/sonoff/settings.ino +++ b/sonoff/settings.ino @@ -695,6 +695,7 @@ void SettingsDefaultSet2(void) Settings.blinktime = APP_BLINKTIME; Settings.blinkcount = APP_BLINKCOUNT; Settings.ledstate = APP_LEDSTATE; + Settings.ledmask = APP_LEDMASK; Settings.pulse_timer[0] = APP_PULSETIME; // for (uint8_t i = 1; i < MAX_PULSETIMERS; i++) { Settings.pulse_timer[i] = 0; } @@ -1160,6 +1161,9 @@ void SettingsDelta(void) if (Settings.version < 0x06050006) { SettingsDefaultWebColor(); } + if (Settings.version < 0x06050007) { + Settings.ledmask = APP_LEDMASK; + } Settings.version = VERSION; SettingsSave(1); diff --git a/sonoff/sonoff.ino b/sonoff/sonoff.ino index 7dd24f2c2..dba4e449b 100755 --- a/sonoff/sonoff.ino +++ b/sonoff/sonoff.ino @@ -76,7 +76,7 @@ enum TasmotaCommands { CMND_COUNTERDEBOUNCE, CMND_BUTTONDEBOUNCE, CMND_SWITCHDEBOUNCE, CMND_SLEEP, CMND_UPGRADE, CMND_UPLOAD, CMND_OTAURL, CMND_SERIALLOG, CMND_SYSLOG, CMND_LOGHOST, CMND_LOGPORT, CMND_IPADDRESS, CMND_NTPSERVER, CMND_AP, CMND_SSID, CMND_PASSWORD, CMND_HOSTNAME, CMND_WIFICONFIG, CMND_FRIENDLYNAME, CMND_SWITCHMODE, CMND_INTERLOCK, CMND_TEMPLATE, - CMND_TELEPERIOD, CMND_RESTART, CMND_RESET, CMND_TIMEZONE, CMND_TIMESTD, CMND_TIMEDST, CMND_ALTITUDE, CMND_LEDPOWER, CMND_LEDSTATE, + CMND_TELEPERIOD, CMND_RESTART, CMND_RESET, CMND_TIMEZONE, CMND_TIMESTD, CMND_TIMEDST, CMND_ALTITUDE, CMND_LEDPOWER, CMND_LEDSTATE, CMND_LEDMASK, CMND_I2CSCAN, CMND_SERIALSEND, CMND_BAUDRATE, CMND_SERIALDELIMITER, CMND_DRIVER }; const char kTasmotaCommands[] PROGMEM = D_CMND_BACKLOG "|" D_CMND_DELAY "|" D_CMND_POWER "|" D_CMND_FANSPEED "|" D_CMND_STATUS "|" D_CMND_STATE "|" D_CMND_POWERONSTATE "|" D_CMND_PULSETIME "|" @@ -86,7 +86,7 @@ const char kTasmotaCommands[] PROGMEM = D_CMND_COUNTERDEBOUNCE "|" D_CMND_BUTTONDEBOUNCE "|" D_CMND_SWITCHDEBOUNCE "|" D_CMND_SLEEP "|" D_CMND_UPGRADE "|" D_CMND_UPLOAD "|" D_CMND_OTAURL "|" D_CMND_SERIALLOG "|" D_CMND_SYSLOG "|" D_CMND_LOGHOST "|" D_CMND_LOGPORT "|" D_CMND_IPADDRESS "|" D_CMND_NTPSERVER "|" D_CMND_AP "|" D_CMND_SSID "|" D_CMND_PASSWORD "|" D_CMND_HOSTNAME "|" D_CMND_WIFICONFIG "|" D_CMND_FRIENDLYNAME "|" D_CMND_SWITCHMODE "|" D_CMND_INTERLOCK "|" D_CMND_TEMPLATE "|" - D_CMND_TELEPERIOD "|" D_CMND_RESTART "|" D_CMND_RESET "|" D_CMND_TIMEZONE "|" D_CMND_TIMESTD "|" D_CMND_TIMEDST "|" D_CMND_ALTITUDE "|" D_CMND_LEDPOWER "|" D_CMND_LEDSTATE "|" + D_CMND_TELEPERIOD "|" D_CMND_RESTART "|" D_CMND_RESET "|" D_CMND_TIMEZONE "|" D_CMND_TIMESTD "|" D_CMND_TIMEDST "|" D_CMND_ALTITUDE "|" D_CMND_LEDPOWER "|" D_CMND_LEDSTATE "|" D_CMND_LEDMASK "|" D_CMND_I2CSCAN "|" D_CMND_SERIALSEND "|" D_CMND_BAUDRATE "|" D_CMND_SERIALDELIMITER "|" D_CMND_DRIVER; const char kSleepMode[] PROGMEM = "Dynamic|Normal"; @@ -513,7 +513,7 @@ void MqttDataHandler(char* topic, uint8_t* data, unsigned int data_len) if (!strcmp(dataBuf,"?")) { data_len = 0; } int16_t payload = -99; // No payload uint16_t payload16 = 0; - long payload32 = strtol(dataBuf, &p, 10); + long payload32 = strtol(dataBuf, &p, 0); // decimal, octal (0) or hex (0x) if (p != dataBuf) { payload = (int16_t) payload32; // -32766 - 32767 payload16 = (uint16_t) payload32; // 0 - 65535 @@ -525,7 +525,7 @@ void MqttDataHandler(char* topic, uint8_t* data, unsigned int data_len) int temp_payload = GetStateNumber(dataBuf); if (temp_payload > -1) { payload = temp_payload; } -// AddLog_P2(LOG_LEVEL_DEBUG, PSTR("RSLT: Payload %d, Payload16 %d"), payload, payload16); +// AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_RESULT "Payload %d, Payload16 %d, payload32 %u"), payload, payload16, payload32); int command_code = GetCommandCode(command, sizeof(command), type, kTasmotaCommands); if (-1 == command_code) { @@ -1426,6 +1426,12 @@ void MqttDataHandler(char* topic, uint8_t* data, unsigned int data_len) } Response_P(S_JSON_COMMAND_NVALUE, command, Settings.ledstate); } + else if (CMND_LEDMASK == command_code) { + if (data_len > 0) { + Settings.ledmask = payload16; + } + Response_P(S_JSON_COMMAND_NVALUE, command, Settings.ledmask); + } #ifdef USE_I2C else if ((CMND_I2CSCAN == command_code) && i2c_flg) { I2cScan(mqtt_data, sizeof(mqtt_data)); @@ -1991,7 +1997,7 @@ void Every250mSeconds(void) } } else if (Settings.ledstate &1) { - bool tstate = power; + bool tstate = power & Settings.ledmask; if ((SONOFF_TOUCH == my_module_type) || (SONOFF_T11 == my_module_type) || (SONOFF_T12 == my_module_type) || (SONOFF_T13 == my_module_type)) { tstate = (!power) ? 1 : 0; // As requested invert signal for Touch devices to find them in the dark } diff --git a/sonoff/sonoff_version.h b/sonoff/sonoff_version.h index 75fc2d1b4..30b6cc65e 100644 --- a/sonoff/sonoff_version.h +++ b/sonoff/sonoff_version.h @@ -20,6 +20,6 @@ #ifndef _SONOFF_VERSION_H_ #define _SONOFF_VERSION_H_ -const uint32_t VERSION = 0x06050006; +const uint32_t VERSION = 0x06050007; #endif // _SONOFF_VERSION_H_