/****************************************************************************** * FunctionName : jsonparse_get_value_as_sint * Description : * Parameters : *******************************************************************************/ int ICACHE_FLASH_ATTR jsonparse_get_value_as_sint(struct jsonparse_state *parser) { if (parser->vtype == JSON_TYPE_ERROR) { jsonparse_next(parser); return -jsonparse_get_value_as_int(parser); } return jsonparse_get_value_as_int(parser); }
LOCAL int ICACHE_FLASH_ATTR msg_set2(struct jsontree_context *js_ctx, struct jsonparse_state *parse) { int type; while ((type = jsonparse_next(parse)) != 0) { if (type == JSON_TYPE_PAIR_NAME) { if (jsonparse_strcmp_value(parse,"main") == 0) { int version=0; jsonparse_next(parse); jsonparse_next(parse); version = jsonparse_get_value_as_int(parse); os_printf("version2 =>>> : %d \r\n",version); } else if(jsonparse_strcmp_value(parse,"sub") == 0) { int version=0; jsonparse_next(parse); jsonparse_next(parse); version = jsonparse_get_value_as_int(parse); os_printf("version3 === : %d \r\n",version); } } } return 0; }
void ICACHE_FLASH_ATTR switch1_handler( struct espconn *pConnection, request_method method, char *url, char *data, uint16 data_len, uint32 content_len, char *response, uint16 response_len ) { struct jsonparse_state parser; int type; uint16 state = 0; 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); state = jsonparse_get_value_as_int(&parser); user_switch1_set(0, state); } } } } user_switch1_state(response); }
void ICACHE_FLASH_ATTR mod_tc_mk2_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_config *config = i2c_init_handler("MOD-TC-MK2", MOD_TC_MK2_URL, tc_init, url, response); if (config == NULL) { return; } tc_config_data *config_data = (tc_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, "Refresh") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); tc_refresh = jsonparse_get_value_as_int(&parser) * 1000; } else if (jsonparse_strcmp_value(&parser, "Each") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); tc_each = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "Threshold") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); tc_threshold = jsonparse_get_value_as_int(&parser); } } } mod_tc_mk2_timer_init(); } mod_tc_mk2_read(config, response, true); }
// ---------------------------------------------------------------------------- // CGI that receives the json list of canister contents // ---------------------------------------------------------------------------- void ICACHE_FLASH_ATTR put_contents(char *jsdata, int len) { char type; char str[80]; char buffer[1024]; // contents names struct jsonparse_state state; struct jsonparse_state *js = &state; jsonparse_setup(js, jsdata, len); type = jsonparse_next(js); if(type != JSON_TYPE_OBJECT) { os_printf("Not a valid JSON file(1)\n"); return; } type = jsonparse_next(js); if(type != JSON_TYPE_PAIR_NAME) { os_printf("Not a valid JSON file(2)\n"); return; } jsonparse_copy_value(js, str, 80); if(jsonparse_strcmp_value(js, "contents") != 0) { os_printf("Not a valid Contents file\n"); return; } int n = 0; for(int i=0; i < 1024; i++) buffer[i] = 0; while(js->pos < js->len) { type = jsonparse_next(js); if(type != JSON_TYPE_PAIR_NAME) continue; if(jsonparse_strcmp_value(js, "name") == 0) { type = jsonparse_next(js); if(type == JSON_TYPE_PAIR) { type = jsonparse_next(js); if(type == JSON_TYPE_STRING) { jsonparse_copy_value(js, &buffer[n], 30); n += 32; } } } if(jsonparse_strcmp_value(js, "amount") == 0) { type = jsonparse_next(js); if(type == JSON_TYPE_PAIR) { type = jsonparse_next(js); int val = 0; if(type == JSON_TYPE_NUMBER) val = jsonparse_get_value_as_int(js); else if(type == JSON_TYPE_STRING) { jsonparse_copy_value(js, str, 16); val = atoi(str); } buffer[n-2] = (uint8_t)(val >> 8); buffer[n-1] = (uint8_t)(val & 0xff); } }
void ICACHE_FLASH_ATTR adc_handler( struct espconn *pConnection, request_method method, char *url, char *data, uint16 data_len, uint32 content_len, char *response, uint16 response_len ) { 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, "Refresh") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); adc_refresh = jsonparse_get_value_as_int(&parser) * 1000; } else if (jsonparse_strcmp_value(&parser, "Each") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); adc_each = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "Threshold") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); adc_threshold = jsonparse_get_value_as_int(&parser); } } } user_adc_timer_init(); } adc_read(response, true); }
LOCAL bool ICACHE_FLASH_ATTR mod_led_8x8_rgb_parse(char *data, uint16 data_len) { struct jsonparse_state parser; int type; uint8 cols = mod_led_8x8_cols; uint8 rows = mod_led_8x8_rows; uint8 speed = mod_led_8x8_speed; if (mod_led_8x8_text == NULL) { mod_led_8x8_text = (char *)os_zalloc(MOD_LED_8x8_RGB_MAX_TEXT); } jsonparse_setup(&parser, data, data_len); while ((type = jsonparse_next(&parser)) != 0) { if (type == JSON_TYPE_PAIR_NAME) { if (jsonparse_strcmp_value(&parser, "cols") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); mod_led_8x8_cols = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "rows") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); mod_led_8x8_rows = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "Speed") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); mod_led_8x8_speed = jsonparse_get_value_as_int(&parser); if (mod_led_8x8_speed > MOD_LED_8x8_RGB_MAX_SPEED) { mod_led_8x8_speed = MOD_LED_8x8_RGB_MAX_SPEED; } } else if (jsonparse_strcmp_value(&parser, "R") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); mod_led_8x8_r = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "G") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); mod_led_8x8_g = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "B") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); mod_led_8x8_b = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "Text") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); jsonparse_copy_value(&parser, mod_led_8x8_text, MOD_LED_8x8_RGB_MAX_TEXT); } } } return ( cols != mod_led_8x8_cols || rows != mod_led_8x8_rows || speed != mod_led_8x8_speed ); }
LOCAL int ICACHE_FLASH_ATTR msg_set(struct jsontree_context *js_ctx, struct jsonparse_state *parse) { int type; while ((type = jsonparse_next(parse)) != 0) { if (jsonparse_strcmp_value(parse,"v") == 0) { int version=0; jsonparse_next(parse); jsonparse_next(parse); version = jsonparse_get_value_as_int(parse); os_printf("version : %d \r\n",version); } } return 0; }
static int ICACHE_FLASH_ATTR scanres_set(struct jsontree_context *js_ctx, struct jsonparse_state *parser) { int type; while ((type = jsonparse_next(parser)) != 0) { if (type == JSON_TYPE_PAIR_NAME) { if (jsonparse_strcmp_value(parser, "page") == 0) { jsonparse_next(parser); jsonparse_next(parser); param.pagenum = jsonparse_get_value_as_int(parser); return 0; } } } return 0; }
void ICACHE_FLASH_ATTR mod_irda_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(MOD_IRDA, MOD_IRDA_URL, irda_init, url, response); if (config == NULL) { return; } irda_config_data *config_data = (irda_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, "Mode") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); if (jsonparse_strcmp_value(&parser, "SIRC") == 0) { config_data->mode = 1; } else { config_data->mode = 0; } } else if (jsonparse_strcmp_value(&parser, "Device") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); config_data->device = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "Command") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); config_data->command = jsonparse_get_value_as_int(&parser); } } } status = irda_set(config); } char address_str[MAX_I2C_ADDRESS]; json_i2c_address(address_str, config->address); if (status == I2C_OK) { char data_str[WEBSERVER_MAX_VALUE]; json_data( response, MOD_IRDA, OK_STR, json_sprintf( data_str, "\"Mode\" : \"%s\", " "\"Device\" : %d, " "\"Command\" : %d ", irda_mode_str(config_data->mode), config_data->device, config_data->command ), address_str ); } else { json_error(response, MOD_IRDA, i2c_status_str(status), address_str); } }
static void FUNCTION_ATTRIBUTE http_callback_login(char * response) { if(request != NULL) { pd_free(request); request = NULL; } if(response == NULL) { device_login_callback(PANDO_LOGIN_FAIL); return; } pd_printf("response=%s\n(end)\n", response); struct jsonparse_state json_state; jsonparse_setup(&json_state, response, pd_strlen(response)); int code; char message[MSG_BUF_LEN]; char access_token[ACCESS_TOKEN_LEN*2 + 16]; char access_addr[KEY_BUF_LEN]; access_token[ACCESS_TOKEN_LEN*2] = '\0'; int type; while ((type = jsonparse_next(&json_state)) != 0) { if (type == JSON_TYPE_PAIR_NAME) { if(jsonparse_strcmp_value(&json_state, "code") == 0) { jsonparse_next(&json_state); jsonparse_next(&json_state); code = jsonparse_get_value_as_int(&json_state); } else if(jsonparse_strcmp_value(&json_state, "message") == 0) { jsonparse_next(&json_state); jsonparse_next(&json_state); jsonparse_copy_value(&json_state, message, MSG_BUF_LEN); } else if(jsonparse_strcmp_value(&json_state, "data") == 0) { while((type = jsonparse_next(&json_state)) != 0 && json_state.depth > 1) { if(type == JSON_TYPE_PAIR_NAME) { if(jsonparse_strcmp_value(&json_state, "access_token") == 0) { jsonparse_next(&json_state); jsonparse_next(&json_state); jsonparse_copy_value(&json_state, access_token, ACCESS_TOKEN_LEN*2 + 16); } else if(jsonparse_strcmp_value(&json_state, "access_addr") == 0) { jsonparse_next(&json_state); jsonparse_next(&json_state); jsonparse_copy_value(&json_state, access_addr, KEY_BUF_LEN); } } } } } } if(code != 0) { pd_printf("device login failed: %s\n", message); if(device_login_callback != NULL) { device_login_callback(PANDO_LOGIN_FAIL); } return; } hex2bin(pando_device_token, access_token); pd_printf("device login success, access_addr : %s\n", access_addr); pando_data_set(DATANAME_ACCESS_ADDR, access_addr); pando_data_set(DATANAME_ACCESS_TOKEN, access_token); if(device_login_callback != NULL) { device_login_callback(PANDO_LOGIN_OK); } }
void ICACHE_FLASH_ATTR mod_rgb_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_config *config = i2c_init_handler(MOD_RGB, MOD_RGB_URL, rgb_init, url, response); if (config == NULL) { return; } rgb_config_data *config_data = (rgb_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, "R") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); config_data->red = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "G") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); config_data->green = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "B") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); config_data->blue = jsonparse_get_value_as_int(&parser); } } } } char address_str[MAX_I2C_ADDRESS]; json_i2c_address(address_str, config->address); status = rgb_set(config); if (status == I2C_OK) { char data_str[WEBSERVER_MAX_VALUE]; json_data( response, MOD_RGB, OK_STR, json_sprintf( data_str, "\"R\" : %d, \"G\" : %d, \"B\" : %d", config_data->red, config_data->green, config_data->blue ), address_str ); } else { json_error(response, MOD_RGB, i2c_status_str(status), address_str); } }
void ICACHE_FLASH_ATTR finger_handler( struct espconn *pConnection, request_method method, char *url, char *data, uint16 data_len, uint32 content_len, char *response, uint16 response_len ) { if (device_get_uart() != UART_FINGER) { json_error(response, MOD_FINGER, DEVICE_NOT_FOUND, NULL); return; } struct jsonparse_state parser; int type, delete_len; uint16 delete_id; 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, "Address") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); char *convert_err = NULL; char address_str[20]; jsonparse_copy_value(&parser, address_str, 20); uint32 address = strtoul(address_str, &convert_err, 16); if (*convert_err == '\0' && address != finger_address()) { finger_set_address(address, finger_default); } } else if (jsonparse_strcmp_value(&parser, "SecurityLevel") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); uint8 security_level = jsonparse_get_value_as_int(&parser); if (security_level != finger_security_level()) { finger_set_security_lefel(security_level, finger_default); } } else if (jsonparse_strcmp_value(&parser, "Mode") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); if (jsonparse_strcmp_value(&parser, "Read") == 0) { finger_current_mode = FINGER_READ; } else if (jsonparse_strcmp_value(&parser, "New") == 0) { finger_current_mode = FINGER_NEW; } else if (jsonparse_strcmp_value(&parser, "Delete") == 0) { finger_current_mode = FINGER_DELETE; } else if (jsonparse_strcmp_value(&parser, "Empty DB") == 0) { finger_current_mode = FINGER_EMPTY_DB; } } else if (jsonparse_strcmp_value(&parser, "DeleteID") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); delete_id = jsonparse_get_value_as_int(&parser); delete_len = jsonparse_get_len(&parser); } } } if (finger_current_mode == FINGER_DELETE && delete_len > 0) { finger_current_mode = FINGER_READ; finger_remove(delete_id, NULL); #if FINGER_DEBUG debug("FINGER: Delete ID: %d\n", delete_id); #endif } if (finger_current_mode == FINGER_EMPTY_DB) { finger_current_mode = FINGER_READ; finger_empty_db(NULL); #if FINGER_DEBUG debug("FINGER: Empty DB\n"); #endif } } webserver_set_status(0); finger_frech_params(); finger_start_read(); }
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); } }
int ICACHE_FLASH_ATTR cgiSched(HttpdConnData *connData) { struct sched_entry *s = config.scheds; os_printf("post len=%d %s\n",connData->post->len, connData->post->buff); if (connData->post->len > 10) { set_all_relays_off(); config.sched_count = 0; s = config.scheds; struct jsonparse_state j; jsonparse_setup(&j, connData->post->buff, connData->post->len); int type; while ( (type = jsonparse_next(&j) ) != 0) { if (type == JSON_TYPE_PAIR_NAME) { if (jsonparse_strcmp_value(&j, "schedules") == 0) { jsonparse_next(&j); while ( (type = jsonparse_next(&j) ) != 0) { if (type == JSON_TYPE_ARRAY || type == ',') { jsonparse_next(&j); while ( (type = jsonparse_next(&j) ) != 0) { if (type == '}') { s++; config.sched_count++; break; } if (type == JSON_TYPE_PAIR_NAME) { if (jsonparse_strcmp_value(&j, "zone") == 0) { jsonparse_next(&j); jsonparse_next(&j); s->zone = jsonparse_get_value_as_int(&j); } if (jsonparse_strcmp_value(&j, "start") == 0) { jsonparse_next(&j); jsonparse_next(&j); s->start = jsonparse_get_value_as_int(&j); } if (jsonparse_strcmp_value(&j, "end") == 0) { jsonparse_next(&j); jsonparse_next(&j); s->end = jsonparse_get_value_as_int(&j); } if (jsonparse_strcmp_value(&j, "time") == 0) { jsonparse_next(&j); jsonparse_next(&j); s->time = jsonparse_get_value_as_int(&j); } if (jsonparse_strcmp_value(&j, "duration") == 0) { jsonparse_next(&j); jsonparse_next(&j); s->duration = jsonparse_get_value_as_int(&j); } if (jsonparse_strcmp_value(&j, "repeat") == 0) { jsonparse_next(&j); jsonparse_next(&j); s->repeat = jsonparse_get_value_as_int(&j); } if (jsonparse_strcmp_value(&j, "dow") == 0) { jsonparse_next(&j); jsonparse_next(&j); s->dow = jsonparse_get_value_as_int(&j); } } } } } } } } save_config(); compute_times(); } char *data = (char *)alloca(100*config.sched_count); char *p = data; s = config.scheds; int i; os_sprintf(p,"{ \"name\": \"%s\", \"time\": %d, \"schedules\":[ ",config.myname,time()); p += strlen(p); for (i = config.sched_count, s = config.scheds; i > 0; i--, s++) { os_sprintf(p,"{\"zone\":%d,\"start\":%d,\"end\":%d,\"time\":%d,\"duration\":%d,\"repeat\":%d,\"dow\":%d},", s->zone,s->start,s->end,s->time,s->duration,s->repeat,s->dow); p += strlen(p); } p--; *p++ = ']'; *p++ = '}'; *p++ = '\0'; httpdSend(connData, data, -1); return HTTPD_CGI_DONE; }
void ICACHE_FLASH_ATTR emtr_handler( struct espconn *pConnection, request_method method, char *url, char *data, uint16 data_len, uint32 content_len, char *response, uint16 response_len ) { if (device_get_uart() != UART_EMTR) { json_error(response, MOD_EMTR, DEVICE_NOT_FOUND, NULL); return; } if (emtr_registers.calibration == NULL) { emtr_registers.calibration = (emtr_calibration_registers *)os_zalloc(sizeof(emtr_calibration_registers)); } if (emtr_registers.event == NULL) { emtr_registers.event = (emtr_event_registers *)os_zalloc(sizeof(emtr_event_registers)); } struct jsonparse_state parser; int type; bool set_counter = false; emtr_mode mode = emtr_current_mode; _uint64_ counter_active = emtr_counter_active(); _uint64_ counter_apparent = emtr_counter_apparent(); 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, "Mode") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); if (jsonparse_strcmp_value(&parser, "Log") == 0) { emtr_current_mode = EMTR_LOG; } else if (jsonparse_strcmp_value(&parser, "Configure") == 0) { emtr_current_mode = EMTR_CONFIGURE; } else if (jsonparse_strcmp_value(&parser, "Calibration") == 0) { emtr_current_mode = EMTR_CALIBRATION; } } else if (jsonparse_strcmp_value(&parser, "ReadInterval") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_read_interval = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "CounterActive") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); counter_active = jsonparse_get_value_as_int(&parser); set_counter = true; } else if (jsonparse_strcmp_value(&parser, "CounterApparent") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); counter_apparent = jsonparse_get_value_as_int(&parser); set_counter = true; } if (mode == EMTR_CONFIGURE) { if (jsonparse_strcmp_value(&parser, "OverCurrentLimit") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->over_current_limit = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "OverPowerLimit") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->over_power_limit = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "OverFrequencyLimit") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->over_frequency_limit = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "UnderFrequencyLimit") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->under_frequency_limit = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "OverTemperatureLimit") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->over_temperature_limit = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "UnderTemperatureLimit") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->under_temperature_limit = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "VoltageSagLimit") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->voltage_sag_limit = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "VoltageSurgeLimit") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->voltage_surge_limit = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "OverCurrentHold") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->over_current_hold = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "OverPowerHold") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->over_power_hold = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "OverFrequencyHold") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->over_frequency_hold = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "UnderFrequencyHold") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->under_frequency_hold = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "OverTemperatureHold") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->over_temperature_hold = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "UnderTemperatureHold") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->under_temperature_hold = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "EventEnable") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->event_enable = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "EventMaskCritical") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->event_mask_critical = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "EventMaskStandard") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->event_mask_standard = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "EventTest") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->event_test = jsonparse_get_value_as_int(&parser); } else if (jsonparse_strcmp_value(&parser, "EventClear") == 0) { jsonparse_next(&parser); jsonparse_next(&parser); emtr_registers.event->event_clear = jsonparse_get_value_as_int(&parser); } } } } if (mode == EMTR_CONFIGURE) { emtr_set_event(emtr_registers.event, NULL); } if (set_counter) { emtr_set_counter(counter_active, counter_apparent, NULL); } } char data_str[WEBSERVER_MAX_RESPONSE_LEN]; if (emtr_current_mode == EMTR_CALIBRATION) { json_data( response, MOD_EMTR, OK_STR, json_sprintf( data_str, "\"Address\" : \"0x%04X\", " "\"Mode\" : \"%s\", " "\"CounterActive\" : %d, " "\"CounterApparent\" : %d, " "\"ReadInterval\" : %d, " "\"GainCurrentRMS\" : %d, " "\"GainVoltageRMS\" : %d, " "\"GainActivePower\" : %d, " "\"GainReactivePower\" : %d, " "\"OffsetCurrentRMS\" : %d, " "\"OffsetActivePower\" : %d, " "\"OffsetReactivePower\" : %d, " "\"DCOffsetCurrent\" : %d, " "\"PhaseCompensation\" : %d, " "\"ApparentPowerDivisor\" : %d, " "\"SystemConfiguration\" : \"0x%08X\", " "\"DIOConfiguration\" : \"0x%04X\", " "\"Range\" : \"0x%08X\", " "\"CalibrationCurrent\" : %d, " "\"CalibrationVoltage\" : %d, " "\"CalibrationActivePower\" : %d, " "\"CalibrationReactivePower\" : %d, " "\"AccumulationInterval\" : %d", emtr_address(), emtr_mode_str(emtr_current_mode), emtr_counter_active(), emtr_counter_apparent(), emtr_read_interval, emtr_registers.calibration->gain_current_rms, emtr_registers.calibration->gain_voltage_rms, emtr_registers.calibration->gain_active_power, emtr_registers.calibration->gain_reactive_power, emtr_registers.calibration->offset_current_rms, emtr_registers.calibration->offset_active_power, emtr_registers.calibration->offset_reactive_power, emtr_registers.calibration->dc_offset_current, emtr_registers.calibration->phase_compensation, emtr_registers.calibration->apparent_power_divisor, emtr_registers.calibration->system_configuration, emtr_registers.calibration->dio_configuration, emtr_registers.calibration->range, emtr_registers.calibration->calibration_current, emtr_registers.calibration->calibration_voltage, emtr_registers.calibration->calibration_active_power, emtr_registers.calibration->calibration_reactive_power, emtr_registers.calibration->accumulation_interval ), NULL ); setTimeout(emtr_calibration_read, NULL, 1500); } else if (emtr_current_mode == EMTR_CONFIGURE) { json_data( response, MOD_EMTR, OK_STR, json_sprintf( data_str, "\"Address\" : \"0x%04X\", " "\"Mode\" : \"%s\", " "\"CounterActive\" : %d, " "\"CounterApparent\" : %d, " "\"ReadInterval\" : %d, " "\"OverCurrentLimit\" : %d, " "\"OverPowerLimit\" : %d, " "\"OverFrequencyLimit\" : %d, " "\"UnderFrequencyLimit\" : %d, " "\"OverTemperatureLimit\" : %d, " "\"UnderTemperatureLimit\" : %d, " "\"VoltageSagLimit\" : %d, " "\"VoltageSurgeLimit\" : %d, " "\"OverCurrentHold\" : %d, " "\"OverPowerHold\" : %d, " "\"OverFrequencyHold\" : %d, " "\"UnderFrequencyHold\" : %d, " "\"OverTemperatureHold\" : %d, " "\"UnderTemperatureHold\" : %d, " "\"EventEnable\" : %d, " "\"EventMaskCritical\" : %d, " "\"EventMaskStandard\" : %d, " "\"EventTest\" : %d, " "\"EventClear\" : %d", emtr_address(), emtr_mode_str(emtr_current_mode), emtr_counter_active(), emtr_counter_apparent(), emtr_read_interval, emtr_registers.event->over_current_limit, emtr_registers.event->over_power_limit, emtr_registers.event->over_frequency_limit, emtr_registers.event->under_frequency_limit, emtr_registers.event->over_temperature_limit, emtr_registers.event->under_temperature_limit, emtr_registers.event->voltage_sag_limit, emtr_registers.event->voltage_surge_limit, emtr_registers.event->over_current_hold, emtr_registers.event->over_power_hold, emtr_registers.event->over_frequency_hold, emtr_registers.event->under_frequency_hold, emtr_registers.event->over_temperature_hold, emtr_registers.event->under_temperature_hold, emtr_registers.event->event_enable, emtr_registers.event->event_mask_critical, emtr_registers.event->event_mask_standard, emtr_registers.event->event_test, emtr_registers.event->event_clear ), NULL ); setTimeout(emtr_events_read, NULL, 1500); } else { json_data( response, MOD_EMTR, OK_STR, json_sprintf( data_str, "\"Address\" : \"0x%04X\", " "\"Mode\" : \"%s\", " "\"CounterActive\" : %d, " "\"CounterApparent\" : %d, " "\"ReadInterval\" : %d", emtr_address(), emtr_mode_str(emtr_current_mode), emtr_counter_active(), emtr_counter_apparent(), emtr_read_interval ), NULL ); } emtr_start_read(); }