public void gatherContextInformation(String triggerMessage) {
		// Decode trigger message and get:
		// (A) user presence (key: user_presence)
		// (B) tags related to specific contextual situations that require specific recommendations
		// (e.g. "humidRoom" -> "open window" (key: room_airquality);
		// "noMovement" -> "do exercise" (key: user_movement))
		contextInformation = new HashMap<String, String>();
		contextInformation = jsonParser.decodeTriggerMessage(triggerMessage);

		// no more recommendations needed
		if (contextInformation.get("user_presence").equals("user_absent")) {
			reactToCurrentContext(contextInformation);
		} 
		// get further context information to get appropriate recommendations: daytime, light conditions (outside), weather, user mood
		else if (contextInformation.get("user_presence").equals("user_present")) {
			// get current daytime (morning, forenoon, lunchtime, afternoon, evening, night)
			LocalTime time;
			if(useRandomTime){
				time = LocalTime.of(random.nextInt(24), random.nextInt(60));
			}
			else{
				time = LocalTime.now();
			}
			contextInformation.put("daytime", new TimeInterpreter().getCurrentDayTime(time));
			
			// get current light conditions (Outdoors)
			contextInformation.put("lightConditionOutdoors", context.getCurrentLightConditions(this, sensorDB, getSunTimesFromJSONFile, time));
			
			// get weather condition
			contextInformation.put("weatherCondition", context.getCurrentWeatherCondition(this, sensorDB, useRandomWeather));
	
			//Update GUI if applicable
			if(useLocalInterface)
			{
				GUI.setTime(time.toString());
				GUI.setWeather(contextInformation.get("weatherCondition"));
			}
			
			// get user mood
			//time since last update 
			long diffInMinutes = Duration.between(user.getLastUpdateMood(), LocalDateTime.now(Clock.systemUTC())).toMinutes();
			//if mood is unknown or "older" than interval-time
			if (user.getMood().equals("") || diffInMinutes > user.getUpdateInterval()) {
				requestUserMood();
			}
			else{
				contextInformation.put("userMood", user.getMood());
				if(useLocalInterface) GUI.setMood(user.getMood());
				reactToCurrentContext(contextInformation);
			}
		}
	}