From 8b3dd9670841b7569146764d6ca35964524e94e9 Mon Sep 17 00:00:00 2001 From: LuBeDa Date: Sat, 12 Nov 2022 19:34:28 +0100 Subject: [PATCH 1/2] json by template --- .../Actions/HomeAssistantImageCommand.cs | 74 +++++++++++++++++++ .../Actions/HomeAssistantStateCommand.cs | 7 +- .../Actions/HomeAssistantTemplateCommand.cs | 12 ++- .../HomeAssistantPlugin.csproj | 5 ++ 4 files changed, 94 insertions(+), 4 deletions(-) create mode 100644 HomeAssistantPlugin/src/HomeAssistantPlugin/Actions/HomeAssistantImageCommand.cs diff --git a/HomeAssistantPlugin/src/HomeAssistantPlugin/Actions/HomeAssistantImageCommand.cs b/HomeAssistantPlugin/src/HomeAssistantPlugin/Actions/HomeAssistantImageCommand.cs new file mode 100644 index 0000000..45538c2 --- /dev/null +++ b/HomeAssistantPlugin/src/HomeAssistantPlugin/Actions/HomeAssistantImageCommand.cs @@ -0,0 +1,74 @@ +namespace Loupedeck.HomeAssistantPlugin +{ + using System; + using System.Text.Json.Nodes; + + class HomeAssistantImageCommand : PluginDynamicCommand + { + protected class Template + { + public String template { get; set; } + } + + public HomeAssistantImageCommand() + { + this.AddParameter("3zeilig", "Text in drei zeilen", "Multiline"); + this.AddParameter("2zeilig", "Text in zwei Zeilen", "Multiline"); + this.AddParameter("1big", "Eine große Zahl", "Singleline"); + this.AddParameter("1norm", "Text in einer zeilen", "Singleline"); + this.AddParameter("gauge", "Zeige Gauge an der Seite", "Graphic"); + this.AddParameter("circle", "virteilkreis unten rechts", "Graphic"); + this.AddParameter("dreieck", "Dreieck oben rechts", "Graphic"); + } + + protected override void RunCommand(String actionParameter) + { + } + + protected override BitmapImage GetCommandImage(String actionParameter, PluginImageSize imageSize) + { + if (actionParameter == null) + { + return null; + } + + using (var bitmapBuilder = new BitmapBuilder(imageSize)) + { + var fn = EmbeddedResources.FindFile("ButtonBaseHomeAssistant.png"); + bitmapBuilder.SetBackgroundImage(EmbeddedResources.ReadImage(fn)); + + switch (actionParameter) + { + case "3zeilig": + bitmapBuilder.DrawText("Line 2xxx", 3, 30, 75, 15); + bitmapBuilder.DrawText("Line 1xx", 3, 13, 75, 15); + bitmapBuilder.DrawText("Line 3xxxx", 3, 47, 75, 15); + break; + case "2zeilig": + bitmapBuilder.DrawText("Line 1big", 3, 25, 75, 15, new BitmapColor(230, 230, 230), 20); + bitmapBuilder.DrawText("Line 2norm", 3, 47, 75, 15); + break; + case "1big": + bitmapBuilder.DrawText("BIG Line", 3, 31, 75, 15, new BitmapColor(220, 220, 220), 22); + break; + case "1norm": + bitmapBuilder.DrawText("Line 1norm", 3, 30, 75, 15); + break; + case "gauge": + bitmapBuilder.FillRectangle(70, 30, 15, 50, new BitmapColor(20, 240, 20)); + break; + case "circle": + bitmapBuilder.FillCircle(75, 75, 15, new BitmapColor(240, 20, 20)); + break; + case "dreieck": + bitmapBuilder.DrawLine(55, 0, 90, 25, new BitmapColor(240, 240, 20), 15); + break; + default: + break; + }; + + return bitmapBuilder.ToImage(); + } + } + } +} diff --git a/HomeAssistantPlugin/src/HomeAssistantPlugin/Actions/HomeAssistantStateCommand.cs b/HomeAssistantPlugin/src/HomeAssistantPlugin/Actions/HomeAssistantStateCommand.cs index 8f5e5f8..6e40ba9 100644 --- a/HomeAssistantPlugin/src/HomeAssistantPlugin/Actions/HomeAssistantStateCommand.cs +++ b/HomeAssistantPlugin/src/HomeAssistantPlugin/Actions/HomeAssistantStateCommand.cs @@ -4,7 +4,6 @@ using System.Collections.Generic; using System.Net.Http; using System.Net.Http.Headers; - using System.Reflection; using System.Text.Json.Nodes; using System.Timers; @@ -20,7 +19,6 @@ protected class StateData public Boolean IsValid = false; public Boolean IsLoading = false; } - public HomeAssistantStateCommand() : base("Get a state", "Get the state value of an entity.", "") { this.MakeProfileAction("text;Enter entity"); @@ -41,14 +39,17 @@ public HomeAssistantStateCommand() : base("Get a state", "Get the state value of protected override void RunCommand(String actionParameter) { this.LoadData(actionParameter); + this.ActionImageChanged(actionParameter); } protected override BitmapImage GetCommandImage(String actionParameter, PluginImageSize imageSize) { - if (actionParameter == null) + /* + * if (actionParameter == null) { return null; } + */ StateData s = this.GetStateData(actionParameter); diff --git a/HomeAssistantPlugin/src/HomeAssistantPlugin/Actions/HomeAssistantTemplateCommand.cs b/HomeAssistantPlugin/src/HomeAssistantPlugin/Actions/HomeAssistantTemplateCommand.cs index 9af31f0..eee9a32 100644 --- a/HomeAssistantPlugin/src/HomeAssistantPlugin/Actions/HomeAssistantTemplateCommand.cs +++ b/HomeAssistantPlugin/src/HomeAssistantPlugin/Actions/HomeAssistantTemplateCommand.cs @@ -1,6 +1,7 @@ namespace Loupedeck.HomeAssistantPlugin { using System; + using Newtonsoft.Json; using System.Collections.Generic; using System.Net.Http; using System.Net.Http.Headers; @@ -12,6 +13,10 @@ class HomeAssistantTemplateCommand : PluginDynamicCommand protected IDictionary templateData = new Dictionary(); protected Timer timer; + protected class TemplateObject + { + public String template; + } protected class TemplateData { public String template; @@ -115,7 +120,12 @@ protected async void LoadData(String actionParameter) var body = @"{""template"": """ + actionParameter + @"""}"; _client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", HomeAssistantPlugin.Config.Token); - var content = new StringContent(body, System.Text.Encoding.UTF8, "application/json"); //https://developers.home-assistant.io/docs/api/rest/ + + var t = new TemplateObject () { template = actionParameter}; + var strJson = JsonConvert.SerializeObject(t); + + var content = new StringContent(strJson, System.Text.Encoding.UTF8, "application/json"); //https://developers.home-assistant.io/docs/api/rest/ + var resp = await _client.PostAsync(url, content); if (resp.IsSuccessStatusCode) { d.template = await resp.Content.ReadAsStringAsync(); } diff --git a/HomeAssistantPlugin/src/HomeAssistantPlugin/HomeAssistantPlugin.csproj b/HomeAssistantPlugin/src/HomeAssistantPlugin/HomeAssistantPlugin.csproj index 6c4890c..87f8bc1 100644 --- a/HomeAssistantPlugin/src/HomeAssistantPlugin/HomeAssistantPlugin.csproj +++ b/HomeAssistantPlugin/src/HomeAssistantPlugin/HomeAssistantPlugin.csproj @@ -39,6 +39,10 @@ ..\packages\Microsoft.Bcl.AsyncInterfaces.7.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll + + False + ..\..\..\..\..\..\..\..\..\Program Files (x86)\Loupedeck\Loupedeck2\Newtonsoft.Json.dll + False C:\Program Files (x86)\Loupedeck\Loupedeck2\PluginApi.dll @@ -85,6 +89,7 @@ + From 8279dd8740e54be97d246855c676a654116e73d0 Mon Sep 17 00:00:00 2001 From: LuBeDa Date: Sun, 13 Nov 2022 11:21:00 +0100 Subject: [PATCH 2/2] fixed json issues --- .../Actions/HomeAssistantStateCommand.cs | 20 +++++++++++++++---- .../HomeAssistantPlugin.csproj | 2 +- .../metadata/LoupedeckPackage.yaml | 2 +- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/HomeAssistantPlugin/src/HomeAssistantPlugin/Actions/HomeAssistantStateCommand.cs b/HomeAssistantPlugin/src/HomeAssistantPlugin/Actions/HomeAssistantStateCommand.cs index 6e40ba9..3ca6867 100644 --- a/HomeAssistantPlugin/src/HomeAssistantPlugin/Actions/HomeAssistantStateCommand.cs +++ b/HomeAssistantPlugin/src/HomeAssistantPlugin/Actions/HomeAssistantStateCommand.cs @@ -4,8 +4,9 @@ using System.Collections.Generic; using System.Net.Http; using System.Net.Http.Headers; - using System.Text.Json.Nodes; + using Newtonsoft.Json; using System.Timers; + using System.Collections; class HomeAssistantStateCommand : PluginDynamicCommand { @@ -16,6 +17,11 @@ class HomeAssistantStateCommand : PluginDynamicCommand protected class StateData { public String state; + public String entity_id; + public Hashtable attributes; + public Hashtable context; + public DateTime last_changed; + public DateTime last_updated; public Boolean IsValid = false; public Boolean IsLoading = false; } @@ -117,9 +123,15 @@ protected async void LoadData(String actionParameter) try { var body = await resp.Content.ReadAsStringAsync(); - var json = JsonNode.Parse(body); - d.state = json["state"].GetValue(); - d.IsValid = true; + StateData json = JsonConvert.DeserializeObject(body); + + if (json.state != null) + { + d.state = json.state; + d.IsValid = true; + } + + } catch (HttpRequestException e) { diff --git a/HomeAssistantPlugin/src/HomeAssistantPlugin/HomeAssistantPlugin.csproj b/HomeAssistantPlugin/src/HomeAssistantPlugin/HomeAssistantPlugin.csproj index 87f8bc1..ed3a8a9 100644 --- a/HomeAssistantPlugin/src/HomeAssistantPlugin/HomeAssistantPlugin.csproj +++ b/HomeAssistantPlugin/src/HomeAssistantPlugin/HomeAssistantPlugin.csproj @@ -89,7 +89,7 @@ - + diff --git a/HomeAssistantPlugin/src/HomeAssistantPlugin/metadata/LoupedeckPackage.yaml b/HomeAssistantPlugin/src/HomeAssistantPlugin/metadata/LoupedeckPackage.yaml index d6f2a81..0f1689e 100644 --- a/HomeAssistantPlugin/src/HomeAssistantPlugin/metadata/LoupedeckPackage.yaml +++ b/HomeAssistantPlugin/src/HomeAssistantPlugin/metadata/LoupedeckPackage.yaml @@ -15,7 +15,7 @@ displayName: HomeAssistant pluginFileName: HomeAssistantPlugin.dll # Plugin version. -version: 0.3 +version: 0.4 # Author of the plugin. The author can be a company or an individual developer. author: lubeda