Q:

How can I manipulate ggplot2's fill and color features to generate an automatic legend to a layer?

I have seen other similar questions and their answers; I haven't been able to deduce an answer from them. Hence, this question.
The data is organized in a way that I thought it'd allow me to have legends automatically added, i.e., tidy data. A reproducible example is shown below. 
#Create Fake Data
set.seed(2019)
myDf = data.frame(time = rep(seq(1,5),2), 
                  smax = rnorm(n = 10, mean = 10,sd = 2),
                  mean = rnorm(n = 10, mean = 5, sd = .8),
                  smin  = rnorm(n = 10, mean = 1, sd = .001),
                  obser= rep(rnorm(n = 5, mean = 5, sd = 2),2),
                  type = rep(x = c(1,2),each = 5))
myDf[,6] = as.factor(myDf[,6])
.........................................................................

As you can see, it's a simple data frame with 6 columns. You can think of this data frame as the result of some data wrangling. For example, time is the same for the two types (variable type). The obser variable is also the same for both types (1 and 2).
My goal is to plot a plot graph where I'll use sminand smaxas the limits for my geom_ribbon. Furthermore, I want to plot the variable meanas a line. For these two layers, I'll have both filand coloras a way to distinguish these objects by their type. 
The problem arises with my geom_line for the obser variable. The values for this variable are the same for both types, therefore, there's no reason to apply colorto them. I'd like them printed in black (and also dashed, but not a necessity). 
Here's the code I wrote to achieve this goal: 
# Plot data using ggplot2
myDf %>% 
  ggplot(aes( x = time, fill = factor(type))) +
  geom_ribbon(aes(ymin = smin, ymax = smax), alpha = .25 ) + 
  geom_line(aes(y = mean, color = factor(type)), size = 1.2) +
  geom_line(aes(y = obser), linetype = 2, size = .8) + 
  labs(x = "Time", y = "") +   
  theme_bw() +
  scale_x_continuous(breaks = seq(from = 0, to = 5, by = .25)) + 
  scale_color_manual(values = c("#542788","#b35806","#000000"),
                     labels = c("Model A","Model B","Observed Value")) + 
  scale_fill_manual(values = c("#542788","#b35806"),
                    labels = c("Model A","Model B"))+    
  theme(legend.position = "bottom" , legend.title = element_blank()) 

With this piece of code, I managed to: 

Plot both regions with geom_ribbonsatisfactorily. 
Have legends for both the regions and the lines from the meanvariable.
Plot the observariable as a black, dashed line.

One could argue the code could be improved, and I will accept pointers gladly. For instance, I needed to change the name of my factors in my legend, and I think I should have used mutatebut I couldn't accomplish what I tried to do. However, what I need now is to add a legend to the obser line in which it's written "Observed Values". 
How could I do that, preferably in an automatic way? 

A:

You can force additional color legend values by specifying a fixed label, here I used "observ". As I don't want to split the fill and the color legend, I specified this also for the fill aesthetic, but used "transparent" for the color and not show a filling background: 
ggplot(myDf, aes( x = time)) +
  geom_ribbon(aes(ymin = smin, ymax = smax, fill = factor(type)), alpha = .25 ) + 
  geom_line(aes(y = mean, color = factor(type)), size = 1.2) +
  geom_line(aes(y = obser, color = "observ", fill = "observ"), linetype = 2, size = .8) + 
  labs(x = "Time", y = "") +   
  theme_bw() +
  scale_x_continuous(breaks = seq(from = 0, to = 5, by = .25)) + 
  scale_color_manual(values = c("1" = "#542788", "2" = "#b35806","observ" = "#000000"),
                     labels = c("Model A","Model B","Observed Value")) + 
  scale_fill_manual(values = c("1" = "#542788", "2" = "#b35806","observ" = "transparent"),
                    labels = c("Model A","Model B","Observed Value")) +
  theme(legend.position = "bottom" , legend.title = element_blank()) 

It gives Warning:Ignoring unknown aesthetics: fill, because geom_line is not using the fill aesthetics.
Using a fixed value ("observ") instead of a column (like type) inside of the aesthetics, creates a new class of color for this one value. Without specifying a manuall legend, this would result in a different color than black, which often leads to confusing moments, like this one: 
ggplot(data = data.frame(x = c(0, 1), y = c(0, 1))) +
  geom_line(aes(x, y, color = "green")) +
  geom_hline(aes(color = "black", yintercept = 0.5))

With the named vector inside the scale_color_manual and scale_fill_manual the colors are exactly mapped to the specific names. This is helpful, when you don't know in which order they will appear. 

