Source code for nwp500.models._converters

from __future__ import annotations

from ..temperature import HalfCelsius
from ..unit_system import get_unit_system


[docs] def fahrenheit_to_half_celsius(fahrenheit: float) -> int: """Convert Fahrenheit to half-degrees Celsius (for device commands). Args: fahrenheit: Temperature in Fahrenheit. Returns: Raw device value in half-Celsius format. Example: >>> fahrenheit_to_half_celsius(140.0) 120 """ return int(HalfCelsius.from_fahrenheit(fahrenheit).raw_value)
[docs] def preferred_to_half_celsius(temperature: float) -> int: """Convert temperature from preferred unit to half-degrees Celsius. Converts temperature from the user's preferred unit (Celsius or Fahrenheit, based on global unit system context) to the half-Celsius format used by the device for commands and reservations. Args: temperature: Temperature in user's preferred unit (Celsius or Fahrenheit). Returns: Raw device value in half-Celsius format. Example: >>> # With us_customary unit system >>> preferred_to_half_celsius(140.0) # 140°F 120 >>> # With metric unit system >>> preferred_to_half_celsius(60.0) # 60°C 120 """ if get_unit_system() == "metric": # User prefers Celsius, input is in Celsius return int(HalfCelsius.from_celsius(temperature).raw_value) else: # User prefers Fahrenheit (or no preference), input is in Fahrenheit return fahrenheit_to_half_celsius(temperature)
[docs] def reservation_param_to_preferred(param: int) -> float: """Convert reservation param to user's preferred temperature unit. Device returns reservation temperatures as half-degrees Celsius (param). This converts them to the user's preferred unit (Celsius or Fahrenheit) based on the global unit system context. Args: param: Raw device value in half-Celsius format. Returns: Temperature in user's preferred unit (Celsius or Fahrenheit). Example: >>> # With metric (Celsius) unit system >>> reservation_param_to_preferred(120) 60.0 >>> # With us_customary (Fahrenheit) unit system >>> reservation_param_to_preferred(120) 140.0 """ half_celsius = HalfCelsius(param) if get_unit_system() == "metric": return round(half_celsius.to_celsius(), 1) return round(half_celsius.to_fahrenheit(), 1)