open-fdd 0.1.1__py3-none-any.whl → 0.1.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- open_fdd/air_handling_unit/faults/__init__.py +2253 -0
- open_fdd/air_handling_unit/faults/fault_condition.py +38 -18
- open_fdd/air_handling_unit/faults/fault_condition_eight.py +91 -31
- open_fdd/air_handling_unit/faults/fault_condition_eleven.py +93 -35
- open_fdd/air_handling_unit/faults/fault_condition_fifteen.py +111 -49
- open_fdd/air_handling_unit/faults/fault_condition_five.py +89 -34
- open_fdd/air_handling_unit/faults/fault_condition_four.py +136 -61
- open_fdd/air_handling_unit/faults/fault_condition_fourteen.py +103 -40
- open_fdd/air_handling_unit/faults/fault_condition_nine.py +95 -35
- open_fdd/air_handling_unit/faults/fault_condition_one.py +83 -31
- open_fdd/air_handling_unit/faults/fault_condition_seven.py +85 -26
- open_fdd/air_handling_unit/faults/fault_condition_six.py +134 -73
- open_fdd/air_handling_unit/faults/fault_condition_ten.py +91 -30
- open_fdd/air_handling_unit/faults/fault_condition_thirteen.py +95 -34
- open_fdd/air_handling_unit/faults/fault_condition_three.py +84 -29
- open_fdd/air_handling_unit/faults/fault_condition_twelve.py +98 -37
- open_fdd/air_handling_unit/faults/fault_condition_two.py +84 -32
- open_fdd/air_handling_unit/faults/helper_utils.py +295 -93
- open_fdd/air_handling_unit/images/ahu1_fc1_2024-06_1.jpg +0 -0
- open_fdd/air_handling_unit/images/ahu1_fc1_2024-06_2.jpg +0 -0
- open_fdd/air_handling_unit/images/example1.jpg +0 -0
- open_fdd/air_handling_unit/images/example2.jpg +0 -0
- open_fdd/air_handling_unit/images/fc10_definition.png +0 -0
- open_fdd/air_handling_unit/images/fc11_definition.png +0 -0
- open_fdd/air_handling_unit/images/fc12_definition.png +0 -0
- open_fdd/air_handling_unit/images/fc13_definition.png +0 -0
- open_fdd/air_handling_unit/images/fc1_definition.png +0 -0
- open_fdd/air_handling_unit/images/fc1_report_screenshot_all.png +0 -0
- open_fdd/air_handling_unit/images/fc2_definition.png +0 -0
- open_fdd/air_handling_unit/images/fc3_definition.png +0 -0
- open_fdd/air_handling_unit/images/fc4_definition.png +0 -0
- open_fdd/air_handling_unit/images/fc5_definition.png +0 -0
- open_fdd/air_handling_unit/images/fc6_definition.png +0 -0
- open_fdd/air_handling_unit/images/fc7_definition.png +0 -0
- open_fdd/air_handling_unit/images/fc8_definition.png +0 -0
- open_fdd/air_handling_unit/images/fc9_definition.png +0 -0
- open_fdd/air_handling_unit/images/latex_generator.py +175 -0
- open_fdd/air_handling_unit/images/params.docx +0 -0
- open_fdd/air_handling_unit/images/params.pdf +0 -0
- open_fdd/air_handling_unit/images/plot_for_repo.png +0 -0
- open_fdd/air_handling_unit/reports/base_report.py +47 -0
- open_fdd/air_handling_unit/reports/report_fc7.py +3 -1
- open_fdd/tests/ahu/test_ahu_fc1.py +18 -1
- open_fdd/tests/ahu/test_ahu_fc10.py +1 -1
- open_fdd/tests/ahu/test_ahu_fc11.py +1 -1
- open_fdd/tests/ahu/test_ahu_fc12.py +1 -1
- open_fdd/tests/ahu/test_ahu_fc13.py +1 -1
- open_fdd/tests/ahu/test_ahu_fc14.py +1 -1
- open_fdd/tests/ahu/test_ahu_fc15.py +1 -1
- open_fdd/tests/ahu/test_ahu_fc2.py +1 -1
- open_fdd/tests/ahu/test_ahu_fc3.py +1 -1
- open_fdd/tests/ahu/test_ahu_fc4.py +2 -2
- open_fdd/tests/ahu/test_ahu_fc5.py +1 -1
- open_fdd/tests/ahu/test_ahu_fc6.py +2 -2
- open_fdd/tests/ahu/test_ahu_fc7.py +1 -1
- open_fdd/tests/ahu/test_ahu_fc8.py +1 -1
- open_fdd/tests/ahu/test_ahu_fc9.py +1 -1
- {open_fdd-0.1.1.dist-info → open_fdd-0.1.4.dist-info}/METADATA +34 -5
- open_fdd-0.1.4.dist-info/RECORD +82 -0
- open_fdd-0.1.1.dist-info/RECORD +0 -59
- {open_fdd-0.1.1.dist-info → open_fdd-0.1.4.dist-info}/LICENSE +0 -0
- {open_fdd-0.1.1.dist-info → open_fdd-0.1.4.dist-info}/WHEEL +0 -0
- {open_fdd-0.1.1.dist-info → open_fdd-0.1.4.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,175 @@
|
|
1
|
+
import streamlit as st
|
2
|
+
|
3
|
+
|
4
|
+
# On windows 10 python 3.10.6
|
5
|
+
# py -3.10 -m streamlit run .\latex_generator.py
|
6
|
+
|
7
|
+
# display Fault Equation 1
|
8
|
+
st.title("Fault Equation 1")
|
9
|
+
st.caption("Duct static pressure too low with fan at full speed")
|
10
|
+
st.latex(
|
11
|
+
r"""
|
12
|
+
DSP < DPSP - eDSP \quad \text{and} \quad VFDSPD \geq 99\% - eVFDSPD
|
13
|
+
"""
|
14
|
+
)
|
15
|
+
|
16
|
+
# Display legend
|
17
|
+
st.markdown("Legend:")
|
18
|
+
st.markdown("- DSP: Duct Static Pressure")
|
19
|
+
st.markdown("- DPSP: Duct Static Pressure Setpoint")
|
20
|
+
st.markdown("- VFDSPD: VFD Speed Reference in Percent")
|
21
|
+
st.markdown("- eVFDSPD: VFD Speed Reference Error Threshold")
|
22
|
+
|
23
|
+
|
24
|
+
# display Fault Equation 2
|
25
|
+
st.title("Fault Equation 2")
|
26
|
+
st.caption('Mix air temperature too low; should be between outside and return')
|
27
|
+
st.latex(r'''
|
28
|
+
MAT_{avg} + eMAT < \min[(RAT_{avg} - eRAT), - OAT_{avg} - eOAT)]
|
29
|
+
''')
|
30
|
+
|
31
|
+
|
32
|
+
# display Fault Equation 3
|
33
|
+
st.title("Fault Equation 3")
|
34
|
+
st.caption('Mix air temperature too high; should be between outside and return')
|
35
|
+
st.latex(r'''
|
36
|
+
MAT_{avg} - eMAT > \min[(RAT_{avg} + eRAT), - OAT_{avg} + eOAT)]
|
37
|
+
''')
|
38
|
+
|
39
|
+
|
40
|
+
# display Fault Equation 4
|
41
|
+
st.title("Fault Equation 4")
|
42
|
+
st.caption('Too many AHU operating state changes due to PID hunting and/or excessive cycling during low load conditions.')
|
43
|
+
st.latex(r'''
|
44
|
+
\Delta OS > \Delta OS_{max}
|
45
|
+
''')
|
46
|
+
|
47
|
+
|
48
|
+
# display Fault Equation 5
|
49
|
+
st.title("Fault Equation 5")
|
50
|
+
st.caption('Supply air temperature too high')
|
51
|
+
st.latex(r'''
|
52
|
+
SAT_{avg} + eSAT \leq MAT_{avg} - eMAT + \Delta TSF
|
53
|
+
''')
|
54
|
+
|
55
|
+
|
56
|
+
# display Fault Equation 6
|
57
|
+
st.title("Fault Equation 6")
|
58
|
+
st.caption('Temperature and outside air percentage deviation from setpoints')
|
59
|
+
st.latex(r'''
|
60
|
+
|\text{RAT}_{\text{avg}} - \text{OAT}_{\text{avg}}| \geq \Delta T_{\text{min}} \quad \text{and} \quad |\%OA - \%OA_{\text{min}}| > eF
|
61
|
+
''')
|
62
|
+
|
63
|
+
|
64
|
+
# display Fault Equation 7
|
65
|
+
st.title("Fault Equation 7")
|
66
|
+
st.caption('Supply air temperature too low and heating coil status')
|
67
|
+
st.latex(r'''
|
68
|
+
\text{SAT}_{\text{avg}} < \text{SATSP} - eSAT \quad \text{and} \quad \text{HC} \geq 99\%
|
69
|
+
''')
|
70
|
+
|
71
|
+
# display Fault Equation 8
|
72
|
+
st.title("Fault Equation 8")
|
73
|
+
st.caption('Deviation between supply air temperature and mixed air temperature')
|
74
|
+
st.latex(r'''
|
75
|
+
| \text{SAT}_{\text{avg}} - \Delta \text{TSF} - \text{MAT}_{\text{avg}} | > \sqrt{{eSAT}^2 + {eMAT}^2}
|
76
|
+
''')
|
77
|
+
|
78
|
+
|
79
|
+
# display Fault Equation 9
|
80
|
+
st.title("Fault Equation 9")
|
81
|
+
st.caption('Outside air temperature deviation from setpoint')
|
82
|
+
st.latex(r'''
|
83
|
+
\text{OAT}_{\text{avg}} - eOAT > \text{SATSP} - \Delta \text{SF} + eSAT
|
84
|
+
''')
|
85
|
+
|
86
|
+
# display Fault Equation 10
|
87
|
+
st.title("Fault Equation 10")
|
88
|
+
st.caption('Temperature difference between mixed air and outside air')
|
89
|
+
st.latex(r'''
|
90
|
+
| \text{MAT}_{\text{avg}} - \text{OAT}_{\text{avg}} | > \sqrt{eMAT^2 + eOAT^2}
|
91
|
+
''')
|
92
|
+
|
93
|
+
# display Fault Equation 11
|
94
|
+
st.title("Fault Equation 11")
|
95
|
+
st.caption('Outside air temperature and supply air temperature deviation')
|
96
|
+
st.latex(r'''
|
97
|
+
\text{OAT}_{\text{avg}} + eOAT < \text{SATSP} - \Delta \text{TSF} - eSAT
|
98
|
+
''')
|
99
|
+
|
100
|
+
# display Fault Equation 12
|
101
|
+
st.title("Fault Equation 12")
|
102
|
+
st.caption('Supply air temperature deviation from mixed air temperature')
|
103
|
+
st.latex(r'''
|
104
|
+
\text{SAT}_{\text{avg}} - eSAT - \Delta \text{TSF} \geq \text{MAT}_{\text{avg}} + eMAT
|
105
|
+
''')
|
106
|
+
|
107
|
+
# display Fault Equation 13
|
108
|
+
st.title("Fault Equation 13")
|
109
|
+
st.caption('Supply air temperature too high')
|
110
|
+
st.latex(r'''
|
111
|
+
\text{SAT}_{\text{avg}} < \text{SATSP} + eSAT \quad \text{and} \quad \text{CC} \geq 99\%
|
112
|
+
''')
|
113
|
+
|
114
|
+
|
115
|
+
st.title("find_closest_weather_dates Function")
|
116
|
+
st.caption('Finding closest weather dates based on given criteria')
|
117
|
+
st.latex(r'''
|
118
|
+
1. A' = \{a \in A : a < d_{test}\} \\
|
119
|
+
2. B' = \{b \in B : b < d_{test}\} \\
|
120
|
+
3. C = \{a \in A' : a \notin B'\} \\
|
121
|
+
4. \text{if } |C| < 10 \text{ then remove } \max(A') \text{ and repeat step 3} \\
|
122
|
+
5. A = A \cap C, \text{calculate } \mu(A)
|
123
|
+
''')
|
124
|
+
st.caption('''
|
125
|
+
In this notation:
|
126
|
+
- $A$ represents the "all_data" dataset.
|
127
|
+
- $B$ represents the "suitable_baseline_no" dataset.
|
128
|
+
- $d_{test}$ is the "test_case_date".
|
129
|
+
- $A'$ and $B'$ are subsets of $A$ and $B$ that only include dates prior to $d_{test}$.
|
130
|
+
- $C$ is a set of dates in $A'$ not found in $B'$.
|
131
|
+
- $|C|$ represents the count of elements in set $C$.
|
132
|
+
- $\max(A')$ is the latest date in $A'$.
|
133
|
+
- $\mu(A)$ is the mean of the remaining elements in $A$ after filtering by set $C$.
|
134
|
+
''')
|
135
|
+
|
136
|
+
|
137
|
+
st.title("find_previous_10_days Function")
|
138
|
+
st.caption('Finding previous 10 weekdays based on given criteria')
|
139
|
+
st.latex(r'''
|
140
|
+
1. A' = \{a \in A : a < d_{test}\} \\
|
141
|
+
2. B' = \{b \in B : b < d_{test}\} \\
|
142
|
+
3. C = \{a \in A' : a \notin B'\} \\
|
143
|
+
4. \text{if } |C| < 10 \text{ then remove } \max(A') \text{ and repeat step 3} \\
|
144
|
+
5. A = A \cap C
|
145
|
+
''')
|
146
|
+
st.caption('''
|
147
|
+
In this notation:
|
148
|
+
- $A$ represents the "all_data" dataset.
|
149
|
+
- $B$ represents the "suitable_baseline_no" dataset.
|
150
|
+
- $d_{test}$ is the "test_case_date".
|
151
|
+
- $A'$ and $B'$ are subsets of $A$ and $B$ that only include dates prior to $d_{test}$.
|
152
|
+
- $C$ is a set of dates in $A'$ not found in $B'$.
|
153
|
+
- $|C|$ represents the count of elements in set $C$.
|
154
|
+
- $\max(A')$ is the latest date in $A'$.
|
155
|
+
''')
|
156
|
+
|
157
|
+
|
158
|
+
st.title("calculate_power_averages Function")
|
159
|
+
st.caption('Calculating average power for each type and time step')
|
160
|
+
st.latex(r'''
|
161
|
+
1. P_{type,i} = \{p : p \text{ is a power value at time step } t_i\} \quad \text{for each type and } i \in \{1,2,\dots,96\} \\
|
162
|
+
2. A_{type,i} = \frac{1}{|P_{type,i}|}\sum_{p \in P_{type,i}} p \quad \text{for each type and } i \in \{1,2,\dots,96\}
|
163
|
+
''')
|
164
|
+
st.caption('''
|
165
|
+
In this notation:
|
166
|
+
- $P_{type,i}$ represents the set of power values at time step $t_i$ for a specific power type (main, ahu, or solar).
|
167
|
+
- $p$ represents a power value in the set $P_{type,i}$.
|
168
|
+
- $|P_{type,i}|$ represents the count of elements in set $P_{type,i}$.
|
169
|
+
- $A_{type,i}$ represents the average power at time step $t_i$ for a specific power type.
|
170
|
+
''')
|
171
|
+
|
172
|
+
|
173
|
+
|
174
|
+
|
175
|
+
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,47 @@
|
|
1
|
+
import matplotlib.pyplot as plt
|
2
|
+
import pandas as pd
|
3
|
+
from io import BytesIO
|
4
|
+
import sys
|
5
|
+
|
6
|
+
class BaseReport:
|
7
|
+
def __init__(self, config):
|
8
|
+
self.config = config
|
9
|
+
|
10
|
+
def summarize_fault_times(self, df: pd.DataFrame, output_col: str) -> dict:
|
11
|
+
delta = df.index.to_series().diff().dt.total_seconds()
|
12
|
+
total_days = round(delta.sum() / 86400, 2)
|
13
|
+
total_hours = round(delta.sum() / 3600, 2)
|
14
|
+
hours_fault_mode = (delta * df[output_col]).sum() / 3600
|
15
|
+
percent_true = round(df[output_col].mean() * 100, 2)
|
16
|
+
percent_false = round((100 - percent_true), 2)
|
17
|
+
|
18
|
+
# Calculate motor runtime
|
19
|
+
motor_on = df[self.config['SUPPLY_VFD_SPEED_COL']].gt(.01).astype(int)
|
20
|
+
hours_motor_runtime = round((delta * motor_on).sum() / 3600, 2)
|
21
|
+
|
22
|
+
summary = {
|
23
|
+
'total_days': total_days,
|
24
|
+
'total_hours': total_hours,
|
25
|
+
'hours_fault_mode': hours_fault_mode,
|
26
|
+
'percent_true': percent_true,
|
27
|
+
'percent_false': percent_false,
|
28
|
+
'hours_motor_runtime': hours_motor_runtime
|
29
|
+
}
|
30
|
+
return summary
|
31
|
+
|
32
|
+
def create_hist_plot(self, df: pd.DataFrame, output_col: str):
|
33
|
+
df["hour_of_the_day"] = df.index.hour.where(df[output_col] == 1)
|
34
|
+
df = df.dropna(subset=["hour_of_the_day"])
|
35
|
+
print()
|
36
|
+
print("Time-of-day Histogram Data")
|
37
|
+
print(df["hour_of_the_day"])
|
38
|
+
print()
|
39
|
+
sys.stdout.flush()
|
40
|
+
|
41
|
+
fig, ax = plt.subplots(tight_layout=True, figsize=(25, 8))
|
42
|
+
ax.hist(df.hour_of_the_day.dropna(), bins=24)
|
43
|
+
ax.set_xlabel("Hour of the Day")
|
44
|
+
ax.set_ylabel("Frequency")
|
45
|
+
ax.set_title("Hour-Of-Day When Fault Flag is TRUE")
|
46
|
+
plt.show()
|
47
|
+
plt.close()
|
@@ -82,7 +82,9 @@ class FaultCodeSevenReport:
|
|
82
82
|
plt.close()
|
83
83
|
|
84
84
|
def display_report_in_ipython(self, df: pd.DataFrame, output_col: str = "fc7_flag"):
|
85
|
-
print(
|
85
|
+
print(
|
86
|
+
"Fault Condition 7: Supply air temperature too low its not making supply air temperature setpoint in full heating mode"
|
87
|
+
)
|
86
88
|
|
87
89
|
self.create_plot(df, output_col)
|
88
90
|
|
@@ -1,7 +1,9 @@
|
|
1
1
|
import pandas as pd
|
2
2
|
import pytest
|
3
|
-
from open_fdd.air_handling_unit.faults
|
3
|
+
from open_fdd.air_handling_unit.faults import FaultConditionOne
|
4
4
|
from open_fdd.air_handling_unit.faults.helper_utils import HelperUtils
|
5
|
+
from open_fdd.air_handling_unit.faults.fault_condition import MissingColumnError
|
6
|
+
|
5
7
|
|
6
8
|
# Constants
|
7
9
|
TEST_VFD_ERR_THRESHOLD = 0.05
|
@@ -27,6 +29,21 @@ fault_condition_params = {
|
|
27
29
|
fc1 = FaultConditionOne(fault_condition_params)
|
28
30
|
|
29
31
|
|
32
|
+
class TestMissingColumn:
|
33
|
+
|
34
|
+
def missing_col_df(self) -> pd.DataFrame:
|
35
|
+
data = {
|
36
|
+
TEST_DUCT_STATIC_COL: [0.99, 0.99, 0.99, 0.99, 0.99, 0.99],
|
37
|
+
# Missing TEST_SUPPLY_VFD_SPEED_COL
|
38
|
+
TEST_DUCT_STATIC_SETPOINT_COL: [1.0, 1.0, 1.0, 1.0, 1.0, 1.0],
|
39
|
+
}
|
40
|
+
return pd.DataFrame(data)
|
41
|
+
|
42
|
+
def test_missing_column(self):
|
43
|
+
with pytest.raises(MissingColumnError):
|
44
|
+
fc1.apply(self.missing_col_df())
|
45
|
+
|
46
|
+
|
30
47
|
class TestNoFault:
|
31
48
|
|
32
49
|
def no_fault_df(self) -> pd.DataFrame:
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import pandas as pd
|
2
2
|
import pytest
|
3
|
-
from open_fdd.air_handling_unit.faults
|
3
|
+
from open_fdd.air_handling_unit.faults import FaultConditionTen
|
4
4
|
from open_fdd.air_handling_unit.faults.helper_utils import HelperUtils
|
5
5
|
|
6
6
|
"""
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import pandas as pd
|
2
2
|
import pytest
|
3
|
-
from open_fdd.air_handling_unit.faults
|
3
|
+
from open_fdd.air_handling_unit.faults import FaultConditionTwo
|
4
4
|
from open_fdd.air_handling_unit.faults.helper_utils import HelperUtils
|
5
5
|
|
6
6
|
"""
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import pandas as pd
|
2
2
|
import pytest
|
3
|
-
from open_fdd.air_handling_unit.faults
|
3
|
+
from open_fdd.air_handling_unit.faults import FaultConditionThree
|
4
4
|
from open_fdd.air_handling_unit.faults.helper_utils import HelperUtils
|
5
5
|
|
6
6
|
"""
|
@@ -1,12 +1,12 @@
|
|
1
1
|
import pandas as pd
|
2
2
|
import pytest
|
3
|
-
from open_fdd.air_handling_unit.faults
|
3
|
+
from open_fdd.air_handling_unit.faults import FaultConditionFour
|
4
4
|
from open_fdd.air_handling_unit.faults.helper_utils import HelperUtils
|
5
5
|
from datetime import datetime, timezone
|
6
6
|
|
7
7
|
"""
|
8
8
|
To see print statements in pytest run with:
|
9
|
-
$ py -3.12 -m pytest
|
9
|
+
$ py -3.12 -m pytest tests/ahu/test_ahu_fc4.py -rP -s
|
10
10
|
|
11
11
|
Too much hunting in control system
|
12
12
|
OS state changes greater than 7 in an hour
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import pandas as pd
|
2
2
|
import pytest
|
3
|
-
from open_fdd.air_handling_unit.faults
|
3
|
+
from open_fdd.air_handling_unit.faults import FaultConditionFive
|
4
4
|
from open_fdd.air_handling_unit.faults.helper_utils import HelperUtils
|
5
5
|
|
6
6
|
"""
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import pandas as pd
|
2
2
|
import pytest
|
3
|
-
from open_fdd.air_handling_unit.faults
|
3
|
+
from open_fdd.air_handling_unit.faults import FaultConditionSix
|
4
4
|
from open_fdd.air_handling_unit.faults.helper_utils import HelperUtils
|
5
5
|
|
6
6
|
"""
|
@@ -12,7 +12,7 @@ OA FRACTION TOO LOW OR TOO HIGH; SHOULD BE EQUAL TO %OAmin
|
|
12
12
|
|
13
13
|
# Constants
|
14
14
|
TEST_AIRFLOW_ERR_THRES = 0.3
|
15
|
-
TEST_AHU_MIN_CFM_DESIGN = 3000
|
15
|
+
TEST_AHU_MIN_CFM_DESIGN = 3000.0
|
16
16
|
TEST_OAT_DEGF_ERR_THRES = 5.0
|
17
17
|
TEST_RAT_DEGF_ERR_THRES = 2.0
|
18
18
|
TEST_DELTA_TEMP_MIN = 10.0
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import pandas as pd
|
2
2
|
import pytest
|
3
|
-
from open_fdd.air_handling_unit.faults
|
3
|
+
from open_fdd.air_handling_unit.faults import FaultConditionSeven
|
4
4
|
from open_fdd.air_handling_unit.faults.helper_utils import HelperUtils
|
5
5
|
|
6
6
|
"""
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import pandas as pd
|
2
2
|
import pytest
|
3
|
-
from open_fdd.air_handling_unit.faults
|
3
|
+
from open_fdd.air_handling_unit.faults import FaultConditionEight
|
4
4
|
from open_fdd.air_handling_unit.faults.helper_utils import HelperUtils
|
5
5
|
|
6
6
|
"""
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import pandas as pd
|
2
2
|
import pytest
|
3
|
-
from open_fdd.air_handling_unit.faults
|
3
|
+
from open_fdd.air_handling_unit.faults import FaultConditionNine
|
4
4
|
from open_fdd.air_handling_unit.faults.helper_utils import HelperUtils
|
5
5
|
|
6
6
|
"""
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: open_fdd
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.4
|
4
4
|
Summary: A package for fault detection and diagnosis in HVAC systems
|
5
5
|
Home-page: https://github.com/bbartling/open-fdd
|
6
6
|
Author: Ben Bartling
|
@@ -20,6 +20,7 @@ Requires-Dist: pytest
|
|
20
20
|

|
21
21
|

|
22
22
|

|
23
|
+

|
23
24
|
|
24
25
|
|
25
26
|

|
@@ -29,17 +30,45 @@ This is a Python-based Fault Detection and Diagnostics (FDD) tool for running fa
|
|
29
30
|
|
30
31
|
|
31
32
|
## Getting Setup
|
32
|
-
|
33
|
-
|
34
|
-
This project is on PyPI now so get setup with this command using the Python package manager called pip.
|
33
|
+
This project is now available on PyPI, making it easy to set up with the Python package manager, pip. You can install the package using the following command:
|
35
34
|
|
36
35
|
```bash
|
37
36
|
pip install open-fdd
|
38
37
|
```
|
39
38
|
|
40
|
-
|
39
|
+
For running Jupyter notebooks, I recommend using Visual Studio Code with the Jupyter notebook extension installed, which offers a seamless experience directly within the editor. Be sure to explore the `examples` directory for Jupyter notebook tutorials. If you have your own FDD experiences to share, feel free to contribute by creating a notebook (`.ipynb`). You’re welcome to reach out to me directly, and I can push your example to GitHub on your behalf, which might be a simpler process than submitting a pull request (PR), especially if you're just sharing an example rather than developing `open-fdd`.
|
40
|
+
|
41
|
+
## Project goals
|
42
|
+
These are some basic project goals to make this into an interactive FDD application.
|
43
|
+
- [x] finish `air_handling_unit` faults and reports based on ASHRAE and NIST
|
44
|
+
- [x] publish to PyPI as Python library
|
45
|
+
- [ ] make a few IPython notebook tutorials AHU FDD examples with `BRICK` meta data integration.
|
46
|
+
- [ ] make a guide for fault `parameters` like error thresholds, etc.
|
47
|
+
- [ ] make `central_plant` faults, IPython reports, and examples.
|
48
|
+
- [ ] make `energy_efficiency` faults, IPython reports, and examples to `optimize` in reducing energy consumption.
|
49
|
+
- [ ] make `metering`, faults, IPython reports, and examples to possibly model utility metering data.
|
50
|
+
- [ ] create SQL example to read data from time series db and write back to SQL to then read faults in Grafana.
|
51
|
+
- [ ] other? Certainly! As ChatGPT would eagerly say!
|
52
|
+
|
41
53
|
|
42
54
|
## Contribute
|
55
|
+
|
56
|
+
If you have suggestions for improving developer best practices or solutions, please feel free to reach out to me directly using my contact information or Git issue/discussion. I primarily work on Windows with multiple versions of Python installed, with Python 3.12.x as my default version. You can download the latest version of Python here:
|
57
|
+
* https://www.python.org/downloads/
|
58
|
+
|
59
|
+
1. **Adding New Faults and Reports:**
|
60
|
+
Developers will need to `> py -3.12 -m pip install black pytest`. When adding new faults and reports, I usually run `> py -3.12 -m pip install .` in the cloned project directory. I continuously uninstall with `> py -3.12 -m pip uninstall open-fdd` and reinstall locally until I'm satisfied with the changes.
|
61
|
+
|
62
|
+
2. **Testing Fault Logic:**
|
63
|
+
All fault logic is rigorously tested using `pytest`. You can run the tests with `> py -m pytest`.
|
64
|
+
|
65
|
+
3. **Formatting with Black:**
|
66
|
+
To ensure code consistency, I use Black for formatting. Run `> py -m black .` to format the code and check it with `> py -m black --check .`
|
67
|
+
|
68
|
+
4. **Pushing to GitHub:**
|
69
|
+
After making changes, and the steps above are successful push them to GitHub in a pull request. The GitHub Actions workflow will automatically run `pytest` and `black` to ensure the build is successful.
|
70
|
+
|
71
|
+
|
43
72
|
This project is a community-driven initiative, focusing on the development of free and open-source tools. I believe that Fault Detection and Diagnostics (FDD) should be free and accessible to anyone who wants to try it out, embodying the spirit of open-source philosophy. Additionally, this project aims to serve as an educational resource, empowering individuals to learn about and implement FDD in their own systems. As someone wisely said, `"Knowledge should be shared, not hoarded,"` and this project strives to put that wisdom into practice.
|
44
73
|
|
45
74
|
Got any ideas or questions? Submit a Git issue or start a Discussion...
|
@@ -0,0 +1,82 @@
|
|
1
|
+
open_fdd/__init__.py,sha256=iGj8QTOZJUTE4nNnBiCHXEXsOdV6YvKcGiLrnOusJCg,1411
|
2
|
+
open_fdd/air_handling_unit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
3
|
+
open_fdd/air_handling_unit/faults/__init__.py,sha256=Rq7AfQ7sRWneAfqr4v8R7OwNmLifmmfOH1UaA2iZbRM,90291
|
4
|
+
open_fdd/air_handling_unit/faults/fault_condition.py,sha256=UN2_k2AZWMDoO4oPAnJW3fvhkHlMkLXZikzU2lXAOuQ,2364
|
5
|
+
open_fdd/air_handling_unit/faults/fault_condition_eight.py,sha256=nfL66m5toN0fvIjUu02T7AErsTV0rR8kVIErfaqIeic,4603
|
6
|
+
open_fdd/air_handling_unit/faults/fault_condition_eleven.py,sha256=AgQnxP46-KGI-4Hk55gKfPGhauoxpFppdmrrBv-1kto,4699
|
7
|
+
open_fdd/air_handling_unit/faults/fault_condition_fifteen.py,sha256=QCn_9FF1p7tqm7qdkyIDOqozP988IeuHzOx0LsmyHAU,5841
|
8
|
+
open_fdd/air_handling_unit/faults/fault_condition_five.py,sha256=Dy6HlvCnM5-BN0LvFLoQFk8BHyKSxBWMCFC_6Yd0K4I,4574
|
9
|
+
open_fdd/air_handling_unit/faults/fault_condition_four.py,sha256=os-LIW1Hc1xl6Auna6IJXJFd6CUNboVFwG_A3VWFC8o,6710
|
10
|
+
open_fdd/air_handling_unit/faults/fault_condition_fourteen.py,sha256=AzcKiK2h3bV5vkbd8ZvqqoaOD372I2CYZHRL1wjHDTo,5480
|
11
|
+
open_fdd/air_handling_unit/faults/fault_condition_nine.py,sha256=atXgzyHuy0Rf4RAA2EAM_qTnlgERtIEDoXvJzulJ08E,4780
|
12
|
+
open_fdd/air_handling_unit/faults/fault_condition_one.py,sha256=V2hnTb6FdGTR1Z0IowsR2UdUVzI1nD5EFnaSIADBaEc,4240
|
13
|
+
open_fdd/air_handling_unit/faults/fault_condition_seven.py,sha256=SKczqGhIkDgyaT5NyyalF5lrc9WFISOQfWh7-PdmVO8,4232
|
14
|
+
open_fdd/air_handling_unit/faults/fault_condition_six.py,sha256=Ot0SZJIAShs9U5e495n5hvtWvelF4Ycx0SDDsQUviQE,7045
|
15
|
+
open_fdd/air_handling_unit/faults/fault_condition_ten.py,sha256=Q-EBH6_IuVHespev7NTF2QxbYTFOV8GmfvKVpDj2gQY,4581
|
16
|
+
open_fdd/air_handling_unit/faults/fault_condition_thirteen.py,sha256=NL_q7fEbTqGoYmvOZocLxHgbc6iCfoBMUvCRNpPVpgs,4718
|
17
|
+
open_fdd/air_handling_unit/faults/fault_condition_three.py,sha256=cmcIA_QEUjiz5FIYlx9CqnBp7phU4ZopRBkfZpzqGQg,4309
|
18
|
+
open_fdd/air_handling_unit/faults/fault_condition_twelve.py,sha256=QujZrpRPp-58BL4iTJWmexSrp0WiisInKJIHKe9luyk,5066
|
19
|
+
open_fdd/air_handling_unit/faults/fault_condition_two.py,sha256=h_psJQHPYBkc8hAK-CbdFx7ySbaJv_XQFS_GxvfM9KE,4305
|
20
|
+
open_fdd/air_handling_unit/faults/helper_utils.py,sha256=-Bd1mMMLnFmpNPe7eC23kMJxPtazsIyz5P7W6Yqlu4w,12580
|
21
|
+
open_fdd/air_handling_unit/faults/shared_utils.py,sha256=Kp8ZUBhtrh-jU2Q_bbXTpnbVVUAyacp41tDMknY50i4,2252
|
22
|
+
open_fdd/air_handling_unit/images/ahu1_fc1_2024-06_1.jpg,sha256=3dHZyEm_nS4p7-acZprIpZyuU65_IJKk2sixJBf7Ans,444019
|
23
|
+
open_fdd/air_handling_unit/images/ahu1_fc1_2024-06_2.jpg,sha256=kjWCDhRkpxiigl9VJnnMBlETA_FWHZtAn9oqKuQl1M4,392583
|
24
|
+
open_fdd/air_handling_unit/images/example1.jpg,sha256=3dHZyEm_nS4p7-acZprIpZyuU65_IJKk2sixJBf7Ans,444019
|
25
|
+
open_fdd/air_handling_unit/images/example2.jpg,sha256=kjWCDhRkpxiigl9VJnnMBlETA_FWHZtAn9oqKuQl1M4,392583
|
26
|
+
open_fdd/air_handling_unit/images/fc10_definition.png,sha256=wE4tg3BjUDnEfeM1XOYTHAcnl4yUJnkoUrVOipr4Ivo,16603
|
27
|
+
open_fdd/air_handling_unit/images/fc11_definition.png,sha256=Vp_mZxgPGsB0KsEeazwaI3NcgwvLDBBWzutUh8c2Kcg,14534
|
28
|
+
open_fdd/air_handling_unit/images/fc12_definition.png,sha256=CZUukCTaQ2DlDRMk-EdZyqXr_Wne-EKUYuYn_ly82Hc,14254
|
29
|
+
open_fdd/air_handling_unit/images/fc13_definition.png,sha256=qcYnTHtnUwfAaLYFVebcbYtjVSgxSQKqZTi_VwHymgo,16733
|
30
|
+
open_fdd/air_handling_unit/images/fc1_definition.png,sha256=htGaVcaem2CI47bSq_Y6mBdmwbpUHeaQW2oTm4EREbc,8164
|
31
|
+
open_fdd/air_handling_unit/images/fc1_report_screenshot_all.png,sha256=U3IhLL2nJ3k-UF-smPd1FPAGnznBxsrbBkj8B3ZtwyM,184473
|
32
|
+
open_fdd/air_handling_unit/images/fc2_definition.png,sha256=qnFzSrXsj_mwhTq4Zi-NT7kwCTz91HKPGHsh77ov5Fs,9124
|
33
|
+
open_fdd/air_handling_unit/images/fc3_definition.png,sha256=AE0cecNhMiHHsMBQAPWF-cMnLAWK1A27SASeoNoe76w,9118
|
34
|
+
open_fdd/air_handling_unit/images/fc4_definition.png,sha256=66NztKUPH0R3nhNgVnxzN3UgMLhE-6mUKxhnwtkRN90,4245
|
35
|
+
open_fdd/air_handling_unit/images/fc5_definition.png,sha256=xQMxDnStccm8f0KIFL-BpG3yQv4fnl4M9t_9VMVOpWg,14634
|
36
|
+
open_fdd/air_handling_unit/images/fc6_definition.png,sha256=MPV8QcnSnRRNq465dee5Q0Uw5e2ZV_WoIFBVAvYLCVc,20777
|
37
|
+
open_fdd/air_handling_unit/images/fc7_definition.png,sha256=O6bsh0kG4sHeWCDSZuBHjDZ3xDFesSY42yifqhWXMMo,15849
|
38
|
+
open_fdd/air_handling_unit/images/fc8_definition.png,sha256=Cce-_mmZA0QbsbWETwOCr45CJiJLR1vHPQNmB9dQZ6g,19702
|
39
|
+
open_fdd/air_handling_unit/images/fc9_definition.png,sha256=9r7QPViCQ0LItI4NdJsD7VfZjdA4RUZuh08BzxVUnfU,14913
|
40
|
+
open_fdd/air_handling_unit/images/latex_generator.py,sha256=9kotpUZjQrECXiB8ewcvYBLMEVvy9-r1-HnbpPb-Xr0,5976
|
41
|
+
open_fdd/air_handling_unit/images/params.docx,sha256=_mh1G-avi-lsssaW_qH33vGVaYwS_XL_IOQweYpQvAo,157634
|
42
|
+
open_fdd/air_handling_unit/images/params.pdf,sha256=2rmxh2yxuB7x3Q2Jyq0MnFoTJAQqxwIoxGvzzJirWkU,175678
|
43
|
+
open_fdd/air_handling_unit/images/plot_for_repo.png,sha256=u4OIzZUyGk6G4o1AusEERUU6aen4vVX-CGPl14P3qkA,651969
|
44
|
+
open_fdd/air_handling_unit/reports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
45
|
+
open_fdd/air_handling_unit/reports/base_report.py,sha256=oZX6_qXUjuPEHKpF89DhgpPbAkhHeoo3jpDL30u4njs,1778
|
46
|
+
open_fdd/air_handling_unit/reports/report_fc1.py,sha256=ZlfTP4Pzv0l0hBHRWmTFMXKWPnuMNW38mHPPD8QW460,4565
|
47
|
+
open_fdd/air_handling_unit/reports/report_fc10.py,sha256=Dgh0L4A-D-VYqTfVcMwhxdw67R-31c24ydtrpJ-gLyU,5179
|
48
|
+
open_fdd/air_handling_unit/reports/report_fc11.py,sha256=fLb004y59i_2LegfGlpgEpEzQadqsCWrJPNLZ6obgqg,5197
|
49
|
+
open_fdd/air_handling_unit/reports/report_fc12.py,sha256=MVjoHul32K0hJCP4WL9bLd6g55HMcKLdxzvPN94AlDA,5090
|
50
|
+
open_fdd/air_handling_unit/reports/report_fc13.py,sha256=YjU6PBJl2ae_2WD2n-GoRGmwj6BtjQFClcCibHgcJmA,5026
|
51
|
+
open_fdd/air_handling_unit/reports/report_fc14.py,sha256=j_o3X6BFYhW7IBwGZATQ7afgiXlKmUMGbGY7UuSwfD4,4832
|
52
|
+
open_fdd/air_handling_unit/reports/report_fc15.py,sha256=Rg4NiheUsCmSxv42s7OFKRD7dweGZxtN83I5iDDzNoo,4831
|
53
|
+
open_fdd/air_handling_unit/reports/report_fc2.py,sha256=ao_2ZeY10BLJ0GEDMMGAuD-8FbHBCGnIvQg9rF6om_U,4840
|
54
|
+
open_fdd/air_handling_unit/reports/report_fc3.py,sha256=xyGjwYxJU2kveVJHLzAM3T_MLFlUZNQGBUyJ-YTjAsk,4843
|
55
|
+
open_fdd/air_handling_unit/reports/report_fc4.py,sha256=0PpPwPnzeUZZybad04IslroBoCcIseDGq5it389wx9s,6052
|
56
|
+
open_fdd/air_handling_unit/reports/report_fc5.py,sha256=welqsYh9TzIfpbdl3i9pvpaDWTsz_rnFbem6lXvz5K0,5699
|
57
|
+
open_fdd/air_handling_unit/reports/report_fc6.py,sha256=R-2OONOZS1ZFLkUBv0syrZ7XjrR0TSwI1Wu70opTVeM,6042
|
58
|
+
open_fdd/air_handling_unit/reports/report_fc7.py,sha256=5j9IAEgmjMqSbpQcStCJZB46TmRPtVSDKnGUutSeVxs,5327
|
59
|
+
open_fdd/air_handling_unit/reports/report_fc8.py,sha256=3jZPq2piethtqly1faSc8hk0aFCbQe2Y0RMNv3DFzpk,5057
|
60
|
+
open_fdd/air_handling_unit/reports/report_fc9.py,sha256=hJbYMYnwptVSEI2NVdnV3Ads-h_9Hl4oFD1HDDLZWHQ,4909
|
61
|
+
open_fdd/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
62
|
+
open_fdd/tests/ahu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
63
|
+
open_fdd/tests/ahu/test_ahu_fc1.py,sha256=ojpdYGZtuIYAKnZ4W9KhxQuoyXnGEI5N7braQXh3kAw,5437
|
64
|
+
open_fdd/tests/ahu/test_ahu_fc10.py,sha256=niYL7fi6OlgP0wnF8hNh9A07PLzHiRZkyRkrA1zoL2s,4577
|
65
|
+
open_fdd/tests/ahu/test_ahu_fc11.py,sha256=mdXlGiEMPkPfshf3NN_nJavL74e4HCmkJQMu86aZc6Q,4723
|
66
|
+
open_fdd/tests/ahu/test_ahu_fc12.py,sha256=5T-XcM6xm9KHrc121uPGC9JWLCYehrAYk0KcbmGgYjw,5848
|
67
|
+
open_fdd/tests/ahu/test_ahu_fc13.py,sha256=vJlSy4e2WV9hx02P0SiJ75I1DWL2lZ0p7-AWlw97pks,5725
|
68
|
+
open_fdd/tests/ahu/test_ahu_fc14.py,sha256=MU0LKqIuoQ_dJ0Kij8_A0YyimCMvUwL6IlMwpQhDbqI,8052
|
69
|
+
open_fdd/tests/ahu/test_ahu_fc15.py,sha256=SIolJ9vnJwnpKfRW2ALugYWySuIiZ9_repWP9fdb5H4,7661
|
70
|
+
open_fdd/tests/ahu/test_ahu_fc2.py,sha256=CjmO_WUyaSHs17ifCCew3GBJ43nYG55uGL0vHDZpAq8,4736
|
71
|
+
open_fdd/tests/ahu/test_ahu_fc3.py,sha256=NB6pOXDS-R4P0LNoRN8ItAqhhLnGnGuAHZha32Qw-hE,4658
|
72
|
+
open_fdd/tests/ahu/test_ahu_fc4.py,sha256=vV8jEnFuNGLfhCoTVz29RsIcoDpDOMWg722G0aBEXaE,6304
|
73
|
+
open_fdd/tests/ahu/test_ahu_fc5.py,sha256=TpSQTBIF591Q3mVaBeJ6HyqPWhVHmD_gSZNEIFT6yyg,6538
|
74
|
+
open_fdd/tests/ahu/test_ahu_fc6.py,sha256=66dwv0EBU_ujZK-J9Ki5a3fnXlk17nOwmtKDiQOHdbM,10351
|
75
|
+
open_fdd/tests/ahu/test_ahu_fc7.py,sha256=sABbw2m7WlAXbsqfDD323vfEfg606ThI0QzQyB-OjFo,2469
|
76
|
+
open_fdd/tests/ahu/test_ahu_fc8.py,sha256=UZy6BP2PgV1FROUPqMORTx8YnT5ZvqVDhut_Ar81494,4663
|
77
|
+
open_fdd/tests/ahu/test_ahu_fc9.py,sha256=b-eIzhNzjZUjVNsP0JAHkOgZu-BtDuPeNnblVVm-jU8,4796
|
78
|
+
open_fdd-0.1.4.dist-info/LICENSE,sha256=eghao_GGx_0gB2Sll3x2vV29knONEzUQKrkaXpX1F7w,1087
|
79
|
+
open_fdd-0.1.4.dist-info/METADATA,sha256=mnTD5a5-ob9hYjWMbcfxHdB8RAIJ-GOWC33kWtc_JJw,6420
|
80
|
+
open_fdd-0.1.4.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
|
81
|
+
open_fdd-0.1.4.dist-info/top_level.txt,sha256=Q7sB6UB2d8Ch1v_xIsTiNegmgcCXPkwkrxK3ug6VEOs,9
|
82
|
+
open_fdd-0.1.4.dist-info/RECORD,,
|
open_fdd-0.1.1.dist-info/RECORD
DELETED
@@ -1,59 +0,0 @@
|
|
1
|
-
open_fdd/__init__.py,sha256=iGj8QTOZJUTE4nNnBiCHXEXsOdV6YvKcGiLrnOusJCg,1411
|
2
|
-
open_fdd/air_handling_unit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
3
|
-
open_fdd/air_handling_unit/faults/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
|
-
open_fdd/air_handling_unit/faults/fault_condition.py,sha256=UHMnwTaMJkxsUP2h9NXyVeDvIR2c7d96xkiigwf0CmU,1674
|
5
|
-
open_fdd/air_handling_unit/faults/fault_condition_eight.py,sha256=G1hhP6YOZSOK5su_LmZsumbaM4VGHwFXrkGbT-Tgx2Q,2326
|
6
|
-
open_fdd/air_handling_unit/faults/fault_condition_eleven.py,sha256=gs_sA4CxE8wM8gn7qxd7ToCtOcvJDSH5PAqdkRghw6c,2404
|
7
|
-
open_fdd/air_handling_unit/faults/fault_condition_fifteen.py,sha256=y_S-NbaQQTyqnQkUYF7MNS2NON2jgVnnzv0Qo7dHGLE,3287
|
8
|
-
open_fdd/air_handling_unit/faults/fault_condition_five.py,sha256=_G2WqzElrftj09P3w_qcSnAPQprtjfB1axaLusRK6g8,2605
|
9
|
-
open_fdd/air_handling_unit/faults/fault_condition_four.py,sha256=sHwCA0_aP49_ILL8tzjrHJdumIRalxplAmgh16nah9Q,3519
|
10
|
-
open_fdd/air_handling_unit/faults/fault_condition_fourteen.py,sha256=NHYp43RROOTErhoDfxW01Aw_txfZOBd9PsgZzcdlwQw,2954
|
11
|
-
open_fdd/air_handling_unit/faults/fault_condition_nine.py,sha256=QQwuNCAIJM8_1KYIaCsU3sZSxozb6cWPQEsij50drJE,2475
|
12
|
-
open_fdd/air_handling_unit/faults/fault_condition_one.py,sha256=Ae5CXagUwlQCOUebLb4dfoY-4mqGv_xGOCpRAXRTnrY,2113
|
13
|
-
open_fdd/air_handling_unit/faults/fault_condition_seven.py,sha256=s2yLhnn5Es_ECqG3BIlZgx1Vgt9ro0Pq9sqjKl7yFwU,2004
|
14
|
-
open_fdd/air_handling_unit/faults/fault_condition_six.py,sha256=HuQrdZNjXXPDU_8EtWVBPF4JcRGWG6nrqAE2RKRxTiY,4757
|
15
|
-
open_fdd/air_handling_unit/faults/fault_condition_ten.py,sha256=SOPUbMwGHYHcNxTc-0OPlL-rRAuINd9fB01IVF8JLjQ,2243
|
16
|
-
open_fdd/air_handling_unit/faults/fault_condition_thirteen.py,sha256=5OnzbTILlqX_Rs7Fcla-FfxSfwh7z8H2cFE8BW8LB-U,2419
|
17
|
-
open_fdd/air_handling_unit/faults/fault_condition_three.py,sha256=YWG1QJqimzxogY7K97RIeKWwctPDEDPnuYaEk7BCmcI,2094
|
18
|
-
open_fdd/air_handling_unit/faults/fault_condition_twelve.py,sha256=EJOYgLPEKRF3UOHz5veZs6Do2_1YTNr0d3nL2k1k_qE,2747
|
19
|
-
open_fdd/air_handling_unit/faults/fault_condition_two.py,sha256=Tth5OnXgeEC_wgct9F3tIBmgZmxDxOIuJoOLblaPcVA,2140
|
20
|
-
open_fdd/air_handling_unit/faults/helper_utils.py,sha256=huHmhxtoE2Js8GOYHZ6yRupTbj4y13B2V7HLjtqe7CI,7253
|
21
|
-
open_fdd/air_handling_unit/faults/shared_utils.py,sha256=Kp8ZUBhtrh-jU2Q_bbXTpnbVVUAyacp41tDMknY50i4,2252
|
22
|
-
open_fdd/air_handling_unit/reports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
23
|
-
open_fdd/air_handling_unit/reports/report_fc1.py,sha256=ZlfTP4Pzv0l0hBHRWmTFMXKWPnuMNW38mHPPD8QW460,4565
|
24
|
-
open_fdd/air_handling_unit/reports/report_fc10.py,sha256=Dgh0L4A-D-VYqTfVcMwhxdw67R-31c24ydtrpJ-gLyU,5179
|
25
|
-
open_fdd/air_handling_unit/reports/report_fc11.py,sha256=fLb004y59i_2LegfGlpgEpEzQadqsCWrJPNLZ6obgqg,5197
|
26
|
-
open_fdd/air_handling_unit/reports/report_fc12.py,sha256=MVjoHul32K0hJCP4WL9bLd6g55HMcKLdxzvPN94AlDA,5090
|
27
|
-
open_fdd/air_handling_unit/reports/report_fc13.py,sha256=YjU6PBJl2ae_2WD2n-GoRGmwj6BtjQFClcCibHgcJmA,5026
|
28
|
-
open_fdd/air_handling_unit/reports/report_fc14.py,sha256=j_o3X6BFYhW7IBwGZATQ7afgiXlKmUMGbGY7UuSwfD4,4832
|
29
|
-
open_fdd/air_handling_unit/reports/report_fc15.py,sha256=Rg4NiheUsCmSxv42s7OFKRD7dweGZxtN83I5iDDzNoo,4831
|
30
|
-
open_fdd/air_handling_unit/reports/report_fc2.py,sha256=ao_2ZeY10BLJ0GEDMMGAuD-8FbHBCGnIvQg9rF6om_U,4840
|
31
|
-
open_fdd/air_handling_unit/reports/report_fc3.py,sha256=xyGjwYxJU2kveVJHLzAM3T_MLFlUZNQGBUyJ-YTjAsk,4843
|
32
|
-
open_fdd/air_handling_unit/reports/report_fc4.py,sha256=0PpPwPnzeUZZybad04IslroBoCcIseDGq5it389wx9s,6052
|
33
|
-
open_fdd/air_handling_unit/reports/report_fc5.py,sha256=welqsYh9TzIfpbdl3i9pvpaDWTsz_rnFbem6lXvz5K0,5699
|
34
|
-
open_fdd/air_handling_unit/reports/report_fc6.py,sha256=R-2OONOZS1ZFLkUBv0syrZ7XjrR0TSwI1Wu70opTVeM,6042
|
35
|
-
open_fdd/air_handling_unit/reports/report_fc7.py,sha256=_hlAvJvbDtLOOPlcCcPaCH8Hu2U5zL1l__xrbL80C20,5256
|
36
|
-
open_fdd/air_handling_unit/reports/report_fc8.py,sha256=3jZPq2piethtqly1faSc8hk0aFCbQe2Y0RMNv3DFzpk,5057
|
37
|
-
open_fdd/air_handling_unit/reports/report_fc9.py,sha256=hJbYMYnwptVSEI2NVdnV3Ads-h_9Hl4oFD1HDDLZWHQ,4909
|
38
|
-
open_fdd/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
39
|
-
open_fdd/tests/ahu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
40
|
-
open_fdd/tests/ahu/test_ahu_fc1.py,sha256=IJTLAF87xHSyCgU0Ow-gzP8rP8z7TQb46nQHdirW-vs,4899
|
41
|
-
open_fdd/tests/ahu/test_ahu_fc10.py,sha256=eJ3msPdgkXwYRJOb6mGDaIZBDJfXhyVFAyr27DVwagY,4597
|
42
|
-
open_fdd/tests/ahu/test_ahu_fc11.py,sha256=uMLAQ2o-m8czAh7q6xzKlrmGd9m6SGjIfvd4hswOD9E,4746
|
43
|
-
open_fdd/tests/ahu/test_ahu_fc12.py,sha256=KedYWmVSwb8b-0TZYdC16ysELGHOIsI_xd2va-SqBgg,5871
|
44
|
-
open_fdd/tests/ahu/test_ahu_fc13.py,sha256=qz_dol4W6M3cIvunkHyFDfqEkB8TA9r9UnoycS2x37I,5750
|
45
|
-
open_fdd/tests/ahu/test_ahu_fc14.py,sha256=SlnQF37K73tgfUtp1bQl0nH46YV5aByzonUNXJ50CGE,8077
|
46
|
-
open_fdd/tests/ahu/test_ahu_fc15.py,sha256=jQGgZPbh83q3_oJJVYhobC7KdD-2InbA1zdbsQBlhuc,7685
|
47
|
-
open_fdd/tests/ahu/test_ahu_fc2.py,sha256=3njwLWjzIT6B6RCMgEGqdPvP3kykYwzQTZ9IOgx_BSE,4756
|
48
|
-
open_fdd/tests/ahu/test_ahu_fc3.py,sha256=iFHLdTzyMvDw7lFwl5J4I7omXXwrDh7kIyoXTI1YxmM,4680
|
49
|
-
open_fdd/tests/ahu/test_ahu_fc4.py,sha256=gWquIQsBiF65RGUBLe741oj1Yqs-JDM4K0kmkPP7mOE,6334
|
50
|
-
open_fdd/tests/ahu/test_ahu_fc5.py,sha256=mEbhX5IlDkMwXPv3jPMlE_v3QJH47qsZIL99_KzV7_U,6559
|
51
|
-
open_fdd/tests/ahu/test_ahu_fc6.py,sha256=M7eHdQexcSDN0CGjnR3bcwk_wbjDxqhJwqg_VjsoGB0,10369
|
52
|
-
open_fdd/tests/ahu/test_ahu_fc7.py,sha256=ughSBHwrergnFsI5ayVaBoWRUMEetFcYQ59CNBNIS1k,2491
|
53
|
-
open_fdd/tests/ahu/test_ahu_fc8.py,sha256=KKnDyclhzxppC4bk2Kj9cguqg53sZ7I7CSqqWexpWdE,4685
|
54
|
-
open_fdd/tests/ahu/test_ahu_fc9.py,sha256=YbO1jZSZD6eAXjQkidjp3TEVCcaL7ADhUsTyKy_jmL0,4817
|
55
|
-
open_fdd-0.1.1.dist-info/LICENSE,sha256=eghao_GGx_0gB2Sll3x2vV29knONEzUQKrkaXpX1F7w,1087
|
56
|
-
open_fdd-0.1.1.dist-info/METADATA,sha256=z1NUVLiquR8qcZ3hfvie1QDVZGxHrliUOMfmMFr3BjE,4070
|
57
|
-
open_fdd-0.1.1.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
|
58
|
-
open_fdd-0.1.1.dist-info/top_level.txt,sha256=Q7sB6UB2d8Ch1v_xIsTiNegmgcCXPkwkrxK3ug6VEOs,9
|
59
|
-
open_fdd-0.1.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|