Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .coveragerc
Original file line number Diff line number Diff line change
Expand Up @@ -434,6 +434,7 @@ omit =
homeassistant/components/nut/sensor.py
homeassistant/components/nx584/alarm_control_panel.py
homeassistant/components/nzbget/sensor.py
homeassistant/components/obihai/*
homeassistant/components/octoprint/*
homeassistant/components/oem/climate.py
homeassistant/components/oasa_telematics/sensor.py
Expand Down
1 change: 1 addition & 0 deletions CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,7 @@ homeassistant/components/nsw_fuel_station/* @nickw444
homeassistant/components/nsw_rural_fire_service_feed/* @exxamalte
homeassistant/components/nuki/* @pschmitt
homeassistant/components/nws/* @MatthewFlamm
homeassistant/components/obihai/* @dshokouhi
homeassistant/components/ohmconnect/* @robbiet480
homeassistant/components/onboarding/* @home-assistant/core
homeassistant/components/opentherm_gw/* @mvn23
Expand Down
1 change: 1 addition & 0 deletions homeassistant/components/obihai/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
"""The Obihai integration."""
11 changes: 11 additions & 0 deletions homeassistant/components/obihai/manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"domain": "obihai",
"name": "Obihai",
"documentation": "https://www.home-assistant.io/components/obihai",
"requirements": [
"pyobihai==1.0.2"
],
"dependencies": [],
"codeowners": ["@dshokouhi"]
}

104 changes: 104 additions & 0 deletions homeassistant/components/obihai/sensor.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
"""Support for Obihai Sensors."""
import logging

from datetime import timedelta
import voluptuous as vol

from pyobihai import PyObihai

from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import (
CONF_HOST,
CONF_PASSWORD,
CONF_USERNAME,
DEVICE_CLASS_TIMESTAMP,
)

from homeassistant.helpers.entity import Entity
import homeassistant.helpers.config_validation as cv


_LOGGER = logging.getLogger(__name__)

SCAN_INTERVAL = timedelta(seconds=5)

OBIHAI = "Obihai"
DEFAULT_USERNAME = "admin"
DEFAULT_PASSWORD = "admin"

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
{
vol.Required(CONF_HOST): cv.string,
vol.Optional(CONF_USERNAME, default=DEFAULT_USERNAME): cv.string,
vol.Optional(CONF_PASSWORD, default=DEFAULT_PASSWORD): cv.string,
}
)


def setup_platform(hass, config, add_entities, discovery_info=None):
"""Set up the Obihai sensor platform."""

username = config[CONF_USERNAME]
password = config[CONF_PASSWORD]
host = config[CONF_HOST]

sensors = []

pyobihai = PyObihai()

services = pyobihai.get_state(host, username, password)

line_services = pyobihai.get_line_state(host, username, password)

for key in services:
sensors.append(ObihaiServiceSensors(pyobihai, host, username, password, key))

for key in line_services:
sensors.append(ObihaiServiceSensors(pyobihai, host, username, password, key))

add_entities(sensors)


class ObihaiServiceSensors(Entity):
"""Get the status of each Obihai Lines."""

def __init__(self, pyobihai, host, username, password, service_name):
"""Initialize monitor sensor."""
self._host = host
self._username = username
self._password = password
self._service_name = service_name
self._state = None
self._name = f"{OBIHAI} {self._service_name}"
self._pyobihai = pyobihai

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

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

@property
def device_class(self):
"""Return the device class for uptime sensor."""
if self._service_name == "Last Reboot":
return DEVICE_CLASS_TIMESTAMP
return None

Comment thread
dshokouhi marked this conversation as resolved.
def update(self):
"""Update the sensor."""
services = self._pyobihai.get_state(self._host, self._username, self._password)

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

services = self._pyobihai.get_line_state(
self._host, self._username, self._password
)

if self._service_name in services:
Comment thread
MartinHjelmare marked this conversation as resolved.
self._state = services.get(self._service_name)
3 changes: 3 additions & 0 deletions requirements_all.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1344,6 +1344,9 @@ pynws==0.7.4
# homeassistant.components.nx584
pynx584==0.4

# homeassistant.components.obihai
pyobihai==1.0.2

# homeassistant.components.openuv
pyopenuv==1.0.9

Expand Down