[RELEASE] Unified Thermostat Driver - MELCloud, MELView, Kumo Cloud and more if you want

Announcing the release of the Unified Thermostat Driver, currently integrating all three Mitsubishi Electric cloud-hosted platforms:

  • MELCloud in Europe
  • MELView in Australia and New Zealand
  • Kumo Cloud in the United States
    Note, IntesisHome not currently supported

What can I do with the Unified Thermostat Driver?

You can control of multiple air conditioning units using your HE hub, including:

  • Changes to Operating Mode - Heating, Cooling, Drying, Auto, Fan Only
  • Changes to Set Temperature
  • Changes to Fan Mode / Speed, including the ability to use the Fan Control template on dashboards

A built-in polling for status information will keep HE in-sync with changes made outside of HE, without the need for additional rules to be setup.

Each air conditioning unit is created as a separate virtual device in the HE hub, and can be

  • added to dashboards for manual control and reporting of the current status,
  • used in Rule Machine rules and other HE applications for automated control

What HVAC products are currently supported?

Known setups running these drivers are:

Kumo (US)

  • HVAC Unit: MFZ-KJ09-18NA-U1, Controller: Wireless 2 Interface (PAC-USWHS002-WF-2)

MELView (Aus/NZ)

  • HVAC Unit: PEA-RP100GAA (Ducted), Controller / Adaptor: PAC-ZC40L-E / MAC-568IS-E

How do I install the drivers?

The drivers are available via Hubitat Package Manager (HPM) (preferred), or can be installed manually. More details on the drivers, including the installation and setup process, are located here.

Future development (including non-Mitsubishi systems)

I very keen to move on to looking at local control, removing the need for connecting to these cloud-hosted services.
There are options to expand this list of supported platforms beyond Mitsubishi, due to the way the drivers have been designed.

Any requests can be made here on this thread or posted on the project for these drivers as an "issue".

Support and Troubleshooting

I am happy for people to post questions and comments:

Thankyou

A big thankyou to those who have supported me in getting these drivers built and tested, including:

@pjam73, @MatsF, @zimba, @luarmr, @mikkomattip, @mario.fuchs, @jasper, @craigspree, @bikesquid, @michaelahess

Obviously many others here on the Community have provided assistance indirectly through countless posts I have read as I have built up my knowledge of Groovy and the HE platform.

Simon

14 Likes

Change Log
Recent Changes:
2023-11-18: 1.0.33 - MELCloud Authentication fix
2023-04-02 : 1.0.32 - Updated applyStatusUpdates in child driver to detect when no status data is available
2023-01-09: 1.0.31 - Adding detection of units allocated to Floors and Areas in MELCloud
2023-01-07: 1.0.30 - Now use JsonOutput for larger HTTP response logging, automatically turn off Debug Logging after 30 minutes
2023-01-07: 1.0.29 - MELCloud Fixes to handle multiple AC Units (@klaamane)
2022-12-11: 1.0.28 - Include MELCloud's Power reading of true in thermostat operating state detection
2022-12-11: 1.0.27 - Changes to setHeatingSetpoint and setCoolingSetpoint to use thermostatMode rather than thermostatOperatingState when determining whether to send command to the platform
2022-11-26: 1.0.26 - Fix for Celsius to Fahrenheit conversion, Include drying operating state when setting cooling setpoint, Removed Platform Scale Preference setting

History...

2022-10-04: 1.0.25 - Added TemperatureMeasurement capability to support Thermostat Controller Built-in App
2022-09-25: 1.0.24 - Updated supported modes and fan modes to add double quotes to support HE platform version 2.3.3.122
2022-07-10: 1.0.23 - Reversing JSON changes for MELCloud and AppVersion update
2022-07-10: 1.0.22 - Fixed inclusion of language in authentication call to MELCloud
2022-07-10: 1.0.21 - Adjustment to MELCloud command JSON to try and fix 500 error
2022-07-09: 1.0.20 - Removal of min heating and max cooling restrictions
2022-07-07: 1.0.19 - Fixes for Thermostat Set Point not updating when heating or cooling set points are changed
2022-07-07: 1.0.18 - Changed reading of currentValue for attributes to always look at the database, attempt to fix issues when adjusting both mode and temperature in quick succession
2022-07-07: 1.0.17 - Fix for temperature conversion error, moved string conversion outside of method call
2022-06-19: 1.0.16 - Fix for temperature conversion in Europe
2022-05-16: 1.0.15 - Fix for logging error
2022-05-15: 1.0.14 - Tweak to MELCloud commands and logging, still trying to debug an issue
2022-05-04: 1.0.13 - Additional debug logging for errors with unit commands on MELCloud
2022-05-03: 1.0.12 - Fix for fan speed names including hyphens
2022-05-03: 1.0.11 - Additional fix for fan speed parameters
2022-05-03: 1.0.10 - Fix for temperature and fan speed parameter data types (heat and setFanSpeed commands)
2022-03-13: 1.0.9 - Fix to handle different zone configurations
2021-08-15: 1.0.8 - Added Last Command UTC attribute and checked this when determining whether to apply status updates - Kumo Only at the moment
2021-08-15: 1.0.7 - Added Temp Scale Override and Conversion methods
2021-07-25: 1.0.6 - Fahrenheit Conversion - moving temp conversion from setCooling / Heating SetPoint to setTemperature method
2021-07-20: 1.0.5 - Fixes for MELCloud Heating, was passing in power = false, should be true
2021-07-19: 1.0.4 - Updated derive mode logic to cater for power = true rather than just power = 1, catering for MELCloud status updates
2021-07-19: 1.0.3 - Updated case of temp scale and added more logging
2021-07-17: 1.0.2 - Added temperature conversion back in where necessary
2021-07-15: 1.0.1 - Fahrenheit fix - removal of temperature conversion
2021-07-13: 1.0.0 - Alpha Release

Known Issues
Kumo

  • Unit settings, such as Temperature Min / Max settings, not appearing in the same API call. Only appears in one Kumo system at this stage.

MELCloud

  • Detection of Units in different Floors, Areas and Buildings

General Development
Kumo

  • Local Control

cant wait to check this out @sburke781 you've put a lot of work into this...congrats on reaching 'release'!

2 Likes

Sorry @sanewton72, tried to add you to my list of thankyou's, but you can only mention 10 people in a post apparently... Anyway, you get a special mention :slight_smile:

2 Likes

Ive been following this project for months now, the last driver on the other post and this one, both give me same Error.

dev:9982021-07-13 08:48:13.750 am errorjava.lang.NullPointerException: Cannot invoke method trim() on null object on line 894 (initialize)

dev:9982021-07-13 08:48:02.976 am errorjava.lang.NullPointerException: Cannot invoke method trim() on null object on line 894 (refresh)

dev:9982021-07-13 08:48:01.274 am errorjava.lang.NullPointerException: Cannot invoke method trim() on null object on line 894 (refresh)

Child app logs say that Parent Works fine. The only thing confusing is the cooling setpoint says 310. But it must be code for 68. (what i set).

Just thought I would share to see if it helps at all.
Thanks for the good work!

I feel terrible that this keeps not working! All your effort and support is MUCH appreciated! But still getting the same errors after recreating from scratch, hitting save, then refresh.

[dev:2497](http://10.54.25.34/logs#dev2497)2021-07-13 10:53:36.221 am [debug](http://10.54.25.34/device/edit/2497)refresh: Refresh process complete

[dev:2497](http://10.54.25.34/logs#dev2497)2021-07-13 10:53:36.219 am [debug](http://10.54.25.34/device/edit/2497)refresh: createChildACUnits() method skipped, we are working with the Kumo Cloud platform

[dev:2497](http://10.54.25.34/logs#dev2497)2021-07-13 10:53:36.218 am [info](http://10.54.25.34/device/edit/2497)A new authentication code value has been set

[dev:2497](http://10.54.25.34/logs#dev2497)2021-07-13 10:53:36.216 am [debug](http://10.54.25.34/device/edit/2497)setAuthCode: New authentication code value has been set

[dev:2497](http://10.54.25.34/logs#dev2497)2021-07-13 10:53:36.215 am [error](http://10.54.25.34/device/edit/2497)retrieveAuthCode_KumoCloud: Unable to query Mitsubishi Electric KumoCloud: java.lang.NullPointerException: Cannot invoke method containsKey() on null object

[dev:2497](http://10.54.25.34/logs#dev2497)2021-07-13 10:53:36.212 am [debug](http://10.54.25.34/device/edit/2497)retrieveAuthCode_KumoCloud: Child - [lastScheduleChange:0, zoneTable:[:], children:[[lastScheduleChange:0, zoneTable:[9X34P0088100106F:[serial:9X34P0088100106F, mac:d4:53:83:46:4f:97, label:Living Room, port:80, unitType:ductless, lastUpdate:1626101741766, eqcStageThreeBacksupChannels:[1:0, 2:0, 3:0, 4:0], eqcUpdatedLocally:[1:false, 2:false, 3:false, 4:false], prohibits:[global:[power:false, mode:false, setpoint:false], local:[power:false, mode:false, setpoint:false], effective:[power:false, mode:false, setpoint:false]], prohibitsChanged:1593382188689, holdChanged:0, hasElectricHeatingOption:false, ledDisabled:true, cryptoSerial:0123835fad3eb5b1ee, cryptoKeySet:F, timezone:America/Denver, firmwareVersion:02.06.03, autoModeEnabled:false, roomTempOffset:-3, password:wGa148lurWJtzlbK+ihddpPfOvdd1M6rw0ke4gei, sendDesiredConditionsPending:false, sendDesiredConditionsTime:2021-07-10T04:09:46.417Z, systemChangeoverEnabled:true, minCoolSetpoint:15.5, maxHeatSetpoint:28, kumoSensorSettings:null, address:10.54.25.225, $$hashKey:object:405, desiredConditionStack:[], reportedCondition:[more:[power_on:false, air_direction_text:Auto, fan_speed_text:Auto], _created:1626104723844, power:0, fan_speed:0, air_direction:0, sp_heat:20, sp_cool:20, room_temp:20, status_display:[filter:false, standby:false, hot_adjust:false, defrost:false], lastAdapterUpdated:2021-07-12T15:45:23.844Z], overrideSettings:[dryMode:true, heatMode:true, ledDisabled:true], forceCloudUpdates:false, errorHandler:[1:[error2char:A0, error4char:8000, timestamp:1625306576, code:8000, text:8000]], rssi:[rssi:-38, string:Very strong, image:images/signal-verystrong-ondark-50x50.svg], reportedInitialSettings:[assigned_settings:[:], restart_after_outage:0, vent_air:0, voltage:0, energy_save:0, filter_alerts:0, auto_fan:0, pla_outlets:0, filter_type:0, frost_temp:0, defrost:0, oscillate:0, heating_offset:0, thermal_off1:0, thermal_off2:0, pressure1:0, pressure2:0, electric_heater1:0, electric_heater2:0, humidifier:0, humidifier_modifier:0, leftovers_settings:[2:0, 6:0, 12:0, 14:0, 18:0, 19:0, 20:0, 21:0, 22:0, 26:0, 28:0, 29:0, 30:0, 31:0]], reportedProfile:[fan_speed_stages:5, has_air_direction:true, has_auto_fan_speed:true, has_dry_function:true, has_extended_temp_range:true, has_heat_function:true, has_swing_direction:true, has_test_run:false, has_unit_function_setting:false, has_ventilation_function:true, display_setting_temp_of_dry:true, maximum_auto_temp:28, maximum_cool_or_dry_temp:28, maximum_heat_temp:28, minimum_auto_temp:13, minimum_cool_or_dry_temp:13, minimum_heat_temp:7], equipmentControllerSettings:[:], lastAdapterUpdate:2021-05-17 22:21:27.609563, systemChangeoverSettings:[masterZone:[serial:9934P008T100003F, minRuntime:20, maxStandby:180, disable:none, activeMode:__ungettable, durActive:__ungettable, durInactive:__ungettable], priority:3], mhk2Settings:[auto:[owner:none, status:inactive, heatSetpoint:null, coolSetpoint:null], connected:[thermostat:false, thermostatBattery:unset, outdoorAir:false, outdoorAirBattery:unset, indoorAir:false, indoorAirBattery:unset], dr:[override:false, event:none], hold:[adapter:[cancelMHK2:false, endTime:0], mhk2:[cancelAdapter:false, endTime:0]], info:[model:, serial:, firmware:], schedule:[owner:adapter, enabled:disabled], status:[outdoorTemp:0, outdoorHumid:null, indoorHumid:null]], programEventSettings:[1:[active:false, inUse:false, day:SuMoTuWeThFrSa, time:0600, settings:[mode:heat, spCool:null, spHeat:20, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:49.445Z], 2:[active:false, inUse:false, day:SuMoTuWeThFrSa, time:2200, settings:[mode:heat, spCool:null, spHeat:17.5, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:49.445Z], 3:[active:false, inUse:false, day:MoTuWeThFr, time:1215, settings:[mode:off, spCool:null, spHeat:null, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:49.445Z], 4:[active:false, inUse:false, day:MoTuWeThFr, time:1115, settings:[mode:heat, spCool:null, spHeat:22.5, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:49.446Z], 5:[active:false, inUse:false, day:MoTuWeThFr, time:1615, settings:[mode:heat, spCool:null, spHeat:22.5, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:49.446Z], 6:[active:false, inUse:false, day:MoTuWeThFr, time:2100, settings:[mode:heat, spCool:null, spHeat:20, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:49.446Z], 7:[active:false, inUse:false, day:SuSa, time:0800, settings:[mode:heat, spCool:null, spHeat:21.5, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:49.446Z], 8:[active:false, inUse:false, day:SuSa, time:2100, settings:[mode:heat, spCool:null, spHeat:19.5, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:49.068Z], 9:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:49.068Z], 10:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:49.068Z], 11:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:49.068Z], 12:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:49.068Z], 13:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:49.068Z], 14:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:49.068Z], 15:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:48.685Z], 16:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:48.685Z], 17:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:48.685Z], 18:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:48.685Z], 19:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:48.685Z], 20:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:48.685Z], 21:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:48.685Z], 22:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:48.280Z], 23:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:48.282Z], 24:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:48.282Z], 25:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:48.282Z], 26:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:48.282Z], 27:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:48.282Z], 28:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:48.282Z]], _requestRescan:1, _isRespondingLocally:true, acoilSettings:[isAcoil:false, inputs:[humidistat:false, ervSwitch:false, floatSwitchWet:false], outputs:[w1:false, w2:false, y:false, g:false, erv:false, humidifer:false, heartbeat:false], humidifier:[targetPcr:0, source:null, enable:false], erv:[mode:classic], ytoo:[fan:false, humidifier:false, erv:false], cbp:0, oat:0, bpcr:off, ebp:false, fDelay:0], autoChangeoverEnabled:false, optimalStart:false], 9934P008T100003F:[serial:9934P008T100003F, mac:d4:53:83:2b:7f:9b, label:Bedroom, port:80, unitType:ductless, reportedCondition:[more:[power_on:false, air_direction_text:Swing, fan_speed_text:Auto], _created:1626104723757, power:0, fan_speed:0, air_direction:7, sp_heat:20.5, sp_cool:17, room_temp:19.5, status_display:[filter:false, standby:false, hot_adjust:false, defrost:false], lastAdapterUpdated:2021-07-12T15:45:23.761Z], desiredConditionStack:[], lastUpdate:1626101741767, overrideSettings:[dryMode:true, heatMode:true, ledDisabled:true], forceCloudUpdates:false, errorHandler:[1:[error2char:A0, error4char:8000, timestamp:1626099870, code:8000, text:8000]], equipmentControllerSettings:[:], eqcStageThreeBacksupChannels:[1:0, 2:0, 3:0, 4:0], eqcUpdatedLocally:[1:false, 2:false, 3:false, 4:false], mhk2Settings:[auto:[owner:none, status:inactive, heatSetpoint:null, coolSetpoint:null], connected:[thermostat:false, thermostatBattery:unset, outdoorAir:false, outdoorAirBattery:unset, indoorAir:false, indoorAirBattery:unset], dr:[override:false, event:none], hold:[adapter:[cancelMHK2:false, endTime:0], mhk2:[cancelAdapter:false, endTime:0]], info:[model:, serial:, firmware:], schedule:[owner:adapter, enabled:disabled], status:[outdoorTemp:0, outdoorHumid:null, indoorHumid:null]], systemChangeoverSettings:[masterZone:[serial:9934P008T100003F, minRuntime:20, maxStandby:180, disable:none, activeMode:cool, durActive:0, durInactive:0], priority:1], programEventSettings:[1:[active:false, inUse:false, day:SuMoTuWeThFrSa, time:0600, settings:[mode:heat, spCool:null, spHeat:20, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:49.740Z], 2:[active:false, inUse:false, day:SuMoTuWeThFrSa, time:2200, settings:[mode:heat, spCool:null, spHeat:17.5, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:49.741Z], 3:[active:false, inUse:false, day:MoTuWeThFr, time:0600, settings:[mode:heat, spCool:null, spHeat:21.5, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:49.741Z], 4:[active:false, inUse:false, day:MoTuWeThFr, time:0745, settings:[mode:off, spCool:null, spHeat:null, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:49.741Z], 5:[active:false, inUse:false, day:MoTuWeThFr, time:1215, settings:[mode:off, spCool:null, spHeat:null, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:49.741Z], 6:[active:false, inUse:false, day:MoTuWeThFr, time:1615, settings:[mode:heat, spCool:null, spHeat:22.5, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:49.741Z], 7:[active:false, inUse:false, day:MoTuWeThFr, time:1115, settings:[mode:heat, spCool:null, spHeat:22.5, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:49.741Z], 8:[active:false, inUse:false, day:MoTuWeThFr, time:2100, settings:[mode:heat, spCool:null, spHeat:19.5, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:49.348Z], 9:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:49.348Z], 10:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:49.348Z], 11:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:49.348Z], 12:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:49.348Z], 13:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:49.348Z], 14:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:49.348Z], 15:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:48.946Z], 16:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:48.946Z], 17:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:48.946Z], 18:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:48.946Z], 19:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:48.946Z], 20:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:48.946Z], 21:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:48.946Z], 22:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:48.546Z], 23:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:48.546Z], 24:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:48.546Z], 25:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:48.546Z], 26:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:48.546Z], 27:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:48.546Z], 28:[active:false, inUse:false, day:, time:0000, settings:[mode:heat, spCool:0, spHeat:0, vaneDir:auto, fanSpeed:auto], lastUpdated:2021-07-12T14:55:48.546Z]], prohibits:[global:[power:false, mode:false, setpoint:false], local:[power:false, mode:false, setpoint:false], effective:[power:false, mode:false, setpoint:false]], prohibitsChanged:1593832606056, holdChanged:0, hasElectricHeatingOption:false, rssi:[rssi:-61, string:Strong, image:images/signal-strong-ondark-50x50.svg], ledDisabled:true, password:VGZDI/8r9tZTJxv69jWGURLMbHu6XdJ+mXIBo1+g, cryptoSerial:0123ea6714c0febfee, cryptoKeySet:F, lastAdapterUpdate:2021-07-03 20:22:23.107836, firmwareVersion:02.06.03, autoModeEnabled:false, roomTempOffset:-2, minCoolSetpoint:16.5, maxHeatSetpoint:29, timezone:America/Denver, kumoSensorSettings:null, address:10.54.25.242, reportedInitialSettings:[assigned_settings:[:], restart_after_outage:0, vent_air:0, voltage:0, energy_save:0, filter_alerts:0, auto_fan:0, pla_outlets:0, filter_type:0, frost_temp:0, defrost:0, oscillate:0, heating_offset:0, thermal_off1:0, thermal_off2:0, pressure1:0, pressure2:0, electric_heater1:0, electric_heater2:0, humidifier:0, humidifier_modifier:0, leftovers_settings:[2:0, 6:0, 12:0, 14:0, 18:0, 19:0, 20:0, 21:0, 22:0, 26:0, 28:0, 29:0, 30:0, 31:0]], reportedProfile:[fan_speed_stages:5, has_air_direction:true, has_auto_fan_speed:true, has_dry_function:true, has_extended_temp_range:true, has_heat_function:true, has_swing_direction:true, has_test_run:false, has_unit_function_setting:false, has_ventilation_function:true, display_setting_temp_of_dry:true, maximum_auto_temp:29, maximum_cool_or_dry_temp:29, maximum_heat_temp:29, minimum_auto_temp:14, minimum_cool_or_dry_temp:14, minimum_heat_temp:8], sendDesiredConditionsPending:false, sendDesiredConditionsTime:2021-07-09T23:20:19.291Z, systemChangeoverEnabled:true, $$hashKey:object:1722, _requestRescan:0, _isRespondingLocally:true, acoilSettings:[isAcoil:false, inputs:[humidistat:false, ervSwitch:false, floatSwitchWet:false], outputs:[w1:false, w2:false, y:false, g:false, erv:false, humidifer:false, heartbeat:false], humidifier:[targetPcr:0, source:null, enable:false], erv:[mode:classic], ytoo:[fan:false, humidifier:false, erv:false], cbp:0, oat:0, bpcr:off, ebp:false, fDelay:0], autoChangeoverEnabled:false, optimalStart:false]], children:[], level:3, label:Whole House, id:1584850810976-2055058039, lastUpdate:1584850905544, isSystemChangeoverGroup:true, $$hashKey:object:13690, reportedCondition:[more:[:], power:1, operation_mode:3, sp_cool:20, _created:1625872819290, fan_speed:6, sp_heat:21.5]]], label:Home, level:2, id:1581290123319-1352448193, lastUpdate:1584850810976, network:[name:HA2, password:], $$hashKey:object:1699, reportedCondition:[more:[:], power:0, operation_mode:3, sp_heat:20, sp_cool:20, _created:1625526108272]]

[dev:2497](http://10.54.25.34/logs#dev2497)2021-07-13 10:53:35.064 am [debug](http://10.54.25.34/device/edit/2497)retrieveAuthCode_KumoCloud: New Auth Code - 911a5804c1db3b8bf89db7c6641e6600

Thanks for trying out the new drivers @tjc4561 and @michaelahess, I have some more work to do :slightly_smiling_face:.

@michaelahess - I didn't end up putting in the extra logging like I mentioned previously because I thought I had solved it, so might now add that logging and see what we can work out.

@tjc4561 - I haven't made a conscious effort to handle fahrenheit vs Celsius, but it hasn't come up so far as an issue, maybe I need to look at it now...

It will be a slower turnaround now that I'm back at work, but hopefully I can look at it in about 12 hours

Thanks again,
Simon

@tjc4561 and @michaelahess - Am thinking I will revise my estimate of getting to your issues, am thinking sometime over the next 3-5 days. Certainly want to see users get up and running and seeing temperatures less than 300+ degrees.

@tjc4561 - I've repurposed a ticket I setup some time ago now to look at handling Fahrenheit, and I have some thoughts on why this may be happening for you...including some assumptions that the driver is receiving a value that is celsius, which works for those in Aus/NZ and Europe, but not the US. Strangely I do not receive temperatures in Fahrenheit from Kumo Cloud....Anyway, more work for me to do...

Simon

Once I removed the child devices from their group in the app, they showed up. So it's just sub-grouped units that are the issue.

Ok, that makes some sense with what I was seeing in the data from your logs. I'm also wondering if what we are seeing in the logs isn't exactly what is coming back, I remember early on I got confused by some of the text being stripped out when putting it out in the HE logs. I might need to find another way to get the full response back....

Released an update to remove temperature conversions, this should fix the inflated temperature readings @michaelahess and @tjc4561 reported.

Also, the drivers are now in HPM, so you can install and update them through this now.

Simon

works great, is there any command I can do to set it to Fahrenheit?

Temp is in C, when i set the cooling point, says my number, but if you hit refresh to update it, goes to C.

thanks!

Hmm, now I am confused... I'll need to take another look. It makes sense with the value changing after the refresh, but there's still something going on... The bit of code I took out should have done the conversion, but that was producing inflated results, which is why I am confused..

You could try turning on debugging briefly and see if my outputs in the logs show anything.

2021-07-14 09:00:01.219 pm debugadjustSetTemperature: Temperature passed in was null which was parsed as null, current set temperature is 17.5

dev:9972021-07-14 09:00:01.203 pm debugadjustRoomTemperature: No action taken

dev:9972021-07-14 09:00:01.191 pm debugadjustRoomTemperature: Temperature provided = 22.5, Units = °F, Converted Value = 22.5

if need more let me know.

Ok, I think I know what may be happening, but just want to confirm a few more things.

EDIT: Looking at @michaelahess 's post here, in particular the screenshot, I think it answers my question below.

With the latest code, are most of the attributes along the right hand side of the Device Edit page for one of your units showing as Celsius? i.e. ~15-30 degrees. So things like the set points / temperature, room temperature, min's and max's, etc. And do you remember whether, before I made the most recent fix to remove the conversion, whether these were showing correctly in Fahrenheit, and it was only when you tried to adjust a set point and key in 68 that the set point was saved as 310?

What I think is the issue is that when data comes back from Kumo it is coming back in Celsius, which we want to convert to Fahrenheit where that is the temperature scale set on the HE hub. The code I stripped out recently would do that conversion if it was needed. I suspect the issue is that I need to detect when a value has been provided by a user in Fahrenheit, and not apply that conversion, which I think I may have been doing. I'll take a look at it over the weekend. If you can work with Celsius for now that would be good.... Maybe this could be the start of converting the US to metric? :grin:

The driver before this one showed F for in-room temp. Now it is C.

When the unit is off it shows the max temp and all those settings in F, when i turn it on and hit refresh everything turns to C.

I can use it easily right now.

Side note, my unit has the Vent that can follow you or not. Anyway to add this in the future? Kumo cloud app has it.

This works, just with a couple conversions, reading it makes less sense but it is accurate:


Version 1.0.2 released - hoping to address the issues with Celsius vs Fahrenheit, experienced by @michaelahess and @tjc4561.

NOTE - After updating the drivers, you will need to click Save Preferences on the parent device.

The drivers now convert values sent to the platform when entered in the HE interface and there is a difference between the platform and the HE hub. So in the example of Kumo Cloud and those users in the U.S., Kumo Cloud records temperatures in Celsius, whereas many users will have their HE hub setup in Fahrenheit. Temperatures returned from the platform as a status update are also converted, where necessary.

Seems like when i set a temp, if i hit refresh it goes to 87.7. I even let it stay without hitting refresh and 1 min later comes back and changes to 87. Maybe im doing somthing wrong. Here is the logs.

2021-07-17 06:36:00.656 pm debugapplyResponseStatus: Status update complete

dev:9972021-07-17 06:36:00.646 pm debugadjustThermostatFanMode: No change to Fan Speed detected, no action taken

dev:9972021-07-17 06:36:00.636 pm debugadjustThermostatFanMode: No change to Fan Mode detected, no action taken

dev:9972021-07-17 06:36:00.632 pm debugadjustThermostatFanMode: MEL Fan Mode Key 0 parsed as HE Fan Mode Value Auto and HE Fan Speed auto

dev:9972021-07-17 06:36:00.556 pm debugadjustCoolingSetpoint: Current coolingSetpoint 68.0, Current ThermostatSetpoint = 68.0, New coolingSetpoint = 87.8

dev:9972021-07-17 06:36:00.528 pm debugadjustSetTemperature: Cooling / Drying mode detected, adjusting cooling set point

dev:9972021-07-17 06:36:00.517 pm debugadjustSetTemperature: Current mode is cool

dev:9972021-07-17 06:36:00.505 pm debugadjustSetTemperature: Changing Set Temperature from 68.0 to 87.8

dev:9972021-07-17 06:36:00.496 pm debugadjustSetTemperature: Temperature passed in was 87.8 which was parsed as 87.8, current set temperature is 68.0

dev:9972021-07-17 06:36:00.484 pm debugadjustRoomTemperature: updating room temperature from 71.6 to 71.6

dev:9972021-07-17 06:36:00.473 pm debugadjustRoomTemperature: Temperature provided = 71.6, Units = °F, Converted Value = 71.6

dev:9972021-07-17 06:36:00.463 pm debugapplyStatusUpdates: About to adjust temperatures...

dev:9972021-07-17 06:36:00.452 pm debugadjustThermostatOperatingState: Thermostat Mode passed in = 3, Power passed in 1, OperatingState: cooling

dev:9972021-07-17 06:36:00.442 pm debugadjustThermostatMode: Thermostat Mode provided 3, Power provided 1, parsed as Mode Description cool

dev:9972021-07-17 06:36:00.432 pm debugadjustThermostatMode: Adjust Thermostat Mode called

dev:9972021-07-17 06:36:00.423 pm debugapplyStatusUpdates: About to adjust thermostat mode details...

dev:9972021-07-17 06:36:00.413 pm debugapplyResponseStatus: Status Info: [unitId:9734P0089100041F, power:1, setMode:3, roomTemp:71.6, setTemp:87.8, setFan:0]

dev:9972021-07-17 06:36:00.384 pm debugretrieveStatusInfo_KumoCloud: Status Info - [unitId:9734P0089100041F, power:1, setMode:3, roomTemp:22, setTemp:31, setFan:0]

dev:9972021-07-17 06:36:00.372 pm debugretrieveStatusInfo_KumoCloud: response - [true, null, [[[id:2253801429937102, record_time:2021-07-18T01:35:32.200Z, device_serial:9734P0089100041F, it_status:null, rssi:-51, power:1, operation_mode:3, set_temp:null, set_temp_a:null, fan_speed:0, air_direction:0, prohibit_local_remote_control:null, room_temp:22, room_temp_beyond:null, room_temp_a:null, out_of_use:null, unusual_figures:32768, two_figures_code:A0, status_display:0, actual_fan_speed:null, sp_cool:31, sp_heat:24, sp_auto:-1, raw_frames:null, run_test:0, active_thermistor:null, temp_source:null, seconds_since_contact:29]], [[device_serial:9734P0089100041F, id:2253801268455280, responded_to:null], [device_serial:9734P0089100041F, id:2253801268455279, responded_to:null], [device_serial:9734P0089100041F, id:2253801268455278, responded_to:null], [device_serial:9734P0089100041F, id:2253801268455277, responded_to:null]]]]

dev:9972021-07-17 06:36:00.086 pm debugretrieveStatusInfo: Retrieving status info from KumoCloud

dev:9972021-07-17 06:36:00.063 pm debugrefresh: Refresh process called

dev:9972021-07-17 06:34:59.375 pm debugsetTemperature: Temperature adjusted to 68.0 for Front room mini - FRONT ROOM

Thanks again for testing, at least it appears to be staying in the same scale, based on your description. My suspicion with the value changing on multiple refreshes maybe rounding within the conversion process, most likely within my control. I'll look through the logs more closely.