diff --git a/src/automation/pom.xml b/src/automation/pom.xml
index 62a8859de28596fccc1c6e2e8c859f5bde1e7aeb..182ea45cd1e18329ebd84da4a4138a82e48ca91d 100644
--- a/src/automation/pom.xml
+++ b/src/automation/pom.xml
@@ -5,7 +5,7 @@
 
   <groupId>eu.teraflow</groupId>
   <artifactId>automation</artifactId>
-  <version>0.1.0</version>
+  <version>0.2.0</version>
   <name>TeraFlow Automation Component</name>
   <description>TeraFlow Automation Component</description>
 
diff --git a/src/automation/src/main/java/eu/teraflow/automation/AutomationGatewayImpl.java b/src/automation/src/main/java/eu/teraflow/automation/AutomationGatewayImpl.java
index cbaf16d1cc02ce63a5ade27d44244cd90aa9fc49..a6877a7f076e55376ba3f74cf15002400edace3c 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/AutomationGatewayImpl.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/AutomationGatewayImpl.java
@@ -2,6 +2,8 @@ package eu.teraflow.automation;
 
 import automation.Automation;
 import context.ContextOuterClass;
+import eu.teraflow.automation.device.model.Device;
+import eu.teraflow.automation.model.DeviceRoleId;
 import io.quarkus.grpc.GrpcService;
 import io.smallrye.mutiny.Uni;
 import javax.inject.Inject;
@@ -32,18 +34,13 @@ public class AutomationGatewayImpl implements AutomationGateway {
 
     @Override
     public Uni<Automation.DeviceRoleState> ztpAdd(Automation.DeviceRole request) {
+        final var devRoleId = request.getDevRoleId().getDevRoleId().getUuid();
         final var deviceId = serializer.deserialize(request.getDevRoleId().getDevId());
 
-        // TODO tie this with return
-        automationService.addDevice(deviceId);
-
-        // TODO Set all fields of device role state (create models, serializer)
-        return Uni.createFrom()
-                .item(
-                        () ->
-                                Automation.DeviceRoleState.newBuilder()
-                                        .setDevRoleId(request.getDevRoleId())
-                                        .build());
+        return automationService
+                .addDevice(deviceId)
+                .onItem()
+                .transform( device -> transformToDeviceRoleState(device, devRoleId));
     }
 
     @Override
@@ -70,4 +67,16 @@ public class AutomationGatewayImpl implements AutomationGateway {
     public Uni<Automation.DeviceDeletionResult> ztpDeleteAll(Automation.Empty empty) {
         return Uni.createFrom().item(() -> Automation.DeviceDeletionResult.newBuilder().build());
     }
-}
+
+    // TODO When `DeviceRoleState` domain object will be created, move this method to Serializer class and create related tests
+    private Automation.DeviceRoleState transformToDeviceRoleState(Device device, String devRoleId){
+
+        final var deviceRoleId = new DeviceRoleId(devRoleId, device.getDeviceId());
+        final var serializeDeviceRoleId = serializer.serialize(deviceRoleId);
+
+        return Automation.DeviceRoleState.newBuilder()
+                .setDevRoleId(serializeDeviceRoleId)
+                .setDevRoleState(Automation.ZtpDeviceState.ZTP_DEV_STATE_CREATED)
+                .build();
+    }
+}
\ No newline at end of file
diff --git a/src/automation/src/main/java/eu/teraflow/automation/Serializer.java b/src/automation/src/main/java/eu/teraflow/automation/Serializer.java
index ed64e53cf918916b456bd9e670397c1a4e2181d2..4eaf6c5947b25d56ae2493a90276a9bfc4b2f9ef 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/Serializer.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/Serializer.java
@@ -1,5 +1,6 @@
 package eu.teraflow.automation;
 
+import automation.Automation;
 import context.ContextOuterClass;
 import context.ContextOuterClass.DeviceId;
 import context.ContextOuterClass.DeviceOperationalStatusEnum;
@@ -12,20 +13,98 @@ import eu.teraflow.automation.device.model.Device;
 import eu.teraflow.automation.device.model.DeviceConfig;
 import eu.teraflow.automation.device.model.DeviceEvent;
 import eu.teraflow.automation.device.model.DeviceOperationalStatus;
+import eu.teraflow.automation.model.DeviceRole;
+import eu.teraflow.automation.model.DeviceRoleId;
+import eu.teraflow.automation.model.DeviceRoleType;
 import java.util.stream.Collectors;
 import javax.inject.Singleton;
 
 @Singleton
 public class Serializer {
 
+    public DeviceId serializeDeviceId(String expectedDeviceId) {
+        final var builder = DeviceId.newBuilder();
+        final var uuid = serializeUuid(expectedDeviceId);
+
+        builder.setDeviceUuid(uuid);
+
+        return builder.build();
+    }
+
     public String deserialize(DeviceId deviceId) {
         return deviceId.getDeviceUuid().getUuid();
     }
 
-    public DeviceId serializeDeviceId(String expectedDeviceId) {
-        final var uuid = Uuid.newBuilder().setUuid(expectedDeviceId).build();
+    public Automation.DeviceRoleId serialize(DeviceRoleId deviceRoleId) {
+        final var builder = Automation.DeviceRoleId.newBuilder();
+
+        final var deviceRoleDevRoleId = deviceRoleId.getId();
+        final var deviceRoleDeviceId = deviceRoleId.getDeviceId();
+
+        final var deviceRoleDevRoleIdUuid = serializeUuid(deviceRoleDevRoleId);
+        final var deviceRoleDeviceIdUuid = serializeUuid(deviceRoleDeviceId);
+
+        final var deviceId = DeviceId.newBuilder().setDeviceUuid(deviceRoleDeviceIdUuid);
+
+        builder.setDevRoleId(deviceRoleDevRoleIdUuid);
+        builder.setDevId(deviceId);
+
+        return builder.build();
+    }
+
+    public DeviceRoleId deserialize(Automation.DeviceRoleId deviceRoleId) {
+        final var devRoleId = deserialize(deviceRoleId.getDevRoleId());
+        final var devId = deserialize(deviceRoleId.getDevId());
+
+        return new DeviceRoleId(devRoleId, devId);
+    }
+
+    public Automation.DeviceRoleType serialize(DeviceRoleType deviceRoleType) {
+        switch (deviceRoleType) {
+            case NONE:
+                return Automation.DeviceRoleType.NONE;
+            case DEV_OPS:
+                return Automation.DeviceRoleType.DEV_OPS;
+            case DEV_CONF:
+                return Automation.DeviceRoleType.DEV_CONF;
+            case PIPELINE_CONF:
+                return Automation.DeviceRoleType.PIPELINE_CONF;
+            default:
+                return Automation.DeviceRoleType.UNRECOGNIZED;
+        }
+    }
+
+    public DeviceRoleType deserialize(Automation.DeviceRoleType serializedDeviceRoleType) {
+        switch (serializedDeviceRoleType) {
+            case DEV_OPS:
+                return DeviceRoleType.DEV_OPS;
+            case DEV_CONF:
+                return DeviceRoleType.DEV_CONF;
+            case PIPELINE_CONF:
+                return DeviceRoleType.PIPELINE_CONF;
+            case NONE:
+            case UNRECOGNIZED:
+            default:
+                return DeviceRoleType.NONE;
+        }
+    }
+
+    public Automation.DeviceRole serialize(DeviceRole deviceRole) {
+        final var builder = Automation.DeviceRole.newBuilder();
+        final var serializedDeviceRoleId = serialize(deviceRole.getDeviceRoleId());
+        final var serializedDeviceRoleType = serialize(deviceRole.getType());
+
+        builder.setDevRoleId(serializedDeviceRoleId);
+        builder.setDevRoleType(serializedDeviceRoleType);
+
+        return builder.build();
+    }
+
+    public DeviceRole deserialize(Automation.DeviceRole deviceRole) {
+        final var deviceRoleId = deserialize(deviceRole.getDevRoleId());
+        final var deviceRoleType = deserialize(deviceRole.getDevRoleType());
 
-        return ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(uuid).build();
+        return new DeviceRole(deviceRoleId, deviceRoleType);
     }
 
     public ContextOuterClass.EventTypeEnum serialize(EventTypeEnum eventTypeEnum) {
@@ -77,8 +156,10 @@ public class Serializer {
 
     public ContextOuterClass.DeviceEvent serialize(DeviceEvent deviceEvent) {
         final var builder = ContextOuterClass.DeviceEvent.newBuilder();
+        final var deviceIdUuid = serializeUuid(deviceEvent.getDeviceId());
+        final var deviceId = DeviceId.newBuilder().setDeviceUuid(deviceIdUuid);
 
-        builder.setDeviceId(serializeDeviceId(deviceEvent.getDeviceId()));
+        builder.setDeviceId(deviceId);
         builder.setEvent(serialize(deviceEvent.getEvent()));
 
         return builder.build();
@@ -180,8 +261,10 @@ public class Serializer {
 
     public ContextOuterClass.Device serialize(Device device) {
         final var builder = ContextOuterClass.Device.newBuilder();
+        final var deviceIdUuid = serializeUuid(device.getDeviceId());
+        final var deviceId = DeviceId.newBuilder().setDeviceUuid(deviceIdUuid);
 
-        builder.setDeviceId(serializeDeviceId(device.getDeviceId()));
+        builder.setDeviceId(deviceId);
         builder.setDeviceType(device.getDeviceType());
         builder.setDeviceConfig(serialize(device.getDeviceConfig()));
         builder.setDeviceOperationalStatus(serialize(device.getDeviceOperationalStatus()));
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/DeviceGatewayImpl.java b/src/automation/src/main/java/eu/teraflow/automation/device/DeviceGatewayImpl.java
index d0983c12d01ec048416a4b5c0a597357d7ba4c59..0edef7a3128ac119666532bda04916d89157b1ff 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/device/DeviceGatewayImpl.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/device/DeviceGatewayImpl.java
@@ -1,5 +1,6 @@
 package eu.teraflow.automation.device;
 
+import context.ContextOuterClass;
 import device.DeviceService;
 import eu.teraflow.automation.Serializer;
 import eu.teraflow.automation.device.model.Device;
diff --git a/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRoleState.java b/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRoleState.java
deleted file mode 100644
index 71c5757d69f94c2d92df2c94fcd2fbf89ba33950..0000000000000000000000000000000000000000
--- a/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRoleState.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package eu.teraflow.automation.model;
-
-public class DeviceRoleState {
-
-    private final DeviceRoleId deviceRoleId;
-    private final DeviceState deviceState;
-
-    public DeviceRoleState(DeviceRoleId deviceRoleId, DeviceState deviceState) {
-
-        this.deviceRoleId = deviceRoleId;
-        this.deviceState = deviceState;
-    }
-
-    public DeviceRoleId getDeviceRoleId() {
-        return deviceRoleId;
-    }
-
-    public DeviceState getDeviceState() {
-        return deviceState;
-    }
-}
diff --git a/src/automation/src/test/java/eu/teraflow/automation/AutomationServiceTest.java b/src/automation/src/test/java/eu/teraflow/automation/AutomationServiceTest.java
index fbceb55ec246438aaee522579be21790b363207a..a75106ca221ecefd3ed33330a1be3de3745fadb1 100644
--- a/src/automation/src/test/java/eu/teraflow/automation/AutomationServiceTest.java
+++ b/src/automation/src/test/java/eu/teraflow/automation/AutomationServiceTest.java
@@ -3,14 +3,15 @@ package eu.teraflow.automation;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import automation.Automation;
-import automation.Automation.DeviceRole;
-import automation.Automation.DeviceRoleId;
 import automation.AutomationService;
 import context.ContextOuterClass;
+import eu.teraflow.automation.model.DeviceRole;
+import eu.teraflow.automation.model.DeviceRoleId;
 import eu.teraflow.automation.context.ContextGateway;
 import eu.teraflow.automation.device.DeviceGateway;
 import eu.teraflow.automation.device.model.*;
 import eu.teraflow.automation.device.model.Device;
+import eu.teraflow.automation.model.DeviceRoleType;
 import io.quarkus.grpc.GrpcClient;
 import io.quarkus.test.junit.QuarkusTest;
 import io.quarkus.test.junit.mockito.InjectMock;
@@ -61,15 +62,11 @@ class AutomationServiceTest {
         Mockito.when(deviceGateway.configureDevice(Mockito.any()))
                 .thenReturn(Uni.createFrom().item(DEVICE_ID));
 
-        // TODO 1. add (de)serialization for device role (and its components) in serializer module
-        // TODO 2. use it here
-        final var serializedDeviceRoleId =
-                DeviceRoleId.newBuilder()
-                        .setDevRoleId(serializer.serializeUuid(DEVICE_ROLE_ID))
-                        .setDevId(serializer.serializeDeviceId(DEVICE_ID))
-                        .build();
-        final var serializedDeviceRole =
-                DeviceRole.newBuilder().setDevRoleId(serializedDeviceRoleId).build();
+        final var deviceRoleId = new DeviceRoleId(DEVICE_ROLE_ID, DEVICE_ID);
+        final var deviceRoleType = DeviceRoleType.DEV_OPS;
+        final var deviceRole = new DeviceRole(deviceRoleId, deviceRoleType);
+        final var serializedDeviceRole = serializer.serialize(deviceRole);
+
         client
                 .ztpAdd(serializedDeviceRole)
                 .subscribe()
@@ -78,6 +75,10 @@ class AutomationServiceTest {
                             LOGGER.infof("Received %s", deviceRoleState);
                             final var devRoleId = deviceRoleState.getDevRoleId();
 
+                            final var deviceRoleIdUuid = serializer.deserialize(devRoleId);
+
+                            assertThat(deviceRoleIdUuid.getId()).isEqualTo(DEVICE_ROLE_ID);
+
                             final var deviceId = serializer.deserialize(devRoleId.getDevId());
                             assertThat(deviceId).isEqualTo(DEVICE_ID);
 
@@ -90,40 +91,45 @@ class AutomationServiceTest {
     @Test
     void shouldUpdateDeviceRole() throws ExecutionException, InterruptedException, TimeoutException {
         CompletableFuture<String> message = new CompletableFuture<>();
-        final var UUID_VALUE = "0f14d0ab-9605-7862-a9e4-5ed26688389b";
+        final var DEVICE_ID = "0f14d0ab-9608-7862-a9e4-5ed26688389b";
+        final var DEVICE_ROLE_ID = "0f14d0ab-9608-7862-a9e4-5ed26688389a";
 
-        final var uuid = serializer.serializeUuid(UUID_VALUE);
-        final var deviceRoleId = DeviceRoleId.newBuilder().setDevRoleId(uuid).build();
-        final var deviceRole = DeviceRole.newBuilder().setDevRoleId(deviceRoleId).build();
+        final var deviceRoleId = new DeviceRoleId(DEVICE_ROLE_ID, DEVICE_ID);
+        final var deviceRoleType = DeviceRoleType.DEV_CONF;
+        final var deviceRole = new DeviceRole(deviceRoleId, deviceRoleType);
+        final var serializedDeviceRole = serializer.serialize(deviceRole);
 
         client
-                .ztpUpdate(deviceRole)
+                .ztpUpdate(serializedDeviceRole)
                 .subscribe()
                 .with(
                         deviceRoleState -> {
                             LOGGER.infof("Received response %s", deviceRoleState);
                             message.complete(deviceRoleState.getDevRoleId().toString());
                         });
-        assertThat(message.get(5, TimeUnit.SECONDS)).contains(UUID_VALUE);
+        assertThat(message.get(5, TimeUnit.SECONDS)).contains(DEVICE_ID);
     }
 
     @Test
     void shouldGetDeviceRole() throws ExecutionException, InterruptedException, TimeoutException {
         CompletableFuture<String> message = new CompletableFuture<>();
-        final var UUID_VALUE = "0f14d0ab-9605-7862-a9e4-5ed26688389b";
+        final var DEVICE_ID = "0f14d0ab-9608-7862-a9e4-5ed26688389b";
+        final var DEVICE_ROLE_ID = "0f14d0ab-9608-7862-a9e4-5ed26688389a";
 
-        final var uuid = serializer.serializeUuid(UUID_VALUE);
-        final var deviceRoleId = DeviceRoleId.newBuilder().setDevRoleId(uuid).build();
+        final var deviceRoleId = new DeviceRoleId(DEVICE_ROLE_ID, DEVICE_ID);
+        final var serializeDeviceRoleId = serializer.serialize(deviceRoleId);
 
         client
-                .ztpGetDeviceRole(deviceRoleId)
+                .ztpGetDeviceRole(serializeDeviceRoleId)
                 .subscribe()
                 .with(
                         deviceRole -> {
                             LOGGER.infof("Received response %s", deviceRole);
+                            assertThat(deviceRole.getDevRoleId().getDevId().getDeviceUuid().getUuid())
+                                    .isEqualTo(DEVICE_ID);
                             message.complete(deviceRole.getDevRoleId().toString());
                         });
-        assertThat(message.get(5, TimeUnit.SECONDS)).contains(UUID_VALUE);
+        assertThat(message.get(5, TimeUnit.SECONDS)).contains(DEVICE_ROLE_ID);
     }
 
     @Test
@@ -131,8 +137,7 @@ class AutomationServiceTest {
             throws ExecutionException, InterruptedException, TimeoutException {
         CompletableFuture<String> message = new CompletableFuture<>();
 
-        final var uuid = serializer.serializeUuid("0f14d0ab-9605-7862-a9e4-5ed26688389b");
-        final var deviceId = ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(uuid).build();
+        final var deviceId = serializer.serializeDeviceId("0f14d0ab-9605-7862-a9e4-5ed26688389b");
 
         client
                 .ztpGetDeviceRolesByDeviceId(deviceId)
@@ -151,8 +156,8 @@ class AutomationServiceTest {
         final var UUID_VALUE = "0f14d0ab-9605-7862-a9e4-5ed26688389b";
 
         final var uuid = serializer.serializeUuid(UUID_VALUE);
-        final var deviceRoleId = DeviceRoleId.newBuilder().setDevRoleId(uuid).build();
-        final var deviceRole = DeviceRole.newBuilder().setDevRoleId(deviceRoleId).build();
+        final var deviceRoleId = Automation.DeviceRoleId.newBuilder().setDevRoleId(uuid).build();
+        final var deviceRole = Automation.DeviceRole.newBuilder().setDevRoleId(deviceRoleId).build();
 
         client
                 .ztpDelete(deviceRole)
diff --git a/src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java b/src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java
index de4a7930da6f51686b8173054b705d229986f9ff..eb8e8e029c604dd5078243e955a4df880832bb9f 100644
--- a/src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java
+++ b/src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java
@@ -2,6 +2,7 @@ package eu.teraflow.automation;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
+import automation.Automation;
 import context.ContextOuterClass;
 import context.ContextOuterClass.DeviceId;
 import context.ContextOuterClass.DeviceOperationalStatusEnum;
@@ -14,6 +15,9 @@ import eu.teraflow.automation.device.model.Device;
 import eu.teraflow.automation.device.model.DeviceConfig;
 import eu.teraflow.automation.device.model.DeviceEvent;
 import eu.teraflow.automation.device.model.DeviceOperationalStatus;
+import eu.teraflow.automation.model.DeviceRole;
+import eu.teraflow.automation.model.DeviceRoleId;
+import eu.teraflow.automation.model.DeviceRoleType;
 import io.quarkus.test.junit.QuarkusTest;
 import java.util.List;
 import java.util.stream.Stream;
@@ -30,25 +34,143 @@ class SerializerTest {
 
     @Test
     void shouldSerializeDeviceId() {
-        final var expectedId = "expectedDeviceId";
-        final var expectedUuid = Uuid.newBuilder().setUuid(expectedId).build();
-        final var expectedDeviceId = DeviceId.newBuilder().setDeviceUuid(expectedUuid).build();
+        final var expectedDeviceId = "expectedDeviceId";
 
-        final var serializedDeviceId = serializer.serializeDeviceId("expectedDeviceId");
+        final var deviceIdUuid = serializer.serializeUuid(expectedDeviceId);
+        final var deviceId = ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(deviceIdUuid).build();
 
-        assertThat(serializedDeviceId).usingRecursiveComparison().isEqualTo(expectedDeviceId);
+        final var serializedDeviceId = serializer.serializeDeviceId(expectedDeviceId);
+
+        assertThat(serializedDeviceId).usingRecursiveComparison().isEqualTo(deviceId);
     }
 
     @Test
     void shouldDeserializeDeviceId() {
         final var expectedDeviceId = "expectedDeviceId";
 
-        final var serializedDeviceId = serializer.serializeDeviceId("expectedDeviceId");
+        final var serializedDeviceIdUuid = serializer.serializeUuid("expectedDeviceId");
+        final var serializedDeviceId = DeviceId.newBuilder().setDeviceUuid(serializedDeviceIdUuid).build();
+
         final var deviceId = serializer.deserialize(serializedDeviceId);
 
         assertThat(deviceId).isEqualTo(expectedDeviceId);
     }
 
+    @Test
+    void shouldSerializeDeviceRoleId() {
+        final var expectedDevRoleId = "expectedDevRoleId";
+        final var expectedDeviceId = "expectedDeviceId";
+
+        final var deviceRoleId = new DeviceRoleId(expectedDevRoleId, expectedDeviceId);
+        final var serializedDeviceRoleIdUuid = serializer.serializeUuid(expectedDevRoleId);
+        final var serializedDeviceRoleDeviceIdUuid = serializer.serializeUuid(expectedDeviceId);
+        final var serializedDeviceRoleDeviceId = ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(serializedDeviceRoleDeviceIdUuid).build();
+
+        final var expectedDeviceRoleId =
+                Automation.DeviceRoleId.newBuilder()
+                        .setDevRoleId(serializedDeviceRoleIdUuid)
+                        .setDevId(serializedDeviceRoleDeviceId)
+                        .build();
+
+        final var serializedDevRoleId =
+                serializer.serialize(deviceRoleId);
+
+        assertThat(serializedDevRoleId).usingRecursiveComparison().isEqualTo(expectedDeviceRoleId);
+    }
+
+    @Test
+    void shouldDeserializeDeviceRoleId() {
+        final var expectedDevRoleId = "expectedDevRoleId";
+        final var expectedDeviceId = "expectedDeviceId";
+
+        final var expectedDeviceRoleId = new DeviceRoleId(expectedDevRoleId, expectedDeviceId);
+
+        final var serializedDeviceRoleId = serializer.serialize(expectedDeviceRoleId);
+        final var deviceRoleId = serializer.deserialize(serializedDeviceRoleId);
+
+        assertThat(deviceRoleId).usingRecursiveComparison().isEqualTo(expectedDeviceRoleId);
+    }
+
+    private static Stream<Arguments> provideDeviceRoleType() {
+        return Stream.of(
+                Arguments.of(DeviceRoleType.DEV_OPS, Automation.DeviceRoleType.DEV_OPS),
+                Arguments.of(DeviceRoleType.DEV_CONF, Automation.DeviceRoleType.DEV_CONF),
+                Arguments.of(DeviceRoleType.NONE, Automation.DeviceRoleType.NONE),
+                Arguments.of(DeviceRoleType.PIPELINE_CONF, Automation.DeviceRoleType.PIPELINE_CONF));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideDeviceRoleType")
+    void shouldSerializeDeviceRoleType(
+            DeviceRoleType deviceRoleType, Automation.DeviceRoleType expectedSerializedType) {
+        final var serializedType = serializer.serialize(deviceRoleType);
+        assertThat(serializedType.getNumber()).isEqualTo(expectedSerializedType.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideDeviceRoleType")
+    void shouldDeserializeDeviceRoleType(
+            DeviceRoleType expectedDeviceRoleType,
+            Automation.DeviceRoleType serializedDeviceRoleTypeType) {
+
+        final var deviceRoleType = serializer.deserialize(serializedDeviceRoleTypeType);
+
+        assertThat(deviceRoleType).isEqualTo(expectedDeviceRoleType);
+    }
+
+    @Test
+    void shouldSerializeDeviceRole() {
+        final var expectedDevRoleId = "expectedDevRoleId";
+        final var expectedDeviceId = "expectedDeviceId";
+
+        final var serializedDeviceRoleDevRoleIdUuid = serializer.serializeUuid(expectedDevRoleId);
+        final var serializedDeviceRoleDeviceId = serializer.serializeDeviceId(expectedDeviceId);
+
+        final var expectedDeviceRoleId = Automation.DeviceRoleId.newBuilder()
+                .setDevRoleId(serializedDeviceRoleDevRoleIdUuid)
+                .setDevId(serializedDeviceRoleDeviceId)
+                .build();
+
+        final var expectedDeviceRoleType = Automation.DeviceRoleType.PIPELINE_CONF;
+
+        final var expectedDeviceRole = Automation.DeviceRole.newBuilder()
+                .setDevRoleId(expectedDeviceRoleId)
+                .setDevRoleType(expectedDeviceRoleType)
+                .build();
+
+        final var deviceRoleId = new DeviceRoleId(expectedDevRoleId,expectedDeviceId);
+        final var deviceRoleType = DeviceRoleType.PIPELINE_CONF;
+
+        final var deviceRole = new DeviceRole(deviceRoleId, deviceRoleType);
+        final var serializedDeviceRole = serializer.serialize(deviceRole);
+
+        assertThat(serializedDeviceRole).usingRecursiveComparison().isEqualTo(expectedDeviceRole);
+    }
+
+    @Test
+    void shouldDeserializeDeviceRole() {
+        final var expectedDevRoleId = "expectedDevRoleId";
+        final var expectedDeviceId = "expectedDeviceId";
+
+        final var expectedDeviceRoleId = new DeviceRoleId(expectedDevRoleId, expectedDeviceId);
+        final var expectedDeviceRoleType = DeviceRoleType.NONE;
+
+        final var expectedDeviceRole = new DeviceRole(expectedDeviceRoleId, expectedDeviceRoleType);
+
+        final var serializedDeviceRoleId = serializer.serialize(expectedDeviceRoleId);
+        final var serializedDeviceRoleType = serializer.serialize(expectedDeviceRoleType);
+
+        final var serializedDeviceRole =
+                Automation.DeviceRole.newBuilder()
+                        .setDevRoleId(serializedDeviceRoleId)
+                        .setDevRoleType(serializedDeviceRoleType)
+                        .build();
+
+        final var deviceRole = serializer.deserialize(serializedDeviceRole);
+
+        assertThat(deviceRole).usingRecursiveComparison().isEqualTo(expectedDeviceRole);
+    }
+
     private static Stream<Arguments> provideEventTypeEnum() {
         return Stream.of(
                 Arguments.of(EventTypeEnum.CREATE, ContextOuterClass.EventTypeEnum.EVENTTYPE_CREATE),
@@ -302,7 +424,10 @@ class SerializerTest {
         final var expectedDeviceConfig =
                 ContextOuterClass.DeviceConfig.newBuilder().addConfigRules(expectedConfigRule).build();
         final var deviceBuilder = ContextOuterClass.Device.newBuilder();
-        deviceBuilder.setDeviceId(serializer.serializeDeviceId("deviceId"));
+
+        final var serializedDeviceId = serializer.serializeDeviceId("deviceId");
+
+        deviceBuilder.setDeviceId(serializedDeviceId);
         deviceBuilder.setDeviceType("deviceType");
         deviceBuilder.setDeviceConfig(expectedDeviceConfig);
         deviceBuilder.setDeviceOperationalStatus(serializer.serialize(DeviceOperationalStatus.ENABLED));
@@ -334,8 +459,11 @@ class SerializerTest {
                         .build();
         final var deviceConfig =
                 ContextOuterClass.DeviceConfig.newBuilder().addConfigRules(configRule).build();
+
+        final var serializedDeviceId = serializer.serializeDeviceId("deviceId");
+
         final var deviceBuilder = ContextOuterClass.Device.newBuilder();
-        deviceBuilder.setDeviceId(serializer.serializeDeviceId("deviceId"));
+        deviceBuilder.setDeviceId(serializedDeviceId);
         deviceBuilder.setDeviceType("deviceType");
         deviceBuilder.setDeviceConfig(deviceConfig);
         deviceBuilder.setDeviceOperationalStatus(serializer.serialize(DeviceOperationalStatus.ENABLED));
diff --git a/src/automation/target/kubernetes/kubernetes.yml b/src/automation/target/kubernetes/kubernetes.yml
index 788e6642a34d2843248fc1e720612f7e2f32596c..1b3bf2a0f3094e546e79d9d9bb6df873d72f1403 100644
--- a/src/automation/target/kubernetes/kubernetes.yml
+++ b/src/automation/target/kubernetes/kubernetes.yml
@@ -3,20 +3,20 @@ apiVersion: v1
 kind: Service
 metadata:
   annotations:
-    app.quarkus.io/commit-id: 500a0a232ec361b669b48cc432e9bd9c332eae8b
-    app.quarkus.io/build-timestamp: 2022-02-11 - 10:27:21 +0000
+    app.quarkus.io/commit-id: 644f8ea4385acb720eab7317de057f9d1d8ebfe6
+    app.quarkus.io/build-timestamp: 2022-02-14 - 10:21:58 +0000
   labels:
     app.kubernetes.io/name: automationservice
     app: automationservice
   name: automationservice
 spec:
   ports:
-    - name: grpc-server
-      port: 9999
-      targetPort: 9999
     - name: http
       port: 8080
       targetPort: 8080
+    - name: grpc-server
+      port: 9999
+      targetPort: 9999
   selector:
     app.kubernetes.io/name: automationservice
   type: ClusterIP
@@ -25,8 +25,8 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   annotations:
-    app.quarkus.io/commit-id: 500a0a232ec361b669b48cc432e9bd9c332eae8b
-    app.quarkus.io/build-timestamp: 2022-02-11 - 10:27:21 +0000
+    app.quarkus.io/commit-id: 644f8ea4385acb720eab7317de057f9d1d8ebfe6
+    app.quarkus.io/build-timestamp: 2022-02-14 - 10:21:58 +0000
   labels:
     app: automationservice
     app.kubernetes.io/name: automationservice
@@ -39,8 +39,8 @@ spec:
   template:
     metadata:
       annotations:
-        app.quarkus.io/commit-id: 500a0a232ec361b669b48cc432e9bd9c332eae8b
-        app.quarkus.io/build-timestamp: 2022-02-11 - 10:27:21 +0000
+        app.quarkus.io/commit-id: 644f8ea4385acb720eab7317de057f9d1d8ebfe6
+        app.quarkus.io/build-timestamp: 2022-02-14 - 10:21:58 +0000
       labels:
         app: automationservice
         app.kubernetes.io/name: automationservice
@@ -51,11 +51,11 @@ spec:
               valueFrom:
                 fieldRef:
                   fieldPath: metadata.namespace
-            - name: CONTEXT_SERVICE_HOST
-              value: contextservice
             - name: DEVICE_SERVICE_HOST
               value: deviceservice
-          image: registry.gitlab.com/teraflow-h2020/controller/automation:0.1.0
+            - name: CONTEXT_SERVICE_HOST
+              value: contextservice
+          image: registry.gitlab.com/teraflow-h2020/controller/automation:0.2.0
           imagePullPolicy: Always
           livenessProbe:
             failureThreshold: 3
@@ -69,12 +69,12 @@ spec:
             timeoutSeconds: 10
           name: automationservice
           ports:
-            - containerPort: 9999
-              name: grpc-server
-              protocol: TCP
             - containerPort: 8080
               name: http
               protocol: TCP
+            - containerPort: 9999
+              name: grpc-server
+              protocol: TCP
           readinessProbe:
             failureThreshold: 3
             httpGet: