Metadata-Version: 2.1
Name: pydomotic
Version: 1.4.0
Summary: Python library for home automation execution, enabling seamless control and management of your IoT devices
Home-page: https://github.com/purple4reina/pydomotic
Author: Rey Abolofia
Author-email: purple4reina@gmail.com
License: MIT
Project-URL: Source, https://github.com/purple4reina/pydomotic
Project-URL: Bug Tracker, https://github.com/purple4reina/pydomotic/issues
Keywords: iot,python,home,automation,smart,domotic
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Topic :: Software Development
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: Implementation :: PyPy
Requires-Python: >=3.8,<4
Description-Content-Type: text/markdown
Requires-Dist: PyYAML<7.0,>=6.0
Requires-Dist: astral<4.0,>=3.0
Requires-Dist: croniter<2.0,>=1.3.15
Requires-Dist: pyowm<4.0,>=3.3.0
Provides-Extra: airthings
Provides-Extra: ecobee
Provides-Extra: fujitsu
Requires-Dist: pyfujitsu<1.0,>=0.9.0; extra == "fujitsu"
Provides-Extra: moen
Requires-Dist: pyflowater<1.0,>=0.5.2; extra == "moen"
Requires-Dist: retry<1.0,>=0.9.2; extra == "moen"
Provides-Extra: tuya
Requires-Dist: gosundpy<1.0,>=0.7.0; extra == "tuya"
Provides-Extra: s3
Requires-Dist: boto3<2.0,>=1.26.3; extra == "s3"
Provides-Extra: tz
Requires-Dist: timezonefinder<7.0,>=6.1.8; extra == "tz"
Provides-Extra: all
Requires-Dist: pyfujitsu<1.0,>=0.9.0; extra == "all"
Requires-Dist: pyflowater<1.0,>=0.5.2; extra == "all"
Requires-Dist: retry<1.0,>=0.9.2; extra == "all"
Requires-Dist: gosundpy<1.0,>=0.7.0; extra == "all"
Requires-Dist: boto3<2.0,>=1.26.3; extra == "all"
Requires-Dist: timezonefinder<7.0,>=6.1.8; extra == "all"

# pydomotic

[![PyPI version](https://badge.fury.io/py/pydomotic.svg)](https://badge.fury.io/py/pydomotic)

A Python library for home automation execution, enabling seamless control and
management of your IoT devices.

_"Domotics": The automatic control of home appliances by electronic systems.
Contraction of domestic robotics, from the Latin domus ("home"), and robotics._

## Getting Started

1. Install `pydomotic` in your environment.

    ```bash
    $ pip install pydomotic
    ```

1. Create your `pydomotic.yml` configuration file where you will define your
devices and automations.

    ```yaml
    # pydomotic.yml

    devices:
      fan:
        description: fan switch
        provider: noop
        id: '012'
      thermometer:
        description: temperature sensor
        provider: noop
        id: '345'

    automations:
      fan:
        enabled: true
        components:
          - if:
              thermometer:
                temp: '>75'
            then:
              turn-on: fan
            else:
              turn-off: fan
    ```

1. Running the following will check each trigger and execute any actions.

    ```bash
    $ python -m pydomotic
    ```

Note that each configured provider will require separate installation of its specific dependencies. For installing these dependencies and full configuration documentation, see [CONFIGURATION.md](https://github.com/purple4reina/pydomotic/blob/main/docs/CONFIGURATION.md)

For more details on deployment options, see [DEPLOYING.md](https://github.com/purple4reina/pydomotic/blob/main/docs/DEPLOYING.md)

## Glossary

**trigger:** A small piece of code which evaluates to either true or false.
Usually it calls on devices or 3rd party APIs to make this determination.

**action:** A small piece of code which is run when a trigger fires. Usually
this is managing device state like turning a lightbulb on or off. When
configured, it can be designated as a "then" action or an "else" action.

**provider:** The third party which owns the API for a set of devices. The
manufacturer of a device will usually provide this API.

**device:** Any IoT device which can be controled with a 3rd party API managed
by a provider.

**sensor:** A device or 3rd party API which senses information about the
physical world around it. For example, a smart lightbulb or REST based current
weather API.

**component:** A grouping of triggers and actions. When all triggers evaluate
to true, its "then" actions will be run. When any trigger evaluates to false,
its "else" actions will be run.

**handler:** The code used to run a set of components. This is the main
entrypoint to the `pydomotic` system.

**parser:** The code used to read the configuration yaml and transform it into
a list of components.
