mill1000 / midea-ac-py

Home Assistant custom integration to control Midea (and associated brands) air conditioners via LAN.
MIT License
154 stars 16 forks source link

"Device is not capable of eco mode" on Whynter ARC-1230WN #130

Closed angrycatmeowmeow closed 6 months ago

angrycatmeowmeow commented 6 months ago

You may remember me from yesterday, there are still a few unexpected error fetching midea_ac data errors in here but I'm just wondering if this Eco mode error is anything to be concerned about.

This error originated from a custom integration.

Logger: msmart.device.AC.device
Source: custom_components/midea_ac/coordinator.py:44
integration: Midea Smart AC (documentation, issues)
First occurred: May 6, 2024 at 23:15:27 (10 occurrences)
Last logged: 07:42:00

Device is not capable of eco mode.

Turning the unit to "cool" automatically shows Eco mode on the card, and changing the preset to "none" does nothing, it goes right back to eco mode.

image

home-assistant_midea_ac_2024-05-07T11-36-58.546Z.log

mill1000 commented 6 months ago

there are still a few unexpected error fetching midea_ac data errors in here

There's something strange going on with these errors. There'san assert failing, but it never happens when your debug logging is enabled.

Now about the ECO bit. Can you enable debug logging and either restart HA or reload the integration? I need to see what your device claims to be capable of.

v1k70rk4 commented 6 months ago

It's worth disabling any other existing integration. The air conditioning system can easily malfunction if queried too frequently.

angrycatmeowmeow commented 6 months ago

there are still a few unexpected error fetching midea_ac data errors in here

There's something strange going on with these errors. There'san assert failing, but it never happens when your debug logging is enabled.

Now about the ECO bit. Can you enable debug logging and either restart HA or reload the integration? I need to see what your device claims to be capable of.

home-assistant_midea_ac_2024-05-07T17-05-16.139Z.log

I did have internet blocked at my router, but I enabled it for troubleshooting. The only other thing I have is adguard home which might be blocking something? Could that cause the failures you're seeing? I don't want it phoning home and doing software updates.

It's worth disabling any other existing integration. The air conditioning system can easily malfunction if queried too frequently.

I did have another integration, midea_ac_lan by georgezhao, but it's been completely deleted (from HACS) and I rebooted the host.

mill1000 commented 6 months ago

I did have internet blocked at my router, but I enabled it for troubleshooting. The only other thing I have is adguard home which might be blocking something? Could that cause the failures you're seeing? I don't want it phoning home and doing software updates.

In my experience attempting to block the device (via PiHole) would cause the WiFi module to reboot periodically.

mill1000 commented 6 months ago

Ok, so your device doesn't claim to support Eco mode. No biggie.

In your log it looks like the integration/system was reset at 2024-05-07 13:03:18.549. After this time there are no warnings about eco mode being not supported. The last eco mode warning was from 4 hour prior at 2024-05-07 07:49:46.093.

Either it's working now (maybe because midea_ac_lan was removed), or you weren't recreating the error by trying to set the preset mode.

angrycatmeowmeow commented 6 months ago

Ok I exempted it from all Adguard filtering, restarted the integration and tried to turn off eco mode. I do see the eco mode warning but it doesn't appear to actually affect anything. If you don't see anything notable here I think we can close the issue because it seems like it's working even with the occasional error and it doesn't appear to be spamming me every two minutes like it was earlier.

home-assistant_midea_ac_2024-05-07T22-15-19.641Z.log

mill1000 commented 6 months ago

I guess my only concern is why eco mode is showing as an option at all. Did you by any chance check the Show All Presets option?

angrycatmeowmeow commented 6 months ago

That was checked. I unchecked it and still seeing the error after a reboot. It shows up as soon as I turn on cool mode. Now eco mode is not an option anymore in the preset list. error_log-3.txt

mill1000 commented 6 months ago

Hmm..yeah interesting. The device is responding that it's in eco mode, even though it claims to not support it.

The warning is harmless (but annoying)

angrycatmeowmeow commented 6 months ago

So yeah cutting off internet at the router or with adguard definitely makes it throw a fit. That's unfortunate. It only ever pings module.appsmb.com.


Logger: msmart.base_device
Source: custom_components/midea_ac/coordinator.py:38
integration: Midea Smart AC (documentation, issues)
First occurred: May 7, 2024 at 20:26:04 (58 occurrences)
Last logged: 09:26:56

Network timeout 192.168.50.11:6444: No response from host.
No response from 192.168.50.11:6444 in 6.000000 seconds.
Network error 192.168.50.11:6444: Transport is closing or closed.
Network error 192.168.50.11:6444: Error packet received.
No response from 192.168.50.11:6444 in 6.010000 seconds.
mill1000 commented 6 months ago

If AdGuard is DNS based you might have more success if you redirect module.appsmb.com to a valid local host (i.e. localhost).

This works on my TP Link devices. Haven't tried it on Midea devices

angrycatmeowmeow commented 6 months ago

I'm not great with DNS stuff, that won't cause a DNS loop?

mill1000 commented 6 months ago

Nah, it's not really a loop. It just tells the device that module.appsmb.com is itself. (Sounds like a loop but it's not I swear ha.)

For some devices, just getting a valid DNS reply is enough to prevent it's watchdog from rebooting it.

Other devices might require a valid cloud connection to prevent the watchdog. I don't know which category the Midea devices fall under though.

angrycatmeowmeow commented 6 months ago

So I had to re-enable all presets as turning it on to cool through HA without eco mode caused it to use a ton of electricity, it stopped acting like an inverter unit and would go full blast to cool the room then run just the fan until the room warmed and it started cooling again, whereas in eco mode it quickly cools the room then runs at a low speed that will maintain the set temp. So it's definitely capable of eco mode and that appears to be it's default state, I don't know why it's always yelling that it's not.

mill1000 commented 6 months ago

Well it wouldn't be the first time the capabilities are reported wrong.

I mentioned in #119 that I might eventually[y introduce a better method for overriding each individual capability so a user can enable functions they know work even if the device doesn't claim to. This approach would also ensure warnings are generated when using the overrides.

angrycatmeowmeow commented 6 months ago

I guess the DNS rewrite did not do the trick haha. I guess I've just gotta let it phone home or be spammed with literally thousands of errors.

This error originated from a custom integration.
Logger: msmart.base_device
Source: custom_components/midea_ac/coordinator.py:38
integration: Midea Smart AC (documentation, issues)
First occurred: May 14, 2024 at 15:28:45 (1254 occurrences)
Last logged: 07:53:28

Network error 192.168.50.11:6444: Connect failed.
Network timeout 192.168.50.11:6444: No response from host.
No response from 192.168.50.11:6444 in 6.010000 seconds.
Network error 192.168.50.11:6444: Transport is closing or closed.
No response from 192.168.50.11:6444 in 6.000000 seconds.

####

Logger: msmart.lan
Source: runner.py:190
First occurred: May 15, 2024 at 08:01:24 (424 occurrences)
Last logged: 07:53:26

Connection to 192.168.50.11:6444 lost. Error: [Errno 104] Connection reset by peer
v1k70rk4 commented 6 months ago

@angrycatmeowmeow Hello, by the way, there is a solution to control the air conditioner with ESP home (without internet) using this: https://www.tindie.com/products/smartlightme/wifi-dongle-for-air-conditioners-midea-electrolux/

Unfortunately, this integration will not be supported, but with ESP integration, all the basic functions of the air conditioner work stably. (What doesn't work: Blade angle adjustment and Purifier function)

angrycatmeowmeow commented 6 months ago

Thanks. I'm not familiar with any USB ports on my unit unless it's on the board inside.

mill1000 commented 6 months ago

@v1k70rk4 beat me to it! I was going to provide that option as well.

The only other option would require some significant reverse engineering effort. One could theoretically develop a dummy cloud that mocks the Midea cloud to keep the dongle happy. This comes with its own potential pitfalls e.g. certificate pinning or preshared keys.

Another Github user Hypfer has developed a couple for other IoT projects (but I wouldn't go about bugging them on how it's done!)

angrycatmeowmeow commented 6 months ago

I don't recall seeing these errors with the previous integration. Do you think they were just being hidden somehow?

mill1000 commented 6 months ago

I don't recall seeing these errors with the previous integration. Do you think they were just being hidden somehow?

Probably, a lot of the logging in the original library was at debug level. e.g.

        try:
            response = self._socket.recv(1024)
        except socket.timeout as error:
            if error.args[0] == 'timed out':
                _LOGGER.debug("Recv {}, timed out".format(self.get_socket_info()))
                self._retries += 1
                return bytearray(0), True
            else:
                _LOGGER.debug("Recv {} TimeOut: {}".format(self.get_socket_info(), error))
                self._disconnect()
                self._retries += 1
                return bytearray(0), True
        except socket.error as error:
            _LOGGER.debug("Recv {} Error: {}".format(self.get_socket_info(), error))
            self._disconnect()
            self._retries += 1
            return bytearray(0), True
        else:
            _LOGGER.debug("Recv {} Response: {}".format(self.get_socket_info(), response.hex()))
            if len(response) == 0:
                _LOGGER.debug("Recv {} Server Closed Socket".format(self.get_socket_info()))
                self._disconnect()
                self._retries += 1
                return bytearray(0), True
            else:
                self._retries = 0
                return response, True
angrycatmeowmeow commented 6 months ago

Roger that. It works fine even with the errors, so I guess I can pick my poison...let it talk to the cloud or deal with the logs. 3rd option is crack it open and see if there's a USB port for the ESPhome dingus.

v1k70rk4 commented 6 months ago

@angrycatmeowmeow Hmm, most Midea devices come with a USB dongle installed by default, or can be upgraded with one later. I just looked up your model and unfortunately, it's not a common one; I couldn't find any WiFi instructions for it. However, for split air conditioners, the dongle is usually located in a place where it can be replaced at home without dismantling anything.

mill1000 commented 6 months ago

I'm tracking the fix for your ECO issue in #138 so I'm going to close this issue.

Sorry I can't help with the network issues. I understand why you'd want to block the device.