using Evergreen.Health.Application.Health.Devices.Contracts; using Evergreen.Health.Application.Health.Integrations.HomeAssistant; using Evergreen.Health.Application.Health.Models; using Evergreen.Health.Application.Health.Scenes; using Microsoft.Extensions.Options; namespace Evergreen.Health.Application.Health.Devices.Dehumidifier; public sealed class DehumidifierModule : HealthDeviceModule { private readonly HomeAssistantEntityOptions _entities; public DehumidifierModule(DeviceActionRunner runner, IOptions options) : base(runner) { _entities = options.Value.Entities; Parameters = [ new("humidity", PrimaryEntityId, value => new("设置目标湿度", PrimaryEntityId, "humidifier", "set_humidity", new Dictionary { ["humidity"] = DeviceValues.Integer(value, 40, 70, "目标湿度") }), "目标湿度", 40, 70), new("fan_level", _entities.DehumidifierFanLevel, value => new("设置风速", _entities.DehumidifierFanLevel, "select", "select_option", new Dictionary { ["option"] = DeviceValues.Choice(DeviceValues.Text(value).Replace('档', '挡'), ["1挡", "2挡", "3挡"], "风速档位") }), "风速档位", Options: ["1挡", "2挡", "3挡"]), new("dehumidifier_mode", PrimaryEntityId, value => new("设置除湿模式", PrimaryEntityId, "humidifier", "set_mode", new Dictionary { ["mode"] = DeviceValues.Choice(value, ["睡眠", "智能"], "除湿模式") }), "除湿模式", Options: ["睡眠", "智能"]), DeviceValues.Switch("uv", _entities.DehumidifierUv, "switch", "UV 杀菌") ]; } public override string Key => "dehumidifier"; public override string Category => nameof(HealthDeviceCategory.EnvironmentControl); public override string DisplayName => "除湿机"; public override string PrimaryEntityId => _entities.Dehumidifier; public override IReadOnlyList Parameters { get; } internal DeviceCommand BuildStartCommand() => new("开启除湿机", PrimaryEntityId, "humidifier", "turn_on"); public override async Task ExecuteSleepAsync(DeviceSceneContext context, PersonalizedSceneConfig config, string constitutionCode, CancellationToken cancellationToken) { await context.RunAsync(BuildStartCommand(), cancellationToken); await context.RunAsync(BuildParameterCommand("humidity", config.TargetHumidity), cancellationToken); await context.RunAsync(BuildParameterCommand("dehumidifier_mode", config.DehumidifierMode), cancellationToken); await context.RunAsync(BuildParameterCommand("fan_level", config.FanLevel), cancellationToken); await context.RunAsync(BuildParameterCommand("uv", config.EnableUv), cancellationToken); } public override IEnumerable GetShutdownCommands() => [new("关闭除湿机", PrimaryEntityId, "humidifier", "turn_off", ExpectedState: "off")]; public override HomeAssistantScenePresetItem? BuildPreview(PersonalizedSceneConfig config, string constitutionCode) => string.IsNullOrWhiteSpace(PrimaryEntityId) ? null : Preview("开启恒湿舒睡", $"目标湿度 {config.TargetHumidity}% · {config.DehumidifierMode}模式 · 风速{config.FanLevel} · UV{(config.EnableUv ? "开" : "关")}", new() { ["target_humidity"] = $"{config.TargetHumidity}%", ["mode"] = config.DehumidifierMode, ["fan_level"] = config.FanLevel, ["uv"] = config.EnableUv ? "开启" : "关闭" }); }