From f2a804ad986472d50dba7f87bdf14c12e38decdf Mon Sep 17 00:00:00 2001 From: Morg42 <43153739+Morg42@users.noreply.github.com> Date: Sat, 4 Jan 2025 20:55:22 +0100 Subject: [PATCH] sdp: minor fixes, updated docs --- dev/sample_smartdevice_plugin/commands.py | 6 +++--- dev/sample_smartdevice_plugin/plugin.yaml | 21 ++++++++++++------- .../commands.py | 8 +++---- .../plugin.yaml | 21 ++++++++++++------- .../plugin_typen/smartdeviceplugin_class.rst | 7 ++----- lib/model/smartdeviceplugin.py | 4 ++-- 6 files changed, 37 insertions(+), 30 deletions(-) diff --git a/dev/sample_smartdevice_plugin/commands.py b/dev/sample_smartdevice_plugin/commands.py index 08185db9d5..c9170284a0 100644 --- a/dev/sample_smartdevice_plugin/commands.py +++ b/dev/sample_smartdevice_plugin/commands.py @@ -66,7 +66,7 @@ # # you can use the following tokens to have them replaced by their respective values: # - ``{LOOKUP}`` to replace with a regex which matches on all values from the command lookup table - # Note: keep in mind that the generated pattern is not bounded, so a lookup containing + # Note: keep in mind that the generated pattern is not bounded, so a lookup containing # e.g. 'foo' and 'foobar' will find 'foo' even if 'foobar' is returned # Consider bounding the pattern like ``^{LOOKUP}$`` or similar # - ``{VALID_LIST}`` to replace with all valid values according to the cmd_settings @@ -93,7 +93,7 @@ # the lookup and the respective value is passed to SmartHomeNG as the value # for the item. # This makes it easy e.g. to convert numerical values into clear-text values - # Note: setting this option ignores the ``settings`` parameters! + # Note: setting this option ignores the ``cmd_settings`` parameters! 'lookup': '', # optional, for JSON-RPC data. Needs to be dict or list, can be nested, @@ -107,7 +107,7 @@ 'params': {'dict': ['or', 'list']}, # optional, disabled custom value processing for this command - 'custom_disable': False, + 'custom_disabled': False, # optional, specifies item attributes if struct file is generated by plugin 'item_attrs': { diff --git a/dev/sample_smartdevice_plugin/plugin.yaml b/dev/sample_smartdevice_plugin/plugin.yaml index 72836cb519..74c3d15bfb 100644 --- a/dev/sample_smartdevice_plugin/plugin.yaml +++ b/dev/sample_smartdevice_plugin/plugin.yaml @@ -22,6 +22,7 @@ plugin: # sh_maxversion: '1.11' # maximum shNG version to use this plugin (omit if latest) # py_minversion: '3.10' # minimum Python version to use for this plugin # py_maxversion: '4.25' # maximum Python version to use for this plugin (omit if latest) + sdp_minversion: '1.0.4' # minimum SDP version to use this plugin multi_instance: true restartable: true @@ -277,27 +278,31 @@ item_attributes: ex_lookup: type: str description: - de: 'Der Inhalt der Lookup-Tabelle mit dem angegebenen Namen wird beim Start einmalig als dict oder list in das Item geschrieben.' - en: 'The lookup table with the given name will be assigned to the item in dict or list format once on startup.' + de: 'Item beinhaltet die Werte der Lookup-Tabelle mit dem angegebenen Namen.' + en: 'Item contains values of the lookup table with the given name.' description_long: - de: 'Der Inhalt der Lookup-Tabelle mit dem angegebenen Namen wird beim - Start einmalig als dict oder list in das Item geschrieben. + de: 'Item beinhaltet die Werte der Lookup-Tabelle mit dem angegebenen Namen. Durch Anhängen von "#" an den Namen der Tabelle kann die Art der Tabelle ausgewählt werden: - fwd liefert die Tabelle Gerät -> SmartHomeNG (Standard) - rev liefert die Tabelle SmartHomeNG -> Gerät - rci liefert die Tabelle SmarthomeNG -> Gerät in Kleinbuchstaben - - list liefert die Liste der Namen für SmartHomeNG (z.B. für Auswahllisten in der Visu)' - en: 'The lookup table with the given name will be assigned to the item - in dict or list format once on startup. + - list liefert die Liste der Namen für SmartHomeNG (z.B. für Auswahllisten in der Visu) + + Beim Typ "fwd" kann dem Item ein neues dict als Wert zugewiesen werden. Dann werden + die Lookup-Tabellen und ggf. definierte Items (rev, rci, list) aktualisiert.' + en: 'Item contains values of the lookup table with the given name. By appending "#" to the tables name the type of table can be selected: - fwd returns the table device -> SmartHomeNG (default) - rev returns the table SmartHomeNG -> device - rci returns the table SmartHomeNG -> device in lower case - - list return the list of names for SmartHomeNG (e.g. for selection dropdowns in visu applications)' + - list return the list of names for SmartHomeNG (e.g. for selection dropdowns in visu applications) + + For "fwd" type lookups the item can be assigned a new dict which will + update the lookup tables and all associated items (rev, rci, list).' # !! if these attributes are supported by (implemented in) the plugin, adjust the # !! description(s) to match the intended use ex_custom1: diff --git a/dev/sample_smartdevice_standalone_plugin/commands.py b/dev/sample_smartdevice_standalone_plugin/commands.py index de0123aafb..c9170284a0 100644 --- a/dev/sample_smartdevice_standalone_plugin/commands.py +++ b/dev/sample_smartdevice_standalone_plugin/commands.py @@ -66,9 +66,9 @@ # # you can use the following tokens to have them replaced by their respective values: # - ``{LOOKUP}`` to replace with a regex which matches on all values from the command lookup table - # Note: keep in mind that the generated pattern is not bounded, so a lookup containing + # Note: keep in mind that the generated pattern is not bounded, so a lookup containing # e.g. 'foo' and 'foobar' will find 'foo' even if 'foobar' is returned - # Consider bounding the pattern like ``{LOOKUP}$`` or similar + # Consider bounding the pattern like ``^{LOOKUP}$`` or similar # - ``{VALID_LIST}`` to replace with all valid values according to the cmd_settings # - ``{VALID_LIST_CI}`` ditto, with case-insensitive flag set # - ``{VALID_LIST_RE}`` ditto, but matches against regexes from valid_list_re @@ -93,7 +93,7 @@ # the lookup and the respective value is passed to SmartHomeNG as the value # for the item. # This makes it easy e.g. to convert numerical values into clear-text values - # Note: setting this option ignores the ``settings`` parameters! + # Note: setting this option ignores the ``cmd_settings`` parameters! 'lookup': '', # optional, for JSON-RPC data. Needs to be dict or list, can be nested, @@ -107,7 +107,7 @@ 'params': {'dict': ['or', 'list']}, # optional, disabled custom value processing for this command - 'custom_disable': False, + 'custom_disabled': False, # optional, specifies item attributes if struct file is generated by plugin 'item_attrs': { diff --git a/dev/sample_smartdevice_standalone_plugin/plugin.yaml b/dev/sample_smartdevice_standalone_plugin/plugin.yaml index 72836cb519..74c3d15bfb 100644 --- a/dev/sample_smartdevice_standalone_plugin/plugin.yaml +++ b/dev/sample_smartdevice_standalone_plugin/plugin.yaml @@ -22,6 +22,7 @@ plugin: # sh_maxversion: '1.11' # maximum shNG version to use this plugin (omit if latest) # py_minversion: '3.10' # minimum Python version to use for this plugin # py_maxversion: '4.25' # maximum Python version to use for this plugin (omit if latest) + sdp_minversion: '1.0.4' # minimum SDP version to use this plugin multi_instance: true restartable: true @@ -277,27 +278,31 @@ item_attributes: ex_lookup: type: str description: - de: 'Der Inhalt der Lookup-Tabelle mit dem angegebenen Namen wird beim Start einmalig als dict oder list in das Item geschrieben.' - en: 'The lookup table with the given name will be assigned to the item in dict or list format once on startup.' + de: 'Item beinhaltet die Werte der Lookup-Tabelle mit dem angegebenen Namen.' + en: 'Item contains values of the lookup table with the given name.' description_long: - de: 'Der Inhalt der Lookup-Tabelle mit dem angegebenen Namen wird beim - Start einmalig als dict oder list in das Item geschrieben. + de: 'Item beinhaltet die Werte der Lookup-Tabelle mit dem angegebenen Namen. Durch Anhängen von "#" an den Namen der Tabelle kann die Art der Tabelle ausgewählt werden: - fwd liefert die Tabelle Gerät -> SmartHomeNG (Standard) - rev liefert die Tabelle SmartHomeNG -> Gerät - rci liefert die Tabelle SmarthomeNG -> Gerät in Kleinbuchstaben - - list liefert die Liste der Namen für SmartHomeNG (z.B. für Auswahllisten in der Visu)' - en: 'The lookup table with the given name will be assigned to the item - in dict or list format once on startup. + - list liefert die Liste der Namen für SmartHomeNG (z.B. für Auswahllisten in der Visu) + + Beim Typ "fwd" kann dem Item ein neues dict als Wert zugewiesen werden. Dann werden + die Lookup-Tabellen und ggf. definierte Items (rev, rci, list) aktualisiert.' + en: 'Item contains values of the lookup table with the given name. By appending "#" to the tables name the type of table can be selected: - fwd returns the table device -> SmartHomeNG (default) - rev returns the table SmartHomeNG -> device - rci returns the table SmartHomeNG -> device in lower case - - list return the list of names for SmartHomeNG (e.g. for selection dropdowns in visu applications)' + - list return the list of names for SmartHomeNG (e.g. for selection dropdowns in visu applications) + + For "fwd" type lookups the item can be assigned a new dict which will + update the lookup tables and all associated items (rev, rci, list).' # !! if these attributes are supported by (implemented in) the plugin, adjust the # !! description(s) to match the intended use ex_custom1: diff --git a/doc/user/source/referenz/plugins/plugin_typen/smartdeviceplugin_class.rst b/doc/user/source/referenz/plugins/plugin_typen/smartdeviceplugin_class.rst index 296d48460d..e838f845a0 100644 --- a/doc/user/source/referenz/plugins/plugin_typen/smartdeviceplugin_class.rst +++ b/doc/user/source/referenz/plugins/plugin_typen/smartdeviceplugin_class.rst @@ -8,14 +8,11 @@ Class SmartDevicePlugin ======================= -Das SmartDevicePlugin (sdp) ist aus der Notwendigkeit geboren, für jedes neue Plugin und jedes neue Gerät aufs Neue das -ganze Kern-Plugin neu zu erfinden - Item-Handling, Zuordnung von Items zu Befehlen (commands) und Kommunikation mit -Netzwerk- oder seriellen Treibern oder Libraries. +Das SmartDevicePlugin (sdp) ist aus der Notwendigkeit geboren, für jedes neue Plugin und jedes neue Gerät aufs Neue das ganze Kern-Plugin neu zu erfinden - Item-Handling, Zuordnung von Items zu Befehlen (commands) und Kommunikation mit Netzwerk- oder seriellen Treibern oder Libraries. Hierzu bietet die sdp-Klasse ein fertiges Plugin, aus dem mit minimalem Aufwand ein eigenes Plugin erstellt werden kann. -Dazu besteht sdp aus mehreren modularen Ebenen, die hier zusammen mit den jeweiligen ausgetauschten Daten dargestellt -werden: +Dazu besteht sdp aus mehreren modularen Ebenen, die hier zusammen mit den jeweiligen ausgetauschten Daten dargestellt werden: .. list-table:: Ebenen von SDP :header-rows: 1 diff --git a/lib/model/smartdeviceplugin.py b/lib/model/smartdeviceplugin.py index 4f8004d760..aef45106f9 100644 --- a/lib/model/smartdeviceplugin.py +++ b/lib/model/smartdeviceplugin.py @@ -623,14 +623,14 @@ def find_custom_attr(item, index=1): if '#' in table: table, mode = table.split('#') lu = self.get_lookup(table, mode) - item.set(lu, self.get_fullname, source='Init') + item.set(lu, self.get_fullname(), source='Init') if lu: self.logger.debug(f'Item {item} assigned lookup {table} with contents {lu}') # store reverse-accessible items if table not in self._items_by_lookup: self._items_by_lookup[table] = {} - self._items_by_lookup[table][mode] = item.property.path + self._items_by_lookup[table][mode] = item if mode == 'fwd': # only store item for update_items if mode is 'fwd'