ProtoThis / python-synology

MIT License
55 stars 38 forks source link

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

Open Quentame opened 4 years ago

Quentame commented 4 years ago

Goal of this issue

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

Need testers for two things :

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 commented 4 years ago

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

Quentame commented 4 years ago

@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 commented 4 years ago

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 commented 4 years ago

@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 commented 4 years ago

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 commented 4 years ago
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 commented 4 years ago

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 : https://github.com/ProtoThis/python-synology/pull/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 commented 4 years ago

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

aaska commented 4 years ago

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

ProtoThis commented 4 years ago

@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 commented 4 years ago

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

Quentame commented 4 years ago

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 commented 4 years ago

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 commented 4 years ago

@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 commented 4 years ago

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

Quentame commented 4 years ago

for-testers branch updated

Quentame commented 4 years ago

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

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

Quentame commented 4 years ago

@chemelli74 2SA login available on HA 0.109.0 beta

chemelli74 commented 4 years ago

@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 commented 4 years ago

@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 commented 4 years ago

Was it the same before ?

Haven’t check actually.

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

Simone

stast1 commented 4 years ago

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 commented 4 years ago

Thanks @stast1, nice to have :+1:

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:

https://github.com/ProtoThis/python-synology/blob/4d9897a4ca3d5a0093bee9e1a8310b740a9f6888/synology_dsm/synology_dsm.py#L179-L181

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

https://github.com/ProtoThis/python-synology/blob/4d9897a4ca3d5a0093bee9e1a8310b740a9f6888/synology_dsm/synology_dsm.py#L77-L88

Quentame commented 4 years ago

First draft here : #36

stast1 commented 4 years ago

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 commented 4 years ago

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 commented 4 years ago
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 commented 3 years ago

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 :)