53 lines
3.5 KiB
C#
53 lines
3.5 KiB
C#
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<HomeAssistantOptions> options) : base(runner)
|
|
{
|
|
_entities = options.Value.Entities;
|
|
Parameters =
|
|
[
|
|
new("humidity", PrimaryEntityId, value => new("设置目标湿度", PrimaryEntityId, "humidifier", "set_humidity",
|
|
new Dictionary<string, object?> { ["humidity"] = DeviceValues.Integer(value, 40, 70, "目标湿度") }), "目标湿度", 40, 70),
|
|
new("fan_level", _entities.DehumidifierFanLevel, value => new("设置风速", _entities.DehumidifierFanLevel, "select", "select_option",
|
|
new Dictionary<string, object?> { ["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<string, object?> { ["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<DeviceParameterDefinition> Parameters { get; }
|
|
|
|
public override async Task ExecuteSleepAsync(DeviceSceneContext context, PersonalizedSceneConfig config,
|
|
string constitutionCode, CancellationToken cancellationToken)
|
|
{
|
|
await context.RunAsync(new("开启除湿机", PrimaryEntityId, "humidifier", "turn_on"), 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<DeviceCommand> 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 ? "开启" : "关闭" });
|
|
}
|