reolink

reolink

Current Release
1.4.3
Developer
Andy Grundt
License
MIT

reolink adapter for ioBroker

Adapter for ioBroker Plattform to get Reolink camera information.

In general, all newer Reolink cameras support API commands. They just differ in their supported commands.

One reminder to the password. Try with or without URI encoding, when you have only one special char. Better use no special char and simply a longer password for the same security. Check with http://cam.ip.add.ress/api.cgi?cmd=GetDevInfo&channel=0&user=username&password=yoursecurity if your credentials are working.

If you wish to have any specific API command included...just let me know.

Implemented functions

SET

  • PTZ Control / PTZ Guard
  • Push Notification
  • Set Autofocus values: 0,1
  • Set IR light values: Auto, Off
  • Set LED light
  • Set Mail Notification values: 0, 1
  • Play Audio Alarm
  • Zoom Focus

Functions can be triggert by changing reolink..settings states.

GET

  • Device Info
  • PTZ Info
  • Drive Info
  • Network Info
  • Motion Detection
  • Auto Focus
  • Snapshot
  • IR Light
  • LED Light
  • Mail Notification

Push notification settings

Push notifications to a phone will only be provided if the following conditions are met:

  • The Push notifications switch in the adapter is ON.
  • For NVRs, both the global and channel switch are ON.
  • The Push-notification in the Reolink App of that phone is ON.

The Push-notification in the Reolink app is independent of the adapter setting. It is also independent of the settings on other phones connected to the same camera. Reolink does this so you have an independent way of turning off push notifications per phone. This means deactivating push at iobroker does not touch the toggle button in the app at all.

Example Usage of get image:

sendTo("reolink.0",{action: "snap"}, function(result){
    sendTo("matrix-org.0",{file:result});
});

// content from result is JSON :

{ "type": "image/png","base64": "iVBORw....askldfj" }

for telegram this is working

sendTo("reolink.0",{action: "snap"}, function(result){
    const buffer =Buffer.from(result.base64, "base64");
    sendTo('telegram.0', {
        text: buffer,
        type: "photo",
        caption: 'the image'
    });
});

Battery-Powered Cameras

Battery cameras (Argus PT, Argus 3 Pro, ...) use a proprietary protocol and are supported via neolink — an open-source tool that is downloaded automatically on first use.

Quick Setup

  1. Enable in Config: ✅ "Battery-powered camera"
  2. Enter Camera UID: Find in Reolink app → Device Info
  3. Install Dependency (Linux):
    sudo apt install gstreamer1.0-rtsp
    
  4. Start Adapter → RTSP streams available at rtsp://<server-ip>:8554/<CameraName>/mainStream

The server IP is detected automatically. <CameraName> is the name set in the adapter config.

Battery Saving

Battery drains fast when active! The adapter uses an auto-disable strategy:

  • streams.enable (boolean) — Enable/disable RTSP streaming

    • Default: false (off = battery saving)
    • Auto-disables after 30 s (configurable)
    • Stream pauses automatically when no client is connected
  • mqtt.enable (boolean) — Enable MQTT integration for motion/battery/floodlight/PIR

    • Required for status updates and floodlight/PIR control
    • Auto-disables after configurable timeout (battery protection)
    • Configure broker in adapter settings

Battery Camera States

StateTypeR/WDescription
streams.enablebooleanR/WStart/stop RTSP stream
streams.mainStreamstringRRTSP URL for main stream
streams.subStreamstringRRTSP URL for sub stream
mqtt.enablebooleanR/WStart/stop MQTT integration
floodlightbooleanR/WFloodlight on/off — status via MQTT, control via MQTT (auto-starts MQTT)
pirbooleanR/WPIR sensor on/off — status via MQTT, control via MQTT (auto-starts MQTT)
snapshotbuttonWCapture snapshot via RTSP
query.batterybuttonWQuery battery level via neolink CLI
query.previewbuttonWCapture snapshot via RTSP
ptz.presetnumberR/WMove camera to saved preset position (0–9)
ptz.up/down/left/rightbooleanR/WHold-to-move (true=start, false=stop)
ptz.speednumberR/WPTZ movement speed (1–100, default 32)
status.motionbooleanRMotion detected (via MQTT)
status.battery_levelnumberRBattery level in % (via neolink CLI, periodic)
snapshotImagestringRLast snapshot image (base64, data URI)
snapshotStatusstringRSnapshot status: idle / capturing / success / error
info.neolink_statusstringRneolink process state: stopped / running

PTZ Control

PTZ works via neolink CLI — no MQTT needed.

Directional movement (ptz.up/down/left/right):

  • Set to true → camera starts moving, auto-stops after 5 s
  • Set to false → camera stops immediately
  • In VIS: configure a button with mousedown=true / mouseup=false for hold-to-move
  • Adjust speed with ptz.speed (1–100)

Presets (ptz.preset): Set to a preset number (0–9) to move to that saved position.

Features

✅ RTSP streams (main + sub)
✅ Snapshot capture (requires ffmpeg)
✅ Floodlight control (status + control via MQTT)
✅ PIR sensor control (status + control via MQTT)
✅ Motion detection (via MQTT)
✅ Battery level (periodic via neolink CLI)
✅ Preview image (auto-updated via MQTT)
✅ PTZ control — directional movement + presets (via neolink CLI)
✅ Multi-platform — neolink binary downloaded automatically (Linux x64/ARM/ARM64, macOS)

MQTT Setup

Configure in adapter settings:

  • Broker Host (default: 127.0.0.1)
  • Broker Port (default: 1883)
  • Username / Password (optional)
  • Auto-disable timeout (default: 30 s, battery protection)

MQTT is used for camera status updates and control. The adapter subscribes automatically when mqtt.enable is set to true.

Status topics (published by camera via neolink):

  • neolink/<camera>/status/motion
  • neolink/<camera>/status/battery_level
  • neolink/<camera>/status/floodlight
  • neolink/<camera>/status/pir
  • neolink/<camera>/status/preview

Control topics (published by adapter to camera):

  • neolink/<camera>/control/floodlight
  • neolink/<camera>/control/pir

Troubleshooting

ProblemSolution
"Camera UID required"Enter UID from Reolink app → Device Info
"libgstrtspserver not found"sudo apt install gstreamer1.0-rtsp
Stream won't connectEnable streams.enable, wait ~5 s for neolink to start
Snapshot failsInstall ffmpeg: sudo apt install ffmpeg
Floodlight/PIR doesn't reactMQTT starts automatically — wait ~3 s after toggling
MQTT NotAuthorizedCheck broker credentials; neolink uses credentials = ["user", "pass"] format
Battery drains fastDisable streaming when not in use; use MQTT only for motion
PTZ unresponsiveEach PTZ command needs ~2 s (P2P camera login) — this is normal

Doorbell Cameras

Wired Reolink doorbells use the standard HTTP API plus ONVIF for ring detection. Enable "Doorbell camera" in the adapter config to add doorbell-specific states. (This is independent of the battery-camera option.)

StateTypeR/WDescription
sensor.visitor.statebooleanRDoorbell button pressed (ring) — delivered via ONVIF event (auto-clears after 10 s)
sensor.visitor.supportbooleanRWhether the camera reports a visitor AI type via HTTP (model-dependent)
doorbell.audioFileListstringRJSON list of stored audio files (id, fileName, ...) for quick/auto reply
doorbell.quickReplyPlaynumberWWrite an audio file id to make the doorbell play that message
doorbell.autoReplyEnabledbooleanR/WEnable/disable automatic reply when the doorbell rings
doorbell.autoReplyFileIdnumberR/WAudio file id played as auto reply (see doorbell.audioFileList)
doorbell.autoReplyTimeoutnumberR/WSeconds after the ring before the auto reply is triggered

Look up the available file ids in doorbell.audioFileList, then use that id for doorbell.quickReplyPlay or doorbell.autoReplyFileId.

Ring detection (ONVIF)

On most Reolink doorbells the button press is not available through the HTTP polling API (GetAiState has no visitor field). The adapter therefore opens an ONVIF PullPoint subscription and listens for the visitor event — when someone rings, sensor.visitor.state is set to true (and auto-clears after 10 s). React to that state change in your scripts/automations.

  • Requires ONVIF enabled on the camera (Reolink app → Settings → Network → Advanced → ONVIF).
  • Set the ONVIF Port in the adapter config (Reolink default: 8000).
  • No inbound port / webhook on the ioBroker host is needed — the adapter long-polls the camera.

Known Working Cameras

HTTP API (Standard)

RLC-420-5MP, E1 Outdoor, E1 Zoom, RLC-522, RLC-810A, RLC-823A, Duo 3 PoE

Battery Cameras (via Neolink)

Reolink Argus PT, Reolink Argus 3 Pro

Doorbells (HTTP API + ONVIF ring detection)

Reolink Video Doorbell PoE (D340P)


Changelog

1.4.3 (2026-10-27)

  • (@GermanBluefox) Doorbell support: ring detection via ONVIF events (sensor.visitor.state), quick reply and auto reply (enable via "Doorbell camera" in config; requires ONVIF enabled on the camera)
  • (oelison) Adapter requires node.js >= 22 now

1.4.2 (2026-03-16)

  • (oelison) fast fix for issue #230

1.4.1 (2026-03-15)

  • (oelison) fix issue #187

1.4.0 (2026-03-13)

  • (bloop16) Battery camera support via neolink
  • (oelison) Adapter requires node.js >= 20 now.

1.3.0 (2025-12-20)

  • (agross) AiCfg config
  • (oelison) bump some libs #202
  • (bluefox) migration to ts
  • (bot) revoking classic token #204
  • (oelison) state changes from info log to debug #206

License

MIT License

Copyright (c) 2026 Andy Grundt andygrundt@gmail.com

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.