mirror of
https://github.com/elisspace/core.git
synced 2026-10-05 16:56:19 +00:00
Add zwave_js.reset_meter service (#53390)
* Add zwave_js.meter_reset service * fix log statement * Add endpoint attribute to service call and rename service * Make service an entity service * remove endpoint from service description
This commit is contained in:
@@ -4,6 +4,7 @@ from __future__ import annotations
|
||||
import logging
|
||||
from typing import cast
|
||||
|
||||
import voluptuous as vol
|
||||
from zwave_js_server.client import Client as ZwaveClient
|
||||
from zwave_js_server.const import CommandClass, ConfigurationValueType
|
||||
from zwave_js_server.model.node import Node as ZwaveNode
|
||||
@@ -26,10 +27,11 @@ from homeassistant.const import (
|
||||
TEMP_FAHRENHEIT,
|
||||
)
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.helpers import entity_platform
|
||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
|
||||
from .const import DATA_CLIENT, DOMAIN
|
||||
from .const import ATTR_METER_TYPE, ATTR_VALUE, DATA_CLIENT, DOMAIN, SERVICE_RESET_METER
|
||||
from .discovery import ZwaveDiscoveryInfo
|
||||
from .entity import ZWaveBaseEntity
|
||||
from .helpers import get_device_id
|
||||
@@ -89,6 +91,16 @@ async def async_setup_entry(
|
||||
)
|
||||
)
|
||||
|
||||
platform = entity_platform.async_get_current_platform()
|
||||
platform.async_register_entity_service(
|
||||
SERVICE_RESET_METER,
|
||||
{
|
||||
vol.Optional(ATTR_METER_TYPE): vol.Coerce(int),
|
||||
vol.Optional(ATTR_VALUE): vol.Coerce(int),
|
||||
},
|
||||
"async_reset_meter",
|
||||
)
|
||||
|
||||
|
||||
class ZwaveSensorBase(ZWaveBaseEntity, SensorEntity):
|
||||
"""Basic Representation of a Z-Wave sensor."""
|
||||
@@ -218,6 +230,30 @@ class ZWaveNumericSensor(ZwaveSensorBase):
|
||||
|
||||
return str(self.info.primary_value.metadata.unit)
|
||||
|
||||
async def async_reset_meter(
|
||||
self, meter_type: int | None = None, value: int | None = None
|
||||
) -> None:
|
||||
"""Reset meter(s) on device."""
|
||||
node = self.info.node
|
||||
primary_value = self.info.primary_value
|
||||
if primary_value.command_class != CommandClass.METER:
|
||||
raise TypeError("Reset only available for Meter sensors")
|
||||
options = {}
|
||||
if meter_type is not None:
|
||||
options["type"] = meter_type
|
||||
if value is not None:
|
||||
options["targetValue"] = value
|
||||
args = [options] if options else []
|
||||
await node.endpoints[primary_value.endpoint].async_invoke_cc_api(
|
||||
CommandClass.METER, "reset", *args, wait_for_result=False
|
||||
)
|
||||
LOGGER.debug(
|
||||
"Meters on node %s endpoint %s reset with the following options: %s",
|
||||
node,
|
||||
primary_value.endpoint,
|
||||
options,
|
||||
)
|
||||
|
||||
|
||||
class ZWaveListSensor(ZwaveSensorBase):
|
||||
"""Representation of a Z-Wave Numeric sensor with multiple states."""
|
||||
|
||||
Reference in New Issue
Block a user