diff --git a/.coveragerc b/.coveragerc index 1e5cb41c463..ad001e56048 100644 --- a/.coveragerc +++ b/.coveragerc @@ -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 diff --git a/CODEOWNERS b/CODEOWNERS index 2a04189dfba..7a84eeac13b 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -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 diff --git a/homeassistant/components/obihai/__init__.py b/homeassistant/components/obihai/__init__.py new file mode 100644 index 00000000000..8e65423b73b --- /dev/null +++ b/homeassistant/components/obihai/__init__.py @@ -0,0 +1 @@ +"""The Obihai integration.""" diff --git a/homeassistant/components/obihai/manifest.json b/homeassistant/components/obihai/manifest.json new file mode 100644 index 00000000000..b6bad10d608 --- /dev/null +++ b/homeassistant/components/obihai/manifest.json @@ -0,0 +1,11 @@ +{ + "domain": "obihai", + "name": "Obihai", + "documentation": "https://www.home-assistant.io/components/obihai", + "requirements": [ + "pyobihai==1.0.2" + ], + "dependencies": [], + "codeowners": ["@dshokouhi"] + } + \ No newline at end of file diff --git a/homeassistant/components/obihai/sensor.py b/homeassistant/components/obihai/sensor.py new file mode 100644 index 00000000000..4eb3881e95b --- /dev/null +++ b/homeassistant/components/obihai/sensor.py @@ -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) diff --git a/requirements_all.txt b/requirements_all.txt index 0cbb76f78d6..173e203a892 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -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