与Synology DSM通信的Python API
项目描述
安装
[sudo] pip install python-synology
用法
您可以将模块导入为 synology_dsm。
构造函数
SynologyDSM(
dsm_ip,
dsm_port,
username,
password,
use_https=False,
verify_ssl=False,
timeout=None,
device_token=None,
debugmode=False,
)
当使用两步验证账户时,应添加 device_token,否则DSM将要求使用一次性密码(OTP)登录,请求将失败(有关详细信息,请参阅登录部分)。
默认 timeout 为10秒。
登录
库在首次请求时自动登录,但您最好单独使用 login() 函数进行认证。
如果成功或失败地认证到DSM,它将返回一个布尔值。
如果您的账户需要两步验证(2SA),则 login() 将抛出 SynologyDSMLogin2SARequiredException。再次调用该函数,并将一次性密码(OTP)作为参数传递,例如 login("123456")(最好使用字符串来处理首位零)。存储 device_token 属性,以便下次打开新的 SynologyDSM 会话时无需重新连接密码。
代码示例
每个API都有一个 update() 函数,用于获取第一次数据,然后数据将在下一次 update() 调用时缓存和更新。
SynologyDSM 类还可以一次性更新所有API。
from synology_dsm import SynologyDSM
print("Creating Valid API")
api = SynologyDSM("<IP/DNS>", "<port>", "<username>", "<password>")
print("=== Information ===")
api.information.update()
print("Model: " + str(api.information.model))
print("RAM: " + str(api.information.ram) + " MB")
print("Serial number: " + str(api.information.serial))
print("Temperature: " + str(api.information.temperature) + " °C")
print("Temp. warning: " + str(api.information.temperature_warn))
print("Uptime: " + str(api.information.uptime))
print("Full DSM version:" + str(api.information.version_string))
print("--")
print("=== Utilisation ===")
api.utilisation.update()
print("CPU Load: " + str(api.utilisation.cpu_total_load) + " %")
print("Memory Use: " + str(api.utilisation.memory_real_usage) + " %")
print("Net Up: " + str(api.utilisation.network_up()))
print("Net Down: " + str(api.utilisation.network_down()))
print("--")
print("=== Storage ===")
api.storage.update()
for volume_id in api.storage.volumes_ids:
print("ID: " + str(volume_id))
print("Status: " + str(api.storage.volume_status(volume_id)))
print("% Used: " + str(api.storage.volume_percentage_used(volume_id)) + " %")
print("--")
for disk_id in api.storage.disks_ids:
print("ID: " + str(disk_id))
print("Name: " + str(api.storage.disk_name(disk_id)))
print("S-Status: " + str(api.storage.disk_smart_status(disk_id)))
print("Status: " + str(api.storage.disk_status(disk_id)))
print("Temp: " + str(api.storage.disk_temp(disk_id)))
print("--")
print("=== Shared Folders ===")
api.share.update()
for share_uuid in api.share.shares_uuids:
print("Share name: " + str(api.share.share_name(share_uuid)))
print("Share path: " + str(api.share.share_path(share_uuid)))
print("Space used: " + str(api.share.share_size(share_uuid, human_readable=True)))
print("Recycle Bin Enabled: " + str(api.share.share_recycle_bin(share_uuid)))
print("--")
下载站使用
from synology_dsm import SynologyDSM
api = SynologyDSM("<IP/DNS>", "<port>", "<username>", "<password>")
if "SYNO.DownloadStation.Info" in api.apis:
api.download_station.get_info()
api.download_station.get_config()
# The download list will be updated after each of the following functions:
# You should have the right on the (default) directory that the download will be saved, or you will get a 403 or 406 error
api.download_station.create("http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4")
api.download_station.pause("dbid_1")
# Like the other function, you can eather pass a str or a list
api.download_station.resume(["dbid_1", "dbid_2"])
api.download_station.delete("dbid_3")
# Manual update
api.download_station.update()
监控站使用
from synology_dsm import SynologyDSM
api = SynologyDSM("<IP/DNS>", "<port>", "<username>", "<password>")
surveillance = api.surveillance_station
surveillance.update() # First update is required
# Returns a list of cached cameras available
cameras = surveillance.get_all_cameras()
# Assuming there's at least one camera, get the first camera_id
camera_id = cameras[0].camera_id
# Returns cached camera object by camera_id
camera = surveillance.get_camera(camera_id)
# Returns cached motion detection enabled
motion_setting = camera.is_motion_detection_enabled
# Return bytes of camera image
surveillance.get_camera_image(camera_id)
# Updates all cameras/motion settings and cahce them
surveillance.update()
# Gets Home Mode status
home_mode_status = surveillance.get_home_mode_status()
# Sets home mode - true is on, false is off
surveillance.set_home_mode(True)
系统使用
from synology_dsm import SynologyDSM
api = SynologyDSM("<IP/DNS>", "<port>", "<username>", "<password>")
system = api.system
# Reboot NAS
system.reboot()
# Shutdown NAS
system.shutdown()
# Manual update system information
system.update()
# Get CPU information
system.cpu_clock_speed
system.cpu_cores
system.cpu_family
system.cpu_series
# Get NTP settings
system.enabled_ntp
system.ntp_server
# Get system information
system.firmware_ver
system.model
system.ram_size
system.serial
system.sys_temp
system.time
system.time_zone
system.time_zone_desc
system.up_time
# Get list of all connected USB devices
system.usb_dev
升级使用
from synology_dsm import SynologyDSM
api = SynologyDSM("<IP/DNS>", "<port>", "<username>", "<password>")
upgrade = api.upgrade
# Manual update upgrade information
upgrade.update()
# check if DSM update is available
if upgrade.update_available:
do something ...
致谢 / 特别感谢
https://github.com/Quentame(多个API添加 & 测试)
https://github.com/aaska(DSM 5测试)
https://github.com/shenxn(监控站测试)
https://github.com/Gestas(共享文件夹)
在此存储库中找到了Synology API“文档”: https://github.com/kwent/syno/tree/master/definitions
官方参考
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪一个,请了解有关 安装包 的更多信息。
源分布
python-synology-1.0.0.tar.gz (21.4 kB 查看哈希值)
构建分布
python_synology-1.0.0-py3-none-any.whl (25.6 kB 查看哈希值)
关闭
python-synology-1.0.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 75823f19a7fba3c0695dd89cfdbc459534111c55dfb58a5c72edca24041a0aa2 |
|
MD5 | c601238156f688c3fd3bb5324dd3d23d |
|
BLAKE2b-256 | b3c8e4e178aa558a04846b15333bba4e4bf187029b140be638a1dc35f570cbac |