made script loop every 5 minutes

This commit is contained in:
Ben Varick 2023-11-06 17:27:49 -06:00
parent 3c19a0fde9
commit e6c35e7f04
Signed by: ben
SSH Key Fingerprint: SHA256:jWnpFDAcacYM5aPFpYRqlsamlDyKNpSj3jj+k4ojtUo

View File

@ -14,44 +14,53 @@ home_assistant <- InfluxDBClient$new(url = "https://influxdb.dendroalsia.net",
token = token, token = token,
org = org) 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 # ---- set variables
entities <- data.frame(name = c("washing machine", "dryer"), entity_id = c("lamp_a_power", "lamp_b_power")) entities <- data.frame(name = c("washing machine", "dryer"), entity_id = c("lamp_a_power", "lamp_b_power"))
# ---- generate html update_data <- function(){
current_status <- as.list(NULL)
for (entity in entities$entity_id){ 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")')
current_status[[entity]] <- ifelse(values %>% filter(entity_id %in% entity) %>% tail(1) %>% pull(value) > 5, "on", "off") 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) + for(i in 1:8640){
geom_rect(aes(xmin = end_time, update_data()
xmax = time, Sys.sleep(60*5)
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")