diff --git a/.coveragerc b/.coveragerc index 077b6bf5753..86819ef51a3 100644 --- a/.coveragerc +++ b/.coveragerc @@ -162,6 +162,7 @@ omit = homeassistant/components/envisalink/* homeassistant/components/ephember/climate.py homeassistant/components/epson/media_player.py + homeassistant/components/epsonworkforce/sensor.py homeassistant/components/eq3btsmart/climate.py homeassistant/components/esphome/__init__.py homeassistant/components/esphome/binary_sensor.py diff --git a/CODEOWNERS b/CODEOWNERS index bd21c2fd494..30269be9051 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -67,6 +67,7 @@ homeassistant/components/eight_sleep/* @mezz64 homeassistant/components/emby/* @mezz64 homeassistant/components/enigma2/* @fbradyirl homeassistant/components/ephember/* @ttroy50 +homeassistant/components/epsonworkforce/* @ThaStealth homeassistant/components/eq3btsmart/* @rytilahti homeassistant/components/esphome/* @OttoWinter homeassistant/components/file/* @fabaff diff --git a/homeassistant/components/epsonworkforce/__init__.py b/homeassistant/components/epsonworkforce/__init__.py new file mode 100644 index 00000000000..5efd217b1dd --- /dev/null +++ b/homeassistant/components/epsonworkforce/__init__.py @@ -0,0 +1 @@ +"""The epsonworkforce component.""" diff --git a/homeassistant/components/epsonworkforce/manifest.json b/homeassistant/components/epsonworkforce/manifest.json new file mode 100644 index 00000000000..5f39c414725 --- /dev/null +++ b/homeassistant/components/epsonworkforce/manifest.json @@ -0,0 +1,9 @@ +{ + "domain": "epsonworkforce", + "name": "Epson Workforce", + "documentation": "https://www.home-assistant.io/components/epsonworkforce", + "dependencies": [], + "codeowners": ["@ThaStealth"], + "requirements": ["epsonprinter==0.0.8"] +} + diff --git a/homeassistant/components/epsonworkforce/sensor.py b/homeassistant/components/epsonworkforce/sensor.py new file mode 100644 index 00000000000..6abf04d8aaa --- /dev/null +++ b/homeassistant/components/epsonworkforce/sensor.py @@ -0,0 +1,85 @@ +"""Support for Epson Workforce Printer.""" +from datetime import timedelta +import logging + +import voluptuous as vol + +from homeassistant.components.sensor import PLATFORM_SCHEMA +from homeassistant.const import CONF_HOST, CONF_MONITORED_CONDITIONS +from homeassistant.exceptions import PlatformNotReady +import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.entity import Entity + +REQUIREMENTS = ['epsonprinter==0.0.8'] + +_LOGGER = logging.getLogger(__name__) +MONITORED_CONDITIONS = { + 'black': ['Inklevel Black', '%', 'mdi:water'], + 'magenta': ['Inklevel Magenta', '%', 'mdi:water'], + 'cyan': ['Inklevel Cyan', '%', 'mdi:water'], + 'yellow': ['Inklevel Yellow', '%', 'mdi:water'], + 'clean': ['Inklevel Cleaning', '%', 'mdi:water'], +} +PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ + vol.Required(CONF_HOST): cv.string, + vol.Required(CONF_MONITORED_CONDITIONS): + vol.All(cv.ensure_list, [vol.In(MONITORED_CONDITIONS)]), +}) +SCAN_INTERVAL = timedelta(minutes=60) + + +def setup_platform(hass, config, add_devices, discovery_info=None): + """Set up the cartridge sensor.""" + host = config.get(CONF_HOST) + + from epsonprinter_pkg.epsonprinterapi import EpsonPrinterAPI + api = EpsonPrinterAPI(host) + if not api.available: + raise PlatformNotReady() + + sensors = [EpsonPrinterCartridge(api, condition) + for condition in config[CONF_MONITORED_CONDITIONS]] + + add_devices(sensors, True) + + +class EpsonPrinterCartridge(Entity): + """Representation of a cartridge sensor.""" + + def __init__(self, api, cartridgeidx): + """Initialize a cartridge sensor.""" + self._api = api + + self._id = cartridgeidx + self._name = MONITORED_CONDITIONS[self._id][0] + self._unit = MONITORED_CONDITIONS[self._id][1] + self._icon = MONITORED_CONDITIONS[self._id][2] + + @property + def name(self): + """Return the name of the sensor.""" + return self._name + + @property + def icon(self): + """Icon to use in the frontend, if any.""" + return self._icon + + @property + def unit_of_measurement(self): + """Return the unit the value is expressed in.""" + return self._unit + + @property + def state(self): + """Return the state of the device.""" + return self._api.getSensorValue(self._id) + + @property + def available(self): + """Could the device be accessed during the last update call.""" + return self._api.available + + def update(self): + """Get the latest data from the Epson printer.""" + self._api.update() diff --git a/requirements_all.txt b/requirements_all.txt index 5f16a98bec1..bc2764eecf0 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -397,6 +397,9 @@ ephem==3.7.6.0 # homeassistant.components.epson epson-projector==0.1.3 +# homeassistant.components.epsonworkforce +epsonprinter==0.0.8 + # homeassistant.components.netgear_lte eternalegypt==0.0.7