Add Obihai integration (#26537)

* Add Obihai integration

* Lint

* Lint and bump library for multiple ports fix

* Review comments

* Review comments

* Correct errors

* Review comments

* Review comments
This commit is contained in:
Daniel Shokouhi 2019-09-11 10:26:50 -07:00 committed by Martin Hjelmare
parent 1a73e6b44e
commit 2b30f47f4b
6 changed files with 121 additions and 0 deletions

View file

@ -435,6 +435,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

View file

@ -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

View file

@ -0,0 +1 @@
"""The Obihai integration."""

View file

@ -0,0 +1,11 @@
{
"domain": "obihai",
"name": "Obihai",
"documentation": "https://www.home-assistant.io/components/obihai",
"requirements": [
"pyobihai==1.0.2"
],
"dependencies": [],
"codeowners": ["@dshokouhi"]
}

View file

@ -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
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:
self._state = services.get(self._service_name)

View file

@ -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