Skip to main content

MetamEnTh is an object-oriented metamodel designed to model the operational aspects of buildings. It focuses on the relationships and interactions between mechanical, electrical, and plumbing (MEP) entities and their connections to sensors and spatial entities such as rooms and open spaces within buildings.

Project description

MetamEnTh

Build Status Version License PyPI version

Read the documentation here: MetamEnTh Documentation

Setting up MetamEnTh Locally

  1. Clone the GitHub repository:

    git clone https://github.com/peteryefi/metamenth.git
    cd metamenth
    
  2. Create a virtual environment

    python3 -m venv venv
    
  3. Activate the virtual environment

    • Windows
      venv\Scripts\activate
      
    • MacOS/Linux
      source venv/bin/activate
      
  4. Install project dependencies

    pip install -r requirements.txt
    
  5. Run the tests

     chmod +x run_tests.sh
     ./run_tests.sh
    

Example usage

from unittest import TestCase
from misc import MeasureFactory
from enumerations import RecordingType
from datatypes.measure import Measure
from enumerations import MeasurementUnit
from structure.open_space import OpenSpace
from enumerations import OpenSpaceType
from enumerations import RoomType
from structure.room import Room
from structure.floor import Floor
from enumerations import FloorType
from structure.building import Building
from enumerations import BuildingType
from datatypes.address import Address
from structure.layer import Layer
from structure.material import Material
from enumerations import MaterialType
from enumerations import LayerRoughness
from structure.cover import Cover
from structure.envelope import Envelope
from enumerations import CoverType

floor_area = MeasureFactory.create_measure(RecordingType.BINARY.value,
                                                        Measure(MeasurementUnit.SQUARE_METERS, 5))
# height of building
height = MeasureFactory.create_measure(RecordingType.BINARY.value,
                                                    Measure(MeasurementUnit.METERS, 30))
# internal mass of the building
internal_mass = MeasureFactory.create_measure(RecordingType.BINARY.value,
                                                           Measure(MeasurementUnit.KILOGRAMS, 2000))
area = MeasureFactory.create_measure(RecordingType.BINARY.value,
                                           Measure(MeasurementUnit.SQUARE_METERS, 45))
# create room
room = Room(area, "Office 1", RoomType.OFFICE)

mechanical_room = Room(area, "MR 01", RoomType.MECHANICAL)

# create a hall
hall = OpenSpace("Dinning Hall", area, OpenSpaceType.HALL)

# create floor with a room and a hall
floor = Floor(area=area, number=1, floor_type=FloorType.REGULAR, rooms=[room, hall, mechanical_room])

# create the building's address
address = Address("Montreal", "6399 Rue Sherbrooke", "QC", "H1N 2Z3", "Canada")

# create building
building = Building(2009, height, floor_area, internal_mass, address,
                                 BuildingType.COMMERCIAL, [floor])

# material properties
density_measure = MeasureFactory.create_measure(RecordingType.BINARY.value,
                                                        Measure(MeasurementUnit.KILOGRAM_PER_CUBIC_METER, 0.5))
hc_measure = MeasureFactory.create_measure(RecordingType.BINARY.value,
                                                        Measure(MeasurementUnit.JOULES_PER_KELVIN, 4.5))
tt_measure = MeasureFactory.create_measure(RecordingType.BINARY.value,
                                                   Measure(MeasurementUnit.WATTS_PER_SQUARE_METER_KELVIN, 2.5))
tr_measure = MeasureFactory.create_measure(RecordingType.BINARY.value,
                                                   Measure(MeasurementUnit.SQUARE_METERS_KELVIN_PER_WATTS,
                                                          2.3))
# create roof material
roof_material = Material(
    description="Steel roof",
    material_type=MaterialType.ROOF_STEEL,
    density=density_measure,
    heat_capacity=hc_measure,
    thermal_transmittance=tt_measure,
    thermal_resistance=tr_measure
)

# roof layer measurement
roof_height = MeasureFactory.create_measure(RecordingType.BINARY.value, Measure(MeasurementUnit.METERS, 20))
roof_length = MeasureFactory.create_measure(RecordingType.BINARY.value, Measure(MeasurementUnit.METERS, 15))
roof_width = MeasureFactory.create_measure(RecordingType.BINARY.value, Measure(MeasurementUnit.METERS, 3))
# create a layer of steel roof
roof_layer = Layer(roof_height, roof_length, roof_width, roof_material, LayerRoughness.MEDIUM_ROUGH)

# create a cover for the roof
roof_cover = Cover(CoverType.FLOOR)

# roof layer to cover
roof_cover.add_layer(roof_layer)

# create building envelope and add roof cover
envelope = Envelope()
envelope.add_cover(roof_cover)
building.envelope = envelope

NB: Refer to the test directory for more insight on usage

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

metamenth-1.0.1b1.tar.gz (63.4 kB view details)

Uploaded Source

Built Distribution

metamenth-1.0.1b1-py3-none-any.whl (120.1 kB view details)

Uploaded Python 3

File details

Details for the file metamenth-1.0.1b1.tar.gz.

File metadata

  • Download URL: metamenth-1.0.1b1.tar.gz
  • Upload date:
  • Size: 63.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.15

File hashes

Hashes for metamenth-1.0.1b1.tar.gz
Algorithm Hash digest
SHA256 cf2055e6c20a0d4669be41d445954b62eb272b86847d3d3acaccbcc4f33c3cc6
MD5 364b79c81509e779a9b8938c26932d09
BLAKE2b-256 094f257a94566352cfcab64d11754e13405e8cebf64528255f98eee772d8b311

See more details on using hashes here.

File details

Details for the file metamenth-1.0.1b1-py3-none-any.whl.

File metadata

  • Download URL: metamenth-1.0.1b1-py3-none-any.whl
  • Upload date:
  • Size: 120.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.15

File hashes

Hashes for metamenth-1.0.1b1-py3-none-any.whl
Algorithm Hash digest
SHA256 6e1125e182cacf4395d01a45bff79da436ca448feb656a146fb308185d3cc18b
MD5 b3cbecf221bb893361e81ac5a938bdb3
BLAKE2b-256 f8616e3f8aec1eba6b66f3b0be00d15e80ce40a886039bef410d575d6b9f221e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page