A simple API for RainMachine sprinkler controllers
Project description
💧 Regenmaschine: A Simple Python Library for RainMachine™
regenmaschine
(German for "rain machine") is a simple, clean, well-tested
Python library for interacting with
RainMachine™ smart sprinkler controllers.
It gives developers an easy API to manage their controllers over their local
LAN.
PLEASE READ: Version 1.0.0 and Beyond
Version 1.0.0 of regenmaschine
makes several breaking, but necessary changes:
- Moves the underlying library from Requests to aiohttp
- Changes the entire library to use
asyncio
- Makes 3.6 the minimum version of Python required
If you wish to continue using the previous, synchronous version of
regenmaschine
, make sure to pin version 0.4.2.
Python Versions
regenmaschine
is currently supported on:
- Python 3.5
- Python 3.6
- Python 3.7
However, running the test suite currently requires Python 3.6 or higher; tests run on Python 3.5 will fail.
Installation
pip install regenmaschine
Example
regenmaschine
starts within an
aiohttp ClientSession
:
import asyncio
from aiohttp import ClientSession
from regenmaschine import Client
async def main() -> None:
"""Create the aiohttp session and run the example."""
async with ClientSession() as websession:
# YOUR CODE HERE
asyncio.get_event_loop().run_until_complete(main())
To create a regenmaschine
Client
:
import asyncio
from aiohttp import ClientSession
from regenmaschine import Client
async def main() -> None:
"""Create the aiohttp session and run the example."""
async with ClientSession() as websession:
client = await Client.authenticate_via_password(
'192.168.1.100', '<PASSWORD'>, websession, port=8080, ssl=True)
asyncio.get_event_loop().run_until_complete(main())
Once you have a client, get to work:
import asyncio
from aiohttp import ClientSession
from regenmaschine import Client
async def main() -> None:
"""Create the aiohttp session and run the example."""
async with ClientSession() as websession:
client = await Client.authenticate_via_password(
'192.168.1.100', '<PASSWORD'>, websession, port=8080, ssl=True)
# Print some client properties:
print('Name: {0}'.format(client.name))
print('Host: {0}'.format(client.host))
print('MAC Address: {0}'.format(client.mac))
print('API Version: {0}'.format(client.api_version))
print('Software Version: {0}'.format(client.software_version))
print('Hardware Version: {0}'.format(client.hardware_version))
# Get all diagnostic information:
diagnostics = await client.diagnostics.current()
# Get all weather parsers:
parsers = await client.parsers.current():
# Get all programs:
programs = await client.programs.all():
# Get a specific program:
program_1 = await client.programs.get(1)
# Enable or disable a specific program:
await client.programs.enable(1)
await client.programs.disable(1)
# Get the next run time for all programs:
runs = await client.programs.next()
# Get all running programs:
programs = await client.programs.running()
# Start and stop a program:
await client.programs.start(1)
await client.programs.stop(1)
# Get basic details about all zones:
zones = await client.zones.all():
# Get advanced details about all zones:
zones = await client.zones.all(details=True):
# Include inactive zones:
zones = await client.zones.all(include_inactive=True):
# Get basic details about a specific zone:
zone_1 = await client.zones.get(1)
# Get advanced details about a specific zone:
zone_1 = await client.zones.get(1, details=True)
# Enable or disable a specific zone:
await client.zones.enable(1)
await client.zones.disable(1)
# Start a zone for 60 seconds:
await client.zones.start(1, 60)
# ...and stop it:
await client.zones.stop(1)
# Get the device name:
name = await client.provisioning.device_name
# Get all provisioning settings:
settings = await client.provisioning.settings()
# Get all networking info related to the device:
wifi = await client.provisioning.wifi()
# Get various types of active watering restrictions:
current = await client.restrictions.current()
universal = await client.restrictions.universal()
hourly = await client.restrictions.hourly():
raindelay = await client.restrictions.raindelay()
# Get watering stats:
today = await client.stats.on_date(date=datetime.date.today())
upcoming_days = await client.stats.upcoming(details=True):
# Get info on various watering activities not already covered:
log_2_day = await client.watering.log(date=datetime.date.today(), 2):
queue = await client.watering.queue()
runs = await client.watering.runs(date=datetime.date.today())
# Pause all watering activities for 30 seconds:
await client.watering.pause_all(30)
# Unpause all watering activities:
await client.watering.unpause_all()
# Stop all watering activities:
await client.watering.stop_all()
asyncio.get_event_loop().run_until_complete(main())
Check out example.py
, the tests, and the source files themselves for method
signatures and more examples.
Contributing
- Check for open features/bugs or initiate a discussion on one.
- Fork the repository.
- Install the dev environment:
make init
. - Enter the virtual environment:
pipenv shell
- Code your new feature or bug fix.
- Write a test that covers your new functionality.
- Update
README.md
with any new documentation. - Run tests and ensure 100% code coverage:
make coverage
- Ensure you have no linting errors:
make lint
- Ensure you have no typed your code correctly:
make typing
- Add yourself to
AUTHORS.md
. - Submit a pull request!
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
File details
Details for the file regenmaschine-1.3.0.tar.gz
.
File metadata
- Download URL: regenmaschine-1.3.0.tar.gz
- Upload date:
- Size: 15.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 698b46ff50ca6c6fa7feee90ed3f845fadf20e8d47bb27b7317234e5c70ff811 |
|
MD5 | 58ea46ff3a01a0df4026b5c5d02d59b5 |
|
BLAKE2b-256 | d55b1a5e937f23b6565c61256e38da95c1ac000faaaa4fa9fce4f839c16871d1 |
File details
Details for the file regenmaschine-1.3.0-py3-none-any.whl
.
File metadata
- Download URL: regenmaschine-1.3.0-py3-none-any.whl
- Upload date:
- Size: 20.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 269f6dc99d52fdd24378314af85876e40c5689830498d42a8c30c3038c2e8609 |
|
MD5 | 6891f8cc1b14ebb62444280ac5a8c0a7 |
|
BLAKE2b-256 | f567011ff9442e87838372b2882540b4ae791d46b467bdc15c43c4e019b1c60f |