2025-10-11 18:25:59 +08:00

146 lines
4.8 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Threading.Tasks;
using XiaoZhiSharp.Protocols;
using XiaoZhiSharp.Models;
using XiaoZhiSharp.Utils;
namespace XiaoZhiSharp
{
/// <summary>
/// OTA功能使用示例
/// </summary>
public class OtaExample
{
/// <summary>
/// 基本OTA使用示例
/// </summary>
public static async Task BasicExample()
{
LogConsole.InfoLine("=== 基本OTA使用示例 ===");
// 创建XiaoZhiAgent实例
var agent = new XiaoZhiAgent();
// 订阅事件
agent.OnMessageEvent += (type, message) =>
{
LogConsole.InfoLine($"[{type}] {message}");
return Task.CompletedTask;
};
agent.OnOtaEvent += (otaResponse) =>
{
if (otaResponse != null)
{
LogConsole.InfoLine("OTA检查成功获取到服务器配置");
// 可以访问各种配置信息
if (otaResponse.WebSocket != null)
{
LogConsole.InfoLine($"WebSocket URL: {otaResponse.WebSocket.Url}");
LogConsole.InfoLine($"WebSocket Token: {otaResponse.WebSocket.Token}");
}
if (otaResponse.Mqtt != null)
{
LogConsole.InfoLine($"MQTT服务器: {otaResponse.Mqtt.Endpoint}");
LogConsole.InfoLine($"MQTT客户端ID: {otaResponse.Mqtt.ClientId}");
}
}
else
{
LogConsole.InfoLine("OTA检查失败使用默认配置");
}
return Task.CompletedTask;
};
// 启动会自动进行OTA检查
await agent.Start();
LogConsole.InfoLine("XiaoZhiAgent已启动OTA检查完成");
}
/// <summary>
/// 自定义OTA请求示例
/// </summary>
public static async Task CustomOtaExample()
{
LogConsole.InfoLine("=== 自定义OTA请求示例 ===");
var agent = new XiaoZhiAgent();
// 设置自定义参数
agent.CurrentVersion = "1.2.3";
agent.UserAgent = "custom-device/1.2.3";
agent.OnOtaEvent += (otaResponse) =>
{
LogConsole.InfoLine("收到OTA响应");
return Task.CompletedTask;
};
// 手动进行OTA检查带WiFi信息
var otaResponse = await agent.CheckOtaUpdateWithWifi(
ssid: "Test-WiFi",
rssi: -45,
channel: 6,
ip: "192.168.1.100"
);
if (otaResponse != null)
{
LogConsole.InfoLine("自定义OTA检查成功");
}
}
/// <summary>
/// 仅OTA检查示例不启动WebSocket
/// </summary>
public static async Task OtaOnlyExample()
{
LogConsole.InfoLine("=== 仅OTA检查示例 ===");
var agent = new XiaoZhiAgent();
// 仅进行OTA检查不启动WebSocket连接
var otaResponse = await agent.CheckOtaUpdate();
if (otaResponse != null)
{
LogConsole.InfoLine("OTA检查完成");
// 检查是否有固件更新
if (otaResponse.Firmware != null && !string.IsNullOrEmpty(otaResponse.Firmware.Url))
{
LogConsole.InfoLine($"发现固件更新: {otaResponse.Firmware.Version}");
LogConsole.InfoLine($"下载地址: {otaResponse.Firmware.Url}");
// 这里可以添加下载固件的逻辑
}
else
{
LogConsole.InfoLine("没有固件更新");
}
// 显示服务器时间
if (otaResponse.ServerTime != null)
{
var serverTime = DateTimeOffset.FromUnixTimeMilliseconds(otaResponse.ServerTime.Timestamp);
LogConsole.InfoLine($"服务器时间: {serverTime}");
LogConsole.InfoLine($"时区: {otaResponse.ServerTime.Timezone}");
}
// 显示激活信息
if (otaResponse.Activation != null)
{
LogConsole.InfoLine($"激活码: {otaResponse.Activation.Code}");
LogConsole.InfoLine($"激活消息: {otaResponse.Activation.Message}");
}
}
else
{
LogConsole.InfoLine("OTA检查失败");
}
}
}
}