SDM Service

SDM service features and functionality are defined in different configuration files

Editing a SDM service configuration file

Edid a config file using the web interface, for example sdm.conf

Caution

Do not edid a config file unless you are very sure what you do

Info

Web interface default login

admin / nexgentec

  1. Open a browser and enter the devices network address in the address bar, press enter

  2. Navigate to SDM -> Files -> Config Picture Picture

  3. Download the sdm.conf file

  4. Make your changes to the sdm.conf file and save as unix format text file. configuration options

  5. Upload the sdm.conf file, it will overwrite the existing one

  6. Restart SDM process, Host -> Services -> Software Defined Matrix Service (this step is not needed for .toml files) Picture Picture

Subsections of SDM Service

sdm.conf

This section describes the various configuration options sdm.conf file can contain.

Caution

Use UNIX file fomatting when editing the file

File entries must be formatted as follows:
[Section]
key=value

For example to activate syslog:
[syslog]
address=“server.example.com”
port=53
level=6
tag=“sdm”

uuid

Note

Do not delete the uuid, it identifies the sdm software. All licenses are bound to the uuid which is individual to every instance of sdm, it is like a product key for an OS

Section Key Value Example Supported Versions
uuid key 408aca84-a2b0-11eb-bcbc-0242ac130002 key=408aca84-a2b0-11eb-bcbc-0242ac130002 >v0.0.1

logLevel

Section Key Value Example Supported Versions
logLevel level 1-7 level=1 >v0.0.1

syslog

Section Key Value Example Supported Versions
syslog level 1-7 level=6 >v0.0.1
address your servers address address=“server.example.com” >v0.0.1
port 53 or custom port=53 >v0.0.1
tag sdm tag=“sdm” >v0.0.1

logAuth

Info

logAuth is for only internal usage

Section Key Value Example Supported Versions
logAuth key key="" >v0.0.1

api

Section Key Value Example Supported Versions
api jrpc2TCPInterface Any network interface jrpc2TCPInterface=“enp1s0” >v1.8.50
jrpc2TCPPort Default: 64823 jrpc2TCPPort=64823 >v1.8.50
jrpc2HTTPInterface Any network interface jrpc2HTTPInterface=“enp1s0” >v1.8.50
jrpc2HTTPPort Default: 64880 jrpc2HTTPPort=64880 >v1.8.50
jrpc2Console on/off jrpc2Console=on >v1.8.50

dante

Section Key Value Example Supported Versions
dante primary Any network interface primary=“enp1s0” >v1.8.50
secondary Any network interface secondary=“enp2s0” >v1.8.50

preset

Section Key Value Example Supported Versions
preset recallPresetIDOnStart Any preset as defined in presets_config.toml recallOnStart=1 >v1.8.50
preset recallPresetNameOnStart Any preset as defined in presets_config.toml recallOnStart=mypreset >v1.8.50
recallOnStartDelay x (seconds) recallOnStartDelay=10 >v1.8.50

ifConfig (deprecated)

Note

ifConfig is deprecated

Use api section to define interface/port for 3rd party communication and dante section to define the interfaces used for Danteā„¢

Section Key Value Example Supported Versions
dante primary Any network interface primary=“enp1s0” <v1.8.50
secondary Any network interface secondary=“enp2s0” <v1.8.50
cmdServer Any network interface cmdServer=“enp2s0” <v1.8.50

cmdServer (deprecated)

Note

cmdServer is deprecated

Use api section to define the port for 3rd party communication

Section Key Value Example Supported Versions
cmdServer port port=48648 <v1.8.50

presets_config.toml

Presets can be recalled on start up and using the Control API

Caution

Use UNIX file fomatting when editing the file

Info

Generate yourself an example Generate example

See the fully commented definition below

  • The file must be in TOML format
  • Check the correct syntax online toml-lint
  • Mandatory means that it will not work without.
[[preset]]

  # ID (s) of the preset object, mandatory
  preset_id = [56, 59, 33, 38]

  # Name of the preset object, can be omitted
  preset_name = "MyPreset_1"

  # Destination object
  [preset.destination]

    [[preset.destination.channel]]

      # Dante channel name, mandatory for Dante devices
      channel_name = "SDMS0000011"

      # Channel index, if omitted the order of the channels below the object determines the index
      index = 1

      # Dante device name, can be omitted but should not.
      node_name = "MyDanteDevice_1"

    [[preset.destination.channel]]

      # Dante channel name, mandatory for Dante devices
      channel_name = "SDMS0000012"

      # Channel index, if omitted the order of the channels below the object determines the index
      index = 2

      # Dante device name, can be omitted but should not.
      node_name = "MyDanteDevice_1"

    [[preset.destination.channel]]

      # Dante channel name, mandatory for Dante devices
      channel_name = "SDMS0000013"

      # Channel index, if omitted the order of the channels below the object determines the index
      index = 3

      # Dante device name, can be omitted but should not.
      node_name = "MyDanteDevice_1"

    [[preset.destination.channel]]

      # Dante channel name, mandatory for Dante devices
      channel_name = "SDMS0000014"

      # Channel index, if omitted the order of the channels below the object determines the index
      index = 4

      # Dante device name, can be omitted but should not.
      node_name = "MyDanteDevice_1"

  # Source object
  [preset.source]

    [[preset.source.channel]]

      # Dante channel name, mandatory for Dante devices
      channel_name = "SDMS0000011"

      # Channel index, if omitted the order of the channels below the object determines the index
      index = 1

      # Dante device name, can be omitted but should not.
      node_name = "MyDanteDevice_1"

    [[preset.source.channel]]

      # Dante channel name, mandatory for Dante devices
      channel_name = "SDMS0000012"

      # Channel index, if omitted the order of the channels below the object determines the index
      index = 2

      # Dante device name, can be omitted but should not.
      node_name = "MyDanteDevice_1"

    [[preset.source.channel]]

      # AES Flow name, mandatory for AES devices
      aes_flow_name = "239.69.x.x@MyAesDevice_1"

      # AES flow slot ID for this channel (1-x), mandatory for AES devices
      aes_flow_slot_id = 1

      # Channel index, if omitted the order of the channels below the object determines the index
      index = 3

    [[preset.source.channel]]

      # AES Flow name, mandatory for AES devices
      aes_flow_name = "239.69.x.x@MyAesDevice_1"

      # AES flow slot ID for this channel (1-x), mandatory for AES devices
      aes_flow_slot_id = 2

      # Channel index, if omitted the order of the channels below the object determines the index
      index = 4

[[preset]]

  preset_id = [26, 9, 3, 63]
  preset_name = "MyPreset_2"

  [preset.destination]

    [[preset.destination.channel]]
      channel_name = "SDMS0000021"
      index = 1
      node_name = "MyDanteDevice_2"

    [[preset.destination.channel]]
      channel_name = "SDMS0000022"
      index = 2
      node_name = "MyDanteDevice_2"

    [[preset.destination.channel]]
      channel_name = "SDMS0000023"
      index = 3
      node_name = "MyDanteDevice_2"

    [[preset.destination.channel]]
      channel_name = "SDMS0000024"
      index = 4
      node_name = "MyDanteDevice_2"

  [preset.source]

    [[preset.source.channel]] 
      channel_name = "SDMS0000021"  
      index = 1  
      node_name = "MyDanteDevice_2"

    [[preset.source.channel]]
      channel_name = "SDMS0000022"
      index = 2   
      node_name = "MyDanteDevice_2"

    [[preset.source.channel]]
      aes_flow_name = "239.69.x.x@MyAesDevice_2"
      aes_flow_slot_id = 1
      index = 3

    [[preset.source.channel]] 
      aes_flow_name = "239.69.x.x@MyAesDevice_2"  
      aes_flow_slot_id = 2   
      index = 4

symnet_config_sources.toml

The source config file describe the sources which are selected by a Symetrix Symnet control number value. If there is no Symetrix device present or SDM should not listen to Symetrix this file can be omitted

Caution

Use UNIX file fomatting when editing the file

Info

Generate yourself an example" Generate example

See the fully commented definition below

  • The file must be in TOML format
  • Check the correct syntax online toml-lint
  • Mandatory means that it will not work without.
# Defaults can be omitted if all values are defined source specific.
# Source object defined values are taking precedence
[default]

  # Default delay settings for all objects that are not carrying its own settings for delay
  # Object defined values are taking precedence , can be omitted
  [default.delay]

    # Delay value (ms) on switch over, if omitted on object basis default settings apply
    switch = 500

[[source]]

  # Name of the source or destination object, can be omitted
  name = "MyDanteSource_1"

  [[source.channel]]

    # Dante channel name, mandatory for Dante devices
    channel_name = "SDMS0000011"

    # Channel index, if omitted the order of the channels below the object determines the index
    index = 1

    # Dante device name, can be omitted but should not.
    node_name = "MyDanteDevice_1"

  [[source.channel]]

    # Dante channel name, mandatory for Dante devices
    channel_name = "SDMS0000012"

    # Channel index, if omitted the order of the channels below the object determines the index
    index = 2

    # Dante device name, can be omitted but should not.
    node_name = "MyDanteDevice_1"

  # Object defined delay settings, if omitted on object basis default settings apply
  [source.delay]

    # Delay value (ms) on switch over, if omitted on object basis default settings apply
    switch = 800

  # Object defined Symetrix settings, mandatory
  [source.symnet]

    # Symetrix Control Number Value for this source object, mandatory
    control_value = 1

[[source]]

  # Name of the source or destination object, can be omitted
  name = "MyDanteSource_2"

  [[source.channel]]

    # Dante channel name, mandatory for Dante devices
    channel_name = "SDMS0000021"

    # Channel index, if omitted the order of the channels below the object determines the index
    index = 1

    # Dante device name, can be omitted but should not.
    node_name = "MyDanteDevice_2"

  [[source.channel]]

    # Dante channel name, mandatory for Dante devices
    channel_name = "SDMS0000022"

    # Channel index, if omitted the order of the channels below the object determines the index
    index = 2

    # Dante device name, can be omitted but should not.
    node_name = "MyDanteDevice_2"

  # Object defined delay settings, if omitted on object basis default settings apply
  [source.delay]

    # Delay value (ms) on switch over, if omitted on object basis default settings apply
    switch = 800

  # Object defined Symetrix settings, mandatory
  [source.symnet]

    # Symetrix Control Number Value for this source object, mandatory
    control_value = 2

[[source]]

  # Name of the source or destination object, can be omitted
  name = "MyDanteSource_3"

  [[source.channel]]

    # Dante channel name, mandatory for Dante devices
    channel_name = "SDMS0000031"

    # Channel index, if omitted the order of the channels below the object determines the index
    index = 1

    # Dante device name, can be omitted but should not.
    node_name = "MyDanteDevice_3"

  [[source.channel]]

    # Dante channel name, mandatory for Dante devices
    channel_name = "SDMS0000032"

    # Channel index, if omitted the order of the channels below the object determines the index
    index = 2

    # Dante device name, can be omitted but should not.
    node_name = "MyDanteDevice_3"

  # Object defined delay settings, if omitted on object basis default settings apply
  [source.delay]

    # Delay value (ms) on switch over, if omitted on object basis default settings apply
    switch = 800

  # Object defined Symetrix settings, mandatory
  [source.symnet]

    # Symetrix Control Number Value for this source object, mandatory
    control_value = 3

symnet_config_destinations.toml

The destination config file describe the destinations which are identified by a Symetrix Symnet control number. If there is no Symetrix device present or SDM should not listen to Symetrix this file can be omitted

Caution

Use UNIX file fomatting when editing the file

Info

Generate yourself an example Generate example

See the fully commented definition below

  • The file must be in TOML format
  • Check the correct syntax online toml-lint
  • Mandatory means that it will not work without.
# Defaults can be omitted if all values are defined destination specific.
# Destination object defined values are taking precedence
[default]

  # Default delay settings for all objects that are not carrying its own settings for delay
  # Object defined values are taking precedence , can be omitted
  [default.delay]

    # Delay value (ms) on disconnect, if omitted on object basis default settings apply
    disconnect = 2000

  # Default Symetrix settings for all objects that are not carrying its own settings for delay
  # Object defined values are taking precedence, can be omitted
  [default.symnet]

    # Symetrix Site ID, defined in project settings, if omitted on object basis default settings apply
    site_id = 2

    # Symetrix DSP IP Address (v4), if omitted on object basis default settings apply
    unit_ip = "127.0.0.1"

[[destination]]

  # Name of the source or destination object, can be omitted
  name = "MyDanteDestination_1"

  [[destination.channel]]

    # Dante channel name, mandatory for Dante devices
    channel_name = "SDMD0000011"

    # Channel index, if omitted the order of the channels below the object determines the index
    index = 1

    # Dante device name, can be omitted but should not.
    node_name = "MyDanteDevice_1"

  [[destination.channel]]

    # Dante channel name, mandatory for Dante devices
    channel_name = "SDMD0000012"

    # Channel index, if omitted the order of the channels below the object determines the index
    index = 2

    # Dante device name, can be omitted but should not.
    node_name = "MyDanteDevice_1"

  # Object defined delay settings, if omitted on object basis default settings apply
  [destination.delay]

    # Delay value (ms) on disconnect, if omitted on object basis default settings apply
    disconnect = 800

  # Object defined Symetrix settings, mandatory
  [destination.symnet]

    # Symetrix Control Number for this destination object, mandatory
    control_id = 5001

    # Symetrix Control Number that is feed back to Symetrix once the destination has changed, can be omitted
    feedback_id = 6001

    # Symetrix Site ID, defined in project settings, if omitted on object basis default settings apply
    site_id = 3

    # Symetrix DSP IP Address (v4), if omitted on object basis default settings apply
    unit_ip = "127.0.0.2"

[[destination]]

  # Name of the source or destination object, can be omitted
  name = "MyDanteDestination_2"

  [[destination.channel]]

    # Dante channel name, mandatory for Dante devices
    channel_name = "SDMD0000021"

    # Channel index, if omitted the order of the channels below the object determines the index
    index = 1

    # Dante device name, can be omitted but should not.
    node_name = "MyDanteDevice_2"

  [[destination.channel]]

    # Dante channel name, mandatory for Dante devices
    channel_name = "SDMD0000022"

    # Channel index, if omitted the order of the channels below the object determines the index
    index = 2

    # Dante device name, can be omitted but should not.
    node_name = "MyDanteDevice_2"

  # Object defined delay settings, if omitted on object basis default settings apply
  [destination.delay]

    # Delay value (ms) on disconnect, if omitted on object basis default settings apply
    disconnect = 800

  # Object defined Symetrix settings, mandatory
  [destination.symnet]

    # Symetrix Control Number for this destination object, mandatory
    control_id = 5002

    # Symetrix Control Number that is feed back to Symetrix once the destination has changed, can be omitted
    feedback_id = 6002

    # Symetrix Site ID, defined in project settings, if omitted on object basis default settings apply
    site_id = 3

    # Symetrix DSP IP Address (v4), if omitted on object basis default settings apply
    unit_ip = "127.0.0.2"