add relay charts and optimize relay settings

This commit is contained in:
2026-09-10 01:13:42 +03:30
parent ece4b17edf
commit 91ad61bdee
67 changed files with 4879 additions and 1491 deletions

View File

@@ -1,6 +1,8 @@
using Microsoft.AspNetCore.Mvc;
using GreenHome.Application;
using Microsoft.AspNetCore.Http;
using System.Text;
using System.Text.RegularExpressions;
namespace GreenHome.Api.Controllers;
@@ -31,6 +33,7 @@ public class TelemetryController : ControllerBase
public async Task<ActionResult<string>> Create([FromQuery] TelemetryDto telementry, [FromQuery] string? lastUpdateDate, CancellationToken cancellationToken)
{
telementry.TimestampUtc = DateTime.UtcNow;
telementry.RelayStates = ParseRelayStates(Request.Query);
var id = await telemetryService.AddAsync(telementry, cancellationToken);
var parts = new List<string> { $"ID:{id}" };
@@ -92,6 +95,32 @@ public class TelemetryController : ControllerBase
}));
}
/// <summary>
/// Collect relay states from query params r1, r2, ... (missing relay = off/0).
/// </summary>
private static string? ParseRelayStates(IQueryCollection query)
{
var entries = new List<(int Index, string Value)>();
foreach (var key in query.Keys)
{
var match = Regex.Match(key, @"^r(\d+)$", RegexOptions.IgnoreCase);
if (!match.Success || !int.TryParse(match.Groups[1].Value, out var index) || index <= 0)
continue;
entries.Add((index, query[key].ToString() == "1" ? "1" : "0"));
}
if (entries.Count == 0)
return null;
var states = new string[entries.Max(e => e.Index)];
Array.Fill(states, "0");
foreach (var entry in entries)
states[entry.Index - 1] = entry.Value;
return string.Join(",", states);
}
/// <summary>
/// Parse date string in format: yyyy/MM/dd-HH:mm
/// </summary>