Developer Docs

Build Against a Real Platform

These docs cover the practical path: get a camera feed online, connect hardware over MQTT, keep the rig healthy, and launch privately before you ever go public.

Architecture Overview

A practical yourmove node has four moving parts, and each one has a clear job.

1

Physical Rig

Your hardware does the actual work: motion, firing, dispensing, triggering, sensing, or reacting to commands.

2

Camera Feed

Your camera shows the interaction area. That feed needs to be available locally so an edge machine can publish it upstream.

3

Local Edge Runtime

The edge box sits near the rig, publishes live video, creates buffered clips, and reports health back to the platform. Linux is the supported path today.

4

Device Runtime

Your firmware or local client subscribes to commands over MQTT, executes them safely, and reports state, acknowledgements, and results back.

Current Supported Path

💻

Linux Edge Machine

Use a small Linux box near the rig to handle live publishing and buffered clips. That is the path we actively run and support today.

📹

RTSP Camera Source

Expose a clear local camera feed and let the edge runtime publish it upstream. The camera stays local; the edge box handles the bridge.

🤖

ESP32 or Pi Control

Use an ESP32 for direct rig control or a small local computer if your project needs something richer. Both fit the command model.

🖥

Windows Later

We plan to offer a Windows-friendly edge path later, but Linux is the real supported route today and the one to build against now.

BYO Bring-Up Flow

This is the practical path for a developer bringing their own hardware onto the platform today.

1

Create or Claim a Private Node

Start with a private node in the platform so you have a place to configure video, device settings, limits, scheduling, and diagnostics.

2

Register the Device in the Dashboard

Use Register Device in the dashboard to generate the platform-side MQTT identity and the one-time bootstrap credentials for your hardware.

3

Save Credentials Immediately

The MQTT password is shown once on registration. Store it right away and treat it like a real credential, not something the page will keep revealing forever.

4

Wire Up Reporting Before Action

Get presence, capabilities, state/reported, and telemetry flowing before you worry about firing relays or moving motors.

5

Calibrate on the Private Node

Use diagnostics, inversion, limits, and cooldown tuning in the dashboard until motion, firing, and state reporting feel clean and repeatable.

Local Edge Runtime

The edge layer is what makes low-latency video and reliable clip capture practical in the real world.

🖥

What It Does

Publishes the local camera feed upstream, keeps a rolling clip buffer near the rig, and reports runtime health back to the platform.

💻

Current Support

Linux is the supported path today. The current runtime is built around Python, Docker, ffmpeg, and local machine access near the rig.

🎥

Feed Publishing

The edge machine takes a local camera feed and pushes it to the platform ingest path. That keeps the camera private while still enabling live playback.

🎬

Buffered Clips

Clips are captured near the rig so the action itself is not missed. This avoids the delay and timing problems of cloud-started clip recording.

Sample Edge Config

edge/chicken-blaster.sample.json
{
  "node_slug": "chicken-blaster",
  "base_url": "https://yourmove.live",
  "auth_token": "REPLACE_WITH_OWNER_JWT",
  "rtsp_url": "rtsp://admin:password@192.168.0.106:10554/tcp/av0_1",
  "probe_interval_seconds": 2,
  "clip_pre_roll_seconds": 3,
  "clip_post_roll_seconds": 6
}

The edge config tells the local runtime which node it belongs to, where the camera feed lives, how to authenticate back to the platform, and how the clip buffer should behave.

What You Get From Us

Private onboarding inputs
- private node slug
- operator access
- edge config pattern
- live ingest path
- MQTT topics and credentials
- dashboard diagnostics

The goal is not to dump you into a blank page. Once you are in, you should have enough platform-side structure to get a real private node online quickly.

Device Runtime and Firmware

You can run this on an ESP32, a Raspberry Pi, or your own hardware stack as long as it speaks the command lifecycle cleanly.

🤖

Reference Firmware

We already have a working ESP32 control path for motion, relay firing, reporting, bounds, and runtime tuning. That is the best reference point today.

📐

Known Patterns

Pin mappings, inversion settings, soft limits, cooldown tuning, and calibration patterns are already part of the current rig model.

Safety Expectations

Commands need bounds, expiry, safe defaults, and sane fail states. The platform can help, but hardware safety still starts on the device side.

🛠

Diagnostics

The dashboard already supports diagnostics, inversion, motion limits, cooldown tuning, schedule windows, and operator visibility for real-world testing.

Reference Rig Profile

We already have a working reference pattern for a turret-style rig. Builders should not have to reverse-engineer that from scattered commits.

Current ESP32 Pinout

device/esp32_prebuilt/config.example.h
#define YM_PAN_SERVO_PIN 4
#define YM_TILT_SERVO_PIN 5
#define YM_RELAY_PIN 3

#define YM_SERVO_MIN_US 500
#define YM_SERVO_MAX_US 2400
#define YM_COOLDOWN_MS 2000

This is not the only possible hardware profile, but it is a real current one. It gives builders a concrete starting point instead of abstract talk.

What This Pattern Covers

Known-good rig assumptions
- pan / tilt motion
- relay trigger action
- inversion controls
- motion limits
- cooldown tuning
- telemetry and presence
- dashboard diagnostics

If your project looks roughly like a controllable aimed device, this path gets you a lot for free. More exotic rigs can still adapt the same control and reporting model.

MQTT Command Model

At the protocol layer, the goal is simple: commands go out with a lifecycle, and the device reports back what actually happened.

Topic Set at a Glance

Derived from dashboard device prep
nodes/{node_id}/commands
nodes/{node_id}/ack
nodes/{node_id}/result
nodes/{node_id}/presence
nodes/{node_id}/telemetry
nodes/{node_id}/capabilities
nodes/{node_id}/state/reported

Once a node is registered in the dashboard, these are the concrete topics the platform expects your runtime to use.

Credential Hand-Off

Dashboard registration response
- mqtt_node_id
- mqtt_username
- mqtt_password
- runtime_type
- device_type

Those values are what your firmware or local device runtime uses to authenticate and map itself to the correct platform node.

Command Topic

nodes/{node_id}/commands
{
  "command_id": "uuid",
  "class": "action",
  "type": "fire",
  "payload": { "pan": 45.0, "tilt": -12.5 },
  "issued_at": 1710000000,
  "expires_at": 1710000002
}

Your runtime receives commands, validates them, executes them safely, and treats expiry seriously so stale actions do not linger.

Reporting Topics

ack, result, presence, state/reported
{
  "command_id": "uuid",
  "status": "ack"
}

{
  "command_id": "uuid",
  "status": "completed"
}

{
  "state": "online"
}

This reporting loop is what keeps the public UI, dashboard, and diagnostics honest. If the rig is healthy, the platform should know it in near real time.

Private Launch Checklist

This is the path we want developers to follow before a node is ever exposed publicly.

1

Get a Private Node

Request access, get a private node online, and keep it private while you integrate and test.

2

Bring Up Video First

Verify that the local camera feed, edge runtime, and public playback path are stable before worrying about control polish.

3

Connect Commands and Reporting

Subscribe to commands, confirm acknowledgements and state reporting, and make sure the dashboard reflects what the rig is actually doing rather than what you hope it is doing.

4

Calibrate and Harden

Set limits, tune inversion, confirm recovery behavior, and make sure long sessions do not require babysitting.

5

Prepare for Public Launch

Once the node is stable, understandable on camera, and worth replaying, move toward review and public listing.

Build With Us

If you already have hardware or a strong concept, request developer access and we will help you get a private node online.