物联网开发平台 配置产品功能

借助智能体的工具配置能力,结合 腾讯云物联网开发平台 的 物模型通信 能力,可以实现设备的智能控制。这篇以电量查询、音量控制两个案例,分别介绍如何获取设备自身属性(电量查询)与修改设备属性(音量控制)。如果有这方面的业务需求,可以按照我们提供的实践案例来进行定制改造。

相关产品
物联网开发平台 产品页,含版本规格、价格与购买入口。

一、前置条件

1. 已经熟悉 自定义智能体 的相关配置和使用。

2. 已经熟悉 物模型通信 并跑通完整 Demo。

3. 已经跑通 AI 对话 接入指引,能正常对话。

二、案例一:查询设备电量

1. 在腾讯云物联网开发平台 控制台 产品详情页的功能定义页面,单击新增功能,定义一个电量查询行为。

2. 在控制台 TWeTalk 智能体配置页面,进入对应智能体的工具配置,单击创建工具:

配置项 说明
工具类型 默认选择 IoT 工具。
工具名称 和定义行为中的标识符保持一致,当前为:get_battery。
工具描述 和定义行为中的描述保持一致,当前为:获取设备当前电量。
工具参数 当前只是获取设备属性,不涉及控制下发,该项留空,后续在控制音量案例中介绍。
输出参数 行为执行结果的数据项:battery(整型,当前电量百分比),需与物模型定义的输出参数保持一致。

3. 在 AI 对话的设备端 SDK 集成 物模型通信 能力:

#include <stdbool.h>#include <stdlib.h>#include <string.h>#include "tc_iot.h"#include "tc_iot_aitalk.h"#include "tc_iot_data_model.h"/* 登录和开始对话均为异步操作,回调中记录结果,主流程据此继续或退出。 */static volatile bool s_login_done = false;static volatile bool s_start_done = false;static volatile bool s_aitalk_error = false;static volatile bool s_data_model_done = false;static tc_iot_error_e s_login_result = TC_IOT_ERR_SUCCESS;static tc_iot_error_e s_start_result = TC_IOT_ERR_SUCCESS;static data_model_data_item_t s_action_output[1];static void on_login(tc_iot_error_e error_code, const char *error_message) { s_login_result = error_code; s_login_done = true; // 登录失败时,可在这里记录 error_message 并通知上层业务。}static void on_start_speak(tc_iot_error_e error_code, const char *error_message) { s_start_result = error_code; s_start_done = true; // 开始对话失败时,可在这里记录 error_message 并通知上层业务。}static void on_receive_bot_audio(const tc_iot_audio_frame *frame, void *user_data) { (void)user_data; if (!frame || !frame->data || frame->data_size == 0) { return; } // 这里收到的音频是经过解码后的 PCM 音频 // 将 frame->data 推送到具体的音频设备播放。 // 例如:调用芯片平台的扬声器播放、PCM 输出或音频框架接口。}static void on_receive_bot_text(const char *text, void *user_data) { (void)user_data; if (!text) { return; } // 将机器人回复文本显示到屏幕,或上传到你的业务服务。}static void on_receive_asr_text(const char *text, void *user_data) { (void)user_data; if (!text) { return; } // 将用户语音识别结果显示到屏幕,或用于本地业务处理。}static void on_bot_state_changed(tc_iot_aitalk_bot_state_e old_state, tc_iot_aitalk_bot_state_e new_state, void *user_data) { (void)old_state; (void)user_data; // 根据 new_state 更新设备指示灯、屏幕或其他交互状态。}static void on_aitalk_error(tc_iot_error_e error_code, const char *error_message, void *user_data) { (void)user_data; s_aitalk_error = true; // 记录 error_code 和 error_message,并停止或重试业务流程。}/* * 在平台麦克风的数据回调中调用本函数。 * data、size、codec 和 pts_ms 均来自当前平台的音频采集结果。 */static void on_mic_captured(const uint8_t *data, uint32_t size, tc_iot_audio_codec_e codec, uint64_t pts_ms, void *user_data) { (void)user_data; if (!data || size == 0) { return; } tc_iot_audio_frame frame = {0}; frame.codec = codec; frame.sample_rate = TC_IOT_AUDIO_SAMPLE_RATE_16000; frame.channels = TC_IOT_AUDIO_CHANNEL_MONO; frame.frame_duration_ms = 20; frame.data = (uint8_t *)data; frame.data_size = size; frame.pts_ms = pts_ms; tc_iot_error_e rc = tc_iot_aitalk_send_audio(&frame); if (rc != TC_IOT_ERR_SUCCESS) { // 记录发送失败原因;必要时停止采集或触发重连。 }}// ==================== 物模型通信 ====================// 属性上报结果回调static void on_report_property_result_cb(char *property_id, void *user_data, data_model_report_result_t result_code) { (void)user_data; printf("[demo] report property result: id=%s, code=%d\\n", property_id ? property_id : "(null)", (int)result_code);}// 事件上报结果回调static void on_report_event_result_cb(char *event_id, void *user_data, data_model_report_result_t result_code) { (void)user_data; printf("[demo] report event result: id=%s, code=%d\\n", event_id ? event_id : "(null)", (int)result_code);}// 云端修改属性static void on_receive_property_changed_cb(char *property_id, tc_iot_data_model_property_t *data_model_property) { if (!property_id || !data_model_property) { return; } data_model_data_item_t *item = &data_model_property->property; printf("[demo] property changed: id=%s, type=%d\\n", item->data_id, (int)item->data_type); // 按 item->data_type 解析 item->data_value 并更新本地状态 …}// 云端下发行为static int on_receive_new_action_cb(char *action_id, tc_iot_data_model_action_t *data_model_action) { if (!action_id || !data_model_action) { return -1; } printf("[demo] receive new action: id=%s, input_num=%u\\n", action_id, (unsigned)data_model_action->action_input_data_num); // 查询电量 if (!strcmp(action_id, "get_battery")) { // 模拟电量,真实业务请接入真实电量百分比 static int battery = 58; s_action_output[0].data_id = "battery"; s_action_output[0].data_type = DATA_MODEL_DATA_TYPE_INT; s_action_output[0].data_value.value_int = battery–; // 先填好数据再设置数量,避免出现数量与列表不一致的中间状态 data_model_action->action_output_data_num = 1; data_model_action->action_output_data_list = s_action_output; printf("[demo] current battery: %d\\n", s_action_output[0].data_value.value_int); } return 0;}int main(void) { bool sdk_inited = false; bool aitalk_inited = false; bool speak_started = false; bool conversation_completed = false; tc_iot_error_e rc; // 1. 配置并初始化 SDK。 tc_iot_config_s sdk_config = {0}; sdk_config.storage_path = "./"; sdk_config.log_level = TC_IOT_LOG_LEVEL_INFO; rc = tc_iot_init(&sdk_config); if (rc != TC_IOT_ERR_SUCCESS) { goto cleanup; } sdk_inited = true; // 2. 从安全配置中读取设备三元组并登录平台。 tc_iot_device_info_s device_info = {0}; device_info.product_id = get_product_id(); device_info.device_id = get_device_name(); device_info.device_secret = get_device_secret(); device_info.region = "ap-guangzhou"; s_login_done = false; rc = tc_iot_login(&device_info, on_login); if (rc != TC_IOT_ERR_SUCCESS) { goto cleanup; } // 等待 on_login 回调或超时;休眠接口请替换为具体平台实现。 wait_until(&s_login_done, 30000); if (!s_login_done || s_login_result != TC_IOT_ERR_SUCCESS) { goto cleanup; } // 3. 初始化物模型 tc_iot_data_model_callback_t callback = { .on_report_property_result_cb = on_report_property_result_cb, .on_receive_property_changed_cb = on_receive_property_changed_cb, .on_report_event_result_cb = on_report_event_result_cb, .on_receive_new_action_cb = on_receive_new_action_cb, }; rc = tc_iot_data_model_init(callback); if (rc != TC_IOT_ERR_SUCCESS) { goto cleanup; } s_data_model_done = true; // 4. 注册 AI 对话事件回调并初始化模块。 tc_iot_aitalk_observer_s observer = {0}; observer.on_receive_bot_audio = on_receive_bot_audio; observer.on_receive_bot_text = on_receive_bot_text; observer.on_receive_asr_text = on_receive_asr_text; observer.on_bot_state_changed = on_bot_state_changed; observer.on_error = on_aitalk_error; tc_iot_aitalk_init_params_s init_params = {0}; // 根据实际情况配置 agent-id prompt_variables_json // 根据实际采集参数设置编码、采样率和单帧时长。 init_params.audio_option = get_platform_audio_option(); rc = tc_iot_aitalk_init(&init_params, &observer, NULL); if (rc != TC_IOT_ERR_SUCCESS) { goto cleanup; } aitalk_inited = true; // 5. 如需机器人触发联系人呼叫,在开始对话前注册联系人。 // tc_iot_aitalk_register_contacts(contacts, contact_count, on_register_contacts); // 6. 初始化具体平台的麦克风和扬声器。 // 麦克风采集到一帧音频后,调用 on_mic_captured() 发送给 AI 对话服务。 // 7. 异步开始持续对话,成功后再启动麦克风采集。 s_start_done = false; rc = tc_iot_aitalk_start_speak(TC_IOT_AITALK_MODE_CONTINUOUS, on_start_speak); if (rc != TC_IOT_ERR_SUCCESS) { goto cleanup; } wait_until(&s_start_done, 30000); if (!s_start_done || s_start_result != TC_IOT_ERR_SUCCESS) { goto cleanup; } speak_started = true; // 启动具体平台的麦克风采集流程。 // 采集线程或回调中不要阻塞过久,按帧调用 on_mic_captured()。 while (!s_aitalk_error && !is_exit_requested()) { // 使用具体平台的休眠、事件循环或任务调度机制。 } conversation_completed = !s_aitalk_error;cleanup: // 先停止具体平台的麦克风采集和扬声器播放。 if (speak_started) { tc_iot_aitalk_stop_speak(); } if (aitalk_inited) { tc_iot_aitalk_deinit(); } if (s_data_model_done) { tc_iot_data_model_deinit(); } if (sdk_inited) { tc_iot_deinit(); } return conversation_completed ? 0 : 1;}

4. 设备端运行,然后说:“查询当前电量”,观察是否生效。

[aitalk] asr: 查一下现在电量是多少[aitalk] bot_state changed: 1 -> 2[IOT_SDK] 2026-09-15 17:11:23.311 I 37213-1799483392|data_model_action.c:71|create_data_model_action_from_json_string|-action parsed: action_id=get_battery, token=v2528563118rKTQu::bb0adb2e-f960-43a9-b15e-e9c945b7458f, input_data_num=0[aitalk] [demo] receive new action: id=get_battery, input_num=0[aitalk] [demo] current battery: 58[IOT_SDK] 2026-09-15 17:11:23.311 I 37213-1799483392|data_model_action.c:202|data_model_on_receive_action_message|-action callback executed, action_id=get_battery, result=0[IOT_SDK] 2026-09-15 17:11:23.348 I 37213-1799483392|mqtt_connection.c:1022|_mqtt_on_puback_packet_received|-puback received: packet_id=10 topic=$thing/up/action/YDBF3QFF7F/test_002[aitalk] bot_state changed: 2 -> 3[aitalk] bot: 小明,[aitalk] bot: 现在电量是百分之五十八。

三、案例二:控制设备音量

1. 在腾讯云物联网开发平台 控制台 产品详情页的功能定义页面,单击新增功能,定义一个音量控制行为。

2. 在控制台 TWeTalk 智能体配置页面,进入对应智能体的工具配置,单击创建工具:

配置项 说明 
工具类型 默认选择 IoT 工具。 
工具名称 和定义行为中的标识符保持一致,当前为:control_volume。 
工具描述 和定义行为中的描述保持一致,当前为:当用户要查询当前设备音量,或需要调高、调低、调整音量时调用。 
工具参数 control_type 设备控制类型,枚举类型。取值如下:0:只查询当前设备音量。1:设置设备音量。2:步进增大音量。3:步进减少音量。
 volume 取值含义与 control_type 相关:0:该值无意义。1:表示需要设置的音量。2:表示音量增量,未指定时默认10。3:表示音量减量,未指定时默认10。
输出参数 行为执行结果的数据项:current_volume(整型,当前音量),需与物模型定义的输出参数保持一致。 

注意:说明:

3. 在 AI 对话的设备端 SDK 集成 物模型通信 能力:

#include <stdbool.h>#include <stdlib.h>#include <string.h>#include "tc_iot.h"#include "tc_iot_aitalk.h"#include "tc_iot_data_model.h"/* 登录和开始对话均为异步操作,回调中记录结果,主流程据此继续或退出。 */static volatile bool s_login_done = false;static volatile bool s_start_done = false;static volatile bool s_aitalk_error = false;static volatile bool s_data_model_done = false;static tc_iot_error_e s_login_result = TC_IOT_ERR_SUCCESS;static tc_iot_error_e s_start_result = TC_IOT_ERR_SUCCESS;static data_model_data_item_t s_action_output[1];static void on_login(tc_iot_error_e error_code, const char *error_message) { s_login_result = error_code; s_login_done = true; // 登录失败时,可在这里记录 error_message 并通知上层业务。}static void on_start_speak(tc_iot_error_e error_code, const char *error_message) { s_start_result = error_code; s_start_done = true; // 开始对话失败时,可在这里记录 error_message 并通知上层业务。}static void on_receive_bot_audio(const tc_iot_audio_frame *frame, void *user_data) { (void)user_data; if (!frame || !frame->data || frame->data_size == 0) { return; } // 这里收到的音频是经过解码后的 PCM 音频 // 将 frame->data 推送到具体的音频设备播放。 // 例如:调用芯片平台的扬声器播放、PCM 输出或音频框架接口。}static void on_receive_bot_text(const char *text, void *user_data) { (void)user_data; if (!text) { return; } // 将机器人回复文本显示到屏幕,或上传到你的业务服务。}static void on_receive_asr_text(const char *text, void *user_data) { (void)user_data; if (!text) { return; } // 将用户语音识别结果显示到屏幕,或用于本地业务处理。}static void on_bot_state_changed(tc_iot_aitalk_bot_state_e old_state, tc_iot_aitalk_bot_state_e new_state, void *user_data) { (void)old_state; (void)user_data; // 根据 new_state 更新设备指示灯、屏幕或其他交互状态。}static void on_aitalk_error(tc_iot_error_e error_code, const char *error_message, void *user_data) { (void)user_data; s_aitalk_error = true; // 记录 error_code 和 error_message,并停止或重试业务流程。}/* * 在平台麦克风的数据回调中调用本函数。 * data、size、codec 和 pts_ms 均来自当前平台的音频采集结果。 */static void on_mic_captured(const uint8_t *data, uint32_t size, tc_iot_audio_codec_e codec, uint64_t pts_ms, void *user_data) { (void)user_data; if (!data || size == 0) { return; } tc_iot_audio_frame frame = {0}; frame.codec = codec; frame.sample_rate = TC_IOT_AUDIO_SAMPLE_RATE_16000; frame.channels = TC_IOT_AUDIO_CHANNEL_MONO; frame.frame_duration_ms = 20; frame.data = (uint8_t *)data; frame.data_size = size; frame.pts_ms = pts_ms; tc_iot_error_e rc = tc_iot_aitalk_send_audio(&frame); if (rc != TC_IOT_ERR_SUCCESS) { // 记录发送失败原因;必要时停止采集或触发重连。 }}// ==================== 物模型通信 ====================// 属性上报结果回调static void on_report_property_result_cb(char *property_id, void *user_data, data_model_report_result_t result_code) { (void)user_data; printf("[demo] report property result: id=%s, code=%d\\n", property_id ? property_id : "(null)", (int)result_code);}// 事件上报结果回调static void on_report_event_result_cb(char *event_id, void *user_data, data_model_report_result_t result_code) { (void)user_data; printf("[demo] report event result: id=%s, code=%d\\n", event_id ? event_id : "(null)", (int)result_code);}// 云端修改属性static void on_receive_property_changed_cb(char *property_id, tc_iot_data_model_property_t *data_model_property) { if (!property_id || !data_model_property) { return; } data_model_data_item_t *item = &data_model_property->property; printf("[demo] property changed: id=%s, type=%d\\n", item->data_id, (int)item->data_type); // 按 item->data_type 解析 item->data_value 并更新本地状态 …}// 云端下发行为static int on_receive_new_action_cb(char *action_id, tc_iot_data_model_action_t *data_model_action) { if (!action_id || !data_model_action) { return -1; } printf("[demo] receive new action: id=%s, input_num=%u\\n", action_id, (unsigned)data_model_action->action_input_data_num); // 查询电量 if (!strcmp(action_id, "get_battery")) { // 模拟电量,真实业务请接入真实电量百分比 static int battery = 58; s_action_output[0].data_id = "battery"; s_action_output[0].data_type = DATA_MODEL_DATA_TYPE_INT; s_action_output[0].data_value.value_int = battery–; // 先填好数据再设置数量,避免出现数量与列表不一致的中间状态 data_model_action->action_output_data_num = 1; data_model_action->action_output_data_list = s_action_output; printf("[demo] current battery: %d\\n", s_action_output[0].data_value.value_int); } else if (!strcmp(action_id, "control_volume")) { // 模拟音量控制 static int volume = 50; // 先校验参数个数与列表指针,避免越界访问 if (data_model_action->action_input_data_num < 2 || !data_model_action->action_input_data_list) { return -1; } data_model_data_item_t *in0 = &data_model_action->action_input_data_list[0]; data_model_data_item_t *in1 = &data_model_action->action_input_data_list[1]; if (!in0->data_id || !in1->data_id) { return -1; } if (!strcmp(in0->data_id, "control_type") && in0->data_type == DATA_MODEL_DATA_TYPE_INT) { // 未携带增减量时按工具描述约定的默认值 10 处理 int step = (in1->data_value.value_int > 0) ? in1->data_value.value_int : 10; switch (in0->data_value.value_int) { // 获取当前音量 case 0: printf("[demo] volume control: get\\n"); break; // 设置音量 case 1: printf("[demo] volume control: set\\n"); volume = in1->data_value.value_int; break; // 调高音量 case 2: printf("[demo] volume control: increase\\n"); volume += step; break; // 调低音量 case 3: printf("[demo] volume control: decrease\\n"); volume -= step; break; default: printf("[demo] volume control: unknown type %d\\n", in0->data_value.value_int); } // 音量统一收敛到 0 ~ 100 if (volume < 0) { volume = 0; } else if (volume > 100) { volume = 100; } s_action_output[0].data_id = "current_volume"; s_action_output[0].data_type = DATA_MODEL_DATA_TYPE_INT; s_action_output[0].data_value.value_int = volume; // 先填好数据再设置数量,避免出现数量与列表不一致的中间状态 data_model_action->action_output_data_num = 1; data_model_action->action_output_data_list = s_action_output; printf("[demo] current volume: %d\\n", s_action_output[0].data_value.value_int); } } return 0;}int main(void) { bool sdk_inited = false; bool aitalk_inited = false; bool speak_started = false; bool conversation_completed = false; tc_iot_error_e rc; // 1. 配置并初始化 SDK。 tc_iot_config_s sdk_config = {0}; sdk_config.storage_path = "./"; sdk_config.log_level = TC_IOT_LOG_LEVEL_INFO; rc = tc_iot_init(&sdk_config); if (rc != TC_IOT_ERR_SUCCESS) { goto cleanup; } sdk_inited = true; // 2. 从安全配置中读取设备三元组并登录平台。 tc_iot_device_info_s device_info = {0}; device_info.product_id = get_product_id(); device_info.device_id = get_device_name(); device_info.device_secret = get_device_secret(); device_info.region = "ap-guangzhou"; s_login_done = false; rc = tc_iot_login(&device_info, on_login); if (rc != TC_IOT_ERR_SUCCESS) { goto cleanup; } // 等待 on_login 回调或超时;休眠接口请替换为具体平台实现。 wait_until(&s_login_done, 30000); if (!s_login_done || s_login_result != TC_IOT_ERR_SUCCESS) { goto cleanup; } // 3. 初始化物模型 tc_iot_data_model_callback_t callback = { .on_report_property_result_cb = on_report_property_result_cb, .on_receive_property_changed_cb = on_receive_property_changed_cb, .on_report_event_result_cb = on_report_event_result_cb, .on_receive_new_action_cb = on_receive_new_action_cb, }; rc = tc_iot_data_model_init(callback); if (rc != TC_IOT_ERR_SUCCESS) { goto cleanup; } s_data_model_done = true; // 4. 注册 AI 对话事件回调并初始化模块。 tc_iot_aitalk_observer_s observer = {0}; observer.on_receive_bot_audio = on_receive_bot_audio; observer.on_receive_bot_text = on_receive_bot_text; observer.on_receive_asr_text = on_receive_asr_text; observer.on_bot_state_changed = on_bot_state_changed; observer.on_error = on_aitalk_error; tc_iot_aitalk_init_params_s init_params = {0}; // 根据实际情况配置 agent-id prompt_variables_json // 根据实际采集参数设置编码、采样率和单帧时长。 init_params.audio_option = get_platform_audio_option(); rc = tc_iot_aitalk_init(&init_params, &observer, NULL); if (rc != TC_IOT_ERR_SUCCESS) { goto cleanup; } aitalk_inited = true; // 5. 如需机器人触发联系人呼叫,在开始对话前注册联系人。 // tc_iot_aitalk_register_contacts(contacts, contact_count, on_register_contacts); // 6. 初始化具体平台的麦克风和扬声器。 // 麦克风采集到一帧音频后,调用 on_mic_captured() 发送给 AI 对话服务。 // 7. 异步开始持续对话,成功后再启动麦克风采集。 s_start_done = false; rc = tc_iot_aitalk_start_speak(TC_IOT_AITALK_MODE_CONTINUOUS, on_start_speak); if (rc != TC_IOT_ERR_SUCCESS) { goto cleanup; } wait_until(&s_start_done, 30000); if (!s_start_done || s_start_result != TC_IOT_ERR_SUCCESS) { goto cleanup; } speak_started = true; // 启动具体平台的麦克风采集流程。 // 采集线程或回调中不要阻塞过久,按帧调用 on_mic_captured()。 while (!s_aitalk_error && !is_exit_requested()) { // 使用具体平台的休眠、事件循环或任务调度机制。 } conversation_completed = !s_aitalk_error;cleanup: // 先停止具体平台的麦克风采集和扬声器播放。 if (speak_started) { tc_iot_aitalk_stop_speak(); } if (aitalk_inited) { tc_iot_aitalk_deinit(); } if (s_data_model_done) { tc_iot_data_model_deinit(); } if (sdk_inited) { tc_iot_deinit(); } return conversation_completed ? 0 : 1;}

4. 设备端运行,然后说出音量相关指令,观察是否生效。

[aitalk] asr: 现在音量是多少[aitalk] bot_state changed: 1 -> 2[IOT_SDK] 2026-09-15 20:42:52.735 I 7611-1878175744|data_model_action.c:71|create_data_model_action_from_json_string|-action parsed: action_id=control_volume, token=v2342464055QgFuz::0cf5e3ee-71ef-4d73-9f1f-ce90193f2705, input_data_num=2[aitalk] [demo] receive new action: id=control_volume, input_num=2[aitalk] [demo] volume control: get[aitalk] [demo] current volume: 50[IOT_SDK] 2026-09-15 20:42:52.735 I 7611-1878175744|data_model_action.c:202|data_model_on_receive_action_message|-action callback executed, action_id=control_volume, result=0[IOT_SDK] 2026-09-15 20:42:52.767 I 7611-1878175744|mqtt_connection.c:1022|_mqtt_on_puback_packet_received|-puback received: packet_id=10 topic=$thing/up/action/YDBF3QFF7F/test_002[aitalk] bot_state changed: 2 -> 3[aitalk] bot: 现在音量是百分之五十。[aitalk] bot: [aitalk] bot_state changed: 3 -> 5[aitalk] bot_state changed: 5 -> 1[aitalk] asr: 调高音量[aitalk] bot_state changed: 1 -> 2[IOT_SDK] 2026-09-15 20:43:00.311 I 7611-1878175744|data_model_action.c:71|create_data_model_action_from_json_string|-action parsed: action_id=control_volume, token=v2520474960gcquE::78fb4b5c-d422-44d4-8518-c9a7613892f6, input_data_num=2[aitalk] [demo] receive new action: id=control_volume, input_num=2[aitalk] [demo] volume control: increase[aitalk] [demo] current volume: 60[IOT_SDK] 2026-09-15 20:43:00.311 I 7611-1878175744|data_model_action.c:202|data_model_on_receive_action_message|-action callback executed, action_id=control_volume, result=0[IOT_SDK] 2026-09-15 20:43:00.343 I 7611-1878175744|mqtt_connection.c:1022|_mqtt_on_puback_packet_received|-puback received: packet_id=11 topic=$thing/up/action/YDBF3QFF7F/test_002[aitalk] bot_state changed: 2 -> 3[aitalk] bot: 已经帮你调高啦,[aitalk] bot: 现在音量是百分之六十。[aitalk] bot: [aitalk] bot_state changed: 3 -> 5[aitalk] bot_state changed: 5 -> 1[aitalk] asr: 音量调到27%[aitalk] bot_state changed: 1 -> 2[IOT_SDK] 2026-09-15 20:43:10.239 I 7611-1878175744|data_model_action.c:71|create_data_model_action_from_json_string|-action parsed: action_id=control_volume, token=v2521859385OnQNt::4c3df927-ed64-4a19-add4-f54ee70f0533, input_data_num=2[aitalk] [demo] receive new action: id=control_volume, input_num=2[aitalk] [demo] volume control: set[aitalk] [demo] current volume: 27[IOT_SDK] 2026-09-15 20:43:10.240 I 7611-1878175744|data_model_action.c:202|data_model_on_receive_action_message|-action callback executed, action_id=control_volume, result=0[IOT_SDK] 2026-09-15 20:43:10.272 I 7611-1878175744|mqtt_connection.c:1022|_mqtt_on_puback_packet_received|-puback received: packet_id=12 topic=$thing/up/action/YDBF3QFF7F/test_002[aitalk] bot_state changed: 2 -> 3[aitalk] bot: 好,[aitalk] bot: 已经调到百分之二十七了。[aitalk] bot: [aitalk] bot_state changed: 3 -> 5[aitalk] bot_state changed: 5 -> 1[aitalk] asr: 音量调低5[aitalk] bot_state changed: 1 -> 2[IOT_SDK] 2026-09-15 20:43:18.861 I 7611-1878175744|data_model_action.c:71|create_data_model_action_from_json_string|-action parsed: action_id=control_volume, token=v2342464055ebTar::92929726-51af-4197-b2e0-0fd6cdbe1f1f, input_data_num=2[aitalk] [demo] receive new action: id=control_volume, input_num=2[aitalk] [demo] volume control: decrease[aitalk] [demo] current volume: 22[IOT_SDK] 2026-09-15 20:43:18.861 I 7611-1878175744|data_model_action.c:202|data_model_on_receive_action_message|-action callback executed, action_id=control_volume, result=0[IOT_SDK] 2026-09-15 20:43:18.894 I 7611-1878175744|mqtt_connection.c:1022|_mqtt_on_puback_packet_received|-puback received: packet_id=13 topic=$thing/up/action/YDBF3QFF7F/test_002[aitalk] bot_state changed: 2 -> 3[aitalk] bot: 好,[aitalk] bot: 降了五个点,现在音量是百分之二十二。[aitalk] bot: [aitalk] bot_state changed: 3 -> 5[aitalk] bot_state changed: 5 -> 1[aitalk] asr: 当前音量是多少[aitalk] bot_state changed: 1 -> 2[IOT_SDK] 2026-09-15 20:43:29.919 I 7611-1878175744|data_model_action.c:71|create_data_model_action_from_json_string|-action parsed: action_id=control_volume, token=v2342464055rmPhU::c44aad0c-2633-44e9-bc75-2da1f087babd, input_data_num=2[aitalk] [demo] receive new action: id=control_volume, input_num=2[aitalk] [demo] volume control: get[aitalk] [demo] current volume: 22[IOT_SDK] 2026-09-15 20:43:29.919 I 7611-1878175744|data_model_action.c:202|data_model_on_receive_action_message|-action callback executed, action_id=control_volume, result=0[IOT_SDK] 2026-09-15 20:43:29.951 I 7611-1878175744|mqtt_connection.c:1022|_mqtt_on_puback_packet_received|-puback received: packet_id=14 topic=$thing/up/action/YDBF3QFF7F/test_002[aitalk] bot_state changed: 2 -> 3[aitalk] bot: 现在音量是百分之二十二。[aitalk] bot: [aitalk] bot_state changed: 3 -> 5[aitalk] bot_state changed: 5 -> 1

赞 (0)
上一篇 4天前
下一篇 4天前