jnimmo / pyIntesisHome

Python interface for IntesisHome devices
MIT License
34 stars 20 forks source link

Don't hardcode fan speeds #6

Closed grischard closed 4 years ago

grischard commented 6 years ago

Some fans only have three settings, which the IntesisHome app detects - we should too.

jnimmo commented 5 years ago

Happy to work on this if you're able to send me some debugging info from the device - I'm guessing it will be one of the modules which determines how many fan speeds there are

grischard commented 5 years ago

The widgets from the two devices don't look that different, so I'm not sure which is which:

  '127934688850': {
    'name': 'Has five fan speeds and up/down and left/right vanes',
    'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53]
  },
  '127934701760': {
    'name': 'Has three fan speeds',
    'widgets': [15, 3, 5, 7, 9, 13, 52, 53]
  }

So 11 would be the only different one, but there are more than just that difference...

Looking at the code, it seems like the only widget we read is 42. The API has a lot more, but it doesn't look like the fan speeds are from there:

            case 3:
            case 4:
                return new WAmbientTemp(context);
            case 5:
            case 6:
                return new WSetpoint(context);
            case 7:
            case 8:
                return new WUserMode(context);
            case 9:
            case 10:
                return new WFan(context);
            case 11:
            case 12:
                return new WVaneLR(context);
            case 13:
            case 14:
                return new WVaneUD(context);
            case 15:
            case 16:
                return new WOnOffQuiet(context);
            case 17:
            case 18:
                return new WOutdoorTemp(context);
            case 21:
            case 22:
                return new WSolarStatus(context);
            case 23:
                return new WThermoshift(context);
            case 24:
            case 25:
                return new WWorkingMode(context);
            case 26:
            case 27:
                return new WNewOperatingMode(context);
            case 28:
                return new WNewTankMode(context);
            case 31:
            case 32:
                return new WidgetHeat810(context);
            case 37:
            case 38:
                return new WInstantPower(context);
            case 39:
                return new WAccumPower(context);
            case 42:
            case 43:
                return new WVanePulseLR(context);
            case 46:
                return new WAquareaConsumption(context);
            case 47:
            case 48:
                return new WExtremesProtection(context);
            case 49:
                return new WBinaryInput2(context);

It looks like the extra widget 11 on my device is the left-right vane widget.

I've also found a list of the IDs we can set, but that doesn't tell us how to find out what we can set them to:

        ON_OFF(1),
        USER_MODE(2),
        FAN_SPEED(4),
        VANE_UD(5),
        VANE_LR(6),
        VANE_PULSE_UD(7),
        VANE_PULSE_LR(8),
        SETPOINT_TEMP(9),
        AMBIENT_TEMP(10),
        ALARM_STATUS(14),
        ERROR_CODE(15),
        QUIET_MODE(34),
        CONFIG_SETPOINT_LOWER_LIMIT(35),
        CONFIG_SETPOINT_UPPER_LIMIT(36),
        OUTDOOR_TEMP(37),
        CLIMA_WORKING_MODE(42),
        TANK_WORKING_MODE(44),
        TANK_WATER_TEMPERATURE(45),
        SOLAR_STATUS(46),
        THERMOSHIFT_HEAT_ECO(48),
        THERMOSHIFT_HEAT_POWERFUL(50),
        THERMOSHIFT_COOL_ECO(49),
        THERMOSHIFT_COOL_POWERFUL(51),
        THERMOSHIFT_TANK_ECO(52),
        THERMOSHIFT_TANK_POWERFUL(53),
        ERROR_RESET(54),
        OPERATING_MODE(58),
        HEAT_8_10(60),
        CONFIG_MODE_MAP(61),
        RUNTIME_MODE_RESTRICTIONS(62),
        CONFIG_HORIZONTAL_VANES(63),
        CONFIG_VERTICAL_VANES(64),
        CONFIG_QUIET(65),
        CONFIG_CONFIRM_OFF(66),
        CONFIG_FAN_MAP(67),
        INSTANT_POWER_CONSUMPTION(68),
        ACCUMULATED_POWER_CONSUMPTION(69),
        WEEKLY_POWER_CONSUMPTION(70),
        CONFIG_OPERATING_MODE(75),
        CONFIG_VANES_PULSE(77),
        AQUAREA_HEAT_CONSUMPTION(82),
        AQUAREA_COOL_CONSUMPTION(81),
        AQUAREA_TANK_CONSUMPTION(80),
        FAHRENHEIT_TYPE(137),
        EXTREMES_PROTECTION_STATUS(140),
        EXTREMES_PROTECTION(148),
        BINARY_INPUT(149),
        CONFIG_BINARY_INPUT(153),
        UID_BINARY_INPUT_ON_OFF(168),
        UID_BINARY_INPUT_OCCUPANCY(169),
        UID_BINARY_INPUT_WINDOW(170),
        UID_BINARY_INPUT_SLEEP_MODE(191),
        RSSI(60002);
gianfrdp commented 5 years ago

Hello, please see if this could be useful

INTESIS_MAP = {
    1: {'name': 'power', 'values': {0: 'off', 1: 'on'}},
    2: {'name': 'mode', 'values': {0: 'auto', 1: 'heat', 2: 'dry', 3: 'fan', 4: 'cool'}},
    4: {'name': 'fan_speed', 'values': {0: "auto", 1: "quiet", 2: "low", 3: "medium", 4: "high"}},
    5: {'name': 'vvane',
        'values': {0: "auto/stop", 10: "swing", 1: "manual1", 2: "manual2", 3: "manual3", 4: "manual4", 5: "manual5"}},
    6: {'name': 'hvane',
        'values': {0: "auto/stop", 10: "swing", 1: "manual1", 2: "manual2", 3: "manual3", 4: "manual4", 5: "manual5"}},
    9: {'name': 'setpoint', 'null': 32768},
    10: {'name': 'temperature'},
    13: {'name': 'working_hours'},
    34: {'name': 'quiet', 'values': {0: "off", 1: "on"}},
    35: {'name': 'setpoint_min'},
    36: {'name': 'setpoint_max'},
    37: {'name': 'outdoor_temperature'},
    38: {'name': 'water_outlet_temperature'},
    39: {'name': 'water_inlet_temperature'},
    42: {'name': 'climate', 'values': {0: "comfort", 1: "eco", 2: "powerful"}},
    44: {'name': 'tank', 'values': {0: "comfort", 1: "eco", 2: "powerful", -32768: "N/A"}},
    45: {'name': 'tank_temperature'},
    48: {'name': 'heat_thermo_shift_eco'},
    49: {'name': 'cool_thermo_shift_eco'},
    50: {'name': 'heat_thermo_shift_powerful'},
    51: {'name': 'cool_thermo_shift_powerful'},
    52: {'name': 'tank_thermo_shift_eco'},
    53: {'name': 'tank_thermo_shift_powerful', 'min': 0, 'max': 100},
    55: {'name': 'heat_thermo_shift'},
    56: {'name': 'cool_water_setpoint_temperature'},
    57: {'name': 'tank_setpoint_temperature'},
    58: {'name': 'user_mode', 'values': {0: "maintenance", 1: "heat", 2: "heat+tank", 3: "tank", 4: "cool+tank", 5: "cool", 6: "auto", 7: "auto+tank"}},
    83: {'name': 'heat_high_water_set_temperature'},
    84: {'name': 'heating_off_temperature'},
    87: {'name': 'heater_setpoint_temperature'},
    90: {'name': 'water_target_temperature'},
    95: {'name': 'heat_interval', 'values': {1: 30, 2: 60, 3: 90, 4: 120, 5: 150, 6: 180, 7: 210, 8: 240,
             9: 270, 10: 300, 11: 330, 12: 360, 13: 390, 14: 420, 15: 450, 16: 480, 17: 510, 18: 540, 19: 570,
             20: 600, -32768: "N/A"}},
   107: {'name': 'aquarea_working_hours'},
   123: {'name': 'ext_thermo_control', 'values': {85: "off", 170: "on"}},
   124: {'name': 'tank_present', 'values': {85: "off", 170: "on"}},
   125: {'name': 'solar_priority', 'values': {85: "off", 170: "on", -32768: "N/A"}},
   134: {'name': 'heat_low_outdoor_set_temperature'},
   135: {'name': 'heat_high_outdoor_set_temperature'},
   136: {'name': 'heat_low_water_set_temperature'},
   144: {'name': 'error_code'}
   }

https://github.com/gianfrdp/pyIntesisHome

jnimmo commented 5 years ago

Interesting - thanks for that where did you find those? I don't have any way of testing it at the moment is the only trouble!

gianfrdp commented 5 years ago

Hello, if question is for me... it was a combination of reverse engineering of JavaScript files on intesishome webpages plus tests changing settings and logging data before and after changes

jnimmo commented 5 years ago
        CONFIG_FAN_MAP(67),

I suspect it might be stored in there... I'd probably need to have a look at the JS or do a MITM proxy to tell, but would need an Intesishome account to do so

jnimmo commented 5 years ago

If you added a line at line 98 in pyintesishome.py

_LOGGER.debug(fullData) 

and enable debug logging in Home Assistant

logger:
  logs:
    pyintesishome: debug

it will log out all of the raw data received from Intesishome, which will probably have the fan map included in the blob. (Or just run Wireshark to monitor traffic on the port it uses to communicate with the server)

grischard commented 5 years ago

Here's the anonymised output of that:

> hass --debug -c homeassistant
Config directory: /tmp/homeassistant
2019-06-21 18:11:00 INFO (SyncWorker_9) [homeassistant.loader] Loaded logger from homeassistant.components.logger
2019-06-21 18:11:00 INFO (SyncWorker_2) [homeassistant.loader] Loaded climate from homeassistant.components.climate
2019-06-21 18:11:00 INFO (SyncWorker_3) [homeassistant.loader] Loaded http from homeassistant.components.http
2019-06-21 18:11:00 INFO (SyncWorker_6) [homeassistant.loader] Loaded group from homeassistant.components.group
2019-06-21 18:11:00 INFO (SyncWorker_2) [homeassistant.loader] Loaded switch from homeassistant.components.switch
2019-06-21 18:11:00 INFO (SyncWorker_14) [homeassistant.loader] Loaded script from homeassistant.components.script
2019-06-21 18:11:00 INFO (SyncWorker_4) [homeassistant.loader] Loaded updater from homeassistant.components.updater
2019-06-21 18:11:00 INFO (SyncWorker_15) [homeassistant.loader] Loaded sensor from homeassistant.components.sensor
2019-06-21 18:11:00 INFO (SyncWorker_7) [homeassistant.loader] Loaded history from homeassistant.components.history
2019-06-21 18:11:00 INFO (SyncWorker_16) [homeassistant.loader] Loaded frontend from homeassistant.components.frontend
2019-06-21 18:11:00 INFO (SyncWorker_10) [homeassistant.loader] Loaded automation from homeassistant.components.automation
2019-06-21 18:11:00 INFO (SyncWorker_11) [homeassistant.loader] Loaded homeassistant from homeassistant.components.homeassistant
2019-06-21 18:11:00 INFO (SyncWorker_13) [homeassistant.loader] Loaded persistent_notification from homeassistant.components.persistent_notification
2019-06-21 18:11:00 INFO (SyncWorker_9) [homeassistant.loader] Loaded config from homeassistant.components.config
2019-06-21 18:11:00 INFO (SyncWorker_11) [homeassistant.loader] Loaded recorder from homeassistant.components.recorder
2019-06-21 18:11:00 INFO (MainThread) [homeassistant.setup] Setting up homeassistant
2019-06-21 18:11:00 INFO (MainThread) [homeassistant.setup] Setup of domain homeassistant took 0.0 seconds.
2019-06-21 18:11:00 INFO (SyncWorker_5) [homeassistant.loader] Loaded webhook from homeassistant.components.webhook
2019-06-21 18:11:00 INFO (SyncWorker_8) [homeassistant.loader] Loaded api from homeassistant.components.api
2019-06-21 18:11:00 INFO (MainThread) [homeassistant.setup] Setting up persistent_notification
2019-06-21 18:11:00 INFO (MainThread) [homeassistant.setup] Setup of domain persistent_notification took 0.0 seconds.
2019-06-21 18:11:00 INFO (SyncWorker_3) [homeassistant.loader] Loaded auth from homeassistant.components.auth
2019-06-21 18:11:00 INFO (SyncWorker_14) [homeassistant.loader] Loaded lovelace from homeassistant.components.lovelace
2019-06-21 18:11:00 INFO (SyncWorker_16) [homeassistant.loader] Loaded onboarding from homeassistant.components.onboarding
2019-06-21 18:11:00 INFO (SyncWorker_9) [homeassistant.loader] Loaded system_log from homeassistant.components.system_log
2019-06-21 18:11:00 INFO (SyncWorker_5) [homeassistant.loader] Loaded websocket_api from homeassistant.components.websocket_api
2019-06-21 18:11:00 INFO (MainThread) [homeassistant.bootstrap] Setting up {'logger', 'system_log'}
2019-06-21 18:11:00 INFO (MainThread) [homeassistant.setup] Setting up logger
2019-06-21 18:11:01 WARNING (MainThread) [homeassistant.loader] You are using a custom integration for intesishome which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you do experience issues with Home Assistant.
2019-06-21 18:11:01 INFO (MainThread) [pyintesishome] Latching onto an existing event loop.
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] {'config': {'token': 123456789, 'pushToken': 'channel-ca46afeb972dd0fcad60f3fbc0ff33ae', 'lastAppVersion': '2.6.2', 'forceUpdate': 0, 'setDelay': 0.7, 'serverIP': '212.36.84.207', 'serverPort': 5220, 'hash': '4e6ae9752ef74ccbe7399961c697fffcf0c0ff33', 'inst': [{'id': 1, 'order': 1, 'name': 'First installation', 'devices': [{'id': '123456789850', 'name': 'Room 1', 'familyId': 1793, 'modelId': 59, 'installationId': 21263, 'zoneId': 21552, 'order': 1, 'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53]}, {'id': '123456789760', 'name': 'Room 2', 'familyId': 2049, 'modelId': 81, 'installationId': 21263, 'zoneId': 22351, 'order': 2, 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, {'id': '123456789952', 'name': 'Room 3', 'familyId': 2049, 'modelId': 81, 'installationId': 21263, 'zoneId': 22353, 'order': 3, 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, {'id': '123456789194', 'name': 'Room 4', 'familyId': 2049, 'modelId': 81, 'installationId': 21263, 'zoneId': 22354, 'order': 4, 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, {'id': '123456789700', 'name': 'Room 5', 'familyId': 2049, 'modelId': 81, 'installationId': 21263, 'zoneId': 22355, 'order': 5, 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}]}]}, 'status': {'hash': '4a62cf35805a2bb3ac82ce63add92b6607c0ff33', 'status': [{'deviceId': 123456789850, 'uid': 1, 'value': 0}, {'deviceId': 123456789850, 'uid': 2, 'value': 2}, {'deviceId': 123456789850, 'uid': 4, 'value': 3}, {'deviceId': 123456789850, 'uid': 5, 'value': 0}, {'deviceId': 123456789850, 'uid': 6, 'value': 0}, {'deviceId': 123456789850, 'uid': 9, 'value': 32768}, {'deviceId': 123456789850, 'uid': 10, 'value': 220}, {'deviceId': 123456789850, 'uid': 12, 'value': 0}, {'deviceId': 123456789850, 'uid': 13, 'value': 2899}, {'deviceId': 123456789850, 'uid': 14, 'value': 0}, {'deviceId': 123456789850, 'uid': 15, 'value': 0}, {'deviceId': 123456789850, 'uid': 35, 'value': 100}, {'deviceId': 123456789850, 'uid': 36, 'value': 320}, {'deviceId': 123456789850, 'uid': 61, 'value': 31}, {'deviceId': 123456789850, 'uid': 62, 'value': 0}, {'deviceId': 123456789850, 'uid': 63, 'value': 1025}, {'deviceId': 123456789850, 'uid': 64, 'value': 1025}, {'deviceId': 123456789850, 'uid': 65, 'value': 0}, {'deviceId': 123456789850, 'uid': 66, 'value': 0}, {'deviceId': 123456789850, 'uid': 67, 'value': 63}, {'deviceId': 123456789850, 'uid': 181, 'value': 0}, {'deviceId': 123456789850, 'uid': 182, 'value': 0}, {'deviceId': 123456789850, 'uid': 183, 'value': 0}, {'deviceId': 123456789850, 'uid': 184, 'value': 0}, {'deviceId': 123456789850, 'uid': 185, 'value': 0}, {'deviceId': 123456789850, 'uid': 186, 'value': 0}, {'deviceId': 123456789850, 'uid': 187, 'value': 0}, {'deviceId': 123456789850, 'uid': 188, 'value': 0}, {'deviceId': 123456789850, 'uid': 189, 'value': 0}, {'deviceId': 123456789850, 'uid': 190, 'value': 0}, {'deviceId': 123456789850, 'uid': 50000, 'value': 1}, {'deviceId': 123456789850, 'uid': 50001, 'value': 0}, {'deviceId': 123456789850, 'uid': 50002, 'value': 0}, {'deviceId': 123456789850, 'uid': 50003, 'value': 0}, {'deviceId': 123456789850, 'uid': 50004, 'value': 240}, {'deviceId': 123456789850, 'uid': 50005, 'value': 280}, {'deviceId': 123456789850, 'uid': 50006, 'value': 190}, {'deviceId': 123456789850, 'uid': 50007, 'value': 230}, {'deviceId': 123456789850, 'uid': 50008, 'value': 1}, {'deviceId': 123456789850, 'uid': 50010, 'value': 0}, {'deviceId': 123456789850, 'uid': 60002, 'value': 175}, {'deviceId': 123456789952, 'uid': 1, 'value': 0}, {'deviceId': 123456789952, 'uid': 2, 'value': 1}, {'deviceId': 123456789952, 'uid': 4, 'value': 1}, {'deviceId': 123456789952, 'uid': 5, 'value': 0}, {'deviceId': 123456789952, 'uid': 9, 'value': 180}, {'deviceId': 123456789952, 'uid': 10, 'value': 265}, {'deviceId': 123456789952, 'uid': 12, 'value': 0}, {'deviceId': 123456789952, 'uid': 13, 'value': 127}, {'deviceId': 123456789952, 'uid': 14, 'value': 0}, {'deviceId': 123456789952, 'uid': 15, 'value': 0}, {'deviceId': 123456789952, 'uid': 35, 'value': 160}, {'deviceId': 123456789952, 'uid': 36, 'value': 320}, {'deviceId': 123456789952, 'uid': 61, 'value': 31}, {'deviceId': 123456789952, 'uid': 62, 'value': 0}, {'deviceId': 123456789952, 'uid': 64, 'value': 0}, {'deviceId': 123456789952, 'uid': 65, 'value': 0}, {'deviceId': 123456789952, 'uid': 66, 'value': 0}, {'deviceId': 123456789952, 'uid': 67, 'value': 14}, {'deviceId': 123456789952, 'uid': 181, 'value': 0}, {'deviceId': 123456789952, 'uid': 182, 'value': 0}, {'deviceId': 123456789952, 'uid': 183, 'value': 0}, {'deviceId': 123456789952, 'uid': 184, 'value': 0}, {'deviceId': 123456789952, 'uid': 185, 'value': 0}, {'deviceId': 123456789952, 'uid': 186, 'value': 0}, {'deviceId': 123456789952, 'uid': 187, 'value': 0}, {'deviceId': 123456789952, 'uid': 188, 'value': 0}, {'deviceId': 123456789952, 'uid': 189, 'value': 0}, {'deviceId': 123456789952, 'uid': 190, 'value': 0}, {'deviceId': 123456789952, 'uid': 1098, 'value': 0}, {'deviceId': 123456789952, 'uid': 50000, 'value': 1}, {'deviceId': 123456789952, 'uid': 50001, 'value': 0}, {'deviceId': 123456789952, 'uid': 50002, 'value': 0}, {'deviceId': 123456789952, 'uid': 50003, 'value': 0}, {'deviceId': 123456789952, 'uid': 50004, 'value': 240}, {'deviceId': 123456789952, 'uid': 50005, 'value': 280}, {'deviceId': 123456789952, 'uid': 50006, 'value': 190}, {'deviceId': 123456789952, 'uid': 50007, 'value': 230}, {'deviceId': 123456789952, 'uid': 50008, 'value': 1}, {'deviceId': 123456789952, 'uid': 50010, 'value': 0}, {'deviceId': 123456789952, 'uid': 60002, 'value': 198}, {'deviceId': 123456789700, 'uid': 1, 'value': 0}, {'deviceId': 123456789700, 'uid': 2, 'value': 2}, {'deviceId': 123456789700, 'uid': 4, 'value': 2}, {'deviceId': 123456789700, 'uid': 5, 'value': 0}, {'deviceId': 123456789700, 'uid': 9, 'value': 32768}, {'deviceId': 123456789700, 'uid': 10, 'value': 250}, {'deviceId': 123456789700, 'uid': 12, 'value': 0}, {'deviceId': 123456789700, 'uid': 13, 'value': 1562}, {'deviceId': 123456789700, 'uid': 14, 'value': 0}, {'deviceId': 123456789700, 'uid': 15, 'value': 0}, {'deviceId': 123456789700, 'uid': 35, 'value': 160}, {'deviceId': 123456789700, 'uid': 36, 'value': 320}, {'deviceId': 123456789700, 'uid': 61, 'value': 31}, {'deviceId': 123456789700, 'uid': 62, 'value': 0}, {'deviceId': 123456789700, 'uid': 64, 'value': 0}, {'deviceId': 123456789700, 'uid': 65, 'value': 0}, {'deviceId': 123456789700, 'uid': 66, 'value': 0}, {'deviceId': 123456789700, 'uid': 67, 'value': 14}, {'deviceId': 123456789700, 'uid': 181, 'value': 0}, {'deviceId': 123456789700, 'uid': 182, 'value': 0}, {'deviceId': 123456789700, 'uid': 183, 'value': 0}, {'deviceId': 123456789700, 'uid': 184, 'value': 0}, {'deviceId': 123456789700, 'uid': 185, 'value': 0}, {'deviceId': 123456789700, 'uid': 186, 'value': 0}, {'deviceId': 123456789700, 'uid': 187, 'value': 0}, {'deviceId': 123456789700, 'uid': 188, 'value': 0}, {'deviceId': 123456789700, 'uid': 189, 'value': 0}, {'deviceId': 123456789700, 'uid': 190, 'value': 0}, {'deviceId': 123456789700, 'uid': 1098, 'value': 0}, {'deviceId': 123456789700, 'uid': 50000, 'value': 1}, {'deviceId': 123456789700, 'uid': 50001, 'value': 0}, {'deviceId': 123456789700, 'uid': 50002, 'value': 0}, {'deviceId': 123456789700, 'uid': 50003, 'value': 0}, {'deviceId': 123456789700, 'uid': 50004, 'value': 240}, {'deviceId': 123456789700, 'uid': 50005, 'value': 280}, {'deviceId': 123456789700, 'uid': 50006, 'value': 190}, {'deviceId': 123456789700, 'uid': 50007, 'value': 230}, {'deviceId': 123456789700, 'uid': 50008, 'value': 1}, {'deviceId': 123456789700, 'uid': 50010, 'value': 0}, {'deviceId': 123456789700, 'uid': 60002, 'value': 187}, {'deviceId': 123456789760, 'uid': 1, 'value': 0}, {'deviceId': 123456789760, 'uid': 2, 'value': 1}, {'deviceId': 123456789760, 'uid': 4, 'value': 2}, {'deviceId': 123456789760, 'uid': 5, 'value': 0}, {'deviceId': 123456789760, 'uid': 9, 'value': 170}, {'deviceId': 123456789760, 'uid': 10, 'value': 260}, {'deviceId': 123456789760, 'uid': 12, 'value': 0}, {'deviceId': 123456789760, 'uid': 13, 'value': 144}, {'deviceId': 123456789760, 'uid': 14, 'value': 0}, {'deviceId': 123456789760, 'uid': 15, 'value': 0}, {'deviceId': 123456789760, 'uid': 35, 'value': 160}, {'deviceId': 123456789760, 'uid': 36, 'value': 320}, {'deviceId': 123456789760, 'uid': 61, 'value': 31}, {'deviceId': 123456789760, 'uid': 62, 'value': 0}, {'deviceId': 123456789760, 'uid': 64, 'value': 0}, {'deviceId': 123456789760, 'uid': 65, 'value': 0}, {'deviceId': 123456789760, 'uid': 66, 'value': 0}, {'deviceId': 123456789760, 'uid': 67, 'value': 14}, {'deviceId': 123456789760, 'uid': 181, 'value': 0}, {'deviceId': 123456789760, 'uid': 182, 'value': 0}, {'deviceId': 123456789760, 'uid': 183, 'value': 0}, {'deviceId': 123456789760, 'uid': 184, 'value': 0}, {'deviceId': 123456789760, 'uid': 185, 'value': 0}, {'deviceId': 123456789760, 'uid': 186, 'value': 0}, {'deviceId': 123456789760, 'uid': 187, 'value': 0}, {'deviceId': 123456789760, 'uid': 188, 'value': 0}, {'deviceId': 123456789760, 'uid': 189, 'value': 0}, {'deviceId': 123456789760, 'uid': 190, 'value': 0}, {'deviceId': 123456789760, 'uid': 1098, 'value': 0}, {'deviceId': 123456789760, 'uid': 50000, 'value': 1}, {'deviceId': 123456789760, 'uid': 50001, 'value': 0}, {'deviceId': 123456789760, 'uid': 50002, 'value': 0}, {'deviceId': 123456789760, 'uid': 50003, 'value': 0}, {'deviceId': 123456789760, 'uid': 50004, 'value': 240}, {'deviceId': 123456789760, 'uid': 50005, 'value': 280}, {'deviceId': 123456789760, 'uid': 50006, 'value': 190}, {'deviceId': 123456789760, 'uid': 50007, 'value': 230}, {'deviceId': 123456789760, 'uid': 50008, 'value': 1}, {'deviceId': 123456789760, 'uid': 50010, 'value': 0}, {'deviceId': 123456789760, 'uid': 60002, 'value': 202}, {'deviceId': 123456789194, 'uid': 1, 'value': 0}, {'deviceId': 123456789194, 'uid': 2, 'value': 1}, {'deviceId': 123456789194, 'uid': 4, 'value': 1}, {'deviceId': 123456789194, 'uid': 5, 'value': 0}, {'deviceId': 123456789194, 'uid': 9, 'value': 200}, {'deviceId': 123456789194, 'uid': 10, 'value': 250}, {'deviceId': 123456789194, 'uid': 12, 'value': 0}, {'deviceId': 123456789194, 'uid': 13, 'value': 1031}, {'deviceId': 123456789194, 'uid': 14, 'value': 0}, {'deviceId': 123456789194, 'uid': 15, 'value': 0}, {'deviceId': 123456789194, 'uid': 35, 'value': 160}, {'deviceId': 123456789194, 'uid': 36, 'value': 320}, {'deviceId': 123456789194, 'uid': 61, 'value': 31}, {'deviceId': 123456789194, 'uid': 62, 'value': 0}, {'deviceId': 123456789194, 'uid': 64, 'value': 0}, {'deviceId': 123456789194, 'uid': 65, 'value': 0}, {'deviceId': 123456789194, 'uid': 66, 'value': 0}, {'deviceId': 123456789194, 'uid': 67, 'value': 14}, {'deviceId': 123456789194, 'uid': 181, 'value': 0}, {'deviceId': 123456789194, 'uid': 182, 'value': 0}, {'deviceId': 123456789194, 'uid': 183, 'value': 0}, {'deviceId': 123456789194, 'uid': 184, 'value': 0}, {'deviceId': 123456789194, 'uid': 185, 'value': 0}, {'deviceId': 123456789194, 'uid': 186, 'value': 0}, {'deviceId': 123456789194, 'uid': 187, 'value': 0}, {'deviceId': 123456789194, 'uid': 188, 'value': 0}, {'deviceId': 123456789194, 'uid': 189, 'value': 0}, {'deviceId': 123456789194, 'uid': 190, 'value': 0}, {'deviceId': 123456789194, 'uid': 1098, 'value': 0}, {'deviceId': 123456789194, 'uid': 50000, 'value': 1}, {'deviceId': 123456789194, 'uid': 50001, 'value': 0}, {'deviceId': 123456789194, 'uid': 50002, 'value': 0}, {'deviceId': 123456789194, 'uid': 50003, 'value': 0}, {'deviceId': 123456789194, 'uid': 50004, 'value': 240}, {'deviceId': 123456789194, 'uid': 50005, 'value': 280}, {'deviceId': 123456789194, 'uid': 50006, 'value': 190}, {'deviceId': 123456789194, 'uid': 50007, 'value': 230}, {'deviceId': 123456789194, 'uid': 50008, 'value': 1}, {'deviceId': 123456789194, 'uid': 50010, 'value': 0}, {'deviceId': 123456789194, 'uid': 60002, 'value': 189}]}}
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] Server: 212.36.84.207:5220, Token: 123456789
2019-06-21 18:11:01 INFO (SyncWorker_17) [pyintesishome] Adding Intesis device ID 123456789850
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] {'123456789850': {'name': 'Room 1', 'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53]}}
2019-06-21 18:11:01 INFO (SyncWorker_17) [pyintesishome] Adding Intesis device ID 123456789760
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] {'123456789850': {'name': 'Room 1', 'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53]}, '123456789760': {'name': 'Room 2', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}}
2019-06-21 18:11:01 INFO (SyncWorker_17) [pyintesishome] Adding Intesis device ID 123456789952
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] {'123456789850': {'name': 'Room 1', 'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53]}, '123456789760': {'name': 'Room 2', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789952': {'name': 'Room 3', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}}
2019-06-21 18:11:01 INFO (SyncWorker_17) [pyintesishome] Adding Intesis device ID 123456789194
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] {'123456789850': {'name': 'Room 1', 'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53]}, '123456789760': {'name': 'Room 2', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789952': {'name': 'Room 3', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789194': {'name': 'Room 4', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}}
2019-06-21 18:11:01 INFO (SyncWorker_17) [pyintesishome] Adding Intesis device ID 123456789700
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] {'123456789850': {'name': 'Room 1', 'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53]}, '123456789760': {'name': 'Room 2', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789952': {'name': 'Room 3', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789194': {'name': 'Room 4', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789700': {'name': 'Room 5', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}}
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] {'123456789850': {'name': 'Room 1', 'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'medium', 'vvane': 'auto/stop', 'hvane': 'auto/stop', 'setpoint': None, 'temperature': 220}, '123456789760': {'name': 'Room 2', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789952': {'name': 'Room 3', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789194': {'name': 'Room 4', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789700': {'name': 'Room 5', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}}
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] {'123456789850': {'name': 'Room 1', 'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'medium', 'vvane': 'auto/stop', 'hvane': 'auto/stop', 'setpoint': None, 'temperature': 220, 'working_hours': 2899}, '123456789760': {'name': 'Room 2', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789952': {'name': 'Room 3', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789194': {'name': 'Room 4', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789700': {'name': 'Room 5', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}}
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] {'123456789850': {'name': 'Room 1', 'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'medium', 'vvane': 'auto/stop', 'hvane': 'auto/stop', 'setpoint': None, 'temperature': 220, 'working_hours': 2899, 'setpoint_min': 100}, '123456789760': {'name': 'Room 2', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789952': {'name': 'Room 3', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789194': {'name': 'Room 4', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789700': {'name': 'Room 5', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}}
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] {'123456789850': {'name': 'Room 1', 'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'medium', 'vvane': 'auto/stop', 'hvane': 'auto/stop', 'setpoint': None, 'temperature': 220, 'working_hours': 2899, 'setpoint_min': 100, 'setpoint_max': 320}, '123456789760': {'name': 'Room 2', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789952': {'name': 'Room 3', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789194': {'name': 'Room 4', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789700': {'name': 'Room 5', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}}
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] {'123456789850': {'name': 'Room 1', 'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'medium', 'vvane': 'auto/stop', 'hvane': 'auto/stop', 'setpoint': None, 'temperature': 220, 'working_hours': 2899, 'setpoint_min': 100, 'setpoint_max': 320}, '123456789760': {'name': 'Room 2', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789952': {'name': 'Room 3', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'quiet', 'vvane': 'auto/stop', 'setpoint': 180}, '123456789194': {'name': 'Room 4', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789700': {'name': 'Room 5', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}}
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] {'123456789850': {'name': 'Room 1', 'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'medium', 'vvane': 'auto/stop', 'hvane': 'auto/stop', 'setpoint': None, 'temperature': 220, 'working_hours': 2899, 'setpoint_min': 100, 'setpoint_max': 320}, '123456789760': {'name': 'Room 2', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789952': {'name': 'Room 3', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'quiet', 'vvane': 'auto/stop', 'setpoint': 180, 'temperature': 265}, '123456789194': {'name': 'Room 4', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789700': {'name': 'Room 5', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}}
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] {'123456789850': {'name': 'Room 1', 'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'medium', 'vvane': 'auto/stop', 'hvane': 'auto/stop', 'setpoint': None, 'temperature': 220, 'working_hours': 2899, 'setpoint_min': 100, 'setpoint_max': 320}, '123456789760': {'name': 'Room 2', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789952': {'name': 'Room 3', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'quiet', 'vvane': 'auto/stop', 'setpoint': 180, 'temperature': 265, 'working_hours': 127}, '123456789194': {'name': 'Room 4', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789700': {'name': 'Room 5', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}}
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] {'123456789850': {'name': 'Room 1', 'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'medium', 'vvane': 'auto/stop', 'hvane': 'auto/stop', 'setpoint': None, 'temperature': 220, 'working_hours': 2899, 'setpoint_min': 100, 'setpoint_max': 320}, '123456789760': {'name': 'Room 2', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789952': {'name': 'Room 3', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'quiet', 'vvane': 'auto/stop', 'setpoint': 180, 'temperature': 265, 'working_hours': 127, 'setpoint_min': 160}, '123456789194': {'name': 'Room 4', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789700': {'name': 'Room 5', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}}
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] {'123456789850': {'name': 'Room 1', 'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'medium', 'vvane': 'auto/stop', 'hvane': 'auto/stop', 'setpoint': None, 'temperature': 220, 'working_hours': 2899, 'setpoint_min': 100, 'setpoint_max': 320}, '123456789760': {'name': 'Room 2', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789952': {'name': 'Room 3', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'quiet', 'vvane': 'auto/stop', 'setpoint': 180, 'temperature': 265, 'working_hours': 127, 'setpoint_min': 160, 'setpoint_max': 320}, '123456789194': {'name': 'Room 4', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789700': {'name': 'Room 5', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}}
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] {'123456789850': {'name': 'Room 1', 'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'medium', 'vvane': 'auto/stop', 'hvane': 'auto/stop', 'setpoint': None, 'temperature': 220, 'working_hours': 2899, 'setpoint_min': 100, 'setpoint_max': 320}, '123456789760': {'name': 'Room 2', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789952': {'name': 'Room 3', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'quiet', 'vvane': 'auto/stop', 'setpoint': 180, 'temperature': 265, 'working_hours': 127, 'setpoint_min': 160, 'setpoint_max': 320}, '123456789194': {'name': 'Room 4', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789700': {'name': 'Room 5', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'low', 'vvane': 'auto/stop', 'setpoint': None, 'temperature': 250}}
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] {'123456789850': {'name': 'Room 1', 'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'medium', 'vvane': 'auto/stop', 'hvane': 'auto/stop', 'setpoint': None, 'temperature': 220, 'working_hours': 2899, 'setpoint_min': 100, 'setpoint_max': 320}, '123456789760': {'name': 'Room 2', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789952': {'name': 'Room 3', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'quiet', 'vvane': 'auto/stop', 'setpoint': 180, 'temperature': 265, 'working_hours': 127, 'setpoint_min': 160, 'setpoint_max': 320}, '123456789194': {'name': 'Room 4', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789700': {'name': 'Room 5', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'low', 'vvane': 'auto/stop', 'setpoint': None, 'temperature': 250, 'working_hours': 1562}}
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] {'123456789850': {'name': 'Room 1', 'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'medium', 'vvane': 'auto/stop', 'hvane': 'auto/stop', 'setpoint': None, 'temperature': 220, 'working_hours': 2899, 'setpoint_min': 100, 'setpoint_max': 320}, '123456789760': {'name': 'Room 2', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789952': {'name': 'Room 3', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'quiet', 'vvane': 'auto/stop', 'setpoint': 180, 'temperature': 265, 'working_hours': 127, 'setpoint_min': 160, 'setpoint_max': 320}, '123456789194': {'name': 'Room 4', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789700': {'name': 'Room 5', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'low', 'vvane': 'auto/stop', 'setpoint': None, 'temperature': 250, 'working_hours': 1562, 'setpoint_min': 160}}
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] {'123456789850': {'name': 'Room 1', 'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'medium', 'vvane': 'auto/stop', 'hvane': 'auto/stop', 'setpoint': None, 'temperature': 220, 'working_hours': 2899, 'setpoint_min': 100, 'setpoint_max': 320}, '123456789760': {'name': 'Room 2', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789952': {'name': 'Room 3', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'quiet', 'vvane': 'auto/stop', 'setpoint': 180, 'temperature': 265, 'working_hours': 127, 'setpoint_min': 160, 'setpoint_max': 320}, '123456789194': {'name': 'Room 4', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789700': {'name': 'Room 5', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'low', 'vvane': 'auto/stop', 'setpoint': None, 'temperature': 250, 'working_hours': 1562, 'setpoint_min': 160, 'setpoint_max': 320}}
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] {'123456789850': {'name': 'Room 1', 'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'medium', 'vvane': 'auto/stop', 'hvane': 'auto/stop', 'setpoint': None, 'temperature': 220, 'working_hours': 2899, 'setpoint_min': 100, 'setpoint_max': 320}, '123456789760': {'name': 'Room 2', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'low', 'vvane': 'auto/stop', 'setpoint': 170}, '123456789952': {'name': 'Room 3', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'quiet', 'vvane': 'auto/stop', 'setpoint': 180, 'temperature': 265, 'working_hours': 127, 'setpoint_min': 160, 'setpoint_max': 320}, '123456789194': {'name': 'Room 4', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789700': {'name': 'Room 5', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'low', 'vvane': 'auto/stop', 'setpoint': None, 'temperature': 250, 'working_hours': 1562, 'setpoint_min': 160, 'setpoint_max': 320}}
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] {'123456789850': {'name': 'Room 1', 'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'medium', 'vvane': 'auto/stop', 'hvane': 'auto/stop', 'setpoint': None, 'temperature': 220, 'working_hours': 2899, 'setpoint_min': 100, 'setpoint_max': 320}, '123456789760': {'name': 'Room 2', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'low', 'vvane': 'auto/stop', 'setpoint': 170, 'temperature': 260}, '123456789952': {'name': 'Room 3', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'quiet', 'vvane': 'auto/stop', 'setpoint': 180, 'temperature': 265, 'working_hours': 127, 'setpoint_min': 160, 'setpoint_max': 320}, '123456789194': {'name': 'Room 4', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789700': {'name': 'Room 5', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'low', 'vvane': 'auto/stop', 'setpoint': None, 'temperature': 250, 'working_hours': 1562, 'setpoint_min': 160, 'setpoint_max': 320}}
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] {'123456789850': {'name': 'Room 1', 'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'medium', 'vvane': 'auto/stop', 'hvane': 'auto/stop', 'setpoint': None, 'temperature': 220, 'working_hours': 2899, 'setpoint_min': 100, 'setpoint_max': 320}, '123456789760': {'name': 'Room 2', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'low', 'vvane': 'auto/stop', 'setpoint': 170, 'temperature': 260, 'working_hours': 144}, '123456789952': {'name': 'Room 3', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'quiet', 'vvane': 'auto/stop', 'setpoint': 180, 'temperature': 265, 'working_hours': 127, 'setpoint_min': 160, 'setpoint_max': 320}, '123456789194': {'name': 'Room 4', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789700': {'name': 'Room 5', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'low', 'vvane': 'auto/stop', 'setpoint': None, 'temperature': 250, 'working_hours': 1562, 'setpoint_min': 160, 'setpoint_max': 320}}
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] {'123456789850': {'name': 'Room 1', 'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'medium', 'vvane': 'auto/stop', 'hvane': 'auto/stop', 'setpoint': None, 'temperature': 220, 'working_hours': 2899, 'setpoint_min': 100, 'setpoint_max': 320}, '123456789760': {'name': 'Room 2', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'low', 'vvane': 'auto/stop', 'setpoint': 170, 'temperature': 260, 'working_hours': 144, 'setpoint_min': 160}, '123456789952': {'name': 'Room 3', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'quiet', 'vvane': 'auto/stop', 'setpoint': 180, 'temperature': 265, 'working_hours': 127, 'setpoint_min': 160, 'setpoint_max': 320}, '123456789194': {'name': 'Room 4', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789700': {'name': 'Room 5', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'low', 'vvane': 'auto/stop', 'setpoint': None, 'temperature': 250, 'working_hours': 1562, 'setpoint_min': 160, 'setpoint_max': 320}}
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] {'123456789850': {'name': 'Room 1', 'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'medium', 'vvane': 'auto/stop', 'hvane': 'auto/stop', 'setpoint': None, 'temperature': 220, 'working_hours': 2899, 'setpoint_min': 100, 'setpoint_max': 320}, '123456789760': {'name': 'Room 2', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'low', 'vvane': 'auto/stop', 'setpoint': 170, 'temperature': 260, 'working_hours': 144, 'setpoint_min': 160, 'setpoint_max': 320}, '123456789952': {'name': 'Room 3', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'quiet', 'vvane': 'auto/stop', 'setpoint': 180, 'temperature': 265, 'working_hours': 127, 'setpoint_min': 160, 'setpoint_max': 320}, '123456789194': {'name': 'Room 4', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53]}, '123456789700': {'name': 'Room 5', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'low', 'vvane': 'auto/stop', 'setpoint': None, 'temperature': 250, 'working_hours': 1562, 'setpoint_min': 160, 'setpoint_max': 320}}
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] {'123456789850': {'name': 'Room 1', 'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'medium', 'vvane': 'auto/stop', 'hvane': 'auto/stop', 'setpoint': None, 'temperature': 220, 'working_hours': 2899, 'setpoint_min': 100, 'setpoint_max': 320}, '123456789760': {'name': 'Room 2', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'low', 'vvane': 'auto/stop', 'setpoint': 170, 'temperature': 260, 'working_hours': 144, 'setpoint_min': 160, 'setpoint_max': 320}, '123456789952': {'name': 'Room 3', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'quiet', 'vvane': 'auto/stop', 'setpoint': 180, 'temperature': 265, 'working_hours': 127, 'setpoint_min': 160, 'setpoint_max': 320}, '123456789194': {'name': 'Room 4', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'quiet', 'vvane': 'auto/stop', 'setpoint': 200}, '123456789700': {'name': 'Room 5', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'low', 'vvane': 'auto/stop', 'setpoint': None, 'temperature': 250, 'working_hours': 1562, 'setpoint_min': 160, 'setpoint_max': 320}}
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] {'123456789850': {'name': 'Room 1', 'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'medium', 'vvane': 'auto/stop', 'hvane': 'auto/stop', 'setpoint': None, 'temperature': 220, 'working_hours': 2899, 'setpoint_min': 100, 'setpoint_max': 320}, '123456789760': {'name': 'Room 2', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'low', 'vvane': 'auto/stop', 'setpoint': 170, 'temperature': 260, 'working_hours': 144, 'setpoint_min': 160, 'setpoint_max': 320}, '123456789952': {'name': 'Room 3', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'quiet', 'vvane': 'auto/stop', 'setpoint': 180, 'temperature': 265, 'working_hours': 127, 'setpoint_min': 160, 'setpoint_max': 320}, '123456789194': {'name': 'Room 4', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'quiet', 'vvane': 'auto/stop', 'setpoint': 200, 'temperature': 250}, '123456789700': {'name': 'Room 5', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'low', 'vvane': 'auto/stop', 'setpoint': None, 'temperature': 250, 'working_hours': 1562, 'setpoint_min': 160, 'setpoint_max': 320}}
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] {'123456789850': {'name': 'Room 1', 'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'medium', 'vvane': 'auto/stop', 'hvane': 'auto/stop', 'setpoint': None, 'temperature': 220, 'working_hours': 2899, 'setpoint_min': 100, 'setpoint_max': 320}, '123456789760': {'name': 'Room 2', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'low', 'vvane': 'auto/stop', 'setpoint': 170, 'temperature': 260, 'working_hours': 144, 'setpoint_min': 160, 'setpoint_max': 320}, '123456789952': {'name': 'Room 3', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'quiet', 'vvane': 'auto/stop', 'setpoint': 180, 'temperature': 265, 'working_hours': 127, 'setpoint_min': 160, 'setpoint_max': 320}, '123456789194': {'name': 'Room 4', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'quiet', 'vvane': 'auto/stop', 'setpoint': 200, 'temperature': 250, 'working_hours': 1031}, '123456789700': {'name': 'Room 5', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'low', 'vvane': 'auto/stop', 'setpoint': None, 'temperature': 250, 'working_hours': 1562, 'setpoint_min': 160, 'setpoint_max': 320}}
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] {'123456789850': {'name': 'Room 1', 'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'medium', 'vvane': 'auto/stop', 'hvane': 'auto/stop', 'setpoint': None, 'temperature': 220, 'working_hours': 2899, 'setpoint_min': 100, 'setpoint_max': 320}, '123456789760': {'name': 'Room 2', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'low', 'vvane': 'auto/stop', 'setpoint': 170, 'temperature': 260, 'working_hours': 144, 'setpoint_min': 160, 'setpoint_max': 320}, '123456789952': {'name': 'Room 3', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'quiet', 'vvane': 'auto/stop', 'setpoint': 180, 'temperature': 265, 'working_hours': 127, 'setpoint_min': 160, 'setpoint_max': 320}, '123456789194': {'name': 'Room 4', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'quiet', 'vvane': 'auto/stop', 'setpoint': 200, 'temperature': 250, 'working_hours': 1031, 'setpoint_min': 160}, '123456789700': {'name': 'Room 5', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'low', 'vvane': 'auto/stop', 'setpoint': None, 'temperature': 250, 'working_hours': 1562, 'setpoint_min': 160, 'setpoint_max': 320}}
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] {'123456789850': {'name': 'Room 1', 'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'medium', 'vvane': 'auto/stop', 'hvane': 'auto/stop', 'setpoint': None, 'temperature': 220, 'working_hours': 2899, 'setpoint_min': 100, 'setpoint_max': 320}, '123456789760': {'name': 'Room 2', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'low', 'vvane': 'auto/stop', 'setpoint': 170, 'temperature': 260, 'working_hours': 144, 'setpoint_min': 160, 'setpoint_max': 320}, '123456789952': {'name': 'Room 3', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'quiet', 'vvane': 'auto/stop', 'setpoint': 180, 'temperature': 265, 'working_hours': 127, 'setpoint_min': 160, 'setpoint_max': 320}, '123456789194': {'name': 'Room 4', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'quiet', 'vvane': 'auto/stop', 'setpoint': 200, 'temperature': 250, 'working_hours': 1031, 'setpoint_min': 160, 'setpoint_max': 320}, '123456789700': {'name': 'Room 5', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'low', 'vvane': 'auto/stop', 'setpoint': None, 'temperature': 250, 'working_hours': 1562, 'setpoint_min': 160, 'setpoint_max': 320}}
2019-06-21 18:11:01 DEBUG (SyncWorker_17) [pyintesishome] Opening connection to Intesis API at 212.36.84.207:5220
2019-06-21 18:11:01 INFO (MainThread) [pyintesishome] Connected to Intesis API
2019-06-21 18:11:01 DEBUG (MainThread) [pyintesishome] Data sent: '{"command":"connect_req","data":{"token":123456789}}'
2019-06-21 18:11:01 DEBUG (MainThread) [pyintesishome] Full data: {"command":"connect_rsp","data":{"status":"ok"}}
2019-06-21 18:11:01 INFO (MainThread) [pyintesishome] IntesisHome succesfully authenticated
2019-06-21 18:11:01 DEBUG (MainThread) [pyintesishome] Dequeue
2019-06-21 18:11:01 DEBUG (MainThread) [custom_components.intesishome.climate] Added climate device with state: {'name': 'Room 1', 'widgets': [15, 3, 5, 7, 9, 11, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'medium', 'vvane': 'auto/stop', 'hvane': 'auto/stop', 'setpoint': None, 'temperature': 220, 'working_hours': 2899, 'setpoint_min': 100, 'setpoint_max': 320}
2019-06-21 18:11:01 DEBUG (MainThread) [custom_components.intesishome.climate] Added climate device with state: {'name': 'Room 2', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'low', 'vvane': 'auto/stop', 'setpoint': 170, 'temperature': 260, 'working_hours': 144, 'setpoint_min': 160, 'setpoint_max': 320}
2019-06-21 18:11:01 DEBUG (MainThread) [custom_components.intesishome.climate] Added climate device with state: {'name': 'Room 3', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'quiet', 'vvane': 'auto/stop', 'setpoint': 180, 'temperature': 265, 'working_hours': 127, 'setpoint_min': 160, 'setpoint_max': 320}
2019-06-21 18:11:01 DEBUG (MainThread) [custom_components.intesishome.climate] Added climate device with state: {'name': 'Room 4', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'heat', 'fan_speed': 'quiet', 'vvane': 'auto/stop', 'setpoint': 200, 'temperature': 250, 'working_hours': 1031, 'setpoint_min': 160, 'setpoint_max': 320}
2019-06-21 18:11:01 DEBUG (MainThread) [custom_components.intesishome.climate] Added climate device with state: {'name': 'Room 5', 'widgets': [15, 3, 5, 7, 9, 13, 52, 53], 'power': 'off', 'mode': 'dry', 'fan_speed': 'low', 'vvane': 'auto/stop', 'setpoint': None, 'temperature': 250, 'working_hours': 1562, 'setpoint_min': 160, 'setpoint_max': 320}
2019-06-21 18:11:01 DEBUG (MainThread) [custom_components.intesishome.climate] Lost connection to IntesisHome.
2019-06-21 18:11:01 DEBUG (MainThread) [custom_components.intesishome.climate] Lost connection to IntesisHome.
2019-06-21 18:11:01 DEBUG (MainThread) [custom_components.intesishome.climate] Lost connection to IntesisHome.
2019-06-21 18:11:01 DEBUG (MainThread) [custom_components.intesishome.climate] Lost connection to IntesisHome.
2019-06-21 18:11:01 DEBUG (MainThread) [custom_components.intesishome.climate] Lost connection to IntesisHome.
2019-06-21 18:11:12 DEBUG (MainThread) [pyintesishome] Full data: {"command":"rssi","data":{"deviceId":123456789952,"value":197}}{"command":"status","data":{"rssi":197,"deviceId":123456789952,"uid":60002,"value":197}}
2019-06-21 18:11:12 DEBUG (MainThread) [custom_components.intesishome.climate] IntesisHome sent a status update.
2019-06-21 18:11:12 DEBUG (MainThread) [custom_components.intesishome.climate] IntesisHome sent a status update.
2019-06-21 18:11:12 DEBUG (MainThread) [custom_components.intesishome.climate] IntesisHome sent a status update.
2019-06-21 18:11:12 DEBUG (MainThread) [custom_components.intesishome.climate] IntesisHome sent a status update.
2019-06-21 18:11:12 DEBUG (MainThread) [custom_components.intesishome.climate] IntesisHome sent a status update.
2019-06-21 18:11:17 DEBUG (MainThread) [pyintesishome] Full data: {"command":"rssi","data":{"deviceId":123456789700,"value":186}}{"command":"status","data":{"rssi":186,"deviceId":123456789700,"uid":60002,"value":186}}
2019-06-21 18:11:17 DEBUG (MainThread) [custom_components.intesishome.climate] IntesisHome sent a status update.
2019-06-21 18:11:17 DEBUG (MainThread) [custom_components.intesishome.climate] IntesisHome sent a status update.
2019-06-21 18:11:17 DEBUG (MainThread) [custom_components.intesishome.climate] IntesisHome sent a status update.
2019-06-21 18:11:17 DEBUG (MainThread) [custom_components.intesishome.climate] IntesisHome sent a status update.
2019-06-21 18:11:17 DEBUG (MainThread) [custom_components.intesishome.climate] IntesisHome sent a status update.
2019-06-21 18:11:27 DEBUG (MainThread) [pyintesishome] Full data: {"command":"rssi","data":{"deviceId":123456789760,"value":202}}{"command":"status","data":{"rssi":202,"deviceId":123456789760,"uid":60002,"value":202}}
2019-06-21 18:11:27 DEBUG (MainThread) [custom_components.intesishome.climate] IntesisHome sent a status update.
2019-06-21 18:11:27 DEBUG (MainThread) [custom_components.intesishome.climate] IntesisHome sent a status update.
2019-06-21 18:11:27 DEBUG (MainThread) [custom_components.intesishome.climate] IntesisHome sent a status update.
2019-06-21 18:11:27 DEBUG (MainThread) [custom_components.intesishome.climate] IntesisHome sent a status update.
2019-06-21 18:11:27 DEBUG (MainThread) [custom_components.intesishome.climate] IntesisHome sent a status update.

The device 123456789850 does indeed have a different 67 - the value 63 apparently means 5 speeds and automatic mode, while 14 means three speeds, no automation. Probably bits? Auto would be bit 0, and speed 1 to speed 6 bits 1 to bit 6.

jnimmo commented 4 years ago

Thanks @grischard, I've now added logic to setup the fan speed list dynamically