Skip to content

Create templates

Validating your submission using JSON schema

To ensure that your created device or module types meet the minimum technical requirements you can validate them against the following JSON schemas using a schema validator of your choice.

If you don't have any experience, we recommend jsonschemavalidator.net. Just copy and paste the appropriate schema from this page to the left side and your created templates to the right side. The tool will inform you of any errors.

Note

This validation only ensures that basic criteria are met, like correct names of properties. Some simple regex are used to look out for obvious typos or prohibited characters. However, this validation does not check wether the ids referencing other objects like the manufacturer, connector, etc. actually exist.

JSON schema for device type
Schema for device types
    {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "title": "DeviceTypeCreate model",
      "description": "JSON document describing the device type",
      "type": "object",
      "properties": {
        "id": {
          "description": "Id of the device type. Consists of id of manufacturer followed by id of device type. See documentation for rules.",
          "type": "string",
          "pattern": "^(?=.{1,48}$)(?!.*--)[a-z](?:[a-z-]{0,14}[a-z])?-[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$",
          "maxLength": 48,
          "examples": ["lawo-auhd-core"]
        },
        "version": {
          "description": "Version number of the template. Minor version must be increased with every change. Major version must only be changed when targeting a different API version.",
          "type": "string",
          "pattern": "^\\d{1,2}\\.\\d{1,2}$",
          "examples": ["1.1"]
        },
        "name": {
          "description": "Name of the device as given by manufacturer",
          "type": "string",
          "maxLength": 256,
          "examples": ["A__UHD Core"]
        },
        "manufacturerId": {
          "description": "Id of the manufacturer of the device type.",
          "type": "string",
          "patter": "^(?!.*--)[a-z](?:[a-z-]{0,14}[a-z])$",
          "maxLength": 16,
          "examples": ["lawo"]
        },
        "orderCode": {
          "description": "Order code for the device type as used by the manufacturer.",
          "type": ["string", "null"],
          "examples": ["UHD-CORE-R2"]
        },
        "orderNumber": {
          "description": "Order number for the device type as used by the manufacturer.",
          "type": ["string", "null"],
          "examples": ["710/20"]
        },
        "climateLoad": {
          "description": "The maximum heat dissipation of the device type.",
          "type": "integer",
          "minimum": 0,
          "examples": ["220"]
        },
        "rackType": {
          "description": "Type of rack the device can be mounted in.",
          "enum": ["NONE", "19INCH"],
          "type": "string",
          "examples": ["19INCH"]
        },
        "rackHeight": {
          "description": "Height of the device in rack units. 0 if device is not rackmountable.",
          "type": "number",
          "minimum": 0,
          "examples": [1]
        },
        "rackDepth": {
          "description": "Depth of the device within the rack in mm. Measured from the plane of the rack to the furthest protrusion of the device.",
          "type": "number",
          "minimum": 0,
          "examples": [324]
        },
        "portTypes": {
          "description": "List of all types of ports on the device type.",
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": {
                "description": "Name of the port, as printed on the device.",
                "type": "string",
                "examples": ["MGMT A"]
              },
              "direction": {
                "description": "Direction of the port type. See documentation for explainations of the possible values.",
                "enum": [
                  "IN",
                  "OUT",
                  "INOUT",
                  "BIDI",
                  "UP",
                  "DOWN",
                  "FRONT",
                  "BACK"
                ],
                "type": "string",
                "examples": ["UP"]
              },
              "connectorId": {
                "description": "Id of the connector.",
                "type": "string",
                "pattern": "^[A-Za-z0-9](?:[A-Za-z0-9]|[_.](?=[A-Za-z0-9]))*_(?:f|m|h)$",
                "examples": ["RJ45_f"]
              },
              "compatibleSignalTypes": {
                "description": "List of signal types that are compatible with this port.",
                "type": "array",
                "items": {
                  "type": "string",
                  "pattern": "^(?!.*--)(?:[a-z](?:[a-z-]{0,14}[a-z])?_)?[A-Z0-9]+(?:_[A-Z0-9]+)*$",
                  "examples": ["10BASE_T", "100BASE_TX", "1000BASE_T"]
                },
                "uniqueItems": true
              }
            },
            "required": [
              "name",
              "direction",
              "connectorId",
              "compatibleSignalTypes"
            ],
            "additionalProperties": false
          }
        },
        "moduleSlotTypes": {
          "description": "List of all types of module slots on the device type.",
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": {
                "description": "Name of the module slot, as labeled on the device.",
                "type": "string",
                "examples": ["1"]
              },
              "compatibleModuleSlotFormFactors": {
                "description": "List of module slot factors that can physically fit into the slot.",
                "type": "array",
                "uniqueItems": true,
                "items": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
                  "examples": ["sfp"]
                }
              },
              "compatibleModuleTypes": {
                "description": "List of module types that are guranteed by the manufacturer to work in this slot.",
                "type": "array",
                "uniqueItems": true,
                "items": {
                  "type": "string",
                  "pattern": "^(?=.{1,48}$)(?!.*--)[a-z](?:[a-z-]{0,14}[a-z])?-[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$",
                  "examples": ["lawo-98160-10"]
                }
              },
              "incompatibleModuleTypes": {
                "description": "List of module types that are guranteed by the manufacturer not work in this module slot.",
                "type": "array",
                "uniqueItems": true,
                "items": {
                  "type": "string",
                  "pattern": "^(?=.{1,48}$)(?!.*--)[a-z](?:[a-z-]{0,14}[a-z])?-[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$",
                  "examples": ["directout-sfp-madi-bnc"]
                }
              }
            },
            "required": [
              "name",
              "compatibleModuleSlotFormFactors",
              "compatibleModuleTypes",
              "incompatibleModuleTypes"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "id",
        "version",
        "name",
        "manufacturerId",
        "orderCode",
        "orderNumber",
        "climateLoad",
        "rackType",
        "portTypes",
        "moduleSlotTypes"
      ],
      "dependentRequired": { "rackType": ["rackHeight", "rackDepth"] },
      "additionalProperties": false
    }
JSON schema for module type
Schema for module types
    {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "title": "ModuleTypeCreate model",
      "description": "JSON document describing a module type",
      "type": "object",
      "properties": {
        "id": {
          "description": "Id of the module type. Consists of id of manufacturer followed by id of module type. See documentation for rules.",
          "type": "string",
          "pattern": "^(?=.{1,48}$)(?!.*--)[a-z](?:[a-z-]{0,14}[a-z])?-[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$",
          "maxLength": 48,
          "examples": ["directout-dantemilansrcio"]
        },
        "version": {
          "description": "Version number of the template. Minor version must be increased with every change. Major version must only be changed when targeting a different API version.",
          "type": "string",
          "pattern": "^\\d{1,2}\\.\\d{1,2}$",
          "examples": ["1.1"]
        },
        "name": {
          "description": "Name of the module as given by manufacturer",
          "type": "string",
          "maxLength": 256,
          "examples": ["DANTE.MILAN.SRC.IO"]
        },
        "manufacturerId": {
          "description": "Id of the manufacturer of the device type.",
          "type": "string",
          "patter": "^(?!.*--)[a-z](?:[a-z-]{0,14}[a-z])$",
          "maxLength": 16,
          "examples": ["directout"]
        },
        "orderCode": {
          "description": "Order code for the module type as used by the manufacturer.",
          "type": ["string", "null"],
          "examples": ["DTMILSRCIO"]
        },
        "orderNumber": {
          "description": "Order number for the module type as used by the manufacturer.",
          "type": ["string", "null"],
          "examples": ["DONETDA01"]
        },
        "moduleFormFactorId": {
          "description": "Form factor of the module.",
          "type": ["string", "null"],
          "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
          "examples": ["directout-a-slot"]
        },
        "portTypes": {
          "description": "List of all types of ports on the module type.",
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": {
                "description": "Name of the port, as printed on the device.",
                "type": "string",
                "examples": ["PRI (1)"]
              },
              "direction": {
                "description": "Direction of the port type. See documentation for explainations of the possible values.",
                "enum": [
                  "IN",
                  "OUT",
                  "INOUT",
                  "BIDI",
                  "UP",
                  "DOWN",
                  "FRONT",
                  "BACK"
                ],
                "type": "string",
                "examples": ["UP"]
              },
              "connectorId": {
                "description": "Id of the connector.",
                "type": "string",
                "pattern": "^[A-Za-z0-9](?:[A-Za-z0-9]|[_.](?=[A-Za-z0-9]))*_(?:f|m|h)$",
                "examples": ["RJ45_f"]
              },
              "compatibleSignalTypes": {
                "description": "List of signal types that are compatible with this port.",
                "type": "array",
                "items": {
                  "type": "string",
                  "pattern": "^(?!.*--)(?:[a-z](?:[a-z-]{0,14}[a-z])?_)?[A-Z0-9]+(?:_[A-Z0-9]+)*$",
                  "examples": ["10BASE_T", "100BASE_TX", "1000BASE_T"]
                },
                "uniqueItems": true
              }
            },
            "required": [
              "name",
              "direction",
              "connectorId",
              "compatibleSignalTypes"
            ],
            "additionalProperties": false
          }
        },
        "moduleSlotTypes": {
          "description": "List of all types of module slots on the module type.",
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": {
                "description": "Name of the module slot, as labeled on the device.",
                "type": "string",
                "examples": ["1"]
              },
              "compatibleModuleSlotFormFactors": {
                "description": "List of module slot factors that can physically fit into the slot.",
                "type": "array",
                "uniqueItems": true,
                "items": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
                }
              },
              "compatibleModuleTypes": {
                "description": "List of module types that are guranteed by the manufacturer to work in this slot.",
                "type": "array",
                "uniqueItems": true,
                "items": {
                  "type": "string",
                  "pattern": "^(?=.{1,48}$)(?!.*--)[a-z](?:[a-z-]{0,14}[a-z])?-[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$"
                }
              },
              "incompatibleModuleTypes": {
                "description": "List of module types that are guranteed by the manufacturer not work in this module slot.",
                "type": "array",
                "uniqueItems": true,
                "items": {
                  "type": "string",
                  "pattern": "^(?=.{1,48}$)(?!.*--)[a-z](?:[a-z-]{0,14}[a-z])?-[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$"
                }
              }
            },
            "required": [
              "name",
              "compatibleModuleSlotFormFactors",
              "compatibleModuleTypes",
              "incompatibleModuleTypes"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": ["id", "version", "name", "manufacturerId"],
      "additionalProperties": false
    }

Modeling a device

Consumer video standards

When modeling consumer video ports like HDMI, DisplayPort, etc. care should be take to correctly model the compatibility of the ports.

site_manager does not model the different versions of these standards (e.g HDMI 1.4, HDMI 2.0, DP 1.4, DP 2.0) as these specs are always backwards compatible with all previous generations. Features like HDCP, eARC, etc. and supported resolutions are also not modeled as this would get to complex and documentation for most devices is sparse when it comes to these details.

In general the following matrix describes compatibility between the different standards.

VGA DVI-A DVI-D DVI-I HDMI DP
VGA x x x
DVI-A x x x
DVI-D x x x 1
DVI-I x x x x x 2
HDMI x x x
DP x 3 x

In general it is fine if older standards like DVI are not modeled completely for every device. site_manager is set up in a way that the templates can always be updated later if it should become necessary to model this precisely.

MADI standards

MADI (Multichannel Audio Digital Interface) can be run over a variety of physical layers. The most common are 75 Ohm coaxial cable, single mode or multi mode fiber and twisted pair cabling.

Single mode fiber is almost always 1310 nm, same as SDI. For multi mode fiber it is more complicated. The standard calls for 1300 nm over 62.5 micrometer fiber, same as FDDI. However, most manufacturers seem to have switched to 1310 nm over 50 micrometer fiber, as is common in modern ethernet. In theory both variants should be compatible, so site_manager does not differentiate them. 850 nm is also sometimes used, which is not compatible and therefore its own signal type. CWDM optics are also available from some vendors.

LC couplers

LC couplers as used in keystone panels are often differentiated with different colors for different fiber types and polishes.

Type Polish Color
OS2 PC/UPC blue
OS2 APC green
OM1/OM2 beige
OM3 aqua
OM4 violett
OM5 lime

However, mechanically these couplers are all the same, as they include no optical components at all. The connection between fibers is simply made by aligning the ferrules, which are always the same diameter.

site_manager still differentiates these different couplers and will not let you use a OS2 APC coupler to connect OM3 fiber for example. This decision was made since there is no other mechanism in site_manager to ensure that compatible connectors are used on both side of the coupler.

Neutrik only has one SKU for their OpticalCON Duo couplers, however, site_manager models these as three different module types to allow for better compatibility checks.

Euroblock connectors

Euroblock connectors (also know as Phoenix connectors) are popular in installed AV for audio and control wiring and are also becoming more popular in broadcast devices for GPIO and serial connections. There are many different styles of these connectors, mostly differentiated by their pitch and number of positions/contacts. While a wide range of these connectors exists, the most commonly used ones are 3.5mm, 3.81mm and 5.08mm pitch. Unfortunately most manufacturers do not specify the connector for their equipment. Therefore site_manager also supports an unknown pitch which should be used if the correct pitch can not be determined with absolute certainty.

Pitch Example part from Phoenix Id
3.5mm MC 1,5/ 2-ST-3,5 EURO_35_2p_f
3.81mm MC 1,5/ 2-ST-3,81 EURO_381_2p_f
5.08mm MSTB 2,5/ 2-ST-5,08 EURO_508_2p_f
unknown n/a EURO_XX_2p_f

  1. without audio or HDCP 

  2. without audio or HDCP 

  3. only with DP++