* Update pyrainbird to version 0.2.0 to fix zone number issue: - home-assistant/home-assistant/issues/24519 - jbarrancos/pyrainbird/issues/5 - https://community.home-assistant.io/t/rainbird-zone-switches-5-8-dont-correspond/104705 * requirements_all.txt regenerated * code formatting * pyrainbird version 0.3.0 * zone id * rainsensor return state * updating rainsensor * new version of pyrainbird * binary sensor state * quiet in check format * is_on instead of state for binary_sensor * no unit of measurement for binary sensor * no monitored conditions config * get keys of dict directly * removed redundant update of state * simplified switch * right states for switch * raindelay sensor * raindelay sensor * binary sensor state * binary sensor state * reorganized imports * doc on public method * reformatted * add irrigation service to rain bird, which allows you to set the duration * rebased on konikvranik and solved some feedback * add irrigation service to rain bird * sensor types to constants * synchronized register service * patform discovery * binary sensor as wrapper to sensor * version 0.4.0 * new config approach * sensors cleanup * bypass if no zones found * platform schema removed * Change config schema to list of controllers some small code improvements as suggested in CR: - dictionary acces by [] - just return instead of return False - import order - no optional parameter name * some small code improvements as suggested in CR: - supported platforms in constant - just return instead of return False - removed unused constant * No single controller configuration Co-Authored-By: Martin Hjelmare <marhje52@kth.se> * pyrainbird 0.4.1 * individual switch configuration * imports order * generate default name out of entity * trigger time required for controller * incorporated CR remarks: - constant fo rzones - removed SCAN_INTERVAL - detection of success on initialization - removed underscore - refactored if/else - empty line on end of file - hass as first parameter * import of library on top * refactored * Update homeassistant/components/rainbird/__init__.py Co-Authored-By: Martin Hjelmare <marhje52@kth.se> * validate time and set defaults * set defaults on right place * pylint bypass * iterate over values * codeowner * reverted changes: * irrigation time just as positive integer. Making it complex does make sense * zone edfaults fullfiled at runtime. There is no information about available zones in configuration time. * codeowners updated * accept timedelta in irrigation time * simplified time calculation * call total_seconds * irrigation time as seconds. * simplified schema
69 lines
2 KiB
Python
69 lines
2 KiB
Python
"""Support for Rain Bird Irrigation system LNK WiFi Module."""
|
|
import logging
|
|
|
|
from pyrainbird import RainbirdController
|
|
|
|
from homeassistant.helpers.entity import Entity
|
|
|
|
from . import (
|
|
DATA_RAINBIRD,
|
|
RAINBIRD_CONTROLLER,
|
|
SENSOR_TYPE_RAINDELAY,
|
|
SENSOR_TYPE_RAINSENSOR,
|
|
SENSOR_TYPES,
|
|
)
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
|
|
def setup_platform(hass, config, add_entities, discovery_info=None):
|
|
"""Set up a Rain Bird sensor."""
|
|
|
|
if discovery_info is None:
|
|
return
|
|
|
|
controller = hass.data[DATA_RAINBIRD][discovery_info[RAINBIRD_CONTROLLER]]
|
|
add_entities(
|
|
[RainBirdSensor(controller, sensor_type) for sensor_type in SENSOR_TYPES], True
|
|
)
|
|
|
|
|
|
class RainBirdSensor(Entity):
|
|
"""A sensor implementation for Rain Bird device."""
|
|
|
|
def __init__(self, controller: RainbirdController, sensor_type):
|
|
"""Initialize the Rain Bird sensor."""
|
|
self._sensor_type = sensor_type
|
|
self._controller = controller
|
|
self._name = SENSOR_TYPES[self._sensor_type][0]
|
|
self._icon = SENSOR_TYPES[self._sensor_type][2]
|
|
self._unit_of_measurement = SENSOR_TYPES[self._sensor_type][1]
|
|
self._state = None
|
|
|
|
@property
|
|
def state(self):
|
|
"""Return the state of the sensor."""
|
|
return self._state
|
|
|
|
def update(self):
|
|
"""Get the latest data and updates the states."""
|
|
_LOGGER.debug("Updating sensor: %s", self._name)
|
|
if self._sensor_type == SENSOR_TYPE_RAINSENSOR:
|
|
self._state = self._controller.get_rain_sensor_state()
|
|
elif self._sensor_type == SENSOR_TYPE_RAINDELAY:
|
|
self._state = self._controller.get_rain_delay()
|
|
|
|
@property
|
|
def name(self):
|
|
"""Return the name of this camera."""
|
|
return self._name
|
|
|
|
@property
|
|
def unit_of_measurement(self):
|
|
"""Return the units of measurement."""
|
|
return self._unit_of_measurement
|
|
|
|
@property
|
|
def icon(self):
|
|
"""Return icon."""
|
|
return self._icon
|