Skip to content

Commit

Permalink
sdp: minor fixes, updated docs
Browse files Browse the repository at this point in the history
  • Loading branch information
Morg42 committed Jan 4, 2025
1 parent 5b31108 commit f2a804a
Show file tree
Hide file tree
Showing 6 changed files with 37 additions and 30 deletions.
6 changes: 3 additions & 3 deletions dev/sample_smartdevice_plugin/commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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': '<table_name>',

# optional, for JSON-RPC data. Needs to be dict or list, can be nested,
Expand All @@ -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': {
Expand Down
21 changes: 13 additions & 8 deletions dev/sample_smartdevice_plugin/plugin.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 "#<mode>" 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 "#<mode>" 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:
Expand Down
8 changes: 4 additions & 4 deletions dev/sample_smartdevice_standalone_plugin/commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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': '<table_name>',

# optional, for JSON-RPC data. Needs to be dict or list, can be nested,
Expand All @@ -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': {
Expand Down
21 changes: 13 additions & 8 deletions dev/sample_smartdevice_standalone_plugin/plugin.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 "#<mode>" 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 "#<mode>" 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:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions lib/model/smartdeviceplugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down

0 comments on commit f2a804a

Please sign in to comment.