Skip to content

spike: validate neolink MQTT behavior against real Reolink hardware (blocks #25) #26

Description

@badbread

Goal

Validate neolink's real MQTT behavior against a real Reolink before building the actuator-control backend in #25. The exact topic strings are documented, but the behaviors the backend depends on (floodlight revert semantics, siren timing, and whether control messages are retained) are not — and building against assumptions would produce wrong or unsafe code. This blocks #25's backend.

Hands-on hardware task (no agent can watch a physical light/siren). Run against one mains-powered Reolink that has a floodlight and/or siren.

Confirmed topic map (source: neolink README, to be verified live)

Prefix neolink/{CAMERANAME}.

Control:

  • /control/floodlight [on|off]direct lamp on/off (the on-demand button; separate from auto)
  • /control/floodlight_tasks [on|off] — automatic triggers only
  • /control/ir [on|off|auto] — IR lights (note the explicit auto = revert value)
  • /control/led [on|off]
  • /control/pir [on|off]
  • /control/siren on — one-shot, no off (self-terminates)
  • /control/reboot

Status: /status (connection + LastWill = offline detection), /status/motion [on|off], /status/pir (XML), /status/battery_level, /status/floodlight_tasks.

Docs are silent on retained/QoS — that is the single most important thing to nail.

Runbook

  1. Point neolink at one camera + an MQTT broker (see neolink's sample_config.toml; Reolink Baichuan port is 9000). Run it (Docker). Note and pin the neolink image tag used.
  2. Subscribe to the full tree: mosquitto_sub -h <broker> -v -t 'neolink/#'. Confirm the topics above appear.
  3. Run each test and record the result:
Test Command Record
Floodlight on-demand mosquitto_pub -t neolink/<cam>/control/floodlight -m on Lamp on now? Command→light latency?
Floodlight revert ... control/floodlight -m off Lamp off? Does the auto night/motion behavior still work afterward?
IR revert value ... control/ir -m auto Returns to auto light-detection?
Siren ... control/siren -m on Sounds? Duration? Any stop/off? Retrigger interval?
Retained (safety) publish floodlight on, restart the broker, reconnect Does neolink re-fire it? (retained ON re-firing a siren after a broker restart would be a real hazard — the backend must publish non-retained)
Status echoes watch status/motion, status, status/floodlight_tasks What updates, how fast?

Deliverable

The filled-in table above + the pinned image tag. That converts #25's assumptions into confirmed facts; the #25 backend build proceeds from there.

Open questions this resolves (that shape #25's design)

  • Floodlight momentary/revert model (publish on, TTL, publish off; does auto behavior resume cleanly?).
  • Siren state model (confirm one-shot self-terminating → trigger + Crumb-side cooldown, no revert).
  • Retained/QoS (determines the boot-sweep + non-retained publish requirements).
  • Actuation latency (optimistic vs confirmed UI state).

Blocks #25.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions