From 2f85a4728b238fcc548d393ce04eb2c7aa8314f4 Mon Sep 17 00:00:00 2001 From: andrethomas Date: Mon, 1 Oct 2018 19:32:55 +0200 Subject: [PATCH] PCA9685 - bugfix for telemetry + status command --- sonoff/xdrv_15_pca9685.ino | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/sonoff/xdrv_15_pca9685.ino b/sonoff/xdrv_15_pca9685.ino index 9cb9292a0..b29e85a5b 100644 --- a/sonoff/xdrv_15_pca9685.ino +++ b/sonoff/xdrv_15_pca9685.ino @@ -98,6 +98,7 @@ void PCA9685_SetPWM(uint8_t pin, uint16_t pwm, bool inverted) { } else { PCA9685_SetPWM_Reg(pin, 0, pwm); } + pca9685_pin_pwm_value[pin] = pwm; } bool PCA9685_Command(void) @@ -120,6 +121,8 @@ bool PCA9685_Command(void) if (!strcmp(subStr(sub_string, XdrvMailbox.data, ",", 1),"RESET")) { PCA9685_Reset(); return serviced; } + if (!strcmp(subStr(sub_string, XdrvMailbox.data, ",", 1),"STATUS")) { PCA9685_OutputTelemetry(false); return serviced; } + if (!strcmp(subStr(sub_string, XdrvMailbox.data, ",", 1),"PWMF")) { if (paramcount > 1) { uint16_t new_freq = atoi(subStr(sub_string, XdrvMailbox.data, ",", 2)); @@ -162,7 +165,7 @@ bool PCA9685_Command(void) return serviced; } -void PCA9685_OutputTelemetry(void) { +void PCA9685_OutputTelemetry(bool telemetry) { if (0 == pca9685_detected) { return; } // We do not do this if the PCA9685 has not been detected snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"" D_JSON_TIME "\":\"%s\",\"PCA9685\": {"), GetDateAndTime(DT_LOCAL).c_str()); snprintf_P(mqtt_data,sizeof(mqtt_data), PSTR("%s\"PWM_FREQ\":%i,"),mqtt_data,pca9685_freq); @@ -170,7 +173,9 @@ void PCA9685_OutputTelemetry(void) { snprintf_P(mqtt_data,sizeof(mqtt_data), PSTR("%s\"PWM%i\":%i,"),mqtt_data,pin,pca9685_pin_pwm_value[pin]); } snprintf_P(mqtt_data,sizeof(mqtt_data),PSTR("%s\"END\":1}}"),mqtt_data); - MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_SENSOR), Settings.flag.mqtt_sensor_retain); + if (telemetry) { + MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_SENSOR), Settings.flag.mqtt_sensor_retain); + } } boolean Xdrv15(byte function) @@ -182,7 +187,7 @@ boolean Xdrv15(byte function) case FUNC_EVERY_SECOND: PCA9685_Detect(); if (tele_period == 0) { - PCA9685_OutputTelemetry(); + PCA9685_OutputTelemetry(true); } break; case FUNC_COMMAND: