aboutsummaryrefslogtreecommitdiff
path: root/Handlers/HomeAssistantHandler.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Handlers/HomeAssistantHandler.cs')
-rw-r--r--Handlers/HomeAssistantHandler.cs54
1 files changed, 54 insertions, 0 deletions
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<HomeAssistantConfig> 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";
+ }
+}