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) }