Skip to main content

aMotion

Adapter for managing the connection, control and monitoring of the HVAC aMotion family family

Install:

python3 -m pip install amotion

Usage examples:

Initiate library:

from amotion import aMotionConnector

amotion = aMotionConnector("username", "password", "192.168.0.1:8080")

Compose parts or entities:

You need the device description. Response is a aMotionDescription object

from amotion import aMotionConnector
import asyncio
from pprint import pprint

amotion = aMotionConnector("username", "password", "192.168.0.1:8080")


async def main():
    result = await amotion.description()
    pprint(vars(result))


asyncio.run(main())

Properties:

    device_name = "Amotion Device"        device name
    device_type = "aMotion"             device type
    board_type = "Unknown"              board type (aM-CL, aM-CE, aM-GB etc)
    production_number = "Unknown"       factory ident
    brand = "Unknown"                   commerce brand
    requests = list[str]                list of the params for the control unit
    unit = list[str]                    list of the monitoring params 
    types = {}                          deep description of the params
    control = {}                        type, range and units of the control params
    sensors = {}                        description of the monitoring params (for the HA sensors)
    scenes = []                         scene is a device preset
    functions = []                      function is a unit trigger controller

This is a complete description to compose all relevant entity. You get somethink like

{'board_type': 'CL',
 'brand': 'amotion.eu',
 'control': {'fan_power_req': {'max': 100.0,
                               'min': 0.0,
                               'name': 'fan_power_req',
                               'step': 1,
                               'type': 'range',
                               'unit': '%',
                               'valueType': 'percent'},
             'temp_request': {'max': 40.0,
                              'min': 10.0,
                              'name': 'temp_request',
                              'step': 0.5,
                              'type': 'range',
                              'unit': '°C',
                              'valueType': 't_control'},
             'work_regime': {'name': 'work_regime',
                             'type': 'enum',
                             'unit': 'enum',
                             'valueType': 'WorkRegime',
                             'values': ['OFF',
                                        'AUTO',
                                        'VENTILATION',
                                        'NIGHT_PRECOOLING']}},
 'device_name': 'Office',
 'device_type': 'DUPLEX 570 EC5',
 'functions': [{'enabled': False, 'id': 4, 'name': 'test RS', 'triggerId': []}],
 'production_number': '355183014',
 'requests': ['work_regime', 'fan_power_req', 'temp_request'],
 'scenes': [{'author': 'admin',
             'created': 1649922877,
             'icon': 'Turbo',
             'id': 3,
             'items': [{'operation': '=',
                        'value': 'VENTILATION',
                        'variable': 'work_regime'},
                       {'operation': '=',
                        'value': '75',
                        'variable': 'fan_power_req'},
                       {'operation': '=',
                        'value': '18',
                        'variable': 'temp_request'}],
             'lastModification': 1696322349,
             'name': 'Provoz 75/18',
             'purpose': 'USER',
             'visible': True},
            {'author': 'admin',
             'created': 1654475509,
             'icon': 'Fireplace',
             'id': 6,
             'items': [{'operation': '=',
                        'value': 'AUTO',
                        'variable': 'work_regime'},
                       {'operation': '=',
                        'value': '36.0',
                        'variable': 'fan_power_req'}],
             'lastModification': 1697449467,
             'name': 'automat',
             'purpose': 'USER',
             'visible': True},
            {'author': '!servis',
             'created': 1665641378,
             'icon': 'Fan',
             'id': 7,
             'items': [{'operation': '=',
                        'value': 'OFF',
                        'variable': 'work_regime'},
                       {'operation': '=',
                        'value': '0',
                        'variable': 'fan_power_req'}],
             'lastModification': 1697456918,
             'name': 'Vypnuto',
             'purpose': 'USER',
             'visible': True},
            {'author': 'admin',
             'created': 946840038,
             'icon': 'Fan',
             'id': 8,
             'items': [{'operation': '=',
                        'value': 'VENTILATION',
                        'variable': 'work_regime'},
                       {'operation': '>',
                        'value': '65',
                        'variable': 'fan_power_req'},
                       {'operation': '=',
                        'value': '18',
                        'variable': 'temp_request'}],
             'lastModification': 1696485908,
             'name': 'Provoz 65/18_D',
             'purpose': 'USER',
             'visible': True},
            {'author': 'admin',
             'created': 1696485927,
             'icon': 'Fan',
             'id': 9,
             'items': [{'operation': '=',
                        'value': 'VENTILATION',
                        'variable': 'work_regime'},
                       {'operation': '>',
                        'value': '65',
                        'variable': 'fan_power_req'},
                       {'operation': '=',
                        'value': '18',
                        'variable': 'temp_request'}],
             'lastModification': 1696485937,
             'name': 'Provoz 65/18_H',
             'purpose': 'USER',
             'visible': True}],
 'sensors': {'fan_eta_factor': {'max': 100.0,
                                'min': 0.0,
                                'step': 1,
                                'type': 'range',
                                'unit': '%',
                                'valueType': 'percent'},
             'fan_sup_factor': {'max': 100.0,
                                'min': 0.0,
                                'step': 1,
                                'type': 'range',
                                'unit': '%',
                                'valueType': 'percent'},
             'heater_status': {'type': 'bool',
                               'unit': 'On',
                               'valueType': 'bool'},
             'mode_current': {'type': 'enum',
                              'unit': 'enum',
                              'valueType': 'DedicatedMode',
                              'values': ['OFF',
                                         'EVAPORATION',
                                         'RUNDOWN',
                                         'NORMAL',
                                         'FILTER_TEST',
                                         'FLOW_STABILIZATION',
                                         'SUBSTITUTE_CONTROL',
                                         'INTERVAL_VENTILATION',
                                         'DEFROST_HRC',
                                         'FORCE_CIRCULATION',
                                         'STARTUP',
                                         'WARM_UP',
                                         'EMERGENCY_OFF',
                                         'MANUAL',
                                         'ANTIFREEZE',
                                         'PREVENT_OFF']},
             'season_current': {'type': 'enum',
                                'unit': 'enum',
                                'valueType': 'Season',
                                'values': ['AUTO_TODA',
                                           'AUTO_TODA_RATIO',
                                           'HEATING',
                                           'NON_HEATING',
                                           'USER']},
             'season_request': {'type': 'enum',
                                'unit': 'enum',
                                'valueType': 'Season',
                                'values': ['AUTO_TODA',
                                           'AUTO_TODA_RATIO',
                                           'HEATING',
                                           'NON_HEATING',
                                           'USER']},
             'season_switch_temp': {'max': 50.0,
                                    'min': -30.0,
                                    'step': 0.1,
                                    'type': 'range',
                                    'unit': '°C',
                                    'valueType': 't_outside'},
             'temp_cool_active_offset': {'max': 3.0,
                                         'min': 0.1,
                                         'step': 0.1,
                                         'type': 'range',
                                         'unit': '°C',
                                         'valueType': 't_hysterese'},
             'temp_eha': {'max': 50.0,
                          'min': -30.0,
                          'step': 0.1,
                          'type': 'range',
                          'unit': '°C',
                          'valueType': 't_outside'},
             'temp_eta': {'max': 40.0,
                          'min': 10.0,
                          'step': 0.1,
                          'type': 'range',
                          'unit': '°C',
                          'valueType': 't_inside'},
             'temp_ida': {'max': 40.0,
                          'min': 10.0,
                          'step': 0.1,
                          'type': 'range',
                          'unit': '°C',
                          'valueType': 't_inside'},
             'temp_ida_cooler_hyst': {'max': 3.0,
                                      'min': 0.1,
                                      'step': 0.1,
                                      'type': 'range',
                                      'unit': '°C',
                                      'valueType': 't_hysterese'},
             'temp_ida_heater_hyst': {'max': 3.0,
                                      'min': 0.1,
                                      'step': 0.1,
                                      'type': 'range',
                                      'unit': '°C',
                                      'valueType': 't_hysterese'},
             'temp_oda': {'max': 50.0,
                          'min': -30.0,
                          'step': 0.1,
                          'type': 'range',
                          'unit': '°C',
                          'valueType': 't_outside'},
             'temp_oda_mean': {'max': 50.0,
                               'min': -30.0,
                               'step': 0.1,
                               'type': 'range',
                               'unit': '°C',
                               'valueType': 't_outside'},
             'temp_oda_mean_interval': {'type': 'enum',
                                        'unit': 'enum',
                                        'valueType': 'TempOdaMeanIntervalOptions',
                                        'values': ['HOURS_1',
                                                   'HOURS_3',
                                                   'HOURS_6',
                                                   'HOURS_12',
                                                   'DAYS_1',
                                                   'DAYS_2',
                                                   'DAYS_3',
                                                   'DAYS_4',
                                                   'DAYS_5',
                                                   'DAYS_6',
                                                   'DAYS_7',
                                                   'DAYS_8',
                                                   'DAYS_9',
                                                   'DAYS_10']},
             'temp_sup': {'max': 100.0,
                          'min': -30.0,
                          'step': 0.1,
                          'type': 'range',
                          'unit': '°C',
                          'valueType': 't_system'}},
 'types': {'fan_eta_factor': {'max': 100.0,
                              'min': 0.0,
                              'step': 1,
                              'type': 'range',
                              'unit': '%',
                              'valueType': 'percent'},
           'fan_power_req': {'max': 100.0,
                             'min': 0.0,
                             'name': 'fan_power_req',
                             'step': 1,
                             'type': 'range',
                             'unit': '%',
                             'valueType': 'percent'},
           'fan_sup_factor': {'max': 100.0,
                              'min': 0.0,
                              'step': 1,
                              'type': 'range',
                              'unit': '%',
                              'valueType': 'percent'},
           'heater_status': {'type': 'bool', 'unit': 'On', 'valueType': 'bool'},
           'mode_current': {'type': 'enum',
                            'unit': 'enum',
                            'valueType': 'DedicatedMode',
                            'values': ['OFF',
                                       'EVAPORATION',
                                       'RUNDOWN',
                                       'NORMAL',
                                       'FILTER_TEST',
                                       'FLOW_STABILIZATION',
                                       'SUBSTITUTE_CONTROL',
                                       'INTERVAL_VENTILATION',
                                       'DEFROST_HRC',
                                       'FORCE_CIRCULATION',
                                       'STARTUP',
                                       'WARM_UP',
                                       'EMERGENCY_OFF',
                                       'MANUAL',
                                       'ANTIFREEZE',
                                       'PREVENT_OFF']},
           'season_current': {'type': 'enum',
                              'unit': 'enum',
                              'valueType': 'Season',
                              'values': ['AUTO_TODA',
                                         'AUTO_TODA_RATIO',
                                         'HEATING',
                                         'NON_HEATING',
                                         'USER']},
           'season_request': {'type': 'enum',
                              'unit': 'enum',
                              'valueType': 'Season',
                              'values': ['AUTO_TODA',
                                         'AUTO_TODA_RATIO',
                                         'HEATING',
                                         'NON_HEATING',
                                         'USER']},
           'season_switch_temp': {'max': 50.0,
                                  'min': -30.0,
                                  'step': 0.1,
                                  'type': 'range',
                                  'unit': '°C',
                                  'valueType': 't_outside'},
           'temp_cool_active_offset': {'max': 3.0,
                                       'min': 0.1,
                                       'step': 0.1,
                                       'type': 'range',
                                       'unit': '°C',
                                       'valueType': 't_hysterese'},
           'temp_eha': {'max': 50.0,
                        'min': -30.0,
                        'step': 0.1,
                        'type': 'range',
                        'unit': '°C',
                        'valueType': 't_outside'},
           'temp_eta': {'max': 40.0,
                        'min': 10.0,
                        'step': 0.1,
                        'type': 'range',
                        'unit': '°C',
                        'valueType': 't_inside'},
           'temp_ida': {'max': 40.0,
                        'min': 10.0,
                        'step': 0.1,
                        'type': 'range',
                        'unit': '°C',
                        'valueType': 't_inside'},
           'temp_ida_cooler_hyst': {'max': 3.0,
                                    'min': 0.1,
                                    'step': 0.1,
                                    'type': 'range',
                                    'unit': '°C',
                                    'valueType': 't_hysterese'},
           'temp_ida_heater_hyst': {'max': 3.0,
                                    'min': 0.1,
                                    'step': 0.1,
                                    'type': 'range',
                                    'unit': '°C',
                                    'valueType': 't_hysterese'},
           'temp_oda': {'max': 50.0,
                        'min': -30.0,
                        'step': 0.1,
                        'type': 'range',
                        'unit': '°C',
                        'valueType': 't_outside'},
           'temp_oda_mean': {'max': 50.0,
                             'min': -30.0,
                             'step': 0.1,
                             'type': 'range',
                             'unit': '°C',
                             'valueType': 't_outside'},
           'temp_oda_mean_interval': {'type': 'enum',
                                      'unit': 'enum',
                                      'valueType': 'TempOdaMeanIntervalOptions',
                                      'values': ['HOURS_1',
                                                 'HOURS_3',
                                                 'HOURS_6',
                                                 'HOURS_12',
                                                 'DAYS_1',
                                                 'DAYS_2',
                                                 'DAYS_3',
                                                 'DAYS_4',
                                                 'DAYS_5',
                                                 'DAYS_6',
                                                 'DAYS_7',
                                                 'DAYS_8',
                                                 'DAYS_9',
                                                 'DAYS_10']},
           'temp_request': {'max': 40.0,
                            'min': 10.0,
                            'name': 'temp_request',
                            'step': 0.5,
                            'type': 'range',
                            'unit': '°C',
                            'valueType': 't_control'},
           'temp_sup': {'max': 100.0,
                        'min': -30.0,
                        'step': 0.1,
                        'type': 'range',
                        'unit': '°C',
                        'valueType': 't_system'},
           'work_regime': {'name': 'work_regime',
                           'type': 'enum',
                           'unit': 'enum',
                           'valueType': 'WorkRegime',
                           'values': ['OFF',
                                      'AUTO',
                                      'VENTILATION',
                                      'NIGHT_PRECOOLING']}},
 'unit': ['season_current',
          'temp_oda',
          'temp_oda_mean',
          'temp_eta',
          'temp_eha',
          'fan_sup_factor',
          'fan_eta_factor',
          'temp_ida',
          'temp_sup',
          'heater_status',
          'mode_current']}

Poll data:


async def main():
    result = await amotion.update()
    pprint(result)


asyncio.run(main())

Response is a dictionary of the params

{'fan_eta_factor': 65,
 'fan_power_req': '65',
 'fan_sup_factor': 65,
 'heater_status': True,
 'mode_current': 'NORMAL',
 'season_current': 'HEATING',
 'temp_eha': 2.8,
 'temp_eta': 18.3,
 'temp_ida': 18.3,
 'temp_oda': -0.4,
 'temp_oda_mean': -0.427273,
 'temp_request': '18',
 'temp_sup': 13.8,
 'work_regime': 'VENTILATION'}

Control:

Set param:


async def main():
    result = await amotion.control("temp_request", 25)
    pprint(result)

asyncio.run(main())

Return True or False

Use scene


async def main():
    result = await amotion.setScene(3)
    pprint(result)

asyncio.run(main())

This example use the scene 'Provoz 75/18' from previous example. Returns True or False

Enable/disable function (device trigger)


async def main():
    result = await amotion.setFce(1, True)
    pprint(result)

asyncio.run(main())

Metadata

Release files for amotion 0.1.10

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for amotion 0.1.10
File Size Uploaded Provenance
amotion-0.1.10.tar.gz 9.4 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for amotion 0.1.10
File Interpreter ABI Platform
amotion-0.1.10-py3-none-any.whl Python 3 none any Details

Total release size: 16.3 kB

Release files / amotion-0.1.10.tar.gz

Download URL amotion-0.1.10.tar.gz
Size 9.4 kB
Tags Source
SHA-256 checksum
How to use checksums
fbfbeaaca14f1cd54c48dc770528258fef2a12c84ee467eac0b1361330a09e0c
BLAKE2b-256 checksum
How to use checksums
6eae8b5bd41e911528e31825526bf1c02775734e78bbf3f0efe1d7d8e64f4909
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.12.8

Release files / amotion-0.1.10-py3-none-any.whl

Download URL amotion-0.1.10-py3-none-any.whl
Size 6.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
320a5097b2bbe6ff38940bd3e6129d3ed6aaba59770b19a295e7b6bf0eae144b
BLAKE2b-256 checksum
How to use checksums
caf4c0834a3fda70bce4013bd31ec526e05ffeb921c03fdb430a8f518ea84738
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.12.8

Security for amotion 0.1.10

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.10 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page