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
- 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
- Wiring group name
- Green = enabled, grey = disabled
- Enabled/disabled indicator for that group
- Actuation handler, describing what it maps and how it behaves
- Wire actions: edit, clone, delete
- Create a new wire


Wire Configuration
- Enable/disable the wire
- Name of the wire
- Handler description
- Handler actions: edit, delete
- Add handler action
Handler Configuration
- Interface fault monitoring
- Add another sensor
- Actuator settings
- Sensor settings
- Add detector to actuator
- Save handler (does not commit changes until you save the wire)

Configuration
Stopbar
REST API
GET /api/app/nema-ts-actuation-wiring/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
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}
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 /api/app/nema-ts-actuation-wiring/wires?id={id} HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61id number | ID of the wire to delete |
HTTP/1.1 200 OK
Content-Type: application/json