  The Internet of Things supports various industrial applications. The
cooperation and coordination of smart things are a promising strategy for
satisfying requirements that are beyond the capacity of a single smart thing.
One of the major challenges for today's software engineering is the management
of large and complex computing systems characterized by a high degree of
physical distribution. Examples of such systems arise in many application
domains. The number of connected devices grows from billions to hundreds of
billions, so a maximum of automatisms must be integrated in IoT architectures
in order to control and manage them. Software architects migrate to service
oriented architecture and applications are now being constructed as service
compositions. Since each IoT device includes one or more microservices, the
increasing number of devices around the user makes them difficult to assemble
in order to achieve a common goal. In this paper, we propose a self-assembling
solution based on self-controlled service components taking into account
non-functional requirements concerning the offered quality of services and the
structuration of the resulting assembly. Its aim is to build and maintain an
assembly of services (taking into account arrival of new peers or failure of
existing ones) that, besides functional requirements, also fulfils global
quality-of-service and structural requirements.
