diff --git a/config/.HA_VERSION b/config/.HA_VERSION index 6e79cb10..598d667c 100755 --- a/config/.HA_VERSION +++ b/config/.HA_VERSION @@ -1 +1 @@ -0.72.1 \ No newline at end of file +0.73.0 \ No newline at end of file diff --git a/config/.config_entries.json b/config/.config_entries.json deleted file mode 100644 index f1c4a38d..00000000 --- a/config/.config_entries.json +++ /dev/null @@ -1,48 +0,0 @@ -[ - { - "data": { - "bridge_id": "001788FFFE2B695A", - "host": "192.168.10.75", - "username": "UplIVZey-wUXCfTG7Jf99pfEMjXegMm2H8ciXBvq" - }, - "domain": "hue", - "entry_id": "7e9bfa52b2d04ebe82893e4043bf944b", - "source": "import", - "title": "Carlo-Hue2", - "version": 1 - }, - { - "data": { - "bridge_id": "001788FFFE148545", - "host": "192.168.10.76", - "username": "f2V4X70LAr2Y5yW9LMPziAOuT3XTdbZd-N-J2eaK" - }, - "domain": "hue", - "entry_id": "97428cbb507e4afcbe38eb8b9c4f2732", - "source": "import", - "title": "Carlo-Hue1", - "version": 1 - }, - { - "data": { - "impl_domain": "nest", - "tokens": { - "access_token": "c.qZwzHcUwWHfK927A4CvobNIq3exgmG2kMAV2LcFYVaFd74xfWJXHfQJCGDkqJrybO9UFf6n6bs13cPDgWersBwhA0e3JZMYHZBBxMIOY7KegK78dYoVs4pnaMVQ6k3WUWoJHE8G3TixOnx5F", - "expires_in": 315360000 - } - }, - "domain": "nest", - "entry_id": "dff91f79d9df415d8788eaf512325435", - "source": "import", - "title": "Nest (import from configuration.yaml)", - "version": 1 - }, - { - "data": {}, - "domain": "cast", - "entry_id": "41c7cbc168f542e88ec8e6a3e37e20fc", - "source": "user", - "title": "Google Cast", - "version": 1 - } -] \ No newline at end of file diff --git a/config/.storage/core.config_entries b/config/.storage/core.config_entries new file mode 100644 index 00000000..fd363857 --- /dev/null +++ b/config/.storage/core.config_entries @@ -0,0 +1,54 @@ +{ + "data": { + "entries": [ + { + "data": { + "bridge_id": "001788FFFE2B695A", + "host": "192.168.10.75", + "username": "UplIVZey-wUXCfTG7Jf99pfEMjXegMm2H8ciXBvq" + }, + "domain": "hue", + "entry_id": "7e9bfa52b2d04ebe82893e4043bf944b", + "source": "import", + "title": "Carlo-Hue2", + "version": 1 + }, + { + "data": { + "bridge_id": "001788FFFE148545", + "host": "192.168.10.76", + "username": "f2V4X70LAr2Y5yW9LMPziAOuT3XTdbZd-N-J2eaK" + }, + "domain": "hue", + "entry_id": "97428cbb507e4afcbe38eb8b9c4f2732", + "source": "import", + "title": "Carlo-Hue1", + "version": 1 + }, + { + "data": { + "impl_domain": "nest", + "tokens": { + "access_token": "c.qZwzHcUwWHfK927A4CvobNIq3exgmG2kMAV2LcFYVaFd74xfWJXHfQJCGDkqJrybO9UFf6n6bs13cPDgWersBwhA0e3JZMYHZBBxMIOY7KegK78dYoVs4pnaMVQ6k3WUWoJHE8G3TixOnx5F", + "expires_in": 315360000 + } + }, + "domain": "nest", + "entry_id": "dff91f79d9df415d8788eaf512325435", + "source": "import", + "title": "Nest (import from configuration.yaml)", + "version": 1 + }, + { + "data": {}, + "domain": "cast", + "entry_id": "41c7cbc168f542e88ec8e6a3e37e20fc", + "source": "user", + "title": "Google Cast", + "version": 1 + } + ] + }, + "key": "core.config_entries", + "version": 1 +} \ No newline at end of file diff --git a/config/custom_components/camera/neato.py b/config/custom_components/camera/neato.py deleted file mode 100755 index 689129e1..00000000 --- a/config/custom_components/camera/neato.py +++ /dev/null @@ -1,65 +0,0 @@ -""" -Camera that loads a picture from Neato. - -For more details about this platform, please refer to the documentation at -https://home-assistant.io/components/camera.neato/ -""" -import logging - -from datetime import timedelta -from homeassistant.components.camera import Camera -from homeassistant.components.neato import ( - NEATO_MAP_DATA, NEATO_ROBOTS, NEATO_LOGIN) -from homeassistant.util import Throttle - -_LOGGER = logging.getLogger(__name__) - -DEPENDENCIES = ['neato'] - - -def setup_platform(hass, config, add_devices, discovery_info=None): - """Set up the Neato Camera.""" - dev = [] - for robot in hass.data[NEATO_ROBOTS]: - if 'maps' in robot.traits: - dev.append(NeatoCleaningMap(hass, robot)) - _LOGGER.debug("Adding robots for cleaning maps %s", dev) - add_devices(dev, True) - - -class NeatoCleaningMap(Camera): - """Neato cleaning map for last clean.""" - - def __init__(self, hass, robot): - """Initialize Neato cleaning map.""" - super().__init__() - self.robot = robot - self._robot_name = '{} {}'.format(self.robot.name, 'Cleaning Map') - self._robot_serial = self.robot.serial - self.neato = hass.data[NEATO_LOGIN] - self._image_url = None - self._image = None - - def camera_image(self): - """Return image response.""" - self.update() - return self._image - - @Throttle(timedelta(seconds=60)) - def update(self): - """Check the contents of the map list.""" - self.neato.update_robots() - image_url = None - map_data = self.hass.data[NEATO_MAP_DATA] - image_url = map_data[self._robot_serial]['maps'][0]['url'] - if image_url == self._image_url: - _LOGGER.debug("The map image_url is the same as old") - return - image = self.neato.download_map(image_url) - self._image = image.read() - self._image_url = image_url - - @property - def name(self): - """Return the name of this camera.""" - return self._robot_name diff --git a/config/custom_components/neato.py b/config/custom_components/neato.py deleted file mode 100755 index 4a0859b2..00000000 --- a/config/custom_components/neato.py +++ /dev/null @@ -1,158 +0,0 @@ -""" -Support for Neato botvac connected vacuum cleaners. - -For more details about this component, please refer to the documentation at -https://home-assistant.io/components/neato/ -""" -import logging -from datetime import timedelta -from urllib.error import HTTPError - -import voluptuous as vol - -import homeassistant.helpers.config_validation as cv -from homeassistant.const import CONF_PASSWORD, CONF_USERNAME -from homeassistant.helpers import discovery -from homeassistant.util import Throttle - -_LOGGER = logging.getLogger(__name__) - -REQUIREMENTS = ['https://github.com/dshokouhi/pybotvac/archive/0.0.8.zip' - '#pybotvac==0.0.8'] - -DOMAIN = 'neato' -NEATO_ROBOTS = 'neato_robots' -NEATO_LOGIN = 'neato_login' -NEATO_MAP_DATA = 'neato_map_data' - -CONFIG_SCHEMA = vol.Schema({ - DOMAIN: vol.Schema({ - vol.Required(CONF_USERNAME): cv.string, - vol.Required(CONF_PASSWORD): cv.string, - }) -}, extra=vol.ALLOW_EXTRA) - -STATES = { - 1: 'Idle', - 2: 'Busy', - 3: 'Pause', - 4: 'Error' -} - -MODE = { - 1: 'Eco', - 2: 'Turbo' -} - -ACTION = { - 0: 'No action', - 1: 'House cleaning', - 2: 'Spot cleaning', - 3: 'Manual cleaning', - 4: 'Docking', - 5: 'User menu active', - 6: 'Cleaning cancelled', - 7: 'Updating...', - 8: 'Copying logs...', - 9: 'Calculating position...', - 10: 'IEC test', - 11: 'Map cleaning', - 12: 'Exploring map (creating a persistent map)', - 13: 'Acquiring Persistent Map IDs', - 14: 'Creating & Uploading Map', - 15: 'Suspended Exploration' -} - -ERRORS = { - 'ui_error_brush_stuck': 'Brush stuck', - 'ui_error_brush_overloaded': 'Brush overloaded', - 'ui_error_bumper_stuck': 'Bumper stuck', - 'ui_error_dust_bin_missing': 'Dust bin missing', - 'ui_error_dust_bin_full': 'Dust bin full', - 'ui_error_dust_bin_emptied': 'Dust bin emptied', - 'ui_error_navigation_backdrop_leftbump': 'Clear my path', - 'ui_error_navigation_noprogress': 'Clear my path', - 'ui_error_navigation_origin_unclean': 'Clear my path', - 'ui_error_navigation_pathproblems_returninghome': 'Cannot return to base', - 'ui_error_navigation_falling': 'Clear my path', - 'ui_error_picked_up': 'Picked up', - 'ui_error_stuck': 'Stuck!', - 'dustbin_full': 'Dust bin full', - 'dustbin_missing': 'Dust bin missing', - 'maint_brush_stuck': 'Brush stuck', - 'maint_brush_overload': 'Brush overloaded', - 'maint_bumper_stuck': 'Bumper stuck', - 'maint_vacuum_stuck': 'Vacuum is stuck', - 'maint_left_drop_stuck': 'Vacuum is stuck', - 'maint_left_wheel_stuck': 'Vacuum is stuck', - 'maint_right_drop_stuck': 'Vacuum is stuck', - 'maint_right_wheel_stuck': 'Vacuum is stuck', - 'not_on_charge_base': 'Not on the charge base', - 'nav_robot_falling': 'Clear my path', - 'nav_no_path': 'Clear my path', - 'nav_path_problem': 'Clear my path' -} - -ALERTS = { - 'ui_alert_dust_bin_full': 'Please empty dust bin', - 'ui_alert_recovering_location': 'Returning to start', - 'dustbin_full': 'Please empty dust bin', - 'maint_brush_change': 'Change the brush', - 'maint_filter_change': 'Change the filter' -} - - -def setup(hass, config): - """Set up the Neato component.""" - from pybotvac import Account - - hass.data[NEATO_LOGIN] = NeatoHub(hass, config[DOMAIN], Account) - hub = hass.data[NEATO_LOGIN] - if not hub.login(): - _LOGGER.debug("Failed to login to Neato API") - return False - hub.update_robots() - for component in ('camera', 'vacuum', 'switch'): - discovery.load_platform(hass, component, DOMAIN, {}, config) - - return True - - -class NeatoHub(object): - """A My Neato hub wrapper class.""" - - def __init__(self, hass, domain_config, neato): - """Initialize the Neato hub.""" - self.config = domain_config - self._neato = neato - self._hass = hass - - self.my_neato = neato( - domain_config[CONF_USERNAME], - domain_config[CONF_PASSWORD]) - self._hass.data[NEATO_ROBOTS] = self.my_neato.robots - self._hass.data[NEATO_MAP_DATA] = self.my_neato.maps - - def login(self): - """Login to My Neato.""" - try: - _LOGGER.debug("Trying to connect to Neato API") - self.my_neato = self._neato( - self.config[CONF_USERNAME], self.config[CONF_PASSWORD]) - return True - except HTTPError: - _LOGGER.error("Unable to connect to Neato API") - return False - - @Throttle(timedelta(seconds=60)) - def update_robots(self): - """Update the robot states.""" - _LOGGER.debug("Running HUB.update_robots %s", - self._hass.data[NEATO_ROBOTS]) - self._hass.data[NEATO_ROBOTS] = self.my_neato.robots - self._hass.data[NEATO_MAP_DATA] = self.my_neato.maps - - def download_map(self, url): - """Download a new map image.""" - map_image_data = self.my_neato.get_map_image(url) - return map_image_data diff --git a/config/custom_components/switch/neato.py b/config/custom_components/switch/neato.py deleted file mode 100755 index 117c2306..00000000 --- a/config/custom_components/switch/neato.py +++ /dev/null @@ -1,102 +0,0 @@ -""" -Support for Neato Connected Vacuums switches. - -For more details about this platform, please refer to the documentation at -https://home-assistant.io/components/switch.neato/ -""" -import logging -import requests -from datetime import timedelta -from homeassistant.const import STATE_OFF, STATE_ON -from homeassistant.helpers.entity import ToggleEntity -from homeassistant.components.neato import NEATO_ROBOTS, NEATO_LOGIN -from homeassistant.util import Throttle - -_LOGGER = logging.getLogger(__name__) - -DEPENDENCIES = ['neato'] - -SWITCH_TYPE_SCHEDULE = 'schedule' - -SWITCH_TYPES = { - SWITCH_TYPE_SCHEDULE: ['Schedule'] -} - - -def setup_platform(hass, config, add_devices, discovery_info=None): - """Set up the Neato switches.""" - dev = [] - for robot in hass.data[NEATO_ROBOTS]: - for type_name in SWITCH_TYPES: - dev.append(NeatoConnectedSwitch(hass, robot, type_name)) - _LOGGER.debug("Adding switches %s", dev) - add_devices(dev) - - -class NeatoConnectedSwitch(ToggleEntity): - """Neato Connected Switches.""" - - def __init__(self, hass, robot, switch_type): - """Initialize the Neato Connected switches.""" - self.type = switch_type - self.robot = robot - self.neato = hass.data[NEATO_LOGIN] - self._robot_name = '{} {}'.format( - self.robot.name, SWITCH_TYPES[self.type][0]) - try: - self._state = self.robot.state - except (requests.exceptions.ConnectionError, - requests.exceptions.HTTPError) as ex: - _LOGGER.warning("Neato connection error: %s", ex) - self._state = None - self._schedule_state = None - self._clean_state = None - - @Throttle(timedelta(seconds=60)) - def update(self): - """Update the states of Neato switches.""" - _LOGGER.debug("Running switch update") - self.neato.update_robots() - try: - self._state = self.robot.state - except (requests.exceptions.ConnectionError, - requests.exceptions.HTTPError) as ex: - _LOGGER.warning("Neato connection error: %s", ex) - self._state = None - return - _LOGGER.debug('self._state=%s', self._state) - if self.type == SWITCH_TYPE_SCHEDULE: - _LOGGER.debug("State: %s", self._state) - if self.robot.schedule_enabled: - self._schedule_state = STATE_ON - else: - self._schedule_state = STATE_OFF - _LOGGER.debug("Schedule state: %s", self._schedule_state) - - @property - def name(self): - """Return the name of the switch.""" - return self._robot_name - - @property - def available(self): - """Return True if entity is available.""" - return self._state - - @property - def is_on(self): - """Return true if switch is on.""" - if self.type == SWITCH_TYPE_SCHEDULE: - if self._schedule_state == STATE_ON: - return True - return False - - def turn_on(self, **kwargs): - """Turn the switch on.""" - if self.type == SWITCH_TYPE_SCHEDULE: - self.robot.enable_schedule() - - def turn_off(self, **kwargs): - """Turn the switch off.""" - if self.type == SWITCH_TYPE_SCHEDULE: - self.robot.disable_schedule() diff --git a/config/custom_components/vacuum/neato.py b/config/custom_components/vacuum/neato.py deleted file mode 100755 index e3e007b7..00000000 --- a/config/custom_components/vacuum/neato.py +++ /dev/null @@ -1,212 +0,0 @@ -""" -Support for Neato Connected Vacuums. - -For more details about this platform, please refer to the documentation at -https://home-assistant.io/components/vacuum.neato/ -""" -import logging - -import requests - -from datetime import timedelta -from homeassistant.const import STATE_OFF, STATE_ON -from homeassistant.components.vacuum import ( - VacuumDevice, SUPPORT_BATTERY, SUPPORT_PAUSE, SUPPORT_RETURN_HOME, - SUPPORT_STATUS, SUPPORT_STOP, SUPPORT_TURN_OFF, SUPPORT_TURN_ON, - SUPPORT_MAP, ATTR_STATUS, ATTR_BATTERY_LEVEL, ATTR_BATTERY_ICON) -from homeassistant.components.neato import ( - NEATO_ROBOTS, NEATO_LOGIN, NEATO_MAP_DATA, ACTION, ERRORS, MODE, ALERTS) -from homeassistant.util import Throttle - -_LOGGER = logging.getLogger(__name__) - -DEPENDENCIES = ['neato'] - -SUPPORT_NEATO = SUPPORT_BATTERY | SUPPORT_PAUSE | SUPPORT_RETURN_HOME | \ - SUPPORT_STOP | SUPPORT_TURN_OFF | SUPPORT_TURN_ON | \ - SUPPORT_STATUS | SUPPORT_MAP - -ATTR_CLEAN_START = 'clean_start' -ATTR_CLEAN_STOP = 'clean_stop' -ATTR_CLEAN_AREA = 'clean_area' -ATTR_CLEAN_BATTERY_START = 'battery_level_at_clean_start' -ATTR_CLEAN_BATTERY_END = 'battery_level_at_clean_end' -ATTR_CLEAN_SUSP_COUNT = 'clean_suspension_count' -ATTR_CLEAN_SUSP_TIME = 'clean_suspension_time' - - -def setup_platform(hass, config, add_devices, discovery_info=None): - """Set up the Neato vacuum.""" - dev = [] - for robot in hass.data[NEATO_ROBOTS]: - dev.append(NeatoConnectedVacuum(hass, robot)) - _LOGGER.debug("Adding vacuums %s", dev) - add_devices(dev, True) - - -class NeatoConnectedVacuum(VacuumDevice): - """Representation of a Neato Connected Vacuum.""" - - def __init__(self, hass, robot): - """Initialize the Neato Connected Vacuum.""" - self.robot = robot - self.neato = hass.data[NEATO_LOGIN] - self._name = '{}'.format(self.robot.name) - self._status_state = None - self._clean_state = None - self._state = None - self._mapdata = hass.data[NEATO_MAP_DATA] - self.clean_time_start = None - self.clean_time_stop = None - self.clean_area = None - self.clean_battery_start = None - self.clean_battery_end = None - self.clean_suspension_charge_count = None - self.clean_suspension_time = None - - @Throttle(timedelta(seconds=60)) - def update(self): - """Update the states of Neato Vacuums.""" - _LOGGER.debug("Running Neato Vacuums update") - self.neato.update_robots() - try: - self._state = self.robot.state - except (requests.exceptions.ConnectionError, - requests.exceptions.HTTPError) as ex: - _LOGGER.warning("Neato connection error: %s", ex) - self._state = None - return - _LOGGER.debug('self._state=%s', self._state) - if self._state['state'] == 1: - if self._state['details']['isCharging']: - self._status_state = 'Charging' - elif (self._state['details']['isDocked'] and - not self._state['details']['isCharging']): - self._status_state = 'Docked' - else: - self._status_state = 'Stopped' - elif self._state['state'] == 2: - if ALERTS.get(self._state['error']) is None: - self._status_state = ( - MODE.get(self._state['cleaning']['mode']) - + ' ' + ACTION.get(self._state['action'])) - else: - self._status_state = ALERTS.get(self._state['error']) - elif self._state['state'] == 3: - self._status_state = 'Paused' - elif self._state['state'] == 4: - self._status_state = ERRORS.get(self._state['error']) - - if (self.robot.state['action'] == 1 or - self.robot.state['action'] == 2 or - self.robot.state['action'] == 11 or - self.robot.state['action'] == 12 or - self.robot.state['action'] == 3 and - self.robot.state['state'] == 2): - self._clean_state = STATE_ON - else: - self._clean_state = STATE_OFF - - if not self._mapdata.get(self.robot.serial, {}).get('maps', []): - return - self.clean_time_start = ( - (self._mapdata[self.robot.serial]['maps'][0]['start_at'] - .strip('Z')) - .replace('T', ' ')) - self.clean_time_stop = ( - (self._mapdata[self.robot.serial]['maps'][0]['end_at'].strip('Z')) - .replace('T', ' ')) - self.clean_area = ( - self._mapdata[self.robot.serial]['maps'][0]['cleaned_area']) - self.clean_suspension_charge_count = ( - self._mapdata[self.robot.serial]['maps'][0] - ['suspended_cleaning_charging_count']) - self.clean_suspension_time = ( - self._mapdata[self.robot.serial]['maps'][0] - ['time_in_suspended_cleaning']) - self.clean_battery_start = ( - self._mapdata[self.robot.serial]['maps'][0]['run_charge_at_start']) - self.clean_battery_end = ( - self._mapdata[self.robot.serial]['maps'][0]['run_charge_at_end']) - - @property - def name(self): - """Return the name of the device.""" - return self._name - - @property - def supported_features(self): - """Flag vacuum cleaner robot features that are supported.""" - return SUPPORT_NEATO - - @property - def battery_level(self): - """Return the battery level of the vacuum cleaner.""" - return self._state['details']['charge'] - - @property - def status(self): - """Return the status of the vacuum cleaner.""" - return self._status_state - - @property - def state_attributes(self): - """Return the state attributes of the vacuum cleaner.""" - data = {} - - if self.status is not None: - data[ATTR_STATUS] = self.status - - if self.battery_level is not None: - data[ATTR_BATTERY_LEVEL] = self.battery_level - data[ATTR_BATTERY_ICON] = self.battery_icon - - if self.clean_time_start is not None: - data[ATTR_CLEAN_START] = self.clean_time_start - if self.clean_time_stop is not None: - data[ATTR_CLEAN_STOP] = self.clean_time_stop - if self.clean_area is not None: - data[ATTR_CLEAN_AREA] = self.clean_area - if self.clean_suspension_charge_count is not None: - data[ATTR_CLEAN_SUSP_COUNT] = ( - self.clean_suspension_charge_count) - if self.clean_suspension_time is not None: - data[ATTR_CLEAN_SUSP_TIME] = self.clean_suspension_time - if self.clean_battery_start is not None: - data[ATTR_CLEAN_BATTERY_START] = self.clean_battery_start - if self.clean_battery_end is not None: - data[ATTR_CLEAN_BATTERY_END] = self.clean_battery_end - - return data - - def turn_on(self, **kwargs): - """Turn the vacuum on and start cleaning.""" - self.robot.start_cleaning() - - @property - def is_on(self): - """Return true if switch is on.""" - return self._clean_state == STATE_ON - - def turn_off(self, **kwargs): - """Turn the switch off.""" - self.robot.pause_cleaning() - self.robot.send_to_base() - - def return_to_base(self, **kwargs): - """Set the vacuum cleaner to return to the dock.""" - self.robot.send_to_base() - - def stop(self, **kwargs): - """Stop the vacuum cleaner.""" - self.robot.stop_cleaning() - - def start_pause(self, **kwargs): - """Start, pause or resume the cleaning task.""" - if self._state['state'] == 1: - self.robot.start_cleaning() - elif self._state['state'] == 2 and\ - ALERTS.get(self._state['error']) is None: - self.robot.pause_cleaning() - if self._state['state'] == 3: - self.robot.resume_cleaning() diff --git a/config/packages/holiday.yaml b/config/packages/holiday.yaml index 3319b9b9..122bda71 100755 --- a/config/packages/holiday.yaml +++ b/config/packages/holiday.yaml @@ -38,19 +38,19 @@ sensor: {% endif %} {{ holiday }} - - platform: rest - resource: http://www.webcal.fi/cal.php?id=335&format=json&start_year=current_year&end_year=2020&tz=America%2FNew_York - name: Flag - scan_interval: 14400 - value_template: >- - {% set is_flag_day = False %} - {%- for day_val in value_json -%} - {% set now_string = now().strftime('%Y-%m-%d') %} - {%- if day_val.date==now_string and day_val.flag_day==1 -%} - {% set is_flag_day = True %} - {%- endif -%} - {% endfor %} - {{is_flag_day}} + # - platform: rest + # resource: http://www.webcal.fi/cal.php?id=335&format=json&start_year=current_year&end_year=2020&tz=America%2FNew_York + # name: Flag + # scan_interval: 14400 + # value_template: >- + # {% set is_flag_day = False %} + # {%- for day_val in value_json -%} + # {% set now_string = now().strftime('%Y-%m-%d') %} + # {%- if day_val.date==now_string and day_val.flag_day==1 -%} + # {% set is_flag_day = True %} + # {%- endif -%} + # {% endfor %} + # {{is_flag_day}} ############################################################################### # Automation that notifies of a Holiday "state" change diff --git a/config/packages/rachio.yaml b/config/packages/rachio.yaml new file mode 100755 index 00000000..73305c8a --- /dev/null +++ b/config/packages/rachio.yaml @@ -0,0 +1,16 @@ +#------------------------------------------- +# @CCOSTAN +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# Neato Support for D7 Connected Botvac - control my [Neato Vacuum](http://amzn.to/2kqnnqu) with Home Assistant. +#------------------------------------------- +###################################################################### +## [Rachio Sprinkler system](http://amzn.to/2eoPKBW) - Smart Sprinkler controller +###################################################################### +homeassistant: + # customize_glob: + # "*.carlojuice*": + # homebridge_hidden: True + # hidden: False +#------------------------------------------- +rachio: + api_key: !secret rachio_api diff --git a/config/sensor/systemmonitor.yaml b/config/sensor/systemmonitor.yaml index b21d722c..bfa2327d 100755 --- a/config/sensor/systemmonitor.yaml +++ b/config/sensor/systemmonitor.yaml @@ -44,9 +44,9 @@ - platform: rest scan_interval: 86400 - resource: http://ip.jsontest.com + resource: http://icanhazip.com name: External IP - value_template: '{{ value_json.ip }}' + value_template: '{{ value }}' ############################################################################################################# ### This part of the automation is hidden due to the IP address exposed ## diff --git a/config/www/custom_ui/floorplan/images/branding/solar_readings.png b/config/www/custom_ui/floorplan/images/branding/solar_readings.png index e69de29b..5fddc774 100644 Binary files a/config/www/custom_ui/floorplan/images/branding/solar_readings.png and b/config/www/custom_ui/floorplan/images/branding/solar_readings.png differ