Protocol-HTTP Advanced Model

The HTTP Device Core is a generic device core that lets a SKAARHOJ controller talk to any device or online service that exposes an HTTP / REST API — power switchers, lighting bridges, media servers, automation platforms, or your own backend. Because it is generic, you tell it exactly which requests to send and how to read the replies; nothing is hard-coded for a specific brand.

Every request is built from a base URL (the device’s address, configured per device) and a path (configured per parameter). For example, with a base URL of ‘https://192.168.10.20/’ and a path of ‘api/v1/recall?preset=3’, the core sends a request to ‘https://192.168.10.20/api/v1/recall?preset=3’. You choose the HTTP method (GET, POST, PUT, PATCH, DELETE), optionally attach headers and a body, and optionally read a value back out of the response.

Configuration

A device is configured on the Setup page of the core’s web UI (and the same fields appear in Reactor’s device-core configuration). These settings are per device — the address and credentials of the specific unit you are talking to.

HTTP Core device Setup page

Models & Devices

The core separates what you can control from which unit you control. A Model holds a set of parameters (the individual HTTP requests) plus global headers that apply to all of them. A Device is one physical/online endpoint — it has a base URL and credentials, and it points at a model. Several devices can share the same model, so you define your control surface once and reuse it across many identical units.

Device dashboard showing the assigned model

Open a model to edit its name and description, manage its global headers, and see the list of parameters it provides. Each parameter links to its own editor.

Model overview with parameter list and global headers

Two ways to define control

The core offers two mechanisms for defining requests:

Opening the web UI

Once a device with a model has been configured, open Reactor and navigate to the Packages menu. Find the HTTP core package and use the button to open its UI. (When running standalone, the UI is reachable at ‘{core address}/app/core-protocol-http/{device id}’.) From here you create, edit, test, import and export parameters.

The parameter editor

Each parameter is a single HTTP request. The editor is split into cards; the left column describes the request, the right column describes how the parameter behaves and which variables it uses.

Parameter editor: Request Path, Headers, Parameter Information and Variables

Request Path

Request Headers

Request Body

Parameter Information

This defines how the parameter appears and behaves in Reactor.

Variables

Any {tag} you type into the path, body or a header is detected automatically and listed as a variable for you to configure. Each variable becomes an input the operator can set in Reactor.

The example below shows a POST parameter that builds a JSON body from three variables and sends a Content-Type header.

POST parameter with JSON body, Content-Type header and variables

Feedback

Feedback controls whether and how the device’s response is reflected back in Reactor.

Feedback card showing a Regex match value configuration

Testing a parameter

Use the Test button (the green test-tube icon at the top of the parameter editor) to fire the request against a real device and see the response — before you ever touch a controller. Pick which configured device to run against, fill in any variables, and send. The response pane shows the request that was sent, the raw reply, any regex matches and the resulting value.

Test dialog with a live response and extracted value

Importing & exporting parameters

Any parameter can be exported to a .json file and imported again — on the same core or a different one. This makes it easy to back up your work, share parameters between models, or build a library of ready-made integrations.

Import parameter dialog (upload JSON file)

New parameter dialog with Import from file option

Generating parameter files with AI

Because parameter files are plain JSON with a small, well-defined structure, you can have an AI assistant write them for you. We provide a companion document — LLM.md — that fully describes the file format, the rules and several worked examples. Paste that document into an assistant such as Claude, then paste your device’s API documentation and ask it to produce one importable .json file per action. Save each file under the name you want the parameter to have and import it as above.

Example walkthrough — controlling a public REST API

This example uses the free, public testing API at ‘https://jsonplaceholder.typicode.com/’, so you can reproduce every step yourself. Five ready-to-import files are attached to this page; import them, or build them by hand following along.

1. Create a device. On the Setup page, set the BaseURL to ‘https://jsonplaceholder.typicode.com/’, leave Authentication as None, and assign it to a model (create one if needed).

2. Add a read-back trigger — ‘Get Todo’. A button that fetches a todo by ID and surfaces its title.

  • Request Type: GET, Path: ‘todos/{id}’
  • Type: Trigger
  • Variable {id}: type Int, range 1–200
  • Feedback: Regex match value with regex "title":\s*"([^"]*)"

Pressing Test against the device returns a real todo and extracts its title, e.g. “delectus aut autem”.

Get Todo.json

3. Add a POST with a body — ‘Create Post’.

  • Request Type: POST, Path: ‘posts’
  • Header: Content-Type: application/json; charset=UTF-8
  • Body: {"title": "{title}", "body": "{body}", "userId": {userId}}
  • Variables: {title} and {body} (String), {userId} (Int 1–10)
  • Type: Trigger

Create Post.json

4. Add a string value — ‘Set Post Title’. A text parameter whose value is PUT to the API.

  • Request Type: PUT, Path: ‘posts/{id}’, Body: {"title": "{value}"}
  • Type: String; Feedback: Confirm on status 2xx
  • Variable {id}: Int 1–100

Set Post Title.json

5. Add a toggle — ‘Publish Post’. An on/off switch that sends a different value for each state.

  • Request Type: PUT, Path: ‘posts/{id}’, Body: {"id": {id}, "published": {value}}
  • Type: Toggle; On Value true, Off Value false
  • Variable {id}: Int 1–100

Publish Post.json

6. Add a delete trigger — ‘Delete Post’. Request Type DELETE, Path ‘posts/{id}’, Type Trigger, variable {id} (Int 1–100).

After adding parameters you may be prompted to Reload Core to push the changes to Reactor; make all your edits first, then reload once.

Delete Post.json

Stored Commands (legacy)

Stored Commands are a simpler mechanism configured directly in Reactor’s device-core settings (not the web UI). Each stored command provides a small set of fixed parameters and is handy for basic on/off control and periodic status polling.

There is also a free-form Cowboy Trigger parameter for one-off requests, where the method, path, body and header are all supplied at runtime in Reactor.

See this page for more info.

Reference

Request methods: GET, POST, PUT, PATCH, DELETE, and Variable (operator chooses at runtime).

Parameter types: Trigger, Toggle, String, Integer, Float.

Feedback types: None; Confirm on status 2xx; Regex match value; Confirm on regex match.

Placeholders: {value} is the parameter’s own value (all types except Trigger); {tag} is a declared variable; escape a literal brace as \{ or \}.

Built-in Help page in the HTTP Core web UI

The web UI also has a built-in Help page summarising parameter types, variables and feedback for quick reference while you work.


Revision #3
Created 15 June 2026 12:06:16 by Samuel Jakobsen
Updated 15 June 2026 12:22:11 by Samuel Jakobsen