该库旨在提供python方式与gardena智能网关和所有智能gardena系统进行通信。

py-smart-gardena的Python项目详细描述


PY智能园丁

license:mitpypi version构建状态 " rel="nofollow">python 3maintabilitytest coveragecodecovupdates已知漏洞blackpep8downloads

说明

这个库旨在提供与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():启动已下载的新的 固件

可辐射性

字段
  • 无线电质量:无线电链路的质量,单位为%
  • 无线电连接状态:无线电链路的当前状态
  • 无线电状态:无线电链路的当前状态
方法 <>

可充电电池性能

字段
  • 电池电量:电池电量单位为%
  • 电池状态:电池的当前状态
  • 电池充电:布尔值表示电池当前是否正在充电
方法 <>

设备

每个设备都支持一个功能列表以及它们自己的字段和方法。

网关

网关是用于与设备通信的硬件。 上面没有命令。

支持的能力:
  • 可辐射性
  • 设备信息性
特定属性
  • 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]

学分

如果没有以下人员的工作,此库是不可能的:

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
安卓工作室组织。json。JSONException:类型为java。无法将lang.String转换为JSONObject   java将数据从Jenkins参数化构建传递到testng。运行时的xml   java关注使用所有者框架异步打开JDialog   Android java:broadcastReceiver上的蓝牙连接事件未触发   在java中同时处理写入和读取的文件io   javascript如何替换目标数组字符串并将其更改为用户输入字符串   如何终止或停止java小程序中的其他线程   如何通过SeleniumJava连接到putty以执行一组命令并在putty窗口中验证输出   java为什么空列表上的循环会挂起?   java当我单击run时,什么也没有发生   swing Java多监视器问题   proguard java模块版本不匹配   java在facebook sdk 4.0上获取可标记好友+   java Android Fragmens和滑动示例   java导入。VS代码中的jar库   存储在SQL表中的java下载/显示文件   java项目Euler(第14页):递归问题   java如何在springboot中跳过失败的bean以避免报告失败:771>>应用程序启动失败