changed update mechanism to 12 updates before a total restart
This commit is contained in:
parent
32d911d4b5
commit
f103c6438e
512
.Rhistory
Normal file
512
.Rhistory
Normal file
@ -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)
|
||||
}
|
@ -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)
|
||||
}
|
@ -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)
|
||||
```
|
||||
|
Loading…
x
Reference in New Issue
Block a user