Skip to main content

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

Project description

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())

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

amotion-0.1.10.tar.gz (9.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

amotion-0.1.10-py3-none-any.whl (6.9 kB view details)

Uploaded Python 3

File details

Details for the file amotion-0.1.10.tar.gz.

File metadata

  • Download URL: amotion-0.1.10.tar.gz
  • Upload date:
  • Size: 9.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for amotion-0.1.10.tar.gz
Algorithm Hash digest
SHA256 fbfbeaaca14f1cd54c48dc770528258fef2a12c84ee467eac0b1361330a09e0c
MD5 ec7eb8989c850d289d550ea1faeb958c
BLAKE2b-256 6eae8b5bd41e911528e31825526bf1c02775734e78bbf3f0efe1d7d8e64f4909

See more details on using hashes here.

File details

Details for the file amotion-0.1.10-py3-none-any.whl.

File metadata

  • Download URL: amotion-0.1.10-py3-none-any.whl
  • Upload date:
  • Size: 6.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for amotion-0.1.10-py3-none-any.whl
Algorithm Hash digest
SHA256 320a5097b2bbe6ff38940bd3e6129d3ed6aaba59770b19a295e7b6bf0eae144b
MD5 675230cb559874c30478a35a6a2e177d
BLAKE2b-256 caf4c0834a3fda70bce4013bd31ec526e05ffeb921c03fdb430a8f518ea84738

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page