# arnold config.yaml — Terminator I/O server configuration # ───────────────────────────────────────────────────────────────────────────── # DEVICES # Each device is a Terminator I/O EBC100 Ethernet base controller. # Modules are listed in physical slot order (left-to-right after the EBC100). # Supported module types: T1H-08TDS, T1H-08ND3, T1H-16ND3, T1H-08NA (inputs) # T1H-08TD1, T1H-08TD2, T1H-16TD1, T1H-08TA, T1H-08TRS (outputs) # ───────────────────────────────────────────────────────────────────────────── devices: - id: ebc100_main host: 192.168.3.202 port: 502 unit_id: 1 poll_interval_ms: 50 # 20 Hz — well within EBC100 capability modules: - slot: 1 type: T1H-08TDS # 8-point 24VDC sinking digital input points: 8 - slot: 2 type: T1H-08TDS points: 8 - slot: 3 type: T1H-08TDS points: 8 # ── Uncomment and adapt when output modules are added ────────────────── # - slot: 4 # type: T1H-08TD1 # 8-point 24VDC sourcing digital output # points: 8 # ───────────────────────────────────────────────────────────────────────────── # LOGICAL I/O # Give human-readable names to individual I/O points. # device: must match a devices[].id above # slot: physical slot number (1-based, matches modules list) # point: point within that module (1-based, 1–8 for 8-pt modules) # direction: must match the module type (input or output) # ───────────────────────────────────────────────────────────────────────────── logical_io: # ── Slot 1 — Module 1 inputs ─────────────────────────────────────────────── - name: input_1_1 device: ebc100_main slot: 1 point: 1 direction: input - name: input_1_2 device: ebc100_main slot: 1 point: 2 direction: input - name: input_1_3 device: ebc100_main slot: 1 point: 3 direction: input - name: input_1_4 device: ebc100_main slot: 1 point: 4 direction: input - name: input_1_5 device: ebc100_main slot: 1 point: 5 direction: input - name: input_1_6 device: ebc100_main slot: 1 point: 6 direction: input - name: input_1_7 device: ebc100_main slot: 1 point: 7 direction: input - name: input_1_8 device: ebc100_main slot: 1 point: 8 direction: input # ── Slot 2 — Module 2 inputs ─────────────────────────────────────────────── - name: input_2_1 device: ebc100_main slot: 2 point: 1 direction: input - name: input_2_2 device: ebc100_main slot: 2 point: 2 direction: input - name: input_2_3 device: ebc100_main slot: 2 point: 3 direction: input - name: input_2_4 device: ebc100_main slot: 2 point: 4 direction: input - name: input_2_5 device: ebc100_main slot: 2 point: 5 direction: input - name: input_2_6 device: ebc100_main slot: 2 point: 6 direction: input - name: input_2_7 device: ebc100_main slot: 2 point: 7 direction: input - name: input_2_8 device: ebc100_main slot: 2 point: 8 direction: input # ── Slot 3 — Module 3 inputs ─────────────────────────────────────────────── - name: input_3_1 device: ebc100_main slot: 3 point: 1 direction: input - name: input_3_2 device: ebc100_main slot: 3 point: 2 direction: input - name: input_3_3 device: ebc100_main slot: 3 point: 3 direction: input - name: input_3_4 device: ebc100_main slot: 3 point: 4 direction: input - name: input_3_5 device: ebc100_main slot: 3 point: 5 direction: input - name: input_3_6 device: ebc100_main slot: 3 point: 6 direction: input - name: input_3_7 device: ebc100_main slot: 3 point: 7 direction: input - name: input_3_8 device: ebc100_main slot: 3 point: 8 direction: input # ── Outputs (uncomment when output module is added) ──────────────────────── # - name: output_4_1 # device: ebc100_main # slot: 4 # point: 1 # direction: output # ───────────────────────────────────────────────────────────────────────────── # SEQUENCES # name: unique identifier (used in POST /sequences/{name}/run) # description: human-readable label # steps: list of timed actions, executed in t_ms order # # Step fields: # t_ms: milliseconds from sequence T=0 when this step fires (absolute) # action: set_output | check_input # signal: logical_io name # state: (set_output only) true=ON false=OFF # expected: (check_input only) true=ON false=OFF — failure aborts sequence # # ───────────────────────────────────────────────────────────────────────────── sequences: # ── Example: verify all inputs on module 1 are OFF at rest ──────────────── - name: check_all_inputs_off description: "Verify all 24 inputs are de-energised (rest state check)" steps: - t_ms: 0 action: check_input signal: input_1_1 expected: false - t_ms: 0 action: check_input signal: input_1_2 expected: false - t_ms: 0 action: check_input signal: input_1_3 expected: false - t_ms: 0 action: check_input signal: input_1_4 expected: false - t_ms: 0 action: check_input signal: input_1_5 expected: false - t_ms: 0 action: check_input signal: input_1_6 expected: false - t_ms: 0 action: check_input signal: input_1_7 expected: false - t_ms: 0 action: check_input signal: input_1_8 expected: false - t_ms: 0 action: check_input signal: input_2_1 expected: false - t_ms: 0 action: check_input signal: input_2_2 expected: false - t_ms: 0 action: check_input signal: input_2_3 expected: false - t_ms: 0 action: check_input signal: input_2_4 expected: false - t_ms: 0 action: check_input signal: input_2_5 expected: false - t_ms: 0 action: check_input signal: input_2_6 expected: false - t_ms: 0 action: check_input signal: input_2_7 expected: false - t_ms: 0 action: check_input signal: input_2_8 expected: false - t_ms: 0 action: check_input signal: input_3_1 expected: false - t_ms: 0 action: check_input signal: input_3_2 expected: false - t_ms: 0 action: check_input signal: input_3_3 expected: false - t_ms: 0 action: check_input signal: input_3_4 expected: false - t_ms: 0 action: check_input signal: input_3_5 expected: false - t_ms: 0 action: check_input signal: input_3_6 expected: false - t_ms: 0 action: check_input signal: input_3_7 expected: false - t_ms: 0 action: check_input signal: input_3_8 expected: false # ── Example: output sequencing template (requires output module in slot 4) ─ # - name: actuate_and_verify # description: "Set output, wait 500ms, verify input feedback" # steps: # - t_ms: 0 # action: set_output # signal: output_4_1 # state: true # - t_ms: 500 # action: check_input # signal: input_1_1 # expected: true # - t_ms: 1000 # action: set_output # signal: output_4_1 # state: false