diff --git a/laundry_status.R b/laundry_status.R index ab53c47..e62143e 100644 --- a/laundry_status.R +++ b/laundry_status.R @@ -14,44 +14,53 @@ home_assistant <- InfluxDBClient$new(url = "https://influxdb.dendroalsia.net", token = token, org = org) - -values <- home_assistant$query('from(bucket: "home_assistant") |> range(start: -7d) |> filter(fn: (r) => r["entity_id"] == "lamp_b_power" or r["entity_id"] == "lamp_a_power") |> filter(fn: (r) => r["_field"] == "value") |> filter(fn: (r) => r["_measurement"] == "W")') -values <- bind_rows(values) -values <- values %>% - rename(value = "_value") -values <- values %>% - mutate(status = ifelse(value > 1, "on", "off"), - end_time = c(values$time + minutes(1))) - # ---- set variables entities <- data.frame(name = c("washing machine", "dryer"), entity_id = c("lamp_a_power", "lamp_b_power")) -# ---- generate html -current_status <- as.list(NULL) -for (entity in entities$entity_id){ - current_status[[entity]] <- ifelse(values %>% filter(entity_id %in% entity) %>% tail(1) %>% pull(value) > 5, "on", "off") +update_data <- function(){ + + values <- home_assistant$query('from(bucket: "home_assistant") |> range(start: -7d) |> filter(fn: (r) => r["entity_id"] == "lamp_b_power" or r["entity_id"] == "lamp_a_power") |> filter(fn: (r) => r["_field"] == "value") |> filter(fn: (r) => r["_measurement"] == "W")') + values <- bind_rows(values) + values <- values %>% + rename(value = "_value") + values <- values %>% + mutate(status = ifelse(value > 1, "on", "off"), + end_time = c(values$time + minutes(1))) + + + # ---- generate html + current_status <- as.list(NULL) + for (entity in entities$entity_id){ + current_status[[entity]] <- ifelse(values %>% filter(entity_id %in% entity) %>% tail(1) %>% pull(value) > 5, "on", "off") + } + + plot_1week <- ggplot(data = values) + + geom_rect(aes(xmin = end_time, + xmax = time, + ymin = ifelse(entity_id == "lamp_a_power", 0, 2) + 0.5, + ymax = ifelse(entity_id == "lamp_a_power", 0, 2) + 1.5, + fill = status)) + + scale_y_continuous() + + scale_x_datetime(date_breaks = "24 hours", date_labels = '%A', date_minor_breaks = "6 hours") + + theme(axis.text.x = element_text(angle = 30, vjust = 0.5)) + + labs(title = "Last week") + + plot_1day <- ggplot(data = values %>% filter(time >= max(values$time) - hours(24))) + + geom_rect(aes(xmin = end_time, + xmax = time, + ymin = ifelse(entity_id == "lamp_a_power", 0, 2) + 0.5, + ymax = ifelse(entity_id == "lamp_a_power", 0, 2) + 1.5, + fill = status)) + + scale_y_continuous() + + scale_x_datetime(date_breaks = "4 hours", date_labels = '%I:%M %p', date_minor_breaks = "6 hours") + + theme(axis.text.x = element_text(angle = 30, vjust = 0.5)) + + labs(title = "Last 24 hours") + + render("laundry_status.Rmd") + } -plot_1week <- ggplot(data = values) + - geom_rect(aes(xmin = end_time, - xmax = time, - ymin = ifelse(entity_id == "lamp_a_power", 0, 2) + 0.5, - ymax = ifelse(entity_id == "lamp_a_power", 0, 2) + 1.5, - fill = status)) + - scale_y_continuous() + - scale_x_datetime(date_breaks = "24 hours", date_labels = '%A', date_minor_breaks = "6 hours") + - theme(axis.text.x = element_text(angle = 30, vjust = 0.5)) + - labs(title = "Last week") - -plot_1day <- ggplot(data = values %>% filter(time >= max(values$time) - hours(24))) + - geom_rect(aes(xmin = end_time, - xmax = time, - ymin = ifelse(entity_id == "lamp_a_power", 0, 2) + 0.5, - ymax = ifelse(entity_id == "lamp_a_power", 0, 2) + 1.5, - fill = status)) + - scale_y_continuous() + - scale_x_datetime(date_breaks = "4 hours", date_labels = '%I:%M %p', date_minor_breaks = "6 hours") + - theme(axis.text.x = element_text(angle = 30, vjust = 0.5)) + - labs(title = "Last 24 hours") - -render("laundry_status.Rmd") \ No newline at end of file +for(i in 1:8640){ + update_data() + Sys.sleep(60*5) +} \ No newline at end of file