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
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fbfbeaaca14f1cd54c48dc770528258fef2a12c84ee467eac0b1361330a09e0c
|
|
| MD5 |
ec7eb8989c850d289d550ea1faeb958c
|
|
| BLAKE2b-256 |
6eae8b5bd41e911528e31825526bf1c02775734e78bbf3f0efe1d7d8e64f4909
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
320a5097b2bbe6ff38940bd3e6129d3ed6aaba59770b19a295e7b6bf0eae144b
|
|
| MD5 |
675230cb559874c30478a35a6a2e177d
|
|
| BLAKE2b-256 |
caf4c0834a3fda70bce4013bd31ec526e05ffeb921c03fdb430a8f518ea84738
|