void b3_short() { if (hm_is_waiting_for_pairing) { hm_do_stop_pairing = true; } else { switch (dim_level_percent) // step trough different levels to ease setup and installation { case 0: dimmer_set(100); break; case 100: dimmer_set(50); break; case 50: dimmer_set(96); break; case 96: dimmer_set(4); break; default: dimmer_set(0); } } }
void dimmer_init() { DIM_REL_PORT &= ~_BV(DIM_REL_BIT); DIM_REL_DDR |= _BV(DIM_REL_BIT); DIM_PWM_DDR &= ~_BV(DIM_PWM_BIT); // direction input during setup DIM_PWM_PORT &= ~_BV(DIM_PWM_BIT); // disable pullup DIM_PWM_INIT(); dimmer_set(0); // set initial state }
void ICACHE_FLASH_ATTR dimmer_handler( struct espconn *pConnection, request_method method, char *url, char *data, uint16 data_len, uint32 content_len, char *response, uint16 response_len ) { i2c_status status = I2C_OK; i2c_config *config = i2c_init_handler(DIMMER_STR, DIMMER_URL, dimmer_init, url, response); if (config == NULL) { return; } dimmer_config_data *config_data = (dimmer_config_data *)config->data; struct jsonparse_state parser; int type; if (method == POST && data != NULL && data_len != 0) { jsonparse_setup(&parser, data, data_len); while ((type = jsonparse_next(&parser)) != 0) { if (type == JSON_TYPE_PAIR_NAME) { if (jsonparse_strcmp_value(&parser, "Relay") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); config_data->relay = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "Brightness") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); config_data->brightness = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "Refresh") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); dimmer_refresh = jsonparse_get_value_as_int(&parser) * 1000; } else if (jsonparse_strcmp_value(&parser, "Each") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); dimmer_each = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "Threshold") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); dimmer_threshold = jsonparse_get_value_as_int(&parser); } } } dimmer_timer_init(); status = dimmer_set(config); } char address_str[MAX_I2C_ADDRESS]; json_i2c_address(address_str, config->address); if (status == I2C_OK) { dimmer_response(config, response, true); } else { json_error(response, DIMMER_STR, i2c_status_str(status), address_str); } }