Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use entity attributes in Obihai sensor #93564

Merged
merged 2 commits into from
May 30, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
61 changes: 19 additions & 42 deletions homeassistant/components/obihai/sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,86 +93,63 @@ class ObihaiServiceSensors(SensorEntity):
def __init__(self, pyobihai: PyObihai, serial: str, service_name: str) -> None:
"""Initialize monitor sensor."""
self._service_name = service_name
self._state = None
self._name = f"{OBIHAI} {self._service_name}"
self._attr_name = f"{OBIHAI} {self._service_name}"
self._pyobihai = pyobihai
self._unique_id = f"{serial}-{self._service_name}"

@property
def name(self):
"""Return the name of the sensor."""
return self._name

@property
def native_value(self):
"""Return the state of the sensor."""
return self._state

@property
def available(self):
"""Return if sensor is available."""
if self._state is not None:
return True
return False

@property
def unique_id(self):
"""Return the unique ID."""
return self._unique_id

@property
def device_class(self):
"""Return the device class for uptime sensor."""
self._attr_unique_id = f"{serial}-{self._service_name}"
if self._service_name == "Last Reboot":
return SensorDeviceClass.TIMESTAMP
return None
self._attr_device_class = SensorDeviceClass.TIMESTAMP

@property
def icon(self):
def icon(self) -> str:
"""Return an icon."""
if self._service_name == "Call Direction":
if self._state == "No Active Calls":
if self._attr_native_value == "No Active Calls":
return "mdi:phone-off"
if self._state == "Inbound Call":
if self._attr_native_value == "Inbound Call":
return "mdi:phone-incoming"
return "mdi:phone-outgoing"
if "Caller Info" in self._service_name:
return "mdi:phone-log"
if "Port" in self._service_name:
if self._state == "Ringing":
if self._attr_native_value == "Ringing":
return "mdi:phone-ring"
if self._state == "Off Hook":
if self._attr_native_value == "Off Hook":
return "mdi:phone-in-talk"
return "mdi:phone-hangup"
if "Service Status" in self._service_name:
if "OBiTALK Service Status" in self._service_name:
return "mdi:phone-check"
if self._state == "0":
if self._attr_native_value == "0":
return "mdi:phone-hangup"
return "mdi:phone-in-talk"
if "Reboot Required" in self._service_name:
if self._state == "false":
if self._attr_native_value == "false":
return "mdi:restart-off"
return "mdi:restart-alert"
return "mdi:phone"

def update(self) -> None:
"""Update the sensor."""
if not self._pyobihai.check_account():
self._state = None
self._attr_native_value = None
self._attr_available = False
return

services = self._pyobihai.get_state()

if self._service_name in services:
self._state = services.get(self._service_name)
self._attr_native_value = services.get(self._service_name)

services = self._pyobihai.get_line_state()

if services is not None and self._service_name in services:
self._state = services.get(self._service_name)
self._attr_native_value = services.get(self._service_name)

call_direction = self._pyobihai.get_call_direction()

if self._service_name in call_direction:
self._state = call_direction.get(self._service_name)
self._attr_native_value = call_direction.get(self._service_name)

if self._attr_native_value is None:
self._attr_available = False
self._attr_available = True