def test_comparison(self, comparison, other, expected): target = core.TimePeriod(microseconds=1000) actual = getattr(target, comparison)(other) assert actual == expected
class TestTimePeriod: @pytest.mark.parametrize( "kwargs, expected", ( ({}, {}), ({"microseconds": 1}, {"microseconds": 1}), ({"microseconds": 1.0001}, {"microseconds": 1}), ({"milliseconds": 2}, {"milliseconds": 2}), ({"milliseconds": 2.0001}, {"milliseconds": 2}), ({"milliseconds": 2.01}, {"milliseconds": 2, "microseconds": 10}), ({"seconds": 3}, {"seconds": 3}), ({"seconds": 3.0001}, {"seconds": 3}), ({"seconds": 3.01}, {"seconds": 3, "milliseconds": 10}), ({"minutes": 4}, {"minutes": 4}), ({"minutes": 4.0001}, {"minutes": 4}), ({"minutes": 4.1}, {"minutes": 4, "seconds": 6}), ({"hours": 5}, {"hours": 5}), ({"hours": 5.0001}, {"hours": 5}), ({"hours": 5.1}, {"hours": 5, "minutes": 6}), ({"days": 6}, {"days": 6}), ({"days": 6.0001}, {"days": 6}), ({"days": 6.1}, {"days": 6, "hours": 2, "minutes": 24}), ), ) def test_init(self, kwargs, expected): target = core.TimePeriod(**kwargs) actual = target.as_dict() assert actual == expected def test_init__microseconds_with_fraction(self): with pytest.raises(ValueError, match="Maximum precision is microseconds"): core.TimePeriod(microseconds=1.1) @pytest.mark.parametrize( "kwargs, expected", ( ({}, "0s"), ({"microseconds": 1}, "1us"), ({"microseconds": 1.0001}, "1us"), ({"milliseconds": 2}, "2ms"), ({"milliseconds": 2.0001}, "2ms"), ({"milliseconds": 2.01}, "2010us"), ({"seconds": 3}, "3s"), ({"seconds": 3.0001}, "3s"), ({"seconds": 3.01}, "3010ms"), ({"minutes": 4}, "4min"), ({"minutes": 4.0001}, "4min"), ({"minutes": 4.1}, "246s"), ({"hours": 5}, "5h"), ({"hours": 5.0001}, "5h"), ({"hours": 5.1}, "306min"), ({"days": 6}, "6d"), ({"days": 6.0001}, "6d"), ({"days": 6.1}, "8784min"), ), ) def test_str(self, kwargs, expected): target = core.TimePeriod(**kwargs) actual = str(target) assert actual == expected @pytest.mark.parametrize( "comparison, other, expected", ( ("__eq__", core.TimePeriod(microseconds=900), False), ("__eq__", core.TimePeriod(milliseconds=1), True), ("__eq__", core.TimePeriod(microseconds=1100), False), ("__eq__", 1000, NotImplemented), ("__eq__", "1000", NotImplemented), ("__eq__", True, NotImplemented), ("__eq__", object(), NotImplemented), ("__eq__", None, NotImplemented), ("__ne__", core.TimePeriod(microseconds=900), True), ("__ne__", core.TimePeriod(milliseconds=1), False), ("__ne__", core.TimePeriod(microseconds=1100), True), ("__ne__", 1000, NotImplemented), ("__ne__", "1000", NotImplemented), ("__ne__", True, NotImplemented), ("__ne__", object(), NotImplemented), ("__ne__", None, NotImplemented), ("__lt__", core.TimePeriod(microseconds=900), False), ("__lt__", core.TimePeriod(milliseconds=1), False), ("__lt__", core.TimePeriod(microseconds=1100), True), ("__lt__", 1000, NotImplemented), ("__lt__", "1000", NotImplemented), ("__lt__", True, NotImplemented), ("__lt__", object(), NotImplemented), ("__lt__", None, NotImplemented), ("__gt__", core.TimePeriod(microseconds=900), True), ("__gt__", core.TimePeriod(milliseconds=1), False), ("__gt__", core.TimePeriod(microseconds=1100), False), ("__gt__", 1000, NotImplemented), ("__gt__", "1000", NotImplemented), ("__gt__", True, NotImplemented), ("__gt__", object(), NotImplemented), ("__gt__", None, NotImplemented), ("__le__", core.TimePeriod(microseconds=900), False), ("__le__", core.TimePeriod(milliseconds=1), True), ("__le__", core.TimePeriod(microseconds=1100), True), ("__le__", 1000, NotImplemented), ("__le__", "1000", NotImplemented), ("__le__", True, NotImplemented), ("__le__", object(), NotImplemented), ("__le__", None, NotImplemented), ("__ge__", core.TimePeriod(microseconds=900), True), ("__ge__", core.TimePeriod(milliseconds=1), True), ("__ge__", core.TimePeriod(microseconds=1100), False), ("__ge__", 1000, NotImplemented), ("__ge__", "1000", NotImplemented), ("__ge__", True, NotImplemented), ("__ge__", object(), NotImplemented), ("__ge__", None, NotImplemented), ), ) def test_comparison(self, comparison, other, expected): target = core.TimePeriod(microseconds=1000) actual = getattr(target, comparison)(other) assert actual == expected
def test_init__microseconds_with_fraction(self): with pytest.raises(ValueError, match="Maximum precision is microseconds"): core.TimePeriod(microseconds=1.1)
def test_str(self, kwargs, expected): target = core.TimePeriod(**kwargs) actual = str(target) assert actual == expected
"on_off", f"{CONF_TURN_ON_ACTION} and {CONF_TURN_OFF_ACTION} must both be defined", ): automation.validate_automation(single=True), cv.Inclusive( CONF_TURN_OFF_ACTION, "on_off", f"{CONF_TURN_ON_ACTION} and {CONF_TURN_OFF_ACTION} must both be defined", ): automation.validate_automation(single=True), cv.Optional(CONF_STATE_CHANGE_ACTION): automation.validate_automation(single=True), cv.Required(CONF_PERIOD): cv.All( cv.positive_time_period_milliseconds, cv.Range(min=core.TimePeriod(milliseconds=100)), ), cv.Optional(CONF_RESTART_CYCLE_ON_STATE_CHANGE, default=False): cv.boolean, }).extend(cv.COMPONENT_SCHEMA) async def to_code(config): var = cg.new_Pvariable(config[CONF_ID]) await cg.register_component(var, config) await output.register_output(var, config) if CONF_PIN in config: pin = await cg.gpio_pin_expression(config[CONF_PIN]) cg.add(var.set_pin(pin)) if CONF_STATE_CHANGE_ACTION in config: await automation.build_automation(
def test_init(self, kwargs, expected): target = core.TimePeriod(**kwargs) actual = target.as_dict() assert actual == expected
), cv.Optional(CONF_AUTOMATIC_SELF_CALIBRATION, default=True): cv.boolean, cv.Optional(CONF_ALTITUDE_COMPENSATION): cv.All( cv.float_with_unit("altitude", "(m|m a.s.l.|MAMSL|MASL)"), cv.int_range(min=0, max=0xFFFF, max_included=False), ), cv.Optional(CONF_AMBIENT_PRESSURE_COMPENSATION, default=0): cv.pressure, cv.Optional(CONF_TEMPERATURE_OFFSET): cv.temperature, cv.Optional(CONF_UPDATE_INTERVAL, default="60s"): cv.All( cv.positive_time_period_seconds, cv.Range(min=core.TimePeriod(seconds=1), max=core.TimePeriod(seconds=1800)), ), }).extend(cv.COMPONENT_SCHEMA).extend(i2c.i2c_device_schema(0x61))) async def to_code(config): var = cg.new_Pvariable(config[CONF_ID]) await cg.register_component(var, config) await i2c.register_i2c_device(var, config) cg.add( var.set_automatic_self_calibration( config[CONF_AUTOMATIC_SELF_CALIBRATION])) if CONF_ALTITUDE_COMPENSATION in config: cg.add(
) return value CONFIG_SCHEMA = cv.All( display.FULL_DISPLAY_SCHEMA.extend( { cv.GenerateID(): cv.declare_id(WaveshareEPaper), cv.Required(CONF_DC_PIN): pins.gpio_output_pin_schema, cv.Required(CONF_MODEL): cv.one_of(*MODELS, lower=True), cv.Optional(CONF_RESET_PIN): pins.gpio_output_pin_schema, cv.Optional(CONF_BUSY_PIN): pins.gpio_input_pin_schema, cv.Optional(CONF_FULL_UPDATE_EVERY): cv.uint32_t, cv.Optional(CONF_RESET_DURATION): cv.All( cv.positive_time_period_milliseconds, cv.Range(max=core.TimePeriod(milliseconds=500)), ), } ) .extend(cv.polling_component_schema("1s")) .extend(spi.spi_device_schema()), validate_full_update_every_only_type_a, cv.has_at_most_one_key(CONF_PAGES, CONF_LAMBDA), ) async def to_code(config): model_type, model = MODELS[config[CONF_MODEL]] if model_type == "a": rhs = WaveshareEPaperTypeA.new(model) var = cg.Pvariable(config[CONF_ID], rhs, WaveshareEPaperTypeA)
DEVICE_CLASS_EMPTY, STATE_CLASS_MEASUREMENT, ), cv.Optional(CONF_IIR_FILTER, default="OFF"): cv.enum(IIR_FILTER_OPTIONS, upper=True), cv.Optional(CONF_HEATER): cv.Any( None, cv.All( cv.Schema({ cv.Optional(CONF_TEMPERATURE, default=320): cv.int_range(min=200, max=400), cv.Optional(CONF_DURATION, default="150ms"): cv.All( cv.positive_time_period_milliseconds, cv.Range(max=core.TimePeriod(milliseconds=4032)), ), }), cv.has_at_least_one_key(CONF_TEMPERATURE, CONF_DURATION), ), ), }).extend(cv.polling_component_schema("60s")).extend( i2c.i2c_device_schema(0x76))) async def to_code(config): var = cg.new_Pvariable(config[CONF_ID]) await cg.register_component(var, config) await i2c.register_i2c_device(var, config) if CONF_TEMPERATURE in config:
unit_of_measurement=UNIT_PERCENT, accuracy_decimals=1, device_class=DEVICE_CLASS_HUMIDITY, state_class=STATE_CLASS_MEASUREMENT, ), cv.Optional(CONF_AUTOMATIC_SELF_CALIBRATION, default=True): cv.boolean, cv.Optional(CONF_ALTITUDE_COMPENSATION): cv.All( cv.float_with_unit("altitude", "(m|m a.s.l.|MAMSL|MASL)"), cv.int_range(min=0, max=0xFFFF, max_included=False), ), cv.Optional(CONF_AMBIENT_PRESSURE_COMPENSATION, default=0): cv.pressure, cv.Optional(CONF_TEMPERATURE_OFFSET): cv.temperature, cv.Optional(CONF_UPDATE_INTERVAL, default="60s"): cv.All( cv.positive_time_period_seconds, cv.Range( min=core.TimePeriod(seconds=1), max=core.TimePeriod(seconds=1800) ), ), } ) .extend(cv.COMPONENT_SCHEMA) .extend(i2c.i2c_device_schema(0x61)) ) async def to_code(config): var = cg.new_Pvariable(config[CONF_ID]) await cg.register_component(var, config) await i2c.register_i2c_device(var, config) cg.add(var.set_automatic_self_calibration(config[CONF_AUTOMATIC_SELF_CALIBRATION]))
cv.GenerateID(): cv.declare_variable_id(BME680TemperatureSensor), })), vol.Required(CONF_PRESSURE): cv.nameable(BME680_OVERSAMPLING_SENSOR_SCHEMA.extend({ cv.GenerateID(): cv.declare_variable_id(BME680PressureSensor), })), vol.Required(CONF_HUMIDITY): cv.nameable(BME680_OVERSAMPLING_SENSOR_SCHEMA.extend({ cv.GenerateID(): cv.declare_variable_id(BME680HumiditySensor), })), vol.Required(CONF_GAS_RESISTANCE): cv.nameable(sensor.SENSOR_SCHEMA.extend({ cv.GenerateID(): cv.declare_variable_id(BME680GasResistanceSensor), })), vol.Optional(CONF_IIR_FILTER): cv.one_of(*IIR_FILTER_OPTIONS, upper=True), vol.Optional(CONF_HEATER): vol.Any(None, vol.All(cv.Schema({ vol.Optional(CONF_TEMPERATURE, default=320): vol.All(vol.Coerce(int), vol.Range(200, 400)), vol.Optional(CONF_DURATION, default='150ms'): vol.All( cv.positive_time_period_milliseconds, vol.Range(max=core.TimePeriod(milliseconds=4032))) }, cv.has_at_least_one_key(CONF_TEMPERATURE, CONF_DURATION)))), vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval, }).extend(cv.COMPONENT_SCHEMA.schema) def to_code(config): rhs = App.make_bme680_sensor(config[CONF_TEMPERATURE][CONF_NAME], config[CONF_PRESSURE][CONF_NAME], config[CONF_HUMIDITY][CONF_NAME], config[CONF_GAS_RESISTANCE][CONF_NAME], config[CONF_ADDRESS], config.get(CONF_UPDATE_INTERVAL)) bme680 = Pvariable(config[CONF_ID], rhs) if CONF_OVERSAMPLING in config[CONF_TEMPERATURE]: constant = OVERSAMPLING_OPTIONS[config[CONF_TEMPERATURE][CONF_OVERSAMPLING]]