Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Library to interact with gardena smart system

License

NotificationsYou must be signed in to change notification settings

osks/py-smart-gardena2

 
 

Repository files navigation

This is a fork ofhttps://github.com/grm/py-smart-gardena/ which was done because it was inactive.

License: MITPyPI versionBuild StatusPython 3UpdatesKnown VulnerabilitiesBlackPEP8Downloads

Description

This library aims to provide python way to communicate with gardena smart systems andall gardena smart equipments. Configuration of the equipement and inclusion has stillto be done using the Gardena application or website.

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
  • Smart Irrigation control

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-gardena2

Usage

Data model

The entrypoint of the library is the the SmartSytem class (in gardena.smart_systempackage).From there, you can get all locations from your account, and for each of theselocations, get the declared devices.

All communications are not done directly with the gateway. This library uses a websocket in orderto 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 first need to get a client id (also called application key in theAPI documentation) for your personal installation of gardena. To doso, create an account here :https://developer.1689.cloud/apis

Then you need to create an application, add APIs (Authentication APIand GARDENA smart system API), and copy the application key asexplained here:https://developer.1689.cloud/docs/getting-started

The library manages the token for you then.An exception is raised if authentication fails.

fromgardena.smart_systemimportSmartSystemimportpprintsmart_system=SmartSystem(email="email@gmail.com",password="my_password",client_id="client_id")smart_system.authenticate()smart_system.update_locations()forlocationinsmart_system.locations.values():smart_system.update_devices(location)pprint.pprint(location)fordeviceinlocation.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 :

forlocationinsmart_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

fordeviceinsmart_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"model_type :{device.model_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

fordeviceinsmart_system.locations["LOCATION_ID"].find_device_by_type("POWER_SOCKET"):print(f"name :{device.name}")print(f"id :{device.id}")print(f"type :{device.type}")print(f"model_type :{device.model_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

fordeviceinsmart_system.locations["LOCATION_ID"].find_device_by_type("SENSOR"):print(f"name :{device.name}")print(f"id :{device.id}")print(f"type :{device.type}")print(f"model_type :{device.model_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

fordeviceinsmart_system.locations["LOCATION_ID"].find_device_by_type("SMART_IRRIGATION_CONTROL"):print(f"name :{device.name}")print(f"id :{device.id}")print(f"type :{device.type}")print(f"model_type :{device.model_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}")forvalveindevice.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

fordeviceinsmart_system.locations["LOCATION_ID"].find_device_by_type("WATER_CONTROL"):print(f"name :{device.name}")print(f"id :{device.id}")print(f"type :{device.type}")print(f"model_type :{device.model_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}")

Using websocket

Once the websocket has been started, everything is managed and the devices areautomatically updated once their state change.In order for your to be alerted of such a change, you need to add a callback to thedevice.This callback will be called each time the device state changed :

defmy_callback(device):print(f"The device{device.name} has been updated !")device.add_callback(my_callback)

Development environment

To install the dev environment, you just have to do, in the source code directory :

$ pip install -e .[dev]

About

Library to interact with gardena smart system

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python100.0%

[8]ページ先頭

©2009-2025 Movatter.jp