From e8e3c4cba8ffa0056e984c113cfbb75319e00022 Mon Sep 17 00:00:00 2001 From: Jake Mannens Date: Fri, 20 Sep 2024 16:21:09 +1000 Subject: v0.4-rc1 --- Handlers/HomeAssistantHandler.cs | 54 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 Handlers/HomeAssistantHandler.cs (limited to 'Handlers/HomeAssistantHandler.cs') diff --git a/Handlers/HomeAssistantHandler.cs b/Handlers/HomeAssistantHandler.cs new file mode 100644 index 0000000..bf914c3 --- /dev/null +++ b/Handlers/HomeAssistantHandler.cs @@ -0,0 +1,54 @@ +using System.Net.Http.Headers; + +namespace PagerParser.Handlers; + +[PagerHandler] +public class HomeAssistantHandler : IPagerHandler { + private List haConfigs = new(); + + private ILogger logger; + + private HttpClient httpClient; + + public async Task HandleMessageAsync(PagerMessage message, ParsedPagerMessage? pm) { + // Generate an event via the API on each configured Home Assistant server + foreach(var ha in haConfigs) { + var url = $"https://{ha.Host}/api/events/{ha.EventType}"; + httpClient.DefaultRequestHeaders.Authorization = + new AuthenticationHeaderValue("Bearer", ha.ApiKey); + await httpClient.PostAsJsonAsync( + url, + message); + } + } + + public void OnConfiguring( + ILogger logger, + IConfiguration config, + IServiceProvider serviceProvider) { + + this.logger = logger; + + config.Bind("PagerParser:HomeAssistant:Servers", haConfigs); + if(haConfigs is null) + return; + + logger.LogInformation($"{haConfigs.Count()} Home Assistant servers configured"); + } + + public Task StartAsync(CancellationToken ct) { + httpClient = new(); + return Task.CompletedTask; + } + + public Task StopAsync(CancellationToken ct) { + httpClient?.Dispose(); + return Task.CompletedTask; + } + + public class HomeAssistantConfig { + public string Host { get; set; } + public string ApiKey { get; set; } + public string EventType { get; set; } = "cfa_pager_message"; + } +} -- cgit v1.3