home-assistant / core

:house_with_garden: Open source home automation that puts local control and privacy first.
https://www.home-assistant.io
Apache License 2.0
69.81k stars 28.94k forks source link

Apple TV integration not working with AirPort Express #101948

Closed Spale350z closed 8 months ago

Spale350z commented 8 months ago

The problem

After the 2023.8 update I can't stream any media to my AirPort Express anymore. I keep getting this error:

[Errno 110] Connect call failed ('IP_OF_AIRPORT_EXPRESS', 7000)

Downgrading back to 2023.7 will fix it and streams any kind of file through pyatv. I've also noticed that if I select the AirPort Express as Airplay destination from iOS the Apple TV integration reloads instantly.

Anyone has the same issue? I'm attaching the log file

What version of Home Assistant Core has the issue?

2023.10.2

What was the last working version of Home Assistant Core?

2023.7.3

What type of installation are you running?

Home Assistant OS

Integration causing the issue

apple_tv

Link to integration documentation on our website

https://www.home-assistant.io/integrations/apple_tv

Diagnostics information

Logger: homeassistant.components.script.riproduci_radio_viva_fm_soundbar Source: helpers/script.py:468 Integration: Script (documentation, issues) First occurred: 16:57:21 (1 occurrences) Last logged: 16:57:21

Riproduci Radio Viva FM - Soundbar: Error executing script. Unexpected error for call_service at pos 4: [Errno 110] Connect call failed ('169.254.248.229', 7000) Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 468, in _async_step await getattr(self, handler)() File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 704, in _async_call_service_step response_data = await self._async_run_long_action( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 666, in _async_run_long_action return long_task.result() ^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/core.py", line 2012, in async_call response_data = await coro ^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/core.py", line 2049, in _execute_service return await target(service_call) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/helpers/entity_component.py", line 235, in handle_service return await service.entity_service_call( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 876, in entity_service_call response_data = await _handle_entity_call( ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 948, in _handle_entity_call result = await task ^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/components/apple_tv/media_player.py", line 300, in async_play_media await self.atv.stream.stream_file(media_id) File "/usr/local/lib/python3.11/site-packages/pyatv/core/facade.py", line 370, in stream_file await self.relay("stream_file")( File "/usr/local/lib/python3.11/site-packages/pyatv/protocols/raop/init.py", line 349, in stream_file client, context = await self.playback_manager.setup(self.core.service) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/pyatv/protocols/raop/init.py", line 147, in setup self._connection = await http_connect(self._address, self._port) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/pyatv/support/http.py", line 653, in httpconnect , connection = await loop.create_connection(HttpConnection, address, port) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/asyncio/base_events.py", line 1085, in create_connection raise exceptions[0] File "/usr/local/lib/python3.11/asyncio/base_events.py", line 1069, in create_connection sock = await self._connect_sock( ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/asyncio/base_events.py", line 973, in _connect_sock await self.sock_connect(sock, address) File "/usr/local/lib/python3.11/asyncio/selector_events.py", line 628, in sock_connect return await fut ^^^^^^^^^ File "/usr/local/lib/python3.11/asyncio/selector_events.py", line 668, in _sock_connect_cb raise OSError(err, f'Connect call failed {address}') TimeoutError: [Errno 110] Connect call failed ('169.254.248.229', 7000)

Example YAML snippet

No response

Anything in the logs that might be useful for us?

No response

Additional information

No response

home-assistant[bot] commented 8 months ago

Hey there @postlund, mind taking a look at this issue as it has been labeled with an integration (apple_tv) you are listed as a code owner for? Thanks!

Code owner commands Code owners of `apple_tv` can trigger bot actions by commenting: - `@home-assistant close` Closes the issue. - `@home-assistant rename Awesome new title` Renames the issue. - `@home-assistant reopen` Reopen the issue. - `@home-assistant unassign apple_tv` Removes the current integration label and assignees on the issue, add the integration domain after the command.

(message by CodeOwnersMention)


apple_tv documentation apple_tv source (message by IssueLinks)

postlund commented 8 months ago

What is the actual IP of your AirPort Express?

Spale350z commented 8 months ago

What is the actual IP of your AirPort Express?

It is 192.168.1.65 but in the log I see 169.254.248.229

If I connect to the page 169.254.248.229:7000 it loads, same for 192.168.1.65:7000

postlund commented 8 months ago

I suspect that Zeroconf resolves incorrect IP here, maybe @bdraco can help?

Spale350z commented 8 months ago

I suspect that Zeroconf resolves incorrect IP here, maybe @bdraco can help?

Yes I also think that

By the way I also have one HomePod and a Belkin Soundform receiver and they works well. AirPort also used to before upgrading to 2023.8.X and above

bdraco commented 8 months ago

How old is the mdns stack in the problem device. Can the firmware be updated ?

bdraco commented 8 months ago

It looks like that device isn't made anymore or no mdns fixes coming

I took the link local workaround out in https://github.com/postlund/pyatv/commit/17d130a769ef2dc1d631c0d49b140117c5ecd02e because we fixed the problem in zeroconf that it was created for.

It looks like Apple has the same or similar ordering bug where it can announce an older ip address later that a newer one in its older mdns implementations which is likely never to get fixed since you can't update the firmware

We can put that workaround back in as apparently we still need it to support these older devices.

I'll open a PR later today with a comment about why it's still needed even though zeroconf itself guarantees LIFO order for ip addresses.

bdraco commented 8 months ago

It probably means we need to check for unspecified addresses as well

postlund commented 8 months ago

Latest AirPort Express software is 7.8.1 from around June 2019, so it is very old (no more updates for that one). I also seem to have some discovery issues (maybe not related) with my HomePod (but I also saw the same thing with my AirPort Express prior to restarting Home Assistant):

2023-10-13 19:40:01.899 DEBUG (MainThread) [homeassistant.components.apple_tv] Discovering device Office
2023-10-13 19:40:01.900 DEBUG (MainThread) [pyatv.core.scan] 10.0.10.84: Multicast is broken or device offline, trying unicast PTR queries for ['_device-info._tcp.local.']
2023-10-13 19:40:06.902 DEBUG (MainThread) [homeassistant.components.apple_tv] Failed to find device Office with address 10.0.10.84

Using atvremote from another computer on the network (not using python-zeroconf like in Home Assistant though) works fine for me. The IP address in this case is correct.

bdraco commented 8 months ago

Yeah we have workarounds for devices announcing unspecified addresses 🙈🙈🙈 in HA proper

bdraco commented 8 months ago

Latest AirPort Express software is 7.8.1 from around June 2019, so it is very old (no more updates for that one). I also seem to have some discovery issues (maybe not related) with my HomePod (but I also saw the same thing with my AirPort Express prior to restarting Home Assistant):


2023-10-13 19:40:01.899 DEBUG (MainThread) [homeassistant.components.apple_tv] Discovering device Office

2023-10-13 19:40:01.900 DEBUG (MainThread) [pyatv.core.scan] 10.0.10.84: Multicast is broken or device offline, trying unicast PTR queries for ['_device-info._tcp.local.']

2023-10-13 19:40:06.902 DEBUG (MainThread) [homeassistant.components.apple_tv] Failed to find device Office with address 10.0.10.84

Using atvremote from another computer on the network (not using python-zeroconf like in Home Assistant though) works fine for me. The IP address in this case is correct.

Probably not related. I've seen the devices never respond to device info queries but if you query something else it includes device info in the response. We could include an ANY question in unicast fallback. That would probably fix that issue

bdraco commented 8 months ago

@postlund just realized we don't have the name yet at that point to be able to send an Any query.

Is it not working or are you just seeing the fallback in the log to try to get the device info?

bdraco commented 8 months ago

Maybe if you are just missing device info we have the name from one of the other records from the address.

We could extract it and include an any question for that name if we have it

bdraco commented 8 months ago

If we are sending an any query we should be including know answers though so we don't generate a multicast response to everyone on the network

bdraco commented 8 months ago

I guess we can't include known answers since if all questions are suppressed by the mdns stack on the HomePod it won't include the device info

bdraco commented 8 months ago

And it looks like the only record missing is device info from your logs ... so we are kinda stuck with a bare any question without known answers.

bdraco commented 8 months ago

It's annoying that Apple makes it so hard to get device info since they don't publish device info the dns sd services

bdraco commented 8 months ago

I'll open a PR later today with a comment about why it's still needed even though zeroconf itself guarantees LIFO order for ip addresses.

https://github.com/postlund/pyatv/pull/2241

bdraco commented 8 months ago

The any question didn't seem to help.

I'll probably need to see the raw zeroconf debug logs to figure out whats going on there.

Spale350z commented 8 months ago

The any question didn't seem to help.

I'll probably need to see the raw zeroconf debug logs to figure out whats going on there.

How can I get that log?

bdraco commented 8 months ago

Sorry @Spale350z , we are conflating issues here.

https://github.com/postlund/pyatv/pull/2241 should fix the issue you reported.

The log I was looking for was for @postlund 's HomePod issue.

We should take that discussion out of this issue to avoid confusion.

Spale350z commented 8 months ago

Sorry @Spale350z , we are conflating issues here.

https://github.com/postlund/pyatv/pull/2241 should fix the issue you reported.

The log I was looking for was for @postlund 's HomePod issue.

We should take that discussion out of this issue to avoid confusion.

Ok thank you very much. I'll wait for the update to be released 😀

Spale350z commented 8 months ago

SOLVED

Changed the static IP of AirPort Express and reverted it back to what it was. Let's hope they keep going.

Both of them now work 🎉

26tajeen commented 8 months ago

I have this issue!

bdraco commented 8 months ago

Unfortunately it may be a few months or years before we can update pyatv as HA is still using pydantic 1.x pydantic==1.10.12 and pyatv needs pydantic-extra-types 2.1.0 which depends on pydantic>=2.0.3

You can follow along with the migration process at https://github.com/home-assistant/core/issues/99218

An alternative would be for pyatv to remove the pydantic-extra-types dep, but that might be asking too much

postlund commented 8 months ago

Unfortunately it may be a few months or years before we can update pyatv as HA is still using pydantic 1.x pydantic==1.10.12 and pyatv needs pydantic-extra-types 2.1.0 which depends on pydantic>=2.0.3

You can follow along with the migration process at #99218

An alternative would be for pyatv to remove the pydantic-extra-types dep, but that might be asking too much

Nah, removing that dependency is easy (I only use MacAddress from there). If that's the only blocker, I can fix that later today hopefully.

bdraco commented 8 months ago

Nah, removing that dependency is easy (I only use MacAddress from there). If that's the only blocker, I can fix that later today hopefully.

AFAICT thats the only one. Nice!

bdraco commented 8 months ago

@postlund It would be good to add the shims as well so we don't have to do it later example https://github.com/AngellusMortis/pyunifiprotect/pull/297 more details in https://github.com/home-assistant/core/issues/99218

postlund commented 8 months ago

@bdraco I will fix that! Is pydantic-settings a problem as well?

https://github.com/pydantic/pydantic-settings

postlund commented 8 months ago

@bdraco I decided to remove pydantic-settings as a dependency since it's not really used anyway. Backporting required a few changes to the code, but should be fine now. I also changed version of pydantic in base_version.txt, so tests are run with a 1.x version as an extra precaution. Maybe you can try if this works before I merge and make a release:

https://github.com/postlund/pyatv/pull/2262

26tajeen commented 8 months ago

To apply this fix before it’s merged would I need to ssh into my home assistant install on port 2222, please?

postlund commented 8 months ago

I would suggest that you wait for this being released and merged properly before testing it.

bdraco commented 8 months ago

Will test as soon as I land.  I have about another 45 minutes in flight. Sent from my iPhoneOn Oct 23, 2023, at 2:03 AM, Pierre Ståhl @.***> wrote: @bdraco I decided to remove pydantic-settings as a dependency since it's not really used anyway. Backporting required a few changes to the code, but should be fine now. I also changed version of pydantic in base_version.txt, so tests are run with a 1.x version as an extra precaution. Maybe you can try if this works before I merge and make a release: postlund/pyatv#2262

—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you were mentioned.Message ID: @.***>

bdraco commented 8 months ago

Install seems ok, doing live testing now

homeassistant:/config/pyatv# gh pr checkout 2262
remote: Enumerating objects: 625, done.
remote: Counting objects: 100% (397/397), done.
remote: Compressing objects: 100% (239/239), done.
remote: Total 625 (delta 281), reused 205 (delta 158), pack-reused 228
Receiving objects: 100% (625/625), 502.98 KiB | 3.96 MiB/s, done.
Resolving deltas: 100% (400/400), completed with 31 local objects.
From https://github.com/postlund/pyatv
 * [new ref]           refs/pull/2262/head -> pydantic_v1
 * [new tag]           v0.8.2              -> v0.8.2
 * [new tag]           v                   -> v
Switched to branch 'pydantic_v1'
homeassistant:/config/pyatv# pip3 install . -c /usr/src/homeassistant/homeassistant/package_constraints.txt 
Processing /config/pyatv
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Installing backend dependencies ... done
  Preparing metadata (pyproject.toml) ... done
Requirement already satisfied: aiohttp<5,>=3.8.3 in /usr/local/lib/python3.11/site-packages (from pyatv==0.14.2) (3.8.5)
Requirement already satisfied: async-timeout>=4.0.2 in /usr/local/lib/python3.11/site-packages (from pyatv==0.14.2) (4.0.3)
Requirement already satisfied: cryptography>=36.0.2 in /usr/local/lib/python3.11/site-packages (from pyatv==0.14.2) (41.0.4)
Requirement already satisfied: chacha20poly1305-reuseable>=0.0.3 in /usr/local/lib/python3.11/site-packages (from pyatv==0.14.2) (0.10.2)
Requirement already satisfied: ifaddr>=0.1.7 in /usr/local/lib/python3.11/site-packages (from pyatv==0.14.2) (0.2.0)
Requirement already satisfied: mediafile>=0.8.1 in /usr/local/lib/python3.11/site-packages (from pyatv==0.14.2) (0.12.0)
Requirement already satisfied: miniaudio>=1.45 in /usr/local/lib/python3.11/site-packages (from pyatv==0.14.2) (1.59)
Requirement already satisfied: protobuf>=4.23.4 in /usr/local/lib/python3.11/site-packages (from pyatv==0.14.2) (4.24.3)
Requirement already satisfied: pydantic>=1.10.10 in /usr/local/lib/python3.11/site-packages (from pyatv==0.14.2) (1.10.12)
Requirement already satisfied: requests>=2.23.0 in /usr/local/lib/python3.11/site-packages (from pyatv==0.14.2) (2.31.0)
Requirement already satisfied: srptools>=0.2.0 in /usr/local/lib/python3.11/site-packages (from pyatv==0.14.2) (1.0.1)
Requirement already satisfied: tabulate>=0.9.0 in /usr/local/lib/python3.11/site-packages (from pyatv==0.14.2) (0.9.0)
Requirement already satisfied: zeroconf>=0.72.0 in /usr/local/lib/python3.11/site-packages (from pyatv==0.14.2) (0.119.0)
Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.11/site-packages (from aiohttp<5,>=3.8.3->pyatv==0.14.2) (23.1.0)
Requirement already satisfied: charset-normalizer<4.0,>=2.0 in /usr/local/lib/python3.11/site-packages (from aiohttp<5,>=3.8.3->pyatv==0.14.2) (3.2.0)
Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.11/site-packages (from aiohttp<5,>=3.8.3->pyatv==0.14.2) (6.0.4)
Requirement already satisfied: yarl<2.0,>=1.0 in /usr/local/lib/python3.11/site-packages (from aiohttp<5,>=3.8.3->pyatv==0.14.2) (1.9.2)
Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.11/site-packages (from aiohttp<5,>=3.8.3->pyatv==0.14.2) (1.4.0)
Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.11/site-packages (from aiohttp<5,>=3.8.3->pyatv==0.14.2) (1.3.1)
Requirement already satisfied: cffi>=1.12 in /usr/local/lib/python3.11/site-packages (from cryptography>=36.0.2->pyatv==0.14.2) (1.15.1)
Requirement already satisfied: six>=1.9 in /usr/local/lib/python3.11/site-packages (from mediafile>=0.8.1->pyatv==0.14.2) (1.16.0)
Requirement already satisfied: mutagen>=1.46 in /usr/local/lib/python3.11/site-packages (from mediafile>=0.8.1->pyatv==0.14.2) (1.47.0)
Requirement already satisfied: typing-extensions>=4.2.0 in /usr/local/lib/python3.11/site-packages (from pydantic>=1.10.10->pyatv==0.14.2) (4.8.0)
Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.11/site-packages (from requests>=2.23.0->pyatv==0.14.2) (3.4)
Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.11/site-packages (from requests>=2.23.0->pyatv==0.14.2) (1.26.16)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.11/site-packages (from requests>=2.23.0->pyatv==0.14.2) (2023.7.22)
Requirement already satisfied: pycparser in /usr/local/lib/python3.11/site-packages (from cffi>=1.12->cryptography>=36.0.2->pyatv==0.14.2) (2.21)
Building wheels for collected packages: pyatv
  Building wheel for pyatv (pyproject.toml) ... done
  Created wheel for pyatv: filename=pyatv-0.14.2-py3-none-any.whl size=452512 sha256=d533459c5b211eaa603486e63b63205815cc997c568b5718829d14c7131897a6
  Stored in directory: /tmp/pip-ephem-wheel-cache-det44_x5/wheels/2d/6f/aa/bb823d88edf6db1e41980b1fb3cd7c3abf815a17b3fef71202
Successfully built pyatv
Installing collected packages: pyatv
  Attempting uninstall: pyatv
    Found existing installation: pyatv 0.14.2
    Uninstalling pyatv-0.14.2:
      Successfully uninstalled pyatv-0.14.2
Successfully installed pyatv-0.14.2
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
bdraco commented 8 months ago

for comparison this is master

homeassistant:/config/pyatv# pip3 install . -c /usr/src/homeassistant/homeassistant/package_constraints.txt 
Processing /config/pyatv
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Installing backend dependencies ... done
  Preparing metadata (pyproject.toml) ... done
Requirement already satisfied: aiohttp<5,>=3.8.3 in /usr/local/lib/python3.11/site-packages (from pyatv==0.14.2) (3.8.5)
Requirement already satisfied: async-timeout>=4.0.2 in /usr/local/lib/python3.11/site-packages (from pyatv==0.14.2) (4.0.3)
Requirement already satisfied: cryptography>=36.0.2 in /usr/local/lib/python3.11/site-packages (from pyatv==0.14.2) (41.0.4)
Requirement already satisfied: chacha20poly1305-reuseable>=0.0.3 in /usr/local/lib/python3.11/site-packages (from pyatv==0.14.2) (0.10.2)
Requirement already satisfied: ifaddr>=0.1.7 in /usr/local/lib/python3.11/site-packages (from pyatv==0.14.2) (0.2.0)
Requirement already satisfied: mediafile>=0.8.1 in /usr/local/lib/python3.11/site-packages (from pyatv==0.14.2) (0.12.0)
Requirement already satisfied: miniaudio>=1.45 in /usr/local/lib/python3.11/site-packages (from pyatv==0.14.2) (1.59)
Requirement already satisfied: protobuf>=4.23.4 in /usr/local/lib/python3.11/site-packages (from pyatv==0.14.2) (4.24.3)
Collecting pydantic-extra-types>=2.1.0 (from pyatv==0.14.2)
  Downloading pydantic_extra_types-2.1.0-py3-none-any.whl.metadata (2.5 kB)
Collecting pydantic-settings>=2.0.2 (from pyatv==0.14.2)
  Downloading pydantic_settings-2.0.3-py3-none-any.whl.metadata (2.9 kB)
Requirement already satisfied: requests>=2.23.0 in /usr/local/lib/python3.11/site-packages (from pyatv==0.14.2) (2.31.0)
Requirement already satisfied: srptools>=0.2.0 in /usr/local/lib/python3.11/site-packages (from pyatv==0.14.2) (1.0.1)
Requirement already satisfied: tabulate>=0.9.0 in /usr/local/lib/python3.11/site-packages (from pyatv==0.14.2) (0.9.0)
Requirement already satisfied: zeroconf>=0.72.0 in /usr/local/lib/python3.11/site-packages (from pyatv==0.14.2) (0.119.0)
Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.11/site-packages (from aiohttp<5,>=3.8.3->pyatv==0.14.2) (23.1.0)
Requirement already satisfied: charset-normalizer<4.0,>=2.0 in /usr/local/lib/python3.11/site-packages (from aiohttp<5,>=3.8.3->pyatv==0.14.2) (3.2.0)
Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.11/site-packages (from aiohttp<5,>=3.8.3->pyatv==0.14.2) (6.0.4)
Requirement already satisfied: yarl<2.0,>=1.0 in /usr/local/lib/python3.11/site-packages (from aiohttp<5,>=3.8.3->pyatv==0.14.2) (1.9.2)
Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.11/site-packages (from aiohttp<5,>=3.8.3->pyatv==0.14.2) (1.4.0)
Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.11/site-packages (from aiohttp<5,>=3.8.3->pyatv==0.14.2) (1.3.1)
Requirement already satisfied: cffi>=1.12 in /usr/local/lib/python3.11/site-packages (from cryptography>=36.0.2->pyatv==0.14.2) (1.15.1)
Requirement already satisfied: six>=1.9 in /usr/local/lib/python3.11/site-packages (from mediafile>=0.8.1->pyatv==0.14.2) (1.16.0)
Requirement already satisfied: mutagen>=1.46 in /usr/local/lib/python3.11/site-packages (from mediafile>=0.8.1->pyatv==0.14.2) (1.47.0)
INFO: pip is looking at multiple versions of pydantic-extra-types to determine which version is compatible with other requirements. This could take a while.
ERROR: Cannot install pyatv because these package versions have conflicting dependencies.

The conflict is caused by:
    pydantic-extra-types 2.1.0 depends on pydantic>=2.0.3
    The user requested (constraint) pydantic==1.10.12

To fix this you could try to:
1. loosen the range of package versions you've specified
2. remove package versions to allow pip attempt to solve the dependency conflict

ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-with-dependency-conflicts
bdraco commented 8 months ago

Functional testing looks good. I think your change is good to go to solve the dep conflict 👍

Spale350z commented 8 months ago

Really thank you for your work guys! By the way refreshing the IP of the AirPort Express in his settings through the MacBook fixed it and I'm not having the issue for weeks now

postlund commented 8 months ago

@bdraco 0.14.3 is out now!

bdraco commented 8 months ago

Thanks. I'll bump that PR