mib1185 / py-synologydsm-api

MIT License
15 stars 11 forks source link

API SYNO.SurveillanceStation.Camera does not exists #346

Open ohyeah521 opened 1 month ago

ohyeah521 commented 1 month ago

DSM:7.2.x Surveillance Station:9.2.0-11289

synology_dsm.exceptions.SynologyDSMAPINotExistsException: {'api': 'SYNO.SurveillanceStation.Camera', 'code': -2, 'reason': 'Unknown', 'details': 'API SYNO.SurveillanceStation.Camera does not exists'}

mib1185 commented 1 month ago

Hi @ohyeah521 Do you have a bit more context and details?

ohyeah521 commented 1 month ago
D:\>pydsm_test.py
Creating Valid API
D:\pydsm_test.py:8: DeprecationWarning: verify_ssl is deprecated, use ssl=False instead
  connector=aiohttp.TCPConnector(verify_ssl=False)
Traceback (most recent call last):
  File "D:\pydsm_test.py", line 44, in <module>
    asyncio.run(main())
  File "C:\Python3\Lib\asyncio\runners.py", line 190, in run
    return runner.run(main)
           ^^^^^^^^^^^^^^^^
  File "C:\Python3\Lib\asyncio\runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python3\Lib\asyncio\base_events.py", line 654, in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
  File "D:\pydsm_test.py", line 10, in main
    await do(session)
  File "D:\pydsm_test.py", line 23, in do
    camera_id = cameras[0].camera_id
                ^^^^^^^^^^^^^^^^^^^^
AttributeError: 'SynoCamera' object has no attribute 'camera_id'
ohyeah521 commented 1 month ago

pydsm_test.py source code:

import asyncio
import aiohttp
from synology_dsm import SynologyDSM

async def main():
    print("Creating Valid API")
    async with aiohttp.ClientSession(
        connector=aiohttp.TCPConnector(verify_ssl=False)
    ) as session:
        await do(session)

async def do(session: aiohttp.ClientSession):
    api = SynologyDSM(****************)
    await api.login()

    surveillance = api.surveillance_station
    await surveillance.update() # First update is required

    # Returns a list of cached cameras available
    cameras = surveillance.get_all_cameras()

    # Assuming there's at least one camera, get the first camera_id
    camera_id = cameras[0].camera_id

    # Returns cached camera object by camera_id
    camera = surveillance.get_camera(camera_id)

    # Returns cached motion detection enabled
    motion_setting = camera.is_motion_detection_enabled

    # Return bytes of camera image
    await surveillance.get_camera_image(camera_id)

    # Updates all cameras/motion settings and cahce them
    await surveillance.update()

    # Gets Home Mode status
    home_mode_status = await surveillance.get_home_mode_status()

    # Sets home mode - true is on, false is off
    await surveillance.set_home_mode(True)

if __name__ == "__main__":
    asyncio.run(main())
ohyeah521 commented 1 month ago

I did some testing and found that this error occurs when the SurveillanceStation service crashes. 'details': 'API SYNO.SurveillanceStation.Camera does not exists'

D:\pydsm_test.py:8: DeprecationWarning: verify_ssl is deprecated, use ssl=False instead
  connector=aiohttp.TCPConnector(verify_ssl=False)
Traceback (most recent call last):
  File "D:\pydsm_test.py", line 44, in <module>
    asyncio.run(main())
  File "C:\Python3\Lib\asyncio\runners.py", line 190, in run
    return runner.run(main)
           ^^^^^^^^^^^^^^^^
  File "C:\Python3\Lib\asyncio\runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python3\Lib\asyncio\base_events.py", line 654, in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
  File "D:\pydsm_test.py", line 10, in main
    await do(session)
  File "D:\pydsm_test.py", line 17, in do
    await surveillance.update() # First update is required
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python3\Lib\site-packages\synology_dsm\api\surveillance_station\__init__.py", line 81, in update
    raw_data = await self._dsm.get(self.CAMERA_API_KEY, "List", max_version=7)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python3\Lib\site-packages\synology_dsm\synology_dsm.py", line 239, in get
    return await self._request("GET", api, method, params, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python3\Lib\site-packages\synology_dsm\synology_dsm.py", line 311, in _request
    url, params, kwargs = await self._prepare_request(api, method, params, **kwargs)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python3\Lib\site-packages\synology_dsm\synology_dsm.py", line 282, in _prepare_request
    raise SynologyDSMAPINotExistsException(api)
synology_dsm.exceptions.SynologyDSMAPINotExistsException: {'api': 'SYNO.SurveillanceStation.Camera', 'code': -2, 'reason': 'Unknown', 'details': 'API SYNO.SurveillanceStation.Camera does not exists'}