Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NEED TESTERS (even more for DSM < 6) + feature request aggregator #26

Open
Quentame opened this issue Apr 6, 2020 · 28 comments
Open

NEED TESTERS (even more for DSM < 6) + feature request aggregator #26

Quentame opened this issue Apr 6, 2020 · 28 comments

Comments

@Quentame
Copy link
Collaborator

Quentame commented Apr 6, 2020

Goal of this issue

Collecting people owning a Synology NAS to test, improve and add feature to the library

Need testers for two things :

  • I would like to add a DSM version "auto detect" feature to automatically discover the dsm_version param, and then propably remove it.
    With that done, we may also add support to other DSM versions than actual 5 and 6 ! 🎉

  • Also we need to consolidate the test/const.py file to test DSM < 6 services 🔧

Instructions will come soon to tell you how to do so.

Registration

But first, please comment below copy-pasting this template :
(for nothing/low/medium/high, use ctrl + B to highlight the right option)

## Required informations
| Property         | Value                       |
|------------------|-----------------------------|
| DSM version      |                             |
| Python version   |                             |
| Python XP        | nothing/low/medium/high     |
| Git XP           | nothing/low/medium/high     |
| Environment      | Docker/Mac/Windows/venv/... |
| Using library on | [project](project_url)      |

## Additional informations


## Feature request
- 
- 
@Quentame
Copy link
Collaborator Author

Quentame commented Apr 6, 2020

Required informations

Property Value
DSM version 6.2.2
Python version 3.7.6
Python XP nothing/low/medium/high
Git XP nothing/low/medium/high
Environment Mac + Linux + venv + Docker
Using library on Home Assistant

Additional informations

Maintainer of the library.
Using the library to monitor global status of disks and prevent me of failure, but my goal is to manage notifications & Download Station from my home automation software.

Feature request

  • auto detect API version
  • add Notification service (list + add)
  • add Download Station service (list + add)
  • add Synology Chat (send_message) --> merge HA synology_chat integration to synology_dsm
  • add Synology Surveillance Station --> merge HA synology integration to synology_dsm, used library https://github.com/snjoetw/py-synology

@Quentame
Copy link
Collaborator Author

Quentame commented Apr 6, 2020

@aaska Do you have time to help me implementing an "auto detect" DSM version ?
Asking you since I know you are using DSM 5 (from #9)

If yes, can you register as described ?

@aaska
Copy link
Contributor

aaska commented Apr 6, 2020

Sure, would be happy to help !

Property Value
DSM version DSM 5.2-5967 Update 9
Python version Python 3.8.1
Python XP low
Git XP medium
Environment Mac + docker + RPi 4 (with docker HA)
Using library on Home Assistant

@Quentame
Copy link
Collaborator Author

Quentame commented Apr 9, 2020

@aaska
Everything you need to know for your testing and contribute to a better library tests is in for-testers branch.

Get this branch and open get_data_for_tests.py.

Instructions are there with comments.

@Quentame
Copy link
Collaborator Author

Quentame commented Apr 9, 2020

For the auto detect DSM version, may you paste :
https://$host:$port/webapi/query.cgi?api=SYNO.API.Info&version=1&method=query&query=SYNO.API.Auth

on your browser, while changing $host and $port.

Past the result here.

Thanks.

@chemelli74
Copy link
Contributor

Property Value
DSM version 6.2.2-24992 update 4
Python version 3.8
Python XP low
Git XP medium
Environment Docker
Using library on HomeAssistant

@aaska
Copy link
Contributor

aaska commented Apr 11, 2020

For the auto detect DSM version, may you paste :
https://$host:$port/webapi/query.cgi?api=SYNO.API.Info&version=1&method=query&query=SYNO.API.Auth

on your browser, while changing $host and $port.

Past the result here.

Thanks.

Here is the result of the URL request :

{"data":{"SYNO.API.Auth":{"maxVersion":4,"minVersion":1,"path":"auth.cgi"}},"success":true}

Regarding populating the INFORMATION section : #28
Here are some output

-------------------- INFORMATION --------------------
DEBUG: Requesting URL: 'https://10.0.1.150:5001/webapi/entry.cgi?api=SYNO.DSM.Info&version=1&method=getinfo'
DEBUG: Appending access_token (SID: SID) to url
DEBUG: Request executed: 200
DEBUG: Failed: {"error":{"code":102},"success":false}
DEBUG: Error occured, retrying...
DEBUG: Requesting URL: 'https://10.0.1.150:5001/webapi/entry.cgi?api=SYNO.DSM.Info&version=1&method=getinfo'
DEBUG: Appending access_token (SID: SID) to url
DEBUG: Request executed: 200
DEBUG: Failed: {"error":{"code":102},"success":false}
-------------------- INFORMATION_END --------------------

From digging a little bit, the information would need to be done through the following call :

Request URL: https://xxx.yyy.fr:zzzzz/webapi/_______________________________________________________entry.cgi
Request Method: POST
[{"api":"SYNO.Core.System","method":"info","version":2,"type":"firmware"}]

The output would be :

{
  "data": {
    "has_fail": false,
    "result": [
      {
        "api": "SYNO.Core.System",
        "data": {
          "firmware_date": "2018/12/26",
          "firmware_ver": "DSM 5.2-5967 Update 9",
          "model": "DS410j"
        },
        "method": "info",
        "success": true,
        "version": 2
      }
    ]
  },
  "success": true
}

@ProtoThis
Copy link
Owner

@aaska Removed your public info from previous post. You never know what some people do with that info

@aaska
Copy link
Contributor

aaska commented Apr 11, 2020

@ProtoThis Thank you so much !! Indeed, I've missed this one..

@ProtoThis
Copy link
Owner

@ProtoThis Thank you so much !! Indeed, I've missed this one..

No problem, did check the main website (dog walking service) very nice pictures 🙂.

@aaska
Copy link
Contributor

aaska commented Apr 11, 2020

Ahah 😃 Yeah, this is the wife's activity ! For due diligence, I've removed access from the outside world to the DSM...

@Quentame
Copy link
Collaborator Author

Thanks @aaska for #28 and digging !

Will correct SYNO.DSM.Info, and fix HA 0.109.0dev accordingly.

Also, thanks for the query.cgi?api=SYNO.API.Info that will permits to determine the DSM version & APIs versions.

@chemelli74
Copy link
Contributor

From digging a little bit, the information would need to be done through the following call :

Request URL: https://xxx.yyy.fr:zzzzz/webapi/_______________________________________________________entry.cgi
Request Method: POST
[{"api":"SYNO.Core.System","method":"info","version":2,"type":"firmware"}]

I tried the call with the following command:

curl -k -i -X POST -H 'Content-Type: application/json' -d {"api":"SYNO.Core.System","method":"info","version":2,"type":"firmware"}' https://10.10.10.10:5001/webapi/entry.cgi

but it doesn't work. Am I doing something wrong ?

Simone

@Quentame
Copy link
Collaborator Author

Quentame commented Apr 12, 2020

@aaska
About the INFORMATION, I think you tried the wrong API, you are calling SYNO.Core.System API and we want SYNO.DSM.Info (used by next HA version).

If I can ask you one more thing, do this request on your browser : https://$host:$port/webapi/query.cgi?api=SYNO.API.Info&version=1&method=query&query=ALL.

It will list all DSM API available + their path and min and max versions.
With this included in the library (soon), we won't need to know the DSM version of your NAS !
Plus, we eventually could call any API of the NAS, even if not wrapped in the library !

Thanks.

@Quentame
Copy link
Collaborator Author

I've refactor requests in a new PR #33, if anyone want to review or test, go for it !

@Quentame
Copy link
Collaborator Author

for-testers branch updated

@Quentame
Copy link
Collaborator Author

@aaska May you test HA 0.109.0b2 (or +) ?

@stast1 has a login issue home-assistant/core#34633

@Quentame
Copy link
Collaborator Author

@chemelli74 2SA login available on HA 0.109.0 beta

@chemelli74
Copy link
Contributor

@chemelli74 2SA login available on HA 0.109.0 beta

Working fine. Amazing job. Thank you !!!

I only have a sensor not working: CPU. Value are completly different from those of the system monitor.
Do you have an idea why ?

Simone

@Quentame
Copy link
Collaborator Author

@chemelli74 2SA login available on HA 0.109.0 beta

Working fine. Amazing job. Thank you !!!

I only have a sensor not working: CPU. Value are completly different from those of the system monitor.

Do you have an idea why ?

Simone

Was it the same before ?

Haven’t check actually.

@chemelli74
Copy link
Contributor

Was it the same before ?

Haven’t check actually.

Never used the lib before, all my account have 2SA enabled ;-)

Simone

@stast1
Copy link
Contributor

stast1 commented Apr 28, 2020

DSM 5.2
API SYNO.Storage.CGI.Storage does not exists

https://$host:$port/webapi/query.cgi?api=SYNO.API.Info&version=1&method=query&query=ALL
{"data":{"SYNO.ACEEditor":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.ACEEditor.Preference":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.API.Auth":{"maxVersion":4,"minVersion":1,"path":"auth.cgi"},"SYNO.API.Encryption":{"maxVersion":1,"minVersion":1,"path":"encryption.cgi"},"SYNO.API.Info":{"maxVersion":1,"minVersion":1,"path":"query.cgi"},"SYNO.AudioPlayer.Stream":{"maxVersion":1,"minVersion":1,"path":"AudioPlayer/stream.cgi"},"SYNO.Backup.App":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Backup.App.Backup":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Backup.App.Restore":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Backup.Config.Backup":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Backup.Config.Restore":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Backup.Log":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Backup.Repository":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Backup.Repository.Certificate":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Backup.Repository.PrivilegedUser":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Backup.Restore":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Backup.Server":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Backup.Service.NetworkBackup":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Backup.Service.TimeBackup":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Backup.Service.VersionBackup":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Backup.Share.Restore":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Backup.Source.Folder":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Backup.Storage.Connect.Network":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Backup.Storage.S3.Bucket":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Backup.Storage.S3.Region":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Backup.Storage.Share.Local":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Backup.Storage.Volume.Local":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Backup.Target":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Backup.Target.File":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Backup.Target.Folder":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Backup.Target.Owner":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Backup.Target.PrivilegedUser":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Backup.Task":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Backup.Task.Data":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Backup.Version":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.ACL":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.AHA":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.AHA.Enclosure":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.AHA.Log":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.AHA.Monitor":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.AHA.Network":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.AHA.Node":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.AppNotify":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.AppPortal":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.AppPortal.Config":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.AppPortal.Image":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.AppPortal.Style":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.AppPriv":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.AppPriv.App":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.AppPriv.Rule":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.BandwidthControl":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.BandwidthControl.Protocol":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.BandwidthControl.Status":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.CMS":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.CMS.Cache":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.CMS.Info":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.CMS.Policy":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.CMS.ServerInfo":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.CMS.Token":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Certificate":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Certificate.CRT":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Certificate.CSR":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Certificate.LetsEncrypt":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Certificate.LetsEncrypt.Account":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.CurrentConnection":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.DDNS.ExtIP":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.DDNS.Provider":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.DDNS.Record":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.DDNS.Synology":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.DataCollect":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.DataCollect.Application":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Desktop.Timeout":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Directory.Domain":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Directory.Domain.Conf":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Directory.Domain.Schedule":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Directory.LDAP":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Directory.LDAP.BaseDN":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Directory.LDAP.Profile":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Directory.SSO":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Directory.SSO.utils":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.ExternalDevice.Bluetooth":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.ExternalDevice.Bluetooth.Device":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.ExternalDevice.Bluetooth.Settings":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.ExternalDevice.DefaultPermission":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.ExternalDevice.Printer":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.ExternalDevice.Printer.BonjourSharing":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.ExternalDevice.Printer.Driver":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.ExternalDevice.Printer.Network":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.ExternalDevice.Printer.Network.Host":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.ExternalDevice.Printer.OAuth":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.ExternalDevice.Printer.USB":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.ExternalDevice.Storage.EUnit":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.ExternalDevice.Storage.SD":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.ExternalDevice.Storage.Setting":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.ExternalDevice.Storage.USB":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.ExternalDevice.Storage.eSATA":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.ExternalDevice.UPS":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.EzInternet":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.File":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.File.Thumbnail":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.FileServ.AFP":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.FileServ.FTP":{"maxVersion":3,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.FileServ.FTP.ChrootUser":{"maxVersion":2,"minVersion":2,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.FileServ.FTP.SFTP":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.FileServ.FTP.Security":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.FileServ.NFS":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.FileServ.NFS.AdvancedSetting":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.FileServ.NFS.IDMap":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.FileServ.NFS.Kerberos":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.FileServ.NFS.SharePrivilege":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.FileServ.SMB":{"maxVersion":3,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.FileServ.WebDAV":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.FileServ.WebDAV.CalDAV":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.FileServ.WebDAV.CalDAV.Calendar":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Group":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Group.Member":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Hardware.BeepControl":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Hardware.DCOutput":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Hardware.DCOutput.Task":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Hardware.FanSpeed":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Hardware.Hibernation":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Hardware.LCM":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Hardware.Led.Brightness":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Hardware.MemoryLayout":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Hardware.PowerRecovery":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Hardware.PowerSchedule":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Hardware.ZRAM":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.MediaIndexing":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.MediaIndexing.IndexFolder":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.MediaIndexing.MediaConverter":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.MyDSCenter":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.MyDSCenter.Account":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.MyDSCenter.Purchase":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.MyDSCenter.Unify":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.Bond":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.Bridge":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.DHCPServer":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.DHCPServer.ClientList":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.DHCPServer.PXE":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.DHCPServer.Reservation":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.DHCPServer.WPAD":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.Ethernet":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.IPv6":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.IPv6.Router":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.IPv6.Router.Prefix":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.IPv6Tunnel":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.Interface":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.LocalBridge":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.MACClone":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.PPPoE":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.PPPoE.Relay":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.Proxy":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.Router.ConnectionList":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.Router.CountryCode":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.Router.DMZ":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.Router.Gateway.List":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.Router.LocalLan":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.Router.MacFilter":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.Router.ParentalControl":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.Router.PkgList":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.Router.PortForward":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.Router.Static.Route":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.Router.Topology":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.TrafficControl.RouterRules":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.TrafficControl.Rules":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.UPnPServer":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.USBModem":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.VPN":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.VPN.L2TP":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.VPN.OpenVPN":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.VPN.OpenVPN.CA":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.VPN.PPTP":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.WOL":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.Wifi.Client":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.Wifi.Hotspot":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Network.Wifi.WPS":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Notification.Advance.CustomizedData":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Notification.Advance.FilterSettings":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Notification.Advance.Variables":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Notification.Advance.WarningPercentage":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Notification.CMS":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Notification.CMS.Conf":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Notification.Mail":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Notification.Mail.Auth":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Notification.Mail.Conf":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Notification.Push":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Notification.Push.AuthToken":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Notification.Push.Conf":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Notification.Push.Mail":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Notification.Push.Mobile":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Notification.SMS":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Notification.SMS.Conf":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Notification.SMS.Provider":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.OTP":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.OTP.EnforcePolicy":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Package":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Package.Control":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Package.Installation":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Package.Server":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Package.Setting":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Package.Term":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Package.Uninstallation":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.PortForwarding":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.PortForwarding.Compatibility":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.PortForwarding.RouterConf":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.PortForwarding.RouterInfo":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.PortForwarding.RouterList":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.PortForwarding.Rules":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.PortForwarding.Rules.Serv":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.QuickConnect":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.QuickConnect.Permission":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.QuickConnect.Upnp":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Quota":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.RecycleBin":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.RecycleBin.User":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Region.Language":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Region.NTP":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Region.NTP.Server":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Report":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Report.Analyzer":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Report.Config":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Report.History":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.SNMP":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Security.AutoBlock":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Security.AutoBlock.Rules":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Security.DSM":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Security.DSM.Embed":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Security.DoS":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Security.Firewall.Conf":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Security.Firewall.Rules":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Security.Firewall.Rules.Serv":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Security.VPNPassthrough":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Security.VPNPassthrough.Status":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.SecurityScan.Conf":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.SecurityScan.Operation":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.SecurityScan.Status":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Service":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Service.Conf":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Service.PortInfo":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Share":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Share.Crypto":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Share.Crypto.Key":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Share.CryptoFile":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Share.Fileindex":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Share.Migration":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Share.Migration.Task":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Share.Permission":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Share.Snapshot":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Storage.Disk":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Storage.Pool":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Storage.Volume":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Storage.iSCSILUN":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Storage.iSCSITargets":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.SupportForm.Form":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.SupportForm.Log":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.SupportForm.Service":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.SyslogClient":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.SyslogClient.CA":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.SyslogClient.CustRule":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.SyslogClient.FileTransfer":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.SyslogClient.History":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.SyslogClient.Log":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.SyslogClient.PersonalActivity":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.SyslogClient.Setting.Notify":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.SyslogClient.Setting.Server":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.SyslogClient.Setting.Storage":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.SyslogClient.Status":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.System":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.System.ResetButton":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.System.Utilization":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.TFTP":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.TaskScheduler":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Terminal":{"maxVersion":3,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Theme.Image":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Theme.Login":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Upgrade":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Upgrade.AutoUpgrade":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Upgrade.Group":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Upgrade.Group.Download":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Upgrade.GroupInstall":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Upgrade.GroupInstall.Network":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Upgrade.Patch":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Upgrade.Server":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Upgrade.Server.Download":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Upgrade.Setting":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.User":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.User.Home":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.User.PasswordPolicy":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.UserSettings":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Web.DSM":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Web.DSM.External":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Web.HTTP":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Web.HTTP.Dependency":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Web.HTTP.VHost":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Web.PHP":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Core.Web.PHP.Extension":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.DSM.Application":{"maxVersion":1,"minVersion":1,"path":"dsm/app.cgi"},"SYNO.DSM.AutoBlock":{"maxVersion":1,"minVersion":1,"path":"dsm/autoblock.cgi"},"SYNO.DSM.Connection":{"maxVersion":1,"minVersion":1,"path":"dsm/connection.cgi"},"SYNO.DSM.FindMe":{"maxVersion":1,"minVersion":1,"path":"dsm/findme.cgi"},"SYNO.DSM.Group":{"maxVersion":1,"minVersion":1,"path":"dsm/group.cgi"},"SYNO.DSM.Info":{"maxVersion":1,"minVersion":1,"path":"dsm/info.cgi"},"SYNO.DSM.LogViewer":{"maxVersion":1,"minVersion":1,"path":"dsm/logviewer.cgi"},"SYNO.DSM.Network":{"maxVersion":1,"minVersion":1,"path":"dsm/network.cgi"},"SYNO.DSM.Package":{"maxVersion":1,"minVersion":1,"path":"dsm/package.cgi"},"SYNO.DSM.PushNotification":{"maxVersion":1,"minVersion":1,"path":"dsm/notification.cgi"},"SYNO.DSM.Service":{"maxVersion":1,"minVersion":1,"path":"dsm/service.cgi"},"SYNO.DSM.System":{"maxVersion":1,"minVersion":1,"path":"dsm/system.cgi"},"SYNO.DSM.SystemLoading":{"maxVersion":1,"minVersion":1,"path":"dsm/system_loading.cgi"},"SYNO.DSM.User":{"maxVersion":1,"minVersion":1,"path":"dsm/user.cgi"},"SYNO.DSM.Volume":{"maxVersion":1,"minVersion":1,"path":"dsm/volume.cgi"},"SYNO.DSM.iSCSI":{"maxVersion":1,"minVersion":1,"path":"dsm/iscsi.cgi"},"SYNO.DisasterRecovery.Log":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.DisasterRecovery.Retention":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Entry.Request":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.Entry.Request.Polling":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.FileStation.BackgroundTask":{"maxVersion":2,"minVersion":1,"path":"FileStation/background_task.cgi"},"SYNO.FileStation.CheckExist":{"maxVersion":1,"minVersion":1,"path":"FileStation/file_checkDir.cgi"},"SYNO.FileStation.CheckPermission":{"maxVersion":2,"minVersion":1,"path":"FileStation/file_permission.cgi"},"SYNO.FileStation.Compress":{"maxVersion":2,"minVersion":1,"path":"FileStation/file_compress.cgi"},"SYNO.FileStation.CopyMove":{"maxVersion":2,"minVersion":1,"path":"FileStation/file_MVCP.cgi"},"SYNO.FileStation.CreateFolder":{"maxVersion":1,"minVersion":1,"path":"FileStation/file_crtfdr.cgi"},"SYNO.FileStation.Delete":{"maxVersion":1,"minVersion":1,"path":"FileStation/file_delete.cgi"},"SYNO.FileStation.DirSize":{"maxVersion":1,"minVersion":1,"path":"FileStation/file_dirSize.cgi"},"SYNO.FileStation.Download":{"maxVersion":1,"minVersion":1,"path":"FileStation/file_download.cgi"},"SYNO.FileStation.Extract":{"maxVersion":1,"minVersion":1,"path":"FileStation/file_extract.cgi"},"SYNO.FileStation.Favorite":{"maxVersion":1,"minVersion":1,"path":"FileStation/file_favorite.cgi"},"SYNO.FileStation.Info":{"maxVersion":1,"minVersion":1,"path":"FileStation/info.cgi"},"SYNO.FileStation.List":{"maxVersion":1,"minVersion":1,"path":"FileStation/file_share.cgi"},"SYNO.FileStation.MD5":{"maxVersion":1,"minVersion":1,"path":"FileStation/file_md5.cgi"},"SYNO.FileStation.OpenGoogleDrive":{"maxVersion":1,"minVersion":1,"path":"FileStation/file_opengdrive.cgi"},"SYNO.FileStation.Rename":{"maxVersion":1,"minVersion":1,"path":"FileStation/file_rename.cgi"},"SYNO.FileStation.Search":{"maxVersion":1,"minVersion":1,"path":"FileStation/file_find.cgi"},"SYNO.FileStation.Sharing":{"maxVersion":2,"minVersion":1,"path":"FileStation/file_sharing.cgi"},"SYNO.FileStation.Snapshot":{"maxVersion":1,"minVersion":1,"path":"FileStation/file_snapshot.cgi"},"SYNO.FileStation.Thumb":{"maxVersion":1,"minVersion":1,"path":"FileStation/file_thumb.cgi"},"SYNO.FileStation.Upload":{"maxVersion":1,"minVersion":1,"path":"FileStation/api_upload.cgi"},"SYNO.FileStation.VFS.Connection":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.FileStation.VFS.GDrive":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.FileStation.VFS.Profile":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.FileStation.VFS.Protocol":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.FileStation.VFS.User":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.FileStation.VirtualFolder":{"maxVersion":1,"minVersion":1,"path":"FileStation/file_virtual.cgi"},"SYNO.FolderSharing.Download":{"maxVersion":1,"minVersion":1,"path":"FolderSharing/file_download.cgi"},"SYNO.FolderSharing.List":{"maxVersion":1,"minVersion":1,"path":"FolderSharing/file_share.cgi"},"SYNO.FolderSharing.Thumb":{"maxVersion":1,"minVersion":1,"path":"FolderSharing/file_thumb.cgi"},"SYNO.Package":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.PersonMailAccount":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.PersonMailAccount.Contacts":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.PersonMailAccount.Mail":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.ResourceMonitor.Setting":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.S2S.Client":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.S2S.Client.Job":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.S2S.Server":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.S2S.Server.Pair":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.SocialAccount":{"maxVersion":2,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.SocialAccount.Friend":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"},"SYNO.SocialAccount.Token":{"maxVersion":1,"minVersion":1,"path":"_______________________________________________________entry.cgi","requestFormat":"JSON"}},"success":true}

@Quentame
Copy link
Collaborator Author

Thanks @stast1, nice to have 👍

Actually we already do in tests/api_data/dsm_5/const_5_api_info.py.

I think your issue is caused by a missing condition here:

# Check if API is available
if not self.apis.get(api):
raise SynologyDSMAPINotExistsException(api)

That is well handled while building the URL (but SynologyDSMAPINotExistsException is already raised):

def _build_url(self, api):
if (
api == SynoStorage.API_KEY
and self._information
and self._information.version
and int(self._information.version) < 7321 # < DSM 6
):
return (
"%s/webman/modules/StorageManager/storagehandler.cgi?" % self._base_url
)
return "%s/webapi/%s?" % (self._base_url, self.apis[api]["path"])

@Quentame
Copy link
Collaborator Author

First draft here : #36

@stast1
Copy link
Contributor

stast1 commented Apr 29, 2020

Home Assistant 0.109.0b5

Logger: aiohttp.server
Source: components/synology_dsm/config_flow.py:221
First occurred: 11:40:54 (1 occurrences)
Last logged: 11:40:54

Error handling request

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/aiohttp/web_protocol.py", line 418, in start
    resp = await task
  File "/usr/local/lib/python3.7/site-packages/aiohttp/web_app.py", line 458, in _handle
    resp = await handler(request)
  File "/usr/local/lib/python3.7/site-packages/aiohttp/web_middlewares.py", line 119, in impl
    return await handler(request)
  File "/usr/src/homeassistant/homeassistant/components/http/real_ip.py", line 39, in real_ip_middleware
    return await handler(request)
  File "/usr/src/homeassistant/homeassistant/components/http/auth.py", line 127, in auth_middleware
    return await handler(request)
  File "/usr/src/homeassistant/homeassistant/components/http/view.py", line 125, in handle
    result = await result
  File "/usr/src/homeassistant/homeassistant/components/config/config_entries.py", line 145, in post
    return await super().post(request, flow_id)
  File "/usr/src/homeassistant/homeassistant/components/http/data_validator.py", line 54, in wrapper
    result = await method(view, request, *args, **kwargs)
  File "/usr/src/homeassistant/homeassistant/helpers/data_entry_flow.py", line 93, in post
    result = await self._flow_mgr.async_configure(flow_id, data)
  File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 148, in async_configure
    result = await self._async_handle_step(flow, cur_step["step_id"], user_input)
  File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 196, in _async_handle_step
    result: Dict = await getattr(flow, method)(user_input)
  File "/usr/src/homeassistant/homeassistant/components/synology_dsm/config_flow.py", line 115, in async_step_user
    _login_and_fetch_syno_info, api, otp_code
  File "/usr/local/lib/python3.7/concurrent/futures/thread.py", line 57, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/usr/src/homeassistant/homeassistant/components/synology_dsm/config_flow.py", line 221, in _login_and_fetch_syno_info
    storage = api.storage
  File "/usr/local/lib/python3.7/site-packages/synology_dsm/synology_dsm.py", line 289, in storage
    self._storage = SynoStorage(data)
  File "/usr/local/lib/python3.7/site-packages/synology_dsm/api/storage/storage.py", line 15, in __init__
    self.update(raw_data)
  File "/usr/local/lib/python3.7/site-packages/synology_dsm/api/storage/storage.py", line 20, in update
    self._data = raw_data["data"]
KeyError: 'data'

@Quentame
Copy link
Collaborator Author

Thanks @stast1

May you create an issue on this repo with those comments ?

Okey then, I see where it’s come from.

I actually thought this was an error of not having data and success in the DSM 5 storage data payload.

Will fix at lunch.

@therealj4nd3rs0n
Copy link

therealj4nd3rs0n commented May 18, 2020

Property Value
DSM Version DSM 6.2.2-24922 Update 6
Python XP Low
GIT XP Low
Environment dev on Ubuntu, deploy on k8s
Using Library On Grafana to monitor data protection

I have multiple Synology systems in multiple locations, with backup jobs using HyperBackup, ActiveBackup for business, and Snapshot Replication for offsite. Synology offers no consolidated view of their various data protection tools. I use InfluxDB and Grafana to monitor a lot of things in my environment and my goal is to pull the various task and repository info from the syno API and feed it into Influx so I can create a unified view in Grafana.

Every available API call can be found on a syno at /usr/syno/synoman/webapi and I have been able to grab exactly what I want through curl. I have a decent amount of experience working with the syno APIs through integrating Surveillance Station into Samsung SmartThings through API calls thanks to the webCore add-on to ST.

I apologize in advance for my lack of experience in both python and git, but I have written a lot of shell scripts and perl in my time. Rather than build my own standalone tool, I would rather contribute to a project so others can benefit, and so I don't have to start from scratch :). My end-state target is to run this in a docker container deployed in my k8s environment.

Even if I am working alone on this area for now, I hope my contributions can be useful. And am happy to provide testing on other features when I can. TIA.

As a side note, I was able to get this wrapper deployed and working in my home environment quite easily, which is part of why I wanted to extend it rather than start on my own. Great work so far!

@mib1185
Copy link
Contributor

mib1185 commented Oct 18, 2020

Required informations

Property Value
DSM version DSM 6.2.3-25426 Update 2
Python version 3.8.2
Python XP nothing/low/medium/high
Git XP nothing/low/medium/high
Environment ubuntu(dev-runner) windows(Visual Studio Code)
Using library on HomeAssistant

Additional informations

my contributions #72 and #76 ... hope there will be more in future :)

Quentame pushed a commit to Quentame/python-synology that referenced this issue Aug 12, 2021
Bumps [sphinx-autobuild](https://github.com/executablebooks/sphinx-autobuild) from 2020.9.1 to 2021.3.14.
- [Release notes](https://github.com/executablebooks/sphinx-autobuild/releases)
- [Changelog](https://github.com/executablebooks/sphinx-autobuild/blob/main/NEWS.rst)
- [Commits](https://github.com/executablebooks/sphinx-autobuild/commits)

Signed-off-by: dependabot[bot] <[email protected]>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

7 participants