Skip to content

damho1104/synology-nas-management-service

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Synology NAS Management Service

Hits Python FastAPI
로컬망에서 Synology NAS 관리용 API 를 제공하는 FastAPI 기반 서비스 입니다.

Release

v1.0.0

  • Synology NAS 제품군 종료 API 추가
  • Synology NAS 제품군 켜기 API 추가 (WOL, Wake On Lan)
  • 비동기 지원

1. config.json 생성

  • 서버를 실행시킬 host ip 와 port 정보를 입력합니다.
  • Synology NAS 제품군 정보를 입력합니다.
{
  "ip": "[HOST_IP_FOR_LAUNCH_SERVICE]",
  "port": "[HOST_PORT_FOR_LAUNCH_SERVICE]",
  "servers": {
    "[SYNOLOGY_NAS_NAME]": {
      "ip": "[SYNOLOGY_NAS_IP]",
      "port": "[SYNOLOGY_NAS_WEB_MANAGEMENT_PORT]",
      "id": "[SYNOLOGY_NAS_ID_FOR_ADMIN]",
      "pw": "[SYNOLOGY_NAS_PASSWORD_FOR_ADMIN]",
      "dsm_major_version": [SYNOLOGY_NAS_MAJOR_VERSION]
    },
    "[OTHER_SYNOLOGY_NAS_NAME]": {
      "ip": "[SYNOLOGY_NAS_IP]",
      "port": "[SYNOLOGY_NAS_WEB_MANAGEMENT_PORT]",
      "id": "[SYNOLOGY_NAS_ID_FOR_ADMIN]",
      "pw": "[SYNOLOGY_NAS_PASSWORD_FOR_ADMIN]",
      "dsm_major_version": [SYNOLOGY_NAS_MAJOR_VERSION]
    },
    ...
  },
  "ip_whitelist": [
    "[CLIENT_IP]"
  ]
}

Example

Case 1. Synology NAS 로컬 서버(192.168.0.3, 5000, DSM Version: 6.2.3) 가 1대인 경우

  • Host Info: 192.168.0.100, 10000
{
  "ip": "192.168.0.100",
  "port": "10000",
  "server": {
    "MYNAS1": {
      "ip": "192.168.0.3",
      "port": "5000",
      "mac": "00:11:22:33:44:55",
      "id": "admin",
      "pw": "adminadmin",
      "dsm_major_version": 6
    }
  },
  "ip_whitelist": [
    "192.168.0.3",
    "192.168.0.4",
    "192.168.0.5"
  ]
}

Case 2. Synology NAS 로컬 서버(192.168.0.3, 5000, DSM Version: 6.2.3) 가 2대인 경우

Host 정보
192.168.0.100, 10000

Synology NAS 로컬 서버 정보
1. MYNAS1, 192.168.0.3, 5000, DSM Version: 6.2.3
2. MYNAS2, 192.168.0.13, 5000, DSM Version: 7.0.1
{
  "ip": "192.168.0.100",
  "port": "10000",
  "server": {
    "MYNAS1": {
      "ip": "192.168.0.3",
      "port": "5000",
      "mac": "00:11:22:33:44:55",
      "id": "admin",
      "pw": "adminadmin",
      "dsm_major_version": 6
    },
    "MYNAS2": {
      "ip": "192.168.0.13",
      "port": "5000",
      "mac": "AA:00:22:33:44:AF",
      "id": "admin",
      "pw": "adminadmin",
      "dsm_major_version": 7
    }
  },
  "ip_whitelist": [
    "192.168.0.3",
    "192.168.0.4",
    "192.168.0.5"
  ]
}

2. 실행

1. Windows OS

  • pmws-v1.0.0.zip 압축 파일을 다운로드 받습니다.
  • 다운로드 받은 파일의 압축을 풀고 파일이 위치하는 곳에서 cmd 창을 켜서 아래와 같은 방법으로 실행합니다.
> cd [압축 푼 디렉토리 경로]
> syno-manage-server.exe

2. Others

  • Python 3.9 기반에서 작성되었습니다.
  • 해당 프로젝트를 clone 후 디렉토리로 이동합니다.
  • 패키지를 다운로드 받습니다.
    $ pip3 install -r requirements.txt
  • 이후부터는 case 1 혹은 2 를 수행하시면 됩니다.

Case 1. Build

  • 아래 명령과 같이 실행합니다.
    $ pyinstaller server.spec
  • dist 디렉토리로 이동하여 아래 명령과 같이 실행합니다.
    $ cd dist
    $ ./syno-manage-server

Case 2. Run script

  • 아래 명령과 같이 실행합니다.
    $ python3 src/server.py

3. API 설명

3-1. NAS 상태 확인

GET Method
http://[SERVER_IP]:[PORT]/nas/status/[SYNOLOGY_NAS_NAME]
  • 예제
    http://192.168.0.100:10000/nas/status/MYNAS1
    
    {
      "ip":"192.168.0.3",
      "port":"5000",
      "active":true,
      "name":"MYNAS1"
    }

3-2. 모든 NAS 상태 확인

GET Method
http://[SERVER_IP]:[PORT]/nas/status
  • 예제
    http://192.168.0.100:10000/nas/status
    
    {
      "LDHNAS1": {
        "ip":"192.168.0.3",
        "port":"5000",
        "active":true
      },
      "LDHNAS2": {
        "ip":"192.168.0.23",
        "port":"5000",
        "active":true
      }
    }

3-3. 개별 NAS 끄기

GET Method
http://[SERVER_IP]:[PORT]/nas/shutdown/[SYNOLOGY_NAS_NAME]
  • 예제
    http://192.168.0.100:10000/nas/shutdown/MYNAS1
    
    OK
    

3-4. 모든 NAS 끄기

GET Method
http://[SERVER_IP]:[PORT]/nas/all/shutdown?background_mode=[true|false]

Query parameter
background_mode : true|false
- true 설정 시 NAS shutdown request 에 대한 response 여부 확인 없이 바로 response
  • 예제
    http://192.168.0.100:10000/nas/all/shutdown?background_mode=true
    
    OK
    

3-5. 개별 NAS 켜기 (Wake On Lan)

GET Method
http://[SERVER_IP]:[PORT]/nas/power/on/[SYNOLOGY_NAS_NAME]
  • 예제
    http://192.168.0.100:10000/nas/power/on/MYNAS1
    
    OK
    

3-6. 모든 NAS 켜기 (Wake On Lan)

GET Method
http://[SERVER_IP]:[PORT]/nas/all/power/on?background_mode=[true|false]

Query parameter
background_mode : true|false
- true 설정 시 NAS Power On request 만 전송하고 바로 response
  • 예제
    http://192.168.0.100:10000/nas/power/on/all
    
    OK
    

About

Synology NAS Management Service based on FastAPI

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages