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";
}
}
|