Skip to content

Latest commit

 

History

History
241 lines (226 loc) · 5.52 KB

README.md

File metadata and controls

241 lines (226 loc) · 5.52 KB

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