├── .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 |
--------------------------------------------------------------------------------