Skip to content

Commit

Permalink
Add last_reset support
Browse files Browse the repository at this point in the history
  • Loading branch information
raman325 committed May 31, 2023
1 parent d76b76d commit 074cd36
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 7 deletions.
4 changes: 2 additions & 2 deletions homeassistant/components/zwave_js/entity.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ def __init__(
)

@callback
def on_value_update(self) -> None:
def on_value_update(self, event_data: dict) -> None:
"""Call when one of the watched values change.
To be overridden by platforms needing this event.
Expand Down Expand Up @@ -221,7 +221,7 @@ def _value_changed(self, event_data: dict) -> None:
value.value,
)

self.on_value_update()
self.on_value_update(event_data)
self.async_write_ha_state()

@callback
Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/zwave_js/light.py
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ def __init__(
self._set_optimistic_state: bool = False

@callback
def on_value_update(self) -> None:
def on_value_update(self, event_data: dict) -> None:
"""Call when a watched value is added or updated."""
self._calculate_color_values()

Expand Down
13 changes: 11 additions & 2 deletions homeassistant/components/zwave_js/sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import StateType
from homeassistant.util import dt as dt_util

from .const import (
ATTR_METER_TYPE,
Expand Down Expand Up @@ -626,11 +627,19 @@ class ZWaveNumericSensor(ZwaveSensor):
"""Representation of a Z-Wave Numeric sensor."""

@callback
def on_value_update(self) -> None:
def on_value_update(self, event_data: dict) -> None:
"""Handle scale changes for this value on value updated event."""
data = NumericSensorDataTemplate().resolve_data(self.info.primary_value)
value = self.info.primary_value
data = NumericSensorDataTemplate().resolve_data(value)
self.entity_description = get_entity_description(data)
self._attr_native_unit_of_measurement = data.unit_of_measurement
if (
(prev_value := event_data["args"]["prevValue"]) is not None
and (new_value := event_data["args"]["newValue"]) is not None
and prev_value > new_value
and self.state_class == SensorStateClass.TOTAL
):
self._attr_last_reset = dt_util.now()

@property
def native_value(self) -> float:
Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/zwave_js/switch.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ def __init__(
self._attr_name = self.generate_name(include_value_name=True)

@callback
def on_value_update(self) -> None:
def on_value_update(self, event_data: dict) -> None:
"""Call when a watched value is added or updated."""
self._update_state()

Expand Down
32 changes: 31 additions & 1 deletion tests/components/zwave_js/test_sensor.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
"""Test the Z-Wave JS sensor platform."""
import copy
from unittest.mock import patch

import pytest
from zwave_js_server.const.command_class.meter import MeterType
Expand Down Expand Up @@ -39,6 +40,7 @@
)
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from homeassistant.util import dt as dt_util

from .common import (
AIR_TEMPERATURE_SENSOR,
Expand Down Expand Up @@ -779,6 +781,34 @@ async def test_energy_production_sensors(
assert state.state == str(state_data["state"])
for attr, val in state_data["attributes"].items():
assert state.attributes[attr] == val

for attr in state_data.get("missing_attributes", []):
assert attr not in state.attributes

entity_id = "sensor.node_2_energy_production_today"
state = hass.states.get(entity_id)
assert state
assert "last_reset" not in state.attributes
event = Event(
"value updated",
{
"source": "node",
"event": "value updated",
"nodeId": energy_production.node_id,
"args": {
"commandClassName": "Energy Production",
"commandClass": 144,
"endpoint": 0,
"property": "value",
"propertyName": "value",
"propertyKey": 2,
"propertyKeyName": "2",
"newValue": 1.0,
"prevValue": 123.45,
},
},
)
with patch("homeassistant.util.dt.now", return_value=dt_util.now()):
energy_production.receive_event(event)
state = hass.states.get(entity_id)
assert state
assert state.attributes["last_reset"] == dt_util.now().isoformat()

0 comments on commit 074cd36

Please sign in to comment.