diff --git a/docker-compose.yml b/docker-compose.yml index 3d2182b..a8c955c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -27,7 +27,7 @@ services: environment: PASSWORD: secret volumes: - - ./rstudio:/home/rstudio + - ./rstudio:/home/rstudio/smartmeter ports: - 8787:8787 diff --git a/rstudio/Dockerfile b/rstudio/Dockerfile index 1d603f9..8dc41f7 100644 --- a/rstudio/Dockerfile +++ b/rstudio/Dockerfile @@ -2,6 +2,8 @@ FROM rocker/tidyverse:latest RUN apt-get update \ && apt-get install -y libmariadb-dev \ + libicu-dev liblzma-dev libpcre3-dev libpng-dev \ + libv8-dev libbz2-dev libxml2-dev \ && apt-get clean \ && rm -rf /var/lib/apt/lists/ \ && rm -rf /tmp/downloaded_packages/ /tmp/*.rds @@ -10,6 +12,8 @@ RUN apt-get update \ RUN Rscript -e "install.packages(c('tidyverse','purr','psych','lme4','lmerTest','broom','doBy','reshape','emmeans','effects','mlr','randomForest','glmnet','foreign'), repos='https://cran.rstudio.com/')" \ && rm -rf /tmp/downloaded_packages/ /tmp/*.rds +RUN mkdir /home/rstudio/smartmeter +VOLUME /home/rstudio/smartmeter EXPOSE 8787 diff --git a/rstudio/Energy.Rmd b/rstudio/Energy.Rmd new file mode 100755 index 0000000..a2bee3a --- /dev/null +++ b/rstudio/Energy.Rmd @@ -0,0 +1,77 @@ +library(dplyr) +library(dbplyr) +library(ggplot2) +library(lubridate) +library(tidyr) + +# Access to our smartmeter DB +con <- DBI::dbConnect(RMariaDB::MariaDB(), host="db", dbname="smartmeter", user="root", password="rootme") + +DBI::dbListTables(con) + +# get some records +res <- DBI::dbSendQuery(con, "SELECT * FROM readings LIMIT 10") +DBI::dbFetch(res) + +# dplyr style of reading data from mysql +# con %>% tbl("readings") %>% show_query() + +# get all records from 2022 +energy <- con %>% tbl("readings") %>% + select(total_m3_gas_consumed, total_kwh_consumed_high, total_kwh_consumed_low, + total_kwh_produced_high, total_kwh_produced_low, high_tarif, created_at) %>% + filter(created_at > "2021-09-01", created_at < "2021-12-31") %>% + mutate(date = as.Date(created_at)) %>% + collect() + +# add hour column +energy <- energy %>% mutate(hour = format(strptime(created_at,"%Y-%m-%d %H:%M:%S"),'%H')) + +# group by hour +energy_per_hour <- energy %>% + mutate(total_usage_kwh = (total_kwh_consumed_high+total_kwh_consumed_low)) %>% + mutate(total_return_kwh = (total_kwh_produced_high+total_kwh_produced_low)) %>% + group_by(date,hour) %>% + summarize(max_m3_gas_consumed = max(total_m3_gas_consumed), + min_m3_gas_consumed = min(total_m3_gas_consumed), + max_usage_kwh = max(total_usage_kwh), + min_usage_kwh = min(total_usage_kwh), + max_return_kwh = max(total_return_kwh), + min_return_kwh = min(total_return_kwh)) %>% + mutate(usage_m3 = max_m3_gas_consumed-min_m3_gas_consumed) %>% + mutate(usage_kwh = max_usage_kwh-min_usage_kwh) %>% + mutate(return_kwh = max_return_kwh-min_return_kwh) %>% + select(-max_m3_gas_consumed, -min_m3_gas_consumed, -max_usage_kwh, -min_usage_kwh, -max_return_kwh, -min_return_kwh ) + +# mutate(usage_kwh = round(usage_kwh,1), return_kwh = round(return_kwh,1)) %>% +# and again, group by day +energy_per_day <- energy_per_hour %>% + group_by(date) %>% + summarize(usage_m3=round(sum(usage_m3),2), + usage_kwh=round(sum(usage_kwh),2), + return_kwh=round(sum(return_kwh),2)) + +# some plots +energy_per_hour %>% + mutate(usage_kwh = round(usage_kwh,1), return_kwh = round(return_kwh,1)) %>% + ggplot( aes(x=date, fill=hour, y=usage_kwh, text=as.character(date))) + + geom_bar(stat="identity") + + theme_bw() + + labs(x="Date", y="kwh") + +# daily usage/return of electricity +energy_per_day %>% pivot_longer(cols = usage_kwh:return_kwh) %>% + ggplot( aes(x=date, y=value, fill=name, text=as.character(date))) + + geom_bar(position="dodge", stat="identity") + + geom_text(aes(label=value), vjust=-0.3, hjust=1.2, size=2.5) + + theme_bw() + + labs(x="Date", y="kwh") + +# daily usage/return of gas +energy_per_day %>% pivot_longer(cols = usage_m3) %>% + ggplot( aes(x=date, y=value, fill=name, text=as.character(date))) + + geom_bar(position="dodge", stat="identity") + + geom_text(aes(label=value), vjust=-0.3, hjust=1.2, size=2.5) + + theme_bw() + + labs(x="Date", y="m3") +