server.R 8.73 KB
Newer Older
Stephanie's avatar
Stephanie committed
1 2

library(shiny)
3
library(jsonlite)
4
library(DT)
5
library(webshot)
Stephanie's avatar
Stephanie committed
6

7
server <- function(input, output, session) {
Stephanie's avatar
Stephanie committed
8
  set.seed(122)
9
  
10
  #CoConUT Data import and showing into data site 
11 12
  output$nut <- renderDataTable({
    inFile <- input$nut
13 14
    if (is.null(inFile))
      return(NULL)
15
    
16
    #loading CoConUT data
17
    json_data_coco <- fromJSON(paste(inFile$datapath, sep = ""), flatten = TRUE)
18
    coconut.df <<- json_data_coco[["data"]]
19 20
    
    lastCoConUT <<- inFile$name
21 22
    print("coconut:")
    print(coconut.df)
23 24
    
    
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
    if(is.null(coconut.df$timestamp)){}
    else{unixTime<<-coconut.df$timestamp}
    
    if(is.null(coconut.df$gps.latitude)){}
    else{latitude<<-coconut.df$gps.latitude}
    
    if(is.null(coconut.df$gps.longitude)){}
    else{longitude<<-coconut.df$gps.longitude}
    
    if(is.null(coconut.df$gps.speed)){}
    else{speed<<-coconut.df$gps.speed}
    
    if(is.null(coconut.df$gps.accuracy)){}
    else{gpsAcc<<-coconut.df$gps.accuracy}
    
    if(is.null(coconut.df$light.lux)){}
    else{lux<<-coconut.df$light.lux}
    
    if(is.null(coconut.df$acc.coordinates)){}
    else{accCoord<<-coconut.df$acc.coordinates}
    
    if(is.null(coconut.df$acc.accuracy)){}
    else{accAcc<<-coconut.df$acc.accuracy}
    
    if(is.null(coconut.df$bluetooth.numOfBTDevices)){}
    else{bluetooth<<-coconut.df$bluetooth.numOfBTDevices}
    
    if(is.null(coconut.df$ble.bpm)){}
    else{bleBpm<<-coconut.df$ble.bpm}
    
    if(is.null(coconut.df$ble.bpmlist)){}
    else{bleBpmList<<-coconut.df$ble.bpmlist}
    
    if(is.null(coconut.df$ble.hrv)){}
    else{bleHrv<<-coconut.df$ble.hrv}
    
    if(is.null(coconut.df$ble.hrvlist)){}
    else{bleHrvList<<-coconut.df$ble.hrvlist}
    
    if(is.null(coconut.df$activity.name)){}
    else{activityName<<-coconut.df$activity.name}
    
    if(is.null(coconut.df$activity.confidence)){}
    else{activityConf<<-coconut.df$activity.confidence}
    
    if(is.null(coconut.df$screen.status)){}
    else{screenstatus<<-coconut.df$screen.status}
    
    if(is.null(coconut.df$interaction.touch)){}
    else{touch<<-coconut.df$interaction.touch}

    
77
    # setting the table style
78 79 80 81 82 83 84 85 86 87 88 89 90
    datatable(
              cbind(coconut.df), 
              options = list(
                searching = TRUE,
                autoWidth = TRUE,
                rownames = FALSE,
                scroller = TRUE,
                scrollX = TRUE,
                scrollY = "500px",
                fixedHeader = TRUE,
                class = 'cell-border stripe'
              )
    )
91 92
    
    
93
  })
94 95
  
  output$lastLoadedNut<- renderText({
96 97 98
    if (is.null(input$nut))
      return(NULL)
    else lastCoConUT
99 100
    
  })
101

102
  output$questTimes <- renderDataTable({
103 104 105 106
    inFile <- input$quest
    if (is.null(inFile))
      return(NULL)
    
107 108
    
    
109 110
    #loading CoCoQuest data
    json_data_quest <<- fromJSON(paste(inFile$datapath, sep = ""), flatten = TRUE)
111
    
112
    lastCoCoQuest <<- inFile$name
113
    
114 115
    json_data_quest$unix_starttime <- as.numeric(json_data_quest$startTime)/1000
    json_data_quest$unix_endtime <- as.numeric(json_data_quest$endTime)/1000
116 117 118
    totalStarttime <<- anytime(json_data_quest$unix_starttime)
    totalEndtime <<- anytime(json_data_quest$unix_endtime)
    
119
    
120
    #unix  parsed
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
    dat <- do.call(rbind, json_data_quest$tasks$data)
  
    endtimes <<- c(anytime(dat$endtime/1000))
    tasks <- rep(1:length(json_data_quest$tasks$data), sapply(json_data_quest$tasks$data, nrow))
    #count<<-0
   # y <<-1
   # x<<-1
    #numOfTasks <<- if(tasks[x]!=y)
    #                {
    #                  count<<-count+1
    #                  y<<-y+1
    #                  x<<-x+1
    #}
    #else{x<<-x+1}
   
    together <<- c(tasks, endtimes)
    
    #all <<- matrix(c(tasks,endtimes),byrow=FALSE,nrow=length(tasks))
    all <- rbind(together)
140
    
141
  
142
    #setting the table style
143
    datatable(
144
      cbind(tasks, endtimes),
145
      options = list(
146 147
        searching = FALSE,
        rownames = TRUE,
148
        class = 'cell-border stripe'
149
     )
150 151 152
    )
  })
  
153 154 155 156 157
  #CoCOQuest Data import and showing into data site 
  output$lastLoadedQuest <- renderText({
    if (is.null(input$quest))
      return(NULL)
    else lastCoCoQuest
158
    
159 160 161 162 163 164 165 166
  })
  
  output$totalStarttime <- renderText({
    if (is.null(input$quest))
      return(NULL)
    else as.POSIXct(totalStarttime)
    print(totalStarttime)
  })
167
  
168
  output$text <- renderText({ input$title })
169
  
170
  output$check_histogram <- renderPrint({input$checkbox_hist })
171
  
172
  #Not sure if so smart but it should work that way --> mit if schaun welches ausgewählt worden ist und die daten dann für dashboard ausgeben
173
  output$input_hist_x <- renderUI({
174 175 176
    if (is.null(input$nut))
      return(NULL)
    selectInput("in1", "x-axis:", cbind("unixTime", "longitude", "latitude", "speed", "gps.acc","lux", "light.acc","acc.coordinates", "acc.acc","bluetooth","ble.bpm","ble.bpmlist","ble.hrv","ble.hrvlist","activity.name", "acctivity.confidence","screen.status" ,"touch"),multiple=TRUE, selectize=TRUE) 
177 178 179
  })
  
  output$input_hist_y <- renderUI({
180 181
    if (is.null(input$nut))
      return(NULL)
182
    selectInput("in2", "y-axis:", cbind("unixTime", "longitude", "latitude", "speed", "gps.acc","lux", "light.acc","acc.coordinates", "acc.acc","bluetooth","ble.bpm","ble.bpmlist","ble.hrv","ble.hrvlist","activity.name", "acctivity.confidence","screen.status" ,"touch"),multiple=TRUE, selectize=TRUE) 
183 184
  })
  
185 186
  output$check_time <- renderUI({checkboxInput("timeline", "Timeline", FALSE) })
  
187
  output$input_time_x <- renderUI({
188 189
    if (is.null(input$nut))
      return(NULL)
190
    selectInput("in3", "x-axis:", cbind("unixTime", "longitude", "latitude", "speed", "gps.acc","lux", "light.acc","acc.coordinates", "acc.acc","bluetooth","ble.bpm","ble.bpmlist","ble.hrv","ble.hrvlist","activity.name", "acctivity.confidence","screen.status" ,"touch"),multiple=TRUE, selectize=TRUE) 
191
  })
192
  
193
  output$input_time_y <- renderUI({
194 195
    if (is.null(input$nut))
      return(NULL)
196
    selectInput("in4", "y-axis:", cbind("unixTime", "longitude", "latitude", "speed", "gps.acc","lux", "light.acc","acc.coordinates", "acc.acc","bluetooth","ble.bpm","ble.bpmlist","ble.hrv","ble.hrvlist","activity.name", "acctivity.confidence","screen.status" ,"touch"),multiple=TRUE, selectize=TRUE) 
197 198
  })
  
199 200
  output$check_map <- renderUI({checkboxInput("map", "Map", FALSE) })
  
201
  output$input_map_x <- renderUI({
202 203
    if (is.null(input$nut))
      return(NULL)
204
    selectInput("in5", "x-axis:", cbind("unixTime", "longitude", "latitude", "speed", "gps.acc","lux", "light.acc","acc.coordinates", "acc.acc","bluetooth","ble.bpm","ble.bpmlist","ble.hrv","ble.hrvlist","activity.name", "acctivity.confidence","screen.status" ,"touch"),multiple=TRUE, selectize=TRUE) 
205 206 207
  })
  
  output$input_map_y <- renderUI({
208 209
    if (is.null(input$nut))
      return(NULL)
210
    selectInput("in6", "y-axis:", cbind("unixTime", "longitude", "latitude", "speed", "gps.acc","lux", "light.acc","acc.coordinates", "acc.acc","bluetooth","ble.bpm","ble.bpmlist","ble.hrv","ble.hrvlist","activity.name", "acctivity.confidence","screen.status" ,"touch"),multiple=TRUE, selectize=TRUE) 
211 212
  })
  
213 214
  output$check_line <- renderUI({checkboxInput("linegraph", "Linegraph", FALSE) })
  
215
  output$input_line_x <- renderUI({
216 217
    if (is.null(input$nut))
      return(NULL)
218
    selectInput("in7", "x-axis:", cbind("unixTime", "longitude", "latitude", "speed", "gps.acc","lux", "light.acc","acc.coordinates", "acc.acc","bluetooth","ble.bpm","ble.bpmlist","ble.hrv","ble.hrvlist","activity.name", "acctivity.confidence","screen.status" ,"touch"),multiple=TRUE, selectize=TRUE) 
219 220 221
  })
  
  output$input_line_y <- renderUI({
222 223
    if (is.null(input$nut))
      return(NULL)
224
    selectInput("in8", "y-axis:", cbind("unixTime", "longitude", "latitude", "speed", "gps.acc","lux", "light.acc","acc.coordinates", "acc.acc","bluetooth","ble.bpm","ble.bpmlist","ble.hrv","ble.hrvlist","activity.name", "acctivity.confidence","screen.status" ,"touch"),multiple=TRUE, selectize=TRUE) 
225
  })
226
  
227
  
228 229 230 231 232 233 234 235 236
  
  #download dashboard button
  #TODO: MAKE IT WORK!
  observeEvent(input$screenshot,{
    cdat <<- session$clientData
    #print(cdat)
    url <- paste0(cdat$url_protocol,"//",cdat$url_hostname,":", cdat$url_port, cdat$url_pathname,cdat$url_search)
    print(url)
    webshot::webshot(url, "webshot.png")
237 238 239 240 241 242 243 244 245 246 247 248
    
  })
  
  #output$downButton <- downloadHandler(
   # filename="dashboard.png",
    #content=function(file){
     # observeEvent(input$downButton, {
      #appshot("cocoVisR/dashboard", file = "dashboard.png", port = getOption("shiny.port"), envvars = NULL)
 
      #}) 
    #}
  #)
249
 
250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266
  #histdata <- rnorm(500)
  
  #output$plot1 <- renderPlot({
  #data <- histdata[seq_len(input$slider)]
  #hist(data)
  #})
  
  ##MAP 
  
  #m <- leaflet()
  #m <- addTiles(m)
  #x=1
  #for(x in 1:2019){
  #m <- addMarkers(m,lng=longitude[x], lat=latitude[x]) #addPolylines does not work
  #x=x+1}
  #m
  #}
Stephanie's avatar
Stephanie committed
267
}