146 lines
4.8 KiB
C#
146 lines
4.8 KiB
C#
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检查失败");
|
||
}
|
||
}
|
||
}
|
||
} |