core icon indicating copy to clipboard operation
core copied to clipboard

LinkPlay errors in log with integration ignored

Open cybergrimes opened this issue 8 months ago • 9 comments

The problem

Hello, I'm getting LinkPlay errors in my log despite the integration being ignored/not setup. Specifically errors about failure to connect to devices. I wouldn't expect to see these unless I was actively using the integration. Is that an incorrect assumption?

What version of Home Assistant Core has the issue?

2025.4.1

What was the last working version of Home Assistant Core?

No response

What type of installation are you running?

Home Assistant OS

Integration causing the issue

LinkPlay

Link to integration documentation on our website

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

Diagnostics information

No response

Example YAML snippet


Anything in the logs that might be useful for us?

Logger: homeassistant.components.linkplay.config_flow
Source: components/linkplay/config_flow.py:38
integration: linkplay (documentation, issues)
First occurred: 5:04:58 AM (2 occurrences)
Last logged: 6:12:15 AM

Failed to connect to LinkPlay device at 192.168.0.194
Failed to connect to LinkPlay device at 192.168.0.207
Traceback (most recent call last):
  File "/usr/local/lib/python3.13/site-packages/aiohttp/connector.py", line 1115, in _wrap_create_connection
    sock = await aiohappyeyeballs.start_connection(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<5 lines>...
    )
    ^
  File "/usr/local/lib/python3.13/site-packages/aiohappyeyeballs/impl.py", line 122, in start_connection
    raise first_exception
  File "/usr/local/lib/python3.13/site-packages/aiohappyeyeballs/impl.py", line 73, in start_connection
    sock = await _connect_sock(
           ^^^^^^^^^^^^^^^^^^^^
    ...<6 lines>...
    )
    ^
  File "/usr/local/lib/python3.13/site-packages/aiohappyeyeballs/impl.py", line 208, in _connect_sock
    await loop.sock_connect(sock, address)
  File "/usr/local/lib/python3.13/asyncio/selector_events.py", line 641, in sock_connect
    return await fut
           ^^^^^^^^^
  File "/usr/local/lib/python3.13/asyncio/selector_events.py", line 681, in _sock_connect_cb
    raise OSError(err, f'Connect call failed {address}')
OSError: [Errno 113] Connect call failed ('192.168.0.194', 80)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/lib/python3.13/site-packages/linkplay/utils.py", line 47, in session_call_api
    response = await session.get(url)
               ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/site-packages/aiohttp/client.py", line 703, in _request
    conn = await self._connector.connect(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        req, traces=traces, timeout=real_timeout
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/local/lib/python3.13/site-packages/aiohttp/connector.py", line 548, in connect
    proto = await self._create_connection(req, traces, timeout)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/site-packages/aiohttp/connector.py", line 1056, in _create_connection
    _, proto = await self._create_direct_connection(req, traces, timeout)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/site-packages/aiohttp/connector.py", line 1400, in _create_direct_connection
    raise last_exc
  File "/usr/local/lib/python3.13/site-packages/aiohttp/connector.py", line 1369, in _create_direct_connection
    transp, proto = await self._wrap_create_connection(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<7 lines>...
    )
    ^
  File "/usr/local/lib/python3.13/site-packages/aiohttp/connector.py", line 1130, in _wrap_create_connection
    raise client_error(req.connection_key, exc) from exc
aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host 192.168.0.194:80 ssl:default [Connect call failed ('192.168.0.194', 80)]

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/linkplay/config_flow.py", line 38, in async_step_zeroconf
    bridge = await linkplay_factory_httpapi_bridge(discovery_info.host, session)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/site-packages/linkplay/discovery.py", line 66, in linkplay_factory_httpapi_bridge
    return await linkplay_factory_bridge_endpoint(http_endpoint)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/site-packages/linkplay/discovery.py", line 39, in linkplay_factory_bridge_endpoint
    await bridge.device.update_status()
  File "/usr/local/lib/python3.13/site-packages/linkplay/bridge.py", line 49, in update_status
    self.properties = await self.bridge.json_request(LinkPlayCommand.DEVICE_STATUS)  # type: ignore[assignment]
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/site-packages/linkplay/bridge.py", line 439, in json_request
    response = await self.endpoint.json_request(command)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/site-packages/linkplay/endpoint.py", line 58, in json_request
    return await session_call_api_json(self._endpoint, self._session, command)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/site-packages/linkplay/utils.py", line 80, in session_call_api_json
    result = await session_call_api(endpoint, session, command)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/site-packages/linkplay/utils.py", line 50, in session_call_api
    raise LinkPlayRequestException(
        f"{error} error requesting data from '{url}'"
    ) from error
linkplay.exceptions.LinkPlayRequestException: Cannot connect to host 192.168.0.194:80 ssl:default [Connect call failed ('192.168.0.194', 80)] error requesting data from 'http://192.168.0.194/httpapi.asp?command=getStatusEx'

Additional information

No response

cybergrimes avatar Apr 06 '25 14:04 cybergrimes

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

Code owner commands

Code owners of linkplay 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 linkplay Removes the current integration label and assignees on the issue, add the integration domain after the command.
  • @home-assistant add-label needs-more-information Add a label (needs-more-information, problem in dependency, problem in custom component) to the issue.
  • @home-assistant remove-label needs-more-information Remove a label (needs-more-information, problem in dependency, problem in custom component) on the issue.

(message by CodeOwnersMention)


linkplay documentation linkplay source (message by IssueLinks)

home-assistant[bot] avatar Apr 06 '25 14:04 home-assistant[bot]

It's the discovery that throws an error. I will take a look if it can be handled better. What device do you own? What is the reason you want it ignored?

silamon avatar Apr 08 '25 17:04 silamon

I have a WiiM Amp and the AudioPro A10 and C10 speakers, both "WiiM Edition". I don't use HA to control these devices so I ignored the devices/integration when it was discovered. After I reported this issue I added them and then disabled each device to see if that would help mute this in the log but I am still seeing the error.

cybergrimes avatar Apr 08 '25 17:04 cybergrimes

I've looked further into it, the error is handled like it should be but the zeroconf discovery keeps giving discovery info to the integration, which in turn cannot be handled. The best way would be to discover why it fails.

  • http://192.168.0.194/httpapi.asp?command=getStatusEx
  • https://192.168.0.194/httpapi.asp?command=getStatusEx
  • https://192.168.0.194:4443/httpapi.asp?command=getStatusEx
  • http://192.168.0.194/httpapi.asp?command=getStatus
  • https://192.168.0.194/httpapi.asp?command=getStatus
  • https://192.168.0.194:4443/httpapi.asp?command=getStatus

Does any of the above give something? The IP is the IP from the logging you provided. Other IP's are 192.168.0.194 and 192.168.0.207.

Alternatively, if you don't want spend time to get it properly fixed, you can higher the level of exceptions logged.

logger:
  default: info # whatever is the default on your instance
  logs:
    homeassistant.components.linkplay: critical

silamon avatar Apr 14 '25 18:04 silamon

Here's what it's giving me when using getStatusEx. I can't get anything when using the port 4443.

{ "language": "", "ssid": "AudioPro A10 WiiM-1364", "hideSSID": "0", "firmware": "Linkplay.5.2.707351", "build": "release", "project": "AudioPro_A10MKII_WiiM", "priv_prj": "AudioPro_A10MKII_WiiM", "project_build_name": "AudioPro_A10MKII_WiiM", "Release": "20250211", "FW_Release_version": "", "PCB_version": "0", "cast_enable": 0, "cast_usage_report": 1, "group": "0", "wmrm_version": "4.3", "wmrm_sub_ver": "2", "expired": "0", "internet": "1", "uuid": "FF98F60208757E2728B68E25", "MAC": "54:78:C9:3E:13:64", "BTMAC": "54:78:c9:3e:13:65", "InitialConfiguration": "1", "AP_MAC": "56:78:C9:3E:53:64", "date": "2025:04:18", "time": "14:47:39", "netstat": "2", "essid": "47616C616374696361", "apcli0": "192.168.0.194", "eth0": "0.0.0.0", "eth2": "0.0.0.0", "ETH_MAC": "00:00:00:00:00:00", "hardware": "AmlogicA113", "ota_api_ver": "3.0", "VersionUpdate": "0", "NewVer": "0", "mcu_ver": "232", "mcu_ver_new": "0", "update_check_count": "55", "BleRemote_update_checked_counter": "0", "ra0": "10.10.10.254", "temp_uuid": "3A011D238D188826", "cap1": "0x40001400", "capability": "0x21694008", "languages": "0x11ec", "prompt_status": "1", "dsp_ver": "", "ModuleColorNumber": "5", "ModuleColorString": "", "dsp_ver_new": "", "uboot_verinfo": "240829.152556", "silence_ota_flag": "0", "ota_interface_ver": "2.0", "streams_all": "0xeff33fd", "streams": "0xeff33fd", "region": "unknown", "volume_control": "0", "external": "0x0", "preset_key": "4", "plm_support": "0x2b00006", "mqtt_support": "1", "lbc_support": "0", "WifiChannel": "0", "RSSI": "-57", "BSSID": "20:6D:31:61:04:5F", "wlanSnr": "35", "wlanNoise": "-92", "wlanFreq": "5180", "wlanDataRate": "351", "battery": "0", "battery_percent": "0", "securemode": "1", "upnp_version": "1005", "upnp_uuid": "uuid:FF98F602-0875-7E27-28B6-8E25FF98F602", "uart_pass_port": "8899", "communication_port": "8819", "web_firmware_update_hide": "0", "new_tunein_preset_and_alarm": "1", "new_iheart_podcast": "1", "tidal_version": "2.0", "service_version": "1.0", "HiFiSRC_version": "1.1", "EQ_support": "Eq4p_ver_2.0", "EQVersion": "4.3", "audio_channel_config": "1.0", "app_timezone_id": "America\/Denver", "avs_timezone_id": "America\/Denver", "tz_info_ver": "1.0", "tz": "-6.0", "max_volume": "100", "power_mode": "-1", "security": "https\/2.0", "security_version": "3.0", "security_capabilities": { "ver": "1.0", "aes_ver": "1.0" }, "public_https_version": "1.0", "set_play_mode_enable": "0", "set_play_mode_gain": "0", "audioOutputModeVer": "1.1", "audioInputModeVer": "1.0", "deviceSettingVer": "1.0", "privacy_mode": "0", "DeviceName": "Kitchen", "GroupName": "Kitchen" }

cybergrimes avatar Apr 18 '25 14:04 cybergrimes

Which of the urls I provided does give that response?

silamon avatar Apr 20 '25 08:04 silamon

It works for http://192.168.0.194/httpapi.asp?command=getStatusEx

and it works for https same command but with self signed certificate warning first. https://192.168.0.194/httpapi.asp?command=getStatusEx

I get "unknown command" for https://192.168.0.194/httpapi.asp?command=getStatus and unable to connect to https://192.168.0.194:4443/httpapi.asp?command=getStatusEx

cybergrimes avatar Apr 23 '25 16:04 cybergrimes

I have the same issue

ShunMaster99 avatar May 06 '25 18:05 ShunMaster99

With a Wiim Pro, I get the following error in the log:

  File "/usr/local/lib/python3.13/site-packages/linkplay/utils.py", line 84, in session_call_api_json
    raise LinkPlayInvalidDataException(
        f"Unexpected JSON ({result}) received from '{url}'"
    ) from jsonexc
linkplay.exceptions.LinkPlayInvalidDataException: Unexpected JSON (Failed) received from 'https://192.168.1.108/httpapi.asp?command=getMetaInfo'

When I point a browser to that URL, I just get back the string "Failed".

Instead, https://192.168.1.108/httpapi.asp?command=getStatusEx returns:

{
    "language": "en_us",
    "ssid": "WiiM Pro-9222",
    "hideSSID": "0",
    "firmware": "Linkplay.4.8.714841",
    "build": "release",
    "project": "WiiM_Pro_with_gc4a",
    "priv_prj": "WiiM_Pro_with_gc4a",
    "project_build_name": "WiiM_Pro_with_gc4a",
    "Release": "20250424",
    "FW_Release_version": "",
    "PCB_version": "1",
    "cast_enable": 0,
    "cast_usage_report": 1,
    "group": "0",
    "wmrm_version": "4.3",
    "wmrm_sub_ver": "2",
    "expired": "0",
    "internet": "1",
    "uuid": "FF98F09C4BD0B0224C1F9A55",
    "MAC": "B8:13:32:E0:92:22",
    "BTMAC": "b8:13:32:e0:92:23",
    "InitialConfiguration": "1",
    "AP_MAC": "BA:13:32:E0:92:22",
    "date": "2025:05:10",
    "time": "22:48:24",
    "netstat": "2",
    "essid": "3554686547617A696E67733547487A",
    "apcli0": "192.168.1.108",
    "eth0": "0.0.0.0",
    "eth2": "0.0.0.0",
    "ETH_MAC": "00:22:6C:24:97:75",
    "hardware": "AmlogicA113",
    "ota_api_ver": "3.0",
    "VersionUpdate": "0",
    "NewVer": "0",
    "mcu_ver": "0",
    "mcu_ver_new": "0",
    "update_check_count": "25",
    "BleRemote_update_checked_counter": "0",
    "ra0": "10.10.10.254",
    "temp_uuid": "C1830AADF1B60A75",
    "cap1": "0x40000400",
    "capability": "0x20084808",
    "languages": "0x11ec",
    "prompt_status": "1",
    "alexa_ver": "20180604",
    "alexa_beta_enable": "0",
    "alexa_force_beta_cfg": "0",
    "dsp_ver": "",
    "ModuleColorNumber": "0",
    "ModuleColorString": "",
    "dsp_ver_new": "",
    "uboot_verinfo": "",
    "kernel_verinfo": "#1 SMP PREEMPT Tue Mar 26 17:59:16 CST 2024",
    "silence_ota_flag": "1",
    "ota_interface_ver": "2.0",
    "streams_all": "0xeff33fd",
    "streams": "0xeff33fd",
    "region": "unknown",
    "volume_control": "1",
    "external": "0x0",
    "preset_key": "12",
    "plm_support": "0x700016",
    "mqtt_support": "1",
    "lbc_support": "0",
    "WifiChannel": "0",
    "RSSI": "-27",
    "BSSID": "22:B0:01:B6:5F:53",
    "wlanSnr": "35",
    "wlanNoise": "-92",
    "wlanFreq": "5540",
    "wlanDataRate": "433",
    "battery": "0",
    "battery_percent": "0",
    "securemode": "1",
    "upnp_version": "1005",
    "upnp_uuid": "uuid:FF98F09C-4BD0-B022-4C1F-9A55FF98F09C",
    "uart_pass_port": "0",
    "communication_port": "8819",
    "web_firmware_update_hide": "0",
    "new_tunein_preset_and_alarm": "1",
    "new_iheart_podcast": "1",
    "tidal_version": "2.0",
    "service_version": "1.0",
    "HiFiSRC_version": "1.1",
    "EQ_support": "Eq4p_ver_2.0",
    "EQVersion": "4.3",
    "audio_channel_config": "1.0",
    "app_timezone_id": "Europe/London",
    "avs_timezone_id": "Europe/London",
    "tz_info_ver": "1.0",
    "tz": "1.0",
    "max_volume": "80",
    "power_mode": "-1",
    "security": "https/2.0",
    "security_version": "3.0",
    "security_capabilities": {
        "ver": "1.0",
        "aes_ver": "1.0"
    },
    "public_https_version": "1.0",
    "BleRemoteControl": "1",
    "BleRemoteConnected": "0",
    "BleRemoteException": "0",
    "autoSenseVersion": "1.0",
    "set_play_mode_enable": "0",
    "set_play_mode_gain": "0",
    "privacy_mode": "0",
    "DeviceName": "WiiM Pro",
    "GroupName": "WiiM Pro"
}

ccristal avatar May 10 '25 22:05 ccristal