Add snapshots to tasmota sensor test (#120647)
parent
85629dc31e
commit
06f495dd45
File diff suppressed because it is too large
Load Diff
|
@ -13,9 +13,9 @@ from hatasmota.utils import (
|
||||||
get_topic_tele_will,
|
get_topic_tele_will,
|
||||||
)
|
)
|
||||||
import pytest
|
import pytest
|
||||||
|
from syrupy import SnapshotAssertion
|
||||||
|
|
||||||
from homeassistant import config_entries
|
from homeassistant import config_entries
|
||||||
from homeassistant.components.sensor import ATTR_STATE_CLASS, SensorStateClass
|
|
||||||
from homeassistant.components.tasmota.const import DEFAULT_PREFIX
|
from homeassistant.components.tasmota.const import DEFAULT_PREFIX
|
||||||
from homeassistant.const import ATTR_ASSUMED_STATE, STATE_UNKNOWN, Platform
|
from homeassistant.const import ATTR_ASSUMED_STATE, STATE_UNKNOWN, Platform
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
|
@ -175,7 +175,7 @@ TEMPERATURE_SENSOR_CONFIG = {
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
("sensor_config", "entity_ids", "messages", "states"),
|
("sensor_config", "entity_ids", "messages"),
|
||||||
[
|
[
|
||||||
(
|
(
|
||||||
DEFAULT_SENSOR_CONFIG,
|
DEFAULT_SENSOR_CONFIG,
|
||||||
|
@ -184,20 +184,6 @@ TEMPERATURE_SENSOR_CONFIG = {
|
||||||
'{"DHT11":{"Temperature":20.5}}',
|
'{"DHT11":{"Temperature":20.5}}',
|
||||||
'{"StatusSNS":{"DHT11":{"Temperature":20.0}}}',
|
'{"StatusSNS":{"DHT11":{"Temperature":20.0}}}',
|
||||||
),
|
),
|
||||||
(
|
|
||||||
{
|
|
||||||
"sensor.tasmota_dht11_temperature": {
|
|
||||||
"state": "20.5",
|
|
||||||
"attributes": {
|
|
||||||
"device_class": "temperature",
|
|
||||||
"unit_of_measurement": "°C",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"sensor.tasmota_dht11_temperature": {"state": "20.0"},
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
DICT_SENSOR_CONFIG_1,
|
DICT_SENSOR_CONFIG_1,
|
||||||
|
@ -206,22 +192,6 @@ TEMPERATURE_SENSOR_CONFIG = {
|
||||||
'{"TX23":{"Speed":{"Act":"12.3"},"Dir": {"Card": "WSW"}}}',
|
'{"TX23":{"Speed":{"Act":"12.3"},"Dir": {"Card": "WSW"}}}',
|
||||||
'{"StatusSNS":{"TX23":{"Speed":{"Act":"23.4"},"Dir": {"Card": "ESE"}}}}',
|
'{"StatusSNS":{"TX23":{"Speed":{"Act":"23.4"},"Dir": {"Card": "ESE"}}}}',
|
||||||
),
|
),
|
||||||
(
|
|
||||||
{
|
|
||||||
"sensor.tasmota_tx23_speed_act": {
|
|
||||||
"state": "12.3",
|
|
||||||
"attributes": {
|
|
||||||
"device_class": None,
|
|
||||||
"unit_of_measurement": "km/h",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"sensor.tasmota_tx23_dir_card": {"state": "WSW"},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"sensor.tasmota_tx23_speed_act": {"state": "23.4"},
|
|
||||||
"sensor.tasmota_tx23_dir_card": {"state": "ESE"},
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
LIST_SENSOR_CONFIG,
|
LIST_SENSOR_CONFIG,
|
||||||
|
@ -233,22 +203,6 @@ TEMPERATURE_SENSOR_CONFIG = {
|
||||||
'{"ENERGY":{"TotalTariff":[1.2,3.4]}}',
|
'{"ENERGY":{"TotalTariff":[1.2,3.4]}}',
|
||||||
'{"StatusSNS":{"ENERGY":{"TotalTariff":[5.6,7.8]}}}',
|
'{"StatusSNS":{"ENERGY":{"TotalTariff":[5.6,7.8]}}}',
|
||||||
),
|
),
|
||||||
(
|
|
||||||
{
|
|
||||||
"sensor.tasmota_energy_totaltariff_0": {
|
|
||||||
"state": "1.2",
|
|
||||||
"attributes": {
|
|
||||||
"device_class": None,
|
|
||||||
"unit_of_measurement": None,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"sensor.tasmota_energy_totaltariff_1": {"state": "3.4"},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"sensor.tasmota_energy_totaltariff_0": {"state": "5.6"},
|
|
||||||
"sensor.tasmota_energy_totaltariff_1": {"state": "7.8"},
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
TEMPERATURE_SENSOR_CONFIG,
|
TEMPERATURE_SENSOR_CONFIG,
|
||||||
|
@ -257,22 +211,6 @@ TEMPERATURE_SENSOR_CONFIG = {
|
||||||
'{"DS18B20":{"Id": "01191ED79190","Temperature": 12.3}}',
|
'{"DS18B20":{"Id": "01191ED79190","Temperature": 12.3}}',
|
||||||
'{"StatusSNS":{"DS18B20":{"Id": "meep","Temperature": 23.4}}}',
|
'{"StatusSNS":{"DS18B20":{"Id": "meep","Temperature": 23.4}}}',
|
||||||
),
|
),
|
||||||
(
|
|
||||||
{
|
|
||||||
"sensor.tasmota_ds18b20_temperature": {
|
|
||||||
"state": "12.3",
|
|
||||||
"attributes": {
|
|
||||||
"device_class": "temperature",
|
|
||||||
"unit_of_measurement": "°C",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"sensor.tasmota_ds18b20_id": {"state": "01191ED79190"},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"sensor.tasmota_ds18b20_temperature": {"state": "23.4"},
|
|
||||||
"sensor.tasmota_ds18b20_id": {"state": "meep"},
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
# Test simple Total sensor
|
# Test simple Total sensor
|
||||||
(
|
(
|
||||||
|
@ -282,21 +220,6 @@ TEMPERATURE_SENSOR_CONFIG = {
|
||||||
'{"ENERGY":{"Total":1.2,"TotalStartTime":"2018-11-23T15:33:47"}}',
|
'{"ENERGY":{"Total":1.2,"TotalStartTime":"2018-11-23T15:33:47"}}',
|
||||||
'{"StatusSNS":{"ENERGY":{"Total":5.6,"TotalStartTime":"2018-11-23T16:33:47"}}}',
|
'{"StatusSNS":{"ENERGY":{"Total":5.6,"TotalStartTime":"2018-11-23T16:33:47"}}}',
|
||||||
),
|
),
|
||||||
(
|
|
||||||
{
|
|
||||||
"sensor.tasmota_energy_total": {
|
|
||||||
"state": "1.2",
|
|
||||||
"attributes": {
|
|
||||||
"device_class": "energy",
|
|
||||||
ATTR_STATE_CLASS: SensorStateClass.TOTAL,
|
|
||||||
"unit_of_measurement": "kWh",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"sensor.tasmota_energy_total": {"state": "5.6"},
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
# Test list Total sensors
|
# Test list Total sensors
|
||||||
(
|
(
|
||||||
|
@ -306,30 +229,6 @@ TEMPERATURE_SENSOR_CONFIG = {
|
||||||
'{"ENERGY":{"Total":[1.2, 3.4],"TotalStartTime":"2018-11-23T15:33:47"}}',
|
'{"ENERGY":{"Total":[1.2, 3.4],"TotalStartTime":"2018-11-23T15:33:47"}}',
|
||||||
'{"StatusSNS":{"ENERGY":{"Total":[5.6, 7.8],"TotalStartTime":"2018-11-23T16:33:47"}}}',
|
'{"StatusSNS":{"ENERGY":{"Total":[5.6, 7.8],"TotalStartTime":"2018-11-23T16:33:47"}}}',
|
||||||
),
|
),
|
||||||
(
|
|
||||||
{
|
|
||||||
"sensor.tasmota_energy_total_0": {
|
|
||||||
"state": "1.2",
|
|
||||||
"attributes": {
|
|
||||||
"device_class": "energy",
|
|
||||||
ATTR_STATE_CLASS: SensorStateClass.TOTAL,
|
|
||||||
"unit_of_measurement": "kWh",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"sensor.tasmota_energy_total_1": {
|
|
||||||
"state": "3.4",
|
|
||||||
"attributes": {
|
|
||||||
"device_class": "energy",
|
|
||||||
ATTR_STATE_CLASS: SensorStateClass.TOTAL,
|
|
||||||
"unit_of_measurement": "kWh",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"sensor.tasmota_energy_total_0": {"state": "5.6"},
|
|
||||||
"sensor.tasmota_energy_total_1": {"state": "7.8"},
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
# Test dict Total sensors
|
# Test dict Total sensors
|
||||||
(
|
(
|
||||||
|
@ -342,30 +241,6 @@ TEMPERATURE_SENSOR_CONFIG = {
|
||||||
'{"ENERGY":{"Total":{"Phase1":1.2, "Phase2":3.4},"TotalStartTime":"2018-11-23T15:33:47"}}',
|
'{"ENERGY":{"Total":{"Phase1":1.2, "Phase2":3.4},"TotalStartTime":"2018-11-23T15:33:47"}}',
|
||||||
'{"StatusSNS":{"ENERGY":{"Total":{"Phase1":5.6, "Phase2":7.8},"TotalStartTime":"2018-11-23T15:33:47"}}}',
|
'{"StatusSNS":{"ENERGY":{"Total":{"Phase1":5.6, "Phase2":7.8},"TotalStartTime":"2018-11-23T15:33:47"}}}',
|
||||||
),
|
),
|
||||||
(
|
|
||||||
{
|
|
||||||
"sensor.tasmota_energy_total_phase1": {
|
|
||||||
"state": "1.2",
|
|
||||||
"attributes": {
|
|
||||||
"device_class": "energy",
|
|
||||||
ATTR_STATE_CLASS: SensorStateClass.TOTAL,
|
|
||||||
"unit_of_measurement": "kWh",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"sensor.tasmota_energy_total_phase2": {
|
|
||||||
"state": "3.4",
|
|
||||||
"attributes": {
|
|
||||||
"device_class": "energy",
|
|
||||||
ATTR_STATE_CLASS: SensorStateClass.TOTAL,
|
|
||||||
"unit_of_measurement": "kWh",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"sensor.tasmota_energy_total_phase1": {"state": "5.6"},
|
|
||||||
"sensor.tasmota_energy_total_phase2": {"state": "7.8"},
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
NUMBERED_SENSOR_CONFIG,
|
NUMBERED_SENSOR_CONFIG,
|
||||||
|
@ -384,39 +259,6 @@ TEMPERATURE_SENSOR_CONFIG = {
|
||||||
'"Illuminance3":1.2}}}'
|
'"Illuminance3":1.2}}}'
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
|
||||||
{
|
|
||||||
"sensor.tasmota_analog_temperature1": {
|
|
||||||
"state": "1.2",
|
|
||||||
"attributes": {
|
|
||||||
"device_class": "temperature",
|
|
||||||
ATTR_STATE_CLASS: SensorStateClass.MEASUREMENT,
|
|
||||||
"unit_of_measurement": "°C",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"sensor.tasmota_analog_temperature2": {
|
|
||||||
"state": "3.4",
|
|
||||||
"attributes": {
|
|
||||||
"device_class": "temperature",
|
|
||||||
ATTR_STATE_CLASS: SensorStateClass.MEASUREMENT,
|
|
||||||
"unit_of_measurement": "°C",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"sensor.tasmota_analog_illuminance3": {
|
|
||||||
"state": "5.6",
|
|
||||||
"attributes": {
|
|
||||||
"device_class": "illuminance",
|
|
||||||
ATTR_STATE_CLASS: SensorStateClass.MEASUREMENT,
|
|
||||||
"unit_of_measurement": "lx",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"sensor.tasmota_analog_temperature1": {"state": "7.8"},
|
|
||||||
"sensor.tasmota_analog_temperature2": {"state": "9.0"},
|
|
||||||
"sensor.tasmota_analog_illuminance3": {"state": "1.2"},
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
NUMBERED_SENSOR_CONFIG_2,
|
NUMBERED_SENSOR_CONFIG_2,
|
||||||
|
@ -436,48 +278,6 @@ TEMPERATURE_SENSOR_CONFIG = {
|
||||||
'{"Energy":1.0,"Power":1150,"Voltage":230,"Current":5}}}}'
|
'{"Energy":1.0,"Power":1150,"Voltage":230,"Current":5}}}}'
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
|
||||||
{
|
|
||||||
"sensor.tasmota_analog_ctenergy1_energy": {
|
|
||||||
"state": "0.5",
|
|
||||||
"attributes": {
|
|
||||||
"device_class": "energy",
|
|
||||||
ATTR_STATE_CLASS: SensorStateClass.TOTAL,
|
|
||||||
"unit_of_measurement": "kWh",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"sensor.tasmota_analog_ctenergy1_power": {
|
|
||||||
"state": "2300",
|
|
||||||
"attributes": {
|
|
||||||
"device_class": "power",
|
|
||||||
ATTR_STATE_CLASS: SensorStateClass.MEASUREMENT,
|
|
||||||
"unit_of_measurement": "W",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"sensor.tasmota_analog_ctenergy1_voltage": {
|
|
||||||
"state": "230",
|
|
||||||
"attributes": {
|
|
||||||
"device_class": "voltage",
|
|
||||||
ATTR_STATE_CLASS: SensorStateClass.MEASUREMENT,
|
|
||||||
"unit_of_measurement": "V",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"sensor.tasmota_analog_ctenergy1_current": {
|
|
||||||
"state": "10",
|
|
||||||
"attributes": {
|
|
||||||
"device_class": "current",
|
|
||||||
ATTR_STATE_CLASS: SensorStateClass.MEASUREMENT,
|
|
||||||
"unit_of_measurement": "A",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"sensor.tasmota_analog_ctenergy1_energy": {"state": "1.0"},
|
|
||||||
"sensor.tasmota_analog_ctenergy1_power": {"state": "1150"},
|
|
||||||
"sensor.tasmota_analog_ctenergy1_voltage": {"state": "230"},
|
|
||||||
"sensor.tasmota_analog_ctenergy1_current": {"state": "5"},
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
@ -485,11 +285,11 @@ async def test_controlling_state_via_mqtt(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
entity_registry: er.EntityRegistry,
|
entity_registry: er.EntityRegistry,
|
||||||
mqtt_mock: MqttMockHAClient,
|
mqtt_mock: MqttMockHAClient,
|
||||||
|
snapshot: SnapshotAssertion,
|
||||||
setup_tasmota,
|
setup_tasmota,
|
||||||
sensor_config,
|
sensor_config,
|
||||||
entity_ids,
|
entity_ids,
|
||||||
messages,
|
messages,
|
||||||
states,
|
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test state update via MQTT."""
|
"""Test state update via MQTT."""
|
||||||
config = copy.deepcopy(DEFAULT_CONFIG)
|
config = copy.deepcopy(DEFAULT_CONFIG)
|
||||||
|
@ -513,11 +313,13 @@ async def test_controlling_state_via_mqtt(
|
||||||
state = hass.states.get(entity_id)
|
state = hass.states.get(entity_id)
|
||||||
assert state.state == "unavailable"
|
assert state.state == "unavailable"
|
||||||
assert not state.attributes.get(ATTR_ASSUMED_STATE)
|
assert not state.attributes.get(ATTR_ASSUMED_STATE)
|
||||||
|
assert state == snapshot
|
||||||
|
|
||||||
entry = entity_registry.async_get(entity_id)
|
entry = entity_registry.async_get(entity_id)
|
||||||
assert entry.disabled is False
|
assert entry.disabled is False
|
||||||
assert entry.disabled_by is None
|
assert entry.disabled_by is None
|
||||||
assert entry.entity_category is None
|
assert entry.entity_category is None
|
||||||
|
assert entry == snapshot
|
||||||
|
|
||||||
async_fire_mqtt_message(hass, "tasmota_49A3BC/tele/LWT", "Online")
|
async_fire_mqtt_message(hass, "tasmota_49A3BC/tele/LWT", "Online")
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
@ -530,19 +332,13 @@ async def test_controlling_state_via_mqtt(
|
||||||
async_fire_mqtt_message(hass, "tasmota_49A3BC/tele/SENSOR", messages[0])
|
async_fire_mqtt_message(hass, "tasmota_49A3BC/tele/SENSOR", messages[0])
|
||||||
for entity_id in entity_ids:
|
for entity_id in entity_ids:
|
||||||
state = hass.states.get(entity_id)
|
state = hass.states.get(entity_id)
|
||||||
expected_state = states[0][entity_id]
|
assert state == snapshot
|
||||||
assert state.state == expected_state["state"]
|
|
||||||
for attribute, expected in expected_state.get("attributes", {}).items():
|
|
||||||
assert state.attributes.get(attribute) == expected
|
|
||||||
|
|
||||||
# Test polled state update
|
# Test polled state update
|
||||||
async_fire_mqtt_message(hass, "tasmota_49A3BC/stat/STATUS10", messages[1])
|
async_fire_mqtt_message(hass, "tasmota_49A3BC/stat/STATUS10", messages[1])
|
||||||
for entity_id in entity_ids:
|
for entity_id in entity_ids:
|
||||||
state = hass.states.get(entity_id)
|
state = hass.states.get(entity_id)
|
||||||
expected_state = states[1][entity_id]
|
assert state == snapshot
|
||||||
assert state.state == expected_state["state"]
|
|
||||||
for attribute, expected in expected_state.get("attributes", {}).items():
|
|
||||||
assert state.attributes.get(attribute) == expected
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
|
|
Loading…
Reference in New Issue