simbaja / ha_gehome

GE Home Appliances (SmartHQ) for Home Assistant
MIT License
341 stars 80 forks source link

Enhancement Request: Quad door fridge variable zone support #140

Open partsdotpdf opened 1 year ago

partsdotpdf commented 1 year ago

Hi there,

I have a Quad door F&P fridge (RF605QUAA) which is detected by this integration. Basic functionality works really well. This is a great integration!

It has a few features which are not supported/detected - can I help fix this?

  1. Variable temperature zone - not picked up at all I'm not sure if this is a different ERD codes...? I guess this is part of the SDK?
  2. Ice maker on/off & turbo mode ability?

Let me know what I can provide to help. Have dumped some shorter log output below and attached a longer log.

I see the model sensor: FridgeModelInfo(has_fridge=True, has_freezer=True, has_convertable_drawer=False, doors=2, raw_value='107904')

Some logs extract: 2023-01-28 12:34:04.197 DEBUG (MainThread) [custom_components.ge_home.update_coordinator] Got initial update for D828C9BA6A66 2023-01-28 12:34:04.197 DEBUG (MainThread) [custom_components.ge_home.update_coordinator] Adding appliance api for appliance D828C9BA6A66 (ErdApplianceType.FRIDGE) 2023-01-28 12:34:04.197 DEBUG (MainThread) [custom_components.ge_home.devices] Found device type: ErdApplianceType.FRIDGE 2023-01-28 12:34:34.583 DEBUG (MainThread) [custom_components.ge_home.update_coordinator] Updating <Entity N7M005726551 Fridge Model Info: FridgeModelInfo(has_fridge=True, has_freezer=True, has_convertable_drawer=False, doors=2, raw_value='107904')> (ge_home_N7M005726551_fridge_model_info, sensor.n7m005726551_fridge_model_info) 2023-01-28 12:34:34.584 DEBUG (MainThread) [custom_components.ge_home.entities.fridge.ge_abstract_fridge] Turbo mode not supported. 2023-01-28 12:34:34.585 DEBUG (MainThread) [custom_components.ge_home.update_coordinator] Updating (ge_home_N7M005726551_fridge, water_heater.n7m005726551_fridge) 2023-01-28 12:34:34.585 DEBUG (MainThread) [custom_components.ge_home.entities.fridge.ge_abstract_fridge] No temperature setpoint limits available. Using hardcoded limits. 2023-01-28 12:34:34.592 DEBUG (MainThread) [custom_components.ge_home.entities.fridge.ge_abstract_fridge] No temperature setpoint limits available. Using hardcoded limits. 2023-01-28 12:34:34.593 DEBUG (MainThread) [custom_components.ge_home.entities.fridge.ge_abstract_fridge] Turbo mode not supported. 2023-01-28 12:34:34.594 DEBUG (MainThread) [custom_components.ge_home.entities.fridge.ge_abstract_fridge] Device doesn't report current temperature. 2023-01-28 12:34:34.594 DEBUG (MainThread) [custom_components.ge_home.entities.fridge.ge_abstract_fridge] Turbo mode not supported. 2023-01-28 12:34:34.594 DEBUG (MainThread) [custom_components.ge_home.entities.fridge.ge_fridge] Device does not report door status. 2023-01-28 12:34:34.595 DEBUG (MainThread) [custom_components.ge_home.update_coordinator] Updating (ge_home_N7M005726551_water_filter_status, sensor.n7m005726551_water_filter_status) 2023-01-28 12:34:34.596 DEBUG (MainThread) [custom_components.ge_home.update_coordinator] Updating (ge_home_N7M005726551_freezer, water_heater.n7m005726551_freezer) 2023-01-28 12:34:34.596 DEBUG (MainThread) [custom_components.ge_home.entities.fridge.ge_abstract_fridge] No temperature setpoint limits available. Using hardcoded limits. 2023-01-28 12:34:34.597 DEBUG (MainThread) [custom_components.ge_home.entities.fridge.ge_abstract_fridge] No temperature setpoint limits available. Using hardcoded limits. 2023-01-28 12:34:34.599 DEBUG (MainThread) [custom_components.ge_home.entities.fridge.ge_abstract_fridge] Device doesn't report current temperature. 2023-01-28 12:34:34.600 DEBUG (MainThread) [custom_components.ge_home.entities.fridge.ge_freezer] Device does not report door status. 2023-01-28 12:34:34.601 DEBUG (MainThread) [custom_components.ge_home.update_coordinator] Updating (ge_home_N7M005726551_ice_maker_control_status_freezer, binary_sensor.n7m005726551_ice_maker_control_status_freezer) 2023-01-28 12:35:04.537 DEBUG (MainThread) [custom_components.ge_home.update_coordinator] Updating (ge_home_N7M005726551_sabbath_mode, switch.n7m005726551_sabbath_mode) 2023-01-28 12:35:04.538 DEBUG (MainThread) [custom_components.ge_home.update_coordinator] Updating <Entity N7M005726551 Fridge Model Info: FridgeModelInfo(has_fridge=True, has_freezer=True, has_convertable_drawer=False, doors=2, raw_value='107904')> (ge_home_N7M005726551_fridge_model_info, sensor.n7m005726551_fridge_model_info)

partsdotpdf commented 1 year ago

Ooops, debug log attached; log_fridge_2023-01-28T01-41-13.800Z.log

simbaja commented 1 year ago

Yeah, looks like it's probably using a different control/sensor scheme. Can you follow the directions over on the SDK repo and post that log? Let's see what it's exposing...

partsdotpdf commented 1 year ago

Wew nice tool. Some output below and attached some dumps. Been a bit of a self education, feel a bit dumb, some of the 'features' on the fridge/app just change the temperature & lock out changes. Ie: Ice boost and fast freeze both lock the freezer temperature to -22C.

items of interest from the 'startup' of the script:

DEBUG    Received features ['REFRIGERATION_V1_CONVERTIBLE_DRAWER', 'REFRIGERATION_V1_FOUNDATION'] for D828C9BA6A66

Icemaker boost on/off - see on/off toggle log below. DEBUG Setting 0x100D to b'\x00'

Somehow related to the variable temperature zone. DEBUG Setting 0x1022 to b'\x00\x00'

No idea what this one is. Didn't see it at all. DEBUG Setting 0x1023 to b'\x00\xf8\x07\x00\x13\x0f\x17\x01 \x1c"\x02%")\x03'

the 'iceboost' feature turn on:

DEBUG    Setting 0x100D to b'\x01'
DEBUG    Setting ErdCode.TEMPERATURE_SETTING to FridgeSetPoints(fridge=37, freezer=-8)

turn off:

DEBUG    Setting 0x100D to b'\x00'
DEBUG    Setting ErdCode.TEMPERATURE_SETTING to FridgeSetPoints(fridge=37, freezer=1)

variable zone action, (change temperature to -17C):

DEBUG    Setting 0x1022 to b'\x00\x01'
DEBUG    Appliance state change detected in GeAppliance(D828C9BA6A66) (ErdApplianceType.FRIDGE). Updated keys: 0x1022

Few other examples changing the variable temperature below... all the same Setting 0x1022 to...

'freezer' -22C:     b'\x00\xf8'
'freezer' -20C:     b'\x00\xfc'
'freezer' -19C:     b'\x00\xfe'
'freezer' -18C:     b'\x00\x00'
'freezer' -14C:     b'\x00\x07'
'soft chill' -7C:   b'\x01\x13'
'chill' -2C:        b'\x02\x1c'
'chill' -1C:        b'\x02\x1e'
'chill' 0C:         b'\x02 '
'chill' 1C:         b'\x02"'
'fridge 1C':        b'\x03"'
'fridge 2C':        b'\x03$'
'fridge' 3C:        b'\x03%'

So my guess would be the first byte is the index/ID for the variable zone mode [freezer, soft chill, chill, fridge] & second is the temperature of some sort. Each mode has a limited temperature range in the app [[-22,-14],[-9,-5],[-2,1],[1,5]]. Hope that makes sense. Not sure why for positive temps it appears to no longer use hex for the second character. Fun fun!

fast-freeze-on-off.txt ice-maker-on-off.txt iceboost-on-off.txt log-start.txt varzone-set-neg14C.txt varZone-set-neg17C.txt

partsdotpdf commented 1 year ago

I added in the new erd codes, converter & configuration to gehomesdk/erd/... Can't get the websocket example to recognise the erd new codes. I'm stumped. Any ideas?

I added: To erdconfiguration.py;

ErdConfigurationEntry(ErdCode.VARIABLE_ZONE_MODE_TEMP, ErdVariableZoneModeConverter(), ErdCodeClass.FRIDGE_SENSOR),`

To erdcodes.py

    ICE_MAKER_TURBO = "0x100d"
    VARIABLE_ZONE_MODE_TEMP = "0x1022"
    FRIDGE_UNKNOWN_1023 = "0x1023"

Made a new converter in its own file per the above and added all the gizmos to the inits...

simbaja commented 1 year ago

Did you pip install the development version using the -e flag? Otherwise, it may try to use the package from the web.

partsdotpdf commented 1 year ago

SMH. Yeah that'll do it. Up and running now. Basic function working but getting the converter right is a little annoying with the inconsistent temperature values.

So far I get something like, which looks pretty good; Setting ErdCode.VARIABLE_ZONE_MODE_TEMP to ErdVariableZoneModeTemp(mode=<ErdVariableZoneMode.SOFT_FREEZE: '01'>, temperature=-9)

Are you happy for me to raise a pull request when I'm done?

simbaja commented 1 year ago

Yep, feel free to do so, happy to integrate.