Make output state stick

This commit is contained in:
fvanroie 2021-04-26 02:32:09 +02:00
parent 9cda7d9d66
commit a1ae1f8d52
2 changed files with 11 additions and 13 deletions

View File

@ -210,12 +210,10 @@ static void dispatch_gpio(const char* topic, const char* payload)
{ {
#if HASP_USE_GPIO > 0 #if HASP_USE_GPIO > 0
int16_t val;
uint8_t pin;
if(topic == strstr_P(topic, PSTR("output"))) topic += 6;
if(Parser::is_only_digits(topic)) { if(Parser::is_only_digits(topic)) {
int16_t val;
uint8_t pin;
pin = atoi(topic); pin = atoi(topic);
if(strlen(payload) > 0) { if(strlen(payload) > 0) {
@ -251,13 +249,13 @@ void dispatch_command(const char* topic, const char* payload)
/* =============================== Not standard payload commands ===================================== */ /* =============================== Not standard payload commands ===================================== */
if(topic == strstr_P(topic, PSTR("gpio/"))) { // if(topic == strstr_P(topic, PSTR("gpio/"))) {
if(topic == strstr_P(topic, PSTR("output"))) {
dispatch_gpio(topic + 5, payload); dispatch_gpio(topic + 6, payload);
// } else if(strcasecmp_P(topic, PSTR("screenshot")) == 0) { // } else if(strcasecmp_P(topic, PSTR("screenshot")) == 0) {
// guiTakeScreenshot("/screenshot.bmp"); // Literal String // guiTakeScreenshot("/screenshot.bmp"); // Literal String
} else if((topic[0] == 'p' || topic[0] == 'P') && dispatch_parse_button_attribute(topic, payload)) { } else if((topic[0] == 'p' || topic[0] == 'P') && dispatch_parse_button_attribute(topic, payload)) {
return; // matched pxby.attr return; // matched pxby.attr
@ -284,7 +282,6 @@ void dispatch_command(const char* topic, const char* payload)
#endif // HASP_USE_MQTT #endif // HASP_USE_MQTT
#endif // HASP_USE_CONFIG #endif // HASP_USE_CONFIG
} else { } else {
if(strlen(payload) == 0) { if(strlen(payload) == 0) {
// dispatch_text_line(topic); // Could cause an infinite loop! // dispatch_text_line(topic); // Could cause an infinite loop!

View File

@ -324,7 +324,7 @@ void gpio_get_value(hasp_gpio_config_t gpio)
{ {
char payload[32]; char payload[32];
char topic[12]; char topic[12];
snprintf_P(topic, sizeof(topic), PSTR("gpio%d"), gpio.pin); snprintf_P(topic, sizeof(topic), PSTR("output%d"), gpio.pin);
snprintf_P(payload, sizeof(payload), PSTR("%d"), gpio.val); snprintf_P(payload, sizeof(payload), PSTR("%d"), gpio.val);
dispatch_state_subtopic(topic, payload); dispatch_state_subtopic(topic, payload);
@ -333,12 +333,12 @@ void gpio_get_value(hasp_gpio_config_t gpio)
void gpio_get_value(uint8_t pin) void gpio_get_value(uint8_t pin)
{ {
for(uint8_t i = 0; i < HASP_NUM_GPIO_CONFIG; i++) { for(uint8_t i = 0; i < HASP_NUM_GPIO_CONFIG; i++) {
if(gpioConfig[i].pin == pin) return gpio_get_value(gpioConfig[i]); if(gpioConfig[i].pin == pin && gpioConfigInUse(i)) return gpio_get_value(gpioConfig[i]);
} }
LOG_WARNING(TAG_GPIO, F(D_BULLET "Pin %d is not configured"), pin); LOG_WARNING(TAG_GPIO, F(D_BULLET "Pin %d is not configured"), pin);
} }
void gpio_set_value(hasp_gpio_config_t gpio, int16_t val) void gpio_set_value(hasp_gpio_config_t& gpio, int16_t val)
{ {
bool inverted = false; bool inverted = false;
@ -405,7 +405,7 @@ void gpio_set_value(hasp_gpio_config_t gpio, int16_t val)
void gpio_set_value(uint8_t pin, int16_t val) void gpio_set_value(uint8_t pin, int16_t val)
{ {
for(uint8_t i = 0; i < HASP_NUM_GPIO_CONFIG; i++) { for(uint8_t i = 0; i < HASP_NUM_GPIO_CONFIG; i++) {
if(gpioConfig[i].pin == pin) return gpio_set_value(gpioConfig[i], val); if(gpioConfig[i].pin == pin && gpioConfigInUse(i)) return gpio_set_value(gpioConfig[i], val);
} }
LOG_WARNING(TAG_GPIO, F(D_BULLET "Pin %d is not configured"), pin); LOG_WARNING(TAG_GPIO, F(D_BULLET "Pin %d is not configured"), pin);
} }
@ -666,6 +666,7 @@ void gpio_discovery(JsonArray& relay, JsonArray& led)
case HASP_GPIO_LED_R_INVERTED: case HASP_GPIO_LED_R_INVERTED:
case HASP_GPIO_LED_G_INVERTED: case HASP_GPIO_LED_G_INVERTED:
case HASP_GPIO_LED_B_INVERTED: case HASP_GPIO_LED_B_INVERTED:
case HASP_GPIO_SERIAL_DIMMER:
led.add(gpioConfig[i].pin); led.add(gpioConfig[i].pin);
break; break;