made laundry_status.R executable

This commit is contained in:
Ben Varick 2023-11-09 09:58:53 -06:00
parent 8c51632626
commit 64a1dbcb3e
Signed by: ben
SSH Key Fingerprint: SHA256:jWnpFDAcacYM5aPFpYRqlsamlDyKNpSj3jj+k4ojtUo
2 changed files with 426 additions and 426 deletions

852
.Rhistory
View File

@ -1,342 +1,429 @@
theme(axis.text.x = element_text(angle = 30, vjust = 0.5)) + View(values %>%
labs(title = "Last week") filter(entity_id %in% sensors) %>%
View(values) filter(time > time_start,
ggplot(data = values) + time < time_end))
geom_tile(aes(x = time, values %>%
y = entity_id, filter(entity_id %in% sensors) %>%
fill = status)) filter(time > time_start,
ggplot(data = values) + time < time_end) %>%
geom_tile(aes(x = time, group_by(time_rounded, entity_id) %>%
y = entity_id, summarise(value = mean(value)) %>%
width = 1, pivot_wider(id_cols = time_rounded, names_from = entity_id, values_from = value) %>%
height = 1 ggplot() +
fill = status)) + geom_point(aes(x = glencoe_air_monitor_temperature,
ggplot(data = values) + y = living_room_temperature,
geom_tile(aes(x = time, color = entity_id)) +
y = entity_id, # calcs voltage loss per hour
width = 1, lm_calc$coefficients[2] * 60 * 60
height = 1, values %>%
fill = status)) + filter(entity_id %in% sensors) %>%
scale_y_discrete(breaks = entities$entity_id, labels = entities$name) + filter(time > time_start,
scale_x_datetime(date_breaks = "24 hours", date_labels = '%A', date_minor_breaks = "6 hours") + time < time_end) %>%
theme(axis.text.x = element_text(angle = 30, vjust = 0.5)) + group_by(time_rounded, entity_id) %>%
labs(title = "The past week") summarise(value = mean(value)) %>%
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")', pivot_wider(id_cols = time_rounded, names_from = entity_id, values_from = value)
POSIXctCol = NULL) values %>%
filter(entity_id %in% sensors) %>%
filter(time > time_start,
time < time_end) %>%
group_by(time_rounded, entity_id) %>%
summarise(value = mean(value)) %>%
pivot_wider(id_cols = time_rounded, names_from = entity_id, values_from = value) %>%
ggplot() +
geom_point(aes(x = glencoe_air_monitor_temperature,
y = living_room_temperature)) +
# calcs voltage loss per hour
lm_calc$coefficients[2] * 60 * 60
values %>%
filter(entity_id %in% sensors) %>%
filter(time > time_start,
time < time_end) %>%
group_by(time_rounded, entity_id) %>%
summarise(value = mean(value)) %>%
pivot_wider(id_cols = time_rounded, names_from = entity_id, values_from = value) %>%
ggplot() +
geom_point(aes(x = glencoe_air_monitor_temperature,
y = living_room_temperature))
ggplot() +
geom_point(aes(x = glencoe_adjusted,
y = living_room_temperature))
values %>%
filter(entity_id %in% sensors) %>%
filter(time > time_start,
time < time_end) %>%
group_by(time_rounded, entity_id) %>%
summarise(value = mean(value)) %>%
pivot_wider(id_cols = time_rounded, names_from = entity_id, values_from = value) %>%
mutate(glencoe_adjusted = glencoe_air_monitor_temperature + 2.6) %>%
ggplot() +
geom_point(aes(x = glencoe_adjusted,
y = living_room_temperature))
values %>%
filter(entity_id %in% sensors) %>%
filter(time > time_start,
time < time_end) %>%
group_by(time_rounded, entity_id) %>%
summarise(value = (mean(value)-32)/1.8) %>%
pivot_wider(id_cols = time_rounded, names_from = entity_id, values_from = value) %>%
mutate(glencoe_adjusted = glencoe_air_monitor_temperature + 2.6) %>%
ggplot() +
geom_point(aes(x = glencoe_adjusted,
y = living_room_temperature))
values %>%
filter(entity_id %in% sensors) %>%
filter(time > time_start,
time < time_end) %>%
group_by(time_rounded, entity_id) %>%
summarise(value = (mean(value)-32)/1.8) %>%
pivot_wider(id_cols = time_rounded, names_from = entity_id, values_from = value) %>%
mutate(glencoe_adjusted = glencoe_air_monitor_temperature + 2.6) %>%
ggplot() +
geom_point(aes(x = glencoe_adjusted,
y = living_room_temperature)) +
geom_smooth(aes(x = glencoe_adjusted,
y = living_room_temperature),
method = "lm")
values %>%
filter(entity_id %in% sensors) %>%
filter(time > time_start,
time < time_end) %>%
group_by(time_rounded, entity_id) %>%
summarise(value = (mean(value)-32)/1.8) %>%
pivot_wider(id_cols = time_rounded, names_from = entity_id, values_from = value) %>%
mutate(glencoe_adjusted = glencoe_air_monitor_temperature) %>%
ggplot() +
geom_point(aes(x = glencoe_adjusted,
y = living_room_temperature)) +
geom_smooth(aes(x = glencoe_adjusted,
y = living_room_temperature),
method = "lm")
+ 2.6
values %>%
filter(entity_id %in% sensors) %>%
filter(time > time_start,
time < time_end) %>%
group_by(time_rounded, entity_id) %>%
summarise(value = (mean(value)-32)/1.8) %>%
pivot_wider(id_cols = time_rounded, names_from = entity_id, values_from = value) %>%
mutate(glencoe_adjusted = glencoe_air_monitor_temperature + 2.6) %>%
ggplot() +
geom_point(aes(x = glencoe_adjusted,
y = living_room_temperature)) +
geom_smooth(aes(x = glencoe_adjusted,
y = living_room_temperature),
method = "lm")
sensors <- c("living_room_humidity", "air_monitor_humidity")
values %>%
filter(entity_id %in% sensors) %>%
filter(time > time_start,
time < time_end) %>%
group_by(time_rounded, entity_id) %>%
summarise(value = mean(value)) %>%
pivot_wider(id_cols = time_rounded, names_from = entity_id, values_from = value) %>%
mutate(glencoe_adjusted = glencoe_air_monitor_humidity -13) %>%
ggplot() +
geom_point(aes(x = glencoe_adjusted,
y = living_room_humidity)) +
geom_smooth(aes(x = glencoe_adjusted,
y = living_room_humidity),
method = "lm")
sensors <- c("living_room_humidity", "air_monitor_humidity")
sensors <- c("living_room_humidity", "glencoe_air_monitor_humidity")
values %>%
filter(entity_id %in% sensors) %>%
filter(time > time_start,
time < time_end) %>%
group_by(time_rounded, entity_id) %>%
summarise(value = mean(value)) %>%
pivot_wider(id_cols = time_rounded, names_from = entity_id, values_from = value) %>%
mutate(glencoe_adjusted = glencoe_air_monitor_humidity -13) %>%
ggplot() +
geom_point(aes(x = glencoe_adjusted,
y = living_room_humidity)) +
geom_smooth(aes(x = glencoe_adjusted,
y = living_room_humidity),
method = "lm")
values %>%
filter(entity_id %in% sensors) %>%
ggplot() +
geom_point(aes(x = time,
y = value,
color = entity_id))
time_start <- ymd_hms("2023_07_14-13:00:00")
time_end <- ymd_hms("2023_07_14-16:00:00")
values %>%
filter(entity_id %in% sensors) %>%
filter(time > time_start,
time < time_end) %>%
group_by(time_rounded, entity_id) %>%
summarise(value = (mean(value)-32)/1.8) %>%
pivot_wider(id_cols = time_rounded, names_from = entity_id, values_from = value) %>%
mutate(glencoe_adjusted = glencoe_air_monitor_temperature) %>%
ggplot() +
geom_point(aes(x = glencoe_adjusted,
y = living_room_temperature)) +
geom_smooth(aes(x = glencoe_adjusted,
y = living_room_temperature),
method = "lm")
time_start <- ymd_hms("2023_07_14-12:00:00")
time_end <- ymd_hms("2023_07_14-16:00:00")
lm_calc <- lm(value ~ time, data = values %>%
filter(entity_id %in% sensors) %>%
filter(time > time_start,
time < time_end))
values %>%
filter(entity_id %in% sensors) %>%
filter(time > time_start,
time < time_end) %>%
group_by(time_rounded, entity_id) %>%
summarise(value = (mean(value)-32)/1.8) %>%
pivot_wider(id_cols = time_rounded, names_from = entity_id, values_from = value) %>%
mutate(glencoe_adjusted = glencoe_air_monitor_temperature) %>%
ggplot() +
geom_point(aes(x = glencoe_adjusted,
y = living_room_temperature)) +
geom_smooth(aes(x = glencoe_adjusted,
y = living_room_temperature),
method = "lm")
values %>%
filter(entity_id %in% sensors) %>%
filter(time > time_start,
time < time_end) %>%
group_by(time_rounded, entity_id) %>%
summarise(value = (mean(value)-32)/1.8) %>%
pivot_wider(id_cols = time_rounded, names_from = entity_id, values_from = value) %>%
mutate(glencoe_adjusted = air_monitor_temperature) %>%
ggplot() +
geom_point(aes(x = glencoe_adjusted,
y = living_room_temperature)) +
geom_smooth(aes(x = glencoe_adjusted,
y = living_room_temperature),
method = "lm")
values %>%
filter(entity_id %in% sensors) %>%
filter(time > time_start,
time < time_end) %>%
group_by(time_rounded, entity_id) %>%
summarise(value = (mean(value)-32)/1.8) %>%
pivot_wider(id_cols = time_rounded, names_from = entity_id, values_from = value)
sensors <- c("living_room_temperature", "air_monitor_temperature", "glencoe_air_monitor_temperature")
values['time_rounded'] <- round_date(ymd_hms(values$`_time`), unit = "minute")
values %>%
filter(entity_id %in% sensors) %>%
ggplot() +
geom_point(aes(x = time,
y = value,
color = entity_id))
time_start <- ymd_hms("2023_07_14-12:00:00")
time_end <- ymd_hms("2023_07_14-16:00:00")
lm_calc <- lm(value ~ time, data = values %>%
filter(entity_id %in% sensors) %>%
filter(time > time_start,
time < time_end))
values %>%
filter(entity_id %in% sensors) %>%
filter(time > time_start,
time < time_end) %>%
group_by(time_rounded, entity_id) %>%
summarise(value = (mean(value)-32)/1.8) %>%
pivot_wider(id_cols = time_rounded, names_from = entity_id, values_from = value) %>%
mutate(glencoe_adjusted = air_monitor_temperature) %>%
ggplot() +
geom_point(aes(x = glencoe_adjusted,
y = living_room_temperature)) +
geom_smooth(aes(x = glencoe_adjusted,
y = living_room_temperature),
method = "lm")
time_start <- ymd_hms("2023_07_14-13:00:00")
time_end <- ymd_hms("2023_07_14-16:00:00")
lm_calc <- lm(value ~ time, data = values %>%
filter(entity_id %in% sensors) %>%
filter(time > time_start,
time < time_end))
values %>%
filter(entity_id %in% sensors) %>%
filter(time > time_start,
time < time_end) %>%
group_by(time_rounded, entity_id) %>%
summarise(value = (mean(value)-32)/1.8) %>%
pivot_wider(id_cols = time_rounded, names_from = entity_id, values_from = value) %>%
mutate(glencoe_adjusted = air_monitor_temperature) %>%
ggplot() +
geom_point(aes(x = glencoe_adjusted,
y = living_room_temperature)) +
geom_smooth(aes(x = glencoe_adjusted,
y = living_room_temperature),
method = "lm")
values %>%
filter(entity_id %in% sensors) %>%
filter(time > time_start,
time < time_end) %>%
group_by(time_rounded, entity_id) %>%
summarise(value = (mean(value)-32)/1.8) %>%
ggplot() +
geom_point(aes(x = time_rounded,
y = value)) +
geom_smooth(aes(x = time_rounded,
y = value),
method = "lm")
values %>%
filter(entity_id %in% sensors) %>%
filter(time > time_start,
time < time_end) %>%
group_by(time_rounded, entity_id) %>%
summarise(value = (mean(value)-32)/1.8) %>%
ggplot() +
geom_point(aes(x = time_rounded,
y = value,
color = entiry_id)) +
geom_smooth(aes(x = time_rounded,
y = value),
method = "lm")
values %>%
filter(entity_id %in% sensors) %>%
filter(time > time_start,
time < time_end) %>%
group_by(time_rounded, entity_id) %>%
summarise(value = (mean(value)-32)/1.8) %>%
ggplot() +
geom_point(aes(x = time_rounded,
y = value,
color = entity_id)) +
geom_smooth(aes(x = time_rounded,
y = value),
method = "lm")
values %>%
filter(entity_id %in% sensors) %>%
filter(time > time_start,
time < time_end) %>%
ggplot() +
geom_point(aes(x = time,
y = value,
color = entity_id))
values %>%
filter(entity_id %in% sensors) %>%
ggplot() +
geom_point(aes(x = time,
y = value,
color = entity_id))
time_start <- ymd_hms("2023_07_14-13:00:00")
time_end <- ymd_hms("2023_07_14-16:00:00")
values %>%
filter(entity_id %in% sensors) %>%
filter(time > time_start,
time < time_end) %>%
ggplot() +
geom_point(aes(x = time,
y = value,
color = entity_id))
values <- home_assistant$query('from(bucket: "home_assistant") |> range(start: -24h) |> drop(columns: ["_start", "_stop"]) |> filter(fn: (r) => r._field =="value")')
values <- bind_rows(values) values <- bind_rows(values)
values <- values %>% values$value <- values$"_value"
rename(value = "_value", sensors <- c("living_room_temperature", "air_monitor_temperature", "glencoe_air_monitor_temperature")
time = "_time") values['time_rounded'] <- round_date(ymd_hms(values$`_time`), unit = "minute")
values <- values %>% values %>%
mutate( filter(entity_id %in% sensors) %>%
time = as.POSIXct(time, tz = "America/Chicago"), ggplot() +
status = ifelse(value > 1, "on", "off")) %>% geom_point(aes(x = time,
mutate(end_time = values$time[-1]) y = value,
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")', color = entity_id))
POSIXctCol = NULL) time_start <- ymd_hms("2023_07_14-13:00:00")
time_end <- ymd_hms("2023_07_14-16:00:00")
values %>%
filter(entity_id %in% sensors) %>%
filter(time > time_start,
time < time_end) %>%
ggplot() +
geom_point(aes(x = time,
y = value,
color = entity_id))
values <- home_assistant$query('from(bucket: "home_assistant") |> range(start: -24h) |> drop(columns: ["_start", "_stop"]) |> filter(fn: (r) => r._field =="value")')
values <- bind_rows(values) values <- bind_rows(values)
values <- values %>% values$value <- values$"_value"
rename(value = "_value", sensors <- c("living_room_temperature", "air_monitor_temperature", "glencoe_air_monitor_temperature")
time = "_time") #sensors <- c("living_room_humidity", "office_humidity", "living_room_co2_humidity", "office_co2_humidity", "bedroom_humidity")
values <- values %>% #sensors <- c("air_monitor_air_monitor_battery_voltage")
mutate( values['time_rounded'] <- round_date(ymd_hms(values$`_time`), unit = "minute")
time = as.POSIXct(time, tz = "America/Chicago"), values %>%
status = ifelse(value > 1, "on", "off")) %>% filter(entity_id %in% sensors) %>%
mutate(end_time = c(values$time[-1], NA)) ggplot() +
View(values) geom_point(aes(x = time,
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")', y = value,
POSIXctCol = NULL) color = entity_id))
time_start <- ymd_hms("2023_07_14-13:00:00")
time_end <- ymd_hms("2023_07_14-16:00:00")
values %>%
filter(entity_id %in% sensors) %>%
filter(time > time_start,
time < time_end) %>%
ggplot() +
geom_point(aes(x = time,
y = value,
color = entity_id))
values <- home_assistant$query('from(bucket: "home_assistant") |> range(start: -24h) |> drop(columns: ["_start", "_stop"]) |> filter(fn: (r) => r._field =="value")')
values <- bind_rows(values) values <- bind_rows(values)
values <- values %>% values$value <- values$"_value"
rename(value = "_value", sensors <- c("living_room_temperature", "air_monitor_temperature", "glencoe_air_monitor_temperature")
time = "_time") #sensors <- c("living_room_humidity", "office_humidity", "living_room_co2_humidity", "office_co2_humidity", "bedroom_humidity")
values <- values %>% #sensors <- c("air_monitor_air_monitor_battery_voltage")
mutate( values['time_rounded'] <- round_date(ymd_hms(values$`_time`), unit = "minute")
time = as.POSIXct(time, tz = "America/Chicago"), values %>%
status = ifelse(value > 1, "on", "off")) %>% filter(entity_id %in% sensors) %>%
mutate(end_time = c(values$time[-1], Sys.time())) ggplot() +
run_time <- Sys.time() geom_point(aes(x = time,
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")', y = value,
POSIXctCol = NULL) color = entity_id))
time_start <- ymd_hms("2023_07_14-13:00:00")
time_end <- ymd_hms("2023_07_14-16:00:00")
values %>%
filter(entity_id %in% sensors) %>%
filter(time > time_start,
time < time_end) %>%
ggplot() +
geom_point(aes(x = time,
y = value,
color = entity_id))
values <- home_assistant$query('from(bucket: "home_assistant") |> range(start: -24h) |> drop(columns: ["_start", "_stop"]) |> filter(fn: (r) => r._field =="value")')
values <- bind_rows(values) values <- bind_rows(values)
values <- values %>% values$value <- values$"_value"
rename(value = "_value", sensors <- c("living_room_temperature", "air_monitor_temperature", "glencoe_air_monitor_temperature")
time = "_time") #sensors <- c("living_room_humidity", "office_humidity", "living_room_co2_humidity", "office_co2_humidity", "bedroom_humidity")
values <- values %>% #sensors <- c("air_monitor_air_monitor_battery_voltage")
mutate( values['time_rounded'] <- round_date(ymd_hms(values$`_time`), unit = "minute")
time = as.POSIXct(time, tz = "America/Chicago"), values %>%
status = ifelse(value > 1, "on", "off")) %>% filter(entity_id %in% sensors) %>%
mutate(end_time = c(values$time[-1], run_time)) ggplot() +
run_time <- Sys.time() geom_point(aes(x = time,
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")', y = value,
POSIXctCol = NULL) color = entity_id))
values <- bind_rows(values) time_start <- ymd_hms("2023_07_14-13:00:00")
values <- values %>% time_end <- ymd_hms("2023_07_14-16:00:00")
rename(value = "_value", values %>%
time = "_time") filter(entity_id %in% sensors) %>%
values <- values %>% filter(time > time_start,
mutate( time < time_end) %>%
time = as.POSIXct(time, tz = "America/Chicago"), ggplot() +
status = ifelse(value > 1, "on", "off")) geom_point(aes(x = time,
c(values$time[-1], run_time) y = value,
run_time <- Sys.time() color = 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")', values %>%
POSIXctCol = NULL) filter(entity_id %in% sensors) %>%
values <- bind_rows(values) filter(time > time_start,
values <- values %>% time < time_end) %>%
rename(value = "_value", group_by(time_rounded, entity_id) %>%
time = "_time") summarise(value = (mean(value)-32)/1.8) %>%
values <- values %>% ggplot() +
mutate( geom_point(aes(x = time_rounded,
time = as.POSIXct(time, tz = "America/Chicago"), y = value,
status = ifelse(value > 1, "on", "off")) %>% color = entity_id)) +
mutate(end_time = c(values$time[-1], run_time)) geom_smooth(aes(x = time_rounded,
run_time <- Sys.time() y = value),
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")', method = "lm")
POSIXctCol = NULL) lm_calc <- lm(value ~ time, data = values %>%
values <- bind_rows(values) filter(entity_id %in% sensors) %>%
values <- values %>% filter(time > time_start,
rename(value = "_value", time < time_end))
time = "_time") View(lm_calc)
values <- values %>%
mutate(
time = as.POSIXct(time, tz = "America/Chicago"),
status = ifelse(value > 1, "on", "off")) %>%
mutate(end_time = c(values$time[-1], as.POSIXct(run_time)))
run_time <- Sys.time()
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")',
POSIXctCol = NULL)
values <- bind_rows(values)
values <- values %>%
rename(value = "_value",
time = "_time")
values <- values %>%
mutate(
time = as.POSIXct(time, tz = "America/Chicago"),
status = ifelse(value > power_threshhold, "on", "off")) %>%
mutate(end_time = c(values$time[-1], c(run_time)))
power_threshhold <- 5
run_time <- Sys.time()
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")',
POSIXctCol = NULL)
values <- bind_rows(values)
values <- values %>%
rename(value = "_value",
time = "_time")
values <- values %>%
mutate(
time = as.POSIXct(time, tz = "America/Chicago"),
status = ifelse(value > power_threshhold, "on", "off")) %>%
mutate(end_time = c(values$time[-1], c(run_time)))
run_time <- Sys.time()
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")',
POSIXctCol = NULL)
values <- bind_rows(values)
values <- values %>%
rename(value = "_value",
time = "_time")
values <- values %>%
mutate(
time = as.POSIXct(time, tz = "America/Chicago"),
status = ifelse(value > power_threshhold, "on", "off"))
values <- values %>%
mutate(end_time = c(values$time[-1], run_time))
ggplot(data = values) +
geom_tile(aes(x = time + minutes(as.numerica(difftime(time, endtime, unit = "mins")))/2,
y = entity_id,
width = minutes(as.numerica(difftime(time, endtime, unit = "mins"))),
height = 0.5,
fill = status)) +
scale_y_discrete(breaks = entities$entity_id, labels = entities$name) +
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 = "The past week")
ggplot(data = values) +
geom_tile(aes(x = time + minutes(as.numeric(difftime(time, endtime, unit = "mins")))/2,
y = entity_id,
width = minutes(as.numeric(difftime(time, endtime, unit = "mins"))),
height = 0.5,
fill = status)) +
scale_y_discrete(breaks = entities$entity_id, labels = entities$name) +
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 = "The past week")
ggplot(data = values) +
geom_tile(aes(x = time + minutes(as.numeric(difftime(time, end_time, unit = "mins")))/2,
y = entity_id,
width = minutes(as.numeric(difftime(time, end_time, unit = "mins"))),
height = 0.5,
fill = status)) +
scale_y_discrete(breaks = entities$entity_id, labels = entities$name) +
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 = "The past week")
ggplot(data = values) +
geom_tile(aes(x = time + minutes(as.numeric(difftime(time, end_time, unit = "mins"))/2),
y = entity_id,
width = minutes(as.numeric(difftime(time, end_time, unit = "mins"))),
height = 0.5,
fill = status)) +
scale_y_discrete(breaks = entities$entity_id, labels = entities$name) +
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 = "The past week")
values$time + minutes(as.numeric(difftime(values$time, values$end_time, unit = "mins"))/2)
difftime(values$time, values$end_time, unit = "mins")
as.numeric(difftime(values$time, values$end_time, unit = "mins"))
ggplot(data = values) +
geom_tile(aes(x = time + minutes(as.numeric(difftime(end_time, time, unit = "mins"))/2),
y = entity_id,
width = minutes(as.numeric(difftime(end_time, time, unit = "mins"))),
height = 0.5,
fill = status)) +
scale_y_discrete(breaks = entities$entity_id, labels = entities$name) +
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 = "The past week")
ggplot(data = values) +
geom_tile(aes(x = time + seconds(round(as.numeric(difftime(end_time, time, unit = "secs")))/2),
y = entity_id,
width = seconds(round(as.numeric(difftime(end_time, time, unit = "secs")))),
height = 0.5,
fill = status)) +
scale_y_discrete(breaks = entities$entity_id, labels = entities$name) +
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 = "The past week")
run_time <- Sys.time()
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")',
POSIXctCol = NULL)
values <- bind_rows(values)
values <- values %>%
rename(value = "_value",
time = "_time")
values <- values %>%
mutate(
time = as.POSIXct(time, tz = "America/Chicago"),
status = ifelse(value > power_threshhold, "on", "off"))
values <- values %>%
group_by(entity_id) %>%
arrange(time) %>%
mutate(end_time = c(values$time[-1], run_time))
run_time <- Sys.time()
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")',
POSIXctCol = NULL)
values <- bind_rows(values)
values <- values %>%
rename(value = "_value",
time = "_time")
values <- values %>%
mutate(
time = as.POSIXct(time, tz = "America/Chicago"),
status = ifelse(value > power_threshhold, "on", "off"))
values <- values %>%
group_by(entity_id) %>%
mutate(end_time = c(values$time[-1], run_time))
run_time <- Sys.time()
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")',
POSIXctCol = NULL)
values <- bind_rows(values)
values <- values %>%
rename(value = "_value",
time = "_time")
values <- values %>%
mutate(
time = as.POSIXct(time, tz = "America/Chicago"),
status = ifelse(value > power_threshhold, "on", "off"))
for(entity in entities$entity_id) {
values_by_entity[[entity]] <- values %>%
filter(entity_id %in% entity) %>%
mutate(end_time = c(values$time[-1], run_time))
}
run_time <- Sys.time()
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")',
POSIXctCol = NULL)
values <- bind_rows(values)
values <- values %>%
rename(value = "_value",
time = "_time")
values <- values %>%
mutate(
time = as.POSIXct(time, tz = "America/Chicago"),
status = ifelse(value > power_threshhold, "on", "off"))
for(entity in entities$entity_id) {
values_by_entity[[entity]] <- values %>%
filter(entity_id %in% entity) %>%
mutate(end_time = c(time[-1], run_time))
}
values_by_entity[[entity]] <- values %>%
filter(entity_id %in% entity) %>%
mutate(end_time = c(time[-1], run_time))
run_time <- Sys.time()
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")',
POSIXctCol = NULL)
values <- bind_rows(values)
values <- values %>%
rename(value = "_value",
time = "_time")
values <- values %>%
mutate(
time = as.POSIXct(time, tz = "America/Chicago"),
status = ifelse(value > power_threshhold, "on", "off"))
values_by_entity <- as.list(NULL)
for(entity in entities$entity_id) {
values_by_entity[[entity]] <- values %>%
filter(entity_id %in% entity) %>%
mutate(end_time = c(time[-1], run_time))
}
values <- bind_rows(values_by_entity)
View(values)
washer_last_on <- values %>% filter(entity_id == entities$entity_id[1], value > power_threshhold) %>% tail(1) %>% pull(time)
washer_last_off <- values %>% filter(entity_id == entities$entity_id[1], value < power_threshhold) %>% tail(1) %>% pull(time)
dryer_last_on <- values %>% filter(entity_id == entities$entity_id[2], value > power_threshhold) %>% tail(1) %>% pull(time)
dryer_last_off <- values %>% filter(entity_id == entities$entity_id[2], value < power_threshhold) %>% tail(1) %>% pull(time)
# ---- 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) > power_threshhold, "on", "off")
}
plot_1week <- ggplot(data = values) +
geom_tile(aes(x = time + seconds(round(as.numeric(difftime(end_time, time, unit = "secs")))/2),
y = entity_id,
width = seconds(round(as.numeric(difftime(end_time, time, unit = "secs")))),
height = 0.5,
fill = status)) +
scale_y_discrete(breaks = entities$entity_id, labels = entities$name) +
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 = "The past week")
ggplot(data = values) +
geom_tile(aes(x = time + seconds(round(as.numeric(difftime(end_time, time, unit = "secs")))/2),
y = entity_id,
width = seconds(round(as.numeric(difftime(end_time, time, unit = "secs")))),
height = 0.5,
fill = status)) +
scale_y_discrete(breaks = entities$entity_id, labels = entities$name) +
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 = "The past week")
ggplot(data = values %>% filter(time >= max(values$time) - hours(24))) +
geom_tile(aes(x = time + seconds(round(as.numeric(difftime(end_time, time, unit = "secs")))/2),
y = entity_id,
width = seconds(round(as.numeric(difftime(end_time, time, unit = "secs")))),
height = 0.5,
fill = status)) +
scale_y_discrete(breaks = entities$entity_id, labels = entities$name) +
scale_y_continuous() +
scale_x_datetime(breaks = seq(round_date(max(values$time), "4 hours") - hours(24), round_date(max(values$time), "4 hours"), by = "4 hours"), date_labels = '%I:%M %p', date_minor_breaks = "1 hours") +
theme(axis.text.x = element_text(angle = 30, vjust = 0.5)) +
labs(title = "Last 24 hours")
ggplot(data = values %>% filter(time >= max(values$time) - hours(24))) +
geom_tile(aes(x = time + seconds(round(as.numeric(difftime(end_time, time, unit = "secs")))/2),
y = entity_id,
width = seconds(round(as.numeric(difftime(end_time, time, unit = "secs")))),
height = 0.5,
fill = status)) +
scale_y_discrete(breaks = entities$entity_id, labels = entities$name) +
scale_x_datetime(breaks = seq(round_date(max(values$time), "4 hours") - hours(24), round_date(max(values$time), "4 hours"), by = "4 hours"), date_labels = '%I:%M %p', date_minor_breaks = "1 hours") +
theme(axis.text.x = element_text(angle = 30, vjust = 0.5)) +
labs(title = "Last 24 hours")
#setup ---- #setup ----
library(tidyverse) library(tidyverse)
library(influxdbclient) library(influxdbclient)
@ -379,97 +466,10 @@ filter(entity_id %in% entity) %>%
mutate(end_time = c(time[-1], run_time)) mutate(end_time = c(time[-1], run_time))
} }
values <- bind_rows(values_by_entity) values <- bind_rows(values_by_entity)
washer_last_on <- values %>% filter(entity_id == entities$entity_id[1], value > power_threshhold) %>% tail(1) %>% pull(time) washer_last_on <- values %>% filter(entity_id == entities$entity_id[1], value > power_threshhold) %>% tail(1) %>% pull(end_time)
washer_last_off <- values %>% filter(entity_id == entities$entity_id[1], value < power_threshhold) %>% tail(1) %>% pull(time) washer_last_off <- values %>% filter(entity_id == entities$entity_id[1], value < power_threshhold) %>% tail(1) %>% pull(end_time)
dryer_last_on <- values %>% filter(entity_id == entities$entity_id[2], value > power_threshhold) %>% tail(1) %>% pull(time) dryer_last_on <- values %>% filter(entity_id == entities$entity_id[2], value > power_threshhold) %>% tail(1) %>% pull(end_time)
dryer_last_off <- values %>% filter(entity_id == entities$entity_id[2], value < power_threshhold) %>% tail(1) %>% pull(time) dryer_last_off <- values %>% filter(entity_id == entities$entity_id[2], value < power_threshhold) %>% tail(1) %>% pull(end_time)
# ---- 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) > power_threshhold, "on", "off")
}
plot_1week <- ggplot(data = values) +
geom_tile(aes(x = time + seconds(round(as.numeric(difftime(end_time, time, unit = "secs")))/2),
y = entity_id,
width = seconds(round(as.numeric(difftime(end_time, time, unit = "secs")))),
height = 0.5,
fill = status)) +
scale_y_discrete(breaks = entities$entity_id, labels = entities$name) +
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 = "The past week",
x = NULL,
y = NULL,
fill = NULL)
plot_1day <- ggplot(data = values %>% filter(time >= max(values$time) - hours(24))) +
geom_tile(aes(x = time + seconds(round(as.numeric(difftime(end_time, time, unit = "secs")))/2),
y = entity_id,
width = seconds(round(as.numeric(difftime(end_time, time, unit = "secs")))),
height = 0.5,
fill = status)) +
scale_y_discrete(breaks = entities$entity_id, labels = entities$name) +
scale_x_datetime(breaks = seq(round_date(max(values$time), "4 hours") - hours(24), round_date(max(values$time), "4 hours"), by = "4 hours"), date_labels = '%I:%M %p', date_minor_breaks = "1 hours") +
theme(axis.text.x = element_text(angle = 30, vjust = 0.5)) +
labs(title = "Last 24 hours",
x = NULL,
y = NULL,
fill = NULL)
render("laundry_status.Rmd",
output_dir = "html",
output_file = "index.html")
}
for(i in 1:(cronjob_interval/update_interval)){
message(Sys.time())
update_data()
Sys.sleep(60*update_interval)
}
round_date(max(values$time), "4 hours")
#setup ----
library(tidyverse)
library(influxdbclient)
library(rmarkdown)
if(Sys.info()[4] == "pseudotsuga") {
setwd("~/Documents/dataProjects/laundry_status")
} else {
setwd("/laundry_status")
}
Sys.setenv(TZ='America/Chicago')
# parameters needed to make connection to Database
token <- substr(read_file("data/api_key"), 1, 88)
org = "home_assistant"
bucket = "home_assistant"
## make connection to the influxDB bucket
home_assistant <- InfluxDBClient$new(url = "https://influxdb.dendroalsia.net",
token = token,
org = org)
update_interval <- 5
cronjob_interval <- 60
power_threshhold <- 5
# ---- set variables
entities <- data.frame(name = c("washing machine", "dryer"), entity_id = c("lamp_a_power", "lamp_b_power"))
update_data <- function(){
run_time <- Sys.time()
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")',
POSIXctCol = NULL)
values <- bind_rows(values)
values <- values %>%
rename(value = "_value",
time = "_time")
values <- values %>%
mutate(
time = as.POSIXct(time, tz = "America/Chicago"),
status = ifelse(value > power_threshhold, "on", "off"))
values_by_entity <- as.list(NULL)
for(entity in entities$entity_id) {
values_by_entity[[entity]] <- values %>%
filter(entity_id %in% entity) %>%
mutate(end_time = c(time[-1], run_time))
}
values <- bind_rows(values_by_entity)
washer_last_on <- values %>% filter(entity_id == entities$entity_id[1], value > power_threshhold) %>% tail(1) %>% pull(time)
washer_last_off <- values %>% filter(entity_id == entities$entity_id[1], value < power_threshhold) %>% tail(1) %>% pull(time)
dryer_last_on <- values %>% filter(entity_id == entities$entity_id[2], value > power_threshhold) %>% tail(1) %>% pull(time)
dryer_last_off <- values %>% filter(entity_id == entities$entity_id[2], value < power_threshhold) %>% tail(1) %>% pull(time)
# ---- generate html # ---- generate html
current_status <- as.list(NULL) current_status <- as.list(NULL)
for (entity in entities$entity_id){ for (entity in entities$entity_id){

0
laundry_status.R Normal file → Executable file
View File