/******************************************************************************
 * 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;
    }
}
Esempio n. 2
0
        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);
Esempio n. 3
0
        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)