Add room system for ventilation loss calculation
This commit is contained in:
@@ -0,0 +1,46 @@
|
|||||||
|
from dataclasses import dataclass
|
||||||
|
from enum import Enum, auto
|
||||||
|
|
||||||
|
|
||||||
|
class RoomKind(Enum):
|
||||||
|
# Wet rooms
|
||||||
|
OPEN_KITCHEN = auto()
|
||||||
|
KITCHEN = auto()
|
||||||
|
TOILET = auto()
|
||||||
|
OTHER_WET = auto()
|
||||||
|
|
||||||
|
# dry rooms
|
||||||
|
LIVING_ROOM = auto()
|
||||||
|
OTHER_DRY = auto()
|
||||||
|
|
||||||
|
|
||||||
|
# https://belglas.com/wp-content/uploads/2016/04/ventilatiedocumentresidentieel.pdf
|
||||||
|
_RANGES = {
|
||||||
|
RoomKind.OPEN_KITCHEN: (75, float("inf")),
|
||||||
|
RoomKind.KITCHEN: (50, 75),
|
||||||
|
RoomKind.TOILET: (25, 25),
|
||||||
|
RoomKind.OTHER_WET: (50, 75),
|
||||||
|
RoomKind.LIVING_ROOM: (75, 150),
|
||||||
|
RoomKind.OTHER_DRY: (25, 72),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def _clamp(x, low, high):
|
||||||
|
return min(max(x, low), high)
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Room:
|
||||||
|
kind: RoomKind
|
||||||
|
area: float
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_wet(self) -> bool:
|
||||||
|
return self.kind not in {RoomKind.LIVING_ROOM, RoomKind.OTHER_DRY}
|
||||||
|
|
||||||
|
@property
|
||||||
|
def flow_rate(self) -> float:
|
||||||
|
if self.kind == RoomKind.TOILET:
|
||||||
|
return 25
|
||||||
|
rate = 3.6 * self.area
|
||||||
|
return _clamp(rate, *_RANGES[self.kind])
|
||||||
Reference in New Issue
Block a user