fixed color and added minmax emoji

This commit is contained in:
taywon18 2024-09-22 17:58:43 +02:00
parent c7ce27a144
commit 5a0857b8a2
3 changed files with 51 additions and 10 deletions

View File

@ -1,6 +1,7 @@
# turlutu
{{display:number.kalanchoe_max_air_humidity}}
{{minmax_emoji:sensor.kalanchoe_air_humidity,number.kalanchoe_min_air_humidity,number.kalanchoe_max_air_humidity}}
{{minmax_display:sensor.kalanchoe_air_humidity,number.kalanchoe_min_air_humidity,number.kalanchoe_max_air_humidity}}
{{minmax_display:sensor.bromelia_soil_moisture,number.kalanchoe_min_air_humidity,number.kalanchoe_max_air_humidity}}
{{minmax_emoji:sensor.bromelia_soil_moisture,number.kalanchoe_min_air_humidity,number.kalanchoe_max_air_humidity}} {{minmax_display:sensor.bromelia_soil_moisture,number.kalanchoe_min_air_humidity,number.kalanchoe_max_air_humidity}}

View File

@ -14,9 +14,11 @@ public class ParsingManager
Configuration Conf;
HttpClient Client;
string Pattern = @"\{\{([a-zA-Z0-9._]+)\:([a-zA-Z0-9._]+)(?:,([a-zA-Z0-9._]+))*\}\}";
Dictionary<string, object> Buffer = new();
readonly string SimpleDisplay = "display";
readonly string MinMaxDisplay = "minmax_display";
readonly string MinMaxEmoji = "minmax_emoji";
public ParsingManager(IConfiguration configuration)
{
@ -28,6 +30,9 @@ public class ParsingManager
public async Task<string> Parse(string input)
{
lock (Buffer)
Buffer.Clear();
return Regex.Replace(input, Pattern, (match) =>
{
if (match.Groups.Count <= 1)
@ -46,6 +51,8 @@ public class ParsingManager
return ParseDisplay(args.ToArray()).Result;
else if(func == MinMaxDisplay)
return ParseMinMaxDisplay(args.ToArray()).Result;
else if(func == MinMaxEmoji)
return ParseMinMaxEmoji(args.ToArray()).Result;
else
return match.Value;
});
@ -81,22 +88,52 @@ public class ParsingManager
return $"(Bad {SimpleDisplay} call, Not any result from call for max (3th) argument)";
bool isOk = val > min && val < max;
string emoji = isOk ? "✔️" : "❌";
string tag = isOk ? "numeric-value" : "numeric-value-error";
return $"<span class=\"{tag}\">{val}</span> {emoji} [<span class=\"numeric-value-range\">{min}</span>, <span class=\"numeric-value-range\">{max}</span>]";
string tag = isOk ? "numeric-value-ok" : "numeric-value-error";
return $"<span class=\"{tag}\"> {val}</span>";
}
public async Task<string> ParseMinMaxEmoji(string[] args)
{
if (args.Length < 3)
return ($"(Bad {SimpleDisplay} call, need at least 3 argument)");
var val = await Get(args[0]).ConfigureAwait(false);
if (val is null)
return $"(Bad {SimpleDisplay} call, Not any result from call for main (1st) argument)";
var min = await Get(args[1]).ConfigureAwait(false);
if (min is null)
return $"(Bad {SimpleDisplay} call, Not any result from call for min (2nd) argument)";
var max = await Get(args[2]).ConfigureAwait(false);
if (max is null)
return $"(Bad {SimpleDisplay} call, Not any result from call for max (3th) argument)";
bool isOk = val > min && val < max;
string emoji = isOk ? "✅" : "⚠️";
return emoji;
}
public async Task<float?> Get(string item, CancellationToken tk = default)
{
try
{
var resp = await Client.GetFromJsonAsync<HAResponse>(item, tk).ConfigureAwait(false);
if (resp is null)
return null;
lock(Buffer)
{
if(Buffer.ContainsKey(item))
return (float?)Buffer[item];
if (float.TryParse(resp.state, CultureInfo.InvariantCulture, out float value))
return value;
return null;
var resp = Client.GetFromJsonAsync<HAResponse>(item, tk).Result;
if (resp is null)
return null;
if (float.TryParse(resp.state, CultureInfo.InvariantCulture, out float value))
{
Buffer.Add(item, value );
return value;
}
return null;
}
}
catch(Exception e)
{

View File

@ -68,6 +68,9 @@ a, .btn-link {
}
.numeric-value {
}
.numeric-value-ok {
color: blue;
}