Metadata-Version: 2.4
Name: reolink_aio
Version: 0.21.0
Summary: Reolink NVR/cameras API package
Home-page: https://github.com/starkillerOG/reolink_aio
Author: starkillerOG
Author-email: starkiller.og@gmail.com
License: MIT
Platform: any
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: Home Automation
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: aiohttp
Requires-Dist: aiortsp
Requires-Dist: orjson
Requires-Dist: pycryptodomex
Requires-Dist: typing_extensions
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: license
Dynamic: license-file
Dynamic: platform
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary
Reolink NVR/cameras API package
The `reolink_aio` Python package allows you to integrate your [Reolink](https://www.reolink.com/) devices (NVR/cameras) in your application.
### Description
This is a package implementing Reolink IP NVR and camera API. Also it’s providing a way to subscribe to Reolink ONVIF SWN events, so that real-time events can be received on a webhook.
### Show your appreciation
If you appreciate the reolink integration and want to support its development, please consider [sponsering](https://github.com/sponsors/starkillerOG) the upstream library or purchase Reolink products through [this affiliate link](https://reolink.pxf.io/q44QWq).
### Prerequisites
- Python 3.11
### Installation
```
pip3 install reolink-aio
```
or manually:
````bash
git clone https://github.com/StarkillerOG/reolink_aio
cd reolink_aio/
pip3 install .
````
### Usage
````python
from reolink_aio.api import Host
import asyncio
# Create a host-object (representing either a camera, or NVR with several channels)
host = Host('192.168.1.10', 'user', 'mypassword')
# Obtain/cache NVR or camera settings and capabilities, like model name, ports, HDD size, etc:
await host.get_host_data()
# Get the subscribtion port and host-device name:
subscribtion_port = host.onvif_port
name = host.nvr_name
# Obtain/cache states of features:
await host.get_states()
# Print some state value on the channel with index 0:
print(host.ir_enabled(0))
# Enable the infrared lights on the channel with index 1:
await host.set_ir_lights(1, True)
# Enable the spotlight on the channel with index 1:
await host.set_spotlight(1, True)
# Enable the siren on the channel with index 0:
await host.set_siren(0, True)
# Now subscribe to events, suppose our webhook url is http://192.168.1.11/webhook123
await host.subscribe('http://192.168.1.11/webhook123')
# After some minutes check the renew timer (keep the eventing alive):
if (host.renewtimer() <= 100):
await host.renew()
# Logout and disconnect
await host.logout()
````
### Example
This is an example of the usage of the API. In this case we want to retrive and print the Mac Address of the NVR.
````python
from reolink_aio.api import Host
import asyncio
async def print_mac_address():
# initialize the host
host = Host('192.168.1.109','admin', 'admin1234', port=80)
# connect and obtain/cache device settings and capabilities
await host.get_host_data()
# check if it is a camera or an NVR
print(f"It is an NVR: {host.is_nvr}, number of channels: {host.num_channel}")
# print mac address
print(f"MAC: {host.mac_address}")
# close the device connection
await host.logout()
if __name__ == "__main__":
asyncio.run(print_mac_address())
````
### TCP push event example
This is an example of how to receive TCP push events.
The callback will be called each time a push is received.
The state variables of the Host class will automatically be updated when a push comes in.
````python
from reolink_aio.api import Host
import asyncio
import logging
logging.basicConfig(level="INFO")
_LOGGER = logging.getLogger(__name__)
def callback() -> None:
_LOGGER.info("Callback called")
async def tcp_push_demo():
# initialize the host
host = Host(host="192.168.1.109", username="admin", password="admin1234")
# connect and obtain/cache device settings and capabilities
await host.get_host_data()
# Register callback and subscribe to events
host.baichuan.register_callback("unique_id_string", callback)
await host.baichuan.subscribe_events()
# Process TCP events for 2 minutes
await asyncio.sleep(120)
# unsubscribe and close the device connection
await host.baichuan.unsubscribe_events()
await host.logout()
if __name__ == "__main__":
asyncio.run(tcp_push_demo())
````
### Acknowledgment
This library is officially authorized by Reolink, with @starkillerOG as the main developer, and it is built with the support of Reolink's official resources.
This library is based on the work of:
- @fwestenberg: https://github.com/fwestenberg/reolink_dev
The baichuan part of this library is based on the work of:
- @QuantumEntangledAndy and @thirtythreeforty: https://github.com/QuantumEntangledAndy/neolink
**Author**
@starkillerOG: https://github.com/starkillerOG
**Contributors**
- @xannor: https://github.com/xannor
- @mnpg: https://github.com/mnpg