A discovery for Culligan smart water products
The Excel sheet contains a listing of endpoints and what is needed for interaction with the Aylanetworks API. This data was gathered from proxy traffic.
The powershell module is a way to interact with the endpoints via Powershell.
The python code is for packageability and publishing to PyPi as a module.
The softener does have an http webpage for wifi status and connect/disconnect. Local control of the device does not seem possible without understanding how Ayla sends commands to the device.
This device is integrated by/with Ayla Networks and (generally) uses their documentation.
Direct doc linked from the reference above: salesforce doc
From PyPi
pip install culligan
Build from source
pip install build
pip build
pip install culligan
Requires typical http interaction and datatype packages like requests, aiohttp, ujson, and the ayla-iot-unofficial module to handle devices and communication.
Reqiures a username and password (typically a smart device's app login credentials). The Culligan specific app_id is included in the package (obtained from the Culligan app).
Instantiate a new class object through new_culligan_api() or Culligan() directly.
The Culligan() object will call sign_in() automatically to obtain Culligan IoT and Ayla access_tokens. Then, it will instantiate an AylaApi() object with the Ayla access_token (no sign_in() required).
Use Culligan for communication with the Culligan IoT domain. Use the Ayla property of the Culligan object for direct communication with Ayla Networks.
Gather devices by calling the Ayla.get_devices().
By default, calling get_devices() will return a list of class specific device objects with updated properties for use.
See ayla-iot-unofficial/device.py for implemented device classes.
python3 -m pip install Culligan
import Culligan
USERNAME = 'me@email.com'
PASSWORD = '$7r0nkP@s$w0rD'
CulliganApi = new_culligan_api(username, password)
CulliganApi.sign_in()
CulliganApi.Ayla = CulliganApi.get_ayla_api()
device_list = CulliganApi.Ayla.list_devices()
devices = CulliganApi.Ayla.get_devices()
# Example Water Softener Devices
softener = devices[0]
softener.capacity_remaining_gallons
softener.set_vacation_mode()