add relay charts and optimize relay settings
This commit is contained in:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user