WIP
This commit is contained in:
@@ -1,3 +1,5 @@
|
|||||||
|
using System.Net.Http.Headers;
|
||||||
|
using System.Text;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
var builder = WebApplication.CreateBuilder(args);
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
@@ -5,75 +7,120 @@ var builder = WebApplication.CreateBuilder(args);
|
|||||||
// Add JSON serialization services
|
// Add JSON serialization services
|
||||||
builder.Services.ConfigureHttpJsonOptions(options =>
|
builder.Services.ConfigureHttpJsonOptions(options =>
|
||||||
{
|
{
|
||||||
options.SerializerOptions.PropertyNameCaseInsensitive = true;
|
options.SerializerOptions.PropertyNameCaseInsensitive = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
var app = builder.Build();
|
var app = builder.Build();
|
||||||
|
|
||||||
app.MapPost(
|
app.MapPost(
|
||||||
"/high_power_alert",
|
"/high_power_alert",
|
||||||
async (AlertBody body) =>
|
async (AlertBody body) =>
|
||||||
{
|
{
|
||||||
Console.WriteLine("high power alert was received.");
|
Console.WriteLine("high power alert was received.");
|
||||||
using var client = new HttpClient();
|
using var client = new HttpClient();
|
||||||
var heatPumpState = await client.GetFromJsonAsync<HeatPumpStatus>("http://192.168.1.121/control");
|
var heatPumpState = await client.GetFromJsonAsync<HeatPumpStatus>(
|
||||||
var message = "";
|
"http://192.168.1.121/control"
|
||||||
Console.WriteLine(heatPumpState.heatpump.power);
|
);
|
||||||
switch (body.Status)
|
var message = "";
|
||||||
{
|
Console.WriteLine(heatPumpState.heatpump.power);
|
||||||
case "firing":
|
switch (body.Status)
|
||||||
Console.WriteLine("Peak too high. Shutting down heat pump.");
|
{
|
||||||
message = "@everyone peak is too high. Disabling heat pump. 🥶";
|
case "firing":
|
||||||
if (heatPumpState.heatpump.power == "on")
|
Console.WriteLine("Peak too high. Shutting down heat pump.");
|
||||||
{
|
message = "@everyone peak is too high. Disabling heat pump. 🥶";
|
||||||
await client.GetAsync(
|
if (heatPumpState.heatpump.power == "on")
|
||||||
"http://192.168.1.121/control?cmd=heatpump&set_power_mode=off"
|
{
|
||||||
);
|
await client.GetAsync(
|
||||||
}
|
"http://192.168.1.121/control?cmd=heatpump&set_power_mode=off"
|
||||||
else
|
);
|
||||||
{
|
}
|
||||||
message = "@everyone high power alert, but heat pump could not be disabled because state was not 'ON'";
|
else
|
||||||
}
|
{
|
||||||
await client.PostAsJsonAsync<DiscordMessage>(
|
message =
|
||||||
"https://discord.com/api/webhooks/1455072237207158981/C9qvSIGMZVc60VwpZizxqKigyzvA182RDSdt9k8qtWTq-fBgzlJHh53wAYIqYkGNkBM3",
|
"@everyone high power alert, but heat pump could not be disabled because state was not 'ON'";
|
||||||
new DiscordMessage(message, "willemBot")
|
}
|
||||||
);
|
await client.PostAsJsonAsync<DiscordMessage>(
|
||||||
break;
|
"https://discord.com/api/webhooks/1455072237207158981/C9qvSIGMZVc60VwpZizxqKigyzvA182RDSdt9k8qtWTq-fBgzlJHh53wAYIqYkGNkBM3",
|
||||||
case "resolved":
|
new DiscordMessage(message, "willemBot")
|
||||||
Console.WriteLine("Peak acceptable. Re enabling heat pump. 🌶️");
|
);
|
||||||
message = "Re enabled heat pump.";
|
break;
|
||||||
if (heatPumpState.heatpump.power == "off")
|
case "resolved":
|
||||||
{
|
Console.WriteLine("Peak acceptable. Re enabling heat pump. 🌶️");
|
||||||
await client.GetAsync(
|
message = "Re enabled heat pump.";
|
||||||
"http://192.168.1.121/control?cmd=heatpump&set_power_mode=on"
|
if (heatPumpState.heatpump.power == "off")
|
||||||
);
|
{
|
||||||
}
|
await client.GetAsync(
|
||||||
else {
|
"http://192.168.1.121/control?cmd=heatpump&set_power_mode=on"
|
||||||
message = "@everyone Heat pump could not be re enabled because state was not 'ON'";
|
);
|
||||||
}
|
}
|
||||||
await client.PostAsJsonAsync<DiscordMessage>(
|
else
|
||||||
"https://discord.com/api/webhooks/1455072237207158981/C9qvSIGMZVc60VwpZizxqKigyzvA182RDSdt9k8qtWTq-fBgzlJHh53wAYIqYkGNkBM3",
|
{
|
||||||
new DiscordMessage(message, "willemBot")
|
message =
|
||||||
);
|
"@everyone Heat pump could not be re enabled because state was not 'ON'";
|
||||||
break;
|
}
|
||||||
default:
|
await client.PostAsJsonAsync<DiscordMessage>(
|
||||||
Console.WriteLine("Unknown body type");
|
"https://discord.com/api/webhooks/1455072237207158981/C9qvSIGMZVc60VwpZizxqKigyzvA182RDSdt9k8qtWTq-fBgzlJHh53wAYIqYkGNkBM3",
|
||||||
break;
|
new DiscordMessage(message, "willemBot")
|
||||||
}
|
);
|
||||||
return new OkResult();
|
break;
|
||||||
}
|
default:
|
||||||
)
|
Console.WriteLine("Unknown body type");
|
||||||
.WithName("HighPowerAlert");
|
break;
|
||||||
|
}
|
||||||
|
return new OkResult();
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.WithName("HighPowerAlert");
|
||||||
|
|
||||||
app.MapPost(
|
app.MapPost(
|
||||||
"/low_power_alert",
|
"/low_power_alert",
|
||||||
() =>
|
() =>
|
||||||
{
|
{
|
||||||
Console.WriteLine("low power alert was received.");
|
Console.WriteLine("low power alert was received.");
|
||||||
return new OkResult();
|
return new OkResult();
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
.WithName("Low Power Alert");
|
.WithName("Low Power Alert");
|
||||||
|
|
||||||
|
// Example: querying an InfluxDB v2 instance via its Flux query API.
|
||||||
|
app.MapGet(
|
||||||
|
"/example/influx_query",
|
||||||
|
async () =>
|
||||||
|
{
|
||||||
|
var token = "0kycl3gLT7kWBzfrNcvkmXVDUUjdWUwKnTmBZJfS_dHrE2EiJYv_HthDLc92Xsdaui3FxRsm7zndyyS33Mh9YA==";
|
||||||
|
var org = "homeassistant";
|
||||||
|
|
||||||
|
using var client = new HttpClient();
|
||||||
|
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
|
||||||
|
"Token",
|
||||||
|
token
|
||||||
|
);
|
||||||
|
client.DefaultRequestHeaders.Accept.Add(
|
||||||
|
new MediaTypeWithQualityHeaderValue("application/csv")
|
||||||
|
);
|
||||||
|
|
||||||
|
var flux = """
|
||||||
|
from(bucket: "homeassistant")
|
||||||
|
|> range(start: -1h)
|
||||||
|
|> filter(fn: (r) => r._measurement == "W")
|
||||||
|
|> filter(fn: (r) => r.domain == "sensor")
|
||||||
|
|> filter(fn: (r) => r.entity_id == "p1_meter_power")
|
||||||
|
|> filter(fn: (r) => r._field == "value")
|
||||||
|
|> aggregateWindow(every: 5m, fn: mean, createEmpty: false)
|
||||||
|
|> yield(name: "mean")
|
||||||
|
""";
|
||||||
|
var content = new StringContent(flux, Encoding.UTF8, "application/vnd.flux");
|
||||||
|
|
||||||
|
var response = await client.PostAsync(
|
||||||
|
$"http://influxdb.pladijs/api/v2/query?org={org}",
|
||||||
|
content
|
||||||
|
);
|
||||||
|
var result = await response.Content.ReadAsStringAsync();
|
||||||
|
|
||||||
|
return Results.Content(result, "text/csv");
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.WithName("ExampleInfluxQuery");
|
||||||
|
|
||||||
app.Run();
|
app.Run();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user