aboutsummaryrefslogtreecommitdiff
path: root/Handlers/HomeAssistantHandler.cs
blob: bf914c3f8e2a241bfedc5ca5b1715768af1309f5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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";
    }
}