AC Infinity Bluetooth 69 PRO controllers SUCCESSFUL

A big thank you to @hunterjm for putting this into an integration as well as all who have come before to figure out the data for this.

I’m now pulling in the sensor data from the controller onto my dashboard with the past 1h displayed and clickable header info that pops up the past 24h.

Code
type: custom:vertical-stack-in-card
cards:
  - type: grid
    square: false
    columns: 3
    cards:
      - type: custom:mushroom-entity-card
        entity: sensor.g_ukmvm_temperature
        primary_info: state
        secondary_info: name
        name: Temperature
        icon_color: green
        tap_action:
          action: fire-dom-event
          browser_mod:
            service: browser_mod.popup
            data:
              title: Temperature
              content:
                type: custom:vertical-stack-in-card
                cards:
                  - type: custom:mushroom-entity-card
                    entity: sensor.g_ukmvm_temperature
                    primary_info: state
                    secondary_info: name
                    name: Temperature
                    icon_color: green
                  - type: custom:apexcharts-card
                    graph_span: 24h
                    update_interval: 1m
                    apex_config:
                      legend:
                        show: false
                    series:
                      - entity: sensor.g_ukmvm_temperature
                        name: Temperature
                        color: var(--green-color)
                        stroke_width: 1
                        show:
                          extremas: true
                    header:
                      show: false
      - type: custom:mushroom-entity-card
        primary_info: state
        secondary_info: name
        name: Humidity
        icon_color: blue
        entity: sensor.g_ukmvm_humidity
        tap_action:
          action: fire-dom-event
          browser_mod:
            service: browser_mod.popup
            data:
              title: Humidity
              content:
                type: custom:vertical-stack-in-card
                cards:
                  - type: custom:mushroom-entity-card
                    entity: sensor.g_ukmvm_humidity
                    primary_info: state
                    secondary_info: name
                    name: Humidity
                    icon_color: blue
                  - type: custom:apexcharts-card
                    graph_span: 24h
                    update_interval: 1m
                    apex_config:
                      legend:
                        show: false
                    series:
                      - entity: sensor.g_ukmvm_humidity
                        name: Humidity
                        color: var(--blue-color)
                        stroke_width: 1
                        show:
                          extremas: true
                    header:
                      show: false
      - type: custom:mushroom-entity-card
        primary_info: state
        secondary_info: name
        name: VPD
        icon_color: red
        entity: sensor.g_ukmvm_vpd
        tap_action:
          action: fire-dom-event
          browser_mod:
            service: browser_mod.popup
            data:
              title: VPD
              content:
                type: custom:vertical-stack-in-card
                cards:
                  - type: custom:mushroom-entity-card
                    entity: sensor.g_ukmvm_vpd
                    primary_info: state
                    secondary_info: name
                    name: VPD
                    icon_color: red
                  - type: custom:apexcharts-card
                    graph_span: 24h
                    update_interval: 1m
                    apex_config:
                      legend:
                        show: false
                    series:
                      - entity: sensor.g_ukmvm_vpd
                        name: VPD
                        color: var(--red-color)
                        stroke_width: 1
                        show:
                          extremas: true
                    header:
                      show: false
  - type: custom:apexcharts-card
    graph_span: 1h
    update_interval: 1m
    layout: minimal
    apex_config:
      chart:
        height: 150px
      legend:
        show: false
    yaxis:
      - id: first
        decimals: 1
        apex_config:
          tickAmount: 5
        show: false
      - id: second
        decimals: 1
        apex_config:
          tickAmount: 5
        show: false
      - id: third
        decimals: 2
        apex_config:
          tickAmount: 5
        show: false
    series:
      - entity: sensor.g_ukmvm_temperature
        name: Temperature
        color: var(--green-color)
        stroke_width: 1
        yaxis_id: first
      - entity: sensor.g_ukmvm_humidity
        name: Humidity
        color: var(--blue-color)
        stroke_width: 1
        yaxis_id: second
      - entity: sensor.g_ukmvm_vpd
        name: VPD
        color: var(--red-color)
        stroke_width: 1
        yaxis_id: third
    header:
      show: false
1 Like

I’m getting similar issues @Kathou99 , and it basically loses the plot with the first and only works with the second. I’ve submitted this on Github rather than here though.

I also have a feeling it’s expecting certain temperature readings and is doing calculations expecting F vs C etc hence why some people see them doing -300C

Hi! What are your thoughts about the m5stack sensors? Are they reliable?

Any way I could control the AC infinity fans directly without the pro controllers?

Some of the fans can be controlled through a PWM controller and ESPHome

Hi there @Chilling_Silence and @Kathou99, I’ve created this PR on the repo which seems to fix my issues and also explained why the Controller 69 Pro fails discovery when wifi is on. I only have a single controller though and just a fan connected, so it would be helpful if you could test this on your own instance and see if it’s working.

Thanks @loganbest I’ve grabbed that now and given it a try but I’m still getting:

2023-08-14 21:48:08.319 ERROR (MainThread) [homeassistant.components.bluetooth.manager] Error in bluetooth callback
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/bluetooth/manager.py", line 582, in scanner_adv_received
    callback(service_info, BluetoothChange.ADVERTISEMENT)
  File "/config/custom_components/ac_infinity/coordinator.py", line 87, in _async_handle_bluetooth_event
    self.controller.set_ble_device_and_advertisement_data(
  File "/usr/local/lib/python3.11/site-packages/ac_infinity_ble/device.py", line 76, in set_ble_device_and_advertisement_data
    advertisement_data.manufacturer_data[MANUFACTURER_ID]
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
KeyError: 2306
2023-08-14 21:51:35.158 DEBUG (MainThread) [custom_components.ac_infinity] 48:27:E2:0F:6E:72: AC Infinity data: DeviceInfo(type=11, name='G-4N8ZA', version=6, is_degree=False, tmp_state=0, hum_state=0, vpd_state=0, choose_port=0, tmp=-327.68, hum=-327.68, vpd=-327.68, fan_type=None, fan_state=1, fan=5, work_type=2, level_on=5, level_off=5)
2023-08-14 21:51:37.695 DEBUG (MainThread) [custom_components.ac_infinity] 48:27:E2:0F:6E:72: AC Infinity data: DeviceInfo(type=11, name='G-4N8ZA', version=6, is_degree=False, tmp_state=0, hum_state=0, vpd_state=0, choose_port=0, tmp=-327.68, hum=-327.68, vpd=-327.68, fan_type=None, fan_state=0, fan=5, work_type=2, level_on=5, level_off=5)

That’s using this commit: logging and discovery fix by loganbest · Pull Request #4 · hunterjm/ac-infinity-hacs · GitHub

But I didn’t do anything with PR#2 from there if that matters?
The first fan which I was trying to adjust simply doesn’t show the attempts, as the second unit does.

That’s ok, #2 is just an issue report. No code there.

So just to be clear, you’ve got 2 controller 69’s? What do you have attached to them? Have you tried deleting the entities entirely and restarting HASS then re-adding with the changes?

Just trying to gather more info since I only have a single controller so there’s only so much I can actually test

Two controllers each with a single fan connected to them.
Do I need to delete then re-add them in order for this to take effect?

I’m honestly unsure since I can’t test what the state of everything looks like since I have a single controller. That’s why I’m suggesting to remove both of them entirely from HA and reboot HA (not config reload) then see what autodiscovery finds and if there’s any new logging or errors

I released a python cli based on code in this forum by mikeybatoz (thanks!). It’s very slow but robust for me, I am able to read and set fan levels of 3 AC Infinity 69 PRO controllers in series for several weeks. I don’t know anything about home assistant, but the “get” action outputs json to stdout so this might be helpful, GitHub - jquast/acinf

1 Like

Tried with latest beta. Removed the units. Restarted HA.

They were detected but same issue.



Any further things I could / should try?
Can tee up SSH access if it’s helpful to debug?

Edit: on mobile so images are in reverse chronological order sorry

I have HACS integration installed and it detected my AC Infinity 69 PRO successfully. It is being used to control a bath exhaust fan. HA reads values from the controller effortlessly, but controlling the device does not work. When the command it sent, it seems to error out and revert to the previous known state.

I just tried to install the AC Infinity HACS integration and I continue to get the error:

Error

Config flow could not be loaded: 500 Internal Server Error Server got itself in trouble

Checking the logs gives me this:

`Logger: aiohttp.server
Source: custom_components/ac_infinity/config_flow.py:104
Integration: AC Infinity (documentation, issues)
First occurred: 11:34:10 AM (2 occurrences)
Last logged: 11:34:28 AM

Error handling request
Traceback (most recent call last):
File “/usr/local/lib/python3.11/site-packages/aiohttp/web_protocol.py”, line 433, in _handle_request
resp = await request_handler(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/local/lib/python3.11/site-packages/aiohttp/web_app.py”, line 504, in _handle
resp = await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File “/usr/local/lib/python3.11/site-packages/aiohttp/web_middlewares.py”, line 117, in impl
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File “/usr/src/homeassistant/homeassistant/components/http/security_filter.py”, line 85, in security_filter_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File “/usr/src/homeassistant/homeassistant/components/http/forwarded.py”, line 100, in forwarded_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File “/usr/src/homeassistant/homeassistant/components/http/request_context.py”, line 28, in request_context_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File “/usr/src/homeassistant/homeassistant/components/http/ban.py”, line 80, in ban_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File “/usr/src/homeassistant/homeassistant/components/http/auth.py”, line 236, in auth_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File “/usr/src/homeassistant/homeassistant/components/http/view.py”, line 148, in handle
result = await handler(request, **request.match_info)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/src/homeassistant/homeassistant/components/config/config_entries.py”, line 149, in post
return await super().post(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/src/homeassistant/homeassistant/components/http/data_validator.py”, line 72, in wrapper
result = await method(view, request, data, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/src/homeassistant/homeassistant/helpers/data_entry_flow.py”, line 71, in post
result = await self._flow_mgr.async_init(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/src/homeassistant/homeassistant/config_entries.py”, line 847, in async_init
flow, result = await task
^^^^^^^^^^
File “/usr/src/homeassistant/homeassistant/config_entries.py”, line 875, in _async_init
result = await self._async_handle_step(flow, flow.init_step, data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/src/homeassistant/homeassistant/data_entry_flow.py”, line 392, in _async_handle_step
result: FlowResult = await getattr(flow, method)(user_input)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/config/custom_components/ac_infinity/config_flow.py”, line 104, in async_step_user
service_info.advertisement.manufacturer_data[MANUFACTURER_ID]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
KeyError: 2306`

I’m currently using a raspberry Pi 4 with home assistant OS / supervisor

Edit: nevermind… home assistant saw the device via Bluetooth and I was able to add it. Able to turn fan on and off no problem. Hopefully fan speed adjustment will come soon

I also have a controller 69 pro and my fan turns on and off… but it’s very sluggish to respond. It takes about a half a minute to respond and it flakes between on and off a couple of times before it changes to the appropriate state.

Looks like 2023.9 isn’t happy with it @loganbest . Since updating I get:

Setup failed for custom integration ac_infinity: Requirements for ac_infinity not found: ['ac-infinity-ble==0.4.2'].

You just made fan turn on/off? Do the codes for each setting of pwm not work for you?

I’m getting the same error

Try manually downloading the library using ha terminal

Any chance of a bit of an explanation on how, please? :grimacing: