From 6a0ec34cdbdeb8db0deddff29ee01f2ccad141a4 Mon Sep 17 00:00:00 2001 From: thmichel Date: Wed, 29 Oct 2025 13:54:14 +0100 Subject: [PATCH 1/2] Using a picker object to configure the picker now, deriving display format from steps. --- source/HomeAssistantApp.mc | 1 - source/HomeAssistantNumericMenuItem.mc | 20 +++++++------------ source/HomeAssistantView.mc | 3 ++- source/factory/HomeAssistantNumericFactory.mc | 14 ++++++++----- 4 files changed, 18 insertions(+), 20 deletions(-) diff --git a/source/HomeAssistantApp.mc b/source/HomeAssistantApp.mc index 273ec4c..46338ee 100644 --- a/source/HomeAssistantApp.mc +++ b/source/HomeAssistantApp.mc @@ -630,7 +630,6 @@ class HomeAssistantApp extends Application.AppBase { (item as HomeAssistantToggleMenuItem).updateToggleState(data[i.toString() + "t"]); } if (item instanceof HomeAssistantNumericMenuItem) { - // (item as HomeAssistantNumericMenuItem).updateNumericState("22"); (item as HomeAssistantNumericMenuItem).updateNumericState(data[i.toString() + "n"].toString()); } } diff --git a/source/HomeAssistantNumericMenuItem.mc b/source/HomeAssistantNumericMenuItem.mc index 2cb2488..90bea08 100644 --- a/source/HomeAssistantNumericMenuItem.mc +++ b/source/HomeAssistantNumericMenuItem.mc @@ -68,15 +68,6 @@ class HomeAssistantNumericMenuItem extends HomeAssistantMenuItem { mLabel = label; mHomeAssistantService = haService; - var val = data.get("display_format"); - if (val != null) { - mFormatString = val.toString(); - } - else { - mFormatString = "%.1f"; - } - - HomeAssistantMenuItem.initialize( label, template, @@ -170,9 +161,13 @@ class HomeAssistantNumericMenuItem extends HomeAssistantMenuItem { function getNumericTemplate() as Lang.String? { var entity_id = mData.get("entity_id"); if (entity_id != null) { - return "{{state_attr('" + entity_id.toString() + "','" + mData.get("attribute").toString() +"')}}"; - } - return null; + if (mData.get("attribute")!=null) + { + return "{{state_attr('" + entity_id.toString() + "','" + mData.get("attribute").toString() +"')}}"; + } + return ""; + } + return ""; } function updateNumericState(data as Lang.String or Lang.Dictionary or Null) as Void { @@ -181,7 +176,6 @@ class HomeAssistantNumericMenuItem extends HomeAssistantMenuItem { return; } else if(data instanceof Lang.String) { mValue=data; - } else { // Catch possible error mValue="0"; diff --git a/source/HomeAssistantView.mc b/source/HomeAssistantView.mc index eb33985..6c16408 100644 --- a/source/HomeAssistantView.mc +++ b/source/HomeAssistantView.mc @@ -47,6 +47,7 @@ class HomeAssistantView extends WatchUi.Menu2 { var content = items[i].get("content") as Lang.String?; var entity = items[i].get("entity") as Lang.String?; var tap_action = items[i].get("tap_action") as Lang.Dictionary?; + var picker = items[i].get("picker") as Lang.Dictionary?; // optional for numeric items var service = items[i].get("service") as Lang.String?; // Deprecated schema var confirm = false as Lang.Boolean?; var pin = false as Lang.Boolean?; @@ -132,7 +133,7 @@ class HomeAssistantView extends WatchUi.Menu2 { entity, content, service, - data, + picker, { :exit => exit, :confirm => confirm, diff --git a/source/factory/HomeAssistantNumericFactory.mc b/source/factory/HomeAssistantNumericFactory.mc index bb1bee5..62ad3d2 100644 --- a/source/factory/HomeAssistantNumericFactory.mc +++ b/source/factory/HomeAssistantNumericFactory.mc @@ -44,11 +44,15 @@ class HomeAssistantNumericFactory extends WatchUi.PickerFactory { if (val != null) { mStep = val.toString().toFloat(); } - val = data.get("display_format"); - if (val != null) { - mFormatString = val.toString(); - } - + if (mStep < 0.01) { + mFormatString="%.3f"; + } else if (mStep < 0.1) { + mFormatString="%2f"; + } else if (mStep < 1) { + mFormatString="%.1f"; + } else { + mFormatString="%d"; + } } //! Get the index of a number item From b0fa10b2c120c4ddf5f660094ccf16909d7747e1 Mon Sep 17 00:00:00 2001 From: thmichel Date: Wed, 29 Oct 2025 14:41:32 +0100 Subject: [PATCH 2/2] Fixed typo in formatsgtring and error if numeric template didn't return a value --- source/HomeAssistantApp.mc | 5 ++++- source/factory/HomeAssistantNumericFactory.mc | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/source/HomeAssistantApp.mc b/source/HomeAssistantApp.mc index 46338ee..0cc2b12 100644 --- a/source/HomeAssistantApp.mc +++ b/source/HomeAssistantApp.mc @@ -630,7 +630,10 @@ class HomeAssistantApp extends Application.AppBase { (item as HomeAssistantToggleMenuItem).updateToggleState(data[i.toString() + "t"]); } if (item instanceof HomeAssistantNumericMenuItem) { - (item as HomeAssistantNumericMenuItem).updateNumericState(data[i.toString() + "n"].toString()); + if (data[i.toString() + "n"] != null) + { + (item as HomeAssistantNumericMenuItem).updateNumericState(data[i.toString() + "n"].toString()); + } } } if (Settings.getMenuCheck() && Settings.getCacheConfig() && !mIsCacheChecked) { diff --git a/source/factory/HomeAssistantNumericFactory.mc b/source/factory/HomeAssistantNumericFactory.mc index 62ad3d2..7c664f7 100644 --- a/source/factory/HomeAssistantNumericFactory.mc +++ b/source/factory/HomeAssistantNumericFactory.mc @@ -47,7 +47,7 @@ class HomeAssistantNumericFactory extends WatchUi.PickerFactory { if (mStep < 0.01) { mFormatString="%.3f"; } else if (mStep < 0.1) { - mFormatString="%2f"; + mFormatString="%.2f"; } else if (mStep < 1) { mFormatString="%.1f"; } else {