Пример #1
0
        def state_message_received(msg):
            """Handle new MQTT state messages."""
            payload = self._value_template(msg.payload)
            if not payload or payload == PAYLOAD_EMPTY_JSON:
                _LOGGER.debug(
                    "Ignoring empty payload '%s' after rendering for topic %s",
                    payload,
                    msg.topic,
                )
                return
            json_payload = {}
            if payload in [self._state_on, self._state_off, PAYLOAD_NONE]:
                json_payload = {STATE: payload}
            else:
                try:
                    json_payload = json_loads(payload)
                    _LOGGER.debug(
                        "JSON payload detected after processing payload '%s' on topic %s",
                        json_payload,
                        msg.topic,
                    )
                except JSON_DECODE_EXCEPTIONS:
                    _LOGGER.warning(
                        "No valid (JSON) payload detected after processing payload '%s' on topic %s",
                        json_payload,
                        msg.topic,
                    )
                    return
            if STATE in json_payload:
                if json_payload[STATE] == self._state_on:
                    self._attr_is_on = True
                if json_payload[STATE] == self._state_off:
                    self._attr_is_on = False
                if json_payload[STATE] == PAYLOAD_NONE:
                    self._attr_is_on = None
                del json_payload[STATE]

            if json_payload:
                # process attributes
                try:
                    vol.All(TURN_ON_SCHEMA)(json_payload)
                except vol.MultipleInvalid as invalid_siren_parameters:
                    _LOGGER.warning(
                        "Unable to update siren state attributes from payload '%s': %s",
                        json_payload,
                        invalid_siren_parameters,
                    )
                    return
            self._update(process_turn_on_params(self, json_payload))
            self.async_write_ha_state()
Пример #2
0
async def test_missing_tones_dict(hass):
    """Test ValueError when setting a tone that is missing from available_tones dict."""
    siren = MockSirenEntity(SUPPORT_TONES, {1: "a", 2: "b"})
    siren.hass = hass
    with pytest.raises(ValueError):
        process_turn_on_params(siren, {"tone": 3})
Пример #3
0
async def test_available_tones_dict(hass):
    """Test that valid tones from available_tones dict will get passed in."""
    siren = MockSirenEntity(SUPPORT_TONES, {1: "a", 2: "b"})
    siren.hass = hass
    assert process_turn_on_params(siren, {"tone": "a"}) == {"tone": 1}
    assert process_turn_on_params(siren, {"tone": 1}) == {"tone": 1}
Пример #4
0
async def test_available_tones_list(hass):
    """Test that valid tones from tone list will get passed in."""
    siren = MockSirenEntity(SUPPORT_TONES, ["a", "b"])
    siren.hass = hass
    assert process_turn_on_params(siren, {"tone": "a"}) == {"tone": "a"}
Пример #5
0
async def test_no_available_tones(hass):
    """Test ValueError when siren advertises tones but has no available_tones."""
    siren = MockSirenEntity(SUPPORT_TONES)
    siren.hass = hass
    with pytest.raises(ValueError):
        process_turn_on_params(siren, {"tone": "test"})
Пример #6
0
async def test_missing_tones_list(hass):
    """Test ValueError when setting a tone that is missing from available_tones list."""
    siren = MockSirenEntity(SirenEntityFeature.TONES, ["a", "b"])
    siren.hass = hass
    with pytest.raises(ValueError):
        process_turn_on_params(siren, {"tone": "test"})