eprilog/eprilog.r

190 lines
8.1 KiB
R
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#################
# Author: PMF #
#################
require(shiny)
require(DT)
# preperation:
# Get the status if r shiny is running in docker or not
readRenviron("./.status-docker")
statusDocker <- Sys.getenv("statusDockerENV")
# loading data from csv files
brews <- (read.csv(file = "./data/brews.csv", header = TRUE, sep = ",", row.names = 1))
machines <- (read.csv(file = "./data/machines.csv", header = TRUE, sep = ",", row.names = 1))
grinders <- (read.csv(file = "./data/grinders.csv", header = TRUE, sep = ",", row.names = 1))
coffees <- (read.csv(file = "./data/coffees.csv", header = TRUE, sep = ",", row.names = 1))
# get last used coffee
lastUsedParameters <- tail(brews, n=1)
ui <- navbarPage("EpriLog",
tabPanel("Brews",
sidebarLayout(
mainPanel(
h1('Brew History'),
DT::dataTableOutput('history')
),
sidebarPanel(
h1('New Entry'),
dateInput("date", "Date:"), #maybe better to automatically generate with time
selectInput("alias", "Whats the nick name of the coffee?", choices = coffees$alias, multiple = FALSE, selected = lastUsedParameters$Alias),
#selectInput("coffeeName", "Whats the name of the coffee?", coffees$coffeeName, multiple = FALSE),
# Taste Rating (sour = none, 10 = perfect, 20 = bitter)
sliderInput("taste", "Taste (0=Sour, 10=perfect, 20=bitter):", value = 10, min = 0, max = 20),
# Flow rate (0 = none, 10 = perfect, 20 = water)
sliderInput("flowResult", "Flow rate (10 is Perfect):", value = lastUsedParameters$FlowResult, min = 0, max = 20),
# Grind Time
sliderInput("grindTime", "Ginding Time", value = lastUsedParameters$GrindTime, min = 0, max = 30, step = 0.2),
# Grind Size (my Grinder can go up to 70 but thats no longer Espresso..)
sliderInput("grindSize", "Ginding Size", value = lastUsedParameters$GrindSize, min = 0, max = 30),
# WDT Tool
checkboxInput("wdt", "WDT Tool used?", value = TRUE),
# Brew Temp
numericInput("brewTemp", "Brew Temperature:", value = 94, min = 0, max = 110),
# Brew preinfusion time
numericInput("brewPreinfusion", "Brew Preinfusion Time", value =2, min = 0, max = 60),
# Brew wait Time after Preinfusion
numericInput("brewPreinfusionWait", "Brew Wait after Preinfusion Time", value = 5, min = 0, max = 60),
# Brew Time
numericInput("brewTime", "Brew Time after Preinfusion Time", value = 21, min = 0, max = 100),
# Grinder Device
selectInput("grinderDevice", "Which Grinder was used?", grinders$name, multiple = FALSE),
# Espresso Device
selectInput("machineDevice", "Which Espresso machine was used?", machines$name, multiple = FALSE),
# Siebeinsatz
numericInput("portaInsert", "Siever insert size", value = 12, min = 0, max = 100),
# Notes
textInput("notes", "Notes:", value = "I´m satisfied with my coffee."),
# submit
actionButton("createEntry", "Submit new entry!", icon("save")),
)
)
),
tabPanel("Configuration",
sidebarLayout(
mainPanel(
h1('Already available Coffees'),
DT::dataTableOutput('coffees')
),
sidebarPanel(
h2('Add New Coffees'),
textInput("brandName", "Brand Name", value = ""),
textInput("coffeeNameNew", "Coffee Name", value = ""),
textInput("aliasNew", "Nick Name", value = ""),
dateInput("expDate", "Expiration Date"),
numericInput("arabicaPercentage", "Arabica Percentage", value = "50"),
numericInput("robustaPercentage", "Robusta Percentage", value = "50"),
numericInput("sourPercentage", "Sourness Percentage", value = "50"),
numericInput("strongnessPercentage", "Strongness Percentage", value = "50"),
numericInput("roastDarknessPercentage", "Roast Darkness Percentage", value = 50),
textInput("originCountry", "Origin County of the Coffee", value = "Coffee World"),
actionButton("addCoffee", "Save new entry!", icon("save")),
)
)
))
server <- function(input, output, session){
# loading data from csv files
brews <- (read.csv(file = "./data/brews.csv", header = TRUE, sep = ",", row.names = 1))
machines <- (read.csv(file = "./data/machines.csv", header = TRUE, sep = ",", row.names = 1))
grinders <- (read.csv(file = "./data/grinders.csv", header = TRUE, sep = ",", row.names = 1))
coffees <- (read.csv(file = "./data/coffees.csv", header = TRUE, sep = ",", row.names = 1))
# get last used coffee
lastUsedParameters <- tail(brews, n=1)
# Render Brew History Table
output$history = DT::renderDataTable(
brews, server = TRUE,
options = list(order = list(3, "desc"),
list(scrollX = TRUE),
columnDefs = list(list(visible = FALSE, targets = c(1,2,3,5,10,11,12,13,14,15,16)))
))
# Creating new brew record
#
observeEvent(input$createEntry, {
# get currentTime
currentTime <- Sys.time()
# count up for new brew id
newID <- (runif(1, 1, 10000000000))
coffeeName <- "SEE_COFFEES_CSV"
# add new line entry to history
brews[nrow(brews) + 1, 1] <- newID
brews[nrow(brews), 2] <- input$date
brews[nrow(brews), 3] <- currentTime
brews[nrow(brews), 4] <- input$alias
brews[nrow(brews), 5] <- coffeeName
brews[nrow(brews), 6] <- input$grindTime
brews[nrow(brews), 7] <- input$grindSize
brews[nrow(brews), 8] <- input$flowResult
brews[nrow(brews), 9] <- input$taste
brews[nrow(brews), 10] <- input$wdt
brews[nrow(brews), 11] <- input$brewTemp
brews[nrow(brews), 12] <- input$brewPreinfusion
brews[nrow(brews), 13] <- input$brewPreinfusionWait
brews[nrow(brews), 14] <- input$brewTime
brews[nrow(brews), 15] <- input$grinderDevice
brews[nrow(brews), 16] <- input$machineDevice
brews[nrow(brews), 17] <- input$portaInsert
brews[nrow(brews), 18] <- input$notes
# save changes to .csv file
write.csv(brews, file = "./data/brews.csv")
showNotification("New Record added.")
session$reload()
})
# Render Coffees Table for Configuration Page
#
output$coffees = DT::renderDataTable(
coffees, server = TRUE,
options = list(scrollX = TRUE)
#colnames = c("ID", "Brand Name", "Coffee Name", )
#options = list(order = list(3, "desc")
#columnDefs = list(list(visible = FALSE, targets = c(1,2,10,11,12,13,14,15,16)))
)
# Add new Coffee entry
#
observeEvent(input$addCoffee, {
# get currentTime
creationDate <- Sys.time()
# count up for new brew id
newID <- (runif(1, 1, 10000000000))
# inserting new row
coffees[nrow(coffees) + 1, 1] <- newID
coffees[nrow(coffees), 2] <- input$brandName
coffees[nrow(coffees), 3] <- input$coffeeNameNew
coffees[nrow(coffees), 4] <- input$aliasNew
coffees[nrow(coffees), 5] <- input$expDate
coffees[nrow(coffees), 6] <- input$arabicaPercentage
coffees[nrow(coffees), 7] <- input$robustaPercentage
coffees[nrow(coffees), 8] <- input$sourPercentage
coffees[nrow(coffees), 9] <- input$strongnessPercentage
coffees[nrow(coffees), 10] <- input$roastDarknessPercentage
coffees[nrow(coffees), 11] <- input$originCountry
coffees[nrow(coffees), 12] <- creationDate
# save changes to .csv file
write.csv(coffees, file = "./data/coffees.csv")
showNotification("New Coffee added.")
session$reload()
})
}
if (statusDocker == "false") {
runApp(shinyApp(ui = ui, server = server, options = list(launch.browser = TRUE)))
} else {
shinyApp(ui = ui, server = server)
}