Dogma

Introduction


Dogma is a declarative translation unit that describes all aspects of a node. It is written in a special json based schema that the node can interpret to set itself up with the correct configuration.

The configuration cover the following areas:
  • Triggers and Actions
  • Directives
  • Description of locations and areas in a map
  • Reference to other nodes by ID
  • Grouping tags and node selectors
  • References to web services by URL
  • Shared secrets
  • Hardware configuration
  • Lobe configuration
  • And much much more!

Structure


The file contains one root element with the following parts:
  • Zero or more detail sections describing different parts of the node such as references, lobes, secrets and poses
  • Exactly one directive section marked "main" that may reference the detail sections
  • Zero or more secondary directive sections that may reference the detail sections
The main directive section must contain the ID of the node which matches the key-pair in the key-store for the node. If this has not been specified correctly the robot will enter a vegetative safety state and will not respond to any commands.

References & inlining


Detail sections may be inlined directly where they are used or they may be referenced by a hashtag followed by their unique name.

Example of in-lining:

"directive": {
    "name":"A113",
    "description":"Dispose of the plant",
    "secret": {"text":"THIS IS THE SECRET DON'T TELL ANYONE!!"}
}

Example of reference:

"secret": {
    "name":"A113SECRET",
    "text":"THIS IS THE SECRET DON'T TELL ANYONE!!"
}

"directive": {
    "name":"A113",
    "description":"Dispose of the plant",
    "secret": "#A113SECRET"
}

The benefit of in-lining is obviously that it for simple cases saves a lot of lines. The benefit of references is that several sections may reference the same secondary section, making for less copy-pasting and sources of error. Also if many reference it there is a a possibility of considerable savings in number of lines.