ROVER - Changes involve the following:
(1) - Hono interaction thread added
(2) - Cpu logger thread added.
(3) - Headers moved from interfaces to implementation
Sensor & cpu util information is sent to Eclipse Hono every 1 second for now.
The code will be tested in depth soon on the rover.

Signed-off-by: Mustafa Ozcelikors <mozcelikors@gmail.com>
diff --git a/rover/src/RaspberryTest.cpp b/rover/src/RaspberryTest.cpp
index b77e55f..eb046f3 100644
--- a/rover/src/RaspberryTest.cpp
+++ b/rover/src/RaspberryTest.cpp
@@ -45,6 +45,10 @@
 
 #include "hono_interaction/hono_interaction.h"
 
+#include "timing/timing.h"
+
+#include "api/basic_psys_rover.h"
+
 //Please comment the line below to work with SR-04 sensor instead of GROOVE for rear proximity sensing.
 //#define USE_GROOVE_SENSOR 1
 
@@ -94,7 +98,15 @@
 timing_interface parking_task_ti;
 pthread_mutex_t parking_task_ti_l;
 
+timing_interface hono_task_ti;
+pthread_mutex_t hono_task_ti_l;
+
+timing_interface cpu_logger_task_ti;
+pthread_mutex_t cpu_logger_task_ti_l;
+
+
 //Shared data between threads
+
 float temperature_shared;
 pthread_mutex_t temperature_lock;
 
@@ -128,11 +140,13 @@
 int speed_shared;
 pthread_mutex_t speed_lock;
 
+double cpu_util_shared[4];
+pthread_mutex_t cpu_util_shared_lock;
+
 int main()
 {
-	//Register the device to cloud
-	registerDeviceToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", 4771);
-	//sendEventDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", 4771,"Bearing",0.5);
+	//Register all the entries as devices to cloud
+	registerEntriesToHonoInstance();
 
 	RefreshThreadList();
 
@@ -326,7 +340,6 @@
 	placeAThreadToCore (displaysensors_thread, 0);
 	placeAThreadToCore (webserver_motordrive_thread, 0);
 
-
 	while (1)
 	{
 		//What main thread does should come here..
diff --git a/rover/src/hono_interaction/hono_interaction.cpp b/rover/src/hono_interaction/hono_interaction.cpp
index e67eea6..16c7d08 100644
--- a/rover/src/hono_interaction/hono_interaction.cpp
+++ b/rover/src/hono_interaction/hono_interaction.cpp
@@ -104,23 +104,21 @@
  * Arguments:			char * host_name
  * 						int port
  * 						char * tenant_name
- * 						int device_id
+ * 						char * device_id
  * Returns:				Successfully returns status data.
  * 						If the action completed -> returns 1
  * 						If the action failed ->    returns 0
  */
-int registerDeviceToHonoInstance (char * host_name, int port, char * tenant_name, int device_id)
+int registerDeviceToHonoInstance (char * host_name, int port, char * tenant_name, char * device_id)
 {
 	FILE *fp;
 	int code;
 	int status;
 
 	//Prepare command as string
-	//Example: "curl -X POST -i -d 'device_id=4711' http://localhost:28080/registration/DEFAULT_TENANT"
+	//Example: "curl -X POST -i -d 'device_id=AStringID' http://localhost:28080/registration/DEFAULT_TENANT"
 	sprintf(buffer, "curl -X POST -i -d 'device_id=");
-	snprintf(num_buffer, sizeof(num_buffer), "%d", device_id);
-	strcat(buffer, num_buffer);
-	num_buffer[0] = 0; //Clear array
+	strcat(buffer, device_id);
 	strcat(buffer, "' http://");
 	strcat(buffer, host_name);
 	strcat(buffer, ":");
@@ -173,14 +171,14 @@
  * Arguments:			char * host_name
  * 						int port
  * 						char * tenant_name
- * 						int device_id
+ * 						char * device_id
  * 						char * field
  * 						double value
  * Returns:				Successfully returns status data.
  * 						If the action completed -> returns 1
  * 						If the action failed ->    returns 0
  */
-int sendTelemetryDataToHonoInstance (char * host_name, int port, char * tenant_name, int device_id, char * field, double value)
+int sendTelemetryDataToHonoInstance (char * host_name, int port, char * tenant_name, char * device_id, char * field, double value)
 {
 	FILE *fp;
 	int code;
@@ -188,6 +186,10 @@
 
 	//Prepare command as string
 	//Example: "curl -X PUT -i -H 'Content-Type: application/json' --data-binary '{"Bearing": 0.5}' http://idial.institute:8080/telemetry/DEFAULT_TENANT/4711"
+
+	//To get the information in dashboard, we use device ID as the entry name, and "value" as field.
+	//Example: "curl -X PUT -i -H 'Content-Type: application/json' --data-binary '{"value": 0.5}' http://idial.institute:8080/telemetry/DEFAULT_TENANT/roverRearSensor"
+
 	sprintf(buffer, "curl -X PUT -i -H 'Content-Type: application/json' --data-binary '{\"");
 	strcat(buffer, field);
 	strcat(buffer, "\": ");
@@ -203,9 +205,7 @@
 	strcat(buffer, "/telemetry/");
 	strcat(buffer, tenant_name);
 	strcat(buffer, "/");
-	snprintf(num_buffer, sizeof(num_buffer), "%d", device_id);
-	strcat(buffer, num_buffer);
-	num_buffer[0] = 0; //Clear array
+	strcat(buffer, device_id);
 
 	//To redirect pipe to prevent stdout showing all outputs generated by curl
 	strcat(buffer, " 2>/dev/null"); //2>&1 would redirect to stderr, we choose to be able to parse returned code
@@ -250,14 +250,14 @@
  * Arguments:			char * host_name
  * 						int port
  * 						char * tenant_name
- * 						int device_id
+ * 						char * device_id
  * 						char * field
  * 						double value
  * Returns:				Successfully returns status data.
  * 						If the action completed -> returns 1
  * 						If the action failed ->    returns 0
  */
-int sendEventDataToHonoInstance (char * host_name, int port, char * tenant_name, int device_id, char * field, double value)
+int sendEventDataToHonoInstance (char * host_name, int port, char * tenant_name, char * device_id, char * field, double value)
 {
 	FILE *fp;
 	int code;
@@ -265,6 +265,9 @@
 
 	//Prepare command as string
 	//Example: "curl -X PUT -i -H 'Content-Type: application/json' --data-binary '{"Bearing": 0.5}' http://idial.institute:8080/event/DEFAULT_TENANT/4711"
+
+	//To get the information in dashboard, we use device ID as the entry name, and "value" as field.
+	//Example: "curl -X PUT -i -H 'Content-Type: application/json' --data-binary '{"value": 0.5}' http://idial.institute:8080/event/DEFAULT_TENANT/roverRearSensor"
 	sprintf(buffer, "curl -X PUT -i -H 'Content-Type: application/json' --data-binary '{\"");
 	strcat(buffer, field);
 	strcat(buffer, "\": ");
@@ -280,9 +283,7 @@
 	strcat(buffer, "/event/");
 	strcat(buffer, tenant_name);
 	strcat(buffer, "/");
-	snprintf(num_buffer, sizeof(num_buffer), "%d", device_id);
-	strcat(buffer, num_buffer);
-	num_buffer[0] = 0; //Clear array
+	strcat(buffer, device_id);
 
 	//To redirect pipe to prevent stdout showing all outputs generated by curl
 	strcat(buffer, " 2>/dev/null"); //2>&1 would redirect to stderr, we choose to be able to parse returned code
@@ -319,3 +320,27 @@
 	return status;
 }
 
+/**
+ * Function Name:		registerSensorsToHonoInstance
+ * Description:			If non registered already, this function
+ * 						registers all the sensors and other entries
+ * 						of APP4MC Rover as devices to Hono instance.
+ * 						for visualization of Raw data in Granafa/InnoDB.
+ */
+int registerEntriesToHonoInstance (void)
+{
+	registerDeviceToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverFront");
+	registerDeviceToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverFrontLeft");
+	registerDeviceToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverFrontRight");
+	registerDeviceToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverRear");
+	registerDeviceToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverRearLeft");
+	registerDeviceToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverRearRight");
+	registerDeviceToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverBearing");
+	registerDeviceToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverUtilCpu1");
+	registerDeviceToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverUtilCpu2");
+	registerDeviceToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverUtilCpu3");
+	registerDeviceToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverUtilCpu4");
+
+	return 1;
+}
+
diff --git a/rover/src/hono_interaction/hono_interaction.h b/rover/src/hono_interaction/hono_interaction.h
index f6326f3..8126977 100644
--- a/rover/src/hono_interaction/hono_interaction.h
+++ b/rover/src/hono_interaction/hono_interaction.h
@@ -26,9 +26,9 @@
 
 //Interfaces
 
+int registerEntriesToHonoInstance (void);
 int registerDeviceToHonoInstance (char * host_name, int port, char * tenant_name, int device_id);
-int sendTelemetryDataToHonoInstance (char * host_name, int port, char * tenant_name, int device_id, char * field, double value);
-int sendEventDataToHonoInstance (char * host_name, int port, char * tenant_name, int device_id, char * field, double value);
-
+int sendTelemetryDataToHonoInstance (char * host_name, int port, char * tenant_name, char * device_id, char * field, double value);
+int sendEventDataToHonoInstance (char * host_name, int port, char * tenant_name, char * device_id, char * field, double value);
 
 #endif /* HONO_INTERACTION_HONO_INTERACTION_H_ */
diff --git a/rover/src/interfaces.h b/rover/src/interfaces.h
index 1f87a49..6ea16ec 100644
--- a/rover/src/interfaces.h
+++ b/rover/src/interfaces.h
@@ -86,6 +86,12 @@
 extern timing_interface parking_task_ti;
 extern pthread_mutex_t parking_task_ti_l;
 
+extern timing_interface hono_task_ti;
+extern pthread_mutex_t hono_task_ti_l;
+
+extern timing_interface cpu_logger_task_ti;
+extern pthread_mutex_t cpu_logger_task_ti_l;
+
 //---
 
 extern float temperature_shared;
@@ -118,5 +124,8 @@
 extern int speed_shared;
 extern pthread_mutex_t speed_lock;
 
+extern double cpu_util_shared[4];
+extern pthread_mutex_t cpu_util_shared_lock;
+
 
 #endif /* INTERFACES_H_ */
diff --git a/rover/src/tasks/adaptive_cruise_control_task.cpp b/rover/src/tasks/adaptive_cruise_control_task.cpp
index a463014..440a713 100644
--- a/rover/src/tasks/adaptive_cruise_control_task.cpp
+++ b/rover/src/tasks/adaptive_cruise_control_task.cpp
@@ -11,6 +11,18 @@
 
 #include "adaptive_cruise_control_task.h"
 
+#include <wiringPi.h>
+#include <ctime>
+#include <unistd.h>
+#include "../timing/timing.h"
+#include "../api/basic_psys_rover.h"
+#include "../interfaces.h"
+#include <pthread.h>
+#include "../RaspberryTest.h"
+#include <softPwm.h>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+
 void *Adaptive_Cruise_Control_Task(void * arg)
 {
 	timing acc_task_tmr;
diff --git a/rover/src/tasks/adaptive_cruise_control_task.h b/rover/src/tasks/adaptive_cruise_control_task.h
index 56d1be7..a648a9e 100644
--- a/rover/src/tasks/adaptive_cruise_control_task.h
+++ b/rover/src/tasks/adaptive_cruise_control_task.h
@@ -15,17 +15,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <wiringPi.h>
-#include <ctime>
-#include <unistd.h>
-#include "../timing/timing.h"
-#include "../api/basic_psys_rover.h"
-#include "../interfaces.h"
-#include <pthread.h>
-#include "../RaspberryTest.h"
-#include <softPwm.h>
 
-#include "../pthread_monitoring/collect_thread_name.h"
 
 #define CRITICAL_DISTANCE 10
 #define CORRECT_DISTANCE 20
diff --git a/rover/src/tasks/compass_sensor_task.cpp b/rover/src/tasks/compass_sensor_task.cpp
index 0d1e932..0c52fd9 100644
--- a/rover/src/tasks/compass_sensor_task.cpp
+++ b/rover/src/tasks/compass_sensor_task.cpp
@@ -20,7 +20,22 @@
  *
  */
 #include "compass_sensor_task.h"
-#include "../hono_interaction/hono_interaction.h"
+#include <stdint.h>
+#include <ctime>
+#include <wiringPi.h>
+#include <wiringPiI2C.h>
+#include <unistd.h>
+#include "../api/basic_psys_rover.h"
+#include "../interfaces.h"
+#include "../timing/timing.h"
+#include <pthread.h>
+#include <math.h>
+
+#include <fstream>
+#include <iostream>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+#include "../RaspberryTest.h"
 
 #define HMC588L_ADDRESS 0x1E
 #define CALIBRATION_DURATION 10000 //compass calibration has a duration of 5 seconds
@@ -155,7 +170,6 @@
 		if (i2c_hmc588l_fd >= 0) {
 			pthread_mutex_lock(&compass_lock);
 				bearing_shared = getBearingFromSensor();
-				sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", 4771,"Bearing", bearing_shared);
 			pthread_mutex_unlock(&compass_lock);
 			//printf("Bearing=%f\n", bearing_shared);
 		}
diff --git a/rover/src/tasks/compass_sensor_task.h b/rover/src/tasks/compass_sensor_task.h
index b9e2032..936ad54 100644
--- a/rover/src/tasks/compass_sensor_task.h
+++ b/rover/src/tasks/compass_sensor_task.h
@@ -25,22 +25,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <stdint.h>
-#include <ctime>
-#include <wiringPi.h>
-#include <wiringPiI2C.h>
-#include <unistd.h>
-#include "../api/basic_psys_rover.h"
-#include "../interfaces.h"
-#include "../timing/timing.h"
-#include <pthread.h>
-#include <math.h>
 
-#include <fstream>
-#include <iostream>
-
-#include "../pthread_monitoring/collect_thread_name.h"
-#include "../RaspberryTest.h"
 
 
 using namespace std;
diff --git a/rover/src/tasks/cpu_logger_task.cpp b/rover/src/tasks/cpu_logger_task.cpp
new file mode 100644
index 0000000..79b1d26
--- /dev/null
+++ b/rover/src/tasks/cpu_logger_task.cpp
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2017 FH Dortmund and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Description:
+ *    CPU Utilization Logger Task for Rover / Raspberry Pi
+ *
+ * Authors:
+ *    M. Ozcelikors,            R.Hottger
+ *    <mozcelikors@gmail.com>   <robert.hoettger@fh-dortmund.de>
+ *
+ */
+
+#include "cpu_logger_task.h"
+#include <string.h>
+#include <wiringPi.h>
+#include <ctime>
+#include <unistd.h>
+#include "../timing/timing.h"
+#include "../api/basic_psys_rover.h"
+#include "../interfaces.h"
+#include <pthread.h>
+#include "../RaspberryTest.h"
+#include <softPwm.h>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+
+void *Cpu_Logger_Task(void * arg)
+{
+	FILE* fileptr;
+	char buf[20];
+	int core_num = 0;
+	double roverUtilCpu[4];
+
+	timing cpu_logger_task_tmr;
+	cpu_logger_task_tmr.setTaskID("CpuTsk");
+	cpu_logger_task_tmr.setDeadline(1);
+	cpu_logger_task_tmr.setPeriod(1);
+
+	CollectThreadName("Cpu_Logger_Task");
+
+
+	while (1)
+	{
+		cpu_logger_task_tmr.recordStartTime();
+		cpu_logger_task_tmr.calculatePreviousSlackTime();
+
+		//Task content starts here -----------------------------------------------
+
+		// Read from file
+		fileptr = fopen ("/var/www/html/core_usage_rpi.inc", "r");
+		if (!fileptr)
+		{
+			fprintf(stderr, "Unable to read from file");
+			abort(); //Dump the core
+		}
+		else
+		{
+			// Get the data
+			fgets(buf, 20, fileptr);
+
+			// Parse the read file to get core usage information, Splitting operation with tokens
+			char *token = strtok(buf, ",");
+
+			while (token != NULL && core_num<=4)
+			{
+				sscanf(token, "%f", &roverUtilCpu[core_num]);
+				token = strtok(NULL, ",");
+				core_num++;
+			}
+
+			// Write it to a shared variable for further usage in the application
+			pthread_mutex_lock(&cpu_util_shared_lock);
+				for (int i = 0; i < 4; i++)
+					cpu_util_shared[i] = roverUtilCpu[i];
+			pthread_mutex_unlock(&cpu_util_shared_lock);
+
+		}
+
+
+		//Task content ends here -------------------------------------------------
+
+		cpu_logger_task_tmr.recordEndTime();
+		cpu_logger_task_tmr.calculateExecutionTime();
+		cpu_logger_task_tmr.calculateDeadlineMissPercentage();
+		cpu_logger_task_tmr.incrementTotalCycles();
+		pthread_mutex_lock(&cpu_logger_task_ti_l);
+			cpu_logger_task_ti.deadline = cpu_logger_task_tmr.getDeadline();
+			cpu_logger_task_ti.deadline_miss_percentage = cpu_logger_task_tmr.getDeadlineMissPercentage();
+			cpu_logger_task_ti.execution_time = cpu_logger_task_tmr.getExecutionTime();
+			cpu_logger_task_ti.period = cpu_logger_task_tmr.getPeriod();
+			cpu_logger_task_ti.prev_slack_time = cpu_logger_task_tmr.getPrevSlackTime();
+			cpu_logger_task_ti.task_id = cpu_logger_task_tmr.getTaskID();
+			cpu_logger_task_ti.start_time = cpu_logger_task_tmr.getStartTime();
+			cpu_logger_task_ti.end_time = cpu_logger_task_tmr.getEndTime();
+		pthread_mutex_unlock(&cpu_logger_task_ti_l);
+		cpu_logger_task_tmr.sleepToMatchPeriod();
+	}
+
+	/* the function must return something - NULL will do */
+	return NULL;
+}
+
+
diff --git a/rover/src/tasks/cpu_logger_task.h b/rover/src/tasks/cpu_logger_task.h
new file mode 100644
index 0000000..30fd784
--- /dev/null
+++ b/rover/src/tasks/cpu_logger_task.h
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2017 FH Dortmund and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Description:
+ *    CPU Utilization Logger Task for Rover / Raspberry Pi - header file
+ *
+ * Authors:
+ *    M. Ozcelikors,            R.Hottger
+ *    <mozcelikors@gmail.com>   <robert.hoettger@fh-dortmund.de>
+ *
+ */
+
+#ifndef TASKS_CPU_LOGGER_TASK_H_
+#define TASKS_CPU_LOGGER_TASK_H_
+
+#include <stdio.h>
+#include <stdlib.h>
+
+
+
+void *Cpu_Logger_Task (void * arg);
+
+
+
+#endif /* TASKS_CPU_LOGGER_TASK_H_ */
diff --git a/rover/src/tasks/display_sensors_task.cpp b/rover/src/tasks/display_sensors_task.cpp
index 94d9257..e04c206 100644
--- a/rover/src/tasks/display_sensors_task.cpp
+++ b/rover/src/tasks/display_sensors_task.cpp
@@ -20,9 +20,19 @@
  *
  */
 
-
 #include "display_sensors_task.h"
 
+#include <wiringPi.h>
+#include <unistd.h>
+#include <ctime>
+#include "../timing/timing.h"
+#include "../api/basic_psys_rover.h"
+#include "../interfaces.h"
+#include <pthread.h>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+#include "../RaspberryTest.h"
+
 void *DisplaySensors_Task (void * arg)
 {
 	timing display_sensors_task_tmr;
diff --git a/rover/src/tasks/display_sensors_task.h b/rover/src/tasks/display_sensors_task.h
index d629be8..d31d11f 100644
--- a/rover/src/tasks/display_sensors_task.h
+++ b/rover/src/tasks/display_sensors_task.h
@@ -26,16 +26,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <wiringPi.h>
-#include <unistd.h>
-#include <ctime>
-#include "../timing/timing.h"
-#include "../api/basic_psys_rover.h"
-#include "../interfaces.h"
-#include <pthread.h>
 
-#include "../pthread_monitoring/collect_thread_name.h"
-#include "../RaspberryTest.h"
 
 
 void *DisplaySensors_Task (void * arg);
diff --git a/rover/src/tasks/hono_interaction_task.cpp b/rover/src/tasks/hono_interaction_task.cpp
new file mode 100644
index 0000000..33c4304
--- /dev/null
+++ b/rover/src/tasks/hono_interaction_task.cpp
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2017 FH Dortmund and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Description:
+ *    Hono interaction task for Rover
+ *
+ * Authors:
+ *    M. Ozcelikors,            R.Hottger
+ *    <mozcelikors@gmail.com>   <robert.hoettger@fh-dortmund.de>
+ *
+ */
+
+#include "hono_interaction_task.h"
+
+#include <wiringPi.h>
+#include <ctime>
+#include <unistd.h>
+#include "../timing/timing.h"
+#include "../api/basic_psys_rover.h"
+#include "../interfaces.h"
+#include <pthread.h>
+#include "../RaspberryTest.h"
+#include <softPwm.h>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+
+#include "../hono_interaction/hono_interaction.h"
+
+void *Hono_Interaction_Task(void * arg)
+{
+	timing hono_task_tmr;
+	hono_task_tmr.setTaskID("HonoTsk");
+	hono_task_tmr.setDeadline(1);
+	hono_task_tmr.setPeriod(1);
+
+	CollectThreadName("Hono_Interaction_Task");
+
+	while (1)
+	{
+		hono_task_tmr.recordStartTime();
+		hono_task_tmr.calculatePreviousSlackTime();
+
+		//Task content starts here -----------------------------------------------
+
+		// Send everything to Hono every second in this task using the following functions
+		// TODO: This can be done with one curl command, probably a better way.
+		sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverFront","value", distance_sr04_front_shared);
+		sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverFrontLeft","value",infrared_shared[3]);
+		sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverFrontRight","value", infrared_shared[2]);
+		sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverRear","value", distance_sr04_back_shared);
+		sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverRearLeft","value", infrared_shared[1]);
+		sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverRearRight","value", infrared_shared[0]);
+		sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverBearing","value", bearing_shared);
+		sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverUtilCpu1","value", cpu_util_shared[0]);
+		sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverUtilCpu2","value", cpu_util_shared[1]);
+		sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverUtilCpu3","value", cpu_util_shared[2]);
+		sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverUtilCpu4","value", cpu_util_shared[3]);
+
+		//Task content ends here -------------------------------------------------
+
+		hono_task_tmr.recordEndTime();
+		hono_task_tmr.calculateExecutionTime();
+		hono_task_tmr.calculateDeadlineMissPercentage();
+		hono_task_tmr.incrementTotalCycles();
+		pthread_mutex_lock(&hono_task_ti_l);
+			hono_task_ti.deadline = hono_task_tmr.getDeadline();
+			hono_task_ti.deadline_miss_percentage = hono_task_tmr.getDeadlineMissPercentage();
+			hono_task_ti.execution_time = hono_task_tmr.getExecutionTime();
+			hono_task_ti.period = hono_task_tmr.getPeriod();
+			hono_task_ti.prev_slack_time = hono_task_tmr.getPrevSlackTime();
+			hono_task_ti.task_id = hono_task_tmr.getTaskID();
+			hono_task_ti.start_time = hono_task_tmr.getStartTime();
+			hono_task_ti.end_time = hono_task_tmr.getEndTime();
+		pthread_mutex_unlock(&hono_task_ti_l);
+		hono_task_tmr.sleepToMatchPeriod();
+	}
+
+	/* the function must return something - NULL will do */
+	return NULL;
+}
+
diff --git a/rover/src/tasks/hono_interaction_task.h b/rover/src/tasks/hono_interaction_task.h
new file mode 100644
index 0000000..bb6f5d8
--- /dev/null
+++ b/rover/src/tasks/hono_interaction_task.h
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2017 FH Dortmund and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Description:
+ *    Hono interaction task for Rover - header file
+ *
+ * Authors:
+ *    M. Ozcelikors,            R.Hottger
+ *    <mozcelikors@gmail.com>   <robert.hoettger@fh-dortmund.de>
+ *
+ */
+
+#ifndef TASKS_HONO_INTERACTION_TASK_H_
+#define TASKS_HONO_INTERACTION_TASK_H_
+
+#include <stdio.h>
+#include <stdlib.h>
+
+
+
+void *Hono_Interaction_Task (void * arg);
+
+
+
+#endif /* TASKS_HONO_INTERACTION_TASK_H_ */
diff --git a/rover/src/tasks/infrared_distance_task.cpp b/rover/src/tasks/infrared_distance_task.cpp
index e4b62ac..1f44370 100644
--- a/rover/src/tasks/infrared_distance_task.cpp
+++ b/rover/src/tasks/infrared_distance_task.cpp
@@ -22,7 +22,18 @@
  */
 
 #include "infrared_distance_task.h"
-#include "../hono_interaction/hono_interaction.h"
+
+#include <ctime>
+#include <wiringPi.h>
+#include <unistd.h>
+#include "../api/basic_psys_rover.h"
+#include "../timing/timing.h"
+#include "../interfaces.h"
+#include <pthread.h>
+#include <mcp3004.h>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+#include "../RaspberryTest.h"
 
 void setupInfraredSensors()
 {
@@ -65,7 +76,6 @@
 
 	//setupInfraredSensors();
 	int chan;
-	char str_buf[32];
 
 	while (1)
 	{
@@ -78,9 +88,6 @@
 			for (chan = 0; chan <= 3; chan ++)
 			{
 				infrared_shared[chan] = getDistanceFromInfraredSensor(chan);
-				sprintf(str_buf, "IR_%d", chan);
-				sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", 4771, str_buf, infrared_shared[chan]);
-				str_buf[0] = 0;
 			}
 		pthread_mutex_unlock(&infrared_lock);
 		//Task content ends here -------------------------------------------------
diff --git a/rover/src/tasks/infrared_distance_task.h b/rover/src/tasks/infrared_distance_task.h
index 6a72a90..ef57970 100644
--- a/rover/src/tasks/infrared_distance_task.h
+++ b/rover/src/tasks/infrared_distance_task.h
@@ -27,17 +27,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <ctime>
-#include <wiringPi.h>
-#include <unistd.h>
-#include "../api/basic_psys_rover.h"
-#include "../timing/timing.h"
-#include "../interfaces.h"
-#include <pthread.h>
-#include <mcp3004.h>
 
-#include "../pthread_monitoring/collect_thread_name.h"
-#include "../RaspberryTest.h"
 
 
 
diff --git a/rover/src/tasks/keycommand_task.cpp b/rover/src/tasks/keycommand_task.cpp
index 0f15411..94c2ed6 100644
--- a/rover/src/tasks/keycommand_task.cpp
+++ b/rover/src/tasks/keycommand_task.cpp
@@ -22,6 +22,17 @@
 
 #include "keycommand_task.h"
 
+#include <ctime>
+#include <stdlib.h>
+#include <wiringPi.h>
+#include <unistd.h>
+#include "../timing/timing.h"
+#include "../api/basic_psys_rover.h"
+#include "../interfaces.h"
+#include <pthread.h>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+#include "../RaspberryTest.h"
 
 void *KeyCommandInput_Task(void * arg)
 {
diff --git a/rover/src/tasks/keycommand_task.h b/rover/src/tasks/keycommand_task.h
index bdce923..23e6ea0 100644
--- a/rover/src/tasks/keycommand_task.h
+++ b/rover/src/tasks/keycommand_task.h
@@ -25,17 +25,7 @@
 
 #include <string.h>
 #include <stdio.h>
-#include <ctime>
-#include <stdlib.h>
-#include <wiringPi.h>
-#include <unistd.h>
-#include "../timing/timing.h"
-#include "../api/basic_psys_rover.h"
-#include "../interfaces.h"
-#include <pthread.h>
 
-#include "../pthread_monitoring/collect_thread_name.h"
-#include "../RaspberryTest.h"
 
 
 void *KeyCommandInput_Task(void * arg);
diff --git a/rover/src/tasks/motordriver_task.cpp b/rover/src/tasks/motordriver_task.cpp
index 22c15db..8c2a515 100644
--- a/rover/src/tasks/motordriver_task.cpp
+++ b/rover/src/tasks/motordriver_task.cpp
@@ -23,6 +23,18 @@
 
 #include "motordriver_task.h"
 
+#include <wiringPi.h>
+#include <ctime>
+#include <unistd.h>
+#include "../timing/timing.h"
+#include "../api/basic_psys_rover.h"
+#include "../interfaces.h"
+#include <pthread.h>
+#include "../RaspberryTest.h"
+#include <softPwm.h>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+
 void ExitAutomaticModes(void)
 {
 	if (driving_mode == ACC || driving_mode == PARKING_LEFT || driving_mode == PARKING_RIGHT)
diff --git a/rover/src/tasks/motordriver_task.h b/rover/src/tasks/motordriver_task.h
index 4c973ab..588ef79 100644
--- a/rover/src/tasks/motordriver_task.h
+++ b/rover/src/tasks/motordriver_task.h
@@ -27,17 +27,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <wiringPi.h>
-#include <ctime>
-#include <unistd.h>
-#include "../timing/timing.h"
-#include "../api/basic_psys_rover.h"
-#include "../interfaces.h"
-#include <pthread.h>
-#include "../RaspberryTest.h"
-#include <softPwm.h>
 
-#include "../pthread_monitoring/collect_thread_name.h"
 
 void *MotorDriver_Task(void * arg);
 
diff --git a/rover/src/tasks/parking_task.cpp b/rover/src/tasks/parking_task.cpp
index 48f26b0..8603914 100644
--- a/rover/src/tasks/parking_task.cpp
+++ b/rover/src/tasks/parking_task.cpp
@@ -18,6 +18,20 @@
  */
 
 #include "parking_task.h"
+
+#include <wiringPi.h>
+#include <ctime>
+#include <unistd.h>
+#include "../timing/timing.h"
+#include "../api/basic_psys_rover.h"
+#include "../interfaces.h"
+#include <pthread.h>
+#include "../RaspberryTest.h"
+#include <softPwm.h>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+#include "../tasks/motordriver_task.h"
+
 int StopParking (void)
 {
     stop();
diff --git a/rover/src/tasks/parking_task.h b/rover/src/tasks/parking_task.h
index 6ad5e23..09d74b9 100644
--- a/rover/src/tasks/parking_task.h
+++ b/rover/src/tasks/parking_task.h
@@ -23,18 +23,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <wiringPi.h>
-#include <ctime>
-#include <unistd.h>
-#include "../timing/timing.h"
-#include "../api/basic_psys_rover.h"
-#include "../interfaces.h"
-#include <pthread.h>
-#include "../RaspberryTest.h"
-#include <softPwm.h>
 
-#include "../pthread_monitoring/collect_thread_name.h"
-#include "../tasks/motordriver_task.h"
 
 
 void *Parking_Task(void * arg);
diff --git a/rover/src/tasks/record_sensor_data.cpp b/rover/src/tasks/record_sensor_data.cpp
index 6ab4550..9127ef7 100644
--- a/rover/src/tasks/record_sensor_data.cpp
+++ b/rover/src/tasks/record_sensor_data.cpp
@@ -22,6 +22,21 @@
 
 #include "record_sensor_data.h"
 
+#include <wiringPi.h>
+#include <unistd.h>
+#include <ctime>
+#include "../timing/timing.h"
+#include "../api/basic_psys_rover.h"
+#include "../interfaces.h"
+#include <pthread.h>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+#include "../RaspberryTest.h"
+
+#include <fstream>
+#include <iostream>
+#include <cstdio>
+
 void RecordSensorDataForWebpage(void)
 {
 	ofstream myfile;
diff --git a/rover/src/tasks/record_sensor_data.h b/rover/src/tasks/record_sensor_data.h
index 73c79d0..bd7929c 100644
--- a/rover/src/tasks/record_sensor_data.h
+++ b/rover/src/tasks/record_sensor_data.h
@@ -24,20 +24,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <wiringPi.h>
-#include <unistd.h>
-#include <ctime>
-#include "../timing/timing.h"
-#include "../api/basic_psys_rover.h"
-#include "../interfaces.h"
-#include <pthread.h>
 
-#include "../pthread_monitoring/collect_thread_name.h"
-#include "../RaspberryTest.h"
-
-#include <fstream>
-#include <iostream>
-#include <cstdio>
 
 
 void *RecordSensorData_Task (void * arg);
diff --git a/rover/src/tasks/record_timing_task.cpp b/rover/src/tasks/record_timing_task.cpp
index d4ceef7..26933e9 100644
--- a/rover/src/tasks/record_timing_task.cpp
+++ b/rover/src/tasks/record_timing_task.cpp
@@ -21,6 +21,18 @@
 
 #include "record_timing_task.h"
 
+#include <wiringPi.h>
+#include <unistd.h>
+#include <ctime>
+#include "../timing/timing.h"
+#include "../api/basic_psys_rover.h"
+#include "../interfaces.h"
+#include <pthread.h>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+#include "../RaspberryTest.h"
+
+
 void PrintTimingInfo(timing_interface ifc)
 {
 	if (ifc.execution_time != 0){
diff --git a/rover/src/tasks/record_timing_task.h b/rover/src/tasks/record_timing_task.h
index efd2844..0a46077 100644
--- a/rover/src/tasks/record_timing_task.h
+++ b/rover/src/tasks/record_timing_task.h
@@ -24,16 +24,6 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <wiringPi.h>
-#include <unistd.h>
-#include <ctime>
-#include "../timing/timing.h"
-#include "../api/basic_psys_rover.h"
-#include "../interfaces.h"
-#include <pthread.h>
-
-#include "../pthread_monitoring/collect_thread_name.h"
-#include "../RaspberryTest.h"
 
 
 void *Record_Timing_Task (void * arg);
diff --git a/rover/src/tasks/temperature_task.cpp b/rover/src/tasks/temperature_task.cpp
index ae97699..623df9b 100644
--- a/rover/src/tasks/temperature_task.cpp
+++ b/rover/src/tasks/temperature_task.cpp
@@ -36,7 +36,18 @@
 */
 
 #include "temperature_task.h"
-#include "../hono_interaction/hono_interaction.h"
+
+#include <ctime>
+#include <wiringPi.h>
+#include <wiringPiI2C.h>
+#include <unistd.h>
+#include "../timing/timing.h"
+#include "../api/basic_psys_rover.h"
+#include "../interfaces.h"
+#include <pthread.h>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+#include "../RaspberryTest.h"
 
 static int i2c_th02_fd = 0;
 
@@ -155,13 +166,10 @@
 		//Setting argument in pthread - whenever you R/W access to temperature_shared, you have to do the same.
 		pthread_mutex_lock(&temperature_lock);
 			temperature_shared = getTemperatureFromSensor();
-			sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", 4771,"temperature", temperature_shared);
 		pthread_mutex_unlock(&temperature_lock);
 
 		pthread_mutex_lock(&humidity_lock);
 			humidity_shared = getHumidityFromSensor();
-			sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", 4771,"humidity", humidity_shared);
-
 		pthread_mutex_unlock(&humidity_lock);
 
 		//printf("Temperaturex: %f\n", getTemperatureFromSensor());
diff --git a/rover/src/tasks/temperature_task.h b/rover/src/tasks/temperature_task.h
index 5eeb861..5238065 100644
--- a/rover/src/tasks/temperature_task.h
+++ b/rover/src/tasks/temperature_task.h
@@ -40,17 +40,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <ctime>
-#include <wiringPi.h>
-#include <wiringPiI2C.h>
-#include <unistd.h>
-#include "../timing/timing.h"
-#include "../api/basic_psys_rover.h"
-#include "../interfaces.h"
-#include <pthread.h>
 
-#include "../pthread_monitoring/collect_thread_name.h"
-#include "../RaspberryTest.h"
 
 
 
diff --git a/rover/src/tasks/ultrasonic_sensor_grove_task.cpp b/rover/src/tasks/ultrasonic_sensor_grove_task.cpp
index 21afdfc..718cfc6 100644
--- a/rover/src/tasks/ultrasonic_sensor_grove_task.cpp
+++ b/rover/src/tasks/ultrasonic_sensor_grove_task.cpp
@@ -24,7 +24,14 @@
  */
 
 #include "ultrasonic_sensor_grove_task.h"
-#include "../hono_interaction/hono_interaction.h"
+
+#include <wiringPi.h>
+#include <ctime>
+#include <pthread.h>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+#include "../timing/timing.h"
+#include "../RaspberryTest.h"
 
 void setup_GrooveUltrasonicRanger() {
 	//wiringPiSetup();   //Since this can only be used once in a program, we do it in main and comment this.
@@ -81,7 +88,6 @@
 		pthread_mutex_unlock(&distance_grove_lock);*/
 		pthread_mutex_lock(&distance_sr04_back_lock);
 			distance_sr04_back_shared = getCM_GrooveUltrasonicRanger();
-			sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", 4771,"US_Rear", distance_sr04_back_shared);
 		pthread_mutex_unlock(&distance_sr04_back_lock);
 		//printf("Distance: %dcm\n", getCM_GrooveUltrasonicRanger());
 		//Task content ends here -------------------------------------------------
diff --git a/rover/src/tasks/ultrasonic_sensor_grove_task.h b/rover/src/tasks/ultrasonic_sensor_grove_task.h
index 7838090..f79d806 100644
--- a/rover/src/tasks/ultrasonic_sensor_grove_task.h
+++ b/rover/src/tasks/ultrasonic_sensor_grove_task.h
@@ -31,13 +31,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <wiringPi.h>
-#include <ctime>
-#include <pthread.h>
 
-#include "../pthread_monitoring/collect_thread_name.h"
-#include "../timing/timing.h"
-#include "../RaspberryTest.h"
 
 
 
diff --git a/rover/src/tasks/ultrasonic_sensor_sr04_back_task.cpp b/rover/src/tasks/ultrasonic_sensor_sr04_back_task.cpp
index c35ade4..5777a6f 100644
--- a/rover/src/tasks/ultrasonic_sensor_sr04_back_task.cpp
+++ b/rover/src/tasks/ultrasonic_sensor_sr04_back_task.cpp
@@ -43,7 +43,14 @@
 
 
 #include "ultrasonic_sensor_sr04_back_task.h"
-#include "../hono_interaction/hono_interaction.h"
+
+#include <wiringPi.h>
+#include <ctime>
+#include <pthread.h>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+#include "../timing/timing.h"
+#include "../RaspberryTest.h"
 
 void setup_HCSR04UltrasonicBack() {
     //wiringPiSetup();
@@ -105,7 +112,6 @@
 		pthread_mutex_lock(&distance_sr04_back_lock);
 			distance_sr04_back_shared = getCM_HCSR04UltrasonicBack();
 		pthread_mutex_unlock(&distance_sr04_back_lock);
-		sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", 4771,"US_Rear", distance_sr04_back_shared);
 
 		//printf("Distance: %dcm\n", getCM_GrooveUltrasonicRanger());
 		//Task content ends here -------------------------------------------------
diff --git a/rover/src/tasks/ultrasonic_sensor_sr04_back_task.h b/rover/src/tasks/ultrasonic_sensor_sr04_back_task.h
index 8371f20..13e454b 100644
--- a/rover/src/tasks/ultrasonic_sensor_sr04_back_task.h
+++ b/rover/src/tasks/ultrasonic_sensor_sr04_back_task.h
@@ -48,13 +48,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <wiringPi.h>
-#include <ctime>
-#include <pthread.h>
 
-#include "../pthread_monitoring/collect_thread_name.h"
-#include "../timing/timing.h"
-#include "../RaspberryTest.h"
 
 
 #define TRIG1 1   //BCM-18   ->  WiringPi 1
diff --git a/rover/src/tasks/ultrasonic_sensor_sr04_front_task.cpp b/rover/src/tasks/ultrasonic_sensor_sr04_front_task.cpp
index 4a1247b..9f9c913 100644
--- a/rover/src/tasks/ultrasonic_sensor_sr04_front_task.cpp
+++ b/rover/src/tasks/ultrasonic_sensor_sr04_front_task.cpp
@@ -43,7 +43,14 @@
 
 
 #include "ultrasonic_sensor_sr04_front_task.h"
-#include "../hono_interaction/hono_interaction.h"
+
+#include <wiringPi.h>
+#include <ctime>
+#include <pthread.h>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+#include "../timing/timing.h"
+#include "../RaspberryTest.h"
 
 void setup_HCSR04UltrasonicFront() {
     //wiringPiSetup();
@@ -103,7 +110,6 @@
 		//Task content starts here -----------------------------------------------
 		pthread_mutex_lock(&distance_sr04_front_lock);
 			distance_sr04_front_shared = getCM_HCSR04UltrasonicFront();
-			sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", 4771,"US_Front", distance_sr04_front_shared);
 		pthread_mutex_unlock(&distance_sr04_front_lock);
 		//printf("Distance: %dcm\n", getCM_GrooveUltrasonicRanger());
 		//Task content ends here -------------------------------------------------
diff --git a/rover/src/tasks/ultrasonic_sensor_sr04_front_task.h b/rover/src/tasks/ultrasonic_sensor_sr04_front_task.h
index 6002c49..36a8a77 100644
--- a/rover/src/tasks/ultrasonic_sensor_sr04_front_task.h
+++ b/rover/src/tasks/ultrasonic_sensor_sr04_front_task.h
@@ -48,13 +48,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <wiringPi.h>
-#include <ctime>
-#include <pthread.h>
 
-#include "../pthread_monitoring/collect_thread_name.h"
-#include "../timing/timing.h"
-#include "../RaspberryTest.h"
 
 
 #define TRIG0 7   //BCM-4   ->  WiringPi 7
diff --git a/rover/src/tasks/webserver_motordrive_task.cpp b/rover/src/tasks/webserver_motordrive_task.cpp
index 151ade1..aa377fe 100644
--- a/rover/src/tasks/webserver_motordrive_task.cpp
+++ b/rover/src/tasks/webserver_motordrive_task.cpp
@@ -24,6 +24,20 @@
  */
 
 #include "webserver_motordrive_task.h"
+
+#include <string.h>
+#include <ctime>
+#include <wiringPi.h>
+#include <unistd.h>
+#include "../api/basic_psys_rover.h"
+#include "../interfaces.h"
+#include "../timing/timing.h"
+#include <pthread.h>
+#include "../RaspberryTest.h"
+#include <softPwm.h>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+
 #include <iostream>
 #include <fstream>
 
diff --git a/rover/src/tasks/webserver_motordrive_task.h b/rover/src/tasks/webserver_motordrive_task.h
index 0afea07..ebe1969 100644
--- a/rover/src/tasks/webserver_motordrive_task.h
+++ b/rover/src/tasks/webserver_motordrive_task.h
@@ -28,18 +28,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <string.h>
-#include <ctime>
-#include <wiringPi.h>
-#include <unistd.h>
-#include "../api/basic_psys_rover.h"
-#include "../interfaces.h"
-#include "../timing/timing.h"
-#include <pthread.h>
-#include "../RaspberryTest.h"
-#include <softPwm.h>
 
-#include "../pthread_monitoring/collect_thread_name.h"
 
 
 void *WebServer_MotorDrive_Task(void * arg);