diff --git a/aioesphomeapi/client.py b/aioesphomeapi/client.py
index 63d23c5..dcb82df 100644
--- a/aioesphomeapi/client.py
+++ b/aioesphomeapi/client.py
@@ -928,6 +928,7 @@ class APIClient:
         tilt: float | None = None,
         stop: bool = False,
     ) -> None:
+        connection = self._get_connection()
         req = CoverCommandRequest(key=key)
         apiv = self.api_version
         if TYPE_CHECKING:
@@ -951,7 +952,7 @@ class APIClient:
             elif position == 0.0:
                 req.legacy_command = LegacyCoverCommand.CLOSE
                 req.has_legacy_command = True
-        self._get_connection().send_message(req)
+        connection.send_message(req)
 
     def fan_command(
         self,
@@ -1058,6 +1059,7 @@ class APIClient:
         custom_preset: str | None = None,
         target_humidity: float | None = None,
     ) -> None:
+        connection = self._get_connection()
         req = ClimateCommandRequest(key=key)
         if mode is not None:
             req.has_mode = True
@@ -1096,7 +1098,7 @@ class APIClient:
         if target_humidity is not None:
             req.has_target_humidity = True
             req.target_humidity = target_humidity
-        self._get_connection().send_message(req)
+        connection.send_message(req)
 
     def number_command(self, key: int, state: float) -> None:
         self._get_connection().send_message(NumberCommandRequest(key=key, state=state))
@@ -1172,6 +1174,7 @@ class APIClient:
     def execute_service(
         self, service: UserService, data: ExecuteServiceDataType
     ) -> None:
+        connection = self._get_connection()
         req = ExecuteServiceRequest(key=service.key)
         args = []
         apiv = self.api_version
@@ -1196,7 +1199,7 @@ class APIClient:
         # pylint: disable=no-member
         req.args.extend(args)
 
-        self._get_connection().send_message(req)
+        connection.send_message(req)
 
     def _request_image(self, *, single: bool = False, stream: bool = False) -> None:
         self._get_connection().send_message(

diff --git a/tests/test_client.py b/tests/test_client.py
index 2c290e5..b8b41fb 100644
--- a/tests/test_client.py
+++ b/tests/test_client.py
@@ -2280,3 +2280,55 @@ async def test_api_version_after_connection_closed(
     assert client.api_version == APIVersion(1, 9)
     await client.disconnect(force=True)
     assert client.api_version is None
+
+
+@pytest.mark.asyncio
+async def test_calls_after_connection_closed(
+    api_client: tuple[
+        APIClient, APIConnection, asyncio.Transport, APIPlaintextFrameHelper
+    ],
+) -> None:
+    """Test calls after connection close should raise APIConnectionError."""
+    client, connection, transport, protocol = api_client
+    assert client.api_version == APIVersion(1, 9)
+    await client.disconnect(force=True)
+    assert client.api_version is None
+    service = UserService(
+        name="my_service",
+        key=1,
+        args=[],
+    )
+    with pytest.raises(APIConnectionError):
+        client.execute_service(service, {})
+    for method in (
+        client.button_command,
+        client.climate_command,
+        client.cover_command,
+        client.fan_command,
+        client.light_command,
+        client.media_player_command,
+        client.siren_command,
+    ):
+        with pytest.raises(APIConnectionError):
+            await method(1)
+
+    with pytest.raises(APIConnectionError):
+        await client.alarm_control_panel_command(1, AlarmControlPanelCommand.ARM_HOME)
+
+    with pytest.raises(APIConnectionError):
+        await client.date_command(1, 1, 1, 1)
+
+    with pytest.raises(APIConnectionError):
+        await client.lock_command(1, LockCommand.LOCK)
+
+    with pytest.raises(APIConnectionError):
+        await client.number_command(1, 1)
+
+    with pytest.raises(APIConnectionError):
+        await client.select_command(1, "1")
+
+    with pytest.raises(APIConnectionError):
+        await client.switch_command(1, True)
+
+    with pytest.raises(APIConnectionError):
+        await client.text_command(1, "1")

thousands of error entries in homeassistant
Not sure what other details you need. Please ask and I will provide.
Noticed MANY of these entries.
Using lates ESPHome and HA versions.

```
  File "/usr/src/homeassistant/homeassistant/components/esphome/manager.py", line 695, in execute_service
    entry_data.client.execute_service(service, call.data)
  File "/usr/local/lib/python3.12/site-packages/aioesphomeapi/client.py", line 1183, in execute_service
    int_type = "int_" if apiv >= APIVersion(1, 3) else "legacy_int"
                         ^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: '>=' not supported between instances of 'NoneType' and 'APIVersion'
```
tests/test_client.py::test_calls_after_connection_closed
tests/test_client.py::test_expected_name tests/test_client.py::test_connect_backwards_compat tests/test_client.py::test_finish_connection_wraps_exceptions_as_unhandled_api_error tests/test_client.py::test_connection_released_if_connecting_is_cancelled tests/test_client.py::test_request_while_handshaking tests/test_client.py::test_connect_while_already_connected tests/test_client.py::test_list_entities[input0-output0] tests/test_client.py::test_list_entities[input1-output1] tests/test_client.py::test_subscribe_states tests/test_client.py::test_subscribe_states_camera tests/test_client.py::test_cover_command_legacy[cmd0-req0] tests/test_client.py::test_cover_command_legacy[cmd1-req1] tests/test_client.py::test_cover_command_legacy[cmd2-req2] tests/test_client.py::test_cover_command_legacy[cmd3-req3] tests/test_client.py::test_cover_command[cmd0-req0] tests/test_client.py::test_cover_command[cmd1-req1] tests/test_client.py::test_cover_command[cmd2-req2] tests/test_client.py::test_cover_command[cmd3-req3] tests/test_client.py::test_cover_command[cmd4-req4] tests/test_client.py::test_fan_command[cmd0-req0] tests/test_client.py::test_fan_command[cmd1-req1] tests/test_client.py::test_fan_command[cmd2-req2] tests/test_client.py::test_fan_command[cmd3-req3] tests/test_client.py::test_fan_command[cmd4-req4] tests/test_client.py::test_fan_command[cmd5-req5] tests/test_client.py::test_fan_command[cmd6-req6] tests/test_client.py::test_light_command[cmd0-req0] tests/test_client.py::test_light_command[cmd1-req1] tests/test_client.py::test_light_command[cmd2-req2] tests/test_client.py::test_light_command[cmd3-req3] tests/test_client.py::test_light_command[cmd4-req4] tests/test_client.py::test_light_command[cmd5-req5] tests/test_client.py::test_light_command[cmd6-req6] tests/test_client.py::test_light_command[cmd7-req7] tests/test_client.py::test_light_command[cmd8-req8] tests/test_client.py::test_light_command[cmd9-req9] tests/test_client.py::test_light_command[cmd10-req10] tests/test_client.py::test_light_command[cmd11-req11] tests/test_client.py::test_switch_command[cmd0-req0] tests/test_client.py::test_switch_command[cmd1-req1] tests/test_client.py::test_climate_command_legacy[cmd0-req0] tests/test_client.py::test_climate_command_legacy[cmd1-req1] tests/test_client.py::test_climate_command[cmd0-req0] tests/test_client.py::test_climate_command[cmd1-req1] tests/test_client.py::test_climate_command[cmd2-req2] tests/test_client.py::test_climate_command[cmd3-req3] tests/test_client.py::test_climate_command[cmd4-req4] tests/test_client.py::test_climate_command[cmd5-req5] tests/test_client.py::test_climate_command[cmd6-req6] tests/test_client.py::test_climate_command[cmd7-req7] tests/test_client.py::test_climate_command[cmd8-req8] tests/test_client.py::test_climate_command[cmd9-req9] tests/test_client.py::test_number_command[cmd0-req0] tests/test_client.py::test_number_command[cmd1-req1] tests/test_client.py::test_date_command[cmd0-req0] tests/test_client.py::test_date_command[cmd1-req1] tests/test_client.py::test_lock_command[cmd0-req0] tests/test_client.py::test_lock_command[cmd1-req1] tests/test_client.py::test_lock_command[cmd2-req2] tests/test_client.py::test_lock_command[cmd3-req3] tests/test_client.py::test_select_command[cmd0-req0] tests/test_client.py::test_select_command[cmd1-req1] tests/test_client.py::test_media_player_command[cmd0-req0] tests/test_client.py::test_media_player_command[cmd1-req1] tests/test_client.py::test_media_player_command[cmd2-req2] tests/test_client.py::test_button_command[cmd0-req0] tests/test_client.py::test_siren_command[cmd0-req0] tests/test_client.py::test_siren_command[cmd1-req1] tests/test_client.py::test_siren_command[cmd2-req2] tests/test_client.py::test_siren_command[cmd3-req3] tests/test_client.py::test_siren_command[cmd4-req4] tests/test_client.py::test_siren_command[cmd5-req5] tests/test_client.py::test_siren_command[cmd6-req6] tests/test_client.py::test_execute_service tests/test_client.py::test_request_single_image tests/test_client.py::test_request_image_stream tests/test_client.py::test_alarm_panel_command[cmd0-req0] tests/test_client.py::test_alarm_panel_command[cmd1-req1] tests/test_client.py::test_alarm_panel_command[cmd2-req2] tests/test_client.py::test_text_command[cmd0-req0] tests/test_client.py::test_text_command[cmd1-req1] tests/test_client.py::test_noise_psk_handles_subclassed_string tests/test_client.py::test_no_noise_psk tests/test_client.py::test_empty_noise_psk_or_expected_name tests/test_client.py::test_bluetooth_disconnect tests/test_client.py::test_bluetooth_pair tests/test_client.py::test_bluetooth_pair_connection_drops tests/test_client.py::test_bluetooth_unpair_connection_drops tests/test_client.py::test_bluetooth_clear_cache_connection_drops tests/test_client.py::test_bluetooth_unpair tests/test_client.py::test_bluetooth_clear_cache tests/test_client.py::test_device_info tests/test_client.py::test_bluetooth_gatt_read tests/test_client.py::test_bluetooth_gatt_read_connection_drops tests/test_client.py::test_bluetooth_gatt_read_error tests/test_client.py::test_bluetooth_gatt_read_descriptor tests/test_client.py::test_bluetooth_gatt_write tests/test_client.py::test_bluetooth_gatt_write_connection_drops tests/test_client.py::test_bluetooth_gatt_write_without_response tests/test_client.py::test_bluetooth_gatt_write_descriptor tests/test_client.py::test_bluetooth_gatt_write_descriptor_without_response tests/test_client.py::test_bluetooth_gatt_get_services_connection_drops tests/test_client.py::test_bluetooth_gatt_get_services tests/test_client.py::test_bluetooth_gatt_get_services_errors tests/test_client.py::test_bluetooth_gatt_start_notify_connection_drops tests/test_client.py::test_bluetooth_gatt_start_notify tests/test_client.py::test_bluetooth_gatt_start_notify_fails tests/test_client.py::test_subscribe_bluetooth_le_advertisements tests/test_client.py::test_subscribe_bluetooth_le_raw_advertisements tests/test_client.py::test_subscribe_bluetooth_connections_free tests/test_client.py::test_subscribe_home_assistant_states tests/test_client.py::test_subscribe_logs tests/test_client.py::test_send_home_assistant_state tests/test_client.py::test_subscribe_service_calls tests/test_client.py::test_set_debug tests/test_client.py::test_force_disconnect tests/test_client.py::test_bluetooth_device_connect[False-BluetoothProxyFeature.0-BluetoothDeviceRequestType.CONNECT] tests/test_client.py::test_bluetooth_device_connect[False-BluetoothProxyFeature.REMOTE_CACHING-BluetoothDeviceRequestType.CONNECT_V3_WITHOUT_CACHE] tests/test_client.py::test_bluetooth_device_connect[True-BluetoothProxyFeature.REMOTE_CACHING-BluetoothDeviceRequestType.CONNECT_V3_WITH_CACHE] tests/test_client.py::test_bluetooth_device_connect_and_disconnect_times_out tests/test_client.py::test_bluetooth_device_connect_times_out_disconnect_ok tests/test_client.py::test_bluetooth_device_connect_cancelled tests/test_client.py::test_send_voice_assistant_event tests/test_client.py::test_subscribe_voice_assistant tests/test_client.py::test_subscribe_voice_assistant_failure tests/test_client.py::test_subscribe_voice_assistant_cancels_long_running_handle_start tests/test_client.py::test_api_version_after_connection_closed