This library aims to provide python way to communicate with gardena smart gateway and all smart gardena systems.
Project description
py-smart-gardena
Description
This library aims to provide python way to communicate with gardena smart systems and all gardena smart equipments. Configuration of the equipement and inclusion has still to be done using the Gardena application or website.
Support
This project needs your support.
Gardena equipments are expensive, and I need to buy them in order to add support.
If you find this library useful and want to help me support more devices (or if you
just want to reward me for my spent time), you are very welcome !
Your help is very much appreciated.
Here are the links if you want to show your support :
You can also send me crypto using one of the following addresses :
Bitcoin (BTC) : 15k9HW17MU6JSTZZkbQ3YNxEtYF5yhBgNR
Ethereum (ETH) : 0x67afa7dc3882821e21f68e5ccd98f5c74b24295f
MONERO (XMR) : 4AyVQ9HEuphJiHHgnA7BwiPSAwgodzGtqGnyD7qbxqGta3UZJk7JNcx4VMaSmL6Sn5W8b14tyPzXmQAjZGK9jc89PWpYWxy
Thx for your support !
Requirements
- Python 3.6+
Supported devices
For now, only few devices are supported. I may add new ones in the future :
- Gateway
- Smart Mower
- Smart water control
- Smart sensor
- Power plugs
Account creation in order to have access to Gardena API
Gardena requires the creation of an account and an application in order to use their API. You can find how to create such an account and application here : Account and application creation
Installation
$ pip install py-smart-gardena
Usage
Data model
The entrypoint of the library is the the SmartSytem class (in gardena.smart_system package). From there, you can get all locations from your account, and for each of these locations, get the declared devices.
All communications are not done directly with the gateway. This library uses a websocket in order to communicate with gardena systems in order to avoid throttling. There is only one connection to authenticate, and two connections to revoke tokens, everything else is done through websockets.
Authentication
You need to authenticate with your email and passwords created on this [site] (https://developer.1689.cloud/apis) or the IOS/Android application. The library manages the token for you then. An exception is raised if authentication fails.
from gardena.smart_system import SmartSystem
import pprint
smart_system = SmartSystem(email="email@gmail.com", password="my_password", client_id="client_id")
smart_system.authenticate()
smart_system.update_locations()
for location in smart_system.locations.values():
smart_system.update_devices(location)
pprint.pprint(location)
for device in location.devices.values():
pprint.pprint(device)
smart_system.start_ws(smart_system.locations['LOCATION_ID'])
Once authentication is successful, you need to gather locations and devices for the first time and then, you can create start the websocket in order to get updates automatically.
Locations
Locations are automatically retrieved the first time from the API, and then the websocket is used to get updates.
Here is the list of the current available fields and methods :
for location in smart_system.locations.values():
print("location : " + location.name + "(" + location.id + ")")
Devices
Devices are automatically retrieved the first time from the API, and then the websocket is used to get updates. They are stored in each locations. Depending on the function type, you can have diffrents fields.
Mowers
for device in smart_system.locations["LOCATION_ID"].find_device_by_type("MOWER"):
print(f"name : {device.name}")
print(f"id : {device.id}")
print(f"type : {device.type}")
print(f"battery_level : {device.battery_level}")
print(f"battery_state : {device.battery_state}")
print(f"rf_link_level : {device.rf_link_level}")
print(f"rf_link_state : {device.rf_link_state}")
print(f"serial : {device.serial}")
print(f"activity : {device.activity}")
print(f"operating_hours : {device.operating_hours}")
print(f"state : {device.state}")
print(f"last_error_code : {device.last_error_code}")
Power Socket
for device in smart_system.locations["LOCATION_ID"].find_device_by_type("MOWER"):
print(f"name : {device.name}")
print(f"id : {device.id}")
print(f"type : {device.type}")
print(f"battery_level : {device.battery_level}")
print(f"battery_state : {device.battery_state}")
print(f"rf_link_level : {device.rf_link_level}")
print(f"rf_link_state : {device.rf_link_state}")
print(f"serial : {device.serial}")
print(f"activity : {device.activity}")
print(f"state : {device.state}")
Sensor
for device in smart_system.locations["LOCATION_ID"].find_device_by_type("MOWER"):
print(f"name : {device.name}")
print(f"id : {device.id}")
print(f"type : {device.type}")
print(f"battery_level : {device.battery_level}")
print(f"battery_state : {device.battery_state}")
print(f"rf_link_level : {device.rf_link_level}")
print(f"rf_link_state : {device.rf_link_state}")
print(f"serial : {device.serial}")
print(f"ambient_temperature : {device.ambient_temperature}")
print(f"light_intensity : {device.light_intensity}")
print(f"soil_humidity : {device.soil_humidity}")
print(f"soil_temperature : {device.soil_temperature}")
Smart irrigation control
for device in smart_system.locations["LOCATION_ID"].find_device_by_type("MOWER"):
print(f"name : {device.name}")
print(f"id : {device.id}")
print(f"type : {device.type}")
print(f"battery_level : {device.battery_level}")
print(f"battery_state : {device.battery_state}")
print(f"rf_link_level : {device.rf_link_level}")
print(f"rf_link_state : {device.rf_link_state}")
print(f"serial : {device.serial}")
print(f"valve_set_id : {device.valve_set_id}")
print(f"valve_set_state : {device.valve_set_state}")
print(f"valve_set_last_error_code : {device.valve_set_last_error_code}")
for valve in device.valves.values():
print(f"name : {valve['name']}")
print(f"{valve['name']} - id : {valve['id']}")
print(f"{valve['name']} - activity : {valve['activity']}")
print(f"{valve['name']} - state : {valve['state']}")
print(f"{valve['name']} - last_error_code : {valve['last_error_code']}")
Smart water control
for device in smart_system.locations["LOCATION_ID"].find_device_by_type("MOWER"):
print(f"name : {device.name}")
print(f"id : {device.id}")
print(f"type : {device.type}")
print(f"battery_level : {device.battery_level}")
print(f"battery_state : {device.battery_state}")
print(f"rf_link_level : {device.rf_link_level}")
print(f"rf_link_state : {device.rf_link_state}")
print(f"serial : {device.serial}")
print(f"valve_set_id : {device.valve_set_id}")
print(f"valve_name : {device.valve_name}")
print(f"valve_id : {device.valve_id}")
print(f"valve_activity : {device.valve_activity}")
print(f"valve_state : {device.valve_state}")
Development environment
To install the dev environment, you just have to do, in the source code directory :
$ pip install -e .[dev]
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for py_smart_gardena-0.6.15-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 254b78cbbb9b6cd079ee4aee0533a58dc8892cb4c23ee124a6a7b9c727155bf4 |
|
MD5 | d6c8a29708bb31842157deaacb20c961 |
|
BLAKE2b-256 | 4f7108d194eaf7c2fc52e5b86118a461d6d63df0497e19fe3220fe0fc76ee6cd |