コード例 #1
0
    def test_comparison(self, comparison, other, expected):
        target = core.TimePeriod(microseconds=1000)

        actual = getattr(target, comparison)(other)

        assert actual == expected
コード例 #2
0
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
コード例 #3
0
 def test_init__microseconds_with_fraction(self):
     with pytest.raises(ValueError, match="Maximum precision is microseconds"):
         core.TimePeriod(microseconds=1.1)
コード例 #4
0
    def test_str(self, kwargs, expected):
        target = core.TimePeriod(**kwargs)

        actual = str(target)

        assert actual == expected
コード例 #5
0
ファイル: output.py プロジェクト: krahabb/esphome
        "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(
コード例 #6
0
    def test_init(self, kwargs, expected):
        target = core.TimePeriod(**kwargs)

        actual = target.as_dict()

        assert actual == expected
コード例 #7
0
ファイル: sensor.py プロジェクト: velaar/esphome
    ),
    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(
コード例 #8
0
ファイル: display.py プロジェクト: krahabb/esphome
        )
    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)
コード例 #9
0
ファイル: sensor.py プロジェクト: warthog9/esphome
        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:
コード例 #10
0
ファイル: sensor.py プロジェクト: krahabb/esphome
                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]))
コード例 #11
0
        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]]