From f103c6438e94bbf17a502dcc4920fd9be31c6f58 Mon Sep 17 00:00:00 2001 From: Ben Varick Date: Tue, 7 Nov 2023 09:29:01 -0600 Subject: [PATCH] changed update mechanism to 12 updates before a total restart --- .Rhistory | 512 +++++++++++++++++++++++++++++++++++++++++++++ laundry_status.R | 4 +- laundry_status.Rmd | 2 +- 3 files changed, 516 insertions(+), 2 deletions(-) create mode 100644 .Rhistory diff --git a/.Rhistory b/.Rhistory new file mode 100644 index 0000000..36c63e1 --- /dev/null +++ b/.Rhistory @@ -0,0 +1,512 @@ +values <- values %>% +mutate( +time = as.POSIXct(time, tz = "America/Chicago"), +status = ifelse(value > 1, "on", "off")) %>% +mutate(end_time = time + minutes(1)) +washer_last_on <- values %>% filter(entity_id == entities$entity_id[1], value > 5) %>% tail(1) %>% pull(time) +washer_last_off <- values %>% filter(entity_id == entities$entity_id[1], value < 5) %>% 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) > 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(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") +render("laundry_status.Rmd") +} +for(i in 1:8640){ +update_data() +Sys.sleep(60*update_interval) +} +difftime(Sys.time(), washer_last_on, units = "mins") +difftime(Sys.time(), washer_last_off, units = "mins") +difftime(Sys.time(), washer_last_off) +difftime(Sys.time(), washer_last_on, units = "mins") +difftime(Sys.time(), washer_last_on) +#setup ---- +library(tidyverse) +library(influxdbclient) +library(rmarkdown) +if(test) { +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 +# ---- set variables +entities <- data.frame(name = c("washing machine", "dryer"), entity_id = c("lamp_a_power", "lamp_b_power")) +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")', +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 > 1, "on", "off")) %>% +mutate(end_time = time + minutes(1)) +washer_last_on <- values %>% filter(entity_id == entities$entity_id[1], value > 5) %>% tail(1) %>% pull(time) +washer_last_off <- values %>% filter(entity_id == entities$entity_id[1], value < 5) %>% 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) > 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(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") +render("laundry_status.Rmd") +} +for(i in 1:8640){ +update_data() +Sys.sleep(60*update_interval) +} +#setup ---- +library(tidyverse) +library(influxdbclient) +library(rmarkdown) +if(test) { +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 +# ---- set variables +entities <- data.frame(name = c("washing machine", "dryer"), entity_id = c("lamp_a_power", "lamp_b_power")) +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")', +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 > 1, "on", "off")) %>% +mutate(end_time = time + minutes(1)) +washer_last_on <- values %>% filter(entity_id == entities$entity_id[1], value > 5) %>% tail(1) %>% pull(time) +washer_last_off <- values %>% filter(entity_id == entities$entity_id[1], value < 5) %>% 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) > 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(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") +render("laundry_status.Rmd") +} +for(i in 1:8640){ +update_data() +Sys.sleep(60*update_interval) +} +#setup ---- +library(tidyverse) +library(influxdbclient) +library(rmarkdown) +if(test) { +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 +# ---- set variables +entities <- data.frame(name = c("washing machine", "dryer"), entity_id = c("lamp_a_power", "lamp_b_power")) +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")', +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 > 1, "on", "off")) %>% +mutate(end_time = time + minutes(1)) +washer_last_on <- values %>% filter(entity_id == entities$entity_id[1], value > 5) %>% tail(1) %>% pull(time) +washer_last_off <- values %>% filter(entity_id == entities$entity_id[1], value < 5) %>% 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) > 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(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") +render("laundry_status.Rmd") +} +for(i in 1:8640){ +update_data() +Sys.sleep(60*update_interval) +} +#setup ---- +library(tidyverse) +library(influxdbclient) +library(rmarkdown) +if(test) { +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 +# ---- set variables +entities <- data.frame(name = c("washing machine", "dryer"), entity_id = c("lamp_a_power", "lamp_b_power")) +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")', +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 > 1, "on", "off")) %>% +mutate(end_time = time + minutes(1)) +washer_last_on <- values %>% filter(entity_id == entities$entity_id[1], value > 5) %>% tail(1) %>% pull(time) +washer_last_off <- values %>% filter(entity_id == entities$entity_id[1], value < 5) %>% 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) > 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(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") +render("laundry_status.Rmd") +} +for(i in 1:8640){ +update_data() +Sys.sleep(60*update_interval) +} +#setup ---- +library(tidyverse) +library(influxdbclient) +library(rmarkdown) +if(test) { +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 +# ---- set variables +entities <- data.frame(name = c("washing machine", "dryer"), entity_id = c("lamp_a_power", "lamp_b_power")) +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")', +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 > 1, "on", "off")) %>% +mutate(end_time = time + minutes(1)) +washer_last_on <- values %>% filter(entity_id == entities$entity_id[1], value > 5) %>% tail(1) %>% pull(time) +washer_last_off <- values %>% filter(entity_id == entities$entity_id[1], value < 5) %>% 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) > 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(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") +render("laundry_status.Rmd") +} +for(i in 1:8640){ +update_data() +Sys.sleep(60*update_interval) +} +#setup ---- +library(tidyverse) +library(influxdbclient) +library(rmarkdown) +if(test) { +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 +# ---- set variables +entities <- data.frame(name = c("washing machine", "dryer"), entity_id = c("lamp_a_power", "lamp_b_power")) +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")', +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 > 1, "on", "off")) %>% +mutate(end_time = time + minutes(1)) +washer_last_on <- values %>% filter(entity_id == entities$entity_id[1], value > 5) %>% tail(1) %>% pull(time) +washer_last_off <- values %>% filter(entity_id == entities$entity_id[1], value < 5) %>% tail(1) %>% pull(time) +dryer_last_on <- values %>% filter(entity_id == entities$entity_id[2], value > 5) %>% tail(1) %>% pull(time) +dryer_last_off <- values %>% filter(entity_id == entities$entity_id[2], value < 5) %>% 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) > 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(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") +render("laundry_status.Rmd") +} +for(i in 1:8640){ +update_data() +Sys.sleep(60*update_interval) +} +Sys.info() +Sys.info()[4] +Sys.info()[4] == "pseudotsuga" +#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 +# ---- set variables +entities <- data.frame(name = c("washing machine", "dryer"), entity_id = c("lamp_a_power", "lamp_b_power")) +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")', +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 > 1, "on", "off")) %>% +mutate(end_time = time + minutes(1)) +washer_last_on <- values %>% filter(entity_id == entities$entity_id[1], value > 5) %>% tail(1) %>% pull(time) +washer_last_off <- values %>% filter(entity_id == entities$entity_id[1], value < 5) %>% tail(1) %>% pull(time) +dryer_last_on <- values %>% filter(entity_id == entities$entity_id[2], value > 5) %>% tail(1) %>% pull(time) +dryer_last_off <- values %>% filter(entity_id == entities$entity_id[2], value < 5) %>% 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) > 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(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") +render("laundry_status.Rmd") +} +for(i in 1:8640){ +update_data() +Sys.sleep(60*update_interval) +} diff --git a/laundry_status.R b/laundry_status.R index b32324c..13a921b 100644 --- a/laundry_status.R +++ b/laundry_status.R @@ -18,6 +18,7 @@ home_assistant <- InfluxDBClient$new(url = "https://influxdb.dendroalsia.net", token = token, org = org) update_interval <- 5 +cronjob_interval <- 60 # ---- set variables entities <- data.frame(name = c("washing machine", "dryer"), entity_id = c("lamp_a_power", "lamp_b_power")) @@ -72,7 +73,8 @@ update_data <- function(){ } -for(i in 1:8640){ +for(i in 1:(cronjob_interval/update_interval)){ + message(Sys.time()) update_data() Sys.sleep(60*update_interval) } \ No newline at end of file diff --git a/laundry_status.Rmd b/laundry_status.Rmd index b91608a..67ef0a3 100644 --- a/laundry_status.Rmd +++ b/laundry_status.Rmd @@ -24,7 +24,7 @@ The dryer `r ifelse(current_status$lamp_b_power=="on", "started", "ended")` its `r ifelse(current_status$lamp_b_power=="on", round(difftime(Sys.time(), dryer_last_off, unit = "mins"),0), round(difftime(Sys.time(), dryer_last_on, units = "mins"),0))` minutes ago --------- +--- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) ```