fixed color and added minmax emoji
This commit is contained in:
parent
c7ce27a144
commit
5a0857b8a2
@ -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}}
|
||||
|
||||
@ -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)
|
||||
{
|
||||
|
||||
@ -68,6 +68,9 @@ a, .btn-link {
|
||||
}
|
||||
|
||||
.numeric-value {
|
||||
}
|
||||
|
||||
.numeric-value-ok {
|
||||
color: blue;
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user