feat: Working ansible with vault variables, needs cleaned up.

This commit is contained in:
2024-11-23 19:23:23 -05:00
parent 1d151e591a
commit 3c83ea9335
11 changed files with 487 additions and 7 deletions

View File

@@ -3,7 +3,7 @@ TEX_TITLE ?= "Report.tex"
HTML_TITLE ?= "report.html"
OUT_FILE ?= "Report.md"
OUT_DIR ?= "outfiles"
PDF_TEST_TILE ?= "Report.test.pdf"
PDF_TEST_TITLE ?= "Report.test.pdf"
.PHONY: gen
gen:
@@ -20,16 +20,14 @@ pdf: gen
&& open ${PDF_TITLE} \
&& osascript ./scripts/notify.scpt
.PHONY: test-pdf
test-pdf: gen
.PHONY: pdf-test
pdf-test:
@pandoc --pdf-engine=xelatex \
-H resources/head.tex \
-H "${OUT_DIR}/footer.tex" \
-o ${PDF_TEST_TITLE} \
-o "${OUT_DIR}/${PDF_TEST_TITLE}" \
"${OUT_DIR}/${OUT_FILE}" \
resources/Definitions.md \
&& open ${PDF_TEST_TITLE} \
&& osascript ./scripts/notify.scpt
resources/Definitions.md
.PHONY: tex
tex: gen
@@ -52,3 +50,8 @@ install:
mactex-no-gui \
imagemagick \
gettext
@.PHONY: clean
clean:
@rm -rf outfiles
@mkdir outfiles

5
ansible.cfg Normal file
View File

@@ -0,0 +1,5 @@
[defaults]
inventory=./inventory.ini
roles_path=./roles
stdout_callback=yaml
interpreter_python=auto_silent

19
group_vars/all/vars.yml Normal file
View File

@@ -0,0 +1,19 @@
---
author_name: "{{ vault_author_name }}"
document_title: "Home Performance Report"
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"
output_path: "/Users/michael/projects/hpa-consult-report/outfiles"

35
group_vars/all/vault.yaml Normal file
View File

@@ -0,0 +1,35 @@
$ANSIBLE_VAULT;1.1;AES256
34356166663933373435353334376433633137323838373832616335396232366536353766613131
3465313832383733326433613862363639353665306164660a643534646438353233393239373866
38336631623166643065653738393330616535656237376438323438363934323935363565393632
3462366164323233640a343966303361656261383138306664333930636433383261653066626639
63626465323266346164313030343963623661666233633236363439303164396431306165646533
33353562386337343538363333313362333362643230353536656535383931333665653335383130
34353130653836633531336563323831333337353936313737303239653539623263356261303635
31373832396438643466326361396162316134313833303732633062326531346637313665663037
63393261666436363062306436313334356465316361383938646162333130356130323736633761
34396530356231623437633163363762333461303337363539366638376462663561313437313938
30306335303638633037383732646236663437333362626433366330326566633532396535346165
64376663346132666538343566343437323763633532303336646330626439353334643837383165
66323261656466363237346661653232363766646265643037343366373133663739383532643161
63353338663537313430653066373764376437393364363438363834616363653139396237656534
34343332393030383863306664613434653665303336346163613161363431633236316138396537
37373332326233326264613337303134626661663930316434303865633365353437313363343834
61656266343466656239623366366538343937363932613966333832646534653462366637623163
31383733303736353565306637653532346431666666303931616232656138616532653161666463
37623734303436653664353261363664666138666436626330316437396237313131663361373634
61383061366263313239643665356638666361666561313532636563643932613462616131396363
36636362613463336136633962386139353965636538666562383831313661376261396531306631
32346264633631303164643832613835376432636331396234323034656438363638633633353363
36303831653534333031623437663832323961323763323863643562343137323164373161343130
31306132343235333735616437376662336464643431643563623731333463353631626238656262
38613637626433303866336330636234363534626664306337613832623433663866646430373666
66626131383839356337653461343866313431666566633230653831303062636433623830383236
39626137653461353535333366393633356538633437356563323663616466623737323438666438
33623364303961363666653930393466613938333537336530616461333036646265343032653362
66303237363631353631346137643539333435323535356133313530393238623239333233656265
62303633376233646334663633613838303462613662643433663465323864396265383165313932
61346434633965656133646264373034616538653330663661306562613730376432363564646461
34636462666337303465666564393465363865343763623832383735616237373331623231333931
33323965353864313932623339383431636536633734393065373437666461636666373364356535
3666336333306431306630663537383235653735363662343636

2
inventory.ini Normal file
View File

@@ -0,0 +1,2 @@
[local]
127.0.0.1 ansible_connection=local

7
playbook/report.yml Normal file
View File

@@ -0,0 +1,7 @@
---
- name: Generate Report.
hosts: all
roles:
- role: report
tag: report

View File

@@ -0,0 +1,21 @@
---
vault_author_name: "Testy McTestface Jr"
vault_company:
website: "https://example.com"
phone: "555-555-5555"
url_display_title: "www.Example.com"
vault_document_links:
loads_folder: "https://example.com/path/to/loads/folder"
trueflow_file: "https://example.com/path/to/trueflow/file"
trueflow_forecast_file: "https://example.com/path/to/trueflow/forecast/file"
document_folder: "https://example.com/path/to/document/folder"
vault_customer:
name: "Testy McTestface Sr"
address:
street: "1234 Seasme Street"
city: "No Mans Land"
state: "Foo"
zip: "55555"

View File

@@ -0,0 +1,33 @@
---
author_name: "Testy McTestface Jr"
document_title: "Home Performance Report"
company:
website: "https://example.com"
phone: "555-555-5555"
url_display_title: "www.Example.com"
links:
images:
logo: "img/logo.png"
trueflow: "img/trueflow.png"
trueflow_forecast: "img/forecast.png"
documents:
loads_folder: "https://example.com/path/to/loads/folder"
trueflow_file: "https://example.com/path/to/trueflow/file"
trueflow_forecast_file: "https://example.com/path/to/trueflow/forecast/file"
document_folder: "https://example.com/path/to/document/folder"
customer:
name: "Testy McTestface Sr"
address:
street: "1234 Seasme Street"
city: "No Mans Land"
state: "Foo"
zip: "55555"
home:
square_feet: "3,000"
cfm50: "3,000"
lair: "1:1"
output_path: "outfiles"

View File

@@ -0,0 +1,22 @@
---
- name: Generate Footer File
ansible.builtin.template:
src: "templates/{{ item }}"
dest: "{{ output_path }}/footer.tex"
mode: "0600"
# variable_end_string: '[%'
# variable_start_string: '%]'
with_items:
- "footer.tex"
tags:
- footer
- name: Generate Templated Files
ansible.builtin.template:
src: "templates/{{ item }}"
dest: "{{ output_path }}/Report.md"
mode: "0600"
with_items:
- "Report.md"
tags:
- report

View File

@@ -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}
```
<!-- below are just forced line breaks -->
\
\
\
[![logo]({{ links.images.logo }}){ width=30% }]({{ company.website }})
```{=latex}
\end{center}
```
---
<!-- NOTE: Table of contents section only needs changed if new sections are
added.
-->
# 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, lets 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 youll 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:
<!-- NOTE: This should probably be a table in most cases, with a rank.-->
<!--
| Goal | Rank |
| ------ | ---- |
| A goal | 8 |
| B goal | 5 |
-->
<!-- WARNING: Add goals here -->
1. Add air conditioning.
# How Leaky Is Your House
<!-- NOTE: Several of the variables used in this section are defined in vars.sh
Do not change them here, instead update them in the vars.sh file.
-->
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
<!-- WARNING: Add HVAC observations here. -->
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
<!-- WARNING: Add house observations here. -->
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
<!-- WARNING: Add the project loads here. -->
| [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.
<!-- WARNING: Update this summary for the given project -->
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.
<!-- NOTE: Force a new page here, for images and sub-section heading to be on same page -->
\newpage
## Your Static Measurements
![True Flow Report][trueflow-image]{ height=50% }
<!-- WARNING: Summarize the static measurements here -->
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]
<!-- NOTE: Force a new page here, for images and sub-section heading to be on same page -->
\newpage
## Static Measurements Forecast
![True Flow Forecast][trueflow-forecast-image]{ height=50% }
<!-- WARNING: Summarize the forecast results below. -->
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.
<!-- WARNING: Add summary here -->
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]
<!-- prettier-ignore-start -->
<!-- NOTE: These are reference links for short form linking in the document.
This allows all the links to be changed / updated in one place.
However most do not need updated unless sections are added, besides the
document links, which are defined / setup in vars.sh.
-->
[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"
<!-- IMPORTANT: Take screen shots of the TrueFlow reports and add to the img
folder with names / path setup in vars.sh -->
<!-- default is img/trueflow.png -->
[trueflow-image]: "{{ links.images.trueflow }}"
<!-- default is img/forecast.png -->
[trueflow-forecast-image]: "{{ links.images.trueflow_forecast }}"
<!-- NOTE: These links are defined in vars.sh -->
[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 }}"
<!-- prettier-ignore-end -->

View File

@@ -0,0 +1,26 @@
% customize the footer
\usepackage{fancyhdr}
\pagestyle{fancy}
% clear all footers
\fancyfoot{}
% clear all headers
\fancyhead{}
% change font size on footer.
\newcommand{\changefont}{
\fontsize{8}{10}\selectfont
}
% NOTE: What is displayed in the footer of each page.
\fancyfoot[LE,LO]{
\href{ {{ company.website }} }
{\changefont\textbf{
{{ company.url_display_title }}
}}
}
\fancyfoot[RE,RO]{\textbf{
\changefont{
Phone: \href{tel:{{ company.phone }} }{
\color{orange}{{ company.phone }}
}
}
}}