From 7d51408a0458d82a2763a74962883c720bc501ec Mon Sep 17 00:00:00 2001 From: Michael Housh Date: Wed, 27 Nov 2024 13:39:13 -0500 Subject: [PATCH] feat: Test copying entire project directory. --- .../Definitions.md => Definitions.md | 0 project_files/footer.tex => footer.tex | 0 project_files/head.tex => head.tex | 0 project/Airflow/.gitkeep | 0 project/ManJ/.gitkeep | 0 project/Report.md | 307 ++++++++++++++++++ project/img/.gitkeep | 0 project/justfile | 55 ++++ project/project.gitignore | 1 + project/vars.yml | 40 +++ project/vault.yml | 34 ++ repo_vars/vars.yml | 48 +-- 12 files changed, 461 insertions(+), 24 deletions(-) rename project_files/Definitions.md => Definitions.md (100%) rename project_files/footer.tex => footer.tex (100%) rename project_files/head.tex => head.tex (100%) create mode 100644 project/Airflow/.gitkeep create mode 100644 project/ManJ/.gitkeep create mode 100644 project/Report.md create mode 100644 project/img/.gitkeep create mode 100644 project/justfile create mode 100644 project/project.gitignore create mode 100644 project/vars.yml create mode 100644 project/vault.yml diff --git a/project_files/Definitions.md b/Definitions.md similarity index 100% rename from project_files/Definitions.md rename to Definitions.md diff --git a/project_files/footer.tex b/footer.tex similarity index 100% rename from project_files/footer.tex rename to footer.tex diff --git a/project_files/head.tex b/head.tex similarity index 100% rename from project_files/head.tex rename to head.tex diff --git a/project/Airflow/.gitkeep b/project/Airflow/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/project/ManJ/.gitkeep b/project/ManJ/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/project/Report.md b/project/Report.md new file mode 100644 index 0000000..e96009d --- /dev/null +++ b/project/Report.md @@ -0,0 +1,307 @@ +--- +title: "{{ document_title }}" +author: "{{ author_name }}" +date: \today{} +mainfont: Avenir Next +documentclass: article +fontsize: 12pt +# NOTE: The applegreen is a custom color defined in resources/head.tex +linkcolor: applegreen +urlcolor: applegreen +abstract: | + **Prepared For:** + + {{ customer.name }} + + {{ customer.address.street }} + {{ customer.address.city }}, {{ customer.address.state }} {{ customer.address.zip }} + + ```{=latex} + \begin{center} + ``` + + \ + \ + \ + + [![logo]({{ links.images.logo }}){ width=30% }]({{ company.website }}) + + ```{=latex} + \end{center} + ``` +--- + + + +# Contents + +1. [Introduction](#home-performance-report) + 1. [Your Goals](#your-goals) +1. [Leakage](#how-leaky-is-your-house) +1. [Observations](#observations) + 1. [HVAC](#hvac-observations) + 1. [Home](#home-observations) +1. [Load Calculations](#load-calculations) + 1. [Your Loads](#your-loads) +1. [Airflow Assessment](#airflow-assessment) + 1. [Your Static Measurements](#your-static-measurements) + 1. [Static Pressure Forecast](#static-measurements-forecast) +1. [Summary](#summary) +1. [Definitions](#definitions) + 1. [CFM50] + 1. [IAQ] + 1. [LAIR] + 1. [Load Calculation][load-calculation] + 1. [Shell][shell] + 1. [SHR] + 1. [TESP] + 1. [WC][wc] + +# Home Performance Report + +Thank you for having us to your home for a home performance assessment. I hope that it was +beneficial. We learned a lot about your home and your goals during the brief visit. So, let’s jump +in to some of the things discovered. + +Below is a summary of your goals, house measurements, and our budget discussion as well as my +observations and some recommendations. As part of the service we ran load calculations that help +determine the right sized HVAC for your home as it stand and with some upgrades. Those are attached +as are bids for replacements. + +Once you read the report you’ll have 3 options: do nothing, pick and choose upgrades, or do more +planning for more difficult goals or complex projects. These options are discussed at the end of the +report as well as our leanings for your home. + +\goalsimage + +## Your goals: + + + + + + +1. Add air conditioning. + +# How Leaky Is Your House + + + +One of the main objectives was to perform a blower door test and load calculations for the home. We +discovered that the blower door number was {{ home.cfm50 }} [CFM50] for the approximately +{{ home.square_feet }} \squarefoot ({{ home.lair }} [LAIR]). A leaky home, most often, is an +uncomfortable and uncontrollable home. + +> _Air leakage tends to have one of the largest impacts on the load of a home._ +> +> - _Around 1:1 homes begin to be more controllable / comfortable_ +> - _your home is {{ home.cfm50 }}:{{ home.square_feet }} \squarefoot for a ratio of +> {{ home.lair }}_ +> - _Leaky homes are very difficult to maintain comfort with HVAC alone._ + +# Observations + +The below sections are observations about the current HVAC system and the home. + +## HVAC Observations + + + +1. Current furnace is sized appropriately based on the load of the home. +1. Current duct system is not sized adequately for the system. + 1. Filter is too small for the system. + 1. Return sizing is not adequate. + 1. Supply sizing is marginal. + 1. Current static pressure is already high. + 1. These problems may become worse when AC is installed. + +## Home Observations + + + +1. The house leakage is high for the size of the home. +1. May be hard to control comfort without [shell] improvements. + +# Load Calculations + +Several [load-calculations][load-calculation] were performed on your home to determine the proper +equipment sizing for this application. Below is a comparison of the +[load-calculations][load-calculation] with the current air leakage and several improved air leakage +targets. + +## Your Loads + + + +| [CFM50] | | Heating Total | Cooling Total | [SHR] | [LAIR] | +| -------------------- | ----------- | ------------- | ------------- | -------- | ------------------- | +| **{{ home.cfm50 }}** | **Current** | **55,102** | **20,726** | **0.79** | **{{ home.lair }}** | +| 2,000 | | 40,320 | 17,279 | 0.85 | 1.5:1 | +| 1,350 | | 35,885 | 16,245 | 0.88 | 1:1 | + +> **Note:** +> +> 1. _The lower the heating and cooling total's the better._ +> 1. _An undersized air conditioner is better than an oversized one._ +> 1. _Supplemental dehumidification may be required for [SHR]'s below 0.83._ + +The above table shows the relationship between air leakage and the amount of heating and cooling +that is required for the home. A tight home is easier to control the comfort levels, offers superior +IAQ levels, and lower utility costs. + + + +The projected cooling size required for your home is around 2-Tons for the current leakage rate, or +1.5-Tons if [shell] improvements were made. + +[Here is a link to your load calculation reports][loads-folder] + +# Airflow Assessment + +While on site, we also measured the total system airflow and static pressure of the system. Static +pressure is equivalent to the blood pressure of your system and gives us a better understanding of +the overall ability for the system to provide the proper amount of airflow, as well as how much it +may struggle to do so. + +Static pressure is the amount of resistance that the blower has to work against in order to move air +through the system. Things that have an effect on the static pressure of the system include, air +filters (size and type), duct sizes, amount of ducts, length of ducts, duct fittings and +transitions, as well as internal system components. Each component of the system has a resistance +associated with it that the blower has to overcome, by taking some key measurements we are able to +determine the [TESP] of the system. While there are several static pressures in the system, when we +talk about static pressure we are generally referring to [TESP]. + +Static pressure ([TESP]) has a range of _low_, _acceptable_, or _high_. While these numbers are +specific to the actual equipment, most manufacturers follow similar standards. For the sake of +simplicity, 0.5" [wc] or under is an _acceptable_ target, 0.8" [wc] is generally the max acceptable +static pressure (although we like to stay well below this if possible), and above 0.8" [wc] is +considered _high_ and should be addressed. _Low_ is generally not common and is rarely problematic, +so it is not focused on much. + + + +\newpage + +## Your Static Measurements + +![True Flow Report][trueflow-image]{ height=50% } + + + +The above image is a snapshot of the static pressures recorded for your system. This shows that the +static pressure of your system is very high (1.114" [wc]). The primary culprits for the high static +pressure are that the filter is undersized for the airflow required and the return duct sizing is +small. + +These measurements were taken in the heating mode because your system does not currently have air +conditioning. Currently the heating airflow is on the low side for what is required for your system +(1200 CFM would be ideal). This should be adjusted if possible during the install to get better +performance and efficiency out of the system, given that some static pressures can be improved +during the project. + +\ +\ + +[Here is a link to the full airflow report.][trueflow-file] + + + +\newpage + +## Static Measurements Forecast + +![True Flow Forecast][trueflow-forecast-image]{ height=50% } + + + +The above image is a snapshot is of a forecast of the static pressures after adding air +conditioning. It should be noted that these measurements are based solely on the airflow required +for cooling mode, not for heating mode (in other words, heating mode is going to be higher because +the airflow requirement is higher). + +This shows that with an upgraded filter we can get the static pressure below the 0.8" [wc] max +target while in cooling mode. + +\ +\ + +[Here is a link to the full forecast report.][trueflow-forecast-file] + +# Summary + +The purpose of the home performance assessment is to help find the overlap between the house needs, +the goals, and the budget to see if there's a viable project. + + + +The house is pretty leaky overall. This is due to the age and construction style of the house. This +may lead to comfort problems or trouble maintaining comfort in all areas of the house. + +Based on the [load calculations][load-calculation], the previously quoted systems are too large for +the current load, so we need to update the proposals to be for 2-Ton systems. This will help with +the fact that the static pressure of the system is already really high. The static pressure for +heating will likely still be above the 0.8" [wc] max threshold. + +An upgraded air filter is going to be required to help alleviate the blower motor. Another return +may be required in the living space to further drop the static pressure, however this could likely +be done in the future if desired. I would estimate that adding another return would be in the +**$800-1,200** range. + +While on site it was mentioned that you would like some of the ducts to be sealed that go to the +second floor. This is something that is not included in our general proposals. I would estimate this +to be an additional **$150-300** and will add options in the updated proposals. + +Since the goal is to add air conditioning, then I would recommend going with a 2-Ton system. If the +system does not maintain then you could look into [shell] improvements and air sealing the home. + +Regards, + +\ +\ +\ + +[Here is a link to all the documents][document-folder] + + + + + +[CFM50]: #cfm50-definition "CFM50" +[IAQ]: #iaq-definition "IAQ" +[LAIR]: #lair-definition "LAIR" +[load-calculation]: #load-calculation-definition "load calculation" +[shell]: #shell-definition "shell" +[SHR]: #shr-definition "SHR" +[wc]: #wc-definition "wc" +[TESP]: #tesp-definition "TESP" + + + + + +[trueflow-image]: "{{ links.images.trueflow }}" + + +[trueflow-forecast-image]: "{{ links.images.trueflow_forecast }}" + + + +[loads-folder]: "{{ links.documents.loads_folder }}" +[trueflow-file]: "{{ links.documents.trueflow_file }}" +[trueflow-forecast-file]: "{{ links.documents.trueflow_forecast_file }}" +[document-folder]: "{{ links.documents.document_folder }}" + diff --git a/project/img/.gitkeep b/project/img/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/project/justfile b/project/justfile new file mode 100644 index 0000000..c636d71 --- /dev/null +++ b/project/justfile @@ -0,0 +1,55 @@ + +playbook_dir := "${ANSIBLE_LOCAL}/ansible-hpa-playbook" +build_dir_name := ".build" + +[private] +default: + just --list + +[private] +run_pandoc dir output_file: build + @pandoc --pdf-engine=xelatex \ + -H {{build_dir_name}}/"head.tex" \ + -H {{build_dir_name}}/"footer.tex" \ + -o {{dir}}/{{output_file}} \ + {{build_dir_name}}/"Report.md" \ + {{build_dir_name}}/"Definitions.md" + +[private] +run-playbook *ARGS: + @ansible-playbook {{playbook_dir}}/main.yml \ + --inventory {{playbook_dir}}/inventory.ini \ + --extra-vars "output_dir={{justfile_directory()}}" \ + --extra-vars "project_dir={{justfile_directory()}}" \ + {{ARGS}} + +# Builds and fills the templates into the .build directory. +[group('build')] +build: (run-playbook "--tags build-project") + +# Build & generate an HTML report. +[group("generate")] +html title="Report.html" output_dir=".build": ( + run_pandoc output_dir file_stem(title) + ".html" +) + open {{output_dir}}/{{ prepend(file_stem(title), ".html") }} + +# Build & generate a PDF report. +[group("generate")] +pdf title="Report.pdf" output_dir="${PWD}": (run_pandoc output_dir file_stem(title) + ".pdf") + open {{output_dir}}/{{ prepend(file_stem(title), ".pdf") }} && \ + @osascript ./scripts/notify.scpt + +# Build & generate a Latex file. +[group("generate")] +[group("debug")] +tex title="Report.tex" output_dir=".build": (run_pandoc output_dir file_stem(title) + ".tex") + @echo "Wrote to: " + {{output_dir}}/{{file_stem(title)}} + ".tex" + +[group('utilities')] +edit-vault: + @ansible-vault edit ./vault.yml + +[group('utilities')] +clean: + @rm -rf {{build_dir_name}} diff --git a/project/project.gitignore b/project/project.gitignore new file mode 100644 index 0000000..bb56973 --- /dev/null +++ b/project/project.gitignore @@ -0,0 +1 @@ +.build/* diff --git a/project/vars.yml b/project/vars.yml new file mode 100644 index 0000000..edc5723 --- /dev/null +++ b/project/vars.yml @@ -0,0 +1,40 @@ +--- + +# Stores variables related to the template directory, which is used +# to setup projects and store commonly used files. +# +# WARNING: Update the path to where you store your template. +# +# template: +# path: "/path/to/template/dir +# vars: "repo_vars" +# repo: (optional if using a repo as a template) +template: + # When using a git repository as a template dir. In general, it's + # probably best to pin to a particular version of the repo template + # instead of a branch. + # + # repo: + # url: "https://example.com/repo.git" + # version: "main" + repo: + url: "https://git.housh.dev/hhe/consult-template.git" + version: "main" + +author_name: "{{ vault_author_name }}" + +company: "{{ vault_company }}" + +links: + images: + logo: "img/logo.png" + trueflow: "img/trueflow.png" + trueflow_forecast: "img/forecast.png" + documents: "{{ vault_document_links }}" + +customer: "{{ vault_customer }}" + +home: + square_feet: "3,000" + cfm50: "3,000" + lair: "1:1" diff --git a/project/vault.yml b/project/vault.yml new file mode 100644 index 0000000..a8cbc14 --- /dev/null +++ b/project/vault.yml @@ -0,0 +1,34 @@ +$ANSIBLE_VAULT;1.2;AES256;consults +35313865356261316335353964613035396565343239393165626162353034363363656631393161 +3635643130393561633834366632313563333731643337390a313831336631343664623162393137 +36666363353937383636613061396365336535353665373163333465333133333262613033323862 +3366653636343964300a353431303535653863653939646335393238643330613862383834643931 +66663234303762323762316162336337613939376362663362383166316338653435373862663935 +32656336666435353565396334353739353836303565643034326634666431313036633865636566 +38663038376633616462623533353364373639626533316466353037663462643735326135623161 +31646463633633623733356434623665326236306238383232363866356536343734336566373434 +65333238373636326363646561346561613032393662613535343739663935626132373636386266 +64663636643836343562353363313530613630373463333639626435616437333262346663373133 +65306431303539376664333065636232326434326334666433313061383539353137333666333332 +32623730383566376131616634373139373639623336316461333931623863386533306564393736 +31333537313966613633353062396236303533643133386635666635333964666161346430306365 +38663132663262363430343663336562616130306439636432333234366634343432353035623164 +32663335313731386539613661656338336339643731393331326163653362366430373061646633 +63383532386632336238393461393266353934363235383431666339613938636363393066393966 +61633934396530303565616563323365393864356232613034393461656163313462313231616335 +32386239643138663339333066336334323738343264623831366433653737616335356261663635 +31613063363938633335616261636137373561366165373636316232363032366666316238323338 +30313936656635313538663165393063386539633565346431623133613237356535343663663331 +30326162633731656238613837393165623337666463613964326165663536323638353036386663 +66313763613735313563626161306436383837353039396164653838383161306235396536626434 +35653766353932336532643434643034363464363366323762356337366431623262643338363866 +64393237346538613130363636636234353535343236373334643662653037636262656663383463 +65613039353239366662353130653930383233313666653136363966303138653562343630303464 +62366232306234333134666462306439656634363266666263623664343035643562646633666364 +31346263376131326463306332376231646264346661346365353665623331636261626664366131 +64666133303930613965653533366133633165663166653637663736326265393461393834353433 +64656536613430313864366162383064616439633434656362333164373665393664663062386661 +34356339613836323135333966646430643534306431633665376237636264616638323065646138 +64666464366138373334316434333463386236303963616162623231373962646565393863663334 +33363330376633336364303034623765326138306335326136613665313963613361343564383364 +39373039636366323962343339303963353636353730333163363365326131666336 diff --git a/repo_vars/vars.yml b/repo_vars/vars.yml index 5bdf258..68695cd 100644 --- a/repo_vars/vars.yml +++ b/repo_vars/vars.yml @@ -3,8 +3,9 @@ document_title: "Home Performance Report" template: - path: "{{ lookup('env', 'REPOS') }}/hhe-consult-template/" - vars: repo_vars + repo: + url: "https://git.housh.dev/hhe/consult-template.git" + version: "main" # Files to copy to the project directory when setting up a new consult project. # @@ -15,22 +16,24 @@ template: # dest: "FileName" # mode: '0600' # optional mode, defaults to 0600 copy_on_setup: - - src: "project_files/Report.md" - dest: "Report.md" - - src: "project_files/vars.yml" - dest: "vars.yml" - - src: "project_files/vault.yml" - dest: "vault.yml" - - src: "project_directories/img/" - dest: img - - src: "project_directories/Airflow/" - dest: Airflow - - src: "project_directories/ManJ/" - dest: ManJ - - src: project_files/project.gitignore - dest: .gitignore - - src: project_files/project.justfile - dest: justfile + - src: "project/" + dest: "{{ project_dir }}" +# - src: "project_files/Report.md" +# dest: "Report.md" +# - src: "project_files/vars.yml" +# dest: "vars.yml" +# - src: "project_files/vault.yml" +# dest: "vault.yml" +# - src: "project_directories/img/" +# dest: img +# - src: "project_directories/Airflow/" +# dest: Airflow +# - src: "project_directories/ManJ/" +# dest: ManJ +# - src: project_files/project.gitignore +# dest: .gitignore +# - src: project_files/project.justfile +# dest: justfile # Files to copy to the build directory when building a consult document. # @@ -41,11 +44,8 @@ copy_on_setup: # dest: "Name" # mode: '0600' # optional mode, defaults to 0600 copy_on_build: - - "{{ template.path }}/Definitions.md" - - "{{ template.path }}/head.tex" - - "{{ template.path }}/img" - - "{{ template.path }}/Airflow" - - "{{ template.path }}/ManJ" + - "{{ template_path }}/Definitions.md" + - "{{ template_path }}/head.tex" # Files to fill with their template values and copy to the build directory. # @@ -56,5 +56,5 @@ copy_on_build: # dest: "Name" # mode: '0600' # optional mode, defaults to 0600 template_on_build: - - "{{ template.path }}/footer.tex" + - "{{ template_path }}/footer.tex" - "{{ project_dir }}/Report.md"