External device dashboard

List only the agent’s enrolled LAN devices; keep availability honest.

Documentation revision 1 · Contract reference API 54 · Installed readiness unknown

Preview offline card · Complete HTML interaction body · Machine-readable recipe

What runs where

Controller integration

Only explicit decision-model/weather requests leave the phone; direct or relay transport still requires a running reachable phone.

Boundaries

Lifecycle

start

Configure card data, POST the generated HTML interaction; this does not automatically capture or poll.

update

Owner explicitly refreshes; controller stores approved data and posts a replacement card as needed, cancelling old pending cards.

pause

The Pause button suspends this card’s controls and suppresses results from a pending refresh. There is no background job in this starter; an in-flight capture may finish. Controller integrations must separately pause their jobs.

stop

The Stop button stops this card, suppresses late results, and requests controller shutdown through one response. Confirm/close the controller job and DELETE the interaction separately. Local stop is not proof that an external process stopped.

Failures and costs

Complete synthetic contract examples

These fixtures demonstrate contracts. They are not observations from a phone. Replace image/resource IDs with returned authorized IDs. Load request.json as the complete body of POST /v1/interactions; it contains the full offline HTML.

list-empty

{
  "id": "list-empty",
  "request": {
    "method": "GET",
    "path": "/v1/lan/devices"
  },
  "response": {
    "status": 200,
    "body": {
      "devices": [],
      "adapters": [
        {
          "id": "shelly_gen1",
          "actions": [
            "status",
            "relay_on",
            "relay_off"
          ],
          "implemented": true,
          "enrollment": "/v1/lan/devices/enroll",
          "limitations": "Gen1 HTTP Basic or no auth; relay devices only, 1..4 channels; MAC checked before control"
        },
        {
          "id": "openwrt_ubus",
          "actions": [
            "status",
            "dhcp_leases"
          ],
          "implemented": true,
          "enrollment": "/v1/lan/devices/enroll",
          "limitations": "rpcd ubus session login; system.board and dhcp.ipv4leases ACLs; read-only, no router settings changes"
        },
        {
          "id": "tapo_onvif",
          "actions": [
            "status"
          ],
          "implemented": true,
          "enrollment": "/v1/lan/devices/enroll",
          "limitations": "Tapo-style fixed ONVIF port 2020 and RTSP stream1/2; not arbitrary ONVIF cameras; capture and PTZ require lan_camera"
        }
      ],
      "camera_inventory": "/v1/lan-cameras"
    }
  },
  "evidence": "Synthetic contract fixture, not a device observation."
}

Extensions

Source evidence