The skill documents three of the five dialog pre-population callbacks (getDeviceConfigUiValues, getEventConfigUiValues, getPrefsConfigUiValues) but two are completely absent. Both are confirmed present in plugin_base.py across all supported Indigo versions (verified in both 2025.1 at line 1112 and 2025.2 at line 1195):
getMenuActionConfigUiValues(self, menu_id) — fires before a menu item dialog opens
getActionConfigUiValues(self, plugin_props, type_id, dev_id) — fires before an action config dialog opens
How we found this the hard way
The requirement was simple: open a menu item dialog (Day / Month / Year dropdowns) with today's date pre-selected. The skill documents getDeviceConfigUiValues for device dialogs but nothing equivalent for menu items, so we guessed at a name.
Attempt 1: Tried getMenuItemsValues(self, valuesDict, typeId, devId) — invented name, Indigo silently ignored it, dialog opened with static XML defaultValue every time.
Attempt 2: Replaced static <List> blocks with <List class="self" method="buildRptDayList"/> dynamic list methods, returning today's value first so Indigo would auto-select it. Result: dialog showed "Select an item" — Indigo does not auto-select the first item from a dynamic list when there is no matching defaultValue.
Resolution: Searched plugin_base.py directly and found get_menu_action_config_ui_values at line 1195 (2025.2) / line 1112 (2025.1). One override, six lines of code, works first time. If this had been in the docs the entire detour would never have happened.
Suggested addition to plugin-lifecycle.md — a single reference table for all five callbacks:
### Dialog pre-population callbacks — full reference (all Indigo versions)
Override any of these to seed fields with computed or live values before
the dialog opens. All return (values_dict, errors_dict).
| Callback | Dialog | Signature |
|---------------------------------------|----------------|-------------------------------------------------|
| getPrefsConfigUiValues | Plugin prefs | (self) |
| getDeviceConfigUiValues | Device config | (self, plugin_props, type_id, dev_id) |
| getEventConfigUiValues | Event/trigger | (self, plugin_props, type_id, event_id) |
| getMenuActionConfigUiValues ← MISSING | Menu item | (self, menu_id) |
| getActionConfigUiValues ← MISSING | Action config | (self, plugin_props, type_id, dev_id) |
Note: dynamic list methods do NOT auto-select their first item when no
defaultValue matches — getMenuActionConfigUiValues is the correct approach
for menu item dialogs.
Example — default a menu item's date dropdowns to today:
def getMenuActionConfigUiValues(self, menu_id):
values_dict = indigo.Dict()
errors_dict = indigo.Dict()
if menu_id == "dailyReport":
today = date.today()
values_dict["rpt_day"] = f"{today.day:02d}"
values_dict["rpt_month"] = f"{today.month:02d}"
values_dict["rpt_year"] = str(today.year)
return (values_dict, errors_dict)
The skill documents three of the five dialog pre-population callbacks (
getDeviceConfigUiValues,getEventConfigUiValues,getPrefsConfigUiValues) but two are completely absent. Both are confirmed present inplugin_base.pyacross all supported Indigo versions (verified in both 2025.1 at line 1112 and 2025.2 at line 1195):getMenuActionConfigUiValues(self, menu_id)— fires before a menu item dialog opensgetActionConfigUiValues(self, plugin_props, type_id, dev_id)— fires before an action config dialog opensHow we found this the hard way
The requirement was simple: open a menu item dialog (Day / Month / Year dropdowns) with today's date pre-selected. The skill documents
getDeviceConfigUiValuesfor device dialogs but nothing equivalent for menu items, so we guessed at a name.Attempt 1: Tried
getMenuItemsValues(self, valuesDict, typeId, devId)— invented name, Indigo silently ignored it, dialog opened with static XMLdefaultValueevery time.Attempt 2: Replaced static
<List>blocks with<List class="self" method="buildRptDayList"/>dynamic list methods, returning today's value first so Indigo would auto-select it. Result: dialog showed "Select an item" — Indigo does not auto-select the first item from a dynamic list when there is no matchingdefaultValue.Resolution: Searched
plugin_base.pydirectly and foundget_menu_action_config_ui_valuesat line 1195 (2025.2) / line 1112 (2025.1). One override, six lines of code, works first time. If this had been in the docs the entire detour would never have happened.Suggested addition to
plugin-lifecycle.md— a single reference table for all five callbacks: