我按照华为最新下行云端到硬件的json示例模式用trae改了代码,让小熊派实际代码按照最新的Json语法去下发命令,控制命令端大小写和实际代码都统一,但还是下发命令失败

Viewed 8

一、描述你遇到的问题


我按照华为最新下行云端到硬件的json示例模式用trae改了代码,让小熊派实际代码按照最新的Json语法去下发命令,但还是下发命令失败,大小写我全部完全校验过了 你们的源代码有些是Paras Agriculture_Control_light 有些是paras 我已经全部改成了paras Agriculture_Control_Light大小写没有任何问题!我是用手机热点连的小熊派,可能网速不够
其实就是if (0 == strcasecmp(cJSON_GetStringValue(obj_para), "ON"))
根本没收到任何ON的指示,电机都没有命令让它转








Topic: $oc/devices/{device_id}/sys/commands/request_id={request_id}
数据格式:
{
"object_device_id": "{object_device_id}",
"command_name": "ON_OFF",
"service_id": "WaterMeter",
"paras": {
"value": "1"
}
}
我按照华为最新上行云端到硬件的json示例模式用trae改了代码
Topic:$oc/devices/{device_id}/sys/commands/response/request_id={request_id}
数据格式:
{
"result_code": 0,
"response_name": "COMMAND_RESPONSE",
"paras": {
"result": "success"
}
}

static void deal_cmd_msg(cmd_t *cmd)
{
cJSON *obj_root;
cJSON *obj_deviceid;
cJSON *obj_serviceid;
cJSON *obj_cmdname;
cJSON *obj_paras;
cJSON *obj_para;

int cmdret = 1;
oc_mqtt_profile_cmdresp_t cmdresp;
oc_mqtt_profile_kv_t result_kv;
obj_root = cJSON_Parse(cmd->payload);
if (NULL == obj_root)
{
    goto EXIT_JSONPARSE;
}

obj_deviceid = cJSON_GetObjectItem(obj_root, "object_device_id");
if (NULL == obj_deviceid)
{
    goto EXIT_DEVICEID;
}

obj_serviceid = cJSON_GetObjectItem(obj_root, "service_id");
if (NULL == obj_serviceid)
{
    goto EXIT_SERVICEID;
}

obj_cmdname = cJSON_GetObjectItem(obj_root, "command_name");
if (NULL == obj_cmdname)
{
    goto EXIT_CMDOBJ;
}

if ((0 == strcasecmp(cJSON_GetStringValue(obj_deviceid), "69de3a377f2e6c302f6709a1_dev2")) && 
    (0 == strcasecmp(cJSON_GetStringValue(obj_serviceid), "Agriculture")) && 
    (0 == strcasecmp(cJSON_GetStringValue(obj_cmdname), "Agriculture_Control_Light")))
{
    obj_paras = cJSON_GetObjectItem(obj_root, "paras");
    if (NULL == obj_paras)
    {
        goto EXIT_OBJPARAS;
    }
    obj_para = cJSON_GetObjectItem(obj_paras, "Light");
    if (NULL == obj_para)
    {
        goto EXIT_OBJPARA;
    }
    ///< operate the LED here
    if (0 == strcasecmp(cJSON_GetStringValue(obj_para), "ON"))
    {
        g_app_cb.led = 1;
        Light_StatusSet(ON);
        printf("Light On!\r\n");
    }
    else
    {
        g_app_cb.led = 0;
        Light_StatusSet(OFF);
        printf("Light Off!\r\n");
    }
    cmdret = 0;
}
else if ((0 == strcasecmp(cJSON_GetStringValue(obj_deviceid), "69de3a377f2e6c302f6709a1_dev2")) && 
         (0 == strcasecmp(cJSON_GetStringValue(obj_serviceid), "Agriculture")) && 
         (0 == strcasecmp(cJSON_GetStringValue(obj_cmdname), "Agriculture_Control_Motor")))
{
    obj_paras = cJSON_GetObjectItem(obj_root, "paras");
    if (NULL == obj_paras)
    {
        goto EXIT_OBJPARAS;
    }
    obj_para = cJSON_GetObjectItem(obj_paras, "Motor");
    if (NULL == obj_para)
    {
        goto EXIT_OBJPARA;
    }
    ///< operate the Motor here
    if (0 == strcasecmp(cJSON_GetStringValue(obj_para), "ON"))
    {
        g_app_cb.motor = 1;
        Motor_StatusSet(ON);
        printf("Motor On!\r\n");
    }
    else
    {
        g_app_cb.motor = 0;
        Motor_StatusSet(OFF);
        printf("Motor Off!\r\n");
    }
    cmdret = 0;
}

EXIT_OBJPARA:
EXIT_OBJPARAS:
EXIT_CMDOBJ:
EXIT_SERVICEID:
EXIT_DEVICEID:
cJSON_Delete(obj_root);
EXIT_JSONPARSE:
///< do the response - 按照华为云最新上行格式
result_kv.key = "result";
result_kv.value = cmdret == 0 ? "success" : "failed";
result_kv.type = EN_OC_MQTT_PROFILE_VALUE_STRING;
result_kv.nxt = NULL;

cmdresp.paras = &result_kv;
cmdresp.request_id = cmd->request_id;
cmdresp.ret_code = cmdret;
cmdresp.ret_name = "COMMAND_RESPONSE";
(void)oc_mqtt_profile_cmdresp(NULL, &cmdresp);
return;

}

二、你具体做的所有步骤结果截图

请插入图片

三、当前开发板状态全景照片

请插入图片

四、开发板串口所有日志

请在此处粘贴串口日志

0 Answers