hvac-crossover
Intelligent multi-source HVAC efficiency optimizer and thermodynamic crossover coordinator.
hvac-crossover is a pure Python, zero-external-dependency library designed to optimize multi-source climate control (such as hybrid inverter heat pumps paired with condensing hydronic boilers). It solves the physical, economic, and constraint-arbitration challenges of running disparate heating and cooling systems together.
Key Features
- Thermodynamic Break-Even ($COP^*$): Dynamic marginal delivered cost ranking ($/MMBtu) computed from live electric ($P_{\text{elec}}$) and gas ($P_{\text{gas}}$) utility tariffs against manufacturer multi-point performance curves.
- Setback Recovery vs. Plateau Maintenance: Automatically engages high-capacity boilers for large recovery pulls ($\Delta T \ge 3.0^\circ\text{F}$) while handing off steady-state maintenance ($\Delta T \le 1.0^\circ\text{F}$) to modulating heat pumps in their peak efficiency range.
- Refrigerant Mode Arbitrator: Prevents multi-split outdoor units (ODUs) from faulting due to opposing heat/cool calls across shared-refrigerant indoor heads, safely diverting conflicting calls to alternate heat sources.
- Hydronic Shared-Zone Arbitration: Resolves $N:M$ bedroom baseboard couplings (master/slave arbitration) and supports 1:1 smart radiator valves (TRVs).
- Boiler Short-Cycling Derating: Accounts for burner turndown limits and cycling penalties when zone calls drop below minimum boiler firing rates.
Installation
pip install hvac-crossover
Quick Start
from hvac_crossover import (
ProducerProfileFactory, Space, MiniSplitHead, HydronicEmitter,
SystemTopology, TariffSchedule, DualFuelCoordinator, ComfortRange
)
# 1. Define Equipment Topology
odu = ProducerProfileFactory.load_from_json(
"profiles/producers/mitsubishi/mxz_3c30nahz2.json",
producer_id="odu1",
name="Mitsubishi 30k ODU"
)
boiler = ProducerProfileFactory.load_from_json(
"profiles/producers/burnham/alta_150.json",
producer_id="alta150",
name="Burnham Alta 150"
)
loft = Space(
id="loft",
name="3rd Floor Loft",
emitters=[
MiniSplitHead(id="loft_head", producer_id="odu1", nominal_btu=12000.0),
HydronicEmitter(id="loft_baseboard", producer_id="alta150", zone_id="z3"),
],
)
topology = SystemTopology(producers=[odu, boiler], spaces=[loft])
coordinator = DualFuelCoordinator(topology)
# 2. Evaluate Live Conditions
plan = coordinator.evaluate_conditions(
outdoor_temp=36.0,
tariffs=TariffSchedule(gas_cost_per_therm=1.88, electric_cost_per_kwh=0.25),
spaces={
"loft": {"current": 66.5, "heat_to": 68.0, "cool_to": 74.0}
}
)
directive = plan.space_directives["loft"]
print(f"Action: {directive.action.value}")
print(f"Active Emitter: {directive.active_delivery_unit_id}")
print(f"Economic Crossover Temp: {plan.diagnostics.economic_crossover_temp}°F")
Development & Testing
git clone https://github.com/dlarrick/hvac-crossover.git
cd hvac-crossover
python3 -m unittest discover -s tests
License
MIT License. See LICENSE for details.
Metadata
Release files for hvac-crossover 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| hvac_crossover-0.1.0.tar.gz | 25.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| hvac_crossover-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 53.3 kB
Release files / hvac_crossover-0.1.0.tar.gz
| Download URL | hvac_crossover-0.1.0.tar.gz |
|---|---|
| Size | 25.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
753b055792e7140e37ad1a3368e06fde515c5196675d3576253632dde3283496
|
|
BLAKE2b-256 checksum How to use checksums |
4bb45df7db41c83ed93798893e32d744dbe009836f6418a2c6c155fcda542766
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 10, 2026.
Transparency logRelease files / hvac_crossover-0.1.0-py3-none-any.whl
| Download URL | hvac_crossover-0.1.0-py3-none-any.whl |
|---|---|
| Size | 27.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f7d5d64d5987ba423ed62bcb8e1244006d6aeb63c59d301d3d159a393c2fcd5c
|
|
BLAKE2b-256 checksum How to use checksums |
96b8f9a2a84c99840971a475a0efd803b5b232d2d8ee0aeb0659e55d1ff3f6f3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 10, 2026.
Transparency log