ProtoThis / python-synology

MIT License
55 stars 38 forks source link

SynologyDSMAPIErrorException (400) - "Execution failed" #159

Open Perzan opened 3 years ago

Perzan commented 3 years ago
from synology_dsm import SynologyDSM as sdsm
from synology_dsm.api.surveillance_station import SynoSurveillanceStation

from getpass import getpass

class Camera:
    api:SynoSurveillanceStation
    id:int

    def __init__(self, api:SynoSurveillanceStation, id:int):
        self.api = api
        self.id = id

    @property
    def current_frame(self):
        self.api.capture_camera_image(self.id)

USERNAME = "admin"
PASSWORD = getpass(f"Password for \"{USERNAME}\" > ")

PORT = "5001"

def getapi(host:str) -> SynoSurveillanceStation:
    return sdsm(
        host,
        PORT,
        USERNAME,
        PASSWORD,
        verify_ssl=False,
        use_https=True
    ).surveillance_station

syn01 = getapi("syn01")
syn02 = getapi("syn02")

lobby = Camera(syn01, 10)
corner = Camera(syn02, 23)

current = lobby.current_frame

print(type(current))

This code results in the following error:

Traceback (most recent call last):
  File "c:\Users\Perzan\Desktop\synology-test\test.py", line 39, in <module>
    current = lobby.current_frame
  File "c:\Users\Perzan\Desktop\synology-test\test.py", line 16, in current_frame
    self.api.capture_camera_image(self.id)
  File "C:\Users\Perzan\Desktop\synology-test\lib\site-packages\synology_dsm\api\surveillance_station\__init__.py", line 92, in capture_camera_image
    return self._dsm.get(
  File "C:\Users\Perzan\Desktop\synology-test\lib\site-packages\synology_dsm\synology_dsm.py", line 194, in get
    return self._request("GET", api, method, params, **kwargs)
  File "C:\Users\Perzan\Desktop\synology-test\lib\site-packages\synology_dsm\synology_dsm.py", line 260, in _request
    raise SynologyDSMAPIErrorException(
synology_dsm.exceptions.SynologyDSMAPIErrorException: {'api': 'SYNO.SurveillanceStation.SnapShot', 'code': 400, 'reason': 'Execution failed', 'details': {'param1': '', 'param2': ''}}

I know that this probably doesn't have anything to do with this library since it is an SynologyDSMAPIErrorException, but I wasn't sure what to do from here. Am I using the wrong ID for each camera? When I logged into the interface in my browser, I saw the camera identifier followed by a hyphen and the name of the camera. I used those identifiers in this script.

Perzan commented 3 years ago

I was skimming through some random PDF I found on Google and looked at page 274 and compared what I saw to the code for the capture_camera_image method. I noticed that the method code does not use the dsId field. I don't think this is why there is a problem, but I thought I would share anyway.