该库旨在提供python方式与gardena智能网关和所有智能gardena系统进行通信。
py-smart-gardena的Python项目详细描述
PY智能园丁
说明
这个库旨在提供与gardena智能系统和 所有栀子花智能设备。配置设备和内含物的 使用Gardena应用程序或网站完成。 目前,这个库只支持检索信息,应该很快就能 与设备交互以集成到您的自动化系统中。
支架
此项目需要您的支持。
栀子花的设备很贵,我需要买它们来增加支持。
如果你觉得这个库有用并且想帮助我支持更多的设备(或者如果你
只是想奖励我花的时间),非常欢迎!< BR>
非常感谢您的帮助。
如果您想显示您的支持,以下是链接:
要求
- 巨蟒3.5+
支持的设备
目前,只支持少数设备。我以后可能会添加新的:
- 网关
- 智能割草机(尚未测试)
- 智能水控制
- 智能传感器
- 电源插头
安装
$ pip install py-smart-gardena
用法
数据模型
库的入口点是SmartSytem类(在gardena.smart_系统中 包装)。 从那里,您可以从您的帐户中获取所有位置,并且对于每个位置 位置,获取声明的设备。
所有的通信都不是直接通过网关完成的。这个库通信 通过将gardena web服务托管在internet上,然后,gardena services与 有了网关和设备。这就是为什么,当要求刷新时, 信息不会立即更新,只会在几秒钟后更新。
身份验证
您需要使用在此[站点]上创建的电子邮件和密码进行身份验证 (https://sg-api.dss.husqvarnagroup.net/sg-1/index/ios/" rel="nofollow">https://sg api.dss.husqvarnagroup.net/sg-1/index/ios/)或iOS/Android应用程序。 这个 库管理令牌 那是给你的。 如果身份验证失败,则会引发异常。
fromgardena.smart_systemimportSmartSystemsmart_system=SmartSystem(email="email@gmail.com",password="my_password")smart_system.authenticate()
一旦身份验证成功,您就可以更新位置。
位置
位置是连接设备的位置。它可以用来管理 不同的花园或同一个花园的不同地方,或两者兼而有之。你首先要 在查询设备之前获取位置。
以下是当前可用字段和方法的列表:
smart_system.update_locations()forlocationinsmart_system.locations.values():print("location : "+location.name+"("+location.id+")")print("-> latitude : "+str(location.latitude))print("-> longitude : "+str(location.longitude))print("-> address : "+location.address)print("-> city : "+location.city)print("-> sunrise : "+location.sunrise)print("-> sunset : "+location.sunset)print("-> time zone : "+location.time_zone)print("-> time zone offset : "+str(location.time_zone_offset))
函数location.update_devices()用于更新某个位置的设备。 在浏览设备之前,需要先调用此函数。
设备
在获取设备之前,首先需要验证和更新位置。 必须在特定位置查询设备。
有两种方法可以更新设备,一种是在某个位置,另一种是一次更新所有设备。
smart_system.update_all_devices()# Orforlocationinsmart_system.locations.values():locations.update_devices()
也可以使用get_all_info()查询所有设备字段。 哈希映射的键是字段名:
forgatewayinlocation.gateways.values():info=gateway.get_all_info()print("-> gateway : "+info["name"]+"("+gateway["id"]+")")
所有设备都具有可与其他类型设备共享的功能,并且 他们自己的能力。当设备继承某个能力时,它将获取所有字段和 能力方法。
所有设备通用
属性
- id:设备的智能系统id
- 名称:设备的名称
- 说明:描述设备的字符串
- 类别:设备的类别(网关、割草机等)
- 设备状态:设备的当前状态
- 配置是否同步:指示配置是否同步
<方法>方法<>能力
环境温度可感测性
属性
- 环境温度:设备的环境温度
- 霜冻警告:表示可能发生霜冻的字段
方法
<>设备信息性
字段
- 序列号:设备的序列号
- 版本:当前固件/软件版本
- 上次联机:上次看到设备联机时
- sgtin:唯一的产品代码
- 制造商:设备的制造商
方法
<>可处置电池性能
字段
- 电池电量:电池电量单位为%
- 电池状态:电池的当前状态
方法
<>坚固性
字段
- 固件状态:固件的状态(是否最新)
- 固件上载进度:固件上载进度
- 固件更新开始:-
- 固件可用版本:设备可用的版本
方法
- upload_firmware():启动新固件的上载过程。最新的
使用可用版本
- 固件取消():取消固件上载
- firmware_flash():启动已下载的新的
固件
可辐射性
字段
- 无线电质量:无线电链路的质量,单位为%
- 无线电连接状态:无线电链路的当前状态
- 无线电状态:无线电链路的当前状态
方法
<>可充电电池性能
字段
- 电池电量:电池电量单位为%
- 电池状态:电池的当前状态
- 电池充电:布尔值表示电池当前是否正在充电
方法
<>设备
属性
- 环境温度:设备的环境温度
- 霜冻警告:表示可能发生霜冻的字段
方法
<>设备信息性
字段
- 序列号:设备的序列号
- 版本:当前固件/软件版本
- 上次联机:上次看到设备联机时
- sgtin:唯一的产品代码
- 制造商:设备的制造商
方法
<>可处置电池性能
字段
- 电池电量:电池电量单位为%
- 电池状态:电池的当前状态
方法
<>坚固性
字段
- 固件状态:固件的状态(是否最新)
- 固件上载进度:固件上载进度
- 固件更新开始:-
- 固件可用版本:设备可用的版本
方法
- upload_firmware():启动新固件的上载过程。最新的
使用可用版本
- 固件取消():取消固件上载
- firmware_flash():启动已下载的新的
固件
可辐射性
字段
- 无线电质量:无线电链路的质量,单位为%
- 无线电连接状态:无线电链路的当前状态
- 无线电状态:无线电链路的当前状态
方法
<>可充电电池性能
字段
- 电池电量:电池电量单位为%
- 电池状态:电池的当前状态
- 电池充电:布尔值表示电池当前是否正在充电
方法
<>设备
字段
- 序列号:设备的序列号
- 版本:当前固件/软件版本
- 上次联机:上次看到设备联机时
- sgtin:唯一的产品代码
- 制造商:设备的制造商
方法
<>可处置电池性能
字段
- 电池电量:电池电量单位为%
- 电池状态:电池的当前状态
方法
<>坚固性
字段
- 固件状态:固件的状态(是否最新)
- 固件上载进度:固件上载进度
- 固件更新开始:-
- 固件可用版本:设备可用的版本
方法
- upload_firmware():启动新固件的上载过程。最新的
使用可用版本
- 固件取消():取消固件上载
- firmware_flash():启动已下载的新的
固件
可辐射性
字段
- 无线电质量:无线电链路的质量,单位为%
- 无线电连接状态:无线电链路的当前状态
- 无线电状态:无线电链路的当前状态
方法
<>可充电电池性能
字段
- 电池电量:电池电量单位为%
- 电池状态:电池的当前状态
- 电池充电:布尔值表示电池当前是否正在充电
方法
<>设备
字段
- 电池电量:电池电量单位为%
- 电池状态:电池的当前状态
方法
<>坚固性
字段
- 固件状态:固件的状态(是否最新)
- 固件上载进度:固件上载进度
- 固件更新开始:-
- 固件可用版本:设备可用的版本
方法
- upload_firmware():启动新固件的上载过程。最新的
使用可用版本
- 固件取消():取消固件上载
- firmware_flash():启动已下载的新的
固件
可辐射性
字段
- 无线电质量:无线电链路的质量,单位为%
- 无线电连接状态:无线电链路的当前状态
- 无线电状态:无线电链路的当前状态
方法
<>可充电电池性能
字段
- 电池电量:电池电量单位为%
- 电池状态:电池的当前状态
- 电池充电:布尔值表示电池当前是否正在充电
方法
<>设备
字段
- 固件状态:固件的状态(是否最新)
- 固件上载进度:固件上载进度
- 固件更新开始:-
- 固件可用版本:设备可用的版本
方法
- upload_firmware():启动新固件的上载过程。最新的
使用可用版本
- 固件取消():取消固件上载
- firmware_flash():启动已下载的新的
固件
可辐射性
字段
- 无线电质量:无线电链路的质量,单位为%
- 无线电连接状态:无线电链路的当前状态
- 无线电状态:无线电链路的当前状态
方法
<>可充电电池性能
字段
- 电池电量:电池电量单位为%
- 电池状态:电池的当前状态
- 电池充电:布尔值表示电池当前是否正在充电
方法
<>设备
可充电电池性能
字段
- 电池电量:电池电量单位为%
- 电池状态:电池的当前状态
- 电池充电:布尔值表示电池当前是否正在充电
方法
<>设备
设备
每个设备都支持一个功能列表以及它们自己的字段和方法。
网关
网关是用于与设备通信的硬件。 上面没有命令。
支持的能力:
- 可辐射性
- 设备信息性
特定属性
- IP_地址:家庭网络中网关的IP地址
- 时区:网关使用的时区
特定方法
<>割草机
割草机可以通过API进行控制。 这是可用信息和命令的列表。
支持的能力:
- 设备信息性
- 可充电电池性能
- 可辐射性
特定属性
- 内部温度:家庭网络中网关的IP地址
- 割草机手动操作:网关使用的时区
- 割草机状态:割草机的当前状态
- 割草机时间戳:表示割草机何时启动的日期时间 下次自动
特定方法
- 割草机.park_until_next_timer():此功能将割草机停在
下一个
计划时间
- 割草机。停车直到发出进一步通知为止():割草机将保持停车状态,直到您恢复
计划(使用割草机。开始恢复计划())
- 割草机.start_resume_schedule():使用此功能,割草机将从
命令割草机.park_until_further_notice()
- 割草机。启动覆盖计时器():我还不知道它在做什么:)
传感器
传感器是用来从花园里获取信息的。 以下是可用的信息和命令。
支持的能力:
- 环境温度可感测性
- 可处置电池性能
- 可辐射性
- 设备信息性
- 坚固性
特定属性
- 土壤温度传感器:土壤温度
- 土壤湿度传感器:土壤湿度,%
- 传感器光:以勒克斯为单位的亮度
特定方法
来自传感器的命令是异步的。信息将不是 立即更新。几秒钟后,您可以调用location.update_devices() 为了得到新的信息。 在将来的版本中,可能会有一个函数来刷新 特定设备。
- 传感器。刷新环境温度():要求刷新温度 到网关的信息
- sensor.refresh_light_intensity():请求刷新光强度 到网关的信息
- 传感器.刷新土壤湿度():要求刷新土壤湿度 到网关的信息
水控制
水控制设备用于控制 花园.
支持的能力:
- 环境温度可感测性
- 可处置电池性能
- 可辐射性
- 设备信息性
- 坚固性
特定属性
- 浇水阀打开:表示阀门当前打开的布尔值
- 手动浇水控制:-
特定方法
来自传感器的命令是异步的。信息将不是 立即更新。几秒钟后,您可以调用location.update_devices() 为了得到新的信息。 在将来的版本中,可能会有一个函数来刷新 特定设备。
- 水控制。打开阀门():要求水控制打开阀门X 分钟(默认持续时间为30分钟)
- 水控制。关闭阀门():要求水控制关闭阀门(它 似乎只有在手动打开阀门时才起作用)
电源
电源设备用于控制智能电源插头
支持的能力:
- 设备信息性
- 可处置电池性能
- 坚固性
特定属性
- 电源计时器:插头打开的时间
- 电源错误:指示插头是否有错误
特定方法
- 电源打开(60):要求电源插头打开60秒。如果没有
指定了持续时间,插头将始终保持在线。
- power.power_off():要求电源插头关闭
- 刷新链接状态:刷新当前链接状态
示例脚本
下面是一个示例脚本,列出了所有可用的函数供快速参考。 已对命令进行了注释,以避免意外触发。
fromgardena.smart_systemimportSmartSystemsmart_system=SmartSystem(email="email@gmail.com",password="my_password")smart_system.authenticate()smart_system.update_locations()forlocationinsmart_system.locations.values():print("location : "+location.name+"("+location.id+")")print("-> latitude : "+str(location.latitude))print("-> longitude : "+str(location.longitude))print("-> address : "+location.address)print("-> city : "+location.city)print("-> sunrise : "+location.sunrise)print("-> sunset : "+location.sunset)print("-> time zone : "+location.time_zone)print("-> time zone offset : "+str(location.time_zone_offset))# To update devices information for a location (mower, gateway, sensor, ..)location.update_devices()# Iterate over gatewaysforgatewayinlocation.gateways.values():print("-> gateway : "+gateway.name+"("+gateway.id+")")print("---> category : "+gateway.category)print("---> description : "+gateway.description)print("---> is_configuration_synchronized : "+str(gateway.is_configuration_synchronized))print("---> serial number : "+gateway.serial_number)print("---> version : "+gateway.version)print("---> last time online : "+gateway.last_time_online)print("---> ip address : "+gateway.ip_address)print("---> timezone : "+gateway.timezone)print("---> device state : "+gateway.device_state)print("---> sgtin : "+gateway.sgtin)print("---> manufacturer : "+gateway.manufacturer)# Iterate over mowersformowerinlocation.mowers.values():print("-> mower : "+mower.name+"("+mower.id+")")print("---> category : "+mower.category)print("---> description : "+mower.description)print("---> is_configuration_synchronized : "+str(mower.is_configuration_synchronized))print("---> serial number : "+mower.serial_number)print("---> version : "+mower.version)print("---> last time online : "+mower.last_time_online)print("---> battery level : "+str(mower.battery_level))print("---> battery rechargeable status : "+mower.battery_status)print("---> battery charging : "+str(mower.battery_charging))print("---> radio quality : "+str(mower.radio_quality))print("---> radio connection status : "+mower.radio_connection_status)print("---> radio state : "+mower.radio_state)print("---> internal temperature : "+str(mower.internal_temperature))print("---> mower status : "+mower.mower_status)print("---> manual operation : "+str(mower.mower_manual_operation))print("---> timestamp next start : "+mower.mower_timestamp_next_start)print("---> sgtin : "+mower.sgtin)print("---> manufacturer : "+mower.manufacturer)# Commands (Untested)# mower.park_until_next_timer()# mower.park_until_further_notice()# mower.start_resume_schedule()# mower.start_override_timer()# Iterate over sensorsforsensorinlocation.sensors.values():print("-> sensor : "+sensor.name+"("+sensor.id+")")print("---> category : "+sensor.category)print("---> is_configuration_synchronized : "+str(sensor.is_configuration_synchronized))print("---> serial number : "+sensor.serial_number)print("---> version : "+sensor.version)print("---> last time online : "+sensor.last_time_online)print("---> device state : "+sensor.device_state)print("---> battery level : "+str(sensor.battery_level))print("---> battery rechargeable status : "+sensor.battery_status)print("---> radio quality : "+str(sensor.radio_quality))print("---> radio connection status : "+sensor.radio_connection_status)print("---> radio state : "+sensor.radio_state)print("---> firmware status : "+sensor.firmware_status)print("---> firmware upload in progress : "+sensor.firmware_upload_progress)print("---> firmware upload start : "+sensor.firmware_update_start)print("---> ambient temperature : "+str(sensor.ambient_temperature))print("---> frost warning : "+sensor.frost_warning)print("---> soil temperature : "+str(sensor.sensor_soil_temperature))print("---> soil humidity : "+str(sensor.sensor_soil_humidity))print("---> light : "+str(sensor.sensor_light))print("---> sgtin : "+sensor.sgtin)print("---> manufacturer : "+sensor.manufacturer)print("---> firmware_available_version : "+str(sensor.firmware_available_version))# Commands :# sensor.refresh_ambient_temperature()# sensor.refresh_light_intensity()# sensor.refresh_soil_moisture()# Iterate over water controlforwater_controlinlocation.water_controls.values():print("-> water control : "+water_control.name+"("+water_control.id+")")print("---> category : "+water_control.category)print("---> is_configuration_synchronized : "+str(water_control.is_configuration_synchronized))print("---> serial number : "+water_control.serial_number)print("---> version : "+water_control.version)print("---> last time online : "+water_control.last_time_online)print("---> device state : "+water_control.device_state)print("---> battery level : "+str(water_control.battery_level))print("---> battery rechargeable status : "+water_control.battery_status)print("---> radio quality : "+str(water_control.radio_quality))print("---> radio connection status : "+water_control.radio_connection_status)print("---> radio state : "+water_control.radio_state)print("---> firmware status : "+water_control.firmware_status)print("---> firmware upload in progress : "+water_control.firmware_upload_progress)print("---> firmware upload start : "+water_control.firmware_update_start)print("---> ambient temperature : "+str(water_control.ambient_temperature))print("---> frost warning : "+water_control.frost_warning)print("---> valve open : "+str(water_control.watering_valve_open))print("---> manual override : "+water_control.watering_manual_override)print("---> sgtin : "+water_control.sgtin)print("---> manufacturer : "+water_control.manufacturer)print("---> firmware_available_version : "+str(water_control.firmware_available_version))# Commands :# water_control.open_valve() # 30 minutes by default# water_control.open_valve(duration=10) # 10 minutes before closing valve# water_control.close_valve() ## close manual override# Iterate over water controlforpowerinlocation.powers.values():print("->power : "+power.name+"("+power.id+")")print("---> category : "+power.category)print("---> is_configuration_synchronized : "+str(power.is_configuration_synchronized))print("---> serial number : "+power.serial_number)print("---> version : "+power.version)print("---> last time online : "+power.last_time_online)print("---> device state : "+power.device_state)print("---> radio quality : "+str(power.radio_quality))print("---> radio connection status : "+str(power.radio_connection_status))print("---> radio state : "+str(power.radio_state))print("---> firmware status : "+str(power.firmware_status))print("---> firmware upload in progress : "+str(power.firmware_upload_progress))print("---> firmware update start : "+str(power.firmware_update_start))print("---> power timer : "+str(power.power_timer))print("---> power error : "+str(power.power_error))# Commands :# power.power_on(60) # In seconds# power.power_off()# power.refresh_link_status()
开发环境
要安装开发环境,您需要必须这样做,在源代码目录中:
$ pip install -e .[dev]
学分
如果没有以下人员的工作,此库是不可能的:
- dxsdata(http://www.dxsdata.com/2016/07/php-class for-gardena-smart-system-api/)
- gerrieg(https://www.roboter-forum.com/index.php?线程/16777 Gardena智能系统分析/&L=2)