├── config ├── packages │ ├── calsense_automation.yaml │ ├── monitoring.yaml │ ├── maintenance.yaml │ ├── youtube.yaml │ ├── generate_dash_automation.yaml │ ├── json_data │ │ └── school.json │ ├── integrations.yaml │ ├── database.yaml │ ├── zigbee2mqtt.yaml │ ├── camera.yaml │ ├── spotify.yaml │ ├── space.yaml │ ├── sysmon.yaml │ ├── lighting.yaml │ ├── clock_chime.yaml │ ├── helpers_template_sensor.yaml │ ├── notify.yaml │ ├── slacker_presence.yaml │ ├── usps.yaml │ ├── holidays.yaml │ ├── audio.yaml │ ├── halloween.yaml │ ├── utilities.yaml │ └── security.yaml ├── sensors │ ├── github.yaml │ ├── users.yaml │ ├── sensor.yaml │ ├── google_travel_time.yaml │ ├── finance.yaml │ ├── power.yaml │ └── house.yaml ├── input_select.yaml ├── mqtt.yaml ├── binary_sensors │ └── calendar.yaml ├── input_datetime.yaml ├── input_boolean.yaml ├── scripts.yaml ├── configuration.yaml ├── groups.yaml └── customize.yaml ├── images └── mdl_bw-2.png ├── .github ├── .weekly-digest.yml └── config.yml ├── .gitignore ├── .gitattributes └── README.md /config/packages/calsense_automation.yaml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /config/packages/monitoring.yaml: -------------------------------------------------------------------------------- 1 | 2 | # Automations moved to automation.yaml -------------------------------------------------------------------------------- /images/mdl_bw-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thejeffreystone/homeassistant-config/HEAD/images/mdl_bw-2.png -------------------------------------------------------------------------------- /.github/.weekly-digest.yml: -------------------------------------------------------------------------------- 1 | publishDay: mon 2 | canPublishIssues: true 3 | canPublishPullRequests: true 4 | canPublishContributors: true 5 | canPublishStargazers: true 6 | canPublishCommits: true -------------------------------------------------------------------------------- /config/packages/maintenance.yaml: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # @author : Jeffrey Stone 3 | # @date : 02/19/2019 4 | # @package : Maintnance 5 | # @description : Maint Automation that occurs every day 6 | ############################################################################### 7 | 8 | # Automations moved to automation.yaml 9 | 10 | -------------------------------------------------------------------------------- /config/sensors/github.yaml: -------------------------------------------------------------------------------- 1 | # - platform: github 2 | # access_token: !secret github_token 3 | # repositories: 4 | # - path: 'thejeffreystone/home-assistant-configuration' 5 | # - platform: command_line 6 | # command: 'curl https://api.github.com/repos/thejeffreystone/homeassistant-config' 7 | # name: GitHub Stats 8 | # scan_interval: 20000 9 | # value_template: '{{ value_json.name }}' 10 | # json_attributes: 11 | # - open_issues 12 | # - stargazers_count -------------------------------------------------------------------------------- /config/sensors/users.yaml: -------------------------------------------------------------------------------- 1 | - platform: template 2 | sensors: 3 | jeff_speed: 4 | friendly_name: "Jeff Speed" 5 | unit_of_measurement: 'mph' 6 | value_template: "{{ state_attr('device_tracker.jeffrey_stone', 'speed') | round(default=0) | float / 1.609 | round }}" 7 | kat_speed: 8 | friendly_name: "Kat Speed" 9 | unit_of_measurement: 'mph' 10 | value_template: "{{ state_attr('device_tracker.life360_kat_stone', 'speed') | round(default=0) | int }}" 11 | 12 | -------------------------------------------------------------------------------- /config/sensors/sensor.yaml: -------------------------------------------------------------------------------- 1 | 2 | # - platform: template 3 | # sensors: 4 | # desk_light_energy: 5 | # friendly_name: "Desk Light Energy" 6 | # value_template: "{{ state_attr('light.desk_backlight','energy')}}" 7 | # basement_temp_celsius: 8 | # friendly_name: Basement Temp C 9 | # value_template: > 10 | # {% if has_value('sensor.basement_air_device_temperature') %} 11 | # {{ ((states('sensor.basement_air_device_temperature') | int - 32) / 1.8) | round(0) }} 12 | # {% endif %} 13 | 14 | 15 | -------------------------------------------------------------------------------- /config/packages/youtube.yaml: -------------------------------------------------------------------------------- 1 | #------------------------------------------- 2 | # I totally stole this from @CCOSTAN 3 | # 4 | # Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig 5 | # YouTube Related Packages from @Pinkywafer 6 | # https://github.com/pinkywafer/Home-Assistant_Config/blob/master/packages/youtube/vcloudinfo.yaml 7 | # More information found here in these issues 8 | # https://github.com/CCOSTAN/Home-AssistantConfig/issues/720 9 | #------------------------------------------- 10 | 11 | sensor: 12 | - platform: youtube 13 | channel_id: UCipZJ6748kd8TbelSxcvcVg 14 | 15 | 16 | -------------------------------------------------------------------------------- /config/packages/generate_dash_automation.yaml: -------------------------------------------------------------------------------- 1 | automation: 2 | - alias: Generate sensor dash on restart 3 | description: "" 4 | trigger: 5 | - platform: homeassistant 6 | event: start 7 | condition: [] 8 | action: 9 | - delay: 10 | hours: 0 11 | minutes: 0 12 | seconds: 30 13 | - service: pyscript.generate_sensors_dash 14 | data: {} 15 | - delay: 16 | hours: 0 17 | minutes: 0 18 | seconds: 10 19 | - service: pyscript.generate_automation 20 | data: {} 21 | - delay: 22 | hours: 0 23 | minutes: 0 24 | seconds: 10 25 | - service: automation.reload 26 | data: {} 27 | 28 | mode: single 29 | -------------------------------------------------------------------------------- /config/sensors/google_travel_time.yaml: -------------------------------------------------------------------------------- 1 | # - platform: waze_travel_time 2 | # name: "Jeff ETT Home" 3 | # #api_key: !secret google_api 4 | # origin: device_tracker.jeffrey_s_iphone_11_app 5 | # destination: zone.home 6 | # region: 'US' 7 | # - platform: waze_travel_time 8 | # name: "Kat ETT Home" 9 | # #api_key: !secret google_api 10 | # origin: device_tracker.life360_kat_stone 11 | # destination: zone.home 12 | # region: 'US' 13 | # - platform: waze_travel_time 14 | # name: "Home To Summit" 15 | # # api_key: !secret google_api 16 | # origin: zone.home 17 | # destination: zone.summit 18 | # region: 'US' 19 | # - platform: waze_travel_time 20 | # name: "Home To Zoo" 21 | # # api_key: !secret google_api# 22 | # origin: zone.home 23 | # destination: zone.zooatlanta 24 | # region: 'US' 25 | # incl_filter: US-78 W -------------------------------------------------------------------------------- /config/input_select.yaml: -------------------------------------------------------------------------------- 1 | trash_pickup: 2 | name: Trash Pickup 3 | options: 4 | - Monday 5 | - Tuesday 6 | - Wednesday 7 | - Thursday 8 | - Friday 9 | initial: Tuesday 10 | icon: mdi:delete-variant 11 | recycle_pickup: 12 | name: Recycle Pickup 13 | options: 14 | - Monday 15 | - Tuesday 16 | - Wednesday 17 | - Thursday 18 | - Friday 19 | initial: Tuesday 20 | icon: mdi:delete-variant 21 | spotify_source: 22 | name: Spotify Source 23 | options: 24 | - Everywhere 25 | - Living Room 26 | - Skylar's Bedroom 27 | - Kitchen 28 | initial: Living Room 29 | spotify_playlist: 30 | name: Spotify Playlist 31 | options: 32 | - chill 33 | - dedtime 34 | - background 35 | - scored 36 | - jukebox 37 | - classical 38 | - disney 39 | - jazz 40 | - skylar 41 | initial: background -------------------------------------------------------------------------------- /config/mqtt.yaml: -------------------------------------------------------------------------------- 1 | sensor: 2 | - name: "Family Status" 3 | state_topic: "house/family/status" 4 | payload_available: "online" 5 | payload_not_available: "offline" 6 | - name: "Family Arrived" 7 | state_topic: "house/family/arrived" 8 | payload_available: "online" 9 | payload_not_available: "offline" 10 | - name: "Jeff Last Known Location" 11 | state_topic: "house/jeff/last_known_location" 12 | payload_available: "online" 13 | payload_not_available: "offline" 14 | - name: "Kat Last Known Location" 15 | state_topic: "house/kat/last_known_location" 16 | payload_available: "online" 17 | payload_not_available: "offline" 18 | - name: "daily_agenda_raw" 19 | state_topic: "house/daily/events" 20 | - name: "Jeff Destination" 21 | state_topic: "jeff/driving/destination" 22 | - name: "Kat Destination" 23 | state_topic: "kat/driving/destination" -------------------------------------------------------------------------------- /config/sensors/finance.yaml: -------------------------------------------------------------------------------- 1 | # - platform: alpha_vantage 2 | # api_key: !secret alpha_vantage 3 | # symbols: 4 | # #- symbol: SIRI 5 | # # name: Sirius 6 | # #- symbol: BAC 7 | # # name: BoA 8 | # #- symbol: INTC 9 | # # name: Intel 10 | # - symbol: DIS 11 | # name: Disney 12 | # #- symbol: BKS 13 | # # name: Barnes & Noble 14 | # - platform: mqtt 15 | # name: "Disney" 16 | # state_topic: "stock/DIS/price" 17 | # - platform: mqtt 18 | # name: "BoA" 19 | # state_topic: "stock/BAC/price" 20 | # - platform: mqtt 21 | # name: "Intel" 22 | # state_topic: "stock/INTC/price" 23 | # - platform: mqtt 24 | # name: "Sirius" 25 | # state_topic: "stock/SIRI/price" 26 | # - platform: mqtt 27 | # name: "Barnes and Nobel" 28 | # state_topic: "stock/BKS/price" 29 | #sensor: 30 | - platform: statistics 31 | name: xlm_price_stats 32 | entity_id: sensor.xlm_exchange_rate 33 | state_characteristic: change 34 | sampling_size: 2 35 | 36 | 37 | -------------------------------------------------------------------------------- /config/sensors/power.yaml: -------------------------------------------------------------------------------- 1 | 2 | # - platform: template 3 | # sensors: 4 | # low_battery: 5 | # friendly_name: 'Low Battery' 6 | # value_template: > 7 | # {%- set threshold = 15 -%} 8 | # {%- set domains = ['light', 'switch', 'sensor', 'zwave', 'lock', 'binary_sensor'] -%} 9 | # {%- for domain in domains -%} 10 | # {%- for item in states[domain] if ((item.attributes.battery_level is defined and item.attributes['battery_level'] | int < threshold) or ("battery" in item.name | lower and ((item.state | int < threshold and item.state|int != 0) or item.state | lower == "low" or item.state | lower == "unknown"))) -%} 11 | # {{ item.attributes.friendly_name }} ( 12 | # {%- if item.attributes.battery_level is defined -%} 13 | # {{ item.attributes.battery_level}} 14 | # {%- else -%} 15 | # {{item.state}} 16 | # {%- endif -%}%) 17 | # {%- if not loop.last -%} 18 | # {{', '}} 19 | # {%- endif -%} 20 | # {%- endfor -%} 21 | # {%- endfor -%} -------------------------------------------------------------------------------- /config/binary_sensors/calendar.yaml: -------------------------------------------------------------------------------- 1 | # 2 | # MOVED to configuration.yaml 3 | # Workday Sensor 4 | # - platform: workday 5 | # country: US 6 | # province: GA 7 | # workdays: [mon, tue, wed, thu, fri] 8 | 9 | # - platform: workday 10 | # name: jeff_workday 11 | # country: US 12 | # province: GA 13 | # workdays: [mon, tue, wed, thu, fri] 14 | 15 | # # Times Of Day 16 | # - platform: tod 17 | # name: Night 18 | # after: sunset 19 | # before: sunrise 20 | 21 | # - platform: tod 22 | # name: Day 23 | # after: sunrise 24 | # before: sunset 25 | 26 | # - platform: tod 27 | # name: Quiet time 28 | # after: '21:00' 29 | # before: '06:00' 30 | 31 | # - platform: tod 32 | # name: Lights Out 33 | # after: '23:00' 34 | # before: '06:00' 35 | 36 | # - platform: tod 37 | # name: Morning 38 | # after: '06:00' 39 | # before: '08:30' 40 | 41 | # - platform: tod 42 | # name: Midday 43 | # after: '08:30' 44 | # before: '17:00' 45 | 46 | # - platform: tod 47 | # name: Evening 48 | # after: '17:00' 49 | # before: '21:00' 50 | 51 | # - platform: tod 52 | # name: Overnight 53 | # after: '18:00' 54 | # before: '06:00' 55 | -------------------------------------------------------------------------------- /.github/config.yml: -------------------------------------------------------------------------------- 1 | # Configuration for welcome - https://github.com/behaviorbot/welcome 2 | # Configuration for new-issue-welcome - https://github.com/behaviorbot/new-issue-welcome 3 | 4 | # Comment to be posted to on first time issues 5 | newIssueWelcomeComment: > 6 | Thanks for helping make this code better! This is the place to request enhancements, ask questions and other things. You can also ask questions via twitter or https://jeffreystone.net 7 | 8 | # Configuration for new-pr-welcome - https://github.com/behaviorbot/new-pr-welcome 9 | # Comment to be posted to on PRs from first time contributors in your repository 10 | newPRWelcomeComment: > 11 | Thanks for submitting a code change! Once @thejeffreystone reviews it, it will become part of the master! 12 | # Configuration for first-pr-merge - https://github.com/behaviorbot/first-pr-merge 13 | # Comment to be posted to on pull requests merged by a first time user 14 | firstPRMergeComment: > 15 | Congrats on contributing to the code base! Your contribution is very much appreciated and I hope you continue to support this little project by improving code and documentation! 16 | # It is recommended to include as many gifs and emojis as possible! 17 | -------------------------------------------------------------------------------- /config/input_datetime.yaml: -------------------------------------------------------------------------------- 1 | both_date_and_time: 2 | name: Input with both date and time 3 | has_date: true 4 | has_time: true 5 | only_date: 6 | name: Input with only date 7 | has_date: true 8 | has_time: false 9 | outisde_light_delay: 10 | name: Outside Light Delay 11 | has_date: false 12 | has_time: true 13 | announcement_delay: 14 | name: Announcement Delay 15 | has_date: false 16 | has_time: true 17 | coffee_time: 18 | name: Coffee Time 19 | has_date: false 20 | has_time: true 21 | good_morning: 22 | name: Good Morning 23 | has_date: false 24 | has_time: true 25 | skylar_wakeup_call: 26 | name: Skylar Wakeup 27 | has_date: false 28 | has_time: true 29 | christmas_show: 30 | name: Christmas Show 31 | has_date: false 32 | has_time: true 33 | christmas_preshow: 34 | name: Christmas Preshow 35 | has_date: false 36 | has_time: true 37 | 38 | good_night_routine: 39 | name: Good Night Routine 40 | has_date: false 41 | has_time: true 42 | nightly_lockdown: 43 | name: Nightly Lockdown 44 | has_date: false 45 | has_time: true 46 | morning_standby: 47 | name: Morning Standby 48 | has_date: false 49 | has_time: true 50 | 51 | skylar_awake_at: 52 | name: Skylar Awake At 53 | has_date: false 54 | has_time: true -------------------------------------------------------------------------------- /config/input_boolean.yaml: -------------------------------------------------------------------------------- 1 | automations: 2 | name: Automations 3 | icon: mdi:home-automation 4 | 5 | welcome_greeting: 6 | name: Welcome Greeting 7 | icon: mdi:speaker-wireless 8 | house_party_protocol_switch: 9 | name: House Party Switch 10 | kat_heading_home: 11 | name: Kat Heading Home 12 | icon: mdi:car 13 | jeff_heading_home: 14 | name: Jeff Heading Home 15 | icon: mdi:car 16 | jeff_traffic_alerts: 17 | name: Jeff Traffic Alerts 18 | icon: mdi:bell-plus 19 | jeff_traffic_alert_home: 20 | name: Jeff Traffic Alert Home 21 | icon: mdi:traffic-light 22 | tornado_watch: 23 | name: Tornado Watch 24 | icon: mdi:message-alert 25 | kat_travel_monitor: 26 | name: Kat Travel Monitor 27 | icon: mdi:car 28 | jeff_travel_monitor: 29 | name: Jeff Travel Monitor 30 | icon: mdi:car 31 | 32 | weather_reports: 33 | name: Weather Info 34 | traffic_reports: 35 | name: traffic_reports 36 | sun_reports: 37 | name: Sun Reports 38 | new_ha_announcement: 39 | name: New HA Announcement 40 | icon: mdi:twitter 41 | showing_now: 42 | name: Showing Now 43 | icon: mdi:popcorn 44 | skylar_school: 45 | name: Skylar at School 46 | shuffle_spotify: 47 | name: Spotify Shuffle 48 | good_morning_report: 49 | name: Good Morning Report 50 | master_bedroom_alarm: 51 | name: Master Bedroom Alarm 52 | skylar_awake: 53 | name: Skylar Awake 54 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # ignore my git update script 2 | update_git.py 3 | transporter.py 4 | 5 | # ignore hidden folders 6 | **.aarlo/ 7 | **.storage/ 8 | **.cloud/ 9 | **.google.token 10 | 11 | # ignore some directories. 12 | **/icloud/ 13 | **/www/ 14 | **/tts/ 15 | **/deps/ 16 | **/hadashboards/ 17 | **/intents/ 18 | **/themes/ 19 | **/custom_components 20 | **/deps 21 | **/hacs 22 | **/zigbee2mqtt/ 23 | **/__pycache__/ 24 | **/zha_quirks/ 25 | **/templates/ 26 | **/pyscript/ 27 | **python_scripts/ 28 | **/life360/ 29 | **/images/ 30 | **/trash/ 31 | 32 | # ignore any of these files no matter where they are using double * 33 | **.DS_Store 34 | **._* 35 | **.HA_VERSION 36 | **.ini 37 | **.pyc 38 | **.conf 39 | **.uuid 40 | **.txt 41 | **.log* 42 | **.db 43 | **.sqlite 44 | **.xml 45 | **secrets* 46 | **.session 47 | **.*.json 48 | **.ip_authenticated.yaml 49 | **eero_tracker_instantiate.py 50 | **known_devices.yaml 51 | **google_calendars.yaml 52 | **ip_bans.yaml 53 | **.spotify-token-cache 54 | **zones.yaml 55 | **test.yaml 56 | **testing.yaml 57 | **.homekit* 58 | **.vscode 59 | **.pid 60 | **.xml 61 | **.csr 62 | **.crt 63 | **.key 64 | **.pem 65 | **core.* 66 | **OZW_Log.txt 67 | **.db-journal 68 | **.db-shm 69 | **.db-wal 70 | **.sqlite 71 | **__pycache__ 72 | **phue.conf 73 | **ios.conf 74 | **pyozw.sqlite 75 | **ipchange.yaml 76 | **production_auth.json 77 | **traccar.xml 78 | **sensitive.yaml -------------------------------------------------------------------------------- /config/packages/json_data/school.json: -------------------------------------------------------------------------------- 1 | { 2 | "MENU": { 3 | "static": { 4 | "8/3": "Chicken Nuggets", 5 | "8/4": "Garlic and Cheese Pull Apart", 6 | "8/7": "Oven Fried Chicken", 7 | "8/8": "Chicken Tenders", 8 | "8/9": "Chicken Tender Wrap", 9 | "8/10": "Orange Chicken", 10 | "8/11": "Pizza", 11 | "8/14": "Cheese Sticks", 12 | "8/16": "French Bread Pizza", 13 | "8/17": "Chicken and Waffles", 14 | "8/18": "Stuffed Breadstick Bites or Chicken Sandwhich", 15 | "8/21": "Hamburger or Hotdog", 16 | "8/22": "Southern Style Chicken Sandwich", 17 | "8/23": "Nachos", 18 | "8/24": "Chicken Nuggets", 19 | "8/25": "Pizza", 20 | "8/28": "Oven Fried Chicken", 21 | "8/29": "Chicken Tenders", 22 | "8/30": "Chicken Tender Wrap", 23 | "8/31": "Orange Chicken", 24 | "9/1": "Personal Pan Pizza or Cheese Ravioli" 25 | } 26 | }, 27 | "EVENTS": { 28 | "static": { 29 | "1/25": "Digital Learning Day", 30 | "3/2": "Digital Leaerning Day and Early Release", 31 | "3/3": "Early Release", 32 | "3/22": "Digital Learning Day", 33 | "8/4": "Digital Learning Day", 34 | "9/14": "Digital Learning Day", 35 | "10/20": "Digital Learning Day", 36 | "10/21": "Early Release", 37 | "10/22": "Early Release", 38 | "11/9": "Digital Learning Day" 39 | 40 | } 41 | } 42 | } -------------------------------------------------------------------------------- /config/packages/integrations.yaml: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # @author : Jeffrey Stone 3 | # @date : 06/10/2020 4 | # @package : Integrations 5 | # @description : All the Integrations 6 | ############################################################################### 7 | 8 | # Google Calendar 9 | # google: 10 | # client_id: !secret google_client_id 11 | # client_secret: !secret google_client_secret 12 | 13 | # Testing internet speedtest 14 | # speedtestdotnet: 15 | 16 | # gdacs: 17 | # categories: 18 | # - Earthquake 19 | # - Tropical Cyclone 20 | # radius: 500 21 | # latitude: !secret MY_LATITUDE 22 | # longitude: !secret MY_LONGITUDE 23 | 24 | # TPLink / KASA - Hardcoding the IP Address - REMOVED in 2023.7 25 | # tplink: 26 | # discovery: false 27 | # switch: 28 | # - host: 192.168.7.105 29 | # - host: 192.168.7.107 30 | # - host: 192.168.7.116 31 | # - host: 192.168.7.120 32 | # - host: 192.168.7.136 33 | # - host: 192.168.7.137 34 | 35 | # WZYE Devices - Using the HACS integration 36 | # wyzeapi: 37 | # username: !secret wyze_user 38 | # password: !secret wyze_password 39 | 40 | # IFTTT (May be removed - I dont think I am using this.) 41 | ifttt: 42 | key: !secret IFTTT_API_KEY 43 | 44 | # # Using the HACS Daily Snapshot Clean Up Plugin 45 | # clean_up_snapshots_service: 46 | # host: !secret snapshot_url 47 | # token: !secret snapshot_token 48 | # number_of_snapshots_to_keep: 3 49 | 50 | binary_sensor: 51 | - platform: flic 52 | -------------------------------------------------------------------------------- /config/packages/database.yaml: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # @author : Jeffrey Stone 3 | # @date : 06/10/2020 4 | # @package : Database 5 | # @description : Recorder and Logger Configurations 6 | ############################################################################### 7 | 8 | recorder: 9 | db_url: !secret database 10 | purge_keep_days: 35 11 | exclude: 12 | domains: 13 | - automation 14 | - weblink 15 | - updater 16 | - script 17 | entities: 18 | - sun.sun # Don't record sun data 19 | - sensor.last_boot # Comes from 'systemmonitor' sensor platform 20 | - sensor.date 21 | - sensor.icloud3_event_log 22 | - sensor.time 23 | - sensor.today_is 24 | - sensor.time_utc 25 | - sensor.time_date 26 | - sensor.time_online 27 | - sensor.moon 28 | - sensor.month_is 29 | - sensor.low_battery 30 | 31 | logbook: 32 | include: 33 | domains: 34 | - media_player 35 | - automation 36 | - script 37 | - scene 38 | - light 39 | - switch 40 | - device_tracker 41 | - input_boolean 42 | - person 43 | - event 44 | - timer 45 | - service 46 | - binary_sensor 47 | - sensor 48 | 49 | # Lets try to make the logs less chatty and more fine tuned. 50 | logger: 51 | default: error 52 | 53 | history: 54 | include: 55 | domains: 56 | - binary_sensor 57 | - sensor 58 | - switch 59 | - media_player 60 | - light 61 | - scene 62 | - automation 63 | -------------------------------------------------------------------------------- /config/packages/zigbee2mqtt.yaml: -------------------------------------------------------------------------------- 1 | 2 | input_boolean: 3 | zigbee_permit_join: 4 | name: Allow devices to join 5 | initial: off 6 | icon: mdi:cellphone-wireless 7 | 8 | timer: 9 | zigbee_permit_join: 10 | name: Time remaining 11 | duration: 600 # Updated this to the number of seconds you wish 12 | 13 | mqtt: 14 | sensor: 15 | - name: Bridge state 16 | state_topic: "zigbee2mqtt/bridge/state" 17 | icon: mdi:router-wireless 18 | 19 | automation: 20 | - id: enable_zigbee_join 21 | alias: Enable Zigbee joining 22 | trigger: 23 | platform: state 24 | entity_id: input_boolean.zigbee_permit_join 25 | to: 'on' 26 | action: 27 | - service: mqtt.publish 28 | data: 29 | topic: zigbee2mqtt/bridge/config/permit_join 30 | payload: 'true' 31 | - service: timer.start 32 | data: 33 | entity_id: timer.zigbee_permit_join 34 | - id: disable_zigbee_join 35 | alias: Disable Zigbee joining 36 | trigger: 37 | - entity_id: input_boolean.zigbee_permit_join 38 | platform: state 39 | to: 'off' 40 | action: 41 | - data: 42 | payload: 'false' 43 | topic: zigbee2mqtt/bridge/config/permit_join 44 | service: mqtt.publish 45 | - data: 46 | entity_id: timer.zigbee_permit_join 47 | service: timer.cancel 48 | - id: disable_zigbee_join_timer 49 | alias: Disable Zigbee joining by timer 50 | trigger: 51 | - platform: event 52 | event_type: timer.finished 53 | event_data: 54 | entity_id: timer.zigbee_permit_join 55 | action: 56 | - service: mqtt.publish 57 | data: 58 | topic: zigbee2mqtt/bridge/config/permit_join 59 | payload: 'false' 60 | - service: input_boolean.turn_off 61 | data: 62 | entity_id: input_boolean.zigbee_permit_join -------------------------------------------------------------------------------- /config/scripts.yaml: -------------------------------------------------------------------------------- 1 | activate_work_time: 2 | alias: Activate Work time 3 | sequence: 4 | - service: input_select.select_option 5 | data: 6 | option: Work 7 | target: 8 | entity_id: input_select.studio_mode 9 | mode: single 10 | activate_film_time: 11 | alias: Activate Film Time 12 | sequence: 13 | - service: input_select.select_option 14 | data: 15 | option: Film 16 | target: 17 | entity_id: input_select.studio_mode 18 | mode: single 19 | activate_cone_of_silence: 20 | alias: Activate Cone of Silence 21 | sequence: 22 | - service: switch.turn_on 23 | data: {} 24 | target: 25 | entity_id: switch.slacker_labs_on_air 26 | - service: input_boolean.turn_off 27 | data: {} 28 | target: 29 | entity_id: input_boolean.work_background 30 | mode: single 31 | deactivate_cone_of_silence: 32 | alias: Deactivate Cone of silence 33 | sequence: 34 | - service: switch.turn_off 35 | data: {} 36 | target: 37 | entity_id: switch.slacker_labs_on_air 38 | mode: single 39 | mud_time: 40 | alias: Mud Time 41 | sequence: 42 | - service: input_boolean.turn_on 43 | data: {} 44 | target: 45 | entity_id: input_boolean.chimichanga_mode 46 | mode: single 47 | icon: mdi:deathly-hallows 48 | art_done: 49 | alias: Art Done 50 | sequence: 51 | - service: input_boolean.turn_off 52 | data: {} 53 | target: 54 | entity_id: input_boolean.chimichanga_mode 55 | mode: single 56 | icon: mdi:artstation 57 | madame_leotta: 58 | alias: Madame Leotta 59 | sequence: 60 | - service: switch.toggle 61 | data: {} 62 | target: 63 | entity_id: switch.madame_leotta 64 | mode: single 65 | haunted_clock: 66 | alias: Haunted Clock 67 | sequence: 68 | - service: switch.toggle 69 | data: {} 70 | target: 71 | entity_id: switch.haunted_clock 72 | mode: single 73 | skeleton_seesaw: 74 | alias: skeleton_seesaw 75 | sequence: 76 | - service: switch.toggle 77 | data: {} 78 | target: 79 | entity_id: switch.skeletons 80 | mode: single 81 | -------------------------------------------------------------------------------- /config/configuration.yaml: -------------------------------------------------------------------------------- 1 | homeassistant: 2 | external_url: !secret ahsl_base_url 3 | internal_url: http://192.168.7.187:8123 4 | customize: !include customize.yaml 5 | auth_providers: 6 | - type: homeassistant 7 | packages: !include_dir_named packages 8 | media_dirs: 9 | haunted_sounds: /media/haunted_sounds 10 | music: /media/music 11 | sounds: /media/sounds 12 | disney: /media/disney 13 | books: /media/books 14 | images: /media/images 15 | 16 | #config for pyscript 17 | pyscript: 18 | allow_all_imports: true 19 | hass_is_global: true 20 | #config for lovelace dash 21 | lovelace: 22 | mode: storage 23 | dashboards: 24 | lovelace-roomsense: 25 | mode: yaml 26 | title: RoomSense IQ 27 | icon: mdi:script 28 | show_in_sidebar: true 29 | filename: dashboards.yaml 30 | 31 | # Configure a default setup of Home Assistant (frontend, api, etc) 32 | default_config: 33 | 34 | # Uncomment this if you are using SSL/TLS, running in Docker container, etc. 35 | http: 36 | # ssl_certificate: !secret ahsl_ssl_cert 37 | # ssl_key: !secret ahsl_ssl_key 38 | use_x_forwarded_for: true 39 | trusted_proxies: !secret proxy_ips 40 | ip_ban_enabled: false 41 | login_attempts_threshold: 5 42 | 43 | ssdp: 44 | 45 | zeroconf: 46 | 47 | system_health: 48 | 49 | mobile_app: 50 | 51 | person: 52 | 53 | frontend: 54 | themes: !include_dir_merge_named themes 55 | 56 | cloud: 57 | 58 | conversation: 59 | 60 | device_tracker: 61 | - platform: eero_tracker 62 | consider_home: 300 63 | interval_seconds: 60 64 | only_macs: "68:54:fd:29:20:87, 68:54:fd:d5:ae:3d, 50:dc:e7:5b:10:69, 2c:cc:44:bf:9b:b4, 28:18:78:74:79:10, 44:61:32:f8:c8:09, 64:cf:d9:3c:5d:0c, 50:02:91:ed:2c:47, ec:71:db:31:0e:6c, 4e:6d:02:24:ac:87, 7c:1c:4e:2e:62:30, dc:03:98:3e:a9:6d, 9E:3E:65:49:38:2A" 65 | 66 | # discovery: 67 | 68 | 69 | 70 | sun: 71 | 72 | python_script: 73 | 74 | map: 75 | 76 | zha: 77 | enable_quirks: true 78 | custom_quirks_path: /config/zha_quirks 79 | 80 | 81 | 82 | binary_sensor: 83 | # - platform: workday 84 | # country: US 85 | # province: GA 86 | # workdays: [mon, tue, wed, thu, fri] 87 | # - platform: workday 88 | # name: jeff_workday 89 | # country: US 90 | # province: GA 91 | # workdays: [mon, tue, wed, thu, fri] 92 | # Times Of Day 93 | - platform: tod 94 | name: Night 95 | after: sunset 96 | before: sunrise 97 | - platform: tod 98 | name: Day 99 | after: sunrise 100 | before: sunset 101 | - platform: tod 102 | name: Quiet time 103 | after: '22:00' 104 | before: '05:30' 105 | - platform: tod 106 | name: Lights Out 107 | after: '23:00' 108 | before: '05:30' 109 | - platform: tod 110 | name: Morning 111 | after: '05:30' 112 | before: '08:30' 113 | - platform: tod 114 | name: Evening 115 | after: '17:00' 116 | before: '21:00' 117 | - platform: tod 118 | name: Overnight 119 | after: '18:00' 120 | before: '05:30' 121 | 122 | ### Includes ### 123 | automation: !include automations.yaml 124 | script: !include scripts.yaml 125 | sensor: !include_dir_merge_list sensors 126 | mqtt: !include mqtt.yaml 127 | group: !include groups.yaml 128 | scene: !include scenes.yaml 129 | input_select: !include input_select.yaml 130 | input_boolean: !include input_boolean.yaml 131 | input_datetime: !include input_datetime.yaml 132 | zone: !include zones.yaml 133 | template: !include template.yaml 134 | 135 | shell_command: 136 | google_token: sed -i -e 's/2client.client"}2client.client"}/2client.client"}/g' /config/.google.token 137 | 138 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | ## GITATTRIBUTES FOR WEB PROJECTS 2 | # 3 | # These settings are for any web project. 4 | # 5 | # Details per file setting: 6 | # text These files should be normalized (i.e. convert CRLF to LF). 7 | # binary These files are binary and should be left untouched. 8 | # 9 | # Note that binary is a macro for -text -diff. 10 | ###################################################################### 11 | 12 | ## AUTO-DETECT - Handle line endings automatically for files detected 13 | ## as text and leave all files detected as binary untouched. 14 | ## This will handle all files NOT defined below. 15 | * text=auto 16 | 17 | ## SOURCE CODE 18 | *.bat text 19 | *.coffee text 20 | *.css text 21 | *.htm text 22 | *.html text 23 | *.inc text 24 | *.ini text 25 | *.js text 26 | *.jsx text 27 | *.json text 28 | *.less text 29 | *.php text 30 | *.pl text 31 | *.py text 32 | *.rb text 33 | *.sass text 34 | *.scm text 35 | *.scss text 36 | *.sh text 37 | *.sql text 38 | *.styl text 39 | *.ts text 40 | *.xml text 41 | *.xhtml text 42 | 43 | ## DOCUMENTATION 44 | *.markdown text 45 | *.md text 46 | *.mdwn text 47 | *.mdown text 48 | *.mkd text 49 | *.mkdn text 50 | *.mdtxt text 51 | *.mdtext text 52 | *.txt text 53 | AUTHORS text 54 | CHANGELOG text 55 | CHANGES text 56 | CONTRIBUTING text 57 | COPYING text 58 | INSTALL text 59 | license text 60 | LICENSE text 61 | NEWS text 62 | readme text 63 | *README* text 64 | TODO text 65 | 66 | ## TEMPLATES 67 | *.dot text 68 | *.ejs text 69 | *.haml text 70 | *.handlebars text 71 | *.hbs text 72 | *.hbt text 73 | *.jade text 74 | *.latte text 75 | *.mustache text 76 | *.phtml text 77 | *.tmpl text 78 | 79 | ## LINTERS 80 | .csslintrc text 81 | .eslintrc text 82 | .jscsrc text 83 | .jshintrc text 84 | .jshintignore text 85 | .stylelintrc text 86 | 87 | ## CONFIGS 88 | *.bowerrc text 89 | *.cnf text 90 | *.conf text 91 | *.config text 92 | .editorconfig text 93 | .gitattributes text 94 | .gitconfig text 95 | .gitignore text 96 | .htaccess text 97 | *.npmignore text 98 | *.yaml text 99 | *.yml text 100 | Makefile text 101 | makefile text 102 | 103 | ## HEROKU 104 | Procfile text 105 | .slugignore text 106 | 107 | ## GRAPHICS 108 | *.ai binary 109 | *.bmp binary 110 | *.eps binary 111 | *.gif binary 112 | *.ico binary 113 | *.jng binary 114 | *.jp2 binary 115 | *.jpg binary 116 | *.jpeg binary 117 | *.jpx binary 118 | *.jxr binary 119 | *.pdf binary 120 | *.png binary 121 | *.psb binary 122 | *.psd binary 123 | *.svg text 124 | *.svgz binary 125 | *.tif binary 126 | *.tiff binary 127 | *.wbmp binary 128 | *.webp binary 129 | 130 | ## AUDIO 131 | *.kar binary 132 | *.m4a binary 133 | *.mid binary 134 | *.midi binary 135 | *.mp3 binary 136 | *.ogg binary 137 | *.ra binary 138 | 139 | ## VIDEO 140 | *.3gpp binary 141 | *.3gp binary 142 | *.as binary 143 | *.asf binary 144 | *.asx binary 145 | *.fla binary 146 | *.flv binary 147 | *.m4v binary 148 | *.mng binary 149 | *.mov binary 150 | *.mp4 binary 151 | *.mpeg binary 152 | *.mpg binary 153 | *.swc binary 154 | *.swf binary 155 | *.webm binary 156 | 157 | ## ARCHIVES 158 | *.7z binary 159 | *.gz binary 160 | *.rar binary 161 | *.tar binary 162 | *.zip binary 163 | 164 | ## FONTS 165 | *.ttf binary 166 | *.eot binary 167 | *.otf binary 168 | *.woff binary 169 | *.woff2 binary 170 | 171 | ## EXECUTABLES 172 | *.exe binary 173 | *.pyc binary -------------------------------------------------------------------------------- /config/packages/camera.yaml: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # @author : Jeffrey Stone 3 | # @date : 06/10/2020 4 | # @package : Camera 5 | # @description : All the Camera related stuff 6 | ############################################################################### 7 | 8 | ####################################################################### 9 | # Using the HACS Arlo Integration 10 | # If you see the cloudflare error in the logs uncomment the user_agent line and try that 11 | # 12 | # Also, Don't forget to add the Camera section below. 13 | aarlo: 14 | host: https://my.arlo.com 15 | username: !secret arlo_user 16 | password: !secret arlo_pass 17 | db_motion_time: 30 18 | db_ding_time: 10 19 | recent_time: 10 20 | last_format: "%m-%d %H:%M" 21 | refresh_devices_every: 2 22 | verbose_debug: True 23 | tfa_host: "imap.gmail.com" 24 | tfa_username: !secret GV_USER 25 | tfa_password: !secret GV_PASS 26 | # user_agent: arlo 27 | # tfa_source: push 28 | # tfa_type: PUSH 29 | # tfa_retries: 5 # optional: default 5; attempts to check for push approved 30 | # tfa_delay: 5 # optional: default 5; seconds of delay between retries 31 | 32 | # # Arlo Integration 33 | alarm_control_panel: 34 | # Uses the custom arlo integration found in HACS 35 | - platform: aarlo 36 | home_mode_name: home 37 | away_mode_name: Armed 38 | 39 | sensor: 40 | - platform: aarlo 41 | monitored_conditions: 42 | - last_capture 43 | - total_cameras 44 | - battery_level 45 | - captured_today 46 | - signal_strength 47 | 48 | binary_sensor: 49 | - platform: aarlo 50 | monitored_conditions: 51 | - motion 52 | - sound 53 | - ding 54 | 55 | # input_boolean: 56 | # backyard_motion: 57 | # name: Backyard Motion 58 | # icon: mdi:motion-sensor 59 | 60 | # Dont forget the Camera - Commented out because its really defined below. 61 | # camera: 62 | # - platform: aarlo 63 | # ffmpeg_arguments: '-pred 1 -q:v 2' 64 | 65 | # arlo: 66 | # username: !secret arlo_user 67 | # password: !secret arlo_pass 68 | 69 | # sensor: 70 | # - platform: arlo 71 | # monitored_conditions: 72 | # - captured_today 73 | # - last_capture 74 | # - total_cameras 75 | # - battery_level 76 | # - signal_strength 77 | 78 | ####################################################################### 79 | 80 | camera: 81 | - platform: aarlo 82 | ffmpeg_arguments: "-pred 1 -q:v 2" 83 | # - platform: ffmpeg 84 | # input: !secret livingroom_cam # wyze cam v2 85 | # name: livingroom camera 86 | # - platform: ffmpeg 87 | # input: !secret kitchen_cam # wyze cam v2 88 | # name: kitchen camera 89 | # - platform: ffmpeg 90 | # input: !secret theater_cam # wyze cam v2 91 | # name: theater camera 92 | # - platform: ffmpeg 93 | # input: !secret laundry_cam # wyze cam v2 94 | # name: laundry camera 95 | # - platform: ffmpeg 96 | # name: "Backyard Ezviz" 97 | # input: !secret ezviz_c8c 98 | # - platform: ffmpeg 99 | # name: "Printer Cam" 100 | # input: !secret printer_cam 101 | ffmpeg: 102 | ffmpeg_bin: /usr/bin/ffmpeg 103 | # image_processing: 104 | # - platform: doods 105 | # url: http://192.168.7.187:8080 106 | # detector: default 107 | # scan_interval: 10000 108 | # source: 109 | # - entity_id: camera.c8c_f88801557 110 | # - entity_id: camera.reolinkduo_profile000_mainstream 111 | # - entity_id: camera.reolinkduo_profile010_mainstream 112 | # file_out: 113 | # - "/media/images/{{ camera_entity.split('.')[1] }}_latest.jpg" 114 | # labels: 115 | # - name: person 116 | # confidence: 50 117 | 118 | -------------------------------------------------------------------------------- /config/packages/spotify.yaml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ######################################## 6 | # Spotify Playlists 7 | # 8 | # Chill - https://open.spotify.com/playlist/0dIzE1HeaUz1kmPX6DTnpY 9 | # Background - https://open.spotify.com/playlist/3tKyL6gGSa5fdyCdo92L8m 10 | # Skylar - https://open.spotify.com/playlist/0hYKkmUpFFG37TtFX23cMM?si=ZQLOiV5iT2yPPBEAEqTP8w 11 | # Classical - https://open.spotify.com/playlist/09IWZAWNkNBl7TzWAoKXy3?si=NW4qtoxiTjqS0NpbynCoUQ 12 | # Christmas - https://open.spotify.com/playlist/5XgmUr452DupjZYfnAcHS0?si=Cncjle8GQd-4Uyk1k4NjyA 13 | # Jukebox - https://open.spotify.com/playlist/4rr6pL3qY8fBMrMDvpbEc8?si=NrIdThTuToCFIl1EGC_UEw 14 | # Scored - https://open.spotify.com/playlist/1XJddjZ9l71FPIJhpyL4vI?si=q-bbG_0fRjuH2wVHGIH2Yg 15 | # Disney - https://open.spotify.com/playlist/0zKtkdfsOFOg2EnjYa3QWb?si=pGDhUQlnTpaL0ESLIDozUw 16 | # Jazz - https://open.spotify.com/playlist/7INVZzAMFf4A5oiXec6FoF?si=Z62yVQ3UTjigoA8U782vtA 17 | # Bedtime - https://open.spotify.com/playlist/3luYE0ii9N8JaOaFnPW9MJ?si=mL4b0NIsTe6RcOK9ANEwGw 18 | # 19 | # Sources: 20 | # 21 | # Everywhere 22 | # Skylar's Bedroom 23 | # Living Room 24 | # Kitchen 25 | ####################################### 26 | 27 | script: 28 | 29 | play_spotify_playlist: 30 | sequence: 31 | - service: media_player.select_source 32 | data_template: 33 | entity_id: media_player.spotify 34 | source: > 35 | {{ source }} 36 | - service: media_player.play_media 37 | data_template: 38 | entity_id: media_player.spotify 39 | media_content_type: playlist 40 | media_content_id: > 41 | {% if playlist == 'chill' %} 42 | https://open.spotify.com/playlist/0dIzE1HeaUz1kmPX6DTnpY?si=qzhiPR3UQg6H1pk_rq2Eiw 43 | {% elif playlist == 'bedtime' %} 44 | https://open.spotify.com/playlist/3luYE0ii9N8JaOaFnPW9MJ?si=puEZG_VgQuqsZ8CFcxFO9w 45 | {% elif playlist == 'background' %} 46 | https://open.spotify.com/playlist/3tKyL6gGSa5fdyCdo92L8m?si=WV_PS3S6S-WmdjeopUEX8Q 47 | {% elif playlist == 'skylar' %} 48 | https://open.spotify.com/playlist/0hYKkmUpFFG37TtFX23cMM?si=ZQLOiV5iT2yPPBEAEqTP8w 49 | {% elif playlist == 'classical' %} 50 | https://open.spotify.com/playlist/09IWZAWNkNBl7TzWAoKXy3?si=gk1eUcKpRXK1xeQxvYSPcQ 51 | {% elif playlist == 'christmas' %} 52 | https://open.spotify.com/playlist/5XgmUr452DupjZYfnAcHS0?si=1HULm9WMRAGd4R7kW3gsQA 53 | {% elif playlist == 'jukebox' %} 54 | https://open.spotify.com/playlist/4rr6pL3qY8fBMrMDvpbEc8?si=qJ8fTx-IRWewI-VZcGWkfg 55 | {% elif playlist == 'scored' %} 56 | https://open.spotify.com/playlist/1XJddjZ9l71FPIJhpyL4vI?si=q-bbG_0fRjuH2wVHGIH2Yg 57 | {% elif playlist == 'disney' %} 58 | https://open.spotify.com/playlist/0zKtkdfsOFOg2EnjYa3QWb?si=pGDhUQlnTpaL0ESLIDozUw 59 | {% elif playlist == 'jazz' %} 60 | https://open.spotify.com/playlist/7INVZzAMFf4A5oiXec6FoF?si=Z62yVQ3UTjigoA8U782vtA 61 | % elif playlist == 'skypool' %} 62 | https://open.spotify.com/playlist/5A3eIpx8DGBlx4vQJ9rPZp?si=bc3412337cfd41df 63 | {% endif %} 64 | - service: media_player.shuffle_set 65 | data: 66 | entity_id: media_player.spotify 67 | shuffle: 'true' 68 | 69 | skylar_bedtime_music: 70 | alias: Slylar Bedtime Music 71 | sequence: 72 | - service: media_player.volume_set 73 | data_template: 74 | entity_id: media_player.skylar_s_bedroom 75 | volume_level: .25 76 | - service: script.play_spotify_playlist 77 | data_template: 78 | source: Skylar's Bedroom 79 | playlist: bedtime 80 | 81 | kitchen_chill_music: 82 | alias: Kitchen Chill Music 83 | sequence: 84 | - service: script.play_spotify_playlist 85 | data_template: 86 | source: Kitchen 87 | playlist: chill 88 | 89 | skylar_pool_music: 90 | alias: Skylar Pool Music 91 | sequence: 92 | - service: script.play_spotify_playlist 93 | data_template: 94 | source: Home Assistant 95 | playlist: skypool -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 |

3 | Maison des Lunes HA 4 |
5 | Maison Des Lunes 6 |
7 | Home Assistant Configuration 8 |

9 | 10 | This repo contains the working [Home Assistant](https://home-assistant.io/) configuration for **Maison Des Lunes**. Below are links to the devices currently being used, blog posts, and other HA enthusists that provided inspiration and configs to help build this config. All of the code is free to use. 11 | 12 | Be sure to follow me on twitter [@thejeffreystone](https://twitter.com/thejeffreystone) and on [YouTube](https://www.youtube.com/channel/UCipZJ6748kd8TbelSxcvcVg) where I am starting to post videos of my Home Automation journey. I also post articles about this config and other Home Automation topics at [slacker-labs.com](https://slacker-labs.com) 13 | 14 | And of course, if you have hit that :star: at the top to follow this repo what are you waiting for? You can get updates right in your notification feed everytime I push updates. Which is at least once a week and some weeks quite a bit more. 15 | 16 | #### Maison Des Lunes' Three Laws of Home Automation 17 | 18 | When designing Maison De Lune's automations I have made every effort to prioritize the solution based on the following three laws. 19 | 20 | **First Law: Every automation or action should be the result of a passive sensor or indirect action**. 21 | 22 | **Second Law: An automation can be triggered by voice command only when Law 1 cannot be achieved**. 23 | 24 | **Third Law: An automation or action can be trigger by a physical switch or as the result of a direct iteraction only when Law 1 and Law 2 cannot be achieved.** 25 | 26 | For more about how they are used visit [https://slacker-labs.com/2020/04/02/the-three-laws-of-home-automation/](https://slacker-labs.com/2020/04/02/the-three-laws-of-home-automation/) 27 | 28 |
29 | 30 | This is V6 of my config. 31 | 32 | #### General Information about Maison Des Lunes 33 | 34 | Hassio is the flavor of Home Assistant powering Maison Des Lunes these days. Currently it is running on a Home Assistant Blue. 35 | 36 | The old configurations is stored in a different repo - [Older Version](https://github.com/thejeffreystone/home-assistant-configuration) 37 | 38 | Read about the continuing work to automate **everything** over on [slacker-labs.com](https://slacker-labs.com). Feel free to reach out if you have questions. I love this stuff. 39 | 40 | One last thing. Everything in this configuration is a combination of the things I want out of a home automation system flavored with the inspiration from others using Home Assistant. In some cases I took someone else's idea and made it my own, and in some I just completely stole it. So I would be remiss if I didn't acknowledge those that inpired this journey. If you like what you see here, please checkout their configs as well. I owe them thanks for sharing their work. 41 | 42 | * [CCOSTAN](https://github.com/CCOSTAN/Home-AssistantConfig#logo) / [https://www.vCloudInfo.com](https://www.vCloudInfo.com) 43 | * [Isabella Gross Alström](https://isabellaalstrom.github.io/) 44 | * [Mahasri Kalavala](https://github.com/skalavala/mysmarthome) 45 | 46 | #### Devices: 47 | - Need to update this... 48 | 49 | #### Want to support this project? 50 | 51 |

52 | Buy me a coffeeBuy me a coffeeBuy me a coffee 53 | 54 |
55 | Find your next Home Automation device on Amazon using my affiliate link 56 |
57 | 58 | Affiliate Disclosure 59 | 60 |

61 | 62 | -------------------------------------------------------------------------------- /config/packages/space.yaml: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # @author : Jeffrey Stone 3 | # @date : 02/19/2019 4 | # @package : Space 5 | # @description : Tracking space. Inspiration and code taking from https://github.com/CCOSTAN/Home-AssistantConfig#logo 6 | # @original : https://github.com/CCOSTAN/Home-AssistantConfig/blob/master/config/packages/space.yaml 7 | ############################################################################### 8 | 9 | homeassistant: 10 | customize: 11 | binary_sensor.iss: 12 | icon: mdi:satellite-variant 13 | friendly_name: ISS Visibility 14 | 15 | hidden: False 16 | homebridge_hidden: true 17 | sensor.launch_window: 18 | hidden: False 19 | icon: mdi:rocket 20 | friendly_name: Rocket Launch Window 21 | 22 | 23 | sensor: 24 | #ISS Coordinates 25 | - platform: rest 26 | name: ISS Coordinates #Latitude & Longitude 27 | json_attributes: 28 | - iss_position 29 | - latitude 30 | - longitude 31 | - timestamp 32 | resource: "http://api.open-notify.org/iss-now.json" 33 | scan_interval: 34 | seconds: 30 35 | 36 | 37 | device_tracker: 38 | - platform: mqtt_json 39 | devices: 40 | iss: location/iss 41 | 42 | 43 | automation: 44 | #Publish ISS Location data to MQTT Topic 45 | - id: 2df7cfbe-fafc-477c-8420-812c759ba0e5 46 | alias: 'ISS Location Publish' 47 | trigger: 48 | - platform: state 49 | entity_id: sensor.iss 50 | action: 51 | service: mqtt.publish 52 | data_template: 53 | topic: location/iss 54 | payload_template: > 55 | {"longitude": "{{ states.sensor.iss.attributes.long | float }}","latitude": "{{ states.sensor.iss.attributes.lat | float }}"} 56 | retain: true 57 | - id: iss_tweet 58 | initial_state: true 59 | alias: 'ISS Tweet' 60 | trigger: 61 | - platform: zone 62 | event: enter 63 | zone: zone.iss_overhead 64 | entity_id: device_tracker.iss 65 | action: 66 | - service: script.twitter_notify_image 67 | data_template: 68 | tweet: >- 69 | {{ [ 70 | "The #ISS is passing over. Wave. #Space #theycanseeourhouse ", 71 | "The #ISS just flew by with there are {{states.binary_sensor.iss.attributes.number_of_people_in_space}} people doing cool stuff. #Space #theycanseeourhouse", 72 | "The #ISS just flew by with {{states.binary_sensor.iss.attributes.number_of_people_in_space}} people in it. #Space #theycanseeourhouse" 73 | ] | random }} 74 | image: >- 75 | {{ [ "/config/www/tweet_images/iss.jpg", 76 | "/config/www/tweet_images/iss3.png", 77 | "/config/www/tweet_images/iss4.png", 78 | "/config/www/tweet_images/iss2.jpg"] | random }} 79 | 80 | - id: full_moon_tweet 81 | initial_state: true 82 | alias: 'Full Moon -Tweet' 83 | trigger: 84 | - platform: sun 85 | event: sunset 86 | offset: -00:15:00 87 | condition: 88 | - condition: state 89 | entity_id: sensor.moon 90 | state: 'full_moon' 91 | action: 92 | # - service: script.speech_engine 93 | # data_template: 94 | # who: '{{ states.sensor.room_audio.state }}' 95 | # message: > 96 | #

97 | # {{ [ 98 | # 'There is a Full Moon out tonight. and this time it is the actual moon. And not the neighbor. ', 99 | # 'Hey look, There is the full moon. ', 100 | # 'The moon is huge! And full. ', 101 | # 'If you went outside right now you might see the full moon. Of course if you wait long enough there will be one inside the house too. ', 102 | # 'If you want to see the full moon, tonight is the night.'] 103 | # | random }} 104 | #

105 | - service: script.twitter_notify_image 106 | data_template: 107 | tweet: >- 108 | {{ [ 109 | "There is a Full Moon out tonight, and this time it's the actual moon and not the neighbor. ", 110 | "Hey look kids, There's the full moon. ", 111 | "The moon is huge! And full. "] | random + "#Space #fullmoon"}} 112 | image: >- 113 | {{ [ "/config/www/tweet_images/full_moon.jpg", 114 | "/config/www/tweet_images/moon2.jpeg", 115 | "/config/www/tweet_images/moon3.jpeg", 116 | "/config/www/tweet_images/moon4.jpeg", 117 | "/config/www/tweet_images/moon1.jpeg" 118 | ] | random }} 119 | -------------------------------------------------------------------------------- /config/packages/sysmon.yaml: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # @author : Jeffrey Stone 3 | # @date : 02/19/2019 4 | # @package : Sysmon 5 | # @description : A collection of Home Assistant and Pi Sensors 6 | ############################################################################### 7 | 8 | command_line: 9 | - sensor: 10 | name: 'Lines of Code' 11 | unique_id: lines_of_code 12 | command: "find /config -name '*.yaml' | xargs cat | wc -l" 13 | scan_interval: 20000 14 | - sensor: 15 | name: 'GitHub Stats' 16 | unique_id: github_stats 17 | command: 'curl https://api.github.com/repos/thejeffreystone/homeassistant-config' 18 | scan_interval: 20000 19 | value_template: '{{ value_json.name }}' 20 | json_attributes: 21 | - open_issues 22 | - stargazers_count 23 | 24 | sensor: 25 | - platform: systemmonitor 26 | resources: 27 | - type: disk_use_percent 28 | arg: / 29 | - type: memory_use_percent 30 | - type: network_in 31 | arg: eth0 32 | - type: network_out 33 | arg: eth0 34 | - type: load_15m 35 | - type: processor_use 36 | - type: last_boot 37 | - platform: time_date 38 | display_options: 39 | - 'time' 40 | - 'date' 41 | - 'date_time' 42 | - 'time_date' 43 | - 'date_time_iso' 44 | - 'time_utc' 45 | - 'beat' 46 | 47 | - platform: template 48 | sensors: 49 | current_version_ha: 50 | #command: python3 -c "import requests; print(requests.get('https://pypi.python.org/pypi/homeassistant/json').json()['info']['version'])" 51 | friendly_name: Current HA Version 52 | value_template: >- 53 | {{ states.binary_sensor.attributes.newest_version }} 54 | 55 | 56 | - platform: template 57 | sensors: 58 | open_pull_requests: 59 | friendly_name: Open Pull Requests 60 | value_template: >- 61 | {{ states('sensor.thejeffreystone_homeassistant_config_pull_requests') }} 62 | 63 | # For tracking number of times motion is detected 64 | # at front door in last 7 days 65 | - platform: history_stats 66 | name: Front Door Motion Yesterday 67 | entity_id: binary_sensor.front_door_motion 68 | state: 'on' 69 | type: count 70 | end: "{{ now().replace(hour=0, minute=0, second=0, microsecond=0) }}" 71 | duration: 72 | hours: 24 73 | - platform: history_stats 74 | name: Doorbell Presses Yesterday 75 | entity_id: binary_sensor.front_door_ding 76 | state: 'on' 77 | type: count 78 | end: "{{ now().replace(hour=0, minute=0, second=0, microsecond=0) }}" 79 | duration: 80 | hours: 24 81 | 82 | utility_meter: 83 | # Use the 7 day history of motion at front door 84 | # to get daily motion. 85 | hourly_frontdoor_motion: 86 | source: sensor.front_door_motion 87 | cycle: hourly 88 | daily_frontdoor_motion: 89 | source: sensor.front_door_motion 90 | cycle: daily 91 | 92 | template: 93 | - binary_sensor: 94 | - name: fridge_freezer_warming 95 | unique_id: fridge_freezer_warming_sensor 96 | state: > 97 | {{ states('sensor.acurite_986_fridge_freezer_f') | int > 15 }} 98 | device_class: problem 99 | - binary_sensor: 100 | - name: chest_freezer_warming 101 | unique_id: chest_freezer_warming_sensor 102 | state: > 103 | {{ states('sensor.acurite_986_chest_freezer_f') | int > 15 }} 104 | device_class: problem 105 | - sensor: 106 | - name: Critical Battery Count 107 | unique_id: critical_battery_count 108 | state: > 109 | {{ expand('group.critical_batteries') 110 | | rejectattr('state', 'eq', '100') 111 | | selectattr('state', 'lt', '30') | list | count }} 112 | 113 | 114 | 115 | script: 116 | battery_notification: 117 | sequence: 118 | - service: script.get_jeff_briefing 119 | response_variable: "jeff_briefing" 120 | - condition: template 121 | value_template: > 122 | {{ jeff_briefing.critical_battery_count | int > 0 }} 123 | - variables: 124 | message: > 125 | {% set batts = expand('group.critical_batteries') 126 | | rejectattr('state', 'eq', '100') 127 | | selectattr('state', 'lt', '30') | list %} 128 | {% for bat in batts %} 129 | {{ bat.name }} - {{ bat.state }}% 130 | {% endfor %} 131 | - service: script.cleanup_text 132 | data: 133 | message: > 134 | {{ message }} 135 | response_variable: "cleaned_message" 136 | - service: script.text_notify 137 | data: 138 | who: "jeff" 139 | message: > 140 | {{ cleaned_message.text }} 141 | title: "Battery List" 142 | - service: persistent_notification.dismiss 143 | data: 144 | notification_id: "battery_notification" 145 | - service: persistent_notification.create 146 | data: 147 | notification_id: "battery_notification" 148 | message: "{{ message }}" 149 | title: "Battery List - To Change" 150 | - service: todo.add_item 151 | target: 152 | entity_id: todo.ha_tasks 153 | data: 154 | item: "Replace Batteries" 155 | due_date: "{{states('sensor.date')}}" 156 | description: "Replace these batteries." -------------------------------------------------------------------------------- /config/groups.yaml: -------------------------------------------------------------------------------- 1 | 2 | 3 | ################################################################################# 4 | ### Groups ### 5 | 6 | Family: 7 | - person.jeffrey 8 | - person.katherine 9 | - person.uncle_matt 10 | - person.papa 11 | 12 | People: 13 | - person.jeffrey 14 | - person.katherine 15 | - sensor.skylar_location 16 | - person.uncle_matt 17 | - person.papa 18 | 19 | test: 20 | - group.jeffrey 21 | - group.kat 22 | 23 | jeffrey: 24 | - device_tracker.jeffrey_s_iphone_11_app 25 | - device_tracker.jeffreys_iphone_11 26 | - device_tracker.life360_jeffrey_stone 27 | 28 | kat: 29 | - device_tracker.iphone_app 30 | - device_tracker.life360_kat_stone 31 | 32 | arriving: 33 | name: Arriving 34 | entities: [] 35 | 36 | kitchen_occupancy: 37 | name: "Kitchen occupancy" 38 | entities: [] 39 | 40 | living_room_occupancy: 41 | entities: [] 42 | 43 | theater_occupancy: 44 | entities: [] 45 | 46 | studio_occupancy: 47 | entities: [] 48 | 49 | deck_occupancy: 50 | entities: [] 51 | 52 | skylars_bedroom_occupancy: 53 | entities: [] 54 | 55 | #- binary_sensor.skylars_bedroom_motion 56 | occupancy: 57 | - binary_sensor.living_room_motion 58 | - binary_sensor.kitchen_motion 59 | - binary_sensor.pantry_motion 60 | - binary_sensor.bar_motion 61 | - binary_sensor.master_bedroom_motion 62 | - binary_sensor.slacker_labs_motion 63 | - binary_sensor.cricut_desk_motion 64 | - binary_sensor.dungeon_motion 65 | - binary_sensor.pot_studio_motion 66 | - binary_sensor.back_door_motion 67 | - binary_sensor.theater_motion 68 | - binary_sensor.exercise_motion 69 | - binary_sensor.stairs_motion_top 70 | - binary_sensor.stairs_motion_bottom 71 | - binary_sensor.roomsense_pir_f412fae8c830 72 | 73 | rooms: 74 | - bomary_sensor.theater_occupied 75 | - binary_sensor.kitchen_occupied 76 | - binary_sensor.living_room_occupied 77 | - binary_sensor.master_bedroom_occupied 78 | - binary_sensor.skylars_bedroom_occupied 79 | - binary_sensor.studio_occupied 80 | - binary_sensor.pot_studio_occupied 81 | - binary_sensor.exercise_room_occupied 82 | 83 | occupancy_night: 84 | - binary_sensor.living_room_motion 85 | - binary_sensor.kitchen_motion 86 | - binary_sensor.pantry_motion 87 | - binary_sensor.bar_motion 88 | - binary_sensor.master_bedroom_motion 89 | - binary_sensor.slacker_labs_motion 90 | - binary_sensor.cricut_desk_motion 91 | - binary_sensor.dungeon_motion 92 | - binary_sensor.pot_studio_motion 93 | - binary_sensor.roomsense_pir_f412fae8c830 94 | 95 | stairs_occupancy: 96 | - binary_sensor.stairs_motion_bottom 97 | - binary_sensor.stairs_motion_top_occupancy 98 | 99 | room_presence: 100 | - sensor.jeff_room 101 | - sensor.kat_room 102 | - sensor.skylar_room 103 | 104 | jeff_room: 105 | - sensor.jeffs_iphone_11 106 | - sensor.jeffs_watch 107 | 108 | kat_room: 109 | - sensor.kats_iphone_11 110 | - sensor.kats_watch 111 | 112 | audio_devices: 113 | - media_player.kitchen_display 114 | - media_player.upstairs_speaker 115 | - media_player.master_bedroom_speaker 116 | - media_player.croft_speaker 117 | - media_player.studio_speaker 118 | - media_player.skylars_bedroom_speaker 119 | - media_player.theater 120 | 121 | all_echos: 122 | - media_player.living_room_echo 123 | - media_player.skylars_room 124 | - media_player.slacker_labs_echo 125 | - media_player.theater_echo 126 | - media_player.basement_echo 127 | - media_player.master_bedroom_echo 128 | 129 | Outside Lights: 130 | - light.front_porch_lights 131 | - switch.deck_lights 132 | - switch.driveway_light 133 | 134 | External Doors: 135 | - binary_sensor.kitchen_door 136 | - binary_sensor.front_door 137 | - binary_sensor.back_door 138 | - binary_sensor.basement_door 139 | - binary_sensor.garage_door 140 | 141 | Garage Doors: 142 | - binary_sensor.side_door 143 | - binary_sensor.garage_door 144 | 145 | Internal Doors: 146 | - binary_sensor.attic_door 147 | 148 | rgb lr: 149 | - light.front_door_lamp 150 | - light.living_room_lamp 151 | - light.living_room_tower_lamp 152 | 153 | livingroom lighting: 154 | - light.front_door_lamp 155 | - light.living_room_lamp 156 | - light.living_room_tower_lamp 157 | - switch.fireplace_lights 158 | 159 | livingroom lights: 160 | - light.front_door_lamp 161 | - light.living_room_lamp 162 | - switch.fireplace_lights 163 | 164 | livingroom tower: 165 | - light.living_room_tower_lamp 166 | 167 | livingroom lamps: 168 | - light.living_room_lamp 169 | - light.front_door_lamp 170 | 171 | incense: 172 | - switch.forest_incense_incense 173 | - switch.artemis 174 | - switch.incense 175 | 176 | onlyfans: 177 | - switch.croft_fan 178 | - switch.livingroom_fan 179 | 180 | Skylars Bedroom: 181 | - light.skylars_dresser_lamp 182 | - switch.rainbow_lamp # rainbow light 183 | - light.wled_skylarsroom 184 | - switch.skylars_desk 185 | 186 | Master Bedroom: 187 | - light.jeffs_lamp 188 | - light.kats_lamp 189 | - light.master_bedroom_tower_lamp 190 | 191 | driveway_motion: 192 | - binary_sensor.aarlo_motion_driveway_camera 193 | - binary_sensor.aarlo_motion_car_port 194 | 195 | critical_batteries: 196 | - sensor.aarlo_battery_level_driveway_camera 197 | - sensor.aarlo_battery_level_car_port 198 | - sensor.ring_battery 199 | 200 | 201 | kitchen: 202 | - light.kitchen_cabinets 203 | - switch.kitchen_light_strip 204 | 205 | livingroom: 206 | - light.front_door_lamp 207 | - light.living_room_lamp 208 | - light.living_room_tower_lamp 209 | - switch.fireplace_lights 210 | - switch.rail_lights 211 | 212 | vacation lights: 213 | - light.front_door_lamp 214 | - light.living_room_lamp 215 | - light.living_room_tower_lamp 216 | - light.skylars_dresser_lamp 217 | - light.kitchen_sink 218 | - light.master_bedroom_tower_lamp 219 | - light.jeff_lamp 220 | - switch.fireplace_lights 221 | 222 | theater lights: 223 | - light.theater_lights 224 | 225 | 226 | weather_alerts: 227 | - sensor.fayette_alert_1 228 | - sensor.fayette_alert_2 229 | - sensor.fayette_alert_3 230 | - sensor.fayette_alert_4 231 | - sensor.fayette_alert_5 -------------------------------------------------------------------------------- /config/packages/lighting.yaml: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # @author : thejefreystone 3 | # @date : 10/05/2020 4 | # @package : Lighting 5 | # @description : All the Lightning specific configs. 6 | ############################################################################### 7 | 8 | input_number: 9 | master_bedroom_wakeup: 10 | name: Master Bedroom Wakeup Lighting 11 | initial: 8.5 12 | min: 8.5 13 | max: 255 14 | step: 8.5 15 | 16 | 17 | script: 18 | 19 | livingroom_lamps_on: 20 | sequence: 21 | - service: scene.turn_on 22 | entity_id: scene.normal_livingroom_lighting 23 | 24 | # Turn on Living Room Lights if sun is down or cloud coverage is above 70% 25 | # livingroom_lamps_on_dark: 26 | # sequence: 27 | # - condition: or 28 | # conditions: 29 | # - condition: state 30 | # entity_id: sun.sun 31 | # state: 'below_horizon' 32 | # - service: scene.turn_on 33 | # entity_id: scene.normal_livingroom_lighting 34 | 35 | # # Turn off Living Room Lights if sun is up and it is sunny or partly cloudy 36 | # livingroom_lights_off: 37 | # sequence: 38 | # - condition: and 39 | # conditions: 40 | # - condition: state 41 | # entity_id: sun.sun 42 | # state: 'above_horizon' 43 | # - condition: state 44 | # entity_id: binary_sensor.living_room_motion 45 | # state: 'off' 46 | # - condition: template 47 | # value_template: > 48 | # {%- if states.weather.home.state == "sunny" or states.weather.home.state == "partlycloudy" -%} 49 | # true 50 | # {%- endif -%} 51 | # - service: group.turn_off 52 | # entity_id: group.livingroom 53 | 54 | 55 | ################################################# 56 | 57 | 58 | theater_lights_down: 59 | sequence: 60 | - service: scene.turn_on 61 | entity_id: scene.theater_dim 62 | - delay: 63 | minutes: 1 64 | - service: scene.turn_on 65 | entity_id: scene.theater_dark 66 | 67 | theater_lights_up: 68 | sequence: 69 | - service: scene.turn_on 70 | entity_id: scene.theater_dim 71 | - delay: 72 | minutes: 1 73 | - service: scene.turn_on 74 | entity_id: scene.theater_bright 75 | 76 | ################################################# 77 | 78 | master_bedroom_lights_w_level: 79 | sequence: 80 | - service: light.turn_on 81 | entity_id: light.kats_lamp, light.master_bedroom_tower_lamp, light.jeffs_lamp 82 | data: 83 | brightness: > 84 | {{ level | int }} 85 | color_temp: 369 86 | 87 | master_bedroom_nightlight: 88 | sequence: 89 | - service: scene.turn_on 90 | entity_id: scene.master_bedroom_nightlight 91 | - delay: '00:04:00' 92 | - service: scene.turn_on 93 | entity_id: scene.master_bedroom_off 94 | 95 | master_bedroom_morning_wakeup_lighting: 96 | sequence: 97 | - repeat: 98 | while: 99 | - condition: template 100 | value_template: '{{ states("input_number.master_bedroom_wakeup") | int < 256 }}' 101 | sequence: 102 | - service: script.master_bedroom_lights_w_level 103 | data: 104 | level: '{{ states("input_number.master_bedroom_wakeup") }}' 105 | - service: input_number.increment 106 | entity_id: input_number.master_bedroom_wakeup 107 | - delay: 00:01:00 108 | - service: input_number.set_value 109 | data: 110 | entity_id: input_number.master_bedroom_wakeup 111 | value: 8.5 112 | 113 | 114 | ################################################# 115 | studio_sleep: 116 | sequence: 117 | - if: 118 | - condition: template 119 | value_template: >- 120 | {{ is_state('sensor.ender5_state','idle') and states('sensor.octoprint_print_status') not in ['Printing'] }} 121 | then: 122 | - service: light.turn_off 123 | entity_id: light.printer_backlight 124 | - service: light.turn_off 125 | data: {} 126 | target: 127 | area_id: studio 128 | - service: switch.turn_off 129 | data: {} 130 | target: 131 | area_id: studio 132 | 133 | 134 | ################################################# 135 | get_room_scenes: 136 | sequence: 137 | - variables: 138 | area: > 139 | {{ room }} 140 | normal: > 141 | {{ states.scene | 142 | selectattr('entity_id', 'in', area_entities(area)) | 143 | selectattr('entity_id', 'search', '(normal)') | 144 | map(attribute='entity_id') | 145 | list | first }} 146 | dim: > 147 | {{ states.scene | 148 | selectattr('entity_id', 'in', area_entities(area)) | 149 | selectattr('entity_id', 'search', '(dim)') | 150 | map(attribute='entity_id') | 151 | list | first }} 152 | night: > 153 | {{ states.scene | 154 | selectattr('entity_id', 'in', area_entities(area)) | 155 | selectattr('entity_id', 'search', '(night)') | 156 | map(attribute='entity_id') | 157 | list | first }} 158 | scenes: > 159 | {"normal":"{{normal}}", 160 | "dim":"{{dim}}", 161 | "night":"{{night}}"} 162 | - stop: "Alright. Im done." 163 | response_variable: "scenes" 164 | get_room_lights: 165 | sequence: 166 | - variables: 167 | area: > 168 | {{ room }} 169 | entities: > 170 | {% set lights = states.light | 171 | selectattr('entity_id', 'in', area_entities(area)) | 172 | map(attribute='entity_id') | 173 | list | join(',') %} 174 | {"lights":"{{lights}}"} 175 | - stop: "Alright. Im done." 176 | response_variable: "entities" 177 | 178 | master_bedroom_lights_off: 179 | sequence: 180 | - service: input_boolean.turn_off 181 | entity_id: input_boolean.light_override 182 | - service: light.turn_off 183 | entity_id: light.kats_lamp, light.master_bedroom_tower_lamp, light.jeffs_lamp 184 | 185 | master_bedroom_lights_override: 186 | sequence: 187 | - service: input_boolean.toggle 188 | entity_id: input_boolean.light_override 189 | 190 | -------------------------------------------------------------------------------- /config/customize.yaml: -------------------------------------------------------------------------------- 1 | ### CUSTOMIZE ### 2 | 3 | # Speedtest # 4 | sensor.speedtest_ping: 5 | icon: mdi:speedometer 6 | friendly_name: Ping 7 | sensor.speedtest_download: 8 | icon: mdi:download 9 | friendly_name: Download 10 | sensor.speedtest_upload: 11 | icon: mdi:upload 12 | friendly_name: Upload 13 | 14 | # Jeff # 15 | 16 | sensor.jeffrey_location: 17 | entity_picture: !secret JEFF_ICON 18 | friendly_name: Jeff 19 | sensor.jeff_location: 20 | entity_picture: !secret JEFF_ICON 21 | sensor.jeff_destination: 22 | icon: mdi:google-maps 23 | name: "Jeffs Destination" 24 | device_tracker.jeffreystonesiphone: 25 | entity_picture: !secret JEFF_ICON 26 | friendly_name: Jeff 27 | sensor.jeff_iphone_batt: 28 | friendly_name: "Jeff's iPhone Battery" 29 | sensor.jeff_ett_home: 30 | friendly_name: "Jeff's ETA Home" 31 | icon: mdi:car 32 | device_tracker.jeffreystonesipad: 33 | icon: mdi:tablet-ipad 34 | friendly_name: "Jeff's iPad" 35 | device_tracker.jeffreysmbp: 36 | icon: mdi:laptop-mac 37 | friendly_name: "Jeff's MacBook" 38 | device_tracker.jstonemac: 39 | icon: mdi:laptop-mac 40 | friendly_name: "Jeff's Work Mac" 41 | device_tracker.jeffreysapple_watch: 42 | friendly_name: "Jeff's Watch" 43 | icon: mdi:watch 44 | 45 | 46 | # Kat ## 47 | device_tracker.iphone: 48 | entity_picture: !secret KAT_ICON 49 | friendly_name: Kat 50 | sensor.kat_location: 51 | entity_picture: !secret KAT_ICON 52 | sensor.kat_iphone_batt: 53 | friendly_name: "Kat's iPhone Battery" 54 | device_tracker.katherinesipad: 55 | icon: mdi:tablet-ipad 56 | friendly_name: "Kat's Ipad" 57 | device_tracker.katherinesmini: 58 | icon: mdi:desktop-mac 59 | friendly_name: "Kat's Mini" 60 | sensor.kat_ett_home: 61 | friendly_name: "Kat's ETA Home" 62 | icon: mdi:car 63 | sensor.kat_destination: 64 | icon: mdi:google-maps 65 | name: "Kats Destination" 66 | 67 | # Skylar 68 | 69 | sensor.skylar_location: 70 | entity_picture: !secret SKYLAR_ICON 71 | 72 | # Device ## 73 | device_tracker.gateway2f3bca: 74 | icon: mdi:nest-thermostat 75 | friendly_name: Honeywell 76 | sensor.appletv: 77 | icon: mdi:apple 78 | sensor.roku: 79 | icon: mdi:television 80 | sensor.xboxone: 81 | icon: mdi:xbox 82 | sensor.chromecast: 83 | icon: mdi:cast 84 | sensor.samsungtv: 85 | icon: mdi:television 86 | sensor.amazon_dot_lr: 87 | icon: mdi:amazon 88 | sensor.amazon_dot_kn: 89 | icon: mdi:amazon 90 | sensor.honeywell: 91 | icon: mdi:thermostat 92 | sensor.smartthings: 93 | icon: mdi:router-wireless 94 | sensor.eero_loft: 95 | icon: mdi:router-wireless 96 | sensor.eero_livingroom: 97 | icon: mdi:router-wireless 98 | media_player.roku_5s6719003683: 99 | friendly_name: Roku Living Room 100 | icon: mdi:youtube-tv 101 | device_tracker.00a0dea3ed2f: 102 | friendly_name: Yamaha AV 103 | icon: mdi:surround-sound 104 | media_player.pn60e550_pn60e550: 105 | name: Samsung TV 106 | icon: mdi:television 107 | media_player.hass_speaker: 108 | name: AH Speaker 109 | icon: mdi:speaker 110 | media_player.yamaha_receiver_theater: 111 | icon: mdi:audio-video 112 | switch.main_theater: 113 | icon: mdi:audio-video 114 | 115 | # Switches and Lights ## 116 | switch.fireplace_lights: 117 | icon: mdi:spotlight-beam 118 | switch.tower_lamp: 119 | icon: mdi:lightbulb 120 | switch.driveway_light: 121 | icon: mdi:lightbulb 122 | switch.side_door: 123 | icon: mdi:lightbulb 124 | switch.front_porch: 125 | icon: mdi:lightbulb 126 | switch.front_lamp: 127 | icon: mdi:lightbulb 128 | switch.upstairs_light: 129 | icon: mdi:lightbulb 130 | cover.garage_door: 131 | device_class: garage 132 | friendly_name: Garage Door 133 | homebridge_cover_type: garage_door 134 | switch.loft_fan: 135 | friendly_name: "Loft Box Fan" 136 | icon: mdi:fan 137 | switch.house_secured: 138 | name: House Secured 139 | icon: mdi:lock 140 | switch.vacation_mode: 141 | name: Vacation Mode 142 | icon: mdi:airplane-takeoff 143 | switch.guest_mode: 144 | name: Guest Mode 145 | icon: mdi:account-multiple 146 | switch.notifications_to_kat: 147 | name: Notify Katherine 148 | icon: mdi:telegram 149 | switch.notifications_to_jeff: 150 | name: Notify Jeff 151 | icon: mdi:telegram 152 | switch.automations: 153 | name: automations 154 | icon: mdi:home-automation 155 | switch.kitchen_cabinets: 156 | icon: mdi:lightbulb 157 | switch.kitchen_light_strip: 158 | icon: mdi:lightbulb 159 | switch.garage_alarm: 160 | name: Garage Door Alarm 161 | icon: mdi:alert 162 | input_select.trash_pickup: 163 | name: Trash Pickup 164 | icon: mdi:delete-variant 165 | input_select.recycle_pickup: 166 | name: Recycle Pickup 167 | icon: mdi:delete-variant 168 | switch.trash_notification: 169 | name: Trash Notifications 170 | icon: mdi:telegram 171 | switch.master_bedroom_fan: 172 | icon: mdi:fan 173 | switch.incense: 174 | icon: mdi:flower 175 | switch.christmas_tree_lights: 176 | icon: mdi:lightbulb 177 | switch.christmas_lights: 178 | icon: mdi:lightbulb 179 | switch.rainbow_light: 180 | icon: mdi:lightbulb 181 | 182 | # Travel Times ## 183 | sensor.home_to_summit: 184 | friendly_name: "Home to Summit" 185 | icon: mdi:car 186 | sensor.home_to_zoo: 187 | friendly_name: "Home to Zoo Atlanta" 188 | icon: mdi:car 189 | 190 | 191 | # Various Sensors ## 192 | sensor.kitchen_fire: 193 | name: Kitchen Smoke Detector 194 | icon: mdi:tower-fire 195 | sensor.smoke_kitchen: 196 | icon: mdi:fire 197 | 198 | sensor.ha_uptime: 199 | friendly_name: HA Uptime 200 | icon: mdi:clock-start 201 | sensor.installed_version: 202 | friendly_name: Installed 203 | icon: mdi:folder-download 204 | sensor.lets_encrypt_expiration: 205 | friendly_name: Lets Encrypt Expiration 206 | icon: mdi:timelapse 207 | sensor.current_ha_version: 208 | friendly_name: Latest Release 209 | icon: mdi:github-circle 210 | sensor.connected_clients: 211 | friendly_name: Connections 212 | icon: mdi:lan-connect 213 | zwave.aeotec_zw090_zstick_gen5_us: 214 | friendly_name: Zwave USB Hub 215 | sensor.ha_v2db: 216 | friendly_name: HA Database 217 | icon: mdi:file 218 | sensor.ha_log: 219 | friendly_name: HA Log 220 | icon: mdi:file 221 | sensor.accurite_back_porch_temperature: 222 | friendly_name: Back Porch Temp 223 | icon: mdi:thermometer 224 | unit_of_measurement: '°F' 225 | sensor.accurite_back_porch_humidity: 226 | friendly_name: Back Porch Humidity 227 | icon: mdi:water-percent 228 | unit_of_measurement: '%' 229 | sensor.accurite_garage_temperature: 230 | friendly_name: Garage Temp 231 | icon: mdi:thermometer 232 | unit_of_measurement: '°F' 233 | sensor.accurite_garage_humidity: 234 | friendly_name: Garage Humidity 235 | icon: mdi:water-percent 236 | unit_of_measurement: '%' 237 | binary_sensor.garage_dome_sensor: 238 | friendly_name: Garage Motion 239 | sensor.washer_power: 240 | friendly_name: Washer Power 241 | icon: mdi:power-plug 242 | unit_of_measurement: 'w' 243 | sensor.washer: 244 | icon: mdi:power-plug 245 | 246 | 247 | binary_sensor.roomsense_iq_presence: 248 | device_class: occupancy -------------------------------------------------------------------------------- /config/packages/clock_chime.yaml: -------------------------------------------------------------------------------- 1 | ##################################################################### 2 | # Origianl Repo: @chrisron95 - https://raw.githubusercontent.com/chrisron95/home-assistant-config/master/packages/clock_chime.yaml 3 | ## Plays the number of cuckoos per hour and 1 on the half hour. 4 | # More Info and Video: https://www.vcloudinfo.com/2017/11/building-digital-cuckoo-clock-with-home.html 5 | 6 | # Modified from Chris Heder (@chrisron95) for Maison Des Lunes 7 | # Setup package to make everything configurable. 8 | # Added: 9 | # - Ability to select sound between Cuckoo and Grandfather Clock 10 | # - Quarter toll ability 11 | # - Ability to disable quarter and half tolls, and chime entirely 12 | # - Time helpers for start and stop times. 13 | # 14 | # Changed: 15 | # - Now runs every 15 minutes rather than only every half hour 16 | # - Triggers have IDs now which allows me to replace the time templates 17 | ##################################################################### 18 | 19 | input_boolean: 20 | clock_chime: 21 | name: Clock Chime 22 | icon: mdi:alarm 23 | clock_chime_half_toll: 24 | name: Clock Chime Half Hour Toll 25 | icon: mdi:alarm 26 | clock_chime_quarter_toll: 27 | name: Clock Chime Quarter Hour Toll 28 | icon: mdi:alarm 29 | 30 | input_datetime: 31 | clock_chime_on_time: 32 | name: Clock Chime On Time 33 | has_date: false 34 | has_time: true 35 | clock_chime_off_time: 36 | name: Clock Chime Off Time 37 | has_date: false 38 | has_time: true 39 | 40 | input_select: 41 | clock_chime_sound: 42 | name: Clock Chime Sound 43 | options: 44 | - Cuckoo Clock 45 | - Grandfather Clock 46 | icon: mdi:bell-ring 47 | 48 | automation: 49 | - alias: Clock Chime 50 | id: clock_chime 51 | mode: restart 52 | # Trigger every 15 minutes. The ID lets you know which one is current, rather than a time template. 53 | # This accounts for the delay when waiting for media player to stop playing, just in case it lasts too long. 54 | trigger: 55 | - platform: time_pattern 56 | minutes: 0 57 | id: "0" 58 | - platform: time_pattern 59 | minutes: 15 60 | id: "15" 61 | - platform: time_pattern 62 | minutes: 30 63 | id: "30" 64 | - platform: time_pattern 65 | minutes: 45 66 | id: "45" 67 | 68 | condition: 69 | - condition: time 70 | after: input_datetime.clock_chime_on_time 71 | before: input_datetime.clock_chime_off_time 72 | - condition: state 73 | entity_id: input_boolean.audible_notifications 74 | state: "on" 75 | - condition: state # Make sure the chime is enabled. 76 | entity_id: input_boolean.clock_chime 77 | state: "on" 78 | - condition: numeric_state # TV Off 79 | entity_id: sensor.power_switch_electric_consumption_w 80 | below: 100 81 | - condition: or # Either we are home or Guest_Mode is on. 82 | conditions: 83 | - condition: state 84 | entity_id: binary_sensor.family_home 85 | state: "on" 86 | - condition: state 87 | entity_id: input_boolean.guest_mode 88 | state: "on" 89 | 90 | action: 91 | - choose: 92 | # Check for quarter and half hour trigger, and stop if it should be disabled. 93 | - conditions: 94 | - condition: or 95 | conditions: 96 | - condition: trigger 97 | id: "15" 98 | - condition: trigger 99 | id: "45" 100 | sequence: 101 | - condition: or 102 | conditions: 103 | # Don't play the quarter toll if it's disabled. 104 | - condition: state 105 | entity_id: input_boolean.clock_chime_quarter_toll 106 | state: "off" 107 | # Also don't play the quarter toll if Cuckoo Clock is selected as it's not needed. 108 | - condition: state 109 | entity_id: input_select.clock_chime_sound 110 | state: Cuckoo Clock 111 | - stop: "Quarter Toll Disabled" 112 | - conditions: 113 | - condition: trigger 114 | id: "30" 115 | sequence: 116 | # Don't play the half toll if it's disabled. 117 | - condition: state 118 | entity_id: input_boolean.clock_chime_half_toll 119 | state: "off" 120 | - stop: "Half Toll Disabled" 121 | default: [] 122 | - if: 123 | - condition: state 124 | entity_id: media_player.ha_blue 125 | state: 'idle' 126 | then: 127 | - service: media_player.volume_set 128 | data: 129 | entity_id: media_player.ha_blue 130 | volume_level: 0.25 131 | - service: media_player.play_media 132 | data: 133 | entity_id: > 134 | media_player.ha_blue 135 | media_content_id: > 136 | {% if states("input_select.clock_chime_sound") == "Cuckoo Clock" %} 137 | {% if trigger.id == "30" %} 138 | https://slackerlabs.s3.amazonaws.com/audio/cuckoo/cuckoo-clock-01.mp3 139 | {% else %} 140 | https://slackerlabs.s3.amazonaws.com/audio/cuckoo/cuckoo-clock-{{now().strftime("%I")}}.mp3 141 | {% endif %} 142 | {% elif states("input_select.clock_chime_sound") == "Grandfather Clock" %} 143 | {% if trigger.id == "15" %} 144 | https://slackerlabs.s3.amazonaws.com/audio/gfclock/toll-1quarter.mp3 145 | {% elif trigger.id == "30" %} 146 | https://slackerlabs.s3.amazonaws.com/audio/gfclock/toll-2quarter.mp3 147 | {% elif trigger.id == "45" %} 148 | https://slackerlabs.s3.amazonaws.com/audio/gfclock/toll-3quarter.mp3 149 | {% else %} 150 | https://slackerlabs.s3.amazonaws.com/audio/gfclock/{{now().strftime("%I")}}-hour.mp3 151 | {% endif %} 152 | {% endif %} 153 | media_content_type: music 154 | else: 155 | - service: script.jarvis_voice 156 | data: 157 | who: living_room 158 | message: > # Use the trigger ID to specify which sound to play. 159 | {% if states("input_select.clock_chime_sound") == "Cuckoo Clock" %} 160 | {% if trigger.id == "30" %} 161 |