123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- /**
- * @Author: 李建
- * @Date: 12/17/2023, 8:22:32 PM
- * @LastEditors: 李建
- * @LastEditTime: 12/17/2023, 8:22:32 PM
- * Description: 网关通用命令处理,主要包含时间同步,软重启,上报最新状态 ,上报设备信息等
- * Copyright: Copyright (©)}) 2023 永续绿建. All rights reserved.
- */
- #include "zero_device.h"
- #include "command.h"
- #include "../channel.h"
- #include "esp_log.h"
- #include "esp_system.h"
- #include <cJSON.h>
- #include <mqtt_client.h>
- #include <esp_app_desc.h>
- #include "../gateway/access.h"
- #include "../system/miscellaneous_interface.h"
- static const char *TAG = "ZERO_DEVICE";
- extern esp_mqtt_client_handle_t client;
- /**
- * 处理云端状态消息
- */
- static void status_message_process(char *payload)
- {
- }
- // 处理云端事件消息
- static void event_message_process(char *payload)
- {
- }
- // 处理云端指令消息
- static void command_message_process(char *payload)
- {
- cJSON *root = cJSON_Parse(payload);
- cJSON *cmd = cJSON_GetObjectItemCaseSensitive(root, "cmd");
- cJSON *params = cJSON_GetObjectItem(root, "params");
- if (!root || !cmd || !params)
- return;
- sparrow_command *spCmd = find_sparrow_command(cmd->valuestring);
- if (NULL != spCmd)
- {
- spCmd->unpack(cJSON_PrintUnformatted(params));
- }
- else
- {
- ESP_LOGI(TAG, "%s is not found!", cmd->valuestring);
- }
- cJSON_Delete(root);
- }
- /**
- * 处理网关消息
- */
- void zero_device_process(char *payload, sparrow_topic_type topicType)
- {
- if (NULL == payload)
- {
- return;
- }
- switch (topicType)
- {
- case SPARROW_TOPIC_STATUS:
- status_message_process(payload);
- break;
- case SPARROW_TOPIC_COMMAND:
- command_message_process(payload);
- break;
- case SPARROW_TOPIC_EVENT:
- event_message_process(payload);
- break;
- default:
- break;
- }
- }
- // 设备软重启处理
- void restart_process(char *params)
- {
- esp_restart();
- }
- // 设备时间同步处理
- void timeSync_process(char *params)
- {
- ESP_LOGI(TAG, "time sync");
- }
- // 上报最新状态处理
- void report_process(char *params)
- {
- }
- void publish_sys_info(void)
- {
- gateway_sys_info info = {0};
- get_sys_info(&info);
- cJSON *root = cJSON_CreateObject();
- cJSON_AddStringToObject(root, "cmd", "sysInfo");
- cJSON *params = cJSON_CreateObject();
- cJSON_AddStringToObject(params, "mac", info.mac);
- cJSON_AddNumberToObject(params, "revision", info.revision);
- cJSON_AddNumberToObject(params, "cores", info.cores);
- cJSON_AddNumberToObject(params, "total", info.total);
- cJSON_AddNumberToObject(params, "used", info.used);
- cJSON_AddStringToObject(params, "version", info.version);
- cJSON_AddStringToObject(params, "idf_version", info.idf_version);
- cJSON_AddItemToObject(root, "params", params);
- publish_message_t msg = {
- .topic = "s",
- .data = root,
- };
- sparrow_publish_status(msg);
- }
- void publish_app_version(void) {
- char str_device_serial[16];
- get_device_serial(str_device_serial);
- cJSON *root = cJSON_CreateObject();
- cJSON_AddStringToObject(root, "action", "reportFirmware");
- cJSON_AddStringToObject(root, "deviceCode", str_device_serial);
- esp_app_desc_t * desc = esp_app_get_description();
- cJSON_AddStringToObject(root, "version", desc->version);
- char * payload = cJSON_PrintUnformatted(root);
- char topic[300];
- sprintf(topic, "%s%s", TOPIC_PUB_STATUS, str_device_serial);
- esp_mqtt_client_publish(client, topic, payload, 0, 1, false);
- cJSON_Delete(root);
- free(payload);
- }
- /**
- * 上报设备信息。包含MAC地址,程序版本,IP地址
- * 本地文件系统使用情况
- */
- void system_info_progress(char *pv)
- {
- publish_sys_info();
- }
- void sparrow_zero_device_init(void)
- {
- // restart command
- sparrow_command restart = {
- .name = "restart",
- .unpack = &restart_process,
- };
- // time sync command
- sparrow_command timeSync = {
- .name = "timeSync",
- .unpack = &timeSync_process,
- };
- // report command
- sparrow_command report = {
- .name = "report",
- .unpack = &report_process,
- };
- // get_sys_info command
- sparrow_command get_sys_info = {
- .name = "systemInfo",
- .unpack = &system_info_progress,
- };
- register_sparrow_command(restart);
- register_sparrow_command(timeSync);
- register_sparrow_command(report);
- register_sparrow_command(get_sys_info);
- register_sub_device_channel_recv(SPARROW_CHANNEL_PORT_0, zero_device_process);
- }
|