/****************************************************************************** * FunctionName : pando_device_login * Description : try login device using pando cloud device register api. * Parameters : the specify login callback function * Returns : *******************************************************************************/ void FUNCTION_ATTRIBUTE pando_device_login(gateway_callback callback) { pd_printf("begin login device...\n"); if(callback != NULL) { device_login_callback = callback; } char * str_device_id = NULL; char * str_device_secret = NULL; str_device_id = pando_data_get(DATANAME_DEVICE_ID); str_device_secret = pando_data_get(DATANAME_DEVICE_SECRET); if(str_device_id == NULL || str_device_secret == NULL) { // has not registered pd_printf("login failed ! device has not been registerd...\n"); device_login_callback(PANDO_NOT_REGISTERED); return; } int device_id = atol(str_device_id); // try login via HTTP struct jsontree_int json_device_id = JSONTREE_INT(device_id); struct jsontree_string json_device_secret = JSONTREE_STRING(str_device_secret); struct jsontree_string json_protocol = JSONTREE_STRING("mqtt"); JSONTREE_OBJECT_EXT(device_info, JSONTREE_PAIR("device_id", &json_device_id), JSONTREE_PAIR("device_secret", &json_device_secret), JSONTREE_PAIR("protocol", &json_protocol)); request = (char *)pd_malloc(MAX_BUF_LEN); int ret = pando_json_print((struct jsontree_value*)(&device_info), request, MAX_BUF_LEN); pd_printf("device login request:::\n%s\n(end)\n", request); net_http_post(PANDO_API_URL "/v1/devices/authentication", request, http_callback_login); if(request != NULL) { pd_free(request); request = NULL; } }
os_sprintf(string, "0.1"); } jsontree_write_string(js_ctx, string); return 0; } LOCAL struct jsontree_callback version_callback = JSONTREE_CALLBACK(version_get, NULL); //JSONTREE_OBJECT(hardware, // JSONTREE_PAIR("hardware", &version_callback)); JSONTREE_OBJECT(INFOTree, JSONTREE_PAIR("hardware", &version_callback)); 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);
jsontree_write_string(js_ctx, param.id); } else if (os_strncmp(path, "data", 4) == 0) { jsontree_write_string(js_ctx, ssOk == param.scan_status ? "OK" : "ERROR"); } return 0; } static struct jsontree_callback scan_callback = JSONTREE_CALLBACK(scan_get, NULL); JSONTREE_OBJECT( scan_tree, JSONTREE_PAIR("id", &scan_callback), JSONTREE_PAIR("data", &scan_callback) ); JSONTREE_OBJECT( scan, JSONTREE_PAIR("scan", &scan_tree) ); /****************************************************************************** * dispatch handler *******************************************************************************/ static void ICACHE_FLASH_ATTR scan_dispatch_handler(char *id, struct jsonrpc_transfer *trans, void *buf,
const char *path = jsontree_path_name(js_ctx, js_ctx->depth - 1); jsontree_write_string(js_ctx, uidstr); return 0; } LOCAL struct ICACHE_FLASH_ATTR jsontree_callback humidity_callback = JSONTREE_CALLBACK(json_get, NULL); LOCAL struct ICACHE_FLASH_ATTR jsontree_callback temperature_callback = JSONTREE_CALLBACK(temp_json_get, NULL); LOCAL struct ICACHE_FLASH_ATTR jsontree_callback cardid_info_tree_cb = JSONTREE_CALLBACK(card_info_json_get, NULL); LOCAL struct ICACHE_FLASH_ATTR jsontree_callback userid_info_tree_cb = JSONTREE_CALLBACK(NULL, user_info_json_set); LOCAL struct ICACHE_FLASH_ATTR jsontree_callback open_door_cmd_tree_cb = JSONTREE_CALLBACK(NULL, open_door_cmd_json_set); JSONTREE_OBJECT(open_door_cmd_tree, JSONTREE_PAIR("cmd",&open_door_cmd_tree_cb)); JSONTREE_OBJECT(environment_tree, JSONTREE_PAIR("humidity", &humidity_callback), JSONTREE_PAIR("temperature", &temperature_callback)); JSONTREE_OBJECT(cardid_tree, JSONTREE_PAIR("cardID",&cardid_info_tree_cb)); JSONTREE_OBJECT(userid_tree, JSONTREE_PAIR("studentID",&userid_info_tree_cb)); JSONTREE_OBJECT(cardid_info_tree, JSONTREE_PAIR("cardID",&cardid_tree)); JSONTREE_OBJECT(open_door_info_tree, JSONTREE_PAIR("cmd",&open_door_cmd_tree), JSONTREE_PAIR("studentID",&userid_tree)); LOCAL int ICACHE_FLASH_ATTR date_info_json_set(struct jsontree_context *js_ctx, struct jsonparse_state *parser) { int type; while ((type = jsonparse_next(parser)) != 0) { if (type == JSON_TYPE_PAIR_NAME) { char buffer[64];
INFO("JSON: Switch on\n", buffer); GPIO_OUTPUT_SET(SWITCH03_GPIO, 1); } else if (!strcoll(buffer, "off")) { INFO("JSON: Switch off\n", buffer); GPIO_OUTPUT_SET(SWITCH03_GPIO, 0); } } } } return 0; } LOCAL struct jsontree_callback switch_callback = JSONTREE_CALLBACK(json_get, json_set); JSONTREE_OBJECT(switch_tree, JSONTREE_PAIR("switch", &switch_callback)); JSONTREE_OBJECT(device_tree, JSONTREE_PAIR("device", &switch_tree)); void ICACHE_FLASH_ATTR wifi_connect_cb(uint8_t status) { if(status == STATION_GOT_IP){ MQTT_Connect(&mqttClient); } else { MQTT_Disconnect(&mqttClient); } } void ICACHE_FLASH_ATTR mqtt_connected_cb(uint32_t *args)