diff --git a/homeassistant/components/mysensors/climate.py b/homeassistant/components/mysensors/climate.py
index d1b697a345874b68c758ee43a9a04f11924a655f..a42861c5fa2ee01af47a14c3520cb0c52a548de7 100644
--- a/homeassistant/components/mysensors/climate.py
+++ b/homeassistant/components/mysensors/climate.py
@@ -82,7 +82,10 @@ class MySensorsHVAC(MySensorsChildEntity, ClimateEntity):
             and set_req.V_HVAC_SETPOINT_HEAT in self._values
         ):
             features = features | ClimateEntityFeature.TARGET_TEMPERATURE_RANGE
-        else:
+        elif (
+            set_req.V_HVAC_SETPOINT_COOL in self._values
+            or set_req.V_HVAC_SETPOINT_HEAT in self._values
+        ):
             features = features | ClimateEntityFeature.TARGET_TEMPERATURE
         return features
 
@@ -108,13 +111,11 @@ class MySensorsHVAC(MySensorsChildEntity, ClimateEntity):
 
     @property
     def target_temperature(self) -> float | None:
-        """Return the temperature we try to reach."""
+        """Return the temperature we try to reach.
+
+        Either V_HVAC_SETPOINT_COOL or V_HVAC_SETPOINT_HEAT may be used.
+        """
         set_req = self.gateway.const.SetReq
-        if (
-            set_req.V_HVAC_SETPOINT_COOL in self._values
-            and set_req.V_HVAC_SETPOINT_HEAT in self._values
-        ):
-            return None
         temp = self._values.get(set_req.V_HVAC_SETPOINT_COOL)
         if temp is None:
             temp = self._values.get(set_req.V_HVAC_SETPOINT_HEAT)
@@ -124,21 +125,13 @@ class MySensorsHVAC(MySensorsChildEntity, ClimateEntity):
     def target_temperature_high(self) -> float | None:
         """Return the highbound target temperature we try to reach."""
         set_req = self.gateway.const.SetReq
-        if set_req.V_HVAC_SETPOINT_HEAT in self._values:
-            temp = self._values.get(set_req.V_HVAC_SETPOINT_COOL)
-            return float(temp) if temp is not None else None
-
-        return None
+        return float(self._values[set_req.V_HVAC_SETPOINT_COOL])
 
     @property
     def target_temperature_low(self) -> float | None:
         """Return the lowbound target temperature we try to reach."""
         set_req = self.gateway.const.SetReq
-        if set_req.V_HVAC_SETPOINT_COOL in self._values:
-            temp = self._values.get(set_req.V_HVAC_SETPOINT_HEAT)
-            return float(temp) if temp is not None else None
-
-        return None
+        return float(self._values[set_req.V_HVAC_SETPOINT_HEAT])
 
     @property
     def hvac_mode(self) -> HVACMode:
diff --git a/tests/components/mysensors/conftest.py b/tests/components/mysensors/conftest.py
index b14a3f9c5298de53f0d139c2432c6966155608d7..c2c110466e66a21238fc42b1f55b309d14473f13 100644
--- a/tests/components/mysensors/conftest.py
+++ b/tests/components/mysensors/conftest.py
@@ -320,6 +320,21 @@ def hvac_node_heat(
     return nodes[1]
 
 
+@pytest.fixture(name="hvac_node_only_hvac_state", scope="package")
+def hvac_node_only_hvac_state_fixture() -> dict:
+    """Load the hvac node only hvac state."""
+    return load_nodes_state("hvac_node_only_hvac_state.json")
+
+
+@pytest.fixture
+def hvac_node_only_hvac(
+    gateway_nodes: dict[int, Sensor], hvac_node_only_hvac_state: dict
+) -> Sensor:
+    """Load the hvac only hvac child node."""
+    nodes = update_gateway_nodes(gateway_nodes, deepcopy(hvac_node_only_hvac_state))
+    return nodes[1]
+
+
 @pytest.fixture(name="power_sensor_state", scope="package")
 def power_sensor_state_fixture() -> dict:
     """Load the power sensor state."""
diff --git a/tests/components/mysensors/fixtures/hvac_node_only_hvac_state.json b/tests/components/mysensors/fixtures/hvac_node_only_hvac_state.json
new file mode 100644
index 0000000000000000000000000000000000000000..b41470e60763812690a4466da266651a7d2cdfc4
--- /dev/null
+++ b/tests/components/mysensors/fixtures/hvac_node_only_hvac_state.json
@@ -0,0 +1,22 @@
+{
+  "1": {
+    "sensor_id": 1,
+    "children": {
+      "1": {
+        "id": 1,
+        "type": 29,
+        "description": "",
+        "values": {
+          "0": "20.0",
+          "21": "Off"
+        }
+      }
+    },
+    "type": 17,
+    "sketch_name": "HVAC Node",
+    "sketch_version": "1.0",
+    "battery_level": 0,
+    "protocol_version": "2.3.2",
+    "heartbeat": 0
+  }
+}
diff --git a/tests/components/mysensors/test_climate.py b/tests/components/mysensors/test_climate.py
index 959f92ff5128dc8a415c1f1f0347b943c6d905e9..b919287e046cd195497a55ba8d01b34cf37ac144 100644
--- a/tests/components/mysensors/test_climate.py
+++ b/tests/components/mysensors/test_climate.py
@@ -38,6 +38,8 @@ async def test_hvac_node_auto(
     assert state
     assert state.state == HVACMode.OFF
     assert state.attributes[ATTR_BATTERY_LEVEL] == 0
+    assert state.attributes[ATTR_CURRENT_TEMPERATURE] == 20.0
+    assert state.attributes["supported_features"] == 394
 
     # Test set hvac mode auto
     await hass.services.async_call(
@@ -153,6 +155,8 @@ async def test_hvac_node_heat(
     assert state
     assert state.state == HVACMode.OFF
     assert state.attributes[ATTR_BATTERY_LEVEL] == 0
+    assert state.attributes[ATTR_CURRENT_TEMPERATURE] == 20.0
+    assert state.attributes["supported_features"] == 393
 
     # Test set hvac mode heat
     await hass.services.async_call(
@@ -263,8 +267,10 @@ async def test_hvac_node_cool(
     assert state
     assert state.state == HVACMode.OFF
     assert state.attributes[ATTR_BATTERY_LEVEL] == 0
+    assert state.attributes[ATTR_CURRENT_TEMPERATURE] == 20.0
+    assert state.attributes["supported_features"] == 393
 
-    # Test set hvac mode heat
+    # Test set hvac mode cool
     await hass.services.async_call(
         CLIMATE_DOMAIN,
         SERVICE_SET_HVAC_MODE,
@@ -357,3 +363,83 @@ async def test_hvac_node_cool(
 
     assert state
     assert state.state == HVACMode.OFF
+
+
+async def test_hvac_node_only_hvac(
+    hass: HomeAssistant,
+    hvac_node_only_hvac: Sensor,
+    receive_message: Callable[[str], None],
+    transport_write: MagicMock,
+) -> None:
+    """Test a hvac only hvac node."""
+    entity_id = "climate.hvac_node_1_1"
+
+    state = hass.states.get(entity_id)
+
+    assert state
+    assert state.state == HVACMode.OFF
+    assert state.attributes[ATTR_CURRENT_TEMPERATURE] == 20.0
+    assert state.attributes["supported_features"] == 384
+
+    # Test set hvac mode heat
+    await hass.services.async_call(
+        CLIMATE_DOMAIN,
+        SERVICE_SET_HVAC_MODE,
+        {ATTR_ENTITY_ID: entity_id, ATTR_HVAC_MODE: HVACMode.HEAT},
+        blocking=True,
+    )
+
+    assert transport_write.call_count == 1
+    assert transport_write.call_args == call("1;1;1;1;21;HeatOn\n")
+
+    receive_message("1;1;1;0;21;HeatOn\n")
+    await hass.async_block_till_done()
+
+    state = hass.states.get(entity_id)
+
+    assert state
+    assert state.state == HVACMode.HEAT
+    assert state.attributes[ATTR_CURRENT_TEMPERATURE] == 20.0
+
+    transport_write.reset_mock()
+
+    # Test set hvac mode cool
+    await hass.services.async_call(
+        CLIMATE_DOMAIN,
+        SERVICE_SET_HVAC_MODE,
+        {ATTR_ENTITY_ID: entity_id, ATTR_HVAC_MODE: HVACMode.COOL},
+        blocking=True,
+    )
+
+    assert transport_write.call_count == 1
+    assert transport_write.call_args == call("1;1;1;1;21;CoolOn\n")
+
+    receive_message("1;1;1;0;21;CoolOn\n")
+    await hass.async_block_till_done()
+
+    state = hass.states.get(entity_id)
+
+    assert state
+    assert state.state == HVACMode.COOL
+    assert state.attributes[ATTR_CURRENT_TEMPERATURE] == 20.0
+
+    transport_write.reset_mock()
+
+    # Test set hvac mode off
+    await hass.services.async_call(
+        CLIMATE_DOMAIN,
+        SERVICE_SET_HVAC_MODE,
+        {ATTR_ENTITY_ID: entity_id, ATTR_HVAC_MODE: HVACMode.OFF},
+        blocking=True,
+    )
+
+    assert transport_write.call_count == 1
+    assert transport_write.call_args == call("1;1;1;1;21;Off\n")
+
+    receive_message("1;1;1;0;21;Off\n")
+    await hass.async_block_till_done()
+
+    state = hass.states.get(entity_id)
+
+    assert state
+    assert state.state == HVACMode.OFF