diff --git a/README.md b/README.md index 0607353..c1a9fa8 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,51 @@ # utils +* [camsutil](https://git.hmp.today/pavel.muhortov/utils#camsutil) * [ffmpeger.py](https://git.hmp.today/pavel.muhortov/utils#ffmpeger-py) * [procutil.py](https://git.hmp.today/pavel.muhortov/utils#procutil-py) * [sendmail.py](https://git.hmp.today/pavel.muhortov/utils#sendmail-py) +____ +## camsutil +**Description:** Creation of a request to the camera API based on the prepared template +**Dependencies:** Python 3 (tested version 3.9.5) + +| PARAMETERS | DESCRIPTION | DEFAULT| +|-------------|-------------|--------| +|**--host**|hostname or ip address|**REQUIRED**| +|**--user**|valid user|**REQUIRED**| +|**--password**|valid password|**REQUIRED**| +|**--template**|the name of an existing template|**REQUIRED**| +|**[-h]**|print help and exit|| +|**[--protocol]**|http, https, etc.|http| +|**[--port]**|port number|80| +|**[--channel]**|ptz channel number|101| +|**[--vid]**|video channel id|1| +|**[--x]**|horizontal positioning: azimuth, pan|0| +|**[--y]**|vertical positioning: elevation, tilt|0| +|**[--z]**|zoom direction, absolute zoom|0| +|**[--speed]**|positioning speed: from 1 to 7|1| +|**[--time]**|momentary duration, max 100000ms|100000| +|**[--text]**|overlay text content|`None`| +|**[--enabled]**|enabled (true) or disabled (false) overlay text|true| + +Example usage in terminal with Python: +```shell +python3 ./ptz.py --host HOST --user USER --password PASS --template Hikvision_GetCapabilities.html +``` +Example usage in terminal with make the script executable: +```shell +chmod u+x ./ptz.py +ptz.py --host HOST --user USER --password PASS --template Hikvision_PtzPreset.html --vid 2 --speed 5 +``` +Example usage in Python: +```Python +from camsutil import ptz + +data = ptz.API(host='HOST', user='USER', password='PASS', template='Hikvision_GetJPEG.html', x=1920, y=1080).call() +with open('img.jpg', 'wb') as output: + output.write(data) +``` + ____ ## ffmpeger.py **Description:** FFmpeg management from Python diff --git a/camsutil/ptz.py b/camsutil/ptz.py index b791769..ad521a5 100644 --- a/camsutil/ptz.py +++ b/camsutil/ptz.py @@ -1,144 +1,144 @@ -#!/usr/bin/env python3 - - -import urllib.request -from os import path, sep - - -class API: - """ - Creation of a request to the camera API based on the prepared template. - """ - def __init__(self, host: str, user: str, password: str, template: str, - protocol: str = 'http', port: int = 80, channel: int = 101, vid: int = 1, - x: int = 0, y: int = 0, z: int = 0, speed: int = 1, time: int = 100000, - text: str = '', enabled: str = 'true'): - """ - Object constructor - :param host: hostname or ip address - :param user: valid user - :param password: valid password - :param template: the name of an existing template - :param protocol: http, https, etc. - :param port: port number - :param channel: ptz channel number - :param vid: video channel id - :param x: horizontal positioning: azimuth, pan - :param y: vertical positioning: elevation, tilt - :param z: zoom direction, absolute zoom - :param speed: positioning speed: from 1 to 7 - :param time: momentary duration, max 100000ms - :param text: overlay text content - :param enabled: enabled (true) or disabled (false) overlay text - """ - self._host = host - self._user = user - self._pswd = password - self._temp = path.dirname(path.abspath(__file__)) + sep + 'templates' + sep + template - self._protocol = protocol - self._port = port - self._channel = channel - self._id = vid - self._x = x - self._y = y - self._z = z - self._speed = speed - self._time = time - self._message = text - self._enabledMessage = enabled - self._data = '' - self._type = '' - self._url = self._protocol + '://' + self._host + ':' + str(self._port) - self._method = '' - - with open(self._temp) as file: - content = file.read() \ - .replace('@CHANNEL@', str(self._channel)) \ - .replace('@ID@', str(self._id)) \ - .replace('@XXXX@', str(self._x)) \ - .replace('@YYYY@', str(self._y)) \ - .replace('@ZZZZ@', str(self._z)) \ - .replace('@TTTT@', str(self._time)) \ - .replace('@SSSS@', str(self._speed)) \ - .replace('@MSG@', str(self._message)) \ - .replace('@ENABLED@', str(self._enabledMessage)) - for line in content.splitlines(): - if not ('