From 4cdbd3c5763cbbc0d435dcfa27901efc1357516d Mon Sep 17 00:00:00 2001 From: Maciej Bieniek Date: Sat, 2 Oct 2021 09:05:49 +0200 Subject: [PATCH] Fix `Unable to serialize to JSON` error in Xiaomi Miio (#56929) --- homeassistant/components/xiaomi_miio/fan.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/xiaomi_miio/fan.py b/homeassistant/components/xiaomi_miio/fan.py index 1b275ea2d6e..04cdc4573db 100644 --- a/homeassistant/components/xiaomi_miio/fan.py +++ b/homeassistant/components/xiaomi_miio/fan.py @@ -1,6 +1,7 @@ """Support for Xiaomi Mi Air Purifier and Xiaomi Mi Air Humidifier.""" from abc import abstractmethod import asyncio +from enum import Enum import logging import math @@ -363,13 +364,21 @@ class XiaomiGenericAirPurifier(XiaomiGenericDevice): return None + @staticmethod + def _extract_value_from_attribute(state, attribute): + value = getattr(state, attribute) + if isinstance(value, Enum): + return value.value + + return value + @callback def _handle_coordinator_update(self): """Fetch state from the device.""" self._state = self.coordinator.data.is_on self._state_attrs.update( { - key: getattr(self.coordinator.data, value) + key: self._extract_value_from_attribute(self.coordinator.data, value) for key, value in self._available_attributes.items() } ) @@ -434,7 +443,7 @@ class XiaomiAirPurifier(XiaomiGenericAirPurifier): self._state = self.coordinator.data.is_on self._state_attrs.update( { - key: getattr(self.coordinator.data, value) + key: self._extract_value_from_attribute(self.coordinator.data, value) for key, value in self._available_attributes.items() } )