From 60426fca2f2858fc8d1fe107bf4384b8e9f97fa3 Mon Sep 17 00:00:00 2001 From: arendst Date: Thu, 12 Oct 2017 14:09:19 +0200 Subject: [PATCH] v5.8.0k - Clean up Add retain to ENERGY messages controlled by command SensorRetain (#1013) --- sonoff/_releasenotes.ino | 1 + sonoff/settings.ino | 16 +++++++++------- sonoff/sonoff.ino | 18 +++++++++++------- sonoff/support.ino | 2 +- 4 files changed, 22 insertions(+), 15 deletions(-) diff --git a/sonoff/_releasenotes.ino b/sonoff/_releasenotes.ino index 4b38ee28b..62b428163 100644 --- a/sonoff/_releasenotes.ino +++ b/sonoff/_releasenotes.ino @@ -1,6 +1,7 @@ /* 5.8.0k * Add support for up to 8 relays (#995) * Fix Blocked Loop when erasing large flash using command reset 2 (#1002) + * Add retain to ENERGY messages controlled by command SensorRetain (#1013) * * 5.8.0j * Set default altitude to 0 to be used with pressure sensors diff --git a/sonoff/settings.ino b/sonoff/settings.ino index ba42002ea..29c932233 100644 --- a/sonoff/settings.ino +++ b/sonoff/settings.ino @@ -432,7 +432,7 @@ void CFG_DefaultSet2() sysCfg.sleep = APP_SLEEP; sysCfg.domoticz_update_timer = DOMOTICZ_UPDATE_TIMER; - for (byte i = 0; i < 4; i++) { + for (byte i = 0; i < MAX_SWITCHES; i++) { sysCfg.switchmode[i] = SWITCH_MODE; // sysCfg.domoticz_relay_idx[i] = 0; // sysCfg.domoticz_key_idx[i] = 0; @@ -477,7 +477,7 @@ void CFG_DefaultSet2() sysCfg.pulsetime[0] = APP_PULSETIME; // 4.0.7 -// for (byte i = 0; i < 5; i++) sysCfg.pwmvalue[i] = 0; +// for (byte i = 0; i < MAX_PWMS; i++) sysCfg.pwmvalue[i] = 0; // 4.0.9 CFG_DefaultSet_4_0_9(); @@ -530,7 +530,7 @@ void CFG_DefaultSet_3_2_4() void CFG_DefaultSet_3_9_3() { - for (byte i = 0; i < 4; i++) { + for (byte i = 0; i < MAX_DOMOTICZ_IDX; i++) { sysCfg.domoticz_switch_idx[i] = 0; } for (byte i = 0; i < 12; i++) { @@ -543,7 +543,7 @@ void CFG_DefaultSet_3_9_3() } sysCfg.led_pixels = WS2812_LEDS; - for (byte i = 0; i < 5; i++) { + for (byte i = 0; i < MAX_PWMS; i++) { sysCfg.led_color[i] = 255; } sysCfg.led_table = 0; @@ -560,7 +560,7 @@ void CFG_DefaultSet_4_0_4() strlcpy(sysCfg.ntp_server[0], NTP_SERVER1, sizeof(sysCfg.ntp_server[0])); strlcpy(sysCfg.ntp_server[1], NTP_SERVER2, sizeof(sysCfg.ntp_server[1])); strlcpy(sysCfg.ntp_server[2], NTP_SERVER3, sizeof(sysCfg.ntp_server[2])); - for (byte j =0; j < 3; j++) { + for (byte j = 0; j < 3; j++) { for (byte i = 0; i < strlen(sysCfg.ntp_server[j]); i++) { if (sysCfg.ntp_server[j][i] == ',') { sysCfg.ntp_server[j][i] = '.'; @@ -635,7 +635,9 @@ void CFG_Delta() strlcpy(sysCfg.web_password, WEB_PASSWORD, sizeof(sysCfg.web_password)); } if (sysCfg.version < 0x03091500) { - for (byte i = 0; i < 4; i++) sysCfg.switchmode[i] = SWITCH_MODE; + for (byte i = 0; i < MAX_SWITCHES; i++) { + sysCfg.switchmode[i] = SWITCH_MODE; + } } if (sysCfg.version < 0x04000400) { CFG_DefaultSet_4_0_4(); @@ -645,7 +647,7 @@ void CFG_Delta() sysCfg.my_gp.io[MAX_GPIO_PIN -1] = 0; // Clear ADC0 } if (sysCfg.version < 0x04000700) { - for (byte i = 0; i < 5; i++) { + for (byte i = 0; i < MAX_PWMS; i++) { sysCfg.pwmvalue[i] = 0; } } diff --git a/sonoff/sonoff.ino b/sonoff/sonoff.ino index 5cacf90ea..2e288a257 100644 --- a/sonoff/sonoff.ino +++ b/sonoff/sonoff.ino @@ -788,6 +788,7 @@ boolean mqtt_command(boolean grpflg, char *type, uint16_t index, char *dataBuf, if (!payload) { mqtt_data[0] = '\0'; mqtt_publish_topic_P(2, PSTR(D_RSLT_SENSOR), sysCfg.flag.mqtt_sensor_retain); + mqtt_publish_topic_P(2, PSTR(D_RSLT_ENERGY), sysCfg.flag.mqtt_sensor_retain); } sysCfg.flag.mqtt_sensor_retain = payload; } @@ -1807,7 +1808,7 @@ void state_mqttPresent() void sensors_mqttPresent(uint8_t* djson) { snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s{\"" D_TIME "\":\"%s\""), mqtt_data, getDateTime().c_str()); - for (byte i = 0; i < 4; i++) { + for (byte i = 0; i < MAX_SWITCHES; i++) { if (pin[GPIO_SWT1 +i] < 99) { boolean swm = ((FOLLOW_INV == sysCfg.switchmode[i]) || (PUSHBUTTON_INV == sysCfg.switchmode[i]) || (PUSHBUTTONHOLD_INV == sysCfg.switchmode[i])); snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s, \"" D_SWITCH "%d\":\"%s\""), mqtt_data, i +1, getStateText(swm ^ lastwallswitch[i])); @@ -2370,7 +2371,7 @@ void stateloop() if (sysCfg.flag.savestate) { power_t mask = POWER_MASK; for (byte i = 0; i < MAX_PULSETIMERS; i++) { - if ((sysCfg.pulsetime[i] > 0) && (sysCfg.pulsetime[i] < 30)) { + if ((sysCfg.pulsetime[i] > 0) && (sysCfg.pulsetime[i] < 30)) { // 3 seconds mask &= ~(1 << i); } } @@ -2640,9 +2641,6 @@ void GPIO_init() pinMode(pin[GPIO_REL1 +i], OUTPUT); Maxdevice++; } -// if (pin[GPIO_KEY1 +i] < 99) { -// pinMode(pin[GPIO_KEY1 +i], (16 == pin[GPIO_KEY1 +i]) ? INPUT_PULLDOWN_16 : INPUT_PULLUP); -// } } } for (byte i = 0; i < MAX_KEYS; i++) { @@ -2724,6 +2722,7 @@ extern struct rst_info resetInfo; void setup() { byte idx; + uint8_t maxdev; Serial.begin(Baudrate); delay(10); @@ -2817,15 +2816,20 @@ void setup() } // Issue #526 - uint8_t maxdev = (Maxdevice > MAX_RELAYS) ? MAX_RELAYS : Maxdevice; + maxdev = (Maxdevice > MAX_RELAYS) ? MAX_RELAYS : Maxdevice; for (byte i = 0; i < maxdev; i++) { if (pin[GPIO_REL1 +i] < 99) { if (digitalRead(pin[GPIO_REL1 +i]) ^ bitRead(rel_inverted, i)) { bitSet(power, i); - pulse_timer[i] = sysCfg.pulsetime[i]; // MAX_PULSETIMERS must be equal to MAX_RELAYS for this to work here } } } + maxdev = (Maxdevice > MAX_PULSETIMERS) ? MAX_PULSETIMERS : Maxdevice; + for (byte i = 0; i < maxdev; i++) { + if (bitRead(power, i)) { + pulse_timer[i] = sysCfg.pulsetime[i]; // MAX_PULSETIMERS must be equal to MAX_RELAYS for this to work here + } + } blink_powersave = power; diff --git a/sonoff/support.ino b/sonoff/support.ino index 4ef39057f..6e8aa3d0e 100644 --- a/sonoff/support.ino +++ b/sonoff/support.ino @@ -732,7 +732,7 @@ int32_t i2c_read(uint8_t addr, uint8_t reg, uint8_t size) if (0 == Wire.endTransmission(false)) { // Try to become I2C Master, send data and collect bytes, keep master status for next request... Wire.requestFrom((int)addr, (int)size); // send data n-bytes read if (Wire.available() == size) { - for(byte i = 0; i < size; i++) { + for (byte i = 0; i < size; i++) { data <<= 8; data |= Wire.read(); // receive DATA }