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

Announcing the (Alpha) release of the Unified Thermostat Driver, currently integrating all three Mitsubishi Electric cloud-hosted platforms under one set of drivers, providing the ability to control multiple air conditioning units in a parent child device setup in HE. Controls available for each air conditioning unit include:

  • 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 (mode, set temperature, room temperature, fan mode, etc), will keep HE in-sync with changes made through other means, without the need for additional rules to be setup.

The drivers can integrate with Mitsubishi Electric air conditioning units that use a Wi-fi Adaptor and are connected to one of the following platforms:

  • MELCloud in Europe
  • MELView in Australia and New Zealand
  • Kumo Cloud in the United States

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

Each unit is created as a separate virtual device in the HE hub and can be added to dashboards, used in Rule Machine rules and other HE applications.

More details on the drivers including the installation and setup process are located here.

Keep in mind this is an early release of these drivers. While they have come from a lengthy development and prototyping effort within the MELCloud and Kumo Cloud platforms, along with my own use and testing in MELView, there is still a likelihood of some "bumps along the road". I will refine this post and in future posts as confidence grows in those using the drivers.

I am happy for people to post questions and comments here on this thread, or indeed the other threads I have been using / hijacking for MELCloud in Europe and Kumo Cloud in the US, or you can also log issues in my GitHub repository. Here is a link to the project board for these drivers.

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.

Thanks,
Simon

8 Likes

Change Log

2021-07-13: 1.0.0 - Alpha Release
2021-07-15: 1.0.1 - Fahrenheit fix - removal of temperature conversion
2021-07-17: 1.0.2 - Added temperature conversion back in where necessary
2021-07-19: 1.0.3 - Updated case of temp scale and added more logging
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-20: 1.0.5 - Fixes for MELCloud Heating, was passing in power = false, should be true
2021-07-25: 1.0.6 - Fahrenheit Conversion - moving temp conversion from setCooling / Heating SetPoint to setTemperature method

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:

1 Like

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.

Download the Hubitat app