From 7a9ed1c957e6fa7540c927185e9eee326a25295d Mon Sep 17 00:00:00 2001 From: Ernst Klamer Date: Thu, 17 Mar 2022 14:57:16 +0100 Subject: [PATCH] Fix time format error --- custom_components/ble_monitor/__init__.py | 6 +++--- custom_components/ble_monitor/binary_sensor.py | 16 ++++++++-------- custom_components/ble_monitor/device_tracker.py | 14 +++++++------- custom_components/ble_monitor/manifest.json | 2 +- custom_components/ble_monitor/sensor.py | 8 +++++--- 5 files changed, 24 insertions(+), 22 deletions(-) diff --git a/custom_components/ble_monitor/__init__.py b/custom_components/ble_monitor/__init__.py index 7d8e4a728..e71b6af3d 100644 --- a/custom_components/ble_monitor/__init__.py +++ b/custom_components/ble_monitor/__init__.py @@ -24,7 +24,7 @@ from homeassistant.helpers.entity_registry import ( async_entries_for_device, ) -import homeassistant.util.dt as dt_util +from homeassistant.util import dt from .ble_parser import BleParser from .const import ( @@ -571,7 +571,7 @@ def __init__(self, config, dataqueue): self.tracker_whitelist = [] self.report_unknown = False self.report_unknown_whitelist = [] - self.last_bt_reset = dt_util.now() + self.last_bt_reset = dt.now() if self.config[CONF_REPORT_UNKNOWN]: if self.config[CONF_REPORT_UNKNOWN] != "Off": self.report_unknown = self.config[CONF_REPORT_UNKNOWN] @@ -752,7 +752,7 @@ def run(self): if (interface_is_ok[hci] is False) and (self.config[CONF_BT_AUTO_RESTART] is True): interfaces_to_reset.append(hci) if interfaces_to_reset: - ts_now = dt_util.now() + ts_now = dt.now() if (ts_now - self.last_bt_reset).seconds > 60: for iface in interfaces_to_reset: _LOGGER.error( diff --git a/custom_components/ble_monitor/binary_sensor.py b/custom_components/ble_monitor/binary_sensor.py index 586f25021..7c2e5231b 100644 --- a/custom_components/ble_monitor/binary_sensor.py +++ b/custom_components/ble_monitor/binary_sensor.py @@ -18,7 +18,7 @@ ) from homeassistant.helpers.event import async_call_later from homeassistant.helpers.restore_state import RestoreEntity -import homeassistant.util.dt as dt_util +from homeassistant.util import dt from .helper import ( identifier_normalize, @@ -142,7 +142,7 @@ async def async_add_binary_sensor(key, sensortype, firmware, manufacturer=None, batt = {} # batteries mibeacon_cnt = 0 hpriority = [] - ts_last = dt_util.now() + ts_last = dt.now() ts_now = ts_last data = {} await asyncio.sleep(0) @@ -235,7 +235,7 @@ async def async_add_binary_sensor(key, sensortype, firmware, manufacturer=None, ): hpriority.append(entity) data = None - ts_now = dt_util.now() + ts_now = dt.now() if ts_now - ts_last < timedelta(seconds=self.period): continue ts_last = ts_now @@ -422,7 +422,7 @@ def collect(self, data, batt_attr=None): self._extra_state_attributes[ATTR_BATTERY_LEVEL] = batt_attr if "motion timer" in data: if data["motion timer"] == 1: - self._extra_state_attributes["last_motion"] = dt_util.now() + self._extra_state_attributes["last_motion"] = dt.now() # dirty hack for kettle status if self._device_type in KETTLES: if self._newstate == 0: @@ -483,7 +483,7 @@ def __init__(self, config, key, devtype, firmware, description, manufacturer=Non def reset_state(self, event=None): """Reset state of the sensor.""" # check if the latest update of the timer is longer than the set timer value - if dt_util.now() - self._start_timer >= timedelta(seconds=self._reset_timer): + if dt.now() - self._start_timer >= timedelta(seconds=self._reset_timer): self._state = False self.schedule_update_ha_state(False) @@ -493,15 +493,15 @@ async def async_update(self): if self._reset_timer > 0: try: # if there is a last_motion attribute, check the timer - now = dt_util.now() - self._start_timer = self._extra_state_attributes["last_motion"] + now = dt.now() + self._start_timer = dt.parse_datetime(self._extra_state_attributes["last_motion"]) if now - self._start_timer >= timedelta(seconds=self._reset_timer): self._state = False else: self._state = True async_call_later(self.hass, self._reset_timer, self.reset_state) - except KeyError: + except (KeyError, ValueError): self._state = self._newstate else: self._state = self._newstate diff --git a/custom_components/ble_monitor/device_tracker.py b/custom_components/ble_monitor/device_tracker.py index 71937be68..e65c70ab3 100644 --- a/custom_components/ble_monitor/device_tracker.py +++ b/custom_components/ble_monitor/device_tracker.py @@ -21,7 +21,7 @@ from homeassistant.helpers.event import async_call_later from homeassistant.helpers import device_registry from homeassistant.helpers.restore_state import RestoreEntity -import homeassistant.util.dt as dt_util +from homeassistant.util import dt from .helper import ( identifier_normalize, @@ -107,7 +107,7 @@ async def async_add_device_tracker(key): trackers_by_key = {} trackers = [] adv_cnt = 0 - ts_last = dt_util.now() + ts_last = dt.now() ts_now = ts_last data = None await asyncio.sleep(0) @@ -163,7 +163,7 @@ async def async_add_device_tracker(key): except AttributeError: continue data = None - ts_now = dt_util.now() + ts_now = dt.now() if ts_now - ts_last < timedelta(seconds=self.period): continue ts_last = ts_now @@ -212,8 +212,8 @@ async def async_added_to_hass(self): self.ready_for_update = True return if "last_seen" in old_state.attributes: - self._last_seen = dt_util.parse_datetime(old_state.attributes["last_seen"]) - self._extra_state_attributes["last_seen"] = dt_util.parse_datetime( + self._last_seen = dt.parse_datetime(old_state.attributes["last_seen"]) + self._extra_state_attributes["last_seen"] = dt.parse_datetime( old_state.attributes["last_seen"] ) @@ -238,7 +238,7 @@ def is_beacon(self): @property def is_connected(self): """Return the connection state of the device.""" - return self._last_seen and (dt_util.now() - self._last_seen) < timedelta( + return self._last_seen and (dt.now() - self._last_seen) < timedelta( seconds=self._consider_home ) @@ -358,7 +358,7 @@ def data_update(self, data): if self.enabled is False: return - now = dt_util.now() + now = dt.now() # Do not update within scan interval to save resources if self._last_seen: if now - self._last_seen <= timedelta(seconds=self._scan_interval): diff --git a/custom_components/ble_monitor/manifest.json b/custom_components/ble_monitor/manifest.json index 93b1e1720..2c01ea804 100644 --- a/custom_components/ble_monitor/manifest.json +++ b/custom_components/ble_monitor/manifest.json @@ -13,6 +13,6 @@ ], "dependencies": [], "codeowners": ["@Ernst79", "@Magalex2x14", "@Thrilleratplay"], - "version": "8.0.4-beta", + "version": "8.0.5-beta", "iot_class": "local_polling" } diff --git a/custom_components/ble_monitor/sensor.py b/custom_components/ble_monitor/sensor.py index e51fb519b..3261a251d 100644 --- a/custom_components/ble_monitor/sensor.py +++ b/custom_components/ble_monitor/sensor.py @@ -18,7 +18,7 @@ from homeassistant.helpers.event import async_call_later from homeassistant.helpers.restore_state import RestoreEntity from homeassistant.components.sensor import SensorEntity -import homeassistant.util.dt as dt_util +from homeassistant.util import dt from homeassistant.util.temperature import convert as convert_temp from .helper import ( @@ -165,7 +165,7 @@ async def async_add_sensor(key, sensortype, firmware, manufacturer=None, data={} rssi = {} # rssi ble_adv_cnt = 0 - ts_now = dt_util.now() + ts_now = dt.now() ts_restart = ts_now ts_last_update = ts_now period_cnt = 0 @@ -280,7 +280,7 @@ async def async_add_sensor(key, sensortype, firmware, manufacturer=None, data={} entity.async_schedule_update_ha_state(True) entity.pending_update = False data = None - ts_now = dt_util.now() + ts_now = dt.now() if ts_now - ts_last_update < timedelta(seconds=self.period): continue ts_last_update = ts_now @@ -906,6 +906,8 @@ def collect(self, data, period_cnt, batt_attr=None): self._extra_state_attributes["weight removed"] = bool( data["weight removed"] ) + if "impedance" not in data and data["type"] == "Mi Scale V2": + self._extra_state_attributes["impedance"] = "unavailable" if "impedance" in data: self._extra_state_attributes["impedance"] = data["impedance"] if "weight unit" in data: