73 lines
2.4 KiB
C#
73 lines
2.4 KiB
C#
using System;
|
|
using System.Linq;
|
|
using System.Reactive.Linq;
|
|
using System.Text.Json;
|
|
using System.Text.Json.Serialization;
|
|
|
|
using HomeAssistantGenerated;
|
|
|
|
using NetDaemon.AppModel;
|
|
using NetDaemon.HassModel;
|
|
using NetDaemon.HassModel.Entities;
|
|
|
|
|
|
namespace NetDaemonConfig.Apps.Timer.Setup
|
|
{
|
|
public record TimerFinishedEventData
|
|
{
|
|
[JsonPropertyName("entity_id")]
|
|
public string? entity_id { get; init; }
|
|
}
|
|
|
|
[NetDaemonApp]
|
|
public class Setup
|
|
{
|
|
private readonly string _timerTarget = "media_player.music_player_daemon";
|
|
|
|
private readonly string _timerTtsTarget = "tts.piper";
|
|
private readonly string _timerTtsMessage = "A set timer has finished.";
|
|
|
|
// TODO: private readonly string timerMediaLocation = "/path/to/file.mp3";
|
|
|
|
public Setup(IHaContext ha, Services services, Entities entities)
|
|
{
|
|
ha.Events
|
|
.Where(x => x.EventType == "timer.finished")
|
|
.Subscribe(x =>
|
|
{
|
|
if (x.DataElement.HasValue)
|
|
{
|
|
var data = JsonSerializer.Deserialize<TimerFinishedEventData>(x.DataElement.Value);
|
|
|
|
if (data?.entity_id?.StartsWith("timer.assist_timer") ?? false)
|
|
{
|
|
var timer = entities.Timer
|
|
.EnumerateAll()
|
|
.ToLookup((timer) => timer.EntityId,
|
|
(timer) => timer)[data.entity_id].First();
|
|
|
|
if (timer is not null)
|
|
{
|
|
services.Tts.Speak(
|
|
cache: true,
|
|
mediaPlayerEntityId: _timerTarget,
|
|
target: new ServiceTarget { EntityIds = [_timerTtsTarget] },
|
|
message: _timerTtsMessage);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
/*
|
|
entities.Timer.EnumerateAll()
|
|
.Where((timer) => timer.EntityId.StartsWith("timer.assist_timer"))
|
|
.StateChanges()
|
|
.Subscribe((timer) =>
|
|
{
|
|
if (timer.Old?.State != "idle" && timer.New?.State == "idle")
|
|
{}
|
|
});
|
|
*/
|
|
}
|
|
}
|
|
}
|