Thingino Hub is a central control panel for your Thingino cameras. If you have multiple security cameras around your home or property, this hub lets you:
- See live previews of all cameras in one place
- Check camera settings and status without visiting each camera's web interface
- Send commands to cameras (take a snapshot, arm/disarm, record a clip)
- Get snapshots in Telegram when you ask for them
- Manage everything through a simple web dashboard
Think of it as the "nerve center" for all your cameras — one place to monitor, control, and configure everything.
Without a hub: You have to log into each camera individually, remember different IP addresses, and manually trigger actions.
With Thingino Hub:
- One dashboard shows all cameras at once
- Control cameras via Telegram (no need to open a web browser)
- Automatic camera discovery — new cameras appear in the roster as they come online
- Secure pairing so cameras can talk to the hub without manual configuration
- View camera health, firmware version, and other metadata in one place
- Web Dashboard – Live camera roster with preview snapshots, status, and quick actions
- Multi-Camera Support – Handle dozens of cameras with automatic discovery
- Telegram Integration – Send commands and receive snapshots via Telegram bot
- Camera Enrollment – Easy connect/pair workflows with built-in credential validation
- Snapshot Preview – View the latest image from each camera (cached for fast loading)
- Native API Support – For cameras with Thingino's native API, get direct API control
- History Tracking – Local database of actions and camera state changes
- Optional Web UI Auth – Restrict dashboard access with username/password
- MQTT-Based – All camera communication happens over MQTT (secure, reliable)
You'll need:
- An MQTT broker running somewhere on your network (or this machine)
- A Telegram bot token (optional, but recommended for remote access)
- At least one Thingino camera on the same network
If you want to control cameras via Telegram:
- Open Telegram and find
@BotFather - Send
/newbot - Choose a bot name and username
- Copy the bot token
cp config.example.yaml config.yamlEdit config.yaml and set:
telegram.token– paste your bot token (or leave empty to skip Telegram)mqtt.host– your MQTT broker's IP address (e.g.,192.168.1.10)
If your MQTT broker is on the same machine as the hub:
mqtt:
host: "host.containers.internal"sh run-podman.shThe hub will:
- Build a Docker container
- Start running in the background
- Expose the web dashboard on
http://127.0.0.1:8080
Go to http://127.0.0.1:8080 in your browser.
You should see:
- Status of the Telegram bot and MQTT broker
- A roster of discovered cameras (if any are online)
The hub now includes an optional FastAPI-powered teaser API that runs alongside the existing Flask UI with minimal disruption.
Set:
export HUB_API_V2_ENABLED=1
export HUB_API_V2_PORT=8090Then restart the hub and open:
http://127.0.0.1:8090/api/v2/docshttp://127.0.0.1:8090/api/v2/healthhttp://127.0.0.1:8090/api/v2/cameras
When this flag is enabled, selected dashboard and camera-detail UI actions are routed through API v2 first, with automatic fallback to the existing Flask handler if API v2 is unavailable.
Practical teaser use case: quickly identify cameras that need operator attention:
curl -s "http://127.0.0.1:8090/api/v2/cameras/attention?minimum_severity=high&limit=10"This endpoint surfaces cameras with actionable issues (offline state, API failures, incomplete setup, MQTT visibility/command problems) and returns suggested next actions.
Migration progress teaser: a first set of action endpoints is now available in API v2:
POST /api/v2/cameras/{camera_id}/hydratePOST /api/v2/cameras/{camera_id}/refresh/apiPOST /api/v2/cameras/{camera_id}/refresh/onvifPOST /api/v2/cameras/{camera_id}/refresh/snapshotPOST /api/v2/cameras/{camera_id}/service/{service_name}/{operation}POST /api/v2/cameras/{camera_id}/streaming/startPOST /api/v2/cameras/{camera_id}/streaming/stopPOST /api/v2/cameras/{camera_id}/streaming/restartPOST /api/v2/cameras/{camera_id}/rescanPOST /api/v2/cameras/{camera_id}/privacyPOST /api/v2/cameras/{camera_id}/daynightPOST /api/v2/cameras/{camera_id}/recordPOST /api/v2/cameras/{camera_id}/config/patchPOST /api/v2/cameras/{camera_id}/apply-supported-configPOST /api/v2/cameras/{camera_id}/send2-test/{service_name}POST /api/v2/enrollPOST /api/v2/cameras/{camera_id}/connectPOST /api/v2/bulk-actionPOST /api/v2/enroll/probePOST /api/v2/enroll/pairing-bundlePOST /api/v2/enroll/pairing-installPOST /api/v2/cameras/{camera_id}/pairPOST /api/v2/cameras/{camera_id}/delete
Example:
curl -sX POST "http://127.0.0.1:8090/api/v2/cameras/cam1/refresh/api"curl -sX POST "http://127.0.0.1:8090/api/v2/cameras/cam1/service/streaming/restart"curl -sX POST "http://127.0.0.1:8090/api/v2/cameras/cam1/daynight" \
-H "Content-Type: application/json" \
-d '{"mode":"night"}'curl -sX POST "http://127.0.0.1:8090/api/v2/cameras/cam1/send2-test/telegram" \
-H "Content-Type: application/json" \
-d '{"verbose":true,"send_type":"photo"}'curl -sX POST "http://127.0.0.1:8090/api/v2/cameras/cam1/pair"curl -sX POST "http://127.0.0.1:8090/api/v2/enroll" \
-H "Content-Type: application/json" \
-d '{"camera_id":"cam1","ip":"192.168.1.10","onvif_username":"thingino","onvif_password":"thingino"}'curl -sX POST "http://127.0.0.1:8090/api/v2/cameras/cam1/connect" \
-H "Content-Type: application/json" \
-d '{"onvif_username":"thingino","onvif_password":"thingino"}'curl -sX POST "http://127.0.0.1:8090/api/v2/bulk-action" \
-H "Content-Type: application/json" \
-d '{"camera_ids":["cam1","cam2"],"action":"refresh-api"}'Live validation checklist for newly started agents:
curl -s "http://127.0.0.1:8090/api/v2/cameras/cam1/payload"Look for:
mqtt_command_capable: truepresent_on_mqtt_broker: truesetup_status: pair(before pair) orsetup_status: paired(after pair)
- Open the
/enrollpage in the dashboard - Enter your camera's IP address
- Enter valid ONVIF credentials (usually
thingino/thingino) - Click "Connect"
The hub will pair with the camera and add it to your roster.
- Learn about configuration: docs/configuration.md
- Understand the web dashboard: docs/web-ui.md
- Set up cameras for pairing: docs/camera-setup-and-pairing.md
- Deploy to production: docs/deployment-and-runtime.md
- Troubleshoot issues: docs/operations.md
- quickstart-home.md – Detailed home setup
- configuration.md – All config options explained
- deployment-and-runtime.md – Running in production, using Podman, env variables
- web-ui.md – Dashboard features and behavior
- camera-setup-and-pairing.md – How camera pairing works
- mqtt-protocol.md – MQTT message format (for developers)
- operations.md – Running tests, troubleshooting, access control
- ai-session-onboarding.md – For developers working on the hub itself