├── .HA_VERSION ├── .gitignore ├── LICENSE.md ├── README.md ├── configuration.yaml ├── custom_components ├── spotcast │ ├── __init__.py │ ├── manifest.json │ ├── sensor.py │ └── services.yaml └── weatheralerts │ ├── __init__.py │ ├── manifest.json │ └── sensor.py ├── customize.yaml ├── includes ├── automations │ ├── set theme.yaml │ ├── state │ │ ├── basement temp.yaml │ │ ├── coach_candle.yaml │ │ ├── drop_the_house_lights.yaml.old │ │ ├── drop_the_officelights.yaml.old │ │ ├── raise_the_house_lights.yaml.old │ │ ├── raise_the_office_lights.yaml.old │ │ └── set radio volume.yaml │ └── time │ │ ├── backup system.yaml │ │ ├── nightlights off.yaml │ │ ├── nightlights on.yaml │ │ ├── nightlights to normal.yaml │ │ └── send backup to google.yaml ├── cameras.yaml ├── input_boolean.yaml ├── input_numbers.yaml ├── input_selects.yaml ├── lights.yaml ├── media_players │ ├── androidtv.yaml │ ├── kodi.yaml │ ├── kodi_office.yaml │ ├── roku.yaml.old │ └── spotify.yaml.old ├── notifiers.yaml ├── remote.yaml ├── scenes │ ├── coach_candle_flicker.yaml │ ├── living_room_full.yaml │ ├── movie_time.yaml │ ├── nightlights_active_mode.yaml │ ├── nightlights_full_mode.yaml │ ├── office_lights_full.yaml │ ├── office_movie_time.yaml │ └── sleepy_time.yaml ├── scripts.yaml ├── sensors │ ├── basement_ble.yaml.bad │ ├── cert_expirt.yaml │ ├── esphome_status.yaml │ ├── flu_near_you.yaml │ ├── snmp.yaml │ ├── speedtest.yaml.bad │ ├── system_monitor.yaml │ ├── time_date_yaml │ ├── version.yaml │ ├── waqi.yaml │ └── weatheralerts.yaml ├── trackers.yaml ├── weather.yaml ├── weblinks.yaml ├── wink.yaml └── zones │ ├── home.yaml │ └── work.yaml ├── lovelace └── tabs │ ├── clock.yaml │ ├── devices.yaml │ ├── environment.yaml │ ├── media.yaml │ ├── rooms.yaml │ ├── shop.yaml │ └── systems-status.yaml ├── readme_images ├── Ecobee4-300x300.png ├── chromecast audio.jpg ├── google hub.jpg ├── google mini.jpg ├── kodi.jpg ├── phillips hue.jpg ├── raspberry-pi-3.png ├── roku.jpg ├── screenshots │ ├── media.png │ └── rooms.png ├── tower.jpg └── wemo.png ├── sanitized_ESPHome ├── bedroom_ss30.yaml ├── sonoff_1.yaml └── tower.yaml ├── themes ├── BlueNight.yaml ├── GreyNight.yaml ├── Night_Theme.yaml ├── PmxMonolight.yaml ├── darkish │ └── darkish.yaml ├── google_dark_theme │ └── google_dark_theme.yaml ├── grey.yaml ├── slate.yaml └── solarized.yaml └── ui-lovelace.yaml /.HA_VERSION: -------------------------------------------------------------------------------- 1 | 0.109.6 -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.pid 2 | *.xml 3 | *.csr 4 | *.crt 5 | *.key 6 | www 7 | node-red 8 | OZW_Log.txt 9 | home-assistant.log 10 | home-assistant_v2.db 11 | home-assistant_v2.* 12 | *.db-journal 13 | lib 14 | tts 15 | secrets.yaml 16 | known_devices.yaml 17 | ip_bans.yaml 18 | *.conf 19 | plex.conf 20 | phue.conf 21 | ecobee.conf 22 | harmony_media_room.conf 23 | harmony_living_room.conf 24 | entity_registry.yaml 25 | pyozw.sqlite 26 | .* 27 | !.HA_VERSION 28 | !/.gitignore 29 | html5_push_registrations.conf 30 | ip_bans.yaml 31 | /icloud/* 32 | custom_components/sensor/__pycache__/ 33 | __pycache__ 34 | .storage 35 | .cloud 36 | .google.token 37 | esphomeyaml 38 | esphome 39 | experimental.yaml 40 | *.bad 41 | custom_components/hacs 42 | custom_components/__pycache__/ 43 | custom_components/spotcast 44 | 45 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # MIT License 2 | 3 | Copyright (c) 2018 Franck Nijhof 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Welcome and thank you for stopping by to check out my configuration. Moved to HassIO for the base OS from Raspbian ## Screenshots ## Automations - Lower the lights when Kodi is playing - Low temp notification for basement - Nightlight mode for ceiling lights in kitchen and hall - Weekly backup service call ## Hardware | Device | Source | Image | Device | Source | Image | | ------ | ------ | ------ | ------ | ------ | ------ | |Raspberry PI III - running hassio| Element14.com | | Wemo mini switches | Amazon.com | | |Phillips hue bulbs gen 1 & 2| Best Buy| |Ecobee 4 Thermostat w/Room Sensors | Amazon| | |Google Home Hub| | |Google Mini| Various | | |Google Chromcast audio| Walmart | | |Roku Mini| Amazon | |Kodi Players| | | ## DIY | | Floating Crystal Tower This project was based on https://youtu.be/Jh618yi0JZY by DIY Perks. For mine I replaced the individual led channels with an esp8266 controller first running code for standalone wifi device now HA intergrated. The configuration for ESPHome is located in /sanitized_ESPHome/tower.yaml| Full build will be added on my .io site. ## Retired Technologies |Device|Reason| | ------ | ------ | | Wink spotter probes| Stopped talking| |DIRECTV receiver| Cut the cord| | Wink PowerPivot Genius| Went offline randomly| |LimitlessLED bulbs| (did not want to invest in new bridge. I might pull these back out if I build the ESP8266 milight contoller project.)| ## Big Thanks - Bob_NL for his "Chromecast Radio with station and player selection". We use it everyday! - JamesMcCarthy79 for his layout examples. We loved the rounded corners - The main development team and all contributers to the project. Thank you -------------------------------------------------------------------------------- /configuration.yaml: -------------------------------------------------------------------------------- 1 | homeassistant: 2 | # Name of the location where Home Assistant is running 3 | name: The Castle 4 | # Location required to calculate the time the sun rises and sets 5 | latitude: !secret home_lat 6 | longitude: !secret home_lon 7 | # Impacts weather/sunrise data (altitude above sea level in meters) 8 | elevation: 480 9 | # metric for Metric, imperial for Imperial 10 | unit_system: imperial 11 | # Pick yours from here: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones 12 | time_zone: America/New_York 13 | # Customization file 14 | customize: !include customize.yaml 15 | 16 | # Show links to resources in log and frontend 17 | #introduction: 18 | 19 | # Enables the frontend 20 | frontend: 21 | themes: !include_dir_merge_named themes/ 22 | 23 | lovelace: 24 | mode: yaml 25 | 26 | # Enables configuration UI 27 | config: 28 | 29 | # system health enable 30 | system_health: 31 | 32 | hacs: 33 | token: !secret hacs_token 34 | sidepanel_title: Community 35 | 36 | # Uncomment this if you are using SSL/TLS, running in Docker container, etc. 37 | # http: 38 | # base_url: example.duckdns.org:8123 39 | http: 40 | # api_password: !secret http_password 41 | # base_url: !secret http_url 42 | # ssl_certificate: !secret cert_path 43 | # ssl_key: !secret cert_key_path 44 | 45 | # Checks for available updates 46 | # Note: This component will send some information about your system to 47 | # the developers to assist with development of Home Assistant. 48 | # For more information, please see: 49 | # https://home-assistant.io/blog/2016/10/25/explaining-the-updater/ 50 | updater: 51 | # Optional, allows Home Assistant developers to focus on popular components. 52 | # include_used_components: true 53 | 54 | # Discover some devices automatically 55 | mobile_app: 56 | 57 | discovery: 58 | 59 | # Allows you to issue voice commands from the frontend in enabled browsers 60 | conversation: 61 | 62 | # Enables support for tracking state changes over time 63 | history: 64 | 65 | # View all events in a logbook 66 | logbook: 67 | 68 | # Enables a map showing the location of tracked devices 69 | map: 70 | 71 | # Track the sun 72 | sun: 73 | 74 | rest_command: 75 | google_backup: 76 | url: !secret google_backup_url 77 | timeout: '300' 78 | 79 | 80 | recorder: 81 | purge_interval: 1 82 | purge_keep_days: 14 83 | exclude: 84 | domains: 85 | - automation 86 | - media_player 87 | 88 | 89 | influxdb: 90 | host: a0d7b954-influxdb 91 | port: 8086 92 | database: homeassistant 93 | username: !secret influxdb_user 94 | password: !secret influxdb_password 95 | max_retries: 3 96 | default_measurement: state 97 | 98 | panel_iframe: 99 | router: 100 | title: 'Router' 101 | url: !secret weblink1 102 | icon: mdi:router-wireless 103 | portainer: 104 | title: 'Portainer' 105 | url: !secret portainer 106 | icon: mdi:docker 107 | urbackup: 108 | title: 'UrBackup' 109 | url: !secret urbackup 110 | icon: mdi:backup-restore 111 | 112 | 113 | # Cloud 114 | cloud: 115 | alexa: 116 | filter: 117 | include_entities: 118 | - switch.wall_monitor 119 | - switch.sonoff_1_relay 120 | - switch.living_room_ceiling_fan_relay 121 | - switch.cat_light 122 | 123 | 124 | hassio: 125 | 126 | 127 | 128 | 129 | ecobee: 130 | api_key: !secret ecobee_key 131 | 132 | geo_location: 133 | - platform: usgs_earthquakes_feed 134 | feed_type: 'past_day_all_earthquakes' 135 | radius: 150 136 | minimum_magnitude: 0.0 137 | latitude: !secret home_lat 138 | longitude: !secret home_lon 139 | 140 | hue: 141 | bridges: 142 | - host: !secret hue_ip 143 | 144 | 145 | ifttt: 146 | key: !secret ifttt_key 147 | 148 | 149 | simplisafe: 150 | accounts: 151 | - username: !secret alarm_username 152 | password: !secret alarm_password 153 | 154 | spotify: 155 | client_id: !secret spotify_clicnet_id2 156 | client_secret: !secret spotify_clicnet_secret2 157 | 158 | 159 | # Text to speech 160 | tts: 161 | - platform: google_translate 162 | service_name: google_say 163 | language: 'en-uk' 164 | 165 | wemo: 166 | static: 167 | - !secret wemo1_ip 168 | - !secret wemo2_ip 169 | - !secret wemo3_ip 170 | - !secret wemo4_ip 171 | - !secret wemo5_ip 172 | - !secret wemo6_ip 173 | 174 | #wink: 175 | 176 | ############################################################### 177 | ###### Include Files 178 | ############################################################### 179 | 180 | #automation: !include includes/automations.yaml 181 | camera: !include includes/cameras.yaml 182 | #device_tracker: !include includes/trackers.yaml 183 | input_boolean: !include includes/input_boolean.yaml 184 | input_select: !include includes/input_selects.yaml 185 | input_number: !include includes/input_numbers.yaml 186 | light: !include includes/lights.yaml 187 | notify: !include includes/notifiers.yaml 188 | remote: !include includes/remote.yaml 189 | script: !include includes/scripts.yaml 190 | weather: !include includes/weather.yaml 191 | #weblink: !include includes/weblinks.yaml 192 | #wink: !include includes/wink.yaml 193 | 194 | ############################################################### 195 | ###### Merge Include Files 196 | ############################################################### 197 | automation: !include_dir_merge_list includes/automations 198 | media_player: !include_dir_merge_list includes/media_players 199 | scene: !include_dir_merge_list includes/scenes 200 | sensor: !include_dir_merge_list includes/sensors 201 | zone: !include_dir_list includes/zones 202 | 203 | -------------------------------------------------------------------------------- /custom_components/spotcast/__init__.py: -------------------------------------------------------------------------------- 1 | import logging 2 | import voluptuous as vol 3 | from homeassistant.exceptions import HomeAssistantError 4 | import homeassistant.helpers.config_validation as cv 5 | from homeassistant.const import (CONF_PASSWORD, CONF_USERNAME) 6 | from homeassistant.components.cast.media_player import KNOWN_CHROMECAST_INFO_KEY 7 | import random 8 | import time 9 | 10 | _VERSION = '2.5.1' 11 | DOMAIN = 'spotcast' 12 | 13 | _LOGGER = logging.getLogger(__name__) 14 | 15 | CONF_DEVICE_NAME = 'device_name' 16 | CONF_ENTITY_ID = 'entity_id' 17 | CONF_SPOTIFY_URI = 'uri' 18 | CONF_ACCOUNTS = 'accounts' 19 | CONF_SPOTIFY_ACCOUNT = 'account' 20 | CONF_TRANSFER_PLAYBACK = 'transfer_playback' 21 | CONF_RANDOM = 'random_song' 22 | CONF_REPEAT = 'repeat' 23 | 24 | SERVICE_START_COMMAND_SCHEMA = vol.Schema({ 25 | vol.Optional(CONF_DEVICE_NAME): cv.string, 26 | vol.Optional(CONF_ENTITY_ID): cv.string, 27 | vol.Optional(CONF_SPOTIFY_URI): cv.string, 28 | vol.Optional(CONF_SPOTIFY_ACCOUNT): cv.string, 29 | vol.Optional(CONF_TRANSFER_PLAYBACK): cv.boolean, 30 | vol.Optional(CONF_RANDOM): cv.boolean, 31 | vol.Optional(CONF_REPEAT): cv.string 32 | }) 33 | 34 | ACCOUNTS_SCHEMA = vol.Schema({ 35 | vol.Required(CONF_USERNAME): cv.string, 36 | vol.Required(CONF_PASSWORD): cv.string, 37 | }) 38 | 39 | CONFIG_SCHEMA = vol.Schema({ 40 | DOMAIN: vol.Schema({ 41 | vol.Required(CONF_USERNAME): cv.string, 42 | vol.Required(CONF_PASSWORD): cv.string, 43 | vol.Optional(CONF_ACCOUNTS): cv.schema_with_slug_keys(ACCOUNTS_SCHEMA), 44 | }), 45 | }, extra=vol.ALLOW_EXTRA) 46 | 47 | 48 | def setup(hass, config): 49 | """Setup the Spotcast service.""" 50 | conf = config[DOMAIN] 51 | 52 | username = conf[CONF_USERNAME] 53 | password = conf[CONF_PASSWORD] 54 | accounts = conf.get(CONF_ACCOUNTS) 55 | 56 | # sensor 57 | # hass.helpers.discovery.load_platform('sensor', DOMAIN, {}, config) 58 | 59 | # service 60 | def get_chromecast_device(device_name): 61 | import pychromecast 62 | 63 | # Get cast from discovered devices of cast platform 64 | known_devices = hass.data.get(KNOWN_CHROMECAST_INFO_KEY, []) 65 | cast_info = next((x for x in known_devices if x.friendly_name == device_name), None) 66 | _LOGGER.debug('cast info: %s', cast_info) 67 | if cast_info: 68 | return pychromecast._get_chromecast_from_host(( 69 | cast_info.host, cast_info.port, cast_info.uuid, 70 | cast_info.model_name, cast_info.friendly_name 71 | )) 72 | _LOGGER.error('Could not find device %s from hass.data, falling back to pychromecast scan', device_name) 73 | 74 | # Discover devices manually 75 | chromecasts = pychromecast.get_chromecasts() 76 | for _cast in chromecasts: 77 | if _cast.name == device_name: 78 | _LOGGER.debug('Fallback, found cast device: %s', _cast) 79 | return _cast 80 | 81 | raise HomeAssistantError('Could not find device with name {}'.format(device_name)) 82 | 83 | def get_spotify_token(username, password): 84 | import spotify_token as st 85 | data = st.start_session(username, password) 86 | access_token = data[0] 87 | expires = data[1] - int(time.time()) 88 | return access_token, expires 89 | 90 | def play(client, spotify_device_id, uri, random_song, repeat): 91 | # import spotipy 92 | # import http.client as http_client 93 | # spotipy.trace = True 94 | # spotipy.trace_out = True 95 | # http_client.HTTPConnection.debuglevel = 1 96 | 97 | _LOGGER.debug('Version: %s, playing URI: %s on device-id: %s', _VERSION, uri, spotify_device_id) 98 | if uri.find('track') > 0: 99 | _LOGGER.debug('Playing track using uris= for uri: %s', uri) 100 | client.start_playback(device_id=spotify_device_id, uris=[uri]) 101 | else: 102 | if uri == 'random': 103 | _LOGGER.debug('Cool, you found the easter egg with playing a random playlist') 104 | playlists = client.user_playlists('me', 50) 105 | no_playlists = len(playlists['items']) 106 | uri = playlists['items'][random.randint(0, no_playlists - 1)]['uri'] 107 | kwargs = {'device_id': spotify_device_id, 'context_uri': uri} 108 | if random_song: 109 | results = client.user_playlist_tracks("me", uri) 110 | position = random.randint(0, results['total'] - 1) 111 | _LOGGER.debug('Start playback at random position: %s', position) 112 | kwargs['offset'] = {'position': position} 113 | 114 | _LOGGER.debug('Playing context uri using context_uri for uri: "%s" (random_song: %s)', uri, random_song) 115 | client.start_playback(**kwargs) 116 | if repeat: 117 | _LOGGER.debug('Turning repeat on') 118 | time.sleep(5) 119 | client.repeat(state=repeat, device_id=spotify_device_id) 120 | 121 | def transfer_pb(client, spotify_device_id): 122 | _LOGGER.debug('Transfering playback') 123 | client.transfer_playback(device_id=spotify_device_id, force_play=True) 124 | 125 | def start_casting(call): 126 | """service called.""" 127 | 128 | from pychromecast.controllers.spotify import SpotifyController 129 | import spotipy 130 | transfer_playback = False 131 | 132 | uri = call.data.get(CONF_SPOTIFY_URI) 133 | random_song = call.data.get(CONF_RANDOM, False) 134 | repeat = call.data.get(CONF_REPEAT) 135 | 136 | # Get device name from tiehr device_name or entity_id 137 | device_name = None 138 | if call.data.get(CONF_DEVICE_NAME) is None: 139 | entity_id = call.data.get(CONF_ENTITY_ID) 140 | if entity_id is None: 141 | raise HomeAssistantError('Either entity_id or device_name must be specified') 142 | entity_states = hass.states.get(entity_id) 143 | if entity_states is None: 144 | _LOGGER.error('Could not find entity_id: %s', entity_id) 145 | else: 146 | device_name = entity_states.attributes.get('friendly_name') 147 | else: 148 | device_name = call.data.get(CONF_DEVICE_NAME) 149 | 150 | if device_name is None or device_name.strip() == '': 151 | raise HomeAssistantError('device_name is empty') 152 | 153 | # Find chromecast device 154 | cast = get_chromecast_device(device_name) 155 | _LOGGER.debug('Found cast device: %s', cast) 156 | cast.wait() 157 | 158 | account = call.data.get(CONF_SPOTIFY_ACCOUNT) 159 | user = username 160 | pwd = password 161 | if account is not None: 162 | _LOGGER.debug('setting up with different account than default %s', account) 163 | user = accounts.get(account).get(CONF_USERNAME) 164 | pwd = accounts.get(account).get(CONF_PASSWORD) 165 | 166 | # login as real browser to get powerful token 167 | access_token, expires = get_spotify_token(username=user, password=pwd) 168 | 169 | # get the spotify web api client 170 | client = spotipy.Spotify(auth=access_token) 171 | 172 | # Check if something is playing 173 | 174 | if uri is None or uri.strip() == '' or call.data.get(CONF_TRANSFER_PLAYBACK): 175 | current_playback = client.current_playback() 176 | if current_playback is not None: 177 | _LOGGER.debug('current_playback from spotipy: %s', current_playback) 178 | transfer_playback = True 179 | 180 | # launch the app on chromecast 181 | sp = SpotifyController(access_token, expires) 182 | cast.register_handler(sp) 183 | sp.launch_app() 184 | 185 | if not sp.is_launched and not sp.credential_error: 186 | raise HomeAssistantError('Failed to launch spotify controller due to timeout') 187 | if not sp.is_launched and sp.credential_error: 188 | raise HomeAssistantError('Failed to launch spotify controller due to credentials error') 189 | 190 | spotify_device_id = None 191 | devices_available = client.devices() 192 | for device in devices_available['devices']: 193 | if device['id'] == sp.device: 194 | spotify_device_id = device['id'] 195 | break 196 | 197 | if not spotify_device_id: 198 | _LOGGER.error('No device with id "{}" known by Spotify'.format(sp.device)) 199 | _LOGGER.error('Known devices: {}'.format(devices_available['devices'])) 200 | return 201 | 202 | if transfer_playback == True: 203 | transfer_pb(client, spotify_device_id) 204 | else: 205 | play(client, spotify_device_id, uri, random_song, repeat) 206 | 207 | hass.services.register(DOMAIN, 'start', start_casting, 208 | schema=SERVICE_START_COMMAND_SCHEMA) 209 | 210 | return True 211 | -------------------------------------------------------------------------------- /custom_components/spotcast/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "domain": "spotcast", 3 | "name": "Start Spotify on chromecast", 4 | "documentation": "https://github.com/fondberg/spotcast", 5 | "requirements": [ 6 | "fondberg-spotipy==2.4.5-dev2", 7 | "pychromecast==4.0.1", 8 | "spotify_token==0.1.2" 9 | ], 10 | "homeassistant": "0.99.0", 11 | "dependencies": [ 12 | ], 13 | "codeowners": [ 14 | "@fondberg" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /custom_components/spotcast/sensor.py: -------------------------------------------------------------------------------- 1 | import logging 2 | import json 3 | from homeassistant.helpers.entity import Entity 4 | from homeassistant.util import dt 5 | from homeassistant.const import (STATE_OK, STATE_UNKNOWN) 6 | from . import DOMAIN 7 | 8 | _LOGGER = logging.getLogger(__name__) 9 | 10 | def setup_platform(hass, config, add_devices, discovery_info=None): 11 | add_devices([ChromecastDevicesSensor()]) 12 | 13 | class ChromecastDevicesSensor(Entity): 14 | 15 | def __init__(self): 16 | self._state = STATE_UNKNOWN 17 | self._chromecast_devices = [] 18 | self._attributes = { 19 | 'devices_json': [], 20 | 'devices': [], 21 | 'last_update': None 22 | } 23 | _LOGGER.debug('initiating sensor') 24 | 25 | @property 26 | def name(self): 27 | return 'Chromecast Devices' 28 | 29 | @property 30 | def state(self): 31 | return self._state 32 | 33 | @property 34 | def device_state_attributes(self): 35 | """Return the state attributes.""" 36 | return self._attributes 37 | 38 | def update(self): 39 | import pychromecast 40 | # from cast/media_player.py but is missing cast_type 41 | # KNOWN_CHROMECAST_INFO_KEY = 'cast_known_chromecasts' 42 | # _LOGGER.info('KNOWN_CHROMECAST_INFO_KEY: %s', self.hass.data[KNOWN_CHROMECAST_INFO_KEY]) 43 | 44 | self._chromecast_devices = pychromecast.get_chromecasts() 45 | _LOGGER.debug('Found chromecast devices: %s', self._chromecast_devices) 46 | chromecasts = [] 47 | for cast in self._chromecast_devices: 48 | device = { 49 | 'name': cast.name, 50 | 'cast_type': cast.cast_type, 51 | 'model_name': cast.model_name, 52 | 'uuid': str(cast.uuid), 53 | 'manufacturer': cast.device.manufacturer 54 | } 55 | chromecasts.append(device) 56 | self._attributes['devices_json'] = json.dumps(chromecasts, ensure_ascii=False) 57 | self._attributes['devices'] = chromecasts 58 | self._attributes['last_update'] = dt.now().isoformat('T') 59 | self._state = STATE_OK 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /custom_components/spotcast/services.yaml: -------------------------------------------------------------------------------- 1 | start: 2 | description: Starts spotify playback on chromecast devices 3 | fields: 4 | device_name: {description: The friendly name of the chromecast device. (not used together with entity_id), example: "Livingroom"} 5 | entity_id: {description: The entity_id of the chromecast mediaplayer (not used together with device_name)., example: "media_player.vardagsrum"} 6 | uri: {description: Supported Spotify URI as string (if omitted will try to transfer current playback)., example: "spotify:playlist:37i9dQZF1DX3yvAYDslnv8"} 7 | account: {description: Optionally starts Spotify using an alternative account specified in config., example: "my_wifes"} 8 | transfer_playback: {description: Transfer playback if something is playing on the account otherwise play specified URI., example: "true"} 9 | random_song: {description: Starts the playback at a random position in the playlist., example: "true"} 10 | repeat: {description: "Set repeat mode for playback. Available options are track, context and off", example: "track"} -------------------------------------------------------------------------------- /custom_components/weatheralerts/__init__.py: -------------------------------------------------------------------------------- 1 | """Custom weatheralerts integration.""" 2 | -------------------------------------------------------------------------------- /custom_components/weatheralerts/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "domain": "weatheralerts", 3 | "name": "Weatheralerts", 4 | "documentation": "https://github.com/custom-components/weatheralerts", 5 | "dependencies": [], 6 | "codeowners": [ 7 | "@ludeeus", 8 | "@jlverhagen" 9 | ], 10 | "requirements": [] 11 | } 12 | -------------------------------------------------------------------------------- /custom_components/weatheralerts/sensor.py: -------------------------------------------------------------------------------- 1 | """ 2 | A component which allows you to get weather alerts from weather.gov. 3 | For more details about this component, please refer to the documentation at 4 | 5 | https://github.com/custom-components/weatheralerts 6 | """ 7 | import sys 8 | import logging 9 | import async_timeout 10 | import voluptuous as vol 11 | 12 | from homeassistant.exceptions import PlatformNotReady 13 | from homeassistant.components.switch import PLATFORM_SCHEMA 14 | from homeassistant.const import __version__ 15 | from homeassistant.helpers.aiohttp_client import async_create_clientsession 16 | from homeassistant.helpers.entity import Entity 17 | import homeassistant.helpers.config_validation as cv 18 | 19 | __version__ = '0.1.1' 20 | 21 | CONF_STATE = "state" 22 | CONF_ZONE = "zone" 23 | CONF_COUNTY = "county" 24 | 25 | _LOGGER = logging.getLogger(__name__) 26 | 27 | PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( 28 | { 29 | vol.Required(CONF_STATE): cv.string, 30 | vol.Required(CONF_ZONE): cv.string, 31 | vol.Optional(CONF_COUNTY, default=''): cv.string, 32 | } 33 | ) 34 | 35 | URL = "https://api.weather.gov/alerts/active?zone={}" 36 | URL_ID_CHECK = "https://alerts.weather.gov/cap/wwaatmget.php?x={}&y=0" 37 | ID_CHECK_ERRORS = ["? invalid county", "? invalid zone"] 38 | 39 | HEADERS = { 40 | "accept": "application/ld+json", 41 | "user-agent": f"HomeAssistant/{__version__}", 42 | } 43 | 44 | 45 | async def async_setup_platform( 46 | hass, config, add_entities, discovery_info=None 47 | ): # pylint: disable=missing-docstring, unused-argument 48 | state = config[CONF_STATE].upper() 49 | zone_config = config[CONF_ZONE] 50 | county_config = config[CONF_COUNTY] 51 | 52 | zone=zone_config 53 | county=county_config 54 | 55 | if len(state) != 2: 56 | _LOGGER.critical("Configured (YAML) state '%s' is not valid", state) 57 | return False 58 | 59 | if len(zone) == 1: 60 | zone = f"00{zone}" 61 | if len(zone) == 2: 62 | zone = f"0{zone}" 63 | if len(zone) == 3: 64 | zoneid = f"{state}Z{zone}" 65 | else: 66 | _LOGGER.critical("Configured (YAML) zone ID '%s' is not valid", zone_config) 67 | return False 68 | 69 | if len(county) == 1: 70 | county = f"00{county}" 71 | if len(county) == 2: 72 | county = f"0{county}" 73 | if len(county) == 3: 74 | countyid = f"{state}C{county}" 75 | elif county != '': 76 | _LOGGER.critical("Configured (YAML) county ID '%s' is not valid", county_config) 77 | return False 78 | 79 | if len(county) == 3: 80 | feedid = f"{zoneid},{countyid}" 81 | else: 82 | feedid = zoneid 83 | 84 | session = async_create_clientsession(hass) 85 | 86 | # Check the zoneid and set sensor name to county name from zoneid alert feed 87 | try: 88 | async with async_timeout.timeout(10, loop=hass.loop): 89 | zone_check_response = await session.get(URL_ID_CHECK.format(zoneid)) 90 | zone_data = await zone_check_response.text() 91 | 92 | if any (id_error in zone_data for id_error in ID_CHECK_ERRORS): 93 | _LOGGER.critical("Compiled zone ID '%s' is not valid", zoneid) 94 | return False 95 | 96 | if len(county) == 3: 97 | async with async_timeout.timeout(10, loop=hass.loop): 98 | county_check_response = await session.get(URL_ID_CHECK.format(countyid)) 99 | county_data = await county_check_response.text() 100 | 101 | if any (id_error in county_data for id_error in ID_CHECK_ERRORS): 102 | _LOGGER.critical("Compiled county ID '%s' is not valid", countyid) 103 | return False 104 | 105 | async with async_timeout.timeout(10, loop=hass.loop): 106 | response = await session.get(URL.format(zoneid)) 107 | data = await response.json() 108 | 109 | if "status" in data: 110 | if data["status"] == 404: 111 | _LOGGER.critical("Compiled zone ID '%s' is not valid", zoneid) 112 | return False 113 | 114 | _LOGGER.debug(data) 115 | name = data["title"].split("advisories for ")[1].split(" (")[0] 116 | 117 | except Exception as exception: # pylint: disable=broad-except 118 | _LOGGER.error("[%s] %s", sys.exc_info()[0].__name__, exception) 119 | raise PlatformNotReady 120 | 121 | add_entities([WeatherAlertsSensor(name, state, feedid, session)], True) 122 | _LOGGER.info("Added sensor with name '%s' for feedid '%s'", name, feedid) 123 | 124 | 125 | class WeatherAlertsSensor(Entity): # pylint: disable=missing-docstring 126 | def __init__(self, name, zone_state, feedid, session): 127 | self._name = name 128 | self.zone_state = zone_state 129 | self.feedid = feedid 130 | self.session = session 131 | self._state = 0 132 | self.connected = True 133 | self.exception = None 134 | self._attr = {} 135 | 136 | async def async_update(self): 137 | """Run update.""" 138 | alerts = [] 139 | 140 | try: 141 | async with async_timeout.timeout(10, loop=self.hass.loop): 142 | response = await self.session.get(URL.format(self.feedid)) 143 | if response.status != 200: 144 | self._state = "unavailable" 145 | _LOGGER.critical( 146 | "[%s] weatheralert download failure - HTTP status code %s", 147 | self.feedid, 148 | response.status 149 | ) 150 | else: 151 | data = await response.json() 152 | 153 | if data.get("features") is not None: 154 | for alert in data["features"]: 155 | if alert.get("properties") is not None: 156 | properties = alert["properties"] 157 | alerts.append( 158 | { 159 | "area": properties.get("areaDesc", "null"), 160 | "certainty": properties.get("certainty", "null"), 161 | "description": properties.get("description", "null"), 162 | "ends": properties.get("ends", "null"), 163 | "event": properties.get("event", "null"), 164 | "instruction": properties.get("instruction", "null"), 165 | "response": properties.get("response", "null"), 166 | "sent": properties.get("sent", "null"), 167 | "severity": properties.get("severity", "null"), 168 | "title": properties.get("headline", "null").split(" by ")[0], 169 | "urgency": properties.get("urgency", "null"), 170 | "NWSheadline": properties["parameters"].get("NWSheadline", "null"), 171 | "effective": properties.get("effective", "null"), 172 | "expires": properties.get("expires", "null"), 173 | "onset": properties.get("onset", "null"), 174 | "status": properties.get("status", "null"), 175 | "messageType": properties.get("messageType", "null"), 176 | "category": properties.get("category", "null"), 177 | "sender": properties.get("sender", "null"), 178 | "senderName": properties.get("senderName", "null"), 179 | "id": properties.get("id", "null"), 180 | "zoneid": self.feedid, 181 | } 182 | ) 183 | alerts.sort(key=lambda x: (x['sent'], x['id']), reverse=True) 184 | 185 | self._state = len(alerts) 186 | self._attr = { 187 | "alerts": alerts, 188 | "integration": "weatheralerts", 189 | "state": self.zone_state, 190 | "zone": self.feedid, 191 | } 192 | except Exception: # pylint: disable=broad-except 193 | self.exception = sys.exc_info()[0].__name__ 194 | connected = False 195 | else: 196 | connected = True 197 | finally: 198 | # Handle connection messages here. 199 | if self.connected: 200 | if not connected: 201 | self._state = "unavailable" 202 | _LOGGER.error( 203 | "[%s] Could not update the sensor (%s)", 204 | self.feedid, 205 | self.exception, 206 | ) 207 | 208 | elif not self.connected: 209 | if connected: 210 | _LOGGER.info("[%s] Update of the sensor completed", self.feedid) 211 | else: 212 | self._state = "unavailable" 213 | _LOGGER.debug( 214 | "[%s] Still no update (%s)", self.feedid, self.exception 215 | ) 216 | 217 | self.connected = connected 218 | 219 | @property 220 | def name(self): 221 | """Return the name.""" 222 | return self._name 223 | 224 | @property 225 | def unique_id(self): 226 | """Return a unique ID to use for this sensor.""" 227 | return f"weatheralerts_{self.feedid}".replace(",", "") 228 | 229 | @property 230 | def state(self): 231 | """Return the state.""" 232 | return self._state 233 | 234 | @property 235 | def unit_of_measurement(self): 236 | """Return the unit_of_measurement.""" 237 | return "Alerts" 238 | 239 | @property 240 | def icon(self): 241 | """Return icon.""" 242 | return "mdi:weather-hurricane" 243 | 244 | @property 245 | def device_state_attributes(self): 246 | """Return attributes.""" 247 | return self._attr 248 | -------------------------------------------------------------------------------- /customize.yaml: -------------------------------------------------------------------------------- 1 | media_player.office: 2 | icon: mdi:music-note 3 | switch.bedroom_pi_music: 4 | icon: mdi:radio 5 | switch.bedroom_speaker: 6 | icon: mdi:speaker 7 | light.living_room_chair_table: 8 | friendly_name: Chair table 9 | icon: mdi:lamp 10 | light.living_room_end_table: 11 | friendly_name: End table 12 | icon: mdi:lamp 13 | switch.wall_monitor: 14 | icon: mdi:monitor 15 | switch.hypercube_printer: 16 | icon: mdi:printer-3d 17 | sensor.bedroomsensor_temperature: 18 | friendly_name: Bedroom Temperature 19 | switch.fan: 20 | icon: mdi:fan 21 | camera.door_camera: 22 | icon: mdi:camcorder 23 | scene.movie_time: 24 | icon: mdi:movie 25 | emulated_hue: true 26 | emulated_hue_name: movie time 27 | script.1513442321081: 28 | friendly_name: sleep_machine_on 29 | input_boolean.enable_sleep_in: 30 | friendly_name: Have a lie in 31 | icon: mdi:hotel 32 | emulated_hue: true 33 | emulated_hue_name: sleep in 34 | input_boolean.start_sleep_machine: 35 | emulated_hue: true 36 | emulated_hue_name: sleep machine 37 | input_boolean.enable_media_light: 38 | emulated_hue: true 39 | emulated_hue_name: movie mode 40 | sensor.dark_sky_apparent_temperature: 41 | icon: temperature-fahrenheit 42 | sensor.dark_sky_humidity: 43 | icon: water-percent 44 | sensor.dark_sky_precip_probability: 45 | icon: weather-lightning-rainy 46 | sensor.yw_day1_condition: 47 | friendly_name: Weather Today 48 | sensor.yw_day1_temperature_max: 49 | friendly_name: High Today 50 | sensor.yw_day1_temperature_min: 51 | friendly_name: Low Today 52 | sensor.yw_day1_temperature: 53 | friendly_name: Current Temperature 54 | sensor.yw_day2_condition: 55 | friendly_name: Weather Tomorrow 56 | sensor.yw_day2_temperature_max: 57 | friendly_name: High Tomorrow 58 | sensor.yw_day2_temperature_min: 59 | friendly_name: Low Tomorrow 60 | sensor.yw_day3_condition: 61 | friendly_name: Weather Next Day 62 | sensor.yw_day3_temperature_max: 63 | friendly_name: High Next Day 64 | sensor.yw_day3_temperature_min: 65 | friendly_name: Low Next Day 66 | device_tracker.pixel_pixel: 67 | friendly_name: Steve 68 | entity_picture: local/steve_icon.jpg 69 | device_tracker.pixel: 70 | friendly_name: Steve-wifi 71 | entity_picture: local/steve_icon.jpg 72 | sensor.steve_pixel_battery: 73 | icon: mdi:battery 74 | device_tracker.iphone_iphone: 75 | friendly_name: Tammy 76 | entity_picture: local/tammy.jpg 77 | sensor.tammy_iphone_battery: 78 | icon: mdi:battery 79 | sun.sun: 80 | icon: mdi:weather-sunny 81 | sensor.weather_humidity: 82 | icon: mdi:water-percent 83 | friendly_name: Humidity 84 | sensor.weather_temperature: 85 | icon: mdi:thermometer 86 | friendly_name: Temperature 87 | sensor.weather_summary: 88 | icon: mdi:leaf 89 | friendly_name: Conditions 90 | group.all_automations: 91 | hidden: false 92 | group.all_switches: 93 | hidden: false 94 | group.all_lights: 95 | hidden: false 96 | scene.movie_pause: 97 | hidden: true 98 | sensor.egg_minder: 99 | hidden: true 100 | sensor.porkfolio_balance: 101 | hidden: true 102 | automation.nightlight_normal: 103 | hidden: true 104 | automation.nightlight_off: 105 | hidden: true 106 | automation.nightlight_on: 107 | hidden: true 108 | automation.reboot_cam_pm: 109 | hidden: true 110 | automation.reboot_cam_am: 111 | hidden: true 112 | light.living_room_accent: 113 | friendly_name: Accent 114 | script.radio538: 115 | friendly_name: Start Playing 116 | icon: mdi:play 117 | switch.living_room_ceiling_fan_relay: 118 | friendly_name: Living Room Ceiling Fan 119 | -------------------------------------------------------------------------------- /includes/automations/set theme.yaml: -------------------------------------------------------------------------------- 1 | - alias: 'Set Theme' 2 | trigger: 3 | platform: homeassistant 4 | event: start 5 | action: 6 | service: frontend.set_theme 7 | data: 8 | name: slate -------------------------------------------------------------------------------- /includes/automations/state/basement temp.yaml: -------------------------------------------------------------------------------- 1 | - alias: 'Basement Temperature Below Freezing' 2 | trigger: 3 | platform: numeric_state 4 | entity_id: sensor.basement_monitor_temperature 5 | below: 35 6 | for: 7 | hours: 1 8 | minutes: 0 9 | seconds: 0 10 | action: 11 | service: tts.google_say 12 | data_template: 13 | entity_id: media_player.home_group 14 | message: Basement is below 35 degrees. Current temperature is {{states('sensor.basement_monitor_temperature')}} 15 | -------------------------------------------------------------------------------- /includes/automations/state/coach_candle.yaml: -------------------------------------------------------------------------------- 1 | - alias: 'Coach Candle' 2 | trigger: 3 | platform: state 4 | entity_id: input_boolean.test_button_1 5 | to: 'on' 6 | 7 | action: 8 | - service: homeassistant.turn_on 9 | entity_id: light.coach_light 10 | data: 11 | brightness: 255 12 | rgb_color: [255,126,0] 13 | effect: "Flicker Effect With Custom Values" 14 | # - service: scene.turn_on 15 | # data: 16 | # entity_id: scene.coach_candle_flicker 17 | -------------------------------------------------------------------------------- /includes/automations/state/drop_the_house_lights.yaml.old: -------------------------------------------------------------------------------- 1 | - alias: 'Drop the house lights' 2 | trigger: 3 | platform: state 4 | entity_id: media_player.kodi 5 | to: playing 6 | condition: 7 | condition: state 8 | entity_id: input_boolean.enable_movie_time 9 | state: 'on' 10 | action: 11 | service: scene.turn_on 12 | data: 13 | entity_id: scene.movie_time -------------------------------------------------------------------------------- /includes/automations/state/drop_the_officelights.yaml.old: -------------------------------------------------------------------------------- 1 | - alias: 'Drop the Office lights' 2 | trigger: 3 | platform: state 4 | entity_id: media_player.kodi_office 5 | to: playing 6 | condition: 7 | condition: state 8 | entity_id: input_boolean.enable_office_movie_time 9 | state: 'on' 10 | action: 11 | service: scene.turn_on 12 | data: 13 | entity_id: scene.office_movie_time -------------------------------------------------------------------------------- /includes/automations/state/raise_the_house_lights.yaml.old: -------------------------------------------------------------------------------- 1 | - alias: 'Raise the house lights' 2 | trigger: 3 | platform: state 4 | entity_id: media_player.kodi 5 | from: playing 6 | condition: 7 | condition: state 8 | entity_id: input_boolean.enable_movie_time 9 | state: 'on' 10 | action: 11 | service: scene.turn_on 12 | data: 13 | entity_id: scene.living_room_full -------------------------------------------------------------------------------- /includes/automations/state/raise_the_office_lights.yaml.old: -------------------------------------------------------------------------------- 1 | - alias: 'Raise the Office lights' 2 | trigger: 3 | platform: state 4 | entity_id: media_player.kodi_office 5 | from: playing 6 | condition: 7 | condition: state 8 | entity_id: input_boolean.enable_office_movie_time 9 | state: 'on' 10 | action: 11 | service: scene.turn_on 12 | data: 13 | entity_id: scene.office_lights_full -------------------------------------------------------------------------------- /includes/automations/state/set radio volume.yaml: -------------------------------------------------------------------------------- 1 | - alias: 'Set Radio Volume' 2 | trigger: 3 | platform: state 4 | entity_id: input_number.volume_radio 5 | action: 6 | service: media_player.volume_set 7 | data_template: 8 | entity_id: '{% if is_state("input_select.chromecast_radio", "Livingroom") %} media_player.living_room_display 9 | {% elif is_state("input_select.chromecast_radio", "Shop") %} media_player.shop 10 | {% elif is_state("input_select.chromecast_radio", "Clock") %} media_player.bedroom_speaker 11 | {% elif is_state("input_select.chromecast_radio", "Bedroom") %} media_player.jbllinkview7011 12 | {% elif is_state("input_select.chromecast_radio", "Bathroom") %} media_player.bathroom_speaker 13 | {% elif is_state("input_select.chromecast_radio", "Kitchen") %} media_player.kitchen_display 14 | {% elif is_state("input_select.chromecast_radio", "Office") %} media_player.office_speaker 15 | {% elif is_state("input_select.chromecast_radio", "Everywhere") %} media_player.home_group 16 | {% endif %} 17 | ' 18 | volume_level: '{{ states.input_number.volume_radio.state }}' 19 | -------------------------------------------------------------------------------- /includes/automations/time/backup system.yaml: -------------------------------------------------------------------------------- 1 | - alias: Weekly HA backup 2 | initial_state: true 3 | trigger: 4 | - platform: time 5 | at: '02:00:00' 6 | condition: 7 | - condition: time 8 | weekday: 9 | - mon 10 | - wed 11 | - fri 12 | - sat 13 | action: 14 | - service: hassio.snapshot_full 15 | data_template: 16 | name: Full_Backup_{{ now().strftime('%Y%m%d') }} 17 | - service: notify.mail_steve 18 | data: 19 | message: "HASS backup has run. the snapshot name is ----> Full_Backup_{{ now().strftime('%Y%m%d') }} " -------------------------------------------------------------------------------- /includes/automations/time/nightlights off.yaml: -------------------------------------------------------------------------------- 1 | - alias: 'Nightlight Off' 2 | trigger: 3 | platform: time 4 | at: '08:00:02' 5 | action: 6 | - service: homeassistant.turn_off 7 | data: 8 | entity_id: light.hall_light 9 | - service: homeassistant.turn_off 10 | data: 11 | entity_id: light.kitchen 12 | 13 | -------------------------------------------------------------------------------- /includes/automations/time/nightlights on.yaml: -------------------------------------------------------------------------------- 1 | - alias: 'Nightlight on' 2 | trigger: 3 | platform: time 4 | at: '21:30:00' 5 | action: 6 | service: scene.turn_on 7 | entity_id: scene.nightlights_active_mode -------------------------------------------------------------------------------- /includes/automations/time/nightlights to normal.yaml: -------------------------------------------------------------------------------- 1 | - alias: 'Nightlight Normal' 2 | trigger: 3 | platform: time 4 | at: '08:00:00' 5 | action: 6 | service: scene.turn_on 7 | entity_id: scene.nightlights_full_mode -------------------------------------------------------------------------------- /includes/automations/time/send backup to google.yaml: -------------------------------------------------------------------------------- 1 | - alias: Send backup to Google 2 | initial_state: true 3 | trigger: 4 | - platform: time 5 | at: '02:30:00' 6 | condition: 7 | - condition: time 8 | weekday: 9 | - mon 10 | - wed 11 | - fri 12 | - sat 13 | action: 14 | - service: rest_command.google_backup 15 | - service: notify.mail_steve 16 | data: 17 | message: "HASS backup has been copied to your Google Drive. The snapshot name is ----> Full_Backup_{{ now().strftime('%Y%m%d') }} " -------------------------------------------------------------------------------- /includes/cameras.yaml: -------------------------------------------------------------------------------- 1 | - platform: generic 2 | name: Weather 3 | still_image_url: http://radblast.wunderground.com/cgi-bin/radar/WUNIDS_map?station=MRX&brand=wui&num=1&delay=15&type=N0R&frame=0&scale=0.3173913043478261&noclutter=0&showstorms=0&mapx=400&mapy=240¢erx=151.09589041095887¢ery=252.60273972602738&transx=-248.90410958904113&transy=12.60273972602738&showlabels=1&severe=0&rainsnow=0&lightning=0&smooth=0&rand=24662824&lat=0&lon=0&label=you 4 | - platform: generic 5 | name: Steve Map 6 | still_image_url: https://maps.googleapis.com/maps/api/staticmap?center={{ states.device_tracker.moto_moto.attributes.latitude }},{{ states.device_tracker.moto_moto.attributes.longitude }}&zoom=13&size=500x500&maptype=roadmap&markers=color:blue%7Clabel:S%7C{{ states.device_tracker.moto_moto.attributes.latitude }},{{ states.device_tracker.moto_moto.attributes.longitude }} 7 | limit_refetch_to_url_change: true 8 | -------------------------------------------------------------------------------- /includes/input_boolean.yaml: -------------------------------------------------------------------------------- 1 | living_room_theater_mode: 2 | name: Living Room Theater Mode 3 | initial: off 4 | office_theater_mode: 5 | name: Office Theater Mode 6 | initial: off 7 | 8 | 9 | 10 | 11 | 12 | 13 | #experimental controls for when needed 14 | test_button_1: 15 | name: Test Button 1 16 | initial: off 17 | test_button_2: 18 | name: Test Button 2 19 | initial: off 20 | test_button_3: 21 | name: Test Button 3 22 | initial: off 23 | test_button_4: 24 | name: Test Button 4 25 | initial: off 26 | test_button_5: 27 | name: Test Button 5 28 | initial: off -------------------------------------------------------------------------------- /includes/input_numbers.yaml: -------------------------------------------------------------------------------- 1 | volume_radio: 2 | name: Volume 3 | icon: mdi:volume-high 4 | min: 0 5 | max: 1 6 | step: 0.05 -------------------------------------------------------------------------------- /includes/input_selects.yaml: -------------------------------------------------------------------------------- 1 | hass_theme: 2 | name: HASS Themes 3 | options: 4 | - default 5 | - solarized 6 | - PmxMonolight 7 | - PmxMononight 8 | - wood 9 | initial: default 10 | icon: mdi:theme-light-dark 11 | spotify_source: 12 | name: 'Source:' 13 | options: 14 | - Home group 15 | - Bathroom speaker 16 | - Bedroom speaker 17 | - Kitchen display 18 | - Living Room display 19 | - Office Speaker 20 | - Shop Cast 21 | - Pixel 2 22 | media_lockout: 23 | name: "Media Automation" 24 | options: 25 | - "enabled" 26 | - "disabled" 27 | initial: "disabled" 28 | radio_station: 29 | name: 'Select Radio Station:' 30 | options: 31 | - MagicRadio by PulsRadio 32 | - Europa FM 33 | - Rock FM 34 | - Digi FM 35 | - Romantic FM 36 | - Radio Clasic 37 | - P1 38 | - P2 39 | - P3 40 | - P4 41 | - Ekot 42 | - RIX FM 43 | - Bandit Rock 44 | - Lugna Favoriter 45 | - STAR FM 46 | - Power Hit Radio 47 | - Bandit Ballads 48 | - Bandit Classics 49 | - Bandit Metal 50 | - RIX FM FRESH 51 | - Power Club 52 | - Power Street 53 | - Indie 101 54 | - Svenska Favoriter 55 | - Dansbandsfavoriter 56 | - Star 90s 57 | - Star 80s 58 | - Star 70s 59 | - Star 60s 60 | - Electro Lounge 61 | - One Hit Wonders 62 | - Magic FM 63 | - Guerilla 64 | - Europa FM 65 | - Rock FM 66 | - Digi FM 67 | - Romantic FM 68 | - Radio Clasic 69 | - Clasic Blue Jazz 70 | - Clasic Hits 71 | - Clasic Jazz 72 | - Clasic Love 73 | - Red Radio 74 | - Clasic Rock 75 | - Clasic Relax 76 | - 10 Hours Rain and Thunder 77 | - 8 Hour Deep Sleep Music - Delta Waves 78 | - 8 Hour Sleep Hypnosis 79 | - 10 Hours Fireplace 80 | - 10 Hours Forest Creek 81 | - Rain 10 hours of Rain Storm on tin roof 82 | - Rain Sounds for Sleeping 83 | - Sleep and Relaxation Nature Sounds 84 | - Thunderstorm and Rain Sounds over the Ocean 85 | 86 | chromecast_radio: 87 | name: 'Select Speakers:' 88 | options: 89 | - Bathroom 90 | - Clock 91 | - Bedroom 92 | - Kitchen 93 | - Livingroom 94 | - Office 95 | - Shop 96 | - Everywhere 97 | initial: Everywhere 98 | icon: mdi:speaker-wireless -------------------------------------------------------------------------------- /includes/lights.yaml: -------------------------------------------------------------------------------- 1 | - platform: group 2 | name: Bedroom_Ceiling 3 | entities: 4 | - light.bedroom_ceiling_1 5 | - light.bedroom_ceiling_2 6 | - platform: group 7 | name: Living_Room_Ceiling 8 | entities: 9 | - light.living_room_ceiling_light_1 10 | - light.living_room_ceiling_light_2 11 | -------------------------------------------------------------------------------- /includes/media_players/androidtv.yaml: -------------------------------------------------------------------------------- 1 | - platform: androidtv 2 | host: 192.168.50.167 3 | name: FireTV Office 4 | # adb_server_ip: 127.0.0.1 5 | # adb_server_port: 5037 6 | -------------------------------------------------------------------------------- /includes/media_players/kodi.yaml: -------------------------------------------------------------------------------- 1 | - platform: kodi 2 | host: !secret kodi_ip 3 | port: !secret kodi_port 4 | name: Kodi 5 | username: kodi 6 | password: None 7 | 8 | -------------------------------------------------------------------------------- /includes/media_players/kodi_office.yaml: -------------------------------------------------------------------------------- 1 | - platform: kodi 2 | host: !secret kodi_office_ip 3 | port: !secret kodi_port 4 | name: Kodi Office 5 | username: kodi 6 | password: None 7 | -------------------------------------------------------------------------------- /includes/media_players/roku.yaml.old: -------------------------------------------------------------------------------- 1 | - platform: roku 2 | host: 192.168.50.109 -------------------------------------------------------------------------------- /includes/media_players/spotify.yaml.old: -------------------------------------------------------------------------------- 1 | - platform: spotify 2 | client_id: !secret spotify_clicnet_id 3 | client_secret: !secret spotify_clicnet_secret 4 | 5 | -------------------------------------------------------------------------------- /includes/notifiers.yaml: -------------------------------------------------------------------------------- 1 | - name: mail_steve 2 | platform: smtp 3 | server: !secret smtp_server 4 | port: 587 5 | timeout: 15 6 | sender: !secret smtp_sender 7 | encryption: starttls 8 | username: !secret smtp_username 9 | password: !secret smtp_password 10 | recipient: 11 | - !secret smtp_recipient1 12 | sender_name: My Home Assistant -------------------------------------------------------------------------------- /includes/remote.yaml: -------------------------------------------------------------------------------- 1 | - platform: harmony 2 | name: Living Room Hub 3 | host: !secret harmony_hub_ip 4 | -------------------------------------------------------------------------------- /includes/scenes/coach_candle_flicker.yaml: -------------------------------------------------------------------------------- 1 | - name: 'Coach Candle Flicker' 2 | entities: 3 | light.coach_light: 4 | state: on 5 | brightness: 255 6 | effect: Flicker Effect With Custom Values 7 | -------------------------------------------------------------------------------- /includes/scenes/living_room_full.yaml: -------------------------------------------------------------------------------- 1 | - name: 'Living Room Full' 2 | entities: 3 | light.living_room_end_table: 4 | state: on 5 | brightness: 255 6 | light.living_room_chair_table: 7 | state: on 8 | brightness: 255 9 | light.living_room_ceiling_light_1: 10 | state: on 11 | brightness: 255 12 | light.living_room_ceiling_light_2: 13 | state: on 14 | brightness: 255 15 | light.living_room_accent: 16 | state: on 17 | brightness: 255 18 | -------------------------------------------------------------------------------- /includes/scenes/movie_time.yaml: -------------------------------------------------------------------------------- 1 | - name: 'Movie Time' 2 | entities: 3 | light.living_room_end_table: 4 | state: on 5 | transition: 2 6 | brightness: 75 7 | light.living_room_chair_table: 8 | state: on 9 | transition: 2 10 | brightness: 75 11 | light.living_room_ceiling_light_1: 12 | state: on 13 | transition: 3 14 | brightness: 75 15 | light.living_room_ceiling_light_2: 16 | state: on 17 | transition: 3 18 | brightness: 75 19 | light.living_room_accent: 20 | state: on 21 | transition: 3 22 | brightness: 50 23 | -------------------------------------------------------------------------------- /includes/scenes/nightlights_active_mode.yaml: -------------------------------------------------------------------------------- 1 | - name: 'Nightlights Active Mode' 2 | entities: 3 | light.hall_light: 4 | state: on 5 | transition: 1 6 | brightness: 20 7 | light.kitchen_light: 8 | state: on 9 | transition: 1 10 | brightness: 20 11 | -------------------------------------------------------------------------------- /includes/scenes/nightlights_full_mode.yaml: -------------------------------------------------------------------------------- 1 | - name: 'Nightlights Full Mode' 2 | entities: 3 | light.hall_light: 4 | state: on 5 | transition: 1 6 | brightness: 255 7 | light.kitchen_light: 8 | state: on 9 | transition: 1 10 | brightness: 255 11 | -------------------------------------------------------------------------------- /includes/scenes/office_lights_full.yaml: -------------------------------------------------------------------------------- 1 | - name: 'Office Lights Full' 2 | entities: 3 | light.office_ceiling_light_1: 4 | state: on 5 | brightness: 255 6 | light.office_ceiling_light_2: 7 | state: on 8 | brightness: 255 9 | -------------------------------------------------------------------------------- /includes/scenes/office_movie_time.yaml: -------------------------------------------------------------------------------- 1 | - name: 'Office Movie Time' 2 | entities: 3 | light.office_ceiling_light_1: 4 | state: on 5 | transition: 2 6 | brightness: 35 7 | light.office_ceiling_light_2: 8 | state: on 9 | transition: 2 10 | brightness: 35 11 | -------------------------------------------------------------------------------- /includes/scenes/sleepy_time.yaml: -------------------------------------------------------------------------------- 1 | - name: 'Sleepy Time' 2 | entities: 3 | light.bedroom_ceiling_1: 4 | state: on 5 | transition: 5 6 | brightness: 25 7 | light.bedroom_ceiling_2: 8 | state: on 9 | transition: 5 10 | brightness: 25 11 | 12 | -------------------------------------------------------------------------------- /includes/scripts.yaml: -------------------------------------------------------------------------------- 1 | radio538: 2 | alias: Play Radio on Chromecast Audio 3 | sequence: 4 | - service: media_player.volume_set 5 | data: 6 | entity_id: media_player.office_speaker 7 | volume_level: '0.55' 8 | 9 | 10 | - service: media_player.play_media 11 | data_template: 12 | entity_id: > 13 | {% if is_state("input_select.chromecast_radio", "Livingroom") %} media_player.living_room_display 14 | {% elif is_state("input_select.chromecast_radio", "Shop") %} media_player.shop_speaker 15 | {% elif is_state("input_select.chromecast_radio", "Bedroom") %} media_player.bedroom_speaker 16 | {% elif is_state("input_select.chromecast_radio", "Bathroom") %} media_player.bathroom_speaker 17 | {% elif is_state("input_select.chromecast_radio", "Kitchen") %} media_player.kitchen_display 18 | {% elif is_state("input_select.chromecast_radio", "Office") %} media_player.office_speaker 19 | {% elif is_state("input_select.chromecast_radio", "Everywhere") %} media_player.home_group 20 | {% endif %} 21 | media_content_id: > 22 | {% if is_state("input_select.radio_station", "MagicRadio by PulsRadio") %} http://193.200.43.23:80/magicradioHD.mp3 23 | {% elif is_state("input_select.radio_station", "Europa FM") %} http://astreaming.europafm.ro:8000/europafm_aacp48k.m3u 24 | {% elif is_state("input_select.radio_station", "Rock FM") %} http://80.86.106.143:9128/rockfm.mp3 25 | {% elif is_state("input_select.radio_station", "Digi FM") %} http://edge76.rdsnet.ro:84/digifm/digifm.mp3 26 | {% elif is_state("input_select.radio_station", "Romantic FM") %} http://5.254.113.34:9123/romanticfm.aacp 27 | {% elif is_state("input_select.radio_station", "Radio Clasic") %} http://37.251.146.169:8000/stream 28 | {% elif is_state("input_select.radio_station", "P1") %} https://sverigesradio.se/topsy/direkt/132-hi-mp3 29 | {% elif is_state("input_select.radio_station", "P2") %} https://sverigesradio.se/topsy/direkt/2562-hi-mp3 30 | {% elif is_state("input_select.radio_station", "P3") %} https://sverigesradio.se/topsy/direkt/164-hi-mp3 31 | {% elif is_state("input_select.radio_station", "P4") %} https://sverigesradio.se/topsy/direkt/212-hi-mp3 32 | {% elif is_state("input_select.radio_station", "Ekot") %} https://sverigesradio.se/topsy/direkt/4540-hi-mp3 33 | {% elif is_state("input_select.radio_station", "RIX FM") %} http://fm01-icecast.mtg-r.net/fm01_aac 34 | {% elif is_state("input_select.radio_station", "Bandit Rock") %} http://fm02-icecast.mtg-r.net/fm02_aac 35 | {% elif is_state("input_select.radio_station", "Lugna Favoriter") %} http://fm03-icecast.mtg-r.net/fm03_aac 36 | {% elif is_state("input_select.radio_station", "STAR FM") %} http://fm05-icecast.mtg-r.net/fm05_aac 37 | {% elif is_state("input_select.radio_station", "Power Hit Radio") %} http://fm04-icecast.mtg-r.net/fm04_aac 38 | {% elif is_state("input_select.radio_station", "Bandit Ballads") %} http://wr21-ice.stream.mtgr.se/wr21_aac 39 | {% elif is_state("input_select.radio_station", "Bandit Classics") %} http://wr11-icecast.mtg-r.net/wr11_aac 40 | {% elif is_state("input_select.radio_station", "Bandit Metal") %} http://wr03-icecast.mtg-r.net/wr03_aac 41 | {% elif is_state("input_select.radio_station", "RIX FM FRESH") %} http://wr04-icecast.mtg-r.net/wr04_aac 42 | {% elif is_state("input_select.radio_station", "Power Club") %} http://wr06-icecast.mtg-r.net/wr06_aac 43 | {% elif is_state("input_select.radio_station", "Power Street") %} http://wr07-icecast.mtg-r.net/wr07_aac 44 | {% elif is_state("input_select.radio_station", "Indie 101") %} http://wr05-icecast.mtg-r.net/wr05_aac 45 | {% elif is_state("input_select.radio_station", "Svenska Favoriter") %} http://wr13-icecast.mtg-r.net/wr13_aac 46 | {% elif is_state("input_select.radio_station", "Dansbandsfavoriter") %} http://wr15-icecast.mtg-r.net/wr15_aac 47 | {% elif is_state("input_select.radio_station", "Star 90s") %} http://wr12-icecast.mtg-r.net/wr12_aac 48 | {% elif is_state("input_select.radio_station", "Star 80s") %} http://wr02-icecast.mtg-r.net/wr02_aac 49 | {% elif is_state("input_select.radio_station", "Star 70s") %} http://wr10-icecast.mtg-r.net/wr10_aac 50 | {% elif is_state("input_select.radio_station", "Star 60s") %} http://wr09-icecast.mtg-r.net/wr09_aac 51 | {% elif is_state("input_select.radio_station", "Electro Lounge") %} http://wr16-icecast.mtg-r.net/wr16_aac 52 | {% elif is_state("input_select.radio_station", "One Hit Wonders") %} http://wr18-icecast.mtg-r.net/wr18_aac 53 | {% elif is_state("input_select.radio_station", "Magic FM") %} http://live.magicfm.ro:9128/magicfm.aacp 54 | {% elif is_state("input_select.radio_station", "Guerilla") %} http://live.guerrillaradio.ro:8010/guerrilla.aac 55 | {% elif is_state("input_select.radio_station", "Europa FM") %} http://astreaming.europafm.ro:8000/europafm_aacp48k.m3u 56 | {% elif is_state("input_select.radio_station", "Rock FM") %} http://80.86.106.143:9128/rockfm.mp3 57 | {% elif is_state("input_select.radio_station", "Digi FM") %} http://edge76.rdsnet.ro:84/digifm/digifm.mp3 58 | {% elif is_state("input_select.radio_station", "Romantic FM") %} http://5.254.113.34:9123/romanticfm.aacp 59 | {% elif is_state("input_select.radio_station", "Radio Clasic") %} http://37.251.146.169:8000/stream 60 | {% elif is_state("input_select.radio_station", "Clasic Blue Jazz") %} http://37.251.146.169:8048/stream 61 | {% elif is_state("input_select.radio_station", "Clasic Hits") %} http://37.251.146.169:7000/stream 62 | {% elif is_state("input_select.radio_station", "Clasic Jazz") %} http://37.251.146.169:7800/stream 63 | {% elif is_state("input_select.radio_station", "Clasic Love") %} http://37.251.146.169:8044/stream 64 | {% elif is_state("input_select.radio_station", "Red Radio") %} http://37.251.146.169:8012/stream 65 | {% elif is_state("input_select.radio_station", "Clasic Rock") %} http://37.251.146.169:7100/stream 66 | {% elif is_state("input_select.radio_station", "Clasic Relax") %} http://37.251.146.169:8020/stream 67 | {% elif is_state("input_select.radio_station", "10 Hours Rain and Thunder") %} http://192.168.50.1/shares/USB_Storage/Music/10%20Hours%20Rain%20and%20Thunder%20Healing%20%20Ambient%20%20Sounds%20for%20Deep%20Sleeping%20Meditation%20Relaxation%20Spa.mp4 68 | {% elif is_state("input_select.radio_station", "8 Hour Deep Sleep Music - Delta Waves") %} http://192.168.50.1/shares/USB_Storage/Music/8%20Hour%20Deep%20Sleep%20Music-%20Delta%20Waves%2c.mp4 69 | {% elif is_state("input_select.radio_station", "8 Hour Sleep Hypnosis") %} http://192.168.50.1/shares/USB_Storage/Music/8%20Hour%20Sleep%20Hypnosis-%20.mp4 70 | {% elif is_state("input_select.radio_station", "10 Hours Fireplace") %} http://192.168.50.1/shares/USB_Storage/Music/AMSR%20-%2010%20Hours%20Fireplace%20Healing%20Tranqil%20Sounds%20for%20Deep%20Sleeping%20Meditation%20Relaxation%20Spa.mp4 71 | {% elif is_state("input_select.radio_station", "10 Hours Forest Creek") %} http://192.168.50.1/shares/USB_Storage/Music/AMSR%20-%2010%20Hours%20Forest%20Creek%20Healing%20Tranqil%20Sounds%20for%20Deep%20Sleeping%20Meditation%20Relaxation%20Spa.mp4 72 | {% elif is_state("input_select.radio_station", "Rain 10 hours of Rain Storm on tin roof") %} http://192.168.50.1/shares/USB_Storage/Music/Rain%2010%20hours%20of%20Rain%20Storm%20on%20tin%20roof%20%2c%20Relaxing%20Sleep%20Sounds%20%5b%20Sleep%20Music%20%5d.mp4 73 | {% elif is_state("input_select.radio_station", "Rain Sounds for Sleeping") %} http://192.168.50.1/shares/USB_Storage/Music/Rain%20Sounds%20for%20Sleeping%20-%2012%20hours%20of%20relaxing%20noise%20for%20your%20ears.mp4 74 | {% elif is_state("input_select.radio_station", "Sleep and Relaxation Nature Sounds") %} http://192.168.50.1/shares/USB_Storage/Music/Sleep%20and%20Relaxation%20Nature%20Sounds%2c%20Crickets%20Summer%20Night%20-%20Sleep%20Music.mp4 75 | {% elif is_state("input_select.radio_station", "Thunderstorm and Rain Sounds over the Ocean") %} http://192.168.50.1/shares/USB_Storage/Music/Thunderstorm%20and%20Rain%20Sounds%20over%20the%20Ocean%20%2c%2010%20hours%20%5b%20Sleep%20Music%20%5d.mp4 76 | {% endif %} 77 | media_content_type: 'audio/mp4' -------------------------------------------------------------------------------- /includes/sensors/basement_ble.yaml.bad: -------------------------------------------------------------------------------- 1 | - platform: mitemp_bt 2 | mac: !secret mitemp1_mac 3 | name: Basement Monitor 4 | force_update: false 5 | median: 3 6 | monitored_conditions: 7 | - temperature 8 | - humidity 9 | - battery 10 | -------------------------------------------------------------------------------- /includes/sensors/cert_expirt.yaml: -------------------------------------------------------------------------------- 1 | - platform: cert_expiry 2 | host: !secret http_url 3 | port: !secret http_port 4 | -------------------------------------------------------------------------------- /includes/sensors/esphome_status.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy1701/Home-Assistant-Configuration/3775f5f8225543b217f3ff259942b58d817d6023/includes/sensors/esphome_status.yaml -------------------------------------------------------------------------------- /includes/sensors/flu_near_you.yaml: -------------------------------------------------------------------------------- 1 | - platform: flunearyou 2 | -------------------------------------------------------------------------------- /includes/sensors/snmp.yaml: -------------------------------------------------------------------------------- 1 | - platform: snmp 2 | name: 'nas free space' 3 | host: 192.168.50.7 4 | community: funnycat 5 | version: 2c 6 | baseoid: 1.3.6.1.4.1.5127.1.1.1.8.1.9.1.6.1 7 | accept_errors: true 8 | - platform: snmp 9 | name: 'nas total space' 10 | host: 192.168.50.7 11 | community: funnycat 12 | version: 2c 13 | baseoid: 1.3.6.1.4.1.5127.1.1.1.8.1.9.1.5 14 | accept_errors: true 15 | - platform: snmp 16 | name: 'ups battery capacity' 17 | host: 192.168.50.17 18 | port: 164 19 | community: public 20 | baseoid: 1.3.6.1.4.1.3808.1.1.1.2.2.1 21 | accept_errors: true 22 | - platform: snmp 23 | name: 'ups input voltage' 24 | host: 192.168.50.17 25 | port: 164 26 | community: public 27 | baseoid: 1.3.6.1.4.1.3808.1.1.1.3.2.2 28 | accept_errors: true 29 | - platform: snmp 30 | name: 'ups output voltage' 31 | host: 192.168.50.17 32 | port: 164 33 | community: public 34 | baseoid: 1.3.6.1.4.1.3808.1.1.1.4.2.1 35 | accept_errors: true 36 | - platform: snmp 37 | name: 'ups output load' 38 | host: 192.168.50.17 39 | port: 164 40 | community: public 41 | baseoid: 1.3.6.1.4.1.3808.1.1.1.4.2.3 42 | accept_errors: true 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /includes/sensors/speedtest.yaml.bad: -------------------------------------------------------------------------------- 1 | - platform: speedtestdotnet 2 | scan_interval: 3 | hour: 4 | - 8 5 | - 12 6 | - 18 7 | - 22 8 | monitored_conditions: 9 | - ping 10 | - download 11 | - upload 12 | -------------------------------------------------------------------------------- /includes/sensors/system_monitor.yaml: -------------------------------------------------------------------------------- 1 | - platform: systemmonitor 2 | resources: 3 | - type: disk_use_percent 4 | arg: /home 5 | - type: memory_free 6 | - type: disk_free 7 | arg: / 8 | 9 | -------------------------------------------------------------------------------- /includes/sensors/time_date_yaml: -------------------------------------------------------------------------------- 1 | - platform: time_date 2 | display_options: 3 | - time 4 | -------------------------------------------------------------------------------- /includes/sensors/version.yaml: -------------------------------------------------------------------------------- 1 | - platform: version 2 | -------------------------------------------------------------------------------- /includes/sensors/waqi.yaml: -------------------------------------------------------------------------------- 1 | - platform: waqi 2 | token: !secret waqi_token 3 | locations: 4 | - kingsport 5 | -------------------------------------------------------------------------------- /includes/sensors/weatheralerts.yaml: -------------------------------------------------------------------------------- 1 | - platform: weatheralerts 2 | state: TN 3 | zone: "044" 4 | -------------------------------------------------------------------------------- /includes/trackers.yaml: -------------------------------------------------------------------------------- 1 | - platform: netgear 2 | host: !secret netgear_ip 3 | username: !secret netgear_user 4 | password: !secret netgear_pw 5 | consider_home: 45 6 | track_new_devices: yes 7 | interval_seconds: 120 8 | 9 | - platform: bluetooth_le_tracker 10 | 11 | 12 | - platform: ping 13 | hosts: 14 | edge_router: 192.168.50.1 15 | hue_bridge: !secret hue_ip -------------------------------------------------------------------------------- /includes/weather.yaml: -------------------------------------------------------------------------------- 1 | - platform: darksky 2 | api_key: !secret darksky_key 3 | mode: daily 4 | - platform: openweathermap 5 | api_key: !secret openweathermap_key 6 | 7 | -------------------------------------------------------------------------------- /includes/weblinks.yaml: -------------------------------------------------------------------------------- 1 | entities: 2 | - name: Router 3 | url: !secret weblink1 4 | icon: mdi:router-wireless 5 | - name: Radio Playlist 6 | url: !secret weblink2 7 | - name: Camera Control (Door) 8 | url: !secret weblink3 9 | - name: Camera Control (Pi1) 10 | url: !secret weblink4 11 | -------------------------------------------------------------------------------- /includes/wink.yaml: -------------------------------------------------------------------------------- 1 | # access_token: !secret wink_token 2 | email: !secret wink_email 3 | password: !secret wink_password 4 | client_id: !secret wink_client_id 5 | client_secret: !secret wink_client_secret 6 | -------------------------------------------------------------------------------- /includes/zones/home.yaml: -------------------------------------------------------------------------------- 1 | name: Home 2 | latitude: !secret home_lat 3 | longitude: !secret home_lon 4 | radius: 100 5 | icon: 'mdi:home' 6 | -------------------------------------------------------------------------------- /includes/zones/work.yaml: -------------------------------------------------------------------------------- 1 | name: Work 2 | latitude: !secret work_lat 3 | longitude: !secret work_lon 4 | radius: 350 5 | icon: 'mdi:school' 6 | 7 | -------------------------------------------------------------------------------- /lovelace/tabs/clock.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | id: clock 3 | title: Alarm Clock 4 | panel: true 5 | cards: 6 | - type: vertical-stack 7 | cards: 8 | - type: "custom:alarm-clock-card" 9 | alarm_entities: 10 | - entity_id: input_boolean.alarm_clock 11 | - entity_id: media_player.gpm_desktop_player 12 | scripts: 13 | - entity: script.start_lights_bedroom_slowly 14 | when: '-00:30' 15 | - entity: light.bathroom 16 | when: on_dismiss 17 | service: light.turn_on 18 | holiday: 19 | calendars: 20 | - calendar.holidays 21 | cards: 22 | - type: 'custom:simple-weather-card' 23 | entity: weather.yweather 24 | - type: media-control 25 | entity: media_player.gpm_desktop_player 26 | - type: "custom:monster-card" 27 | card: 28 | title: Devices requiring your attention 29 | type: entities 30 | show_empty: false 31 | filter: 32 | include: 33 | - state: "on" 34 | - state: "playing" 35 | exclude: 36 | - domain: group 37 | - domain: weather 38 | - domain: calendar 39 | - domain: input_boolean 40 | - domain: binary_sensor 41 | - entity_id: switch.licht_nachtkastje 42 | when: 43 | entity: group.all_important_devices 44 | state: 'on' 45 | - type: "custom:monster-card" 46 | card: 47 | title: Quick info 48 | type: glance 49 | filter: 50 | include: 51 | - entity_id: group.all_important_devices 52 | options: 53 | name: "All lights" 54 | tap_action: toggle 55 | - entity_id: switch.licht_nachtkastje 56 | options: 57 | name: "Licht nachtkastje" 58 | tap_action: toggle 59 | - entity_id: binary_sensor.alarm 60 | - entity_id: binary_sensor.motion 61 | - entity_id: binary_sensor.back_door 62 | - entity_id: binary_sensor.front_door 63 | - entity_id: sensor.temperature 64 | - entity_id: sensor.humidity 65 | - entity_id: sensor.illuminance 66 | when: 67 | entity: group.all_important_devices 68 | state: 'off' 69 | 70 | -------------------------------------------------------------------------------- /lovelace/tabs/devices.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | id: devices 3 | title: Devices 4 | cards: 5 | 6 | - type: vertical-stack 7 | column_width: calc(100% / 1) 8 | cards: 9 | - type: horizontal-stack 10 | cards: 11 | 12 | - type: custom:card-modder 13 | card: 14 | type: glance 15 | column_width: calc(100% / 3) 16 | title: ESPHome Devices 17 | show_header_toggle: true 18 | entities: 19 | - entity: binary_sensor.bedroom_ss30_status 20 | - entity: binary_sensor.ceiling_fan_status 21 | - entity: binary_sensor.living_room_ss30_status 22 | - entity: binary_sensor.shop_receiver_status 23 | - entity: binary_sensor.washing_machine_status 24 | - entity: binary_sensor.sonoff_2_button_status 25 | name: Porch Light Status 26 | 27 | 28 | style: 29 | border-radius: 20px 30 | background-image: url("/local/backgrounds/mediabg7.png") 31 | background-size: cover 32 | background-repeat: no-repeat 33 | border: solid 1px rgba(100,100,100,0.3) 34 | box-shadow: 3px 3px rgba(0,0,0,0.4) 35 | overflow: hidden 36 | 37 | 38 | 39 | 40 | 41 | 42 | - type: custom:tracker-card 43 | 44 | 45 | - type: custom:monster-card 46 | show_empty: false 47 | card: 48 | type: entities 49 | title: 'On' 50 | filter: 51 | include: 52 | - entity_id: "device_tracker.*" 53 | state: "home" 54 | - type: custom:monster-card 55 | show_empty: false 56 | card: 57 | type: entities 58 | title: 'Off' 59 | filter: 60 | include: 61 | - entity_id: "device_tracker.*" 62 | state: " not_home" 63 | 64 | -------------------------------------------------------------------------------- /lovelace/tabs/environment.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | id: environment 3 | title: Environment 4 | cards: 5 | # - type: weather-forecast 6 | # title: Weather 7 | # entity: weather.dark_sky 8 | - type: custom:weather-card 9 | entity: weather.dark_sky 10 | current: true 11 | details: false 12 | forecast: true 13 | # - type: thermostat 14 | # entity: climate.thermostat 15 | - type: gauge 16 | title: Basement Temperature Sensor 17 | entity: sensor.basement_monitor_temperature 18 | severity: 19 | red: 32 20 | green: 40 21 | yellow: 38 22 | - type: gauge 23 | title: Basement Humidity Sensor 24 | entity: sensor.basement_monitor_humidity 25 | - type: gauge 26 | title: Basement Sensor Battery 27 | entity: sensor.basement_monitor_battery 28 | severity: 29 | red: 20 30 | green: 40 31 | yellow: 30 32 | - type: gauge 33 | title: Bedroom Temperature Sensor 34 | entity: sensor.bedroom_sensor_temperature 35 | - type: gauge 36 | title: Bedroom Temperature Sensor 37 | entity: sensor.thermostat_temperature 38 | 39 | - type: iframe 40 | aspect_ratio: 90% 41 | url: 'https://embed.windy.com/embed2.html?rain,36.337,-82.340,9' 42 | 43 | - type: glance 44 | entities: 45 | - entity: sensor.waqi_kingsport_tennessee_usa 46 | - entity: sun.sun 47 | - entity: camera.weather 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /lovelace/tabs/media.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | id: media 3 | title: Media Players 4 | background: center / cover no-repeat url("/local/backgrounds/STAGE.jpg") fixed 5 | panel: true 6 | cards: 7 | - type: vertical-stack 8 | cards: 9 | - type: horizontal-stack 10 | cards: 11 | 12 | # Kitchen and living room 13 | 14 | - type: custom:card-modder 15 | card: 16 | type: custom:mini-media-player 17 | entity: media_player.nesthub4992 18 | name: Living Room Display 19 | artwork: cover 20 | show_source: full 21 | style: 22 | border-radius: 20px 23 | background-image: url("/local/backgrounds/background2.jpg") 24 | background-size: cover 25 | background-repeat: no-repeat 26 | border: solid 1px rgba(100,100,100,0.3) 27 | box-shadow: 3px 3px rgba(0,0,0,0.4) 28 | overflow: hidden 29 | 30 | 31 | - type: custom:card-modder 32 | card: 33 | type: custom:mini-media-player 34 | entity: media_player.kitchen_display 35 | name: Kitchen Display 36 | artwork: cover 37 | show_source: full 38 | style: 39 | border-radius: 20px 40 | background-image: url("/local/backgrounds/background2.jpg") 41 | background-size: cover 42 | background-repeat: no-repeat 43 | border: solid 1px rgba(100,100,100,0.3) 44 | box-shadow: 3px 3px rgba(0,0,0,0.4) 45 | overflow: hidden 46 | 47 | 48 | - type: horizontal-stack 49 | cards: 50 | 51 | - type: custom:card-modder 52 | card: 53 | type: custom:mini-media-player 54 | entity: media_player.jbllinkview7011 55 | name: Bedroom Display 56 | artwork: cover 57 | show_source: full 58 | style: 59 | border-radius: 20px 60 | background-image: url("/local/backgrounds/background2.jpg") 61 | background-size: cover 62 | background-repeat: no-repeat 63 | border: solid 1px rgba(100,100,100,0.3) 64 | box-shadow: 3px 3px rgba(0,0,0,0.4) 65 | overflow: hidden 66 | 67 | - type: custom:card-modder 68 | card: 69 | type: custom:mini-media-player 70 | entity: media_player.bedroom_speaker 71 | name: Bedroom Speaker 72 | artwork: cover 73 | show_source: full 74 | style: 75 | border-radius: 20px 76 | background-image: url("/local/backgrounds/background2.jpg") 77 | background-size: cover 78 | background-repeat: no-repeat 79 | border: solid 1px rgba(100,100,100,0.3) 80 | box-shadow: 3px 3px rgba(0,0,0,0.4) 81 | overflow: hidden 82 | 83 | 84 | - type: horizontal-stack 85 | cards: 86 | 87 | - type: custom:card-modder 88 | card: 89 | type: custom:mini-media-player 90 | entity: media_player.bathroom_speaker 91 | name: Bathroom Speaker 92 | artwork: cover 93 | show_source: full 94 | style: 95 | border-radius: 20px 96 | background-image: url("/local/backgrounds/background2.jpg") 97 | background-size: cover 98 | background-repeat: no-repeat 99 | border: solid 1px rgba(100,100,100,0.3) 100 | box-shadow: 3px 3px rgba(0,0,0,0.4) 101 | overflow: hidden 102 | 103 | 104 | 105 | 106 | - type: horizontal-stack 107 | cards: 108 | # Office Speaker 109 | - type: custom:card-modder 110 | card: 111 | type: custom:mini-media-player 112 | entity: media_player.office_speaker 113 | name: Office Speaker 114 | icon: mdi:radio 115 | artwork: cover 116 | show_source: full 117 | style: 118 | border-radius: 20px 119 | background-image: url("/local/backgrounds/background2.jpg") 120 | background-size: cover 121 | background-repeat: no-repeat 122 | border: solid 1px rgba(100,100,100,0.3) 123 | box-shadow: 3px 3px rgba(0,0,0,0.4) 124 | overflow: hidden 125 | 126 | # Shop Speaker 127 | - type: custom:card-modder 128 | card: 129 | type: custom:mini-media-player 130 | entity: media_player.shop_speaker 131 | name: Shop Speaker 132 | icon: mdi:radio 133 | artwork: cover 134 | show_source: full 135 | style: 136 | border-radius: 20px 137 | background-image: url("/local/backgrounds/background2.jpg") 138 | background-size: cover 139 | background-repeat: no-repeat 140 | border: solid 1px rgba(100,100,100,0.3) 141 | box-shadow: 3px 3px rgba(0,0,0,0.4) 142 | overflow: hidden 143 | 144 | 145 | - type: horizontal-stack 146 | cards: 147 | 148 | 149 | 150 | - type: custom:card-modder 151 | card: 152 | type: custom:mini-media-player 153 | entity: media_player.kodi_office 154 | icon: mdi:kodi 155 | name: Office Kodi 156 | # icon: mdi:radio 157 | artwork: cover 158 | show_source: full 159 | style: 160 | border-radius: 20px 161 | background-image: url("/local/backgrounds/background2.jpg") 162 | background-size: cover 163 | background-repeat: no-repeat 164 | border: solid 1px rgba(100,100,100,0.3) 165 | box-shadow: 3px 3px rgba(0,0,0,0.4) 166 | overflow: hidden 167 | 168 | 169 | 170 | - type: custom:card-modder 171 | card: 172 | type: custom:mini-media-player 173 | entity: media_player.kodi 174 | icon: mdi:kodi 175 | name: Living Room Kodi 176 | artwork: full-cover-fit 177 | show_source: full 178 | artwork_border: true 179 | more_info: true 180 | style: 181 | border-radius: 20px 182 | background-image: url("/local/backgrounds/background2.jpg") 183 | background-size: cover 184 | background-repeat: no-repeat 185 | border: solid 1px rgba(100,100,100,0.3) 186 | box-shadow: 3px 3px rgba(0,0,0,0.4) 187 | overflow: hidden 188 | 189 | - type: horizontal-stack 190 | cards: 191 | - type: custom:card-modder 192 | card: 193 | type: custom:mini-media-player 194 | entity: media_player.firetv_office_2 195 | icon: mdi:kodi 196 | name: Office Fire TV 197 | artwork: full-cover-fit 198 | show_source: full 199 | artwork_border: true 200 | more_info: true 201 | style: 202 | border-radius: 20px 203 | background-image: url("/local/backgrounds/background2.jpg") 204 | background-size: cover 205 | background-repeat: no-repeat 206 | border: solid 1px rgba(100,100,100,0.3) 207 | box-shadow: 3px 3px rgba(0,0,0,0.4) 208 | overflow: hidden 209 | 210 | 211 | 212 | - type: horizontal-stack 213 | cards: 214 | 215 | - type: custom:card-modder 216 | card: 217 | type: custom:mini-media-player 218 | entity: media_player.spotify_oldmastermage 219 | name: Spotify Player 220 | group: true 221 | artwork: full-cover 222 | show_source: full 223 | 224 | style: 225 | border-radius: 20px 226 | background-image: url("/local/backgrounds/background2.jpg") 227 | background-size: cover 228 | background-repeat: no-repeat 229 | border: solid 1px rgba(100,100,100,0.3) 230 | box-shadow: 3px 3px rgba(0,0,0,0.4) 231 | overflow: hidden 232 | 233 | 234 | - type: custom:card-modder 235 | card: 236 | type: custom:mini-media-player 237 | entity: media_player.55_tcl_roku_tv 238 | name: Roku Tv 239 | artwork: full-cover 240 | show_source: full 241 | icon: mdi:live_tv 242 | artwork_border: true 243 | more_info: true 244 | style: 245 | border-radius: 20px 246 | background-image: url("/local/backgrounds/background2.jpg") 247 | background-size: cover 248 | background-repeat: no-repeat 249 | border: solid 1px rgba(100,100,100,0.3) 250 | box-shadow: 3px 3px rgba(0,0,0,0.4) 251 | overflow: hidden 252 | 253 | 254 | 255 | - type: horizontal-stack 256 | cards: 257 | 258 | - type: custom:card-modder 259 | card: 260 | type: custom:mini-media-player 261 | entity: media_player.home_group 262 | icon: mdi:castle 263 | artwork_border: true 264 | show_source: true 265 | show_tts: google 266 | style: 267 | border-radius: 20px 268 | background-image: url("/local/backgrounds/background2.jpg") 269 | background-size: cover 270 | background-repeat: no-repeat 271 | border: solid 1px rgba(100,100,100,0.3) 272 | box-shadow: 3px 3px rgba(0,0,0,0.4) 273 | overflow: hidden 274 | 275 | 276 | 277 | -------------------------------------------------------------------------------- /lovelace/tabs/rooms.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | id: rooms 3 | title: Rooms 4 | panel: true 5 | cards: 6 | 7 | - type: vertical-stack 8 | column_width: calc(100% / 1) 9 | cards: 10 | - type: horizontal-stack 11 | cards: 12 | 13 | - type: custom:card-modder 14 | card: 15 | type: glance 16 | column_width: calc(100% / 3) 17 | title: Living Room 18 | show_header_toggle: true 19 | entities: 20 | - entity: light.living_room_end_table 21 | tap_action: 22 | action: toggle 23 | - entity: light.living_room_accent 24 | tap_action: 25 | action: toggle 26 | - entity: light.living_room_ceiling 27 | name: Ceiling 28 | icon: mdi:ceiling-light 29 | tap_action: 30 | action: toggle 31 | - entity: switch.living_room_ceiling_fan_relay 32 | name: Ceiling Fan 33 | icon: mdi:fan 34 | tap_action: 35 | action: toggle 36 | - entity: light.living_room_chair_table 37 | name: Chair 38 | tap_action: 39 | action: toggle 40 | - entity: light.3d_light 41 | name: 3D light 42 | - entity: switch.living_room_ss30_relay_5 43 | name: Living Cat Light 44 | - entity: switch.living_room_ss30_relay_1 45 | icon: mdi:fan 46 | tap_action: 47 | action: toggle 48 | - entity: switch.living_room_ss30_relay_2 49 | icon: mdi:radiator 50 | tap_action: 51 | action: toggle 52 | - entity: media_player.nesthub4992 53 | name: Google Display 54 | - entity: media_player.kodi 55 | icon: mdi:kodi 56 | - entity: media_player.55_tcl_roku_tv 57 | name: Roku Tv 58 | - entity: light.coach_light 59 | name: Coach Lamp 60 | - entity: input_boolean.living_room_theater_mode 61 | name: Theater Mode 62 | icon: mdi:movie 63 | tap_action: 64 | action: toggle 65 | 66 | 67 | 68 | style: 69 | border-radius: 20px 70 | background-image: url("/local/backgrounds/mediabg7.png") 71 | background-size: cover 72 | background-repeat: no-repeat 73 | border: solid 1px rgba(100,100,100,0.3) 74 | box-shadow: 3px 3px rgba(0,0,0,0.4) 75 | overflow: hidden 76 | 77 | 78 | 79 | - type: custom:card-modder 80 | card: 81 | type: glance 82 | column_width: calc(100% / 3) 83 | title: Bedroom 84 | entities: 85 | - entity: light.bedroom_ceiling 86 | name: Ceiling 87 | icon: mdi:ceiling-light 88 | tap_action: 89 | action: toggle 90 | - entity: switch.bedroom_ss30_relay_4 91 | icon: mdi:fire 92 | name: Flame Lamp 93 | tap_action: 94 | action: toggle 95 | - entity: switch.wemo_switch_1 96 | name: Bedroom Fan 97 | icon: mdi:fan 98 | tap_action: 99 | action: toggle 100 | - entity: switch.bedroom_ss30_relay_2 101 | name: Humidifier 102 | icon: mdi:air-humidifier 103 | tap_action: 104 | action: toggle 105 | - entity: media_player.bedroom_speaker 106 | name: Clock 107 | icon: mdi:clock 108 | - entity: switch.bedroom_ss30_relay_1 109 | name: Bedroom Floor Light 110 | icon: mdi:lighthouse 111 | tap_action: 112 | action: toggle 113 | - entity: switch.bedroom_ss30_relay_5 114 | name: Cat Light 115 | icon: mdi:cat 116 | tap_action: 117 | action: toggle 118 | - entity: sensor.bedroom_sensor_temperature 119 | name: Temperature 120 | - entity: binary_sensor.bedroom_sensor_occupancy 121 | name: Occupancy 122 | icon: mdi:human-handsup 123 | - entity: media_player.roku 124 | name: Bedroom Roku 125 | 126 | style: 127 | border-radius: 20px 128 | background-image: url("/local/backgrounds/mediabg9.jpg") 129 | background-size: cover 130 | background-repeat: no-repeat 131 | border: solid 1px rgba(100,100,100,0.3) 132 | box-shadow: 3px 3px rgba(0,0,0,0.4) 133 | overflow: hidden 134 | 135 | 136 | 137 | # - type: vertical-stack 138 | # cards: 139 | - type: horizontal-stack 140 | cards: 141 | 142 | 143 | - type: custom:card-modder 144 | card: 145 | type: glance 146 | column_width: calc(100% / 3) 147 | title: Office 148 | entities: 149 | - entity: light.office 150 | name: Ceiling 151 | icon: mdi:ceiling-light 152 | tap_action: 153 | action: toggle 154 | - entity: switch.office_wall_monitor 155 | tap_action: 156 | action: toggle 157 | - entity: switch.jbl_speaker 158 | tap_action: 159 | action: toggle 160 | 161 | - entity: media_player.office_speaker 162 | - entity: input_boolean.office_theater_mode 163 | name: Theater Mode 164 | icon: mdi:movie 165 | tap_action: 166 | action: toggle 167 | style: 168 | border-radius: 20px 169 | background-image: url("/local/backgrounds/mediabg6.png") 170 | background-size: cover 171 | background-repeat: no-repeat 172 | border: solid 1px rgba(100,100,100,0.3) 173 | box-shadow: 3px 3px rgba(0,0,0,0.4) 174 | overflow: hidden 175 | 176 | 177 | 178 | - type: custom:card-modder 179 | card: 180 | 181 | type: glance 182 | column_width: calc(100% / 3) 183 | title: Kitchen 184 | entities: 185 | - entity: light.kitchen 186 | name: Ceiling 187 | icon: mdi:ceiling-light 188 | tap_action: 189 | action: toggle 190 | - entity: media_player.kitchen_display 191 | - entity: switch.gosund_1_relay 192 | icon: mdi:fan 193 | 194 | style: 195 | border-radius: 20px 196 | background-image: url("/local/backgrounds/background2.jpg") 197 | background-size: cover 198 | background-repeat: no-repeat 199 | border: solid 1px rgba(100,100,100,0.3) 200 | box-shadow: 3px 3px rgba(0,0,0,0.4) 201 | overflow: hidden 202 | 203 | 204 | 205 | - type: horizontal-stack 206 | cards: 207 | 208 | - type: vertical-stack 209 | cards: 210 | 211 | - type: custom:card-modder 212 | card: 213 | type: glance 214 | column_width: calc(100% / 3) 215 | title: Hall 216 | entities: 217 | - entity: light.hallway 218 | name: Ceiling 219 | icon: mdi:ceiling-light 220 | tap_action: 221 | action: toggle 222 | - entity: sensor.thermostat_temperature 223 | name: Thermostat 224 | 225 | 226 | style: 227 | border-radius: 20px 228 | background-image: url("/local/backgrounds/background1.jpg") 229 | background-size: cover 230 | background-repeat: no-repeat 231 | border: solid 1px rgba(100,100,100,0.3) 232 | box-shadow: 3px 3px rgba(0,0,0,0.4) 233 | overflow: hidden 234 | 235 | - type: custom:card-modder 236 | card: 237 | 238 | type: glance 239 | column_width: calc(100% / 3) 240 | title: Outdoor Lights 241 | entities: 242 | - entity: light.sunroom 243 | # name: Ceiling Lights 244 | tap_action: 245 | action: toggle 246 | - entity: switch.outdoor_lights_back 247 | name: Backyard 248 | icon: mdi:spotlight-beam 249 | tap_action: 250 | action: toggle 251 | - entity: switch.sonoff_2_relay 252 | name: Porch Lights 253 | tap_action: 254 | action: toggle 255 | style: 256 | border-radius: 20px 257 | background-image: url("/local/backgrounds/maxresdefault.jpg") 258 | background-size: cover 259 | background-repeat: no-repeat 260 | border: solid 1px rgba(100,100,100,0.3) 261 | box-shadow: 3px 3px rgba(0,0,0,0.4) 262 | overflow: hidden 263 | 264 | - type: custom:card-modder 265 | card: 266 | type: entities 267 | title: House Radio 268 | entities: 269 | - input_select.radio_station 270 | - input_select.chromecast_radio 271 | - input_number.volume_radio 272 | - script.radio538 273 | 274 | style: 275 | border-radius: 20px 276 | background-image: url("/local/backgrounds/tape.jpg") 277 | background-size: 100% 100% 278 | background-repeat: no-repeat 279 | border: solid 1px rgba(100,100,100,0.3) 280 | box-shadow: 3px 3px rgba(0,0,0,0.4) 281 | overflow: hidden 282 | 283 | - type: horizontal-stack 284 | cards: 285 | 286 | 287 | - type: custom:card-modder 288 | card: 289 | type: glance 290 | column_width: calc(100% / 3) 291 | title: Basemnet 292 | entities: 293 | - entity: switch.gosund_4_relay 294 | name: Exhaust Fan 295 | icon: mdi:fan-minnus 296 | tap_action: 297 | action: toggle 298 | - entity: switch.gosund_3_relay 299 | name: intake Fan 300 | icon: mdi:fan-plus 301 | tap_action: 302 | action: toggle 303 | - entity: sensor.basement_tvoc 304 | - entity: sensor.basement_eco2 305 | 306 | style: 307 | border-radius: 20px 308 | background-image: url("/local/backgrounds/mediabg6.png") 309 | background-size: cover 310 | background-repeat: no-repeat 311 | border: solid 1px rgba(100,100,100,0.3) 312 | box-shadow: 3px 3px rgba(0,0,0,0.4) 313 | overflow: hidden 314 | 315 | -------------------------------------------------------------------------------- /lovelace/tabs/shop.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | id: shop 3 | title: Shop Devices 4 | background: center / cover no-repeat url("/local/backgrounds/background-photoshop-11.jpg") fixed 5 | panel: true 6 | cards: 7 | 8 | - type: vertical-stack 9 | column_width: calc(100% / 1) 10 | cards: 11 | - type: horizontal-stack 12 | cards: 13 | 14 | - type: custom:card-modder 15 | card: 16 | type: glance 17 | column_width: calc(100% / 3) 18 | title: Shop 19 | show_header_toggle: true 20 | entities: 21 | - entity: switch.sonoff_1_relay 22 | name: Shop Receiver 23 | tap_action: 24 | action: toggle 25 | 26 | 27 | 28 | style: 29 | border-radius: 20px 30 | background-image: url("/local/backgrounds/mediabg7.png") 31 | background-size: cover 32 | background-repeat: no-repeat 33 | border: solid 1px rgba(100,100,100,0.3) 34 | box-shadow: 3px 3px rgba(0,0,0,0.4) 35 | overflow: hidden 36 | 37 | 38 | - type: custom:card-modder 39 | card: 40 | type: custom:mini-media-player 41 | entity: media_player.shop_cast 42 | name: Shop Speaker 43 | artwork: cover 44 | show_source: full 45 | style: 46 | border-radius: 20px 47 | background-image: url("/local/backgrounds/background2.jpg") 48 | background-size: cover 49 | background-repeat: no-repeat 50 | border: solid 1px rgba(100,100,100,0.3) 51 | box-shadow: 3px 3px rgba(0,0,0,0.4) 52 | overflow: hidden 53 | 54 | -------------------------------------------------------------------------------- /lovelace/tabs/systems-status.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | id: system_status 3 | title: System Status 4 | background: center / cover no-repeat url("/local/backgrounds/background-photoshop-11.jpg") fixed 5 | cards: 6 | - type: custom:card-modder 7 | card: 8 | type: entity-filter 9 | entities: 10 | - binary_sensor.starbug 11 | state_filter: 12 | - 'off' 13 | style: 14 | border-radius: 20px 15 | border: solid 1px rgba(100,100,100,0.3) 16 | box-shadow: 3px 3px rgba(0,0,0,0.4) 17 | overflow: hidden 18 | 19 | - type: custom:card-modder 20 | card: 21 | type: glance 22 | entities: 23 | - sensor.disk_free 24 | 25 | style: 26 | border-radius: 20px 27 | border: solid 1px rgba(100,100,100,0.3) 28 | box-shadow: 3px 3px rgba(0,0,0,0.4) 29 | overflow: hidden 30 | 31 | 32 | - type: custom:card-modder 33 | card: 34 | type: picture-elements 35 | image: /local/backgrounds/internet-highway1.jpg 36 | title: "Speed Test" 37 | elements: 38 | - type: state-icon 39 | entity: sensor.speedtest_ping 40 | style: {color: white, left: 25%, top: 85%} 41 | 42 | - type: state-label 43 | entity: sensor.speedtest_ping 44 | prefix: 'Ping : ' 45 | style: {color: white, left: 20%, top: 93%, font-size: 115%, font-weight: bold} 46 | 47 | - type: state-icon 48 | entity: sensor.speedtest_download 49 | style: {color: white, left: 50%, top: 85%} 50 | - type: state-label 51 | entity: sensor.speedtest_download 52 | style: {color: white, left: 50%, top: 93%, font-size: 115%, font-weight: bold} 53 | 54 | - type: state-icon 55 | entity: sensor.speedtest_upload 56 | style: {color: white, left: 75%, top: 85%} 57 | - type: state-label 58 | entity: sensor.speedtest_upload 59 | style: {color: white, left: 75%, top: 93%, font-size: 115%, font-weight: bold} 60 | style: 61 | border-radius: 20px 62 | border: solid 1px rgba(100,100,100,0.3) 63 | # background-image: url("/local/backgrounds/internet-highway.jpg") 64 | background-size: 100% 100% 65 | background-repeat: no-repeat 66 | box-shadow: 3px 3px rgba(0,0,0,0.4) 67 | overflow: hidden -------------------------------------------------------------------------------- /readme_images/Ecobee4-300x300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy1701/Home-Assistant-Configuration/3775f5f8225543b217f3ff259942b58d817d6023/readme_images/Ecobee4-300x300.png -------------------------------------------------------------------------------- /readme_images/chromecast audio.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy1701/Home-Assistant-Configuration/3775f5f8225543b217f3ff259942b58d817d6023/readme_images/chromecast audio.jpg -------------------------------------------------------------------------------- /readme_images/google hub.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy1701/Home-Assistant-Configuration/3775f5f8225543b217f3ff259942b58d817d6023/readme_images/google hub.jpg -------------------------------------------------------------------------------- /readme_images/google mini.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy1701/Home-Assistant-Configuration/3775f5f8225543b217f3ff259942b58d817d6023/readme_images/google mini.jpg -------------------------------------------------------------------------------- /readme_images/kodi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy1701/Home-Assistant-Configuration/3775f5f8225543b217f3ff259942b58d817d6023/readme_images/kodi.jpg -------------------------------------------------------------------------------- /readme_images/phillips hue.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy1701/Home-Assistant-Configuration/3775f5f8225543b217f3ff259942b58d817d6023/readme_images/phillips hue.jpg -------------------------------------------------------------------------------- /readme_images/raspberry-pi-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy1701/Home-Assistant-Configuration/3775f5f8225543b217f3ff259942b58d817d6023/readme_images/raspberry-pi-3.png -------------------------------------------------------------------------------- /readme_images/roku.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy1701/Home-Assistant-Configuration/3775f5f8225543b217f3ff259942b58d817d6023/readme_images/roku.jpg -------------------------------------------------------------------------------- /readme_images/screenshots/media.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy1701/Home-Assistant-Configuration/3775f5f8225543b217f3ff259942b58d817d6023/readme_images/screenshots/media.png -------------------------------------------------------------------------------- /readme_images/screenshots/rooms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy1701/Home-Assistant-Configuration/3775f5f8225543b217f3ff259942b58d817d6023/readme_images/screenshots/rooms.png -------------------------------------------------------------------------------- /readme_images/tower.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy1701/Home-Assistant-Configuration/3775f5f8225543b217f3ff259942b58d817d6023/readme_images/tower.jpg -------------------------------------------------------------------------------- /readme_images/wemo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cy1701/Home-Assistant-Configuration/3775f5f8225543b217f3ff259942b58d817d6023/readme_images/wemo.png -------------------------------------------------------------------------------- /sanitized_ESPHome/bedroom_ss30.yaml: -------------------------------------------------------------------------------- 1 | esphome: 2 | name: bedroom_ss30 3 | platform: ESP8266 4 | board: esp01_1m 5 | 6 | wifi: 7 | ssid: !secret wifi_ssid 8 | password: !secret wifi_password 9 | 10 | manual_ip: 11 | static_ip: !secret bedroom_ss30_ip 12 | gateway: !secret house_gateway 13 | subnet: 255.255.255.0 14 | 15 | # Enable logging 16 | logger: 17 | 18 | # Enable Home Assistant API 19 | api: 20 | password: !secret ha_esp_api_pw 21 | 22 | ota: 23 | password: !secret bedroom_ss30_ota 24 | 25 | 26 | sensor: 27 | - platform: wifi_signal 28 | name: "Bedroom SS30 WiFi signal" 29 | update_interval: 60s 30 | 31 | - platform: uptime 32 | name: "Bedroom SS30 uptime" 33 | 34 | text_sensor: 35 | - platform: version 36 | name: "Bedroom SS30 ESPHome version" 37 | 38 | switch: 39 | - platform: gpio 40 | name: "Bedroom SS30 relay 1" 41 | pin: GPIO04 42 | inverted: yes 43 | id: relay1 44 | - platform: gpio 45 | name: "Bedroom SS30 relay 2" 46 | pin: GPIO13 47 | inverted: yes 48 | id: relay2 49 | - platform: gpio 50 | name: "Bedroom SS30 relay 3" 51 | pin: GPIO12 52 | inverted: yes 53 | id: relay3 54 | - platform: gpio 55 | name: "Bedroom SS30 relay 4" 56 | pin: GPIO14 57 | inverted: yes 58 | id: relay4 59 | - platform: gpio 60 | name: "Bedroom SS30 relay 5" 61 | pin: GPIO16 62 | id: relay5 63 | 64 | binary_sensor: 65 | - platform: gpio 66 | pin: 67 | number: GPIO5 68 | mode: INPUT_PULLUP 69 | inverted: False 70 | name: "Bedroom SS30 button" 71 | on_press: 72 | - switch.turn_off: relay1 73 | - switch.turn_off: relay2 74 | - switch.turn_off: relay3 75 | - switch.turn_off: relay4 76 | - switch.turn_off: relay5 77 | 78 | - platform: status 79 | name: "Bedroom SS30 Status" 80 | 81 | 82 | status_led: 83 | pin: 84 | number: GPIO00 85 | id: status_led 86 | 87 | 88 | 89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /sanitized_ESPHome/sonoff_1.yaml: -------------------------------------------------------------------------------- 1 | esphome: 2 | name: sonoff_1 3 | platform: ESP8266 4 | board: esp01_1m 5 | #Shop Receiver controller 6 | 7 | wifi: 8 | ssid: !secret wifi_ssid 9 | password: !secret wifi_password 10 | 11 | manual_ip: 12 | static_ip: !secret sonoff_1_ip 13 | gateway: !secret house_gateway 14 | subnet: 255.255.255.0 15 | 16 | # Enable logging 17 | logger: 18 | 19 | # Enable Home Assistant API 20 | api: 21 | password: !secret ha_esp_api_pw 22 | 23 | ota: 24 | password: !secret sonoff_1_ota 25 | 26 | binary_sensor: 27 | - platform: gpio 28 | pin: 29 | number: GPIO0 30 | mode: INPUT_PULLUP 31 | inverted: True 32 | name: "sonoff_1 button" 33 | on_press: 34 | - switch.toggle: relay 35 | 36 | - platform: status 37 | name: "Shop Receiver Status" 38 | 39 | 40 | switch: 41 | - platform: gpio 42 | name: "sonoff_1 relay" 43 | pin: GPIO12 44 | id: relay 45 | 46 | status_led: 47 | pin: 48 | number: GPIO13 49 | inverted: yes 50 | 51 | sensor: 52 | - platform: wifi_signal 53 | name: "sonoff_1 WiFi signal" 54 | update_interval: 60s 55 | 56 | - platform: uptime 57 | name: "sonoff_1 uptime" 58 | 59 | text_sensor: 60 | - platform: version 61 | name: "sonoff_1 ESPHome version" -------------------------------------------------------------------------------- /sanitized_ESPHome/tower.yaml: -------------------------------------------------------------------------------- 1 | esphomeyaml: 2 | name: tower 3 | platform: ESP8266 4 | board: esp01_1m 5 | 6 | wifi: 7 | ssid: 'SSID HERE' 8 | password: 'WIFI_PASSWORD' 9 | manual_ip: 10 | # Set this to the IP of the ESP 11 | static_ip: 192.168.1.100 12 | # Set this to the IP address of the router. Often ends with .1 13 | gateway: 192.168.1.1 14 | # The subnet of the network. 255.255.255.0 works for most home networks. 15 | subnet: 255.255.255.0 16 | 17 | # Enable logging 18 | logger: 19 | 20 | 21 | ota: 22 | password: 'OTA_PASSWORD' 23 | 24 | mqtt: 25 | broker: 192.168.1.12 26 | username: tower 27 | password: MQTT_PASSWORD 28 | 29 | 30 | light: 31 | - platform: fastled_clockless 32 | chipset: WS2811 33 | pin: GPIO3 34 | num_leds: 22 35 | rgb_order: GRB 36 | name: "Tower Light" 37 | effects: 38 | - random: 39 | - strobe: 40 | - flicker: 41 | - addressable_rainbow: 42 | - addressable_color_wipe: 43 | - addressable_scan: 44 | - addressable_twinkle: 45 | - addressable_random_twinkle: 46 | - addressable_fireworks: 47 | - addressable_flicker: 48 | -------------------------------------------------------------------------------- /themes/BlueNight.yaml: -------------------------------------------------------------------------------- 1 | BlueNight: 2 | # MyVariables 3 | base-hue: '220' #Controls the base (and accent) color hue (0-360) | 0=Red 60=Yellow 120=Green 180=Cyan 240=Blue 300=Magenta 360=Red 4 | base-sat: '5%' #Controls the saturation of the theme (0%-100%) | 0%=Grey 100%=Full Saturation 5 | # MyVar 6 | huesat: 'var(--base-hue), var(--base-sat),' 7 | # Primary Color 8 | primary-color: '#2581ab' #hsl(var(--huesat) 50%)' #header colors and some text colors 9 | dark-primary-color: 'hsl(var(--huesat) 60%)' 10 | light-primary-color: 'hsl(var(--huesat) 30%)' 11 | accent-color: 'hsl(var(--huesat) 30%)' 12 | # Backgrounds 13 | primary-background-color: 'hsl(var(--huesat) 16%)' 14 | secondary-background-color: 'hsl(var(--huesat) 16%)' # background behind cards 15 | paper-listbox-background-color: 'hsl(var(--huesat) 16%)' 16 | paper-card-background-color: 'hsl(var(--huesat) 12%)' 17 | paper-dialog-background-color: 'var(--paper-card-background-color)' 18 | table-row-background-color: 'hsl(var(--huesat) 12%)' 19 | table-row-alternative-background-color: 'hsl(var(--huesat) 10%)' 20 | # Divider 21 | divider-color: 'hsla(0, 0%, 0%, 0)' 22 | dark-divider-opacity: '0' 23 | light-divider-opacity: '0' 24 | dark-secondary-opacity: '1' 25 | # Text colors 26 | primary-text-color: 'hsl(var(--huesat) 90%)' 27 | text-primary-color: 'hsl(var(--huesat) 90%)' 28 | secondary-text-color: 'hsl(var(--huesat) 80%)' 29 | disabled-text-color: 'hsl(var(--huesat) 70%)' 30 | sidebar-text_-_color: 'hsl(var(--huesat) 90%)' 31 | sidebar-text-color: 'hsl(var(--huesat) 90%)' 32 | paper-card-header-color: 'hsl(var(--huesat) 90%)' 33 | paper-button-ink-color: 'hsl(var(--huesat) 50%)' 34 | # Text Adjustments 35 | paper-font-headline_-_letter-spacing: '-0.5px' 36 | paper-font-headline_-_font-weight: '400' 37 | paper-font-body1_-_font-weight: '300' 38 | # Nav Menu 39 | paper-listbox-color: 'hsl(var(--huesat) 50%)' 40 | paper-grey-50: 'hsl(var(--huesat) 50%)' 41 | paper-grey-200: 'hsl(var(--huesat) 10%)' #active menu item 42 | sidebar-icon-color: 'hsl(var(--huesat) 50%)' #iron-icon-fill-color 43 | # Paper card 44 | paper-item-icon-color: 'hsl(var(--huesat) 40%)' 45 | #paper-item-icon-active-color: 'var(--paper-item-icon-color)' 46 | paper-item-icon_-_color: 'var(--paper-item-icon-color)' 47 | paper-item-selected_-_background-color: 'hsla(0, 0%, 0%, 0.2)' 48 | paper-item-selected_-_color: 'hsl(var(--huesat) 20%)' #? 49 | paper-tabs-selection-bar-color: 'hsla(0, 0%, 0%, 0.2)' 50 | paper-tab-ink: 'hsl(var(--huesat) 70%)' 51 | paper-input-container-color: 'hsl(var(--huesat) 60%)' 52 | # Labels 53 | label-badge-red: 'var(--paper-card-background-color)' 54 | label-badge-border-color: 'var(--label-badge-red)' 55 | label-badge-background-color: 'var(--paper-card-background-color)' 56 | label-badge-text-color: 'var(--primary-text-color)' 57 | # Shadows 58 | shadow-elevation-2dp_-_box-shadow: '0px 0px 0px 0px hsl(var(--huesat) 10%)' 59 | shadow-elevation-16dp_-_box-shadow: '0px 0px 0px 0px hsl(var(--huesat) 25%)' 60 | # Switches 61 | paper-toggle-button-checked-button-color: 'hsl(var(--base-hue), 90%, 50%)' 62 | paper-toggle-button-checked-bar-color: 'hsl(var(--huesat) 25%)' 63 | paper-toggle-button-unchecked-button-color: 'hsl(var(--huesat) 25%)' 64 | paper-toggle-button-unchecked-bar-color: 'hsl(var(--huesat) 5%)' 65 | # Sliders 66 | paper-slider-knob-color: 'hsl(var(--base-hue), 90%, 50%)' 67 | paper-slider-knob-start-color: 'hsl(var(--base-hue), 80%, 25%)' 68 | paper-slider-pin-color: 'hsl(var(--base-hue), 90%, 50%)' 69 | paper-slider-active-color: 'hsl(var(--base-hue), 90%, 50%)' 70 | paper-slider-container-color: 'hsl(var(--huesat) 28%)' 71 | paper-slider-secondary-color: 'hsl(var(--huesat) 90%)' 72 | paper-slider-disabled-active-color: 'hsl(var(--base-hue), 80%, 25%)' 73 | paper-slider-disabled-secondary-color: 'hsl(var(--base-hue), 80%, 25%)' 74 | paper-dialog-color: 'hsl(var(--base-hue), 20%, 80%)' -------------------------------------------------------------------------------- /themes/GreyNight.yaml: -------------------------------------------------------------------------------- 1 | GreyNight: 2 | # MyVariables 3 | base-hue: '220' #Controls the base (and accent) color hue (0-360) | 0=Red 60=Yellow 120=Green 180=Cyan 240=Blue 300=Magenta 360=Red 4 | base-sat: '5%' #Controls the saturation of the theme (0%-100%) | 0%=Grey 100%=Full Saturation 5 | # MyVar 6 | huesat: 'var(--base-hue), var(--base-sat),' 7 | # Primary Color 8 | primary-color: 'hsl(var(--huesat) 36%)' #header colors and some text colors 9 | dark-primary-color: 'hsl(var(--huesat) 60%)' 10 | light-primary-color: 'hsl(var(--huesat) 90%)' 11 | accent-color: 'hsl(var(--huesat) 30%)' 12 | # Backgrounds 13 | primary-background-color: 'hsl(var(--huesat) 16%)' 14 | secondary-background-color: 'hsl(var(--huesat) 16%)' # background behind cards 15 | paper-listbox-background-color: 'hsl(var(--huesat) 16%)' 16 | paper-card-background-color: 'hsl(var(--huesat) 12%)' 17 | paper-dialog-background-color: 'var(--paper-card-background-color)' 18 | table-row-background-color: 'hsl(var(--huesat) 12%)' 19 | table-row-alternative-background-color: 'hsl(var(--huesat) 10%)' 20 | # Divider 21 | divider-color: 'hsla(0, 0%, 0%, 0)' 22 | dark-divider-opacity: '0' 23 | light-divider-opacity: '0' 24 | dark-secondary-opacity: '1' 25 | # Text colors 26 | primary-text-color: 'hsl(var(--huesat) 90%)' 27 | text-primary-color: 'hsl(var(--huesat) 80%)' 28 | secondary-text-color: 'hsl(var(--huesat) 80%)' 29 | disabled-text-color: 'hsl(var(--huesat) 70%)' 30 | sidebar-text_-_color: 'hsl(var(--huesat) 90%)' 31 | sidebar-text-color: 'hsl(var(--huesat) 90%)' 32 | paper-card-header-color: 'hsl(var(--huesat) 90%)' 33 | paper-button-ink-color: 'hsl(var(--huesat) 50%)' 34 | # Text Adjustments 35 | paper-font-headline_-_letter-spacing: '-0.5px' 36 | paper-font-headline_-_font-weight: '400' 37 | paper-font-body1_-_font-weight: '300' 38 | # Nav Menu 39 | paper-listbox-color: 'hsl(var(--huesat) 50%)' 40 | paper-grey-50: 'hsl(var(--huesat) 50%)' 41 | paper-grey-200: 'hsl(var(--huesat) 10%)' #active menu item 42 | # Paper card 43 | paper-item-icon-color: 'hsl(var(--huesat) 40%)' 44 | paper-item-icon-active-color: 'var(--paper-item-icon-color)' 45 | paper-item-icon_-_color: 'var(--paper-item-icon-color)' 46 | paper-item-selected_-_background-color: 'hsla(0, 0%, 0%, 0.2)' 47 | paper-item-selected_-_color: 'hsl(var(--huesat) 20%)' #? 48 | paper-tabs-selection-bar-color: 'hsla(0, 0%, 0%, 0.2)' 49 | paper-tab-ink: 'hsl(var(--huesat) 70%)' 50 | paper-input-container-color: 'hsl(var(--huesat) 60%)' 51 | # Labels 52 | label-badge-red: 'var(--paper-card-background-color)' 53 | label-badge-border-color: 'var(--label-badge-red)' 54 | label-badge-background-color: 'var(--paper-card-background-color)' 55 | label-badge-text-color: 'var(--primary-text-color)' 56 | # Shadows 57 | shadow-elevation-2dp_-_box-shadow: '0px 0px 0px 0px hsl(var(--huesat) 10%)' 58 | shadow-elevation-16dp_-_box-shadow: '0px 0px 0px 0px hsl(var(--huesat) 25%)' 59 | # Switches 60 | paper-toggle-button-checked-button-color: 'hsl(var(--base-hue), 90%, 50%)' 61 | paper-toggle-button-checked-bar-color: 'hsl(var(--huesat) 25%)' 62 | paper-toggle-button-unchecked-button-color: 'hsl(var(--huesat) 25%)' 63 | paper-toggle-button-unchecked-bar-color: 'hsl(var(--huesat) 5%)' 64 | # Sliders 65 | paper-slider-knob-color: 'hsl(var(--base-hue), 90%, 50%)' 66 | paper-slider-knob-start-color: 'hsl(var(--base-hue), 80%, 25%)' 67 | paper-slider-pin-color: 'hsl(var(--base-hue), 90%, 50%)' 68 | paper-slider-active-color: 'hsl(var(--base-hue), 90%, 50%)' 69 | paper-slider-container-color: 'hsl(var(--huesat) 28%)' 70 | paper-slider-secondary-color: 'hsl(var(--huesat) 90%)' 71 | paper-slider-disabled-active-color: 'hsl(var(--base-hue), 80%, 25%)' 72 | paper-slider-disabled-secondary-color: 'hsl(var(--base-hue), 80%, 25%)' 73 | paper-dialog-color: 'hsl(var(--base-hue), 20%, 80%)' -------------------------------------------------------------------------------- /themes/Night_Theme.yaml: -------------------------------------------------------------------------------- 1 | Night_Theme: 2 | # Main Stuff # 3 | primary-color: "#0179d8" # Primary (most of the UI) 4 | primary-background-color: "#060606" # Primary background colour (dialogs, e.t.c) 5 | secondary-background-color: "#060606" # Secondary background colour (main UI background) 6 | paper-card-background-color: "#131313" # Card background colour 7 | paper-item-icon-color: "#0179d8" # Icon colour 8 | primary-text-color: "#FFFFFF" # Primary text colour 9 | secondary-text-color: "rgba(255, 255, 255, 0.5)" # Secondary text colour 10 | disabled-text-color: "rgba(255, 255, 255, 0.5)" # Disabled text colour 11 | divider-color: "rgba(255, 255, 255, 0.12)" # Divider colour 12 | paper-card-header-color: "#FFFFFF" # Card header text colour 13 | 14 | # Nav Menu # 15 | paper-listbox-background-color: "#131313" # Listbox background colour 16 | paper-listbox-color: "#FFFFFF" # Listbox text colour 17 | paper-grey-200: "#060606" # Listbox selected item background colour 18 | 19 | # Switches # 20 | paper-toggle-button-checked-ink-color: "#d80129" 21 | paper-toggle-button-checked-button-color: "#0179d8" 22 | paper-toggle-button-checked-bar-color: "#FFFFFF" 23 | 24 | # Sliders # 25 | paper-slider-knob-color: "#0179d8" 26 | paper-slider-knob-start-color: "#0179d8" 27 | paper-slider-pin-color: "#0179d8" 28 | paper-slider-active-color: "#0179d8" 29 | paper-slider-secondary-color: "#0179d8" 30 | 31 | # Tables # 32 | table-row-background-color: transparant 33 | table-row-alternative-background-color: transparant 34 | -------------------------------------------------------------------------------- /themes/PmxMonolight.yaml: -------------------------------------------------------------------------------- 1 | PmxMonolight: 2 | # MyVar 3 | huesat: '0, 0%,' 4 | # Primary Color 5 | primary-color: 'hsl(var(--huesat) 80%)' 6 | dark-primary-color: 'hsl(var(--huesat) 20%)' 7 | light-primary-color: 'hsl(var(--huesat) 90%)' 8 | accent-color: 'hsl(var(--huesat) 30%)' 9 | # Backgrounds 10 | primary-background-color: 'var(--primary-color)' 11 | secondary-background-color: 'hsl(var(--huesat) 86%)' 12 | paper-listbox-background-color: 'var(--primary-color)' 13 | paper-card-background-color: 'hsl(var(--huesat) 90%)' 14 | paper-dialog-background-color: 'var(--paper-card-background-color)' 15 | table-row-background-color: 'hsl(var(--huesat) 88%)' 16 | table-row-alternative-background-color: 'hsl(var(--huesat) 90%)' 17 | # Devider 18 | divider-color: 'hsla(0, 0%, 0%, 0)' 19 | dark-divider-opacity: '0' 20 | light-divider-opacity: '0' 21 | dark-secondary-opacity: '0.4' 22 | # Text colors 23 | primary-text-color: 'hsl(var(--huesat) 46%)' 24 | text-primary-color: 'hsl(var(--huesat) 46%)' 25 | secondary-text-color: 'hsl(var(--huesat) 56%)' 26 | disabled-text-color: 'hsl(var(--huesat) 30%)' 27 | sidebar-text_-_color: 'hsl(var(--huesat) 5%)' 28 | sidebar-text-color: 'hsl(var(--huesat) 5%)' 29 | paper-card-header-color: 'hsl(hsl(var(--huesat) 50%)' 30 | paper-button-ink-color: 'hsl(hsl(var(--huesat) 50%)' 31 | # Text Adjustments 32 | paper-font-headline_-_letter-spacing: '-0.5px' 33 | paper-font-headline_-_font-weight: '500' 34 | paper-font-body1_-_font-weight: '500' 35 | # Nav Menu 36 | paper-listbox-color: 'hsl(var(--huesat) 50%)' 37 | paper-grey-50: 'hsl(var(--huesat) 40%)' 38 | paper-grey-200: 'hsl(var(--huesat) 72%)' 39 | # Paper card 40 | paper-item-icon-color: 'hsl(var(--huesat) 70%)' 41 | paper-item-icon-active-color: 'var(--paper-item-icon-color)' 42 | paper-item-icon_-_color: 'hsl(var(--huesat) 70%)' 43 | paper-item-selected_-_background-color: 'hsla(0, 0%, 100%, 0.2)' 44 | paper-item-selected_-_color: 'hsl(var(--huesat) 20%)' 45 | paper-tabs-selection-bar-color: 'hsl(var(--huesat) 70%)' 46 | paper-tab-ink: 'hsl(var(--huesat) 70%)' 47 | paper-input-container-color: 'hsl(var(--huesat) 66%)' 48 | # Labels 49 | label-badge-red: 'hsl(var(--huesat) 80%)' 50 | label-badge-border-color: 'var(--label-badge-red)' 51 | label-badge-background-color: 'hsl(var(--huesat) 82%)' 52 | label-badge-text-color: 'var(--primary-text-color)' 53 | # Shadows 54 | shadow-elevation-2dp_-_box-shadow: 'inset 0px 0px 0px 3px hsla(var(--huesat) 91%, 0.2)' 55 | shadow-elevation-16dp_-_box-shadow: 'inset 0px 0px 0px 3px hsla(var(--huesat) 91%, 0.2)' 56 | paper-input-container-shared-input-style_-_background: '#000' 57 | # Switches 58 | paper-toggle-button-checked-button-color: 'hsl(var(--huesat) 50%)' 59 | paper-toggle-button-checked-bar-color: 'hsl(var(--huesat) 66%)' 60 | paper-toggle-button-unchecked-button-color: 'hsl(var(--huesat) 85%)' 61 | paper-toggle-button-unchecked-bar-color: 'hsl(var(--huesat) 80%)' 62 | # Sliders 63 | paper-slider-knob-color: 'hsl(var(--huesat) 45%)' 64 | paper-slider-knob-start-color: 'hsl(var(--huesat) 60%)' 65 | paper-slider-pin-color: 'hsl(var(--huesat) 60%)' 66 | paper-slider-active-color: 'hsl(var(--huesat) 60%)' 67 | paper-slider-container-color: 'hsl(var(--huesat) 76%)' 68 | paper-slider-secondary-color: 'hsl(var(--huesat) 10%)' 69 | paper-slider-disabled-active-color: 'hsl(var(--huesat) 75%)' 70 | paper-slider-disabled-secondary-color: 'hsl(var(--huesat) 75%)' 71 | #Toast 72 | paper-toast-color: 'hsl(var(--huesat) 45%)' 73 | paper-toast-background-color: 'hsl(var(--huesat) 90%)' 74 | -------------------------------------------------------------------------------- /themes/darkish/darkish.yaml: -------------------------------------------------------------------------------- 1 | darkish: 2 | # Accent Colour (Edit this to change the accent) # 3 | accent: "#03a9f4" 4 | 5 | # Background 6 | primary-background-color: "#121212" 7 | 8 | # Text 9 | primary-text-color: "#FFFFFFDE" 10 | secondary-text-color: "#FFFFFF99" 11 | disabled-text-color: "#FFFFFF61" 12 | sidebar-selected-text-color: "var(--accent)" 13 | 14 | # Card 15 | card-background-color: "#1D1D1D" 16 | paper-card-background-color: "#1D1D1D" 17 | 18 | # Colours 19 | primary-color: "#03a9f4" 20 | secondary-background-color: "#1D1D1D" 21 | accent-color: "var(--accent)" 22 | dark-primary-color: "var(--accent)" 23 | light-primary-color: "var(--accent)" 24 | 25 | # Controls 26 | toggle-button-color: "var(--accent)" 27 | paper-toggle-button-checked-button-color: "var(--accent)" 28 | paper-toggle-button-checked-bar-color: "var(--accent)" 29 | paper-toggle-button-checked-ink-color: "var(--accent)" 30 | paper-toggle-button-unchecked-button-color: "var(--primary-text-color)" 31 | paper-toggle-button-unchecked-bar-color: "#878787" 32 | paper-checkbox-checked-color: "var(--accent)" 33 | paper-checkbox-checked-ink-color: "var(--accent)" 34 | paper-radio-button-checked-color: "var(--accent)" 35 | paper-input-container-focus-color: "var(--accent)" 36 | paper-dropdown-menu-focus-color: "var(--accent)" 37 | slider-color: "var(--accent)" 38 | mdc-theme-primary: "var(--accent)" 39 | 40 | # Icons 41 | state-icon-color: "#A0A0A0" 42 | state-icon-active-color: "#fdd835cc" # icon active 43 | sidebar-selected-icon-color: "var(--accent)" 44 | sidebar-icon-color: "#A0A0A0" 45 | 46 | 47 | # Badges 48 | ha-label-badge-color: "var(--accent)" 49 | label-badge-background-color: "#121212" 50 | label-badge-text-color: "var(--secondary-text-color)" 51 | 52 | # Tabs 53 | paper-tab-ink: "var(--accent)" 54 | paper-listbox-color: "var(--primary-text-color)" 55 | 56 | # Divider 57 | divider-color: "#2D2D2D" 58 | 59 | # Lumo 60 | lumo-base-color: "#2D2D2D" 61 | lumo-tint-5pct: "none" 62 | lumo-shade-5pct: "#272727" 63 | paper-grey-200: "#272727" 64 | lumo-primary-color-10pct: "#2D2D2D" 65 | lumo-primary-color-50pct: "none" 66 | lumo-box-shadow-m: "none" 67 | lumo-primary-color: "var(--accent)" 68 | lumo-header-text-color: "var(--primary-text-color)" 69 | lumo-body-text-color: "var(--primary-text-color)" 70 | lumo-tertiary-text-color: "var(--secondary-text-color)" 71 | lumo-primary-contrast-color: "var(--primary-text-color)" 72 | 73 | # switch 74 | switch-unchecked-color: "var(--primary-text-color)" 75 | switch-unchecked-button-color: "#878787" 76 | 77 | # Material 78 | material-body-text-color: "var(--accent)" # Upper text 79 | material-secondary-background-color: "#515151" # background hover 80 | material-divider-color: "#515151" # background selected 81 | material-background-color: "var(--paper-grey-200)" 82 | 83 | # mdc 84 | mdc-dialog-title-ink-color: "var(--accent)" 85 | mdc-checkbox__native-control: "var(--primary-text-color)" 86 | 87 | #test 88 | #mdc-checkbox: "#ff0000" 89 | #mdc-checkbox-border: "ff0000" 90 | # mdc-checkbox--upgraded: "" 91 | # mdc-ripple-upgraded: "" 92 | # mdc-ripple-upgraded--unbounded: "" 93 | # mdc-checkbox--selected: "" -------------------------------------------------------------------------------- /themes/google_dark_theme/google_dark_theme.yaml: -------------------------------------------------------------------------------- 1 | # Theme based on Google app dark theme 2 | # Creator: Juan - @juanmtech 3 | # Website: https://www.juanmtech.com 4 | # YouTube Channel: https://youtube.com/juanmtech 5 | # My Home Assistant Config files: https://github.com/JuanMTech/Home_Assistant_files 6 | # 7 | # 8 | Google Dark Theme: 9 | # Header: 10 | app-header-background-color: "#171717" 11 | app-header-text-color: "#BDC1C6" 12 | # Main Interface Colors 13 | primary-color: "#5F9BEA" 14 | light-primary-color: var(--primary-color) 15 | primary-background-color: "#171717" 16 | secondary-background-color: "#202124" 17 | divider-color: var(--primary-background-color) 18 | # Text 19 | primary-text-color: "#BDC1C6" 20 | secondary-text-color: "#BDC1C6" 21 | text-primary-color: "#FFFFFF" 22 | disabled-text-color: "#717171" 23 | # Sidebar Menu 24 | sidebar-icon-color: var(--app-header-text-color) 25 | sidebar-text-color: '#BDC1C6' 26 | sidebar-background-color: "#202124" 27 | sidebar-selected-background-color: var(--primary-background-color) 28 | sidebar-selected-icon-color: "#5F9BEA" 29 | sidebar-selected-text-color: var(--sidebar-selected-icon-color)) 30 | # States and Badges 31 | state-icon-color: "#5F6267" 32 | state-icon-active-color: "#5F9BEA" 33 | state-icon-unavailable-color: var(--disabled-text-color) 34 | # Sliders 35 | paper-slider-knob-color: "#5F9BEA" 36 | paper-slider-knob-start-color: var(--paper-slider-knob-color) 37 | paper-slider-pin-color: var(--paper-slider-knob-color) 38 | paper-slider-active-color: var(--paper-slider-knob-color) 39 | paper-slider-secondary-color: var(--light-primary-color) 40 | # Labels 41 | label-badge-background-color: "#202124" 42 | label-badge-text-color: "#BDC1C6" 43 | label-badge-red: "#D06568" 44 | label-badge-green: "#80C884" 45 | label-badge-blue: "#5F9BEA" 46 | label-badge-yellow: "#DFC271" 47 | label-badge-gray: "#5F6267" 48 | 49 | # Cards 50 | ha-card-border-radius: "10px" 51 | ha-card-box-shadow: 1px 1px 5px 0px rgb(12, 12, 14) 52 | paper-card-background-color: "#202124" 53 | paper-listbox-background-color: "#202124" 54 | # Switches 55 | switch-checked-button-color: "#5F9BEA" 56 | switch-checked-track-color: "#404D64" 57 | switch-unchecked-button-color: "#636466" 58 | switch-unchecked-track-color: "#636466" 59 | # Toggles 60 | paper-toggle-button-checked-button-color: var(--switch-checked-button-color) 61 | paper-toggle-button-checked-bar-color: var(--switch-checked-track-color) 62 | paper-toggle-button-unchecked-button-color: var(--switch-unchecked-button-color) 63 | paper-toggle-button-unchecked-bar-color: var(--switch-unchecked-track-color) 64 | # Table 65 | table-row-background-color: var(--primary-background-color) 66 | table-row-alternative-background-color: var(--secondary-background-color) 67 | data-table-background-color: var(--primary-background-color) 68 | # Dropdowns 69 | material-background-color: var(--secondary-background-color) 70 | material-secondary-background-color: var(--primary-background-color) 71 | mdc-theme-surface: var(--secondary-background-color) 72 | -------------------------------------------------------------------------------- /themes/grey.yaml: -------------------------------------------------------------------------------- 1 | grey_night: 2 | # MyVariables 3 | base-hue: '220' #Controls the base (and accent) color hue (0-360) | 0=Red 60=Yellow 120=Green 180=Cyan 240=Blue 300=Magenta 360=Red 4 | base-sat: '5%' #Controls the saturation of the theme (0%-100%) | 0%=Grey 100%=Full Saturation 5 | # MyVar 6 | huesat: 'var(--base-hue), var(--base-sat),' 7 | # Primary Color 8 | primary-color: 'hsl(var(--huesat) 36%)' #header colors and some text colors 9 | dark-primary-color: 'hsl(var(--huesat) 60%)' 10 | light-primary-color: 'hsl(var(--huesat) 90%)' 11 | accent-color: 'hsl(var(--huesat) 30%)' 12 | # Backgrounds 13 | primary-background-color: 'hsl(var(--huesat) 16%)' 14 | secondary-background-color: 'hsl(var(--huesat) 16%)' # background behind cards 15 | paper-listbox-background-color: 'hsl(var(--huesat) 16%)' 16 | paper-card-background-color: 'hsl(var(--huesat) 12%)' 17 | paper-dialog-background-color: 'var(--paper-card-background-color)' 18 | table-row-background-color: 'hsl(var(--huesat) 12%)' 19 | table-row-alternative-background-color: 'hsl(var(--huesat) 10%)' 20 | # Divider 21 | divider-color: 'hsla(0, 0%, 0%, 0)' 22 | dark-divider-opacity: '0' 23 | light-divider-opacity: '0' 24 | dark-secondary-opacity: '1' 25 | # Text colors 26 | primary-text-color: 'hsl(var(--huesat) 90%)' 27 | text-primary-color: 'hsl(var(--huesat) 80%)' 28 | secondary-text-color: 'hsl(var(--huesat) 80%)' 29 | disabled-text-color: 'hsl(var(--huesat) 70%)' 30 | sidebar-text_-_color: 'hsl(var(--huesat) 90%)' 31 | sidebar-text-color: 'hsl(var(--huesat) 90%)' 32 | paper-card-header-color: 'hsl(var(--huesat) 90%)' 33 | paper-button-ink-color: 'hsl(var(--huesat) 50%)' 34 | # Text Adjustments 35 | paper-font-headline_-_letter-spacing: '-0.5px' 36 | paper-font-headline_-_font-weight: '400' 37 | paper-font-body1_-_font-weight: '300' 38 | # Nav Menu 39 | paper-listbox-color: 'hsl(var(--huesat) 50%)' 40 | paper-grey-50: 'hsl(var(--huesat) 50%)' 41 | paper-grey-200: 'hsl(var(--huesat) 10%)' #active menu item 42 | # Paper card 43 | paper-item-icon-color: 'hsl(var(--huesat) 40%)' 44 | paper-item-icon-active-color: 'var(--paper-item-icon-color)' 45 | paper-item-icon_-_color: 'var(--paper-item-icon-color)' 46 | paper-item-selected_-_background-color: 'hsla(0, 0%, 0%, 0.2)' 47 | paper-item-selected_-_color: 'hsl(var(--huesat) 20%)' #? 48 | paper-tabs-selection-bar-color: 'hsla(0, 0%, 0%, 0.2)' 49 | paper-tab-ink: 'hsl(var(--huesat) 70%)' 50 | paper-input-container-color: 'hsl(var(--huesat) 60%)' 51 | # Labels 52 | label-badge-red: 'var(--paper-card-background-color)' 53 | label-badge-border-color: 'var(--label-badge-red)' 54 | label-badge-background-color: 'var(--paper-card-background-color)' 55 | label-badge-text-color: 'var(--primary-text-color)' 56 | # Shadows 57 | shadow-elevation-2dp_-_box-shadow: '0px 0px 0px 0px hsl(var(--huesat) 10%)' 58 | shadow-elevation-16dp_-_box-shadow: '0px 0px 0px 0px hsl(var(--huesat) 25%)' 59 | # Switches 60 | paper-toggle-button-checked-button-color: 'hsl(var(--base-hue), 90%, 50%)' 61 | paper-toggle-button-checked-bar-color: 'hsl(var(--huesat) 25%)' 62 | paper-toggle-button-unchecked-button-color: 'hsl(var(--huesat) 25%)' 63 | paper-toggle-button-unchecked-bar-color: 'hsl(var(--huesat) 5%)' 64 | # Sliders 65 | paper-slider-knob-color: 'hsl(var(--base-hue), 90%, 50%)' 66 | paper-slider-knob-start-color: 'hsl(var(--base-hue), 80%, 25%)' 67 | paper-slider-pin-color: 'hsl(var(--base-hue), 90%, 50%)' 68 | paper-slider-active-color: 'hsl(var(--base-hue), 90%, 50%)' 69 | paper-slider-container-color: 'hsl(var(--huesat) 28%)' 70 | paper-slider-secondary-color: 'hsl(var(--huesat) 90%)' 71 | paper-slider-disabled-active-color: 'hsl(var(--base-hue), 80%, 25%)' 72 | paper-slider-disabled-secondary-color: 'hsl(var(--base-hue), 80%, 25%)' 73 | paper-dialog-color: 'hsl(var(--base-hue), 20%, 80%)' 74 | 75 | -------------------------------------------------------------------------------- /themes/slate.yaml: -------------------------------------------------------------------------------- 1 | slate: 2 | # Main colors 3 | primary-color: '#2980b9' 4 | accent-color: '#2980b9' 5 | dark-primary-color: 'var(--accent-color)' 6 | light-primary-color: 'var(--accent-color)' 7 | # Text colors 8 | primary-text-color: '#FFFFFF' 9 | text-primary-color: 'var(--primary-text-color)' 10 | secondary-text-color: '#b58e31' 11 | disabled-text-color: '#777777' 12 | label-badge-border-color: 'green' 13 | # Sidebar 14 | sidebar-icon-color: '#777777' 15 | # Background colors 16 | primary-background-color: '#222222' 17 | secondary-background-color: '#222222' 18 | divider-color: 'rgba(0, 0, 0, .12)' 19 | table-row-background-color: '#292929' 20 | table-row-alternative-background-color: '#292929' 21 | # Nav Menu 22 | paper-listbox-color: '#777777' 23 | paper-listbox-background-color: '#141414' 24 | paper-grey-50: 'var(--primary-text-color)' 25 | paper-grey-200: '#222222' 26 | # Paper card 27 | paper-card-header-color: 'var(--accent-color)' 28 | paper-card-background-color: '#292929' 29 | paper-dialog-background-color: '#292929' 30 | paper-item-icon-color: 'var(--primary-text-color)' 31 | paper-item-icon-active-color: '#b58e31' 32 | paper-item-icon_-_color: 'green' 33 | paper-item-selected_-_background-color: '#292929' 34 | paper-tabs-selection-bar-color: 'green' 35 | # Labels 36 | label-badge-red: 'var(--accent-color)' 37 | label-badge-text-color: 'var(--primary-text-color)' 38 | label-badge-background-color: '#222222' 39 | # Switches 40 | paper-toggle-button-checked-button-color: 'var(--accent-color)' 41 | paper-toggle-button-checked-bar-color: 'var(--accent-color)' 42 | paper-toggle-button-checked-ink-color: 'var(--accent-color)' 43 | paper-toggle-button-unchecked-button-color: 'var(--disabled-text-color)' 44 | paper-toggle-button-unchecked-bar-color: 'var(--disabled-text-color)' 45 | paper-toggle-button-unchecked-ink-color: 'var(--disabled-text-color)' 46 | # Sliders 47 | paper-slider-knob-color: 'var(--accent-color)' 48 | paper-slider-knob-start-color: 'var(--accent-color)' 49 | paper-slider-pin-color: 'var(--accent-color)' 50 | paper-slider-active-color: 'var(--accent-color)' 51 | paper-slider-container-color: 'linear-gradient(var(--primary-background-color), var(--secondary-background-color)) no-repeat' 52 | paper-slider-secondary-color: 'var(--secondary-background-color)' 53 | paper-slider-disabled-active-color: 'var(--disabled-text-color)' 54 | paper-slider-disabled-secondary-color: 'var(--disabled-text-color)' 55 | # Google colors 56 | google-red-500: '#b58e31' 57 | google-green-500: '#2980b9' -------------------------------------------------------------------------------- /themes/solarized.yaml: -------------------------------------------------------------------------------- 1 | solarized: 2 | primary-color: "#2aa198" 3 | disabled-text-color: "#859900" 4 | divider-color: "#586e75" #"rgba(255, 255, 255, 0.12)" 5 | paper-card-background-color: "#002b36" 6 | paper-grey-200: "#586e75" 7 | paper-item-icon-color: "#b58900" 8 | paper-listbox-background-color: "#002b36" 9 | paper-listbox-color: "#b58900" 10 | primary-background-color: "#073642" 11 | primary-text-color: "#839496" 12 | secondary-background-color: "#073642" 13 | secondary-text-color: "#859900" 14 | text-primary-color: "#839496" 15 | label-badge-background-color: "var(--secondary-background-color)" 16 | label-badge-text-color: "var(--text-primary-color)" 17 | paper-card-header-color: "#cb4b16" 18 | paper-grey-50: "#b58900" 19 | paper-item-icon-active-color: "#dc322f" 20 | paper-item-icon_-_color: "#FF00FF" # no clue 21 | paper-slider-active-color: "#dc322f" 22 | paper-slider-knob-color: "#dc322f" 23 | paper-slider-knob-start-color: "#b58900" 24 | paper-slider-pin-color: "#FF00FF" # no clue 25 | paper-slider-secondary-color: "#dc322f" 26 | paper-toggle-button-checked-ink-color: "#dc322f" 27 | paper-toggle-button-checked-button-color: "#dc322f" 28 | paper-toggle-button-checked-bar-color: "#cb4b16" 29 | paper-toggle-button-unchecked-bar-color: "#b58900" 30 | table-row-background-color: "#002b36" 31 | table-row-alternative-background-color: "#073642" 32 | google-red: "#dc322f" 33 | google-green: "#859900" 34 | google-blue: "#268bd2" 35 | google-yellow: "#b58900" 36 | accent-color: "#cb4b16" 37 | paper-green: "#859900" 38 | paper-blue: "#268bd2" 39 | paper-orange: "#cb4b16" 40 | 41 | -------------------------------------------------------------------------------- /ui-lovelace.yaml: -------------------------------------------------------------------------------- 1 | title: Our House 2 | icon: mdi:home-city-outline 3 | background: center / cover no-repeat url("/local/backgrounds/background-15.gif") fixed 4 | resources: 5 | - url: /local/mini-media-player-bundle.js?track=true 6 | type: js 7 | - url: /local/canvas-gauge-card.js?track=true 8 | type: module 9 | - url: /local/monster-card.js?v=0.2.3 10 | type: js 11 | - url: /local/card-modder.js?track=true 12 | type: js 13 | - url: /local/card-tools.js?track=true 14 | type: js 15 | - url: /customcards/github/maykar/compact-custom-header.js?track=true 16 | type: module 17 | - url: /local/tracker-card.js?track=true 18 | type: module 19 | - url: https://unpkg.com/moment@2.22.2/min/moment.min.js 20 | type: js 21 | - url: https://cdn.jsdelivr.net/npm/flatpickr 22 | type: js 23 | - url: https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css 24 | type: css 25 | - url: /community_plugin/weather-card/weather-card.js 26 | type: module 27 | - url: /local/camera-card.js 28 | type: module 29 | - url: https://cdn.jsdelivr.net/gh/custom-cards/spotify-card@1.5/dist/spotify-card.umd.js 30 | type: module 31 | # - url: '/community_plugin//harmony-card/harmony-card.js' 32 | - url: /local/community/harmony-card/harmony-card.js 33 | - type: module 34 | views: 35 | 36 | 37 | - !include lovelace/tabs/rooms.yaml 38 | - !include lovelace/tabs/environment.yaml 39 | - !include lovelace/tabs/media.yaml 40 | # - !include lovelace/tabs/systems-status.yaml 41 | # - !include lovelace/tabs/clock.yaml 42 | - !include lovelace/tabs/experimental.yaml 43 | - !include lovelace/tabs/devices.yaml 44 | 45 | - !include lovelace/tabs/shop.yaml 46 | --------------------------------------------------------------------------------