From 960165521b07e15815814be819b4180451307708 Mon Sep 17 00:00:00 2001 From: waxgourd-ha Date: Fri, 30 May 2025 12:46:38 +0800 Subject: [PATCH 1/5] feat: Updated the list of supported UI languages, adding support for Simplified Chinese (zh-Hans) --- .../Managers/LocalizationManager.cs | 312 +- .../Localization/Languages.zh-hans.resx | 3409 +++++++++++++++++ 2 files changed, 3565 insertions(+), 156 deletions(-) create mode 100644 src/HASS.Agent/HASS.Agent/Resources/Localization/Languages.zh-hans.resx diff --git a/src/HASS.Agent/HASS.Agent/Managers/LocalizationManager.cs b/src/HASS.Agent/HASS.Agent/Managers/LocalizationManager.cs index 7f7fedda..f4e57fd3 100644 --- a/src/HASS.Agent/HASS.Agent/Managers/LocalizationManager.cs +++ b/src/HASS.Agent/HASS.Agent/Managers/LocalizationManager.cs @@ -1,156 +1,156 @@ -using System.Diagnostics.CodeAnalysis; -using System.Globalization; -using HASS.Agent.Models.Internal; -using HASS.Agent.Shared; -using Serilog; - -namespace HASS.Agent.Managers -{ - [SuppressMessage("ReSharper", "InconsistentNaming")] - internal static class LocalizationManager - { - /// - /// Loads supported languages, and tries to set the stored language as the current UI language - /// - internal static void Initialize() - { - // load supported languages - LoadSupportedUILanguages(); - - // set stored - SetStoredUILanguage(); - } - - /// - /// Sets the UI culture to the provided culturecode - /// - // ReSharper disable once InconsistentNaming - private static void SetStoredUILanguage() - { - var cultureCode = Variables.AppSettings?.InterfaceLanguage; - - try - { - if (string.IsNullOrWhiteSpace(cultureCode)) - { - // nothing set, get system culture - var currentCulture = CultureInfo.CurrentUICulture; - cultureCode = currentCulture.Name; - - Log.Information("[LOCALIZTION] No language setting stored, falling back to the system's UI culture: {culture}", currentCulture.DisplayName); - } - - // load the culture (and trigger a not-found exception if it's malformed) - var culture = new CultureInfo(cultureCode); - - // check if it's supported - if (Variables.SupportedUILanguages.All(x => x.Name != culture.Name)) - { - Log.Warning("[LOCALIZATION] The selected UI culture isn't yet supported, please help out by translating:"); - Log.Warning("[LOCALIZATION] https://www.hass-agent.io/latest/contributing/translating/"); - - SetDefaultUILanguage(); - return; - } - - // store as current - Variables.CurrentUICulture = new SupportedUILanguage(culture); - - // set as interface - Thread.CurrentThread.CurrentUICulture = culture; - Thread.CurrentThread.CurrentCulture = culture; - - // set on shared - AgentSharedBase.SetCulture(culture); - - // done - Log.Information("[LOCALIZATION] Selected UI culture: [{code}] {culture}", Thread.CurrentThread.CurrentUICulture.Name, Thread.CurrentThread.CurrentUICulture.DisplayName); - } - catch (CultureNotFoundException) - { - Log.Error("[LOCALIZATION] Unable to set the selected culture '{culture}': {err}", cultureCode, "culture not known"); - SetDefaultUILanguage(); - } - catch (Exception ex) - { - Log.Error("[LOCALIZATION] Unable to set the selected culture '{culture}': {err}", cultureCode, ex.Message); - SetDefaultUILanguage(); - } - } - - /// - /// Tries to change the interface to the provided one - /// - /// - internal static void SetNewUILanguage(string cultureCode) - { - try - { - if (string.IsNullOrWhiteSpace(cultureCode)) return; - - // load the culture (and trigger a not-found exception if it's malformed) - var culture = new CultureInfo(cultureCode); - - // check if it's supported - if (Variables.SupportedUILanguages.All(x => x.Name != culture.Name)) - { - Log.Warning("[LOCALIZATION] The new UI culture isn't yet supported, please help out by translating:"); - Log.Warning("[LOCALIZATION] https://www.hass-agent.io/latest/contributing/translating/"); - - SetStoredUILanguage(); - return; - } - - // store as current - Variables.CurrentUICulture = new SupportedUILanguage(culture); - - // set as interface - Thread.CurrentThread.CurrentUICulture = culture; - Thread.CurrentThread.CurrentCulture = culture; - - // set on shared - AgentSharedBase.SetCulture(culture); - - // done - Log.Information("[LOCALIZATION] New UI culture: [{code}] {culture}", Thread.CurrentThread.CurrentUICulture.Name, Thread.CurrentThread.CurrentUICulture.DisplayName); - } - catch (CultureNotFoundException) - { - Log.Error("[LOCALIZATION] Unable to set the new culture '{culture}': {err}", cultureCode, "culture not known"); - SetDefaultUILanguage(); - } - catch (Exception ex) - { - Log.Error("[LOCALIZATION] Unable to set the new culture '{culture}': {err}", cultureCode, ex.Message); - SetDefaultUILanguage(); - } - } - - /// - /// Sets the UI to the default language - /// - private static void SetDefaultUILanguage() - { - // set default EN - var defaultCulture = new CultureInfo("en"); - Log.Information("[LOCALIZATION] Setting default: {default}", defaultCulture.DisplayName); - Thread.CurrentThread.CurrentUICulture = defaultCulture; - - // store as current - Variables.CurrentUICulture = new SupportedUILanguage(defaultCulture); - } - - /// - /// Loads the currently supported UI languages - /// - private static void LoadSupportedUILanguages() - { - var supportedCultureList = new List { "en", "pt-BR", "sl", "es", "nl", "de", "ru", "fr", "pl", "tr" }; - - foreach (var supportedUILanguage in supportedCultureList.Select(supportedCulture => new CultureInfo(supportedCulture)).Select(culture => new SupportedUILanguage(culture))) - { - Variables.SupportedUILanguages.Add(supportedUILanguage); - } - } - } -} +using System.Diagnostics.CodeAnalysis; +using System.Globalization; +using HASS.Agent.Models.Internal; +using HASS.Agent.Shared; +using Serilog; + +namespace HASS.Agent.Managers +{ + [SuppressMessage("ReSharper", "InconsistentNaming")] + internal static class LocalizationManager + { + /// + /// Loads supported languages, and tries to set the stored language as the current UI language + /// + internal static void Initialize() + { + // load supported languages + LoadSupportedUILanguages(); + + // set stored + SetStoredUILanguage(); + } + + /// + /// Sets the UI culture to the provided culturecode + /// + // ReSharper disable once InconsistentNaming + private static void SetStoredUILanguage() + { + var cultureCode = Variables.AppSettings?.InterfaceLanguage; + + try + { + if (string.IsNullOrWhiteSpace(cultureCode)) + { + // nothing set, get system culture + var currentCulture = CultureInfo.CurrentUICulture; + cultureCode = currentCulture.Name; + + Log.Information("[LOCALIZTION] No language setting stored, falling back to the system's UI culture: {culture}", currentCulture.DisplayName); + } + + // load the culture (and trigger a not-found exception if it's malformed) + var culture = new CultureInfo(cultureCode); + + // check if it's supported + if (Variables.SupportedUILanguages.All(x => x.Name != culture.Name)) + { + Log.Warning("[LOCALIZATION] The selected UI culture isn't yet supported, please help out by translating:"); + Log.Warning("[LOCALIZATION] https://www.hass-agent.io/latest/contributing/translating/"); + + SetDefaultUILanguage(); + return; + } + + // store as current + Variables.CurrentUICulture = new SupportedUILanguage(culture); + + // set as interface + Thread.CurrentThread.CurrentUICulture = culture; + Thread.CurrentThread.CurrentCulture = culture; + + // set on shared + AgentSharedBase.SetCulture(culture); + + // done + Log.Information("[LOCALIZATION] Selected UI culture: [{code}] {culture}", Thread.CurrentThread.CurrentUICulture.Name, Thread.CurrentThread.CurrentUICulture.DisplayName); + } + catch (CultureNotFoundException) + { + Log.Error("[LOCALIZATION] Unable to set the selected culture '{culture}': {err}", cultureCode, "culture not known"); + SetDefaultUILanguage(); + } + catch (Exception ex) + { + Log.Error("[LOCALIZATION] Unable to set the selected culture '{culture}': {err}", cultureCode, ex.Message); + SetDefaultUILanguage(); + } + } + + /// + /// Tries to change the interface to the provided one + /// + /// + internal static void SetNewUILanguage(string cultureCode) + { + try + { + if (string.IsNullOrWhiteSpace(cultureCode)) return; + + // load the culture (and trigger a not-found exception if it's malformed) + var culture = new CultureInfo(cultureCode); + + // check if it's supported + if (Variables.SupportedUILanguages.All(x => x.Name != culture.Name)) + { + Log.Warning("[LOCALIZATION] The new UI culture isn't yet supported, please help out by translating:"); + Log.Warning("[LOCALIZATION] https://www.hass-agent.io/latest/contributing/translating/"); + + SetStoredUILanguage(); + return; + } + + // store as current + Variables.CurrentUICulture = new SupportedUILanguage(culture); + + // set as interface + Thread.CurrentThread.CurrentUICulture = culture; + Thread.CurrentThread.CurrentCulture = culture; + + // set on shared + AgentSharedBase.SetCulture(culture); + + // done + Log.Information("[LOCALIZATION] New UI culture: [{code}] {culture}", Thread.CurrentThread.CurrentUICulture.Name, Thread.CurrentThread.CurrentUICulture.DisplayName); + } + catch (CultureNotFoundException) + { + Log.Error("[LOCALIZATION] Unable to set the new culture '{culture}': {err}", cultureCode, "culture not known"); + SetDefaultUILanguage(); + } + catch (Exception ex) + { + Log.Error("[LOCALIZATION] Unable to set the new culture '{culture}': {err}", cultureCode, ex.Message); + SetDefaultUILanguage(); + } + } + + /// + /// Sets the UI to the default language + /// + private static void SetDefaultUILanguage() + { + // set default EN + var defaultCulture = new CultureInfo("en"); + Log.Information("[LOCALIZATION] Setting default: {default}", defaultCulture.DisplayName); + Thread.CurrentThread.CurrentUICulture = defaultCulture; + + // store as current + Variables.CurrentUICulture = new SupportedUILanguage(defaultCulture); + } + + /// + /// Loads the currently supported UI languages + /// + private static void LoadSupportedUILanguages() + { + var supportedCultureList = new List { "en", "pt-BR", "sl", "es", "nl", "de", "ru", "fr", "pl", "tr", "zh-Hans" }; + + foreach (var supportedUILanguage in supportedCultureList.Select(supportedCulture => new CultureInfo(supportedCulture)).Select(culture => new SupportedUILanguage(culture))) + { + Variables.SupportedUILanguages.Add(supportedUILanguage); + } + } + } +} diff --git a/src/HASS.Agent/HASS.Agent/Resources/Localization/Languages.zh-hans.resx b/src/HASS.Agent/HASS.Agent/Resources/Localization/Languages.zh-hans.resx new file mode 100644 index 00000000..c0703748 --- /dev/null +++ b/src/HASS.Agent/HASS.Agent/Resources/Localization/Languages.zh-hans.resx @@ -0,0 +1,3409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 此页面允许您配置与外部工具的绑定。 + + + 清除图像缓存 + + + 打开文件夹 + + + 图像缓存位置 + + + + + + 端口 + + + 显示测试通知 + + + 执行端口预留 + + + 注意:5115 是默认端口,只有在您在 Home Assistant 中更改了它时才进行修改。 + + + 是的,接受端口上的通知 + + + HASS.Agent 可以使用文本和/或图像从 Home Assistant 接收通知。 + +您是否要启用此功能? + + + HASS.Agent-Notifier GitHub 页面 + + + 请确保您遵循以下步骤: + +- 安装 HASS.Agent-Notifier 集成 +- 重启 Home Assistant +- 配置通知器实体 +- 重启 Home Assistant + + + 要使用通知功能,您需要在 Home Assistant 中安装并配置 HASS.Agent-notifier 集成。 + +使用 HACS 安装非常简单,但也可以手动安装,请访问以下链接获取更多信息。 + + + 名称 + + + 类型 + + + 应用 + + + 已保存! + + + 名称 + + + 类型 + + + HASS.Agent 端口预留 + + + HASS.Agent 更新后处理 + + + HASS.Agent 重启器 + + + 名称 + + + 类型 + + + 类型 + + + + + + 实体 + + + 操作 + + + 热键 + + + 描述 + + + + + + 启用热键 + + + 名称 + + + 类型 + + + 传感器配置 + + + 设置 1 + + + 设置 2 + + + 设置 3 + + + 类型 + + + 常规 + + + MQTT + + + 命令 + + + 传感器 + + + 常规 + + + 外部工具 + + + Home Assistant API + + + 热键 + + + 本地存储 + + + 日志记录 + + + MQTT + + + 通知 + + + 卫星服务 + + + 启动 + + + 更新 + + + 浏览 HASS.Agent 文档和使用示例。 + + + 显示 HASS.Agent + + + 显示快速操作 + + + 配置 + + + 管理快速操作 + + + 管理本地传感器 + + + 管理命令 + + + 检查更新 + + + 捐赠 + + + 帮助与联系 + + + 关于 + + + 退出 HASS.Agent + + + 正在加载.. + + + 正在加载.. + + + 通知 API: + + + HASS.Agent 入门引导 + + + 正在获取信息,请稍候.. + + + 执行自定义命令。 + +这些命令在没有特殊权限提升的情况下运行。要以提升的权限运行,请创建一个计划任务,并使用 'schtasks /Run /TN "任务名称"' 作为命令来执行您的任务。 + +或者启用“以低完整性运行”以实现更严格的执行。 + + + 通过配置的自定义执行器(在配置 -> 外部工具中)执行命令。 + +您的命令将“原样”作为参数提供,因此如有必要,您必须自行提供引号等。 + + + 使计算机进入休眠状态。 + + + 模拟单次按键。 + +点击“键码”文本框并按下您要模拟的键。相应的键码将自动输入。 +对于 TAB 键,请使用 LCTRL+TAB。 + +如果您需要更多按键和/或修饰键(如 CTRL),请使用“多键”命令。 + + + 启动提供的 URL,默认情况下在您的默认浏览器中打开。 + +要使用“隐身模式”,请在配置 -> 外部工具中提供特定的浏览器。 + +如果您只想要一个包含特定 URL 的窗口(而不是整个浏览器),请使用“WebView”命令。 + + + 锁定当前会话。 + + + 注销当前会话。 + + + 模拟“静音”键。 + + + 模拟“媒体下一曲”键。 + + + 模拟“媒体暂停/播放”键。 + + + 模拟“媒体上一曲”键。 + + + 模拟“音量降低”键。 + + + 模拟“音量升高”键。 + + + 模拟按下多个键。 + +您需要在每个键之间使用 [ ],否则 HASS.Agent 无法区分它们。例如,如果您想按下 X TAB Y SHIFT-Z,应该写成 [X] [{TAB}] [Y] [+Z]。 + +您可以使用一些技巧: + +- 如果您想按下括号,请进行转义,即 [ 写成 [\[],] 写成 [\]] + +- 特殊键用 { } 括起来,如 {TAB} 或 {UP} + +- 在键前加 + 表示 SHIFT,^ 表示 CTRL,% 表示 ALT。因此,+C 表示 SHIFT-C。或者,+(CD) 表示 SHIFT-C 和 SHIFT-D,而 +CD 表示 SHIFT-C 和 D + +- 要多次按下某个键,使用 {z 15},表示 Z 将被按下 15 次。 + +更多信息:https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.sendkeys + + + 执行 PowerShell 命令或脚本。 + +您可以提供脚本的位置(*.ps1),或单行命令。 + +此操作将在没有特殊权限提升的情况下运行。 + + + 重置所有传感器检查,强制所有传感器处理并发送其值。 + +例如,如果您想在 HA 重启后强制 HASS.Agent 更新所有传感器,此操作很有用。 + + + 一分钟后重启计算机。 + +提示:意外触发?运行 'shutdown /a' 以取消关机。 + + + 一分钟后关闭计算机。 + +提示:意外触发?运行 'shutdown /a' 以取消关机。 + + + 使计算机进入睡眠状态。 + +注意:由于 Windows 的限制,此操作仅在禁用休眠时有效,否则计算机将进入休眠状态。 + +您可以使用 NirCmd(http://www.nirsoft.net/utils/nircmd.html)等工具来解决此问题。 + + + 请输入您浏览器的可执行文件位置!(.exe 文件) + + + 提供的浏览器可执行文件未找到,请确保路径正确并重试。 + + + 未提供隐身模式参数,因此浏览器可能会正常启动。 + +您要继续吗? + + + 以隐身模式启动浏览器时出现问题! + +请查看日志以获取更多信息。 + + + 请输入有效的 API 密钥! + + + 请输入您 Home Assistant 的 URI。 + + + 无法连接,返回以下错误: + +{0} + + + 连接正常! + +Home Assistant 版本:{0} + + + 图像缓存已清除! + + + 正在清理.. + + + 通知当前已禁用,请启用它们并重启 HASS.Agent,然后重试。 + + + 测试通知应该已经显示,如果您没有收到,请查看日志或查阅文档以获取故障排除提示。 + +注意:此操作仅在本地测试通知是否可以显示! + + + 这是一条测试通知! + + + 正在执行,请稍候.. + + + 预留端口时出现问题! + +需要手动执行,并且命令已复制到您的剪贴板,请打开一个具有管理员权限的终端并粘贴该命令。 + +此外,请记住更改您的防火墙规则端口! + + + 未安装 + + + 已禁用 + + + 正在运行 + + + 已停止 + + + 失败 + + + 停止服务时出现问题,您是否允许了 UAC 提示? + +请查看 HASS.Agent(而非服务)的日志以获取更多信息。 + + + 服务设置为“已禁用”,因此无法启动。 + +请先启用服务,然后重试。 + + + 启动服务时出现问题,您是否允许了 UAC 提示? + +请查看 HASS.Agent(而非服务)的日志以获取更多信息。 + + + 禁用服务时出现问题,您是否允许了 UAC 提示? + +请查看 HASS.Agent(而非服务)的日志以获取更多信息。 + + + 启用服务时出现问题,您是否允许了 UAC 提示? + +请查看 HASS.Agent(而非服务)的日志以获取更多信息。 + + + 重新安装服务时出现问题,您是否允许了 UAC 提示? + +请查看 HASS.Agent(而非服务)的日志以获取更多信息。 + + + 禁用登录时启动出现问题,请查看日志以获取更多信息。 + + + 禁用登录时启动出现问题,请查看日志以获取更多信息。 + + + 已启用 + + + 禁用登录时启动 + + + 已禁用 + + + 启用登录时启动 + + + 登录时启动已激活! + + + 您现在要启用登录时启动吗? + + + 登录时启动已激活,一切就绪! + + + 正在激活登录时启动.. + + + 出现问题。您可以重试,或者跳过此步骤,在 HASS.Agent 重启后再次尝试。 + + + 启用登录时启动 + + + 请提供有效的 API 密钥。 + + + 请输入您 Home Assistant 的 URI。 + + + 无法连接,返回以下错误: + +{0} + + + 连接正常! + +Home Assistant 版本:{0} + + + 正在测试.. + + + 保存命令时出现错误,请查看日志以获取更多信息。 + + + 正在保存并注册,请稍候.. + + + 正在连接卫星服务,请稍候.. + + + 连接服务失败! + + + 未找到服务!您可以从配置面板安装和管理它。 + +当服务启动并运行后,返回此处配置命令和传感器。 + + + 与服务通信失败! + + + 无法与服务通信。请查看日志以获取更多信息。 + +您可以从配置面板打开日志并管理服务。 + + + 未授权 + + + 您无权联系该服务。 + +如果您有正确的认证 ID,可以现在设置并重试。 + + + 获取设置失败! + + + 服务在请求其设置时返回错误。请查看日志以获取更多信息。 + +您可以从配置面板打开日志并管理服务。 + + + 获取 MQTT 设置失败! + + + 服务在请求其 MQTT 设置时返回错误。请查看日志以获取更多信息。 + +您可以从配置面板打开日志并管理服务。 + + + 获取已配置的命令失败! + + + 服务在请求其已配置的命令时返回错误。请查看日志以获取更多信息。 + +您可以从配置面板打开日志并管理服务。 + + + 获取已配置的传感器失败! + + + 服务在请求其已配置的传感器时返回错误。请查看日志以获取更多信息。 + +您可以从配置面板打开日志并管理服务。 + + + 存储空的认证 ID 将允许所有 HASS.Agent 实例访问该服务。 + +您确定要这样做吗? + + + 保存时出现错误,请查看日志以获取更多信息。 + + + 请提供设备名称! + + + 请先选择一个执行器。(提示:双击以浏览) + + + 所选的执行器未找到,请确保提供的路径正确并重试。 + + + 如果您不希望此 PC 上的每个 HASS.Agent 实例都连接到卫星服务,请设置一个认证 ID。 + +只有具有正确 ID 的实例才能连接。 + +留空以允许所有实例连接。 + + + 这是卫星服务在 Home Assistant 上注册的名称。 + +默认情况下,它是您 PC 的名称加上 '-satellite'。 + + + 卫星服务在向 MQTT 代理报告连接丢失之前将等待的时间。 + + + 获取状态时出错,请查看日志以获取信息。 + + + 保存配置时出现错误,请查看日志以获取更多信息。 + + + 正在保存并注册,请稍候.. + + + 保存传感器时出现错误,请查看日志以获取更多信息。 + + + 正在保存并注册,请稍候.. + + + 并非所有步骤都成功完成。请查看日志以获取更多信息。 + + + 并非所有步骤都成功完成。请查看日志以获取更多信息。 + + + HASS.Agent 在 {0} 秒后仍处于活动状态。请关闭所有实例并手动重启。 + +请查看日志以获取更多信息,并可选择通知开发人员。 + + + 并非所有步骤都成功完成,请查看日志以获取更多信息。 + + + 启用卫星服务 + + + 禁用卫星服务 + + + 启动卫星服务 + + + 停止卫星服务 + + + 处理所需的服务状态时出现问题。 + +请查看日志以获取更多信息。 + + + 主题已复制到剪贴板! + + + 正在保存并注册,请稍候.. + + + 保存命令时出现错误,请查看日志以获取更多信息。 + + + 新命令 + + + 修改命令 + + + 请选择一个命令类型! + + + 请选择一个有效的命令类型! + + + 请先选择一个有效的实体类型。 + + + 请提供一个名称! + + + 具有该名称的命令已存在,您确定要继续吗? + + + 如果未提供命令,您只能通过 Home Assistant 使用具有“操作”值的此实体,直接运行它将不会有任何操作。 + +您确定要继续吗? + + + 如果您不输入命令或脚本,您只能通过 Home Assistant 使用具有“操作”值的此实体。直接运行它将不会有任何操作。 + +您确定要这样做吗? + + + 请输入一个键码! + + + 检查键时失败:{0} + + + 如果未提供 URL,您只能通过 Home Assistant 使用具有“操作”值的此实体,直接运行它将不会有任何操作。 + +您确定要继续吗? + + + 命令 + + + 命令或脚本 + + + 键码 + + + 键码 + + + 以隐身模式启动 + + + 浏览器:默认 + +请配置自定义浏览器以启用隐身模式。 + + + URL + + + 浏览器:{0} + + + 执行器:无 + +请配置一个执行器,否则您的命令将无法运行。 + + + 执行器:{0} + + + 低完整性意味着您的命令将以受限权限执行。 + + + 这意味着它只能在某些位置保存和修改文件, + + + 例如 '%USERPROFILE%\AppData\LocalLow' 文件夹或 + + + 'HKEY_CURRENT_USER\Software\AppDataLow' 注册表项。 + + + 您应该测试您的命令,以确保它不受此影响! + + + {0} 专用! + + + MQTT 管理器配置不正确,或尚未完成启动。 + + + 由于缺少配置,无法获取您的实体,请在配置屏幕中输入所需的值。 + + + 尝试获取您的实体时出现错误! + + + 新快速操作 + + + 修改快速操作 + + + 由于缺少配置,无法获取您的实体,请在配置屏幕中输入所需的值。 + + + 尝试获取您的实体时出现错误。 + + + 请选择一个实体! + + + 未知操作,请选择一个有效的操作。 + + + 正在保存并注册,请稍候.. + + + 保存传感器时出现错误,请查看日志以获取更多信息。 + + + 新传感器 + + + 修改传感器 + + + 窗口名称 + + + WMI 查询 + + + WMI 范围(可选) + + + 类别 + + + 计数器 + + + 实例(可选) + + + 进程 + + + 服务 + + + 请选择一个传感器类型! + + + 请选择一个有效的传感器类型! + + + 请提供一个名称! + + + 已存在一个具有该名称的单值传感器,你确定要继续吗? + + + 已存在一个具有该名称的多值传感器,你确定要继续吗? + + + 请提供一个介于 1 到 43200(12 小时)之间的间隔! + + + 请输入一个窗口名称! + + + 请输入一个查询! + + + 请输入一个类别和实例! + + + 请输入一个进程的名称! + + + 请输入一个服务的名称! + + + 仅 {0}! + + + 你已经更改了设备的名称。 + +你所有的传感器和命令现在将取消发布,之后 HASS.Agent 将重新启动以重新发布它们。 + +别担心,它们将保留当前的名称,因此你的自动化或脚本将继续正常工作。 + +注意:名称将被“清理”,这意味着除字母、数字和空格之外的所有内容都将被下划线替换。这是 Home Assistant (HA) 所要求的。 + + + 你已经更改了本地 API 的端口。需要保留这个新端口。 + +你将收到一个用户账户控制 (UAC) 请求,请批准。 + + + 出问题了! + +请手动执行所需的命令。该命令已复制到你的剪贴板,你只需将其粘贴到提升权限的命令提示符中即可。 + +请记住同时更改防火墙规则中的端口。 + + + 端口已成功保留! + +HASS.Agent 现在将重新启动以激活新配置。 + + + 准备重新启动时出了问题。 +请手动重新启动。 + + + 你的配置已保存。大多数更改需要 HASS.Agent 重新启动后才能生效。 + +你现在要重新启动吗? + + + 加载设置时出了问题。 + +请检查 'config' 子文件夹中的 appsettings.json,或者直接删除它以重新开始。 + + + 启动 HASS.Agent 时出现错误。 +请检查日志并在 GitHub 上提交错误报告。 + + + &传感器 + + + &命令 + + + 正在检查.. + + + 你正在运行最新版本:{0}{1} + + + 有一个新的 BETA 版本可用: + + + HASS.Agent BETA 更新 + + + 你要 &下载并启动安装程序吗? + + + 你要 &导航到发布页面吗? + + + 安装更新 + + + 安装 BETA 版本 + + + 打开发布页面 + + + 打开 BETA 发布页面 + + + 正在处理请求,请稍候.. + + + 正在处理.. + + + HASS.Agent 入门指南:开始 [{0}/{1}] + + + HASS.Agent 入门指南:启动 [{0}/{1}] + + + HASS.Agent 入门指南:通知 [{0}/{1}] + + + HASS.Agent 入门指南:集成 [{0}/{1}] + + + HASS.Agent 入门指南:API [{0}/{1}] + + + HASS.Agent 入门指南:MQTT [{0}/{1}] + + + HASS.Agent 入门指南:热键 [{0}/{1}] + + + HASS.Agent 入门指南:更新 [{0}/{1}] + + + HASS.Agent 入门指南:完成 [{0}/{1}] + + + 你确定要中止入门流程吗? + +你的进度将不会被保存,并且下次启动时不会再次显示。 + + + 获取信息时出错,请查看日志以获取更多信息。 + + + 无法准备下载更新,请查看日志以获取更多信息。 + +现在将打开发布页面。 + + + 无法下载更新,请查看日志以获取更多信息。 + +现在将打开发布页面。 + + + 下载的文件证书检查失败。 + +这可能是技术错误,也可能是被篡改的文件! + +请查看日志,并根据调查结果提交问题单。 + + + 无法启动安装程序(你是否批准了 UAC 提示?),请查看日志以获取更多信息。 + +现在将打开发布页面。 + + + HASS API:连接设置失败。 + + + HASS API:初始连接失败。 + + + HASS API:连接失败。 + + + 未找到客户端证书文件。 + + + 无法连接,请检查 URI。 + + + 无法获取配置信息,请检查 API 密钥。 + + + 无法连接,请检查 URI 和配置。 + + + 快速操作:操作失败,请查看日志以获取信息 + + + 快速操作:操作失败,未找到实体 + + + MQTT:连接时出错 + + + MQTT:连接失败 + + + MQTT:已断开连接 + + + 尝试将 API 绑定到端口 {0} 时出错。 + +请确保没有其他 HASS.Agent 实例正在运行,并且该端口可用且已注册。 + + + 提供当前活动窗口的标题。 + + + 提供设备音频各方面的信息: + +当前峰值音量级别(可用作简单的“是否有声音正在播放”的值)。 + +默认音频设备:名称、状态和音量。 + +音频会话摘要:应用程序名称、静音状态、音量和当前峰值音量。 + + + 提供一个传感器,包含当前充电状态、充满电时的估计分钟数、剩余电量百分比、剩余电量分钟数和电源线路状态。 + + + 提供第一个 CPU 的当前负载百分比。 + + + 提供第一个 CPU 的当前时钟速度。 + + + 提供当前音量级别百分比。 + +目前采用默认设备的音量。 + + + 提供一个传感器,包含显示器数量、主显示器名称,以及每个显示器的名称、分辨率和每像素位数。 + + + 用于测试目的的虚拟传感器,发送 0 到 100 之间的随机整数值。 + + + 提供第一个 GPU 的当前负载百分比。 + + + 提供第一个 GPU 的当前温度。 + + + 提供一个包含用户最后一次输入时刻的日期时间值。 + +可选地,当系统在配置的时间窗口内从睡眠/休眠状态唤醒且没有用户活动时,用当前日期更新传感器。 + + + 提供一个包含系统最后一次(重新)启动时刻的日期时间值。 + +重要提示:Windows 的快速启动选项可能会影响此值,因为这是一种休眠形式。你可以通过电源选项 -> “选择电源按钮的功能” -> 取消选中“启用快速启动”来禁用它。对于配备固态硬盘的现代计算机来说,禁用此选项不会有太大影响,但可以确保重启后获得干净的状态。 + + + 提供最后一次系统状态更改: + +应用程序启动、注销、系统关机、恢复、挂起、控制台连接、控制台断开连接、远程连接、远程断开连接、会话锁定、会话注销、会话登录、会话远程控制和会话解锁。 + + + 返回当前登录用户的名称。 + +这只会显示活动用户,如果没有活动用户则显示“Empty”。如果有多个活动用户,将使用第一个。 + + + 返回当前登录用户的 JSON 格式列表。 + +这也将包含非活动用户。如果你只需要当前活动用户,请使用 LoggedUser 传感器。 + + + 提供已使用内存的百分比。 + + + 根据麦克风当前是否正在使用提供一个布尔值。 + +注意:如果在卫星服务中使用,将无法检测用户空间应用程序。 + + + 根据指定窗口当前是否打开(不一定是活动窗口)提供一个 ON/OFF 值。 + + + 提供所选网络卡的卡信息、配置、传输和数据包统计信息以及地址(IP、MAC、DHCP、DNS)。 + +这是一个多值传感器。 + + + 提供性能计数器的值。 + +例如,内置的 CPU 负载传感器使用以下值: + +类别:处理器 +计数器:% 处理器时间 +实例:_Total + +你可以通过 Windows 的 'perfmon.exe' 工具探索计数器。 + + + 提供指定进程的活动实例数量。 + +注意:不要添加扩展名(例如,notepad.exe 应写成 notepad)。 + + + 返回指定服务的状态:未找到、已停止、正在启动、正在停止、正在运行、正在继续、正在暂停或已暂停。 + +请确保提供“服务名称”,而不是“显示名称”。 + + + 提供当前会话状态: + +已锁定、未锁定或未知。 + +使用 LastSystemStateChangeSensor 来监控会话状态更改。 + + + 提供所有当前非可移动磁盘的标签、总大小(MB)、可用空间(MB)、已使用空间(MB)和文件系统。 + + + 提供当前用户状态: + +不在场、忙碌、正在运行 Direct3D 全屏应用程序、演示模式、接受通知、安静时间或正在运行 Windows 应用商店应用程序。 + +例如,可用于确定是否发送通知或文本转语音消息。 + + + 根据网络摄像头当前是否正在使用提供一个布尔值。 + +注意:如果在卫星服务中使用,将无法检测用户空间应用程序。 + + + 提供一个包含待处理驱动程序更新数量的传感器、一个包含待处理软件更新数量的传感器、一个包含所有待处理驱动程序更新信息(标题、KB 文章 ID、是否隐藏、类型和类别)的传感器,以及一个包含待处理软件更新相同信息的传感器。 + +这是一个开销较大的请求,因此建议的间隔时间为 15 分钟(900 秒)。但如果提供的值低于 10 分钟,将返回最后已知的列表。 + + + 提供 WMI 查询的结果。 + + + 加载设置时出错: + +{0} + + + 存储初始设置时出错: + +{0} + + + 存储设置时出错: + +{0} + + + 加载命令时出错: + +{0} + + + 存储命令时出错: + +{0} + + + 加载快速操作时出错: + +{0} + + + 存储快速操作时出错: + +{0} + + + 加载传感器时出错: + +{0} + + + 存储传感器时出错: + +{0} + + + 维基 + + + 忙碌中,请稍候.. + + + 完成 + + + 已连接 + + + 正在连接.. + + + 缺少配置信息 + + + 已断开连接 + + + 错误 + + + 自定义 + + + 自定义执行器 + + + 休眠 + + + 按键 + + + 打开 URL + + + 锁定 + + + 注销 + + + 媒体静音 + + + 媒体下一曲 + + + 媒体播放/暂停 + + + 媒体上一曲 + + + 媒体音量降低 + + + 媒体音量升高 + + + 多个按键 + + + PowerShell + + + 发布所有传感器 + + + 重启 + + + 关机 + + + 睡眠 + + + 按钮 + + + 灯光 + + + + + + 警报器 + + + 开关 + + + 已锁定 + + + 未知 + + + 未锁定 + + + 活动窗口 + + + 音频 + + + 电池 + + + CPU 负载 + + + 当前时钟速度 + + + 当前音量 + + + 显示器 + + + 虚拟 + + + GPU 负载 + + + GPU 温度 + + + 最后活动时间 + + + 最后启动时间 + + + 最后系统状态更改 + + + 当前登录用户 + + + 所有登录用户 + + + 内存使用情况 + + + 麦克风是否活动 + + + 指定窗口状态 + + + 网络 + + + 性能计数器 + + + 进程活动状态 + + + 服务状态 + + + 会话状态 + + + 存储 + + + 用户通知状态 + + + 网络摄像头是否活动 + + + Windows 更新 + + + WMI 查询 + + + 应用程序启动 + + + 注销 + + + 系统关机 + + + 恢复 + + + 挂起 + + + 控制台连接 + + + 控制台断开连接 + + + 远程连接 + + + 远程断开连接 + + + 会话锁定 + + + 会话注销 + + + 会话登录 + + + 会话远程控制 + + + 会话解锁 + + + 不在场 + + + 忙碌 + + + 正在运行 Direct3D 全屏应用程序 + + + 演示模式 + + + 接受通知 + + + 安静时间 + + + 正在运行 Windows 应用商店应用程序 + + + 开启 + + + 关闭 + + + 打开 + + + 关闭 + + + 播放 + + + 暂停 + + + 停止 + + + 切换 + + + 自动化 + + + 气候 + + + 遮盖物 + + + 输入布尔值 + + + 灯光 + + + 媒体播放器 + + + 场景 + + + 脚本 + + + 开关 + + + 正在连接.. + + + 失败 + + + 正在加载.. + + + 正在运行 + + + 已停止 + + + 已禁用 + + + 看起来你的作用域格式有误,它可能应该像这样开始: + +\\.\ROOT\ + +你输入的作用域: + +{0} + +提示:确保你没有将作用域和查询字段弄反。 + +你仍然想使用当前值吗? + + + 请先输入一个 WMI 查询。 + + + 查询已成功执行,结果值: + +{0} + + + 查询执行失败: + +{0} + +你要打开日志文件夹吗? + + + 请先输入一个类别和计数器。 + + + 测试已成功执行,结果值: + +{0} + + + 测试执行失败: + +{0} + +你要打开日志文件夹吗? + + + 测试 WMI 查询 + + + 测试性能计数器 + + + 地理位置 + + + 全部 + + + 网络卡 + + + 最后已知值 + + + 将窗口前置 + + + 正在清理.. + + + 音频缓存已清除! + + + 正在清理.. + + + WebView 缓存已清除! + + + WebView + + + 查找指定的进程,并尝试将其主窗口前置。 + +如果应用程序已最小化,它将被恢复。 + +示例:如果你想将 VLC 置于前台,请使用 'vlc'。 + + + 显示一个包含指定 URL 的窗口。 + +这与“打开 URL”命令的不同之处在于,它不会加载完整的浏览器,只是在自己的窗口中显示指定的 URL。 + +你可以使用此功能快速显示 Home Assistant 的仪表盘。 + +默认情况下,它会无限期存储 cookie,因此你只需登录一次。 + + + 无法加载已存储的命令设置,将重置为默认值。 + + + 如果您不配置此命令,您可能只能通过Home Assistant使用具有“动作”值的此实体,并且它将以默认设置显示,直接运行它将不会有任何动作。 + +您确定要这样做吗? + + + 请选择一个域! + + + HASS.Agent命令 + + + 看起来您正在使用替代缩放。这可能会导致HASS.Agent的某些部分显示效果不符合预期。 + +请在GitHub上报告任何无法使用的问题。谢谢! + +注意:此消息仅显示一次。 + + + 您的设备名称包含一些HA不允许的字符(仅允许字母、数字和空格)。 + +最终名称为:{0} + +您想使用该版本吗? + + + 未找到键 + + + 缺少括号,请用[ ]将所有键的首尾括起来 + + + 解析键时出错,请查看日志以获取更多信息。 + + + 您的输入语言 '{0}' 已知会与默认的CTRL-ALT-Q热键冲突。请设置您自己的热键。 + + + 您的输入语言 '{0}' 未知,可能会与默认的CTRL-ALT-Q热键冲突。请确认一下。如果冲突,请考虑在GitHub上开一个问题,以便将其添加到列表中。 + + + 左括号 ('[') 的数量与右括号 (']') 的数量不对应! ({0} 个左括号对应 {1} 个右括号) + + + &隐藏 + + + 浏览器名称 + + + 浏览器二进制文件 + + + 额外的启动参数 + + + 自定义执行器二进制文件 + + + 提示:双击以浏览 + + + &测试 + + + + + + 断开连接宽限期 + + + 此页面包含常规配置设置,更多设置可浏览左侧的标签页。 + + + 设备名称 + + + 界面语言 + + + 提示:双击此字段以浏览 + + + 客户端证书 + + + 使用自动客户端证书选择 + + + &测试连接 + + + &API令牌 + + + 服务器URI + + + &清除 + + + 使用全局热键是调出快速操作的便捷方式。 + +这样,无论您在计算机上做什么,都可以随时与Home Assistant进行交互. + + + &启用快速操作热键 + + + &热键组合 + + + &端口 + + + 执行端口预留 + + + &启用本地API + + + 为了能够监听请求,HASS.Agent需要预留其端口并在防火墙中打开该端口。您可以使用此按钮为您完成此操作。 + + + 图像缓存位置 + + + + + + 一些项目(如通知中显示的图像)必须临时存储在本地。您可以 +配置它们在HASS.Agent删除之前应保留的天数。 + +输入 '0' 以永久保留它们。 + + + 保留图像时长 + + + 保留音频时长 + + + 清除音频缓存 + + + 音频缓存位置 + + + 清除WebView缓存 + + + WebView缓存位置 + + + 每隔一段时间清除缓存 + + + 扩展日志记录提供更详细和深入的日志记录, +以防默认日志记录不足。请注意,启用此功能可能会导致 +日志文件变大,仅在您怀疑HASS.Agent本身有问题或开发人员 +要求时使用。 + + + &启用扩展日志记录 + + + &打开日志文件夹 + + + 媒体播放器文档 + + + &启用媒体播放器功能 + + + 提示:双击这些字段以浏览 + + + 客户端证书 + + + 根证书 + + + 使用保留标志 + + + &允许不受信任的证书 + + + &清除配置 + + + (不确定时保留默认值) + + + 发现前缀 + + + &TLS + + + 密码 + + + 用户名 + + + 端口 + + + 代理IP地址或主机名 + + + (留空以自动生成) + + + 客户端ID + + + 通知文档 + + + &接受通知 + + + &忽略图像的证书错误 + + + 本地API已禁用,但媒体播放器需要它才能正常工作。 + + + 服务状态: + + + &启动服务 + + + &禁用服务 + + + &停止服务 + + + &启用服务 + + + &重新安装服务 + + + 如果您不配置服务,它将不会执行任何操作。但是,您也可以决定禁用它。 +安装程序将保留已禁用的服务(如果您删除服务,安装程序将重新安装它)。 + + + 如果服务无法正常工作,您可以尝试重新安装它。 +您的配置和实体不会被删除。 + + + 打开服务日志文件夹 + + + 如果重新安装后服务仍然失败,请开一个问题并发送最新日志的内容。 + + + HASS.Agent可以通过在您的用户配置文件注册表中创建一个条目来在您登录时启动。 + +由于HASS.Agent是基于用户的,如果您想为其他用户启动它,只需在那里安装并配置HASS.Agent。 + + + &启用登录时启动 + + + 登录时启动状态: + + + 控制托盘图标右键单击时的行为。 + + + 显示默认菜单 + + + 显示WebView + + + &WebView URL(例如,您的Home Assistant仪表盘URL) + + + 大小(像素) + + + 显示预览 + + + &在后台保持页面加载 + + + (这会使用额外的资源,但会减少加载时间。) + + + 通知我有关测试版发布的信息 + + + 当有新更新可用时,HASS.Agent可以下载安装程序并为您启动它。 + +下载文件的证书将在运行前进行检查,您仍然可以查看发布说明并手动批准更新。 + + + 自动下载未来更新 + + + 如果启用,HASS.Agent会在后台检查更新。 + +如果发现新更新,您将收到推送通知,告知您有新版本可供安装。 + + + 有新发布时通知我 + + + 欢迎使用HASS.Agent!看起来这是您第一次启动该代理。 + +为了帮助您进行首次设置,请继续执行以下配置步骤, +或者,您也可以点击“关闭”。 + + + 设备名称用于在Home Assistant上标识您的机器,它也用作您的命令和传感器的建议前缀。 + + + 设备名称 + + + 界面语言 + + + 是的,在系统登录时启动HASS.Agent + + + HASS.Agent可以随系统启动,这样您的设备和Home Assistant之间的任何传感器和数据传输都可以在您登录后立即开始。 + +此设置可以在以后的HASS.Agent配置窗口中随时更改。 + + + 正在获取当前状态,请稍候.. + + + 注意:5115是默认端口,只有在您在Home Assistant中更改了它时才需要更改。 + + + 是的,在端口上启用本地API + + + HASS.Agent有自己的内部API,因此Home Assistant可以发送请求(如通知或文本转语音)。 + +您是否要启用它? + + + 启用通知 + + + 启用媒体播放器和文本转语音(TTS) + + + 您可以选择要启用的模块。它们需要HA集成,但不用担心,下一页将为您提供有关如何设置它们的更多信息。 + + + 要使用通知,您需要在Home Assistant中安装并配置HASS.Agent集成。 + +使用HACS进行此操作非常简单,但您也可以手动安装。请访问以下链接获取更多信息。 + + + HASS.Agent - 媒体播放器GitHub页面 + + + 媒体播放器也是如此,此集成允许您将设备作为媒体播放器实体进行控制,查看正在播放的内容并发送文本转语音。 + + + API令牌 + + + 服务器URI(这样应该没问题) + + + 测试连接 + + + 提示:专业设置可以在配置窗口中找到。 + + + &TLS + + + 发现前缀 + + + (不确定时保留默认值) + + + 提示:专业设置可以在配置窗口中找到。 + + + &热键组合 + + + 使用全局热键是调出快速操作的便捷方式。 + +这样,无论您在计算机上做什么,都可以随时与Home Assistant进行交互。 + + + + &清除 + + + 是的,有新更新时通知我 + + + 是的,为我下载并启动安装程序 + + + HASS.Agent GitHub页面 + + + 低完整性 + + + &移除 + + + &修改 + + + &添加新项 + + + &发送并激活命令 + + + 命令已存储! + + + &应用 + + + 认证ID + + + 认证 + + + 与服务连接 + + + 正在连接卫星服务,请稍候.. + + + 获取配置 + + + (留空以自动生成) + + + 客户端ID + + + 提示:双击这些字段以浏览 + + + 客户端证书 + + + 根证书 + + + 使用保留标志 + + + &允许不受信任的证书 + + + &清除配置 + + + (不确定时保留默认值) + + + 命令和传感器通过MQTT发送。请提供您的服务器凭据。如果您使用的是HA插件, +您可能可以使用预设地址。 + + + 发现前缀 + + + &TLS + + + 密码 + + + 用户名 + + + 端口 + + + 代理IP地址或主机名 + + + &发送并激活配置 + + + 从HASS.Agent复制 + + + 配置已存储! + + + 状态 + + + 正在查询.. + + + 刷新 + + + &移除 + + + &添加新项 + + + &修改 + + + &发送并激活传感器 + + + 传感器已存储! + + + 请稍候,任务正在执行中.. + + + 创建API端口绑定 + + + 设置防火墙规则 + + + 请稍候,一些更新后任务正在执行中.. + + + 配置卫星服务 + + + 创建API端口绑定 + + + 请等待HASS.Agent重新启动.. + + + 等待上一个实例关闭.. + + + 重新启动HASS.Agent + + + 请等待卫星服务重新安装.. + + + 移除卫星服务 + + + 安装卫星服务 + + + HASS.Agent重新安装卫星服务 + + + 请等待卫星服务配置完成.. + + + 启用卫星服务 + + + HASS.Agent配置卫星服务 + + + &关闭 + + + 这是您可以发布动作命令的MQTT主题: + + + 复制到剪贴板 + + + 帮助和示例 + + + MQTT动作主题 + + + &保存 + + + 拖动并调整此窗口的大小以设置WebView命令的大小和位置。 + + + &URL + + + 大小 + + + 位置 + + + 显示窗口的标题栏 + + + &始终在屏幕中央显示 + + + 将窗口设置为“始终置顶” + + + 提示:按ESC键关闭WebView。 + + + WebView配置 + + + &移除 + + + &修改 + + + &添加新项 + + + &存储并激活命令 + + + 低完整性 + + + 动作 + + + 命令配置 + + + &存储命令 + + + &配置 + + + &名称 + + + 描述 + + + &以“低完整性”运行 + + + 这是什么? + + + 服务 + + + 代理 + + + 配置命令参数 + + + 命令 + + + 正在检索实体,请稍候.. + + + 快速操作 + + + &存储快速操作 + + + &添加新项 + + + &修改 + + + &移除 + + + &预览 + + + 热键已启用 + + + 快速操作配置 + + + &存储快速操作 + + + &实体 + + + 期望动作 + + + &描述 + + + 正在检索实体,请稍候.. + + + &热键组合 + + + (可选,将代替实体名称使用) + + + 快速操作 + + + &移除 + + + &修改 + + + &添加新项 + + + &存储并激活传感器 + + + 刷新 + + + &存储传感器 + + + 所选类型 + + + &名称 + + + &每 + + + + + + 描述 + + + 代理 + + + 服务 + + + 仅适用于HASS.Agent! + + + &测试 + + + 传感器 + + + 卫星服务配置 + + + &关闭 + + + 一个基于Windows的Home Assistant平台客户端。 中文汉化:WaxGourd + + + 此应用程序是开源且完全免费的,请查看所使用 +组件的项目页面以了解其各自的许可证: + + + 非常感谢这些项目的开发者们,他们慷慨地与我们 +这些普通人分享了他们的辛勤成果。 + + + 当然,也要感谢保卢斯·肖森(Paulus Shoutsen)以及 +创建并维护Home Assistant的整个开发团队!:-) + + + 最初由怀着更多爱意的人创建 + + + 或者 + + + 关于 + + + 本地API + + + 媒体播放器 + + + 系统托盘图标 + + + &关于 + + + &帮助 && 联系我们 + + + &保存配置 + + + 关闭 &不保存 + + + 配置 + + + 你想做什么? + + + &重启 + + + &隐藏 + + + &退出 + + + 退出对话框 + + + &关闭 + + + 如果您在使用HASS.Agent时遇到问题,需要对任何传感器、命令提供支持,或者需要一般支持和反馈,您可以通过以下几种方式联系我们: + + + 关于 + + + Home Assistant论坛 + + + GitHub问题 + + + 涵盖各种问题,而且其他Home Assistant用户也可以帮助您解决问题! + + + 报告错误、提出功能请求、查看最新更改等。 + + + 在设置和使用HASS.Agent方面获得帮助,报告错误或参与一般性交流! + + + 文档和使用示例 + + + 文档 + + + 帮助 + + + 管理卫星服务 + + + 控制项 + + + 卫星服务 + + + 配置 + + + &快速操作 + + + 系统状态 + + + 卫星服务: + + + MQTT: + + + 命令: + + + 传感器: + + + 快速操作: + + + Home Assistant API: + + + 本地API: + + + 检查更新 + + + &下一步 + + + &关闭 + + + &上一步 + + + HASS.Agent入门向导 + + + 有新版本可用: + + + 发布说明 + + + &忽略更新 + + + 发布页面 + + + HASS.Agent更新 + + + Web视图 + + + 默认情况下,HASS.Agent将使用您的默认浏览器打开URL。您也可以配置特定的浏览器以及启动参数,以便在私密模式下运行。 + + + 请确保您遵循以下步骤: + +- 安装HASS.Agent-Notifier和/或HASS.Agent-MediaPlayer集成 +- 重启Home Assistant +- 配置通知器和/或媒体播放器实体 +- 重启Home Assistant + + + 为了了解您配置的实体并发送快速操作,HASS.Agent使用Home Assistant的API。 + +请提供一个长期访问令牌和您的Home Assistant实例的地址。您可以在Home Assistant中点击左下角的个人资料图片,然后导航到页面底部,直到看到“创建令牌”按钮,即可获取令牌。 + + + 当有新版本可用时,HASS.Agent可以为您下载安装程序并启动它。 + +下载文件的证书将在运行前进行检查,您仍然可以查看发布说明并手动批准更新。 + + + 如果启用,HASS.Agent将在后台检查更新。 + +如果发现新版本,您将收到推送通知,告知您有新版本可供安装。 + +您是否要启用此自动更新检查? + + + 您可以将HASS.Agent配置为使用特定的解释器,如Perl或Python。使用“自定义执行器”命令来启动此执行器。 + + + 自定义执行器名称 + + + HASS.Agent将在检测到与MQTT或Home Assistant API断开连接后等待一段宽限期,然后再通知您。您可以在下面设置此宽限期的秒数。 + + + 重要提示:如果您更改此值,HASS.Agent将取消发布所有传感器和命令,并强制自身重启,以便在新设备名称下重新发布它们。您的自动化和脚本将继续正常工作。 + + + 设备名称用于在Home Assistant上识别您的机器。它还用作命令/传感器名称的前缀(可以为每个实体更改此设置)。 + + + 本地API已禁用,但媒体播放器需要它才能正常工作。 + + + 密码 + + + 用户名 + + + 端口 + + + IP地址或主机名 + + + 此页面包含常规配置设置,有关MQTT设置、命令和传感器,请浏览上面的不同选项卡。 + + + 认证ID + + + 设备名称 + + + 提示:双击这些字段可进行浏览 + + + 自定义执行器二进制文件 + + + 自定义执行器名称 + + + + + + 断开连接宽限期 + + + 版本 + + + 提示:双击以生成随机数 + + + 已存储! + + + 您可以使用卫星服务在无需登录的情况下运行传感器和命令。并非所有类型都可用,例如,“LaunchUrl”命令只能作为常规命令添加。 + + + 您提供的键码不是有效的数字! + +请确保键码字段处于焦点状态,然后按下您要模拟的键,键码应该会自动生成。 + + + HASS.Agent将对您的设备名称进行清理,以确保Home Assistant能够接受它。如果您确定您的名称可以直接被接受,可以在下面覆盖此规则。 + + + 启用设备名称清理 + + + 您已更改了设备名称。 + +现在,所有传感器和命令将被取消发布,并在HASS.Agent重启后重新发布。 + +别担心!它们将保留当前名称,因此您的自动化和脚本将继续正常工作。 + +注意:您已禁用清理功能,因此请确保您的设备名称能被Home Assistant接受。 + + + 启用状态通知 + + + HASS.Agent在模块状态更改时会发送通知,您可以在下面调整是否要接收这些通知。 + + + 尝试将API绑定到端口 {0} 时出错。 + +请确保没有其他HASS.Agent实例正在运行,并且该端口可用且已注册。 + + + 打印机 + + + 未设置URL!请通过“配置” -> “系统托盘图标”配置Web视图。 + + + 显示器睡眠 + + + 显示器唤醒 + + + 开机 + + + 关机 + + + 调暗 + + + 未知 + + + 显示器电源状态 + + + PowerShell传感器 + + + PowerShell命令或脚本 + + + 测试命令/脚本 + + + 测试成功执行,结果值: + +{0} + + + 请输入命令或脚本! + + + 测试执行失败: + +{0} + +您是否要打开日志文件夹? + + + 设置音量 + + + 请输入0 - 100之间的值作为所需的音量级别! + + + 如果您不输入音量值,则只能通过Home Assistant使用具有“操作”值的此实体。按原样运行它不会有任何效果。 + +您确定要这样做吗? + + + 最大化 + + + 最小化 + + + 正常 + + + 未知 + + + 隐藏 + + + 窗口状态 + + + 将所有显示器置于睡眠(低功耗)模式。 + + + 尝试通过模拟“向上箭头”按键来唤醒所有显示器。 + + + 将当前默认音频设备的音量设置为指定级别。 + + + 返回您当前的纬度、经度和海拔,以逗号分隔。 + +请确保Windows的位置服务已启用! + +根据您的Windows版本,此设置可以在新控制面板 -> “隐私和安全” -> “位置”中找到。 + + + 提供显示器最后一次电源状态更改的信息: + +调暗、关机、开机和未知。 + + + 返回提供的PowerShell命令或脚本的结果。 +注意:请记住,Home Assistant接受的有效负载最多为255个字符。 + +将结果转换为文本。 + + + 提供所有已安装打印机及其队列的信息。 + + + 提供进程窗口的当前状态: + +隐藏、最大化、最小化、正常和未知。 + + + 正在测试... + + + 网络摄像头进程 + + + 麦克风进程 + + + 提供当前正在使用网络摄像头的进程的名称。 + +注意:如果在卫星服务中使用,它将无法检测用户空间应用程序。 + + + 提供当前使用麦克风的进程数量 - 此外,在传感器的属性中提供进程名称。 + +注意:如果在卫星服务中使用,它将无法检测用户空间应用程序。 + + + 蓝牙设备 + + + 蓝牙低功耗设备 + + + 提供一个传感器,显示找到的蓝牙设备数量。 + +设备及其连接状态将作为属性添加。 + + + 提供一个传感器,显示找到的蓝牙低功耗设备数量。 + +设备及其连接状态将作为属性添加。 + +仅显示自上次报告以来看到的设备,即当传感器发布时,列表将清空。 + + + 服务当前已停止,无法进行配置。 + +请先启动服务,然后再进行配置。 + + + 您提供的名称包含不支持的字符,将无法正常工作。建议的版本是: + +{0} + +您是否要使用此版本? + + + 您提供的名称包含不支持的字符,将无法正常工作。建议的版本是: + +{0} + +您是否要使用此版本? + + + 为了了解您配置的实体并发送快速操作,HASS.Agent使用Home Assistant的API。 + +请提供一个长期访问令牌和您的Home Assistant实例的地址。您可以在Home Assistant中点击左下角的个人资料图片,然后导航到页面底部,直到看到“创建令牌”按钮,即可获取令牌。 + +请注意,要使用可操作通知功能,您需要提供管理员账户令牌。 + + + HASS.Agent有自己的本地API,因此Home Assistant可以发送请求(例如发送通知)。您可以在此处全局配置它,然后可以配置相关部分(目前是通知和媒体播放器)。 + +注意:新集成不需要此功能。仅在不使用MQTT时启用并使用它。 + + + 如果有问题,请确保您尝试以下步骤: + +- 安装HASS.Agent集成 +- 重启Home Assistant +- 确保HASS.Agent已激活并启用了MQTT! +- 您的设备应该会自动被检测并添加为实体 +- 可选:使用本地API手动添加它 + + + HASS.Agent可以作为Home Assistant的媒体播放器,这样您就可以查看和控制正在播放的任何媒体,并发送文本转语音。如果您启用了MQTT,您的设备将自动添加。否则,请手动配置集成以使用本地API。 + + + 本地API和MQTT均已禁用,但集成至少需要其中一个才能正常工作 + + + 命令和传感器使用MQTT,使用新集成时,通知和媒体播放器功能也使用MQTT。 + +请提供您的代理的凭据,如果您使用的是Home Assistant Mosquitto插件,您可能可以使用预设地址。 + +注意:这些设置(不包括客户端ID)也将应用于卫星服务。 + + + 启用MQTT + + + 如果未启用MQTT,命令和传感器将无法工作! + + + 如果有问题,请确保您尝试以下步骤: + +- 安装HASS.Agent集成 +- 重启Home Assistant +- 确保HASS.Agent已激活并启用了MQTT! +- 您的设备应该会自动被检测并添加为实体 +- 可选:使用本地API手动添加它 + + + HASS.Agent可以接收Home Assistant的通知, +包括文本、图像和操作。如果您启用了MQTT,您的设备将自动添加。 +否则,请手动配置集成以使用本地API。 + + + 本地API和MQTT均已禁用,但集成至少需要其中一个才能正常工作 + + + 卫星服务允许您即使在没有用户登录时也能运行传感器和命令。 +使用主窗口上的“卫星服务”按钮来管理它。 + + + 如果您想管理服务(添加命令和传感器、更改设置),可以在此处进行,也可以使用主窗口上的“卫星服务”按钮。 + + + &管理服务 + + + 鼠标左键单击时显示默认菜单 + + + 命令和传感器通过MQTT发送。通知和媒体播放器集成也会使用它们。 + +提示:如果您使用的是Home Assistant插件,您可能可以使用预设地址 - 只需提供凭据。 + + + + 启用MQTT + + + HASS.Agent集成GitHub页面 + + + 启用媒体播放器(包括文本转语音) + + + 启用通知 + + + 开发和维护这个工具(以及围绕它的一切)需要花费大量时间。像大多数开发者一样,我靠咖啡因提神 - 所以如果您能帮忙,一杯咖啡总是非常受欢迎的! + + + 还有很多可以调整的地方,所以一定要看看配置窗口! + +感谢您使用HASS.Agent,希望它对您有用!:-) + + + + HASS.Agent现在将重启以应用您的配置更改。 + + + 耶,完成了! + + + 提示:其他捐赠方式可在“关于”窗口中找到。 + + + HASS.Agent更新后处理 + + + 命令 + + + HASS.Agent团队目前不接受捐赠。 +但是,如果您喜欢这个工具,请通过为原始(LAB02 Research)开发者买一杯咖啡来支持他们: + + + HASS.Agent完全免费,并且将永远免费且无限制! + +然而,开发和维护这个工具(以及围绕它的一切,如支持和文档)需要花费大量时间。 + +像大多数开发者一样,我靠咖啡因提神 - 所以如果您能帮忙,一杯咖啡总是非常受欢迎的! + + + &关闭 + + + 我已经捐赠了,隐藏主窗口上的捐赠按钮。 + + + 捐赠 + + + 检查更新 + + + 您提供的API令牌似乎无效,请确保您选择了整个令牌(不要使用CTRL + A或双击)。有效的API密钥包含三个部分,由两个点分隔。 + +您确定要继续使用此密钥吗? + + + 您提供的URI似乎无效,有效的URI可能如下所示: +- http://homeassistant.local:8123 +- http://192.168.0.1:8123 + +您确定要继续使用此URI吗? + + + 您提供的API令牌似乎无效,请确保您选择了整个令牌(不要使用CTRL + A或双击)。有效的API密钥包含三个部分,由两个点分隔。 + +您确定要继续使用此密钥吗? + + + 您提供的URI似乎无效,有效的URI可能如下所示: +- http://homeassistant.local:8123 +- http://192.168.0.1:8123 + +您确定要继续使用此URI吗? + + + 您的Home Assistant API令牌看起来不正确。请确保您选择了整个令牌(不要使用CTRL+A或双击)。 +它应该包含三个部分(由两个点分隔)。 + +您确定要这样使用它吗? + + + 您的Home Assistant URI看起来不正确。它应该类似于'http://homeassistant.local:8123'或'https://192.168.0.1:8123'。 + +您确定要这样使用它吗? + + + 您的MQTT代理URI看起来不正确。它应该类似于'homeassistant.local'或'192.168.0.1'。 + +您确定要这样使用它吗? + + + 您的机器上未找到Microsoft的WebView2运行时。通常这由安装程序处理,但您可以手动安装。 + +您要下载运行时安装程序吗? + + + 初始化Web视图时出错!请检查您的日志并在GitHub上提交问题以获取进一步的帮助。 + + + 无法打开服务管理器 + + + 无法打开服务 + + + 配置启动模式时出错,请查看日志以获取更多信息。 + + + 设置启动模式时出错,请查看日志以获取更多信息。 + + + 超时已过期 + + + 致命错误,请查看日志以获取信息! + + + 未知原因 + + + HassAgent卫星服务已启动 + + + HassAgent已启动 + + + 所选类型 + + + 仅适用于HASS.Agent! + + + &实体类型 + + + 显示MQTT操作主题 + + + 操作 + + + 多值 + + + + + + 请提供一个0到20之间的数字! + + + 小数点后位数 + + + &四舍五入 + + + 系统从 +睡眠/休眠状态唤醒时 +强制执行操作 + + + &像安卓伴侣应用一样处理URI操作元素(打开) + + + + + + + + + 通知输入标题 + + + 通知输入文本 + + + 将指定音频设备上提供的应用程序的音量和静音状态设置为指定级别。 +命令/有效负载需要采用JSON格式。所有可能选项的示例如下: +{ + "playbackDevice": "扬声器 (THX空间音频)", + "applicationName": "Discord", + "volume": 90, + "mute": true +} + +如果未提供“playbackDevice”,HASS.Agent将使用默认设备。 +如果未提供“volume”,HASS.Agent将仅设置静音状态。 +如果未提供“mute”,HASS.Agent将取消提供的应用程序的静音状态。 + +高级选项:可以提供额外的“sessionId”以仅为应用程序的特定会话设置音量,会话ID可以从“音频会话”传感器获取: +{ + "playbackDevice":"扬声器 (THX空间音频)", + "applicationName":"Discord", + "volume":50, + "sessionid":"<传感器中的长会话ID>" +} + + + 请输入有效的JSON字符串! + + + 内部设备传感器 + + + 提供内部设备传感器的数据。 +传感器的可用性取决于设备,在某些情况下可能没有可用的传感器。 + + + 内部传感器 + + + + + + 打开/关闭所选无线电设备。无线电设备的可用性取决于安装HASS.Agent的设备。 + + + 无线电命令 + + + 无线电设备 + + + 请选择无线电设备! + + + 传感器名称中包含设备名称可能会导致从2023.8版本开始的Home Assistant出现问题。 + + + 命令名称中包含设备名称可能会导致从2023.8版本开始的Home Assistant出现问题。 + + + 更改实体名称以符合Home Assistant 2023.8的要求 + + + 出错,请查看日志以获取更多信息。 + + + 转换单值传感器时出错! + + + 转换命令时出错! + + + 转换多值传感器时出错! + + + &忽略可用性 + + + 请注意,忽略可用性将导致Home Assistant始终显示给定传感器的最后一个值,即使HASS.Agent处于离线状态也是如此。 + + + 提供当前活动虚拟桌面的ID。 + + + 活动桌面 + + + 激活提供的虚拟桌面。桌面ID可以从“活动桌面”传感器获取。 + + + 您的计算机上无法使用虚拟桌面管理。 +通常这是由于虚拟桌面管理库未更新以支持您的Windows版本。 + + + 从原始版本迁移HASS.Agent配置 + + + 由以下人员怀着热爱进行更新和维护 + + + 更要衷心感谢LAB02 Research和Sam开发了HASS.Agent的原始版本 - 没有它,就不会有现在的版本! + + + 启动卫星服务时出错! + + + 与卫星服务通信时出错! + + + 设置系统的默认音频输出。 +需要将音频设备名称作为有效负载。 + + + 音频设备名称 + + + JSON命令有效负载 + + + 音量(介于0到100之间) + + + 屏幕编号 + + + 以相机实体的形式提供屏幕截图传感器。 +屏幕编号取决于系统配置 - 从0开始。 + + + 设置系统的默认音频输入(包括默认通信设备)。 +需要将音频设备名称作为有效负载。 + + + 忽略从休眠状态唤醒后的宽限期 + + + 使用现代托盘图标 + + + 近场通信(NFC) + + + 高级设置 + + + 警告,添加以下设置(覆盖项)可能会导致传感器故障,请谨慎使用! + + + 设备类别 + + + 计量单位 + + + 状态类别 + + + 高级设置 + + + 显示/隐藏托盘图标Web视图。 +需要在“配置 -> 托盘图标”中进行配置。 + + + 触发 + + + 按下 + + + 按钮 + + + 关闭 + + \ No newline at end of file From 30ab4023ac806f1ae46a1a72e7e9b3368fcf727f Mon Sep 17 00:00:00 2001 From: waxgourd-ha Date: Fri, 30 May 2025 16:03:37 +0800 Subject: [PATCH 2/5] =?UTF-8?q?test:=20=E6=B3=A8=E9=87=8A=E6=8E=89=20pfx?= =?UTF-8?q?=20=E8=A7=A3=E7=A0=81=E5=92=8C=E7=AD=BE=E5=90=8D=E5=AE=89?= =?UTF-8?q?=E8=A3=85=E7=A8=8B=E5=BA=8F=E7=9A=84=E6=AD=A5=E9=AA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build.yml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2b020d2e..81a13702 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -130,18 +130,18 @@ jobs: run: | & "${Env:ProgramFiles(x86)}\\Inno Setup 6\\iscc.exe" InstallerScript.iss - - name: Decode the pfx - working-directory: "D:\\a\\HASS.Agent\\HASS.Agent\\src\\HASS.Agent.Installer" - run: | - $pfxBytes = [System.Convert]::FromBase64String("${{ secrets.BASE64_ENCODED_PFX }}") - $certificatePath = [IO.Path]::GetFullPath(".\\HASS.Agent.Installer.pfx") - [IO.File]::WriteAllBytes($certificatePath, $pfxBytes) - - - name: Sign the installer - working-directory: "D:\\a\\HASS.Agent\\HASS.Agent\\src\\HASS.Agent.Installer" - run: | - $certificatePassword = ConvertTo-SecureString "${{ secrets.BASE64_ENCODED_PFX_PASSWORD }}" -AsPlainText -Force - $certificate = Get-PfxCertificate -FilePath ".\\HASS.Agent.Installer.pfx" -Password $certificatePassword + # - name: Decode the pfx + # working-directory: "D:\\a\\HASS.Agent\\HASS.Agent\\src\\HASS.Agent.Installer" + # run: | + # $pfxBytes = [System.Convert]::FromBase64String("${{ secrets.BASE64_ENCODED_PFX }}") + # $certificatePath = [IO.Path]::GetFullPath(".\\HASS.Agent.Installer.pfx") + # [IO.File]::WriteAllBytes($certificatePath, $pfxBytes) + + # - name: Sign the installer + # working-directory: "D:\\a\\HASS.Agent\\HASS.Agent\\src\\HASS.Agent.Installer" + # run: | + # $certificatePassword = ConvertTo-SecureString "${{ secrets.BASE64_ENCODED_PFX_PASSWORD }}" -AsPlainText -Force + # $certificate = Get-PfxCertificate -FilePath ".\\HASS.Agent.Installer.pfx" -Password $certificatePassword Set-AuthenticodeSignature -FilePath ".\\bin\\HASS.Agent.Installer.exe" -Certificate $certificate -HashAlgorithm SHA256 -TimestampServer http://timestamp.digicert.com - name: Remove the pfx From e433de0bc75f415736286304d11e52fdfa68eebf Mon Sep 17 00:00:00 2001 From: waxgourd-ha Date: Fri, 30 May 2025 16:04:37 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20build.yml=20=E6=96=87?= =?UTF-8?q?=E4=BB=B6=EF=BC=8C=E7=BB=9F=E4=B8=80=E6=8F=8F=E8=BF=B0=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=EF=BC=8C=E8=B0=83=E6=95=B4=E5=B7=A5=E4=BD=9C=E6=B5=81?= =?UTF-8?q?=E6=AD=A5=E9=AA=A4=EF=BC=8C=E7=A1=AE=E4=BF=9D=E6=9E=84=E5=BB=BA?= =?UTF-8?q?=E5=92=8C=E5=8F=91=E5=B8=83=E8=BF=87=E7=A8=8B=E7=9A=84=E6=B8=85?= =?UTF-8?q?=E6=99=B0=E6=80=A7=E5=92=8C=E4=B8=80=E8=87=B4=E6=80=A7=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build.yml | 281 ++++++++++++++++++------------------ 1 file changed, 140 insertions(+), 141 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 81a13702..8cf87fb4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -42,19 +42,19 @@ on: workflow_dispatch: inputs: sourcebranch: - description: 'Source branch' + description: "Source branch" required: true - default: 'main' + default: "main" releasetitle: - description: 'Release name' + description: "Release name" required: true releasetag: description: "Release tag" required: true prerelease: - description: 'Is this a pre-release?' + description: "Is this a pre-release?" required: true - default: 'true' + default: "true" #push: # branches: [ "main" ] # tags: @@ -70,157 +70,156 @@ jobs: #configuration: [Debug, Release] configuration: [Release] - runs-on: windows-latest # For a list of available runner types, refer to - # https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on + runs-on: + windows-latest # For a list of available runner types, refer to + # https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on env: - Solution_Name: src/HASS.Agent.sln # Replace with your solution name, i.e. MyWpfApp.sln. + Solution_Name: src/HASS.Agent.sln # Replace with your solution name, i.e. MyWpfApp.sln. #Test_Project_Path: your-test-project-path # Replace with the path to your test project, i.e. MyWpfApp.Tests\MyWpfApp.Tests.csproj. #Wap_Project_Directory: your-wap-project-directory-name # Replace with the Wap project directory relative to the solution, i.e. MyWpfApp.Package. #Wap_Project_Path: your-wap-project-path # Replace with the path to your Wap project, i.e. MyWpf.App.Package\MyWpfApp.Package.wapproj. steps: - - name: Checkout - uses: actions/checkout@v4 - with: - ref: ${{ github.event.inputs.sourcebranch }} - - # Install the .NET Core workload - - name: Install .NET Core - uses: actions/setup-dotnet@v3 - with: - dotnet-version: 6.0.x - - # Add MSBuild to the PATH: https://github.com/microsoft/setup-msbuild - #- name: Setup MSBuild.exe - # uses: microsoft/setup-msbuild@v1.3.1 - - # Execute all unit tests in the solution - #- name: Execute unit tests - # run: dotnet test - - # Restore the application to populate the obj folder with RuntimeIdentifiers - #- name: Restore the Nuget Packages - # run: | - # nuget restore src/HASS.Agent.sln - # msbuild src/HASS.Agent.sln #/t:Restore /p:Configuration=$env:Configuration + - name: Checkout + uses: actions/checkout@v4 + with: + ref: ${{ github.event.inputs.sourcebranch }} + + # Install the .NET Core workload + - name: Install .NET Core + uses: actions/setup-dotnet@v3 + with: + dotnet-version: 6.0.x + + # Add MSBuild to the PATH: https://github.com/microsoft/setup-msbuild + #- name: Setup MSBuild.exe + # uses: microsoft/setup-msbuild@v1.3.1 + + # Execute all unit tests in the solution + #- name: Execute unit tests + # run: dotnet test + + # Restore the application to populate the obj folder with RuntimeIdentifiers + #- name: Restore the Nuget Packages + # run: | + # nuget restore src/HASS.Agent.sln + # msbuild src/HASS.Agent.sln #/t:Restore /p:Configuration=$env:Configuration #env: - # Configuration: ${{ matrix.configuration }} - - - name: Restore / Install dependencies - run: | - dotnet restore "src\\HASS.Agent\\HASS.Agent\\HASS.Agent.csproj" - dotnet restore "src\\HASS.Agent\\HASS.Agent.Satellite.Service\\HASS.Agent.Satellite.Service.csproj" - - - name: Build & Publish HASS.Agent - working-directory: "D:\\a\\HASS.Agent\\HASS.Agent\\src\\HASS.Agent\\HASS.Agent" - run: "dotnet publish -c Release -f net6.0-windows10.0.19041.0 -o bin\\Publish-x64\\Release\\ --no-self-contained -r win-x64 -p:Platform=x64" - - - name: Build & Publish HASS.Agent.Satellite.Service - working-directory: "D:\\a\\HASS.Agent\\HASS.Agent\\src\\HASS.Agent\\HASS.Agent.Satellite.Service" - run: "dotnet publish -c Release -f net6.0-windows10.0.19041.0 -o bin\\Publish-x64\\Release\\ --no-self-contained -r win-x64 -p:Platform=x64" - - - name: Compile InnoSetup Installer - Satellite Service - working-directory: "D:\\a\\HASS.Agent\\HASS.Agent\\src\\HASS.Agent.Installer" - run: | - & "${Env:ProgramFiles(x86)}\\Inno Setup 6\\iscc.exe" InstallerScript-Service.iss - - - name: Compile InnoSetup Installer - Client - working-directory: "D:\\a\\HASS.Agent\\HASS.Agent\\src\\HASS.Agent.Installer" - run: | - & "${Env:ProgramFiles(x86)}\\Inno Setup 6\\iscc.exe" InstallerScript.iss - - # - name: Decode the pfx - # working-directory: "D:\\a\\HASS.Agent\\HASS.Agent\\src\\HASS.Agent.Installer" - # run: | - # $pfxBytes = [System.Convert]::FromBase64String("${{ secrets.BASE64_ENCODED_PFX }}") - # $certificatePath = [IO.Path]::GetFullPath(".\\HASS.Agent.Installer.pfx") - # [IO.File]::WriteAllBytes($certificatePath, $pfxBytes) - - # - name: Sign the installer - # working-directory: "D:\\a\\HASS.Agent\\HASS.Agent\\src\\HASS.Agent.Installer" - # run: | - # $certificatePassword = ConvertTo-SecureString "${{ secrets.BASE64_ENCODED_PFX_PASSWORD }}" -AsPlainText -Force - # $certificate = Get-PfxCertificate -FilePath ".\\HASS.Agent.Installer.pfx" -Password $certificatePassword - Set-AuthenticodeSignature -FilePath ".\\bin\\HASS.Agent.Installer.exe" -Certificate $certificate -HashAlgorithm SHA256 -TimestampServer http://timestamp.digicert.com - - - name: Remove the pfx - working-directory: "D:\\a\\HASS.Agent\\HASS.Agent\\src\\HASS.Agent.Installer" - run: Remove-Item -path ".\\HASS.Agent.Installer.pfx" - - #Upload project artifacts: https://github.com/marketplace/actions/upload-a-build-artifact - - name: Upload build artifacts (HASS Agent) - uses: actions/upload-artifact@v4.6.0 - with: - name: HASS.Agent - path: "src\\HASS.Agent\\HASS.Agent\\bin\\Publish-x64\\Release" - - - name: Upload build artifacts (HASS Agent Satellite Service) - uses: actions/upload-artifact@v4.6.0 - with: - name: HASS.Agent.Satellite.Service - path: "src\\HASS.Agent\\HASS.Agent.Satellite.Service\\bin\\Publish-x64\\Release" - - - name: Upload build artifacts (HASS Agent Installer) - uses: actions/upload-artifact@v4.6.0 - with: - name: HASS.Agent.Installer - path: "src\\HASS.Agent.Installer\\bin\\HASS.Agent.Installer.exe" - + # Configuration: ${{ matrix.configuration }} + + - name: Restore / Install dependencies + run: | + dotnet restore "src\\HASS.Agent\\HASS.Agent\\HASS.Agent.csproj" + dotnet restore "src\\HASS.Agent\\HASS.Agent.Satellite.Service\\HASS.Agent.Satellite.Service.csproj" + + - name: Build & Publish HASS.Agent + working-directory: "D:\\a\\HASS.Agent\\HASS.Agent\\src\\HASS.Agent\\HASS.Agent" + run: "dotnet publish -c Release -f net6.0-windows10.0.19041.0 -o bin\\Publish-x64\\Release\\ --no-self-contained -r win-x64 -p:Platform=x64" + + - name: Build & Publish HASS.Agent.Satellite.Service + working-directory: "D:\\a\\HASS.Agent\\HASS.Agent\\src\\HASS.Agent\\HASS.Agent.Satellite.Service" + run: "dotnet publish -c Release -f net6.0-windows10.0.19041.0 -o bin\\Publish-x64\\Release\\ --no-self-contained -r win-x64 -p:Platform=x64" + + - name: Compile InnoSetup Installer - Satellite Service + working-directory: "D:\\a\\HASS.Agent\\HASS.Agent\\src\\HASS.Agent.Installer" + run: | + & "${Env:ProgramFiles(x86)}\\Inno Setup 6\\iscc.exe" InstallerScript-Service.iss + + - name: Compile InnoSetup Installer - Client + working-directory: "D:\\a\\HASS.Agent\\HASS.Agent\\src\\HASS.Agent.Installer" + run: | + & "${Env:ProgramFiles(x86)}\\Inno Setup 6\\iscc.exe" InstallerScript.iss + + # - name: Decode the pfx + # working-directory: "D:\\a\\HASS.Agent\\HASS.Agent\\src\\HASS.Agent.Installer" + # run: | + # $pfxBytes = [System.Convert]::FromBase64String("${{ secrets.BASE64_ENCODED_PFX }}") + # $certificatePath = [IO.Path]::GetFullPath(".\\HASS.Agent.Installer.pfx") + # [IO.File]::WriteAllBytes($certificatePath, $pfxBytes) + + # - name: Sign the installer + # working-directory: "D:\\a\\HASS.Agent\\HASS.Agent\\src\\HASS.Agent.Installer" + # run: | + # $certificatePassword = ConvertTo-SecureString "${{ secrets.BASE64_ENCODED_PFX_PASSWORD }}" -AsPlainText -Force + # $certificate = Get-PfxCertificate -FilePath ".\\HASS.Agent.Installer.pfx" -Password $certificatePassword + # Set-AuthenticodeSignature -FilePath ".\\bin\\HASS.Agent.Installer.exe" -Certificate $certificate -HashAlgorithm SHA256 -TimestampServer http://timestamp.digicert.com + + - name: Remove the pfx + working-directory: "D:\\a\\HASS.Agent\\HASS.Agent\\src\\HASS.Agent.Installer" + run: Remove-Item -path ".\\HASS.Agent.Installer.pfx" + + #Upload project artifacts: https://github.com/marketplace/actions/upload-a-build-artifact + - name: Upload build artifacts (HASS Agent) + uses: actions/upload-artifact@v4.6.0 + with: + name: HASS.Agent + path: "src\\HASS.Agent\\HASS.Agent\\bin\\Publish-x64\\Release" + + - name: Upload build artifacts (HASS Agent Satellite Service) + uses: actions/upload-artifact@v4.6.0 + with: + name: HASS.Agent.Satellite.Service + path: "src\\HASS.Agent\\HASS.Agent.Satellite.Service\\bin\\Publish-x64\\Release" + + - name: Upload build artifacts (HASS Agent Installer) + uses: actions/upload-artifact@v4.6.0 + with: + name: HASS.Agent.Installer + path: "src\\HASS.Agent.Installer\\bin\\HASS.Agent.Installer.exe" + #- name: Debugging artifact paths # run: | # Set-Location src\HASS.Agent - # Get-Childitem + # Get-Childitem - #draft a release, https://github.com/actions/create-release + #draft a release, https://github.com/actions/create-release publish: runs-on: ubuntu-latest needs: [build] permissions: contents: write steps: - - name: Create directories for Build Artifacts to download - run: | - mkdir HASS.Agent - mkdir HASS.Agent.Satellite.Service - mkdir HASS.Agent.Installer - ls -la - - - name: Download Build Artifacts (HASS Agent) - uses: actions/download-artifact@v4.1.8 - with: - name: HASS.Agent - path: HASS.Agent - - - name: Download Build Artifacts (HASS Agent Satellite Service) - uses: actions/download-artifact@v4.1.8 - with: - name: HASS.Agent.Satellite.Service - path: HASS.Agent.Satellite.Service - - - name: Download Build Artifacts (HASS Agent Installer) - uses: actions/download-artifact@v4.1.8 - with: - name: HASS.Agent.Installer - path: HASS.Agent.Installer - - - - name: Compress HASS Agent directories for manual install - run: | - cd HASS.Agent - ls -la - zip -r HASS.Agent.zip ./ - cd ../ - cd HASS.Agent.Satellite.Service - ls -la - zip -r HASS.Agent.Satellite.Service.zip ./ - - - name: Create Draft Release and Upload Build Artifacts - uses: ncipollo/release-action@v1.10.0 - with: - name: ${{ github.event.inputs.releasetitle }} - draft: true - prerelease: ${{ github.event.inputs.prerelease }} - tag: ${{ github.event.inputs.releasetag }} - artifacts: - HASS.Agent/HASS.Agent.zip,HASS.Agent.Satellite.Service/HASS.Agent.Satellite.Service.zip,HASS.Agent.Installer/HASS.Agent.Installer.exe + - name: Create directories for Build Artifacts to download + run: | + mkdir HASS.Agent + mkdir HASS.Agent.Satellite.Service + mkdir HASS.Agent.Installer + ls -la + + - name: Download Build Artifacts (HASS Agent) + uses: actions/download-artifact@v4.1.8 + with: + name: HASS.Agent + path: HASS.Agent + + - name: Download Build Artifacts (HASS Agent Satellite Service) + uses: actions/download-artifact@v4.1.8 + with: + name: HASS.Agent.Satellite.Service + path: HASS.Agent.Satellite.Service + + - name: Download Build Artifacts (HASS Agent Installer) + uses: actions/download-artifact@v4.1.8 + with: + name: HASS.Agent.Installer + path: HASS.Agent.Installer + + - name: Compress HASS Agent directories for manual install + run: | + cd HASS.Agent + ls -la + zip -r HASS.Agent.zip ./ + cd ../ + cd HASS.Agent.Satellite.Service + ls -la + zip -r HASS.Agent.Satellite.Service.zip ./ + + - name: Create Draft Release and Upload Build Artifacts + uses: ncipollo/release-action@v1.10.0 + with: + name: ${{ github.event.inputs.releasetitle }} + draft: true + prerelease: ${{ github.event.inputs.prerelease }} + tag: ${{ github.event.inputs.releasetag }} + artifacts: HASS.Agent/HASS.Agent.zip,HASS.Agent.Satellite.Service/HASS.Agent.Satellite.Service.zip,HASS.Agent.Installer/HASS.Agent.Installer.exe From 30d26727b5162389247f598a5510269b485cc5da Mon Sep 17 00:00:00 2001 From: waxgourd-ha Date: Fri, 30 May 2025 16:13:12 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20build.yml=20=E6=96=87?= =?UTF-8?q?=E4=BB=B6=EF=BC=8C=E6=81=A2=E5=A4=8D=20pfx=20=E8=A7=A3=E7=A0=81?= =?UTF-8?q?=E5=92=8C=E7=AD=BE=E5=90=8D=E5=AE=89=E8=A3=85=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E7=9A=84=E6=AD=A5=E9=AA=A4=EF=BC=8C=E7=A1=AE=E4=BF=9D=E5=AE=89?= =?UTF-8?q?=E8=A3=85=E7=A8=8B=E5=BA=8F=E7=9A=84=E6=AD=A3=E7=A1=AE=E6=80=A7?= =?UTF-8?q?=E5=92=8C=E5=AE=89=E5=85=A8=E6=80=A7=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build.yml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8cf87fb4..36d73009 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -131,19 +131,19 @@ jobs: run: | & "${Env:ProgramFiles(x86)}\\Inno Setup 6\\iscc.exe" InstallerScript.iss - # - name: Decode the pfx - # working-directory: "D:\\a\\HASS.Agent\\HASS.Agent\\src\\HASS.Agent.Installer" - # run: | - # $pfxBytes = [System.Convert]::FromBase64String("${{ secrets.BASE64_ENCODED_PFX }}") - # $certificatePath = [IO.Path]::GetFullPath(".\\HASS.Agent.Installer.pfx") - # [IO.File]::WriteAllBytes($certificatePath, $pfxBytes) - - # - name: Sign the installer - # working-directory: "D:\\a\\HASS.Agent\\HASS.Agent\\src\\HASS.Agent.Installer" - # run: | - # $certificatePassword = ConvertTo-SecureString "${{ secrets.BASE64_ENCODED_PFX_PASSWORD }}" -AsPlainText -Force - # $certificate = Get-PfxCertificate -FilePath ".\\HASS.Agent.Installer.pfx" -Password $certificatePassword - # Set-AuthenticodeSignature -FilePath ".\\bin\\HASS.Agent.Installer.exe" -Certificate $certificate -HashAlgorithm SHA256 -TimestampServer http://timestamp.digicert.com + - name: Decode the pfx + working-directory: "D:\\a\\HASS.Agent\\HASS.Agent\\src\\HASS.Agent.Installer" + run: | + $pfxBytes = [System.Convert]::FromBase64String("${{ secrets.BASE64_ENCODED_PFX }}") + $certificatePath = [IO.Path]::GetFullPath(".\\HASS.Agent.Installer.pfx") + [IO.File]::WriteAllBytes($certificatePath, $pfxBytes) + + - name: Sign the installer + working-directory: "D:\\a\\HASS.Agent\\HASS.Agent\\src\\HASS.Agent.Installer" + run: | + $certificatePassword = ConvertTo-SecureString "${{ secrets.BASE64_ENCODED_PFX_PASSWORD }}" -AsPlainText -Force + # $certificate = Get-PfxCertificate -FilePath ".\\HASS.Agent.Installer.pfx" -Password $certificatePassword + # Set-AuthenticodeSignature -FilePath ".\\bin\\HASS.Agent.Installer.exe" -Certificate $certificate -HashAlgorithm SHA256 -TimestampServer http://timestamp.digicert.com - name: Remove the pfx working-directory: "D:\\a\\HASS.Agent\\HASS.Agent\\src\\HASS.Agent.Installer" From 8d5af679569d5fc18c9e5b915e301dee35fa16b7 Mon Sep 17 00:00:00 2001 From: waxgourd-ha Date: Fri, 30 May 2025 16:48:22 +0800 Subject: [PATCH 5/5] =?UTF-8?q?test:=20=E6=81=A2=E5=A4=8D=20pfx=20?= =?UTF-8?q?=E8=A7=A3=E7=A0=81=E5=92=8C=E7=AD=BE=E5=90=8D=E5=AE=89=E8=A3=85?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E7=9A=84=E6=AD=A5=E9=AA=A4=EF=BC=8C=E7=A1=AE?= =?UTF-8?q?=E4=BF=9D=E5=AE=89=E8=A3=85=E7=A8=8B=E5=BA=8F=E7=9A=84=E6=AD=A3?= =?UTF-8?q?=E7=A1=AE=E6=80=A7=E5=92=8C=E5=AE=89=E5=85=A8=E6=80=A7=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 36d73009..3c2fdc38 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -142,8 +142,8 @@ jobs: working-directory: "D:\\a\\HASS.Agent\\HASS.Agent\\src\\HASS.Agent.Installer" run: | $certificatePassword = ConvertTo-SecureString "${{ secrets.BASE64_ENCODED_PFX_PASSWORD }}" -AsPlainText -Force - # $certificate = Get-PfxCertificate -FilePath ".\\HASS.Agent.Installer.pfx" -Password $certificatePassword - # Set-AuthenticodeSignature -FilePath ".\\bin\\HASS.Agent.Installer.exe" -Certificate $certificate -HashAlgorithm SHA256 -TimestampServer http://timestamp.digicert.com + $certificate = Get-PfxCertificate -FilePath ".\\HASS.Agent.Installer.pfx" -Password $certificatePassword + Set-AuthenticodeSignature -FilePath ".\\bin\\HASS.Agent.Installer.exe" -Certificate $certificate -HashAlgorithm SHA256 -TimestampServer http://timestamp.digicert.com - name: Remove the pfx working-directory: "D:\\a\\HASS.Agent\\HASS.Agent\\src\\HASS.Agent.Installer"