mirror of
https://github.com/home-assistant/core.git
synced 2025-07-25 06:07:17 +00:00
Add diagnostics to La Marzocco (#108240)
* add diagnostics * make firmware section easier to read
This commit is contained in:
parent
3761d13915
commit
83e0a7528d
44
homeassistant/components/lamarzocco/diagnostics.py
Normal file
44
homeassistant/components/lamarzocco/diagnostics.py
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
"""Diagnostics support for La Marzocco."""
|
||||||
|
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
from homeassistant.components.diagnostics import async_redact_data
|
||||||
|
from homeassistant.config_entries import ConfigEntry
|
||||||
|
from homeassistant.core import HomeAssistant
|
||||||
|
|
||||||
|
from .const import DOMAIN
|
||||||
|
from .coordinator import LaMarzoccoUpdateCoordinator
|
||||||
|
|
||||||
|
TO_REDACT = {
|
||||||
|
"serial_number",
|
||||||
|
"machine_sn",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async def async_get_config_entry_diagnostics(
|
||||||
|
hass: HomeAssistant, entry: ConfigEntry
|
||||||
|
) -> dict[str, Any]:
|
||||||
|
"""Return diagnostics for a config entry."""
|
||||||
|
coordinator: LaMarzoccoUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
|
||||||
|
# collect all data sources
|
||||||
|
data = {}
|
||||||
|
data["current_status"] = coordinator.lm.current_status
|
||||||
|
data["machine_info"] = coordinator.lm.machine_info
|
||||||
|
data["config"] = coordinator.lm.config
|
||||||
|
data["statistics"] = {"stats": coordinator.lm.statistics} # wrap to satisfy mypy
|
||||||
|
|
||||||
|
# build a firmware section
|
||||||
|
data["firmware"] = {
|
||||||
|
"machine": {
|
||||||
|
"version": coordinator.lm.firmware_version,
|
||||||
|
"latest_version": coordinator.lm.latest_firmware_version,
|
||||||
|
},
|
||||||
|
"gateway": {
|
||||||
|
"version": coordinator.lm.gateway_version,
|
||||||
|
"latest_version": coordinator.lm.latest_gateway_version,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return async_redact_data(data, TO_REDACT)
|
301
tests/components/lamarzocco/snapshots/test_diagnostics.ambr
Normal file
301
tests/components/lamarzocco/snapshots/test_diagnostics.ambr
Normal file
@ -0,0 +1,301 @@
|
|||||||
|
# serializer version: 1
|
||||||
|
# name: test_diagnostics
|
||||||
|
dict({
|
||||||
|
'config': dict({
|
||||||
|
'boilerTargetTemperature': dict({
|
||||||
|
'CoffeeBoiler1': 95,
|
||||||
|
'SteamBoiler': 123.9000015258789,
|
||||||
|
}),
|
||||||
|
'boilers': list([
|
||||||
|
dict({
|
||||||
|
'current': 123.80000305175781,
|
||||||
|
'id': 'SteamBoiler',
|
||||||
|
'isEnabled': True,
|
||||||
|
'target': 123.9000015258789,
|
||||||
|
}),
|
||||||
|
dict({
|
||||||
|
'current': 96.5,
|
||||||
|
'id': 'CoffeeBoiler1',
|
||||||
|
'isEnabled': True,
|
||||||
|
'target': 95,
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
'clock': '1901-07-08T10:29:00',
|
||||||
|
'firmwareVersions': list([
|
||||||
|
dict({
|
||||||
|
'fw_version': '1.40',
|
||||||
|
'name': 'machine_firmware',
|
||||||
|
}),
|
||||||
|
dict({
|
||||||
|
'fw_version': 'v3.1-rc4',
|
||||||
|
'name': 'gateway_firmware',
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
'groupCapabilities': list([
|
||||||
|
dict({
|
||||||
|
'capabilities': dict({
|
||||||
|
'boilerId': 'CoffeeBoiler1',
|
||||||
|
'groupNumber': 'Group1',
|
||||||
|
'groupType': 'AV_Group',
|
||||||
|
'hasFlowmeter': True,
|
||||||
|
'hasScale': False,
|
||||||
|
'numberOfDoses': 4,
|
||||||
|
}),
|
||||||
|
'doseMode': dict({
|
||||||
|
'brewingType': 'PulsesType',
|
||||||
|
'groupNumber': 'Group1',
|
||||||
|
}),
|
||||||
|
'doses': list([
|
||||||
|
dict({
|
||||||
|
'doseIndex': 'DoseA',
|
||||||
|
'doseType': 'PulsesType',
|
||||||
|
'groupNumber': 'Group1',
|
||||||
|
'stopTarget': 135,
|
||||||
|
}),
|
||||||
|
dict({
|
||||||
|
'doseIndex': 'DoseB',
|
||||||
|
'doseType': 'PulsesType',
|
||||||
|
'groupNumber': 'Group1',
|
||||||
|
'stopTarget': 97,
|
||||||
|
}),
|
||||||
|
dict({
|
||||||
|
'doseIndex': 'DoseC',
|
||||||
|
'doseType': 'PulsesType',
|
||||||
|
'groupNumber': 'Group1',
|
||||||
|
'stopTarget': 108,
|
||||||
|
}),
|
||||||
|
dict({
|
||||||
|
'doseIndex': 'DoseD',
|
||||||
|
'doseType': 'PulsesType',
|
||||||
|
'groupNumber': 'Group1',
|
||||||
|
'stopTarget': 121,
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
'isBackFlushEnabled': False,
|
||||||
|
'isPlumbedIn': True,
|
||||||
|
'machineCapabilities': list([
|
||||||
|
dict({
|
||||||
|
'coffeeBoilersNumber': 1,
|
||||||
|
'family': 'GS3AV',
|
||||||
|
'groupsNumber': 1,
|
||||||
|
'hasCupWarmer': False,
|
||||||
|
'machineModes': list([
|
||||||
|
'BrewingMode',
|
||||||
|
'StandBy',
|
||||||
|
]),
|
||||||
|
'schedulingType': 'weeklyScheduling',
|
||||||
|
'steamBoilersNumber': 1,
|
||||||
|
'teaDosesNumber': 1,
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
'machineMode': 'BrewingMode',
|
||||||
|
'machine_hw': '2',
|
||||||
|
'machine_sn': '**REDACTED**',
|
||||||
|
'preinfusionMode': dict({
|
||||||
|
'Group1': dict({
|
||||||
|
'groupNumber': 'Group1',
|
||||||
|
'preinfusionStyle': 'PreinfusionByDoseType',
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
'preinfusionModesAvailable': list([
|
||||||
|
'ByDoseType',
|
||||||
|
]),
|
||||||
|
'preinfusionSettings': dict({
|
||||||
|
'Group1': list([
|
||||||
|
dict({
|
||||||
|
'doseType': 'DoseA',
|
||||||
|
'groupNumber': 'Group1',
|
||||||
|
'preWetHoldTime': 1,
|
||||||
|
'preWetTime': 0.5,
|
||||||
|
}),
|
||||||
|
dict({
|
||||||
|
'doseType': 'DoseB',
|
||||||
|
'groupNumber': 'Group1',
|
||||||
|
'preWetHoldTime': 1,
|
||||||
|
'preWetTime': 0.5,
|
||||||
|
}),
|
||||||
|
dict({
|
||||||
|
'doseType': 'DoseC',
|
||||||
|
'groupNumber': 'Group1',
|
||||||
|
'preWetHoldTime': 3.299999952316284,
|
||||||
|
'preWetTime': 3.299999952316284,
|
||||||
|
}),
|
||||||
|
dict({
|
||||||
|
'doseType': 'DoseD',
|
||||||
|
'groupNumber': 'Group1',
|
||||||
|
'preWetHoldTime': 2,
|
||||||
|
'preWetTime': 2,
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
'mode': 'TypeB',
|
||||||
|
}),
|
||||||
|
'standByTime': 0,
|
||||||
|
'tankStatus': True,
|
||||||
|
'teaDoses': dict({
|
||||||
|
'DoseA': dict({
|
||||||
|
'doseIndex': 'DoseA',
|
||||||
|
'stopTarget': 8,
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
'version': 'v1',
|
||||||
|
'weeklySchedulingConfig': dict({
|
||||||
|
'enabled': True,
|
||||||
|
'friday': dict({
|
||||||
|
'enabled': True,
|
||||||
|
'h_off': 16,
|
||||||
|
'h_on': 6,
|
||||||
|
'm_off': 0,
|
||||||
|
'm_on': 0,
|
||||||
|
}),
|
||||||
|
'monday': dict({
|
||||||
|
'enabled': True,
|
||||||
|
'h_off': 16,
|
||||||
|
'h_on': 6,
|
||||||
|
'm_off': 0,
|
||||||
|
'm_on': 0,
|
||||||
|
}),
|
||||||
|
'saturday': dict({
|
||||||
|
'enabled': True,
|
||||||
|
'h_off': 16,
|
||||||
|
'h_on': 6,
|
||||||
|
'm_off': 0,
|
||||||
|
'm_on': 0,
|
||||||
|
}),
|
||||||
|
'sunday': dict({
|
||||||
|
'enabled': True,
|
||||||
|
'h_off': 16,
|
||||||
|
'h_on': 6,
|
||||||
|
'm_off': 0,
|
||||||
|
'm_on': 0,
|
||||||
|
}),
|
||||||
|
'thursday': dict({
|
||||||
|
'enabled': True,
|
||||||
|
'h_off': 16,
|
||||||
|
'h_on': 6,
|
||||||
|
'm_off': 0,
|
||||||
|
'm_on': 0,
|
||||||
|
}),
|
||||||
|
'tuesday': dict({
|
||||||
|
'enabled': True,
|
||||||
|
'h_off': 16,
|
||||||
|
'h_on': 6,
|
||||||
|
'm_off': 0,
|
||||||
|
'm_on': 0,
|
||||||
|
}),
|
||||||
|
'wednesday': dict({
|
||||||
|
'enabled': True,
|
||||||
|
'h_off': 16,
|
||||||
|
'h_on': 6,
|
||||||
|
'm_off': 0,
|
||||||
|
'm_on': 0,
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
'current_status': dict({
|
||||||
|
'brew_active': False,
|
||||||
|
'coffee_boiler_on': True,
|
||||||
|
'coffee_set_temp': 95,
|
||||||
|
'coffee_temp': 93,
|
||||||
|
'dose_k1': 1023,
|
||||||
|
'dose_k2': 1023,
|
||||||
|
'dose_k3': 1023,
|
||||||
|
'dose_k4': 1023,
|
||||||
|
'dose_k5': 1023,
|
||||||
|
'drinks_k1': 13,
|
||||||
|
'drinks_k2': 2,
|
||||||
|
'drinks_k3': 42,
|
||||||
|
'drinks_k4': 34,
|
||||||
|
'enable_prebrewing': True,
|
||||||
|
'enable_preinfusion': False,
|
||||||
|
'fri_auto': 'Disabled',
|
||||||
|
'fri_off_time': '00:00',
|
||||||
|
'fri_on_time': '00:00',
|
||||||
|
'global_auto': 'Enabled',
|
||||||
|
'mon_auto': 'Disabled',
|
||||||
|
'mon_off_time': '00:00',
|
||||||
|
'mon_on_time': '00:00',
|
||||||
|
'power': True,
|
||||||
|
'prebrewing_toff_k1': 5,
|
||||||
|
'prebrewing_toff_k2': 5,
|
||||||
|
'prebrewing_toff_k3': 5,
|
||||||
|
'prebrewing_toff_k4': 5,
|
||||||
|
'prebrewing_toff_k5': 5,
|
||||||
|
'prebrewing_ton_k1': 3,
|
||||||
|
'prebrewing_ton_k2': 3,
|
||||||
|
'prebrewing_ton_k3': 3,
|
||||||
|
'prebrewing_ton_k4': 3,
|
||||||
|
'prebrewing_ton_k5': 3,
|
||||||
|
'preinfusion_k1': 4,
|
||||||
|
'preinfusion_k2': 4,
|
||||||
|
'preinfusion_k3': 4,
|
||||||
|
'preinfusion_k4': 4,
|
||||||
|
'preinfusion_k5': 4,
|
||||||
|
'sat_auto': 'Disabled',
|
||||||
|
'sat_off_time': '00:00',
|
||||||
|
'sat_on_time': '00:00',
|
||||||
|
'steam_boiler_enable': True,
|
||||||
|
'steam_boiler_on': True,
|
||||||
|
'steam_level_set': 3,
|
||||||
|
'steam_set_temp': 128,
|
||||||
|
'steam_temp': 113,
|
||||||
|
'sun_auto': 'Disabled',
|
||||||
|
'sun_off_time': '00:00',
|
||||||
|
'sun_on_time': '00:00',
|
||||||
|
'thu_auto': 'Disabled',
|
||||||
|
'thu_off_time': '00:00',
|
||||||
|
'thu_on_time': '00:00',
|
||||||
|
'total_flushing': 69,
|
||||||
|
'tue_auto': 'Disabled',
|
||||||
|
'tue_off_time': '00:00',
|
||||||
|
'tue_on_time': '00:00',
|
||||||
|
'water_reservoir_contact': True,
|
||||||
|
'wed_auto': 'Disabled',
|
||||||
|
'wed_off_time': '00:00',
|
||||||
|
'wed_on_time': '00:00',
|
||||||
|
}),
|
||||||
|
'firmware': dict({
|
||||||
|
'gateway': dict({
|
||||||
|
'latest_version': 'v3.1-rc4',
|
||||||
|
'version': 'v2.2-rc0',
|
||||||
|
}),
|
||||||
|
'machine': dict({
|
||||||
|
'latest_version': '1.2',
|
||||||
|
'version': '1.1',
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
'machine_info': dict({
|
||||||
|
'machine_name': 'GS01234',
|
||||||
|
'serial_number': '**REDACTED**',
|
||||||
|
}),
|
||||||
|
'statistics': dict({
|
||||||
|
'stats': list([
|
||||||
|
dict({
|
||||||
|
'coffeeType': 0,
|
||||||
|
'count': 1047,
|
||||||
|
}),
|
||||||
|
dict({
|
||||||
|
'coffeeType': 1,
|
||||||
|
'count': 560,
|
||||||
|
}),
|
||||||
|
dict({
|
||||||
|
'coffeeType': 2,
|
||||||
|
'count': 468,
|
||||||
|
}),
|
||||||
|
dict({
|
||||||
|
'coffeeType': 3,
|
||||||
|
'count': 312,
|
||||||
|
}),
|
||||||
|
dict({
|
||||||
|
'coffeeType': 4,
|
||||||
|
'count': 2252,
|
||||||
|
}),
|
||||||
|
dict({
|
||||||
|
'coffeeType': -1,
|
||||||
|
'count': 1740,
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
}),
|
||||||
|
})
|
||||||
|
# ---
|
21
tests/components/lamarzocco/test_diagnostics.py
Normal file
21
tests/components/lamarzocco/test_diagnostics.py
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
"""Tests for the diagnostics data provided by the La Marzocco integration."""
|
||||||
|
from syrupy import SnapshotAssertion
|
||||||
|
|
||||||
|
from homeassistant.core import HomeAssistant
|
||||||
|
|
||||||
|
from tests.common import MockConfigEntry
|
||||||
|
from tests.components.diagnostics import get_diagnostics_for_config_entry
|
||||||
|
from tests.typing import ClientSessionGenerator
|
||||||
|
|
||||||
|
|
||||||
|
async def test_diagnostics(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
hass_client: ClientSessionGenerator,
|
||||||
|
init_integration: MockConfigEntry,
|
||||||
|
snapshot: SnapshotAssertion,
|
||||||
|
) -> None:
|
||||||
|
"""Test diagnostics."""
|
||||||
|
assert (
|
||||||
|
await get_diagnostics_for_config_entry(hass, hass_client, init_integration)
|
||||||
|
== snapshot
|
||||||
|
)
|
Loading…
x
Reference in New Issue
Block a user