Dewbee is a Honeybee extension that enables Combined Heat and Moisture Transfer (HAMT) simulations in EnergyPlus. More specifically, it activates the Combined Heat and Moisture Transfer module in EnergyPlus, which uses a finite element approach to model coupled heat and moisture behavior in building components.
Installer available at Food4Rhino.
- Rhino 8
- Ladybug Tools 1.9+
- Multi-year result parsing currently works only on Windows
Zorzetto, G., Hischier, I., & Schlueter, A. (2026). Dewbee (v0.1.2). Zenodo. https://doi.org/10.5281/zenodo.19919608
The tool is implemented with a Python-based backend and encoded as Grasshopper components acting as thin wrappers, while remaining fully compatible with Honeybee. Given its parametric nature, Dewbee can ease repetitive tasks involving design iteration, sensitivity analysis, optimization, and machine learning.
To avoid excessive computational cost and data requirements, the HAMT algorithm is applied only to selected building surfaces. Remaining surfaces are simulated using the default Conduction Transfer Function (CTF) method, reducing input requirements and computation time. This modular approach is enabled through the SurfacePropertyHeatTransferAlgorithmConstruction object from EnergyPlus, avoiding the need to define hygrothermal properties for all constructions, as required by the HeatBalanceAlgorithm object.
Dewbee has been developed at the chair of Architecture and Building Systems (ETH Zurich) with support from Think Earth, an Innosuisse flagship project. It extends the scope of an earlier proof-of-concept tool called WaterSkater.
Development mode uses one local Dewbee checkout as the source of truth for the Python backend, Grasshopper user objects, and material library. Components display DEV while development mode is active; released installations display dewbee.__version__.
Do not set dewbee.__version__ to DEV. It must remain a numeric release version. The function dewbee.component_message() selects the displayed message at runtime.
- Open
DB Development Modein Grasshopper. - Set
_repoto the Dewbee repository root. If it is empty, the component uses its configured default path. - Set
_sync_maintoTrueonly when the working tree is clean and the local checkout should be fast-forwarded fromorigin/main. UseFalsewhile actively editing. - Set
_runtoTrue. - Restart Rhino after entering development mode for the first time.
Development mode:
- creates a junction from Rhino's scripts folder to the local
dewbeepackage, ahead of Ladybug Tools site-packages in IronPython's import order; - copies
grasshopper/user_objectsinto Grasshopper's localUserObjects/dewbeefolder; - copies
resources/standards/dewbee_materials.jsoninto Ladybug Tools' custom constructions folder; and - writes
%APPDATA%/ladybug_tools/dewbee/dev_mode/active.json, which controls theDEVcomponent message.
To confirm which backend is running:
import dewbee
print(dewbee.component_message())
print(dewbee.__file__)In development mode the first line should print DEV. The imported file should resolve through Rhino's scripts junction or directly to the selected local repository, not to the installed Ladybug Tools site-packages copy.
Python edits under the local dewbee package propagate directly through the junction. Restart Rhino or reload the imported module when a module is already cached in the current session.
- Create or edit the component on the Grasshopper canvas.
- Select it and choose File > Create User Object. When updating a component, preserve its existing name, nickname, category, subcategory, inputs, outputs, and exposure settings.
- Open File > Special Folders > User Object Folder and move the new
.ghuserfile into thedewbeefolder, replacing the previous file when applicable. - Run
DB Save Composwith the same_repoused byDB Development Mode.
DB Save Compos processes every DB*.ghuser in the local Dewbee UserObjects folder. It replaces the first hardcoded component-message assignment with dewbee.component_message(), exports the Python source to grasshopper/src, exports the modified user object to grasshopper/user_objects, and refreshes Grasshopper's local user objects.
The .ghuser metadata is saved with the numeric dewbee.__version__ read directly from the selected repository, not DEV. The component code changes the visible message to DEV only at runtime when the development marker is active.
Use the DB DEV Materials Grasshopper definition when creating or editing materials. Its DB Dump or Merge Objects component updates both:
resources/standards/dewbee_materials.jsonin the local repository; and%APPDATA%/ladybug_tools/standards/constructions/dewbee_materials.json.
Running DB Development Mode again also refreshes the Ladybug Tools custom material file from the repository copy.
Run DB Installer and Updater. It installs the requested/latest PyPI package and downloads the Grasshopper components and material library from the matching Git tag (dewbee X -> vX). Only after the full release installation succeeds does it remove the development junction and marker. Restart Rhino afterward.
- Finish and test backend, component, and material changes in development mode.
- Run the version-bump script so
pyproject.tomlanddewbee/__init__.pycontain the new numeric version. - Run
DB Save Composagain. This stores the new numeric version in the.ghusermetadata while retaining the dynamic runtime message code. --> Maybe this step is unecessary now that versioning of comps is dynamic. - Review the generated files under
grasshopper/srcandgrasshopper/user_objects. - Run the release script and verify the resulting release with
DB Installer and Updater.