📄 NEMA TS Actuation Wiring

NEMA TS Actuation Wiring

NEMA TS Actuation wiring gives you powerful, flexible control over how traffic signal detectors behave — ensuring precise actuation while fully meeting NEMA TS specifications. It includes advanced fault handling to keep intersections safe even when issues arise, such as sensor failures or communication problems.

This app lets you define virtual connections between detection sources (like sensors or LiDAR) and output actuators (like signal controller inputs), with built-in safety mechanisms that prioritize reliability and compliance.

Concepts

Wire

A Wire is a virtual connection that links detection input sources to detector outputs. It organizes your setup for clarity and ease of management. 

We recommend creating one Wire per approach (e.g., northbound, southbound) — this keeps configurations intuitive and scalable.

Handler

Each Wire contains one or more Handlers. A Handler maps inputs (sensors) to a single output (actuator) and includes three core components:  
  • Fault Monitored Interfaces — Continuously checks selected interfaces for issues. If a problem is detected, the Handler enters a faulted state and can force a safe recall (e.g., placing phases in recall to prevent unsafe conditions) — critical for intersection safety. 
  • Sensors — Define the logic for when a call (detection) should occur. Multiple sensors can be combined — a call triggers if any meet their conditions. 
  • Actuator — Controls how the call is sent to the output device.

Sensor (input)

Choose from a variety of smart sensor types, each tailored to common detection needs:

  • Presence — Standard stop-bar behavior: Holds a call while objects are in the zone. Includes anti-clipping logic to avoid false calls on left turns.
  • Count — Triggers a single call per detection event — ideal for counting vehicles.
  • Advance — Single-pulse actuation for upstream advance detection.
  • Waiting — Detects dwell time for waiting objects — perfect for automatic pedestrian calls or crosswalk staging.
  • Speed — Activates only when objects are within a defined speed range.
  • Object Tag — Holds calls based on specific object tags (e.g., emergency vehicles).
  • Phase Lock — Locks a call during red phases and releases during green — great for improving presence detection on challenging inputs.

Actuator (output)

The Actuator sends the call to your chosen interface with customizable behavior:

  • Traffic Signal — Full access to all 128 NEMA detector channels (vehicle and pedestrian).
  • Digital/Analog Hardware — Outputs to physical I/O with options like pulse, delay, extend, and more.

Supports precise, configurable call timing to match your operational needs.

User Interface

Summary Page

This page shows a summary of configured detector mappings

  1. Wiring group name
  2. Green = enabled, grey = disabled
  3. Enabled/disabled indicator for that group
  4. Actuation handler, describing what it maps and how it behaves
  5. Wire actions: edit, clone, delete
  6. Create a new wire
💡

It's recommended to group wires by heading to make it easier to find them

Wire Configuration

  1. Enable/disable the wire
  2. Name of the wire
  3. Handler description
  4. Handler actions: edit, delete
  5. Add handler action

Handler Configuration

  1. Interface fault monitoring
  2. Add another sensor
  3. Actuator settings
  4. Sensor settings
  5. Add detector to actuator
  6. Save handler (does not commit changes until you save the wire)

Configuration

Stopbar

REST API

GET /api/app/nema-ts-actuation-wiring/wires

Get configured wires
GET /api/app/nema-ts-actuation-wiring/wires HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61

HTTP/1.1 200 OK
Content-Type: application/json

{"wires":[{"id":2,"settings":{"enabled":false,"handlers":[{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0},"channels":[{"call":1,"clear":0,"id":9}],"fault":"call","interface":25,"type":"digital-analog-hardware"},"interfaces":[14],"sensors":[{"count":0,"filter":["vehicle","pedestrian","cyclist","unclassified"],"test":">","type":"presence","zones":[24]}]},{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0},"channels":[{"call":1,"clear":0,"id":10}],"fault":"call","interface":25,"type":"digital-analog-hardware"},"interfaces":[14],"sensors":[{"count":0,"filter":["vehicle","pedestrian","cyclist","unclassified"],"test":">","type":"presence","zones":[25]}]},{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0},"channels":[{"call":1,"clear":0,"id":11}],"fault":"call","interface":25,"type":"digital-analog-hardware"},"interfaces":[14],"sensors":[{"count":0,"filter":["vehicle","pedestrian","cyclist","unclassified"],"test":">","type":"presence","zones":[26]}]},{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0},"channels":[{"call":1,"clear":0,"id":12}],"fault":"call","interface":25,"type":"digital-analog-hardware"},"interfaces":[14],"sensors":[{"count":0,"filter":["vehicle","pedestrian","cyclist","unclassified"],"test":">","type":"presence","zones":[27]}]},{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0,"pulse":150},"detectors":[{"action":"pulse","id":64,"type":"vehicle"}],"fault":"clear","interface":16,"type":"traffic-signal"},"interfaces":[],"sensors":[{"filter":["vehicle","cyclist","unclassified"],"type":"count","zones":[28]}]}],"name":"dgagsd"}},{"id":3,"settings":{"enabled":true,"handlers":[{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0,"pulse":0},"detectors":[{"action":"call","id":1,"type":"vehicle"}],"fault":"call","interface":16,"type":"traffic-signal"},"interfaces":[14],"sensors":[{"count":0,"filter":["vehicle","unclassified"],"test":">","type":"presence","zones":[32]}]},{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0,"pulse":0},"detectors":[{"action":"call","id":2,"type":"vehicle"}],"fault":"call","interface":16,"type":"traffic-signal"},"interfaces":[14],"sensors":[{"count":0,"filter":["vehicle","unclassified"],"test":">","type":"presence","zones":[33]}]},{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0,"pulse":0},"detectors":[{"action":"call","id":3,"type":"vehicle"}],"fault":"call","interface":16,"type":"traffic-signal"},"interfaces":[14],"sensors":[{"count":0,"filter":["vehicle","unclassified"],"test":">","type":"presence","zones":[21]}]},{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0,"pulse":0},"detectors":[{"action":"call","id":4,"type":"vehicle"}],"fault":"call","interface":16,"type":"traffic-signal"},"interfaces":[14],"sensors":[{"count":0,"filter":["vehicle","unclassified"],"test":">","type":"presence","zones":[29]}]},{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0,"pulse":0},"detectors":[{"action":"call","id":5,"type":"vehicle"}],"fault":"call","interface":16,"type":"traffic-signal"},"interfaces":[14],"sensors":[{"count":0,"filter":["vehicle","unclassified"],"test":">","type":"presence","zones":[30]}]},{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0,"pulse":0},"detectors":[{"action":"call","id":6,"type":"vehicle"}],"fault":"call","interface":16,"type":"traffic-signal"},"interfaces":[14],"sensors":[{"count":0,"filter":["vehicle","unclassified"],"test":">","type":"presence","zones":[31]}]},{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0,"pulse":0},"detectors":[{"action":"call","id":7,"type":"vehicle"}],"fault":"call","interface":16,"type":"traffic-signal"},"interfaces":[14],"sensors":[{"count":0,"filter":["vehicle","unclassified"],"test":">","type":"presence","zones":[35]}]},{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0,"pulse":0},"detectors":[{"action":"call","id":8,"type":"vehicle"}],"fault":"call","interface":16,"type":"traffic-signal"},"interfaces":[14],"sensors":[{"count":0,"filter":["vehicle","unclassified"],"test":">","type":"presence","zones":[20]}]},{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0,"pulse":500},"detectors":[{"action":"pulse","id":9,"type":"vehicle"}],"fault":"clear","interface":16,"type":"traffic-signal"},"interfaces":[14],"sensors":[{"filter":["vehicle","unclassified"],"type":"count","zones":[23]}]}],"name":"outsight"}}]}
wires[]
array
A list of configured wires
wires[].id
number
ID of the wire
wires[].settings.name
string
Name of the wire group
wires[].settings.enabled
boolean
Enable or disable the wire
wires[].settings.handlers[]
array
A list of handlers, which are used to control one or more detector channels (actuator) based on specific input (sensors)
wires[].settings.handlers[].interfaces[]
array[number]
A list of interface IDs to monitor operational state. While any interface from this list is not in an operational state, the handler will be placed into a fault state and actuate based on configured fault behavior
wires[].settings.handlers[].sensors[]
array
A list of sensors and their configurations. Sensors are input sources to determine if actuation should take place or not. Each sensor has its own set of configurations
wires[].settings.handlers[].actuator
object
The actuator responsible for detector control behavior
wires[].settings.handlers[].actuator.interface
number
ID of the interface to actuate
wires[].settings.handlers[].actuator.type
string
Type of actuator; interface type being actuated. The settings available depend on what this type is, see the above example of the two different settings available

Values: traffic-signal, digital-analog-hardware
wires[].settings.handlers[].actuator.fault
string
Fault behavior configuration

nothing --> do nothing when an interface is not operational
clear --> clear all calls when an interface is not operational
call --> place all channels into call when an interface is not operational
config --> place all channels into call honoring standard configurations like delay, max-call-time etc.

POST /api/app/nema-ts-actuation-wiring/wires

Create a new wire
POST /api/app/nema-ts-actuation-wiring/wires HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Content-Type: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61

{"settings":{"handlers":[{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0,"pulse":0},"detectors":[{"action":"call","id":1,"type":"vehicle"}],"fault":"call","interface":16,"type":"traffic-signal"},"interfaces":[14],"sensors":[{"count":0,"filter":["vehicle","unclassified"],"test":">","type":"presence","zones":[32]}]},{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0,"pulse":0},"detectors":[{"action":"call","id":2,"type":"vehicle"}],"fault":"call","interface":16,"type":"traffic-signal"},"interfaces":[14],"sensors":[{"count":0,"filter":["vehicle","unclassified"],"test":">","type":"presence","zones":[33]}]},{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0,"pulse":0},"detectors":[{"action":"call","id":3,"type":"vehicle"}],"fault":"call","interface":16,"type":"traffic-signal"},"interfaces":[14],"sensors":[{"count":0,"filter":["vehicle","unclassified"],"test":">","type":"presence","zones":[21]}]},{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0,"pulse":0},"detectors":[{"action":"call","id":4,"type":"vehicle"}],"fault":"call","interface":16,"type":"traffic-signal"},"interfaces":[14],"sensors":[{"count":0,"filter":["vehicle","unclassified"],"test":">","type":"presence","zones":[29]}]},{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0,"pulse":0},"detectors":[{"action":"call","id":5,"type":"vehicle"}],"fault":"call","interface":16,"type":"traffic-signal"},"interfaces":[14],"sensors":[{"count":0,"filter":["vehicle","unclassified"],"test":">","type":"presence","zones":[30]}]},{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0,"pulse":0},"detectors":[{"action":"call","id":6,"type":"vehicle"}],"fault":"call","interface":16,"type":"traffic-signal"},"interfaces":[14],"sensors":[{"count":0,"filter":["vehicle","unclassified"],"test":">","type":"presence","zones":[31]}]},{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0,"pulse":0},"detectors":[{"action":"call","id":7,"type":"vehicle"}],"fault":"call","interface":16,"type":"traffic-signal"},"interfaces":[14],"sensors":[{"count":0,"filter":["vehicle","unclassified"],"test":">","type":"presence","zones":[35]}]},{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0,"pulse":0},"detectors":[{"action":"call","id":8,"type":"vehicle"}],"fault":"call","interface":16,"type":"traffic-signal"},"interfaces":[14],"sensors":[{"count":0,"filter":["vehicle","unclassified"],"test":">","type":"presence","zones":[20]}]},{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0,"pulse":500},"detectors":[{"action":"pulse","id":9,"type":"vehicle"}],"fault":"clear","interface":16,"type":"traffic-signal"},"interfaces":[14],"sensors":[{"filter":["vehicle","unclassified"],"type":"count","zones":[23]}]}],"name":"outsight","enabled":true}}

HTTP/1.1 200 OK
Content-Type: application/json

PUT /api/app/nema-ts-actuation-wiring/wires?id={id}

Update a wire
PUT /api/app/nema-ts-actuation-wiring/wires?id={id} HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Content-Type: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61

{"settings":{"handlers":[{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0,"pulse":0},"detectors":[{"action":"call","id":1,"type":"vehicle"}],"fault":"call","interface":16,"type":"traffic-signal"},"interfaces":[14],"sensors":[{"count":0,"filter":["vehicle","unclassified"],"test":">","type":"presence","zones":[32]}]},{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0,"pulse":0},"detectors":[{"action":"call","id":2,"type":"vehicle"}],"fault":"call","interface":16,"type":"traffic-signal"},"interfaces":[14],"sensors":[{"count":0,"filter":["vehicle","unclassified"],"test":">","type":"presence","zones":[33]}]},{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0,"pulse":0},"detectors":[{"action":"call","id":3,"type":"vehicle"}],"fault":"call","interface":16,"type":"traffic-signal"},"interfaces":[14],"sensors":[{"count":0,"filter":["vehicle","unclassified"],"test":">","type":"presence","zones":[21]}]},{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0,"pulse":0},"detectors":[{"action":"call","id":4,"type":"vehicle"}],"fault":"call","interface":16,"type":"traffic-signal"},"interfaces":[14],"sensors":[{"count":0,"filter":["vehicle","unclassified"],"test":">","type":"presence","zones":[29]}]},{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0,"pulse":0},"detectors":[{"action":"call","id":5,"type":"vehicle"}],"fault":"call","interface":16,"type":"traffic-signal"},"interfaces":[14],"sensors":[{"count":0,"filter":["vehicle","unclassified"],"test":">","type":"presence","zones":[30]}]},{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0,"pulse":0},"detectors":[{"action":"call","id":6,"type":"vehicle"}],"fault":"call","interface":16,"type":"traffic-signal"},"interfaces":[14],"sensors":[{"count":0,"filter":["vehicle","unclassified"],"test":">","type":"presence","zones":[31]}]},{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0,"pulse":0},"detectors":[{"action":"call","id":7,"type":"vehicle"}],"fault":"call","interface":16,"type":"traffic-signal"},"interfaces":[14],"sensors":[{"count":0,"filter":["vehicle","unclassified"],"test":">","type":"presence","zones":[35]}]},{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0,"pulse":0},"detectors":[{"action":"call","id":8,"type":"vehicle"}],"fault":"call","interface":16,"type":"traffic-signal"},"interfaces":[14],"sensors":[{"count":0,"filter":["vehicle","unclassified"],"test":">","type":"presence","zones":[20]}]},{"actuator":{"call":{"delay":0,"extend":0,"max":0,"min":0,"pulse":500},"detectors":[{"action":"pulse","id":9,"type":"vehicle"}],"fault":"clear","interface":16,"type":"traffic-signal"},"interfaces":[14],"sensors":[{"filter":["vehicle","unclassified"],"type":"count","zones":[23]}]}],"name":"outsight","enabled":true}}
id
number
ID of the wire to update
HTTP/1.1 200 OK
Content-Type: application/json

DELETE /api/app/nema-ts-actuation-wiring/wires?id={id}

Delete a wire
DELETE /api/app/nema-ts-actuation-wiring/wires?id={id} HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61
id
number
ID of the wire to delete
HTTP/1.1 200 OK
Content-Type: application/json