commit 53bf393d1418f1feeeb012a41704f3f94653d476 Author: CeeWeasel Date: Sun Apr 14 14:08:56 2024 -0400 initial push diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..802a56e --- /dev/null +++ b/.gitignore @@ -0,0 +1,83 @@ +www/Default Profile.properties +.DS_Store +.google.token +.HA_VERSION +.uuid +.vscode +.shopping_list.json +.ip_authenticated.yaml +.watchman_report.txt +watchman_report.txt +.vacuum + +.storage/ +.cloud/ +.automatic/ +.tts.token +customize.yaml +image/ +open-zwave/ +zigbee2mqtt/ +scenes.yaml.orig +www/community +deps/ +tts/*.mp3 +www/*.html +www/*.png +www/*.jpg +www/*.mp3 +www/audio +www/Default*Profile.properties +node-red/ +media/ +custom_components/ +custom_logs/ +snapshots/ +rtl_433/ +components/packages/openmindsai/openminds_sensor.yaml +/lovelace/private + +secrets.yaml +google_calendars.yaml +*calendars*.* +known*.yaml +scenes.yaml +automations.yaml +scripts.yaml +ip_bans.yaml +frigate.yaml +frigate.yml +#frigate*.yaml +#frig*.yml +swatch.yaml +swatch*.yaml +rtl_433.conf +*.conf.template* +go2rtc-1.0.0 +go2rtc.yaml + +nest.conf +harmony_harmony_hub.conf +html5_push_registrations.conf +notify.log +home-assistant_v2.db +*.db* + +home-assistant.log +*.log* + +OZW_Log.txt + +pyozw.sqlite + +*.xml +*.py +*.pyc +*.js +*.json +**/*.json +*.json* +*.csv +*.csv* +**/*.csv + diff --git a/.ssh/id_rsa b/.ssh/id_rsa new file mode 100644 index 0000000..ceb1778 --- /dev/null +++ b/.ssh/id_rsa @@ -0,0 +1,49 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAACFwAAAAdzc2gtcn +NhAAAAAwEAAQAAAgEAm/7yR8fpiwGnzFsibB4osWS1QpWoXSpPDO/LGWicHZqm+BNv799J +F0xsWxORnqpiDm9gssPrLZyBR4yqHkAQ/f3bc6wjc+rDWjh5hcKm9KOZg6esqsFQNjpGTX +wcjFU1oy+UCAeT3aY6MC/doKQ2WscpSaRzPe52213IqP6Abt0emhWjCKS2yC8lktqhQc9u +WRB75KmAB/ZXYuPO48PjmOEpIhSfG57PYB7YXAWFEG6wmkoQDx10ACGH7MJFUY0YXeqkzY +/x8FLx+sIXAWx8RaOYtXe9pwjPnaziDNMlrdtgIq3OVFOutKQxKEma5iQr5xT2kbmG26rE +IfpmTUBu+YCgdC2kySg8xGdpHnardIhX9tsBHAp+JZEd0nZUF89oGeUq9eRCjojniCaEWU +V3FOnJuhKaFBeon2E2R8psaQTDLHFytBGMZzoqUNDOOrKsSLtQnuMrc13uu7BAhuM6jAp8 +iQeHZTB/7S0VibMqQ0B0ARJJaE62HZmGbRlOAALScA61jWPuOobSzp5abhE/1gnebW/41a +x+zNroq64c4if5WGc6nOPB8BnCRE5rGewRvjJVfqytlVCVTbUOSnnLR5U1FClckF05kUnP +j0f1EmlkX+8SuVxxYXJfhgBFOyiBEGBh5v8Yca22JDbjVYE4GWyCmRK4Cn29P1IBUS8f2p +cAAAdAaZRbYmmUW2IAAAAHc3NoLXJzYQAAAgEAm/7yR8fpiwGnzFsibB4osWS1QpWoXSpP +DO/LGWicHZqm+BNv799JF0xsWxORnqpiDm9gssPrLZyBR4yqHkAQ/f3bc6wjc+rDWjh5hc +Km9KOZg6esqsFQNjpGTXwcjFU1oy+UCAeT3aY6MC/doKQ2WscpSaRzPe52213IqP6Abt0e +mhWjCKS2yC8lktqhQc9uWRB75KmAB/ZXYuPO48PjmOEpIhSfG57PYB7YXAWFEG6wmkoQDx +10ACGH7MJFUY0YXeqkzY/x8FLx+sIXAWx8RaOYtXe9pwjPnaziDNMlrdtgIq3OVFOutKQx +KEma5iQr5xT2kbmG26rEIfpmTUBu+YCgdC2kySg8xGdpHnardIhX9tsBHAp+JZEd0nZUF8 +9oGeUq9eRCjojniCaEWUV3FOnJuhKaFBeon2E2R8psaQTDLHFytBGMZzoqUNDOOrKsSLtQ +nuMrc13uu7BAhuM6jAp8iQeHZTB/7S0VibMqQ0B0ARJJaE62HZmGbRlOAALScA61jWPuOo +bSzp5abhE/1gnebW/41ax+zNroq64c4if5WGc6nOPB8BnCRE5rGewRvjJVfqytlVCVTbUO +SnnLR5U1FClckF05kUnPj0f1EmlkX+8SuVxxYXJfhgBFOyiBEGBh5v8Yca22JDbjVYE4GW +yCmRK4Cn29P1IBUS8f2pcAAAADAQABAAACAA4ZyYS7iVzLVYOfaUkkoMEIPWo7ZPCm9mZQ +9qbhUdtLM3SRLTkdkdnNSq4g4rTY6ewsHS2LkCKbVwRErsv1NpP+8mtOUBYWTnpFSJbStY +y/jQzdhzoYJ0v/kINIiLwWp7aMgnEHXlJWyEO6z+nJbjBeeFjzyIb8mznRDGZaOvnKew2q +jwYk/XCy8k6H/LOaMHtUhh5xQ+V0WwnRVc440sXq9HDkNE2m2U/y+dO3nAOUPdp0f2ceXn +H0lfjMxr9MZbt3jlYWgOQcW0szaCj0yXbyBsfAfyAuJ7Y0/mnyXCGPBu2bkF8HAW/Kt7bQ +kHPlKSLGPlOF1a7djMUVgVHSVTWMThdnz7XlpY67FCMZAKYnvqha4XIArRWIgJ2qHs1pWZ +V2r1NUsotUbo1P/tFFrWelIxXrcznRdC65PUKeBWw08hfnDw06PbQVRaxoJVLOy6plILAF +Mi7r1Lcjalm1nIp6Z0LR09+xElWdewtHZAaY8SXbLLqvraGZERDRqEIrIVQIG7V9qd1Lni +S2KIDv5R0GHgXfuAa1VxY0DZrejb+GMK6zmf+p9EM4wUZl2HqRnwZlqEL7jXA6LswYSMzM +UEgCE24ulBPtyWub/bua3/KJIrxwU/+mZArqRntrn1xaoCed4J5pVOrgK6s3YxxHmSkOE6 +CuLxjTBMMkIdPHmzpBAAABAEMVDWKMfeWDHQTTZvZbpFUUVDzPYFfKDE4lC5+Ky3a4N+tE +FCE+rmEv/SJzm+yVab7PcVwOmANgDArPVpfVJaKjuLfUBNodW9KeZiKRlQcdlDqcCaV8b0 +AqwJSqUR4QGobzMMtuJOq50LTnArgRVqb1BinDIu30ELuaxX/5QwVN7V8MqjSCzLKBqnN8 +e0wUxp1gQSZhwjNC/GQI65OwdOJq/u1rRA2PIEL0BK4rxIMN+ojF+IF7hpb7LNSXyJLOSi +rkp3Gm+e7gE5CXPL98gGNwGW8axglY3B4UiBbbbIo/TZ5cvd4El9H/lyX+JIdgpkWcfEnZ +fmb7kU3cIJLUAbAAAAEBAMj1Afsk2+8logcPkmdYb9Rd1oFZQ5G9OiL01R1Nt9/syZuqyq +dnZMNkJudHy1QwzD5wc15haQcz1pxBeZlHYY+k260wjrN/qirzlWgQ3hZ7BDd0Jk7v+hxv +bVwahu/c7Sf3fh+98R1mSwh4Vj9+3exsmw17ir2oclpdkVpg3A/spaPrRcouptAzJ1W4na +IjNbL2cP4p0byWF4mn9vMuUEVaj9xipZmuCl5xkQ8BugC1J+KDAK8yruICr4U5e+a6/nm0 +ldasuDaDXxto3bEWOrKsHVEfrXVRaeIeaMDRMSPsWYOJcig7A7kAzLOJr9MkMrSWoTnCrG +/J76pbT/kO6bkAAAEBAMa5SX5r+W/oyuI2tX8AFXP8MkLCxeJofqKdkuxHN07E1Cot+aCD +Wd6rO/kNIxiR8A6ffx5OOG5nSzbeg2BVKOOloA7N+Wfy4ewMT0ugBXxHr/9R9q7BxyB/Wb +tHfDxi+a4RsdZiidBKQ0DC2c6fNcA/dLKV89jypfHHHPe/3BErUKoRFOT3+R2rkPjkk2YI +4Yoc4Wda7IriKNKOte7vWCdod85mbmOp4r/JvHJz5qgNPtEtNsgMoJ1JOn0PL3+oNlZMG1 +zJqhdE6jZLZl7iaWJ73YlcUR1qPR/WY4Jmuu/Q8bgEWXGZqTLTnkCG8yzkVmqgI1Q27DlE +zlHetJLuzs8AAAAGaGFzc2lvAQIDBAU= +-----END OPENSSH PRIVATE KEY----- diff --git a/.ssh/id_rsa.pub b/.ssh/id_rsa.pub new file mode 100644 index 0000000..2270dd9 --- /dev/null +++ b/.ssh/id_rsa.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCb/vJHx+mLAafMWyJsHiixZLVClahdKk8M78sZaJwdmqb4E2/v30kXTGxbE5GeqmIOb2Cyw+stnIFHjKoeQBD9/dtzrCNz6sNaOHmFwqb0o5mDp6yqwVA2OkZNfByMVTWjL5QIB5PdpjowL92gpDZaxylJpHM97nbbXcio/oBu3R6aFaMIpLbILyWS2qFBz25ZEHvkqYAH9ldi487jw+OY4SkiFJ8bns9gHthcBYUQbrCaShAPHXQAIYfswkVRjRhd6qTNj/HwUvH6whcBbHxFo5i1d72nCM+drOIM0yWt22Airc5UU660pDEoSZrmJCvnFPaRuYbbqsQh+mZNQG75gKB0LaTJKDzEZ2kedqt0iFf22wEcCn4lkR3SdlQXz2gZ5Sr15EKOiOeIJoRZRXcU6cm6EpoUF6ifYTZHymxpBMMscXK0EYxnOipQ0M46sqxIu1Ce4ytzXe67sECG4zqMCnyJB4dlMH/tLRWJsypDQHQBEkloTrYdmYZtGU4AAtJwDrWNY+46htLOnlpuET/WCd5tb/jVrH7M2uirrhziJ/lYZzqc48HwGcJETmsZ7BG+MlV+rK2VUJVNtQ5KectHlTUUKVyQXTmRSc+PR/USaWRf7xK5XHFhcl+GAEU7KIEQYGHm/xhxrbYkNuNVgTgZbIKZErgKfb0/UgFRLx/alw== hassio diff --git a/.timeline b/.timeline new file mode 100644 index 0000000..7934f42 --- /dev/null +++ b/.timeline @@ -0,0 +1 @@ +1699634302.417708 \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..9632185 --- /dev/null +++ b/README.md @@ -0,0 +1,709 @@ +- # home-assistant +Making a small change here and there and here but not there nor here +What about after a restore?jasd wtf?!?! +still a problem? + +Test for new one + +Hit the extensions button in VS Code (which looks like building blocks on the left toolbar) +Search for ‘@builtin TypeScript’. +Disable the TypeScript and Javascript Language Features extension +Reload + +- # Notes +* Check the state of a script +```yaml +- condition: state + entity_id: script. + state: 'on' +``` + +* Is git going to break every time now? + +I really hope this fucking works now... + +* Check if trigger exists? +```yaml +{{ trigger.from_state.state != trigger.to_state.state if defined(trigger) else false }} +``` +or +```yaml +{{ trigger.from_state and trigger.from_state.attributes.mains | lower != 'unknown' }} +{% if is_state("input_select.computer_area_mode", "Auto") and is_state("script.computer_area_auto", "off") %} +{% if trigger.from_state and trigger.from_state.attributes.mains | lower != 'unknown' %} from {{trigger.from_state.state}}{% endif %}{% if trigger.to_state and trigger.to_state.attributes.mains | lower != 'unknown' %} to {{trigger.to_state.state}} {% endif %} +ran {% if defined(trigger)%}because {{ trigger.entity_id }} changed{% endif %}{% if trigger.from_state and trigger.from_state.attributes.mains | lower != 'unknown' %}from {{trigger.from_state.state}}{% endif %}{% if trigger.to_state and trigger.to_state.attributes.mains | lower != 'unknown' %} to {{trigger.to_state.state}}{% endif %} +{{ trigger.entity_id }} changed from {{ trigger.from_state and trigger.from_state.attributes.mains | lower != 'unknown' }} to {{ trigger.to_state and trigger.to_state.attributes.mains | lower != 'unknown' }} +``` +This is how to actuall do it! +```yaml + - service: notify.logfile + data_template: + message: > + {{ states("sensor.date_time_iso") }} Computer Area Motion On ran + +``` + +* Check if stuff is on just after a system restart +```yaml + - platform: template + value_template: > + {{ is_state('binary_sensor.nursery_multisensor_home_security_motion_detection','off') and states('sensor.nursery_last_motion') | int <= 300 and states('sensor.system_uptime') | int >= 5 }} + prob_given_true: 0.8 + + - platform: template + value_template: > + {{ is_state('binary_sensor.nursery_multisensor_home_security_motion_detection','off') and states('sensor.nursery_last_motion') | int > 300 and states('sensor.nursery_last_motion') | int <= 600 and states('sensor.system_uptime') | int >= 5 }} + prob_given_true: 0.6 + + - platform: template + value_template: > + {{ is_state('binary_sensor.nursery_multisensor_home_security_motion_detection','off') and states('sensor.nursery_last_motion') | int > 600 and states('sensor.nursery_last_motion') | int <= 900 and states('sensor.system_uptime') | int >= 10 }} + prob_given_true: 0.4 +``` + +- # Hue Colors +Colors that are listed in gray italics do not work. All other colors have been tested successfully on Philip Hue bulbs. + +## Basic English Color Terms +- #FFFFFF White +- #000000 Black +- #FF0000 Red +- #FF7F00 Orange +- #FFFF00 Yellow +- #00FF00 Green +- #0000FF Blue +- #800080 Purple +- #FFC0CB Pink +- #A52A2A Brown +- #808080 Gray + +## RGB Color Wheel +- #FF0000 Red +- #FF7F00 Orange +- #FFFF00 Yellow +- #7FFF00 Chartreuse +- #00FF00 Green +- #00FF7F Spring Green +- #00FFFF Cyan +- #007FFF Azure +- #0000FF Blue +- #7F00FF Violet +- #FF00FF Magenta +- #FF007F Rose + +## HTML Color Names +- #F0F8FF Alice Blue +- #FAEBD7 Antique White +- #00FFFF Aqua +- #7FFFD4 Aquamarine +- #F0FFFF Azure +- #F5F5DC Beige +- ~~#FFE4C4 Bisque~~ +- #000000 Black +- ~~#FFEBCD Blanched Almond~~ +- #0000FF Blue +- #8A2BE2 Blue Violet +- #A52A2A Brown +- ~~#DEB887 BurlyWood~~ +- #5F9EA0 Cadet Blue +- #7FFF00 Chartreuse +- #D2691E Chocolate +- #FF7F50 Coral +- #6495ED Cornflower Blue +- ~~#FFF8DC Cornsilk~~ +- #DC143C Crimson +- #00FFFF Cyan +- #00008B Dark Blue +- #008B8B Dark Cyan +- #B8860B Dark Goldenrod +- #A9A9A9 Dark Gray +- #006400 Dark Green +- #BDB76B Dark Khaki +- #8B008B Dark Magenta +- #556B2F Dark Olive Green +- #FF8C00 Dark Orange +- #9932CC Dark Orchid +- #8B0000 Dark Red +- #E9967A Dark Salmon +- ~~#8FBC8F Dark Sea Green~~ +- ~~#483D8B Dark Slate Blue~~ +- #2F4F4F Dark Slate Gray +- #00CED1 Dark Turquoise +- #9400D3 Dark Violet +- #FF1493 Deep Pink +- #00BFFF Deep Sky Blue +- #696969 Dim Gray +- #1E90FF Dodger Blue +- #B22222 Fire Brick +- #FFAF0 Floral White +- #228B22 Forest Green +- #FF00FF Fuschia +- ~~#DCDCDC Gainsboro~~ +- #F8F8FF Ghost White +- #FFD700 Gold +- #DAA520 Goldenrod +- #808080 Gray +- #008000 Green +- #ADFF2F Green Yellow +- #F0FFF0 Honeydew +- #FF69B4 Hot Pink +- #CD5C5C Indian Red +- #4B0082 Indigo +- #FFFFF0 Ivory +- #F0E68C Khaki +- #E6E6FA Lavender +- #FFF0F5 Lavender Blush +- #7CFC00 Lawn Green +- #FFFACD Lemon Chiffon +- #ADD8E6 Light Blue +- #F08080 Light Coral +- #E0FFFF Light Cyan +- #FAFAD2 Light Goldenrod Yellow +- #D3D3D3 Light Gray +- #90EE90 Light Green +- #FFB6C1 Light Pink +- #FFA07A Light Salmon +- #20B2AA Light Sea Green +- #87CEFA Light Sky Blue +- #778899 Light Slate Gray +- #B0C4DE Light Steel Blue +- #FFFFE0 Light Yellow +- #00FF00 Lime +- #32CD32 Lime Green +- #FAF0E6 Linen +- #FF00FF Magenta +- #800000 Maroon +- #66CDAA Medium Aquamarine +- #0000CD Medium Blue +- ~~#BA55D3 Medium Orchid~~ +- #9370DB Medium Purple +- #3CB371 Medium Sea Green +- ~~#7B68EE Medium Slate Blue~~ +- #00FA9A Medium Spring Green +- #48D1CC Medium Turquoise +- ~~#C71585 Medium Violet Red~~ +- #191970 Midnight Blue +- #F5FFFA Mint Cream +- #FFE4E1 Misty Rose +- ~~#FFE4B5 Moccasin~~ +- #FFDEAD Navajo White +- #000080 Navy +- #FDF5E6 Old Lace +- #808000 Olive +- #6B8E23 Olive Drab +- #FFA500 Orange +- #FF4500 Orange Red +- #DA70D6 Orchid +- ~~#EEE8AA Pale Goldenrod~~ +- ~~#98FB98 Pale Green~~ +- ~~#AFEEEE Pale Turquoise~~ +- ~~#DB7093 Pale Violet Red~~ +- #FFEFD5 Papaya Whip +- #FFDAB9 Peach Puff +- #CD853F Peru +- #FFC0CB Pink +- #DDA0DD Plum +- #B0E0E6 Powder Blue +- #800080 Purple +- ~~#663399 Rebecca Purple~~ +- #FF0000 Red +- ~~#BC8F8F Rosy Brown~~ +- #4169E1 Royal Blue +- ~~#8B4513 Saddle Brown~~ +- #FA8072 Salmon +- #F4A460 Sandy Brown +- #2E8B57 Sea Green +- #FFF5EE Seashell +- #A0522D Sienna +- #C0C0C0 Silver +- #87CEEB Sky Blue +- #6A5ACD Slate Blue +- #708090 Slate Gray +- #FFFAFA Snow +- #00FF7F Spring Green +- #4682B4 Steel Blue +- #D2B48C Tan +- #008080 Teal +- #D8BFD8 Thistle +- #FF6347 Tomato +- #40E0D0 Turquoise +- #EE82EE Violet +- #F5DEB3 Wheat +- #FFFFFF White +- #F5F5F5 White Smoke +- #FFFF00 Yellow +- #9ACD32 Yellow Green + +## RYB Color Wheel +- #FF0000 Red +- ~~#FF5349 Vermilion~~ +- #FFA500 Orange +- #FFCC00 Amber +- #FFFF00 Yellow +- #7FFF00 Chartreuse +- #008000 Green +- #008080 Teal +- #0000FF Blue +- #7F00FF Violet +- #800080 Purple +- #FF00FF Magenta + +## ROYGBIV Traditional Rainbow +- #FF0000 Red +- #FFA500 Orange +- #FFFF00 Yellow +- #00FF00 Green +- #0000FF Blue +- #4B0082 Indigo +- #7F00FF Violet + +## School/Sports Teams +- #9E1B32 Alabama Crimson +- #1E4D2B Cal Poly Pomona Green +- #00563B Castleton Green +- #B31B1B Cornell Red +- #00693E Dartmouth Green +- #FE5A1D Giants Orange +- #A51C30 Harvard Crimson +- #7D110C IU Crimson (Indiana University) +- #512888 KSU Purple (Kansas State University) +- #004953 MSU Green (Michigan State University) +- #841617 Oklahoma Crimson +- #EE7F2D Princeton Orange +- #76FF7A Sacramento State Green +- #CC0000 Utah Crimson +- #FF8200 UT Orange (University of Tennessee) + +## Other Proprietary Colors +- #A4C639 Android Green +- #DA1884 Barbie Pink +- #00AB66 GO Green (GO Transit, Toronto) +- #81D8D0 Tiffany Blue + +## Crayola Crayon Colors +### Standard Colors +- ~~#EED9C4 Almond~~ +- ~~#C88A65 Antique Brass~~ +- #FDD5B1 Apricot +- #85E0E8 Aquamarine +- #7BA05B Asparagus +- ~~#FBE7B2 Banana Mania~~ +- #926F5B Beaver +- #FE6F5E Bittersweet +- #000000 Black +- #0066FF Blue +- #9999CC Blue Bell +- #C8C8CD Blue-Gray +- #9985B7 Blue-Green +- #6456B7 Blue-Violet +- #DB5079 Blush +- #C62D42 Brick Red +- #E667CE Brilliant Rose +- #AF593E Brown +- #FF7F49 Burnt Orange +- #E97451 Burnt Sienna +- #805533 Burnt Umber +- #A9B2C3 Cadet Blue +- ~~#FFFF99 Canary~~ +- #00CC99 Caribbean Green +- #E62E6B Carmine +- #FFA6C9 Carnation Pink +- #7070CC Celestial Blue +- #DA3287 Cerise +- #02A4D3 Cerulean +- #339ACC Cerulean Blue +- #736A62 Charcoal Gray +- #8C90C8 Cobalt Blue +- #DA8A67 Copper +- #93CCEA Cornflower +- #FFB7D5 Cotton Canddy +- #FED85D Dandelion +- #B33B24 Dark Venetian Red +- #1560BD Denim +- #EDC9AF Desert Sand +- #614051 Eggplant +- #CC474B English Vermilion +- #63B76C Fern +- #5FA777 Forest Green +- #C154C1 Fuschia +- #87421F Fuzzy Wuzzy +- #E6BE8A Gold +- #FCD667 Goldenrod +- #9DE093 Granny Smith Apple +- #8B8680 Gray +- #3AA655 Green +- #2887C8 Green-Blue +- #F1E788 Green-Yellow +- ~~#AFE313 Inchworm~~ +- #B9FE48 Indian Red +- #4F69C6 Indigo +- #A50B5E Jazzberry Jam +- #29AB87 Jungle Green +- #FBAED2 Lavender +- #FFFF9F Lemon Yellow +- #8FD8D8 Light Blue +- #BEE64B Light Chrome Green +- #E6735C Light Venetian Red +- #FFB97B Macaroni and Cheese +- #CC3336 Madder Lake +- #F653A6 Magenta +- #CA3435 Mahogany +- #F2C649 Maize +- #8D90A1 Manatee +- #E77200 Mango Tango +- #C32148 Maroon +- #F091A9 Mauvelous +- #6CA67C Medium Chrome Green +- #D96CBE Medium Rose +- #8F47B3 Medium Violet +- #FEBAAD Melon +- #00468C Midnight Blue +- #1AB385 Mountain Meadow +- #C8509B Mulberry +- #0066CC Navy Blue +- #B5B35C Olive Green +- #FF8833 Orange +- #FF5349 Orange-Red +- #F8D568 Orange-Yellow +- #E29CD2 Orchid +- #2D383A Outer Space +- #009DC4 Pacific Blue +- #FFCBA4 Peach +- #C3CDE6 Periwinkle +- #E12C2C Permanent Geranium Lake +- #FDD7E4 Pig Pink +- #01786F Pine Green +- #FC74FD Pink Flamingo +- #F7A38E Pink Sherbert +- #8E3179 Plum +- #652DC1 Purple Heart +- #D6AEDD Purple Mountain Majesty +- #D27D46 Raw Sienna +- #665233 Raw Umber +- #E30B5C Razzmatazz +- #ED0A3F Red +- #FF681F Red-Orange +- #BB3385 Red-Violet +- #00CCCC Robin Egg Blue +- #6B3FA0 Royal Purple +- #FF91A4 Salmon +- ~~#FD0E35 Scarlet~~ +- #93DFB8 Sea Green +- #9E5B40 Sepia +- #837050 Shadow +- #33CC99 Shamrock +- #C9C0BB Silver +- #76D7EA Sky Blue +- #ECEBBD Spring Green +- #FE4C40 Sunset Orange +- #D99A6C Tan +- #008080 Teal Blue +- #EBB0D7 Thistle +- #FC80A5 Tickle Me Pink +- #D9D6CF Timberwolf +- #00755E Tropical Rain Forest +- #DEA681 Tumbleweed +- #6CDAE7 Turquoise Blue +- #3F26BF Ultramarine Blue +- #664228 Van Dyke Brown +- #CC553D Venetian Red +- #8359A3 Violet (Purple) +- #766EC8 Violet-Blue +- #F7468A Violet-Red +- #FF9980 Vivid Tangerine +- #803790 Vivid Violet +- #FFFFFF White +- #7A89B8 Wild Blue Yonder +- #FF3399 Wild Strawberry +- #C9A0DC Wisteria +- #FBE870 Yellow +- #C5E17A Yellow-Green +- #FFAE42 Yellow-Orange + +### Fluorescent Colors +- #FF355E Radical Red +- #FD5B78 Wild Watermelon +- #FF6037 Outrageous Orange +- #FF9966 Atomic Tangerine +- #FF9933 Neon Carrot +- #FFCC33 Sunglow +- #FFFF66 Laser Lemon +- #FFFF66 Unmellow Yellow +- #CCFF00 Electric Lime +- #66FF66 Screamin' Green +- #AAF0D1 Magic Mint +- #50BFE6 Blizzard Blue +- #FF6EFF Shocking Pink +- #EE34D2 Razzle Dazzle Rose +- #FF00CC Hot Magenta +- #FF00CC Purple Pizzazz + +### Silver Swirls +- #C39953 Aztec Gold +- #A17A74 Burnished Brown +- #6D9BC3 Cerulean Frost +- #CD607E Cinnamon Satin +- #AD6F69 Copper Penny +- #2E2D88 Cosmic Cobalt +- #AB92B3 Glossy Grape +- #676767 Granite Gray +- #6EAEA1 Green Sheen +- #AE98AA Lilac Luster +- #BBB477 Misty Moss +- #AD4379 Mystic Maroon +- #B768A2 Pearly Purple +- #8BA8B7 Pewter Blue +- #5DA493 Polished Pine +- #A6A6A6 Quick Silver +- #9E5E6F Rose Dust +- #DA2C43 Rusty Red +- #778BA5 Shadow Blue +- #5FA778 Shiny Shamrock +- #5F8A8B Steel Teal +- #914E75 Sugar Plum +- #8A496B Twilight Lavender +- #56887D Wintergreen Dream + +### Gem Tones +- #64609A Amethyst +- #933709 Citrine +- #14A989 Emerald +- #469A84 Jade +- ~~#D05340 Jasper~~ +- #436CB9 Lapis Lazuli +- #469496 Malachite +- ~~#3AA8C1 Moonstone~~ +- #353839 Onyx +- ~~#ABAD48 Peridot~~ +- ~~#B07080 Pink Pearl~~ +- #BD559C Rose Quartz +- #AA4069 Ruby +- #2D5DA1 Sapphire +- #832A0D Smokey Topaz +- ~~#B56917 Tiger's Eye~~ + +## Unclassified Colors +### Shades of Red +- #A52A2A Auburn +- #F4C2C2 Baby Pink +- #7C0A02 Barn Red +- #000020 Burgundy +- #8A3324 Burnt Umber +- #E30022 Cadmium Red +- #CE2029 Cardinal +- #954535 Chesnut +- #E23D28 Chili Red +- #F88379 Congo Pink +- #F88379 Coral Pink +- #EA3C53 Desire +- #CE2029 Fire Engine Red +- #ED2939 Imperial Red +- #D7837F New York Pink +- #E63E62 Paradise Pink +- #DEA5A4 Pastel Pink +- #ED1C24 Pigment Red +- #B7410E Rust +- #FF91A4 Salmon Pink +- #E4717A Tango Pink +- #A91101 Turkey Red +- #F3D9DF Vanilla Ice +- #722F37 Wine + +### Shades of Orange +- #9F8170 Beaver +- #ED872D Cadmium Orange +- #ED9121 Carrot Orange +- #F7E7CE Champagne +- #7B3F00 Chocolate +- #D2691E Cocoa Brown +- #EDC9AF Desert Sand +- #E25822 Flame +- #E49B0F Gamboge +- #FF4F00 International Orange +- #6B4423 Kobicha +- #C19A6B Lion +- #EAA221 Marigold +- #FF9F00 Orange Peel +- #D99058 Persian Orange +- #EC5800 Persimmon +- #CD853F Peru +- #FF5A36 Portland Orange +- #FF7518 Pumpkin +- #80461B Russet +- #FF7900 Safety Orange +- #F4A460 Sandy Brown +- #D2B48C Tan +- #483C32 Taupe +- #CD5700 Tawny +- #F88379 Tea Rose +- #C19A6B Wood Brown + +### Shades of Yellow +- #FFBF00 Amber +- #F5F5DC Beige +- #F0DC82 Buff +- #E4D00A Citrine +- #FFFDD0 Cream +- #FFD300 Cyber Yellow +- #C2B280 Ecru +- #E6A817 Harvest Gold +- #F8DE7E Jasmine +- #F4CA16 Jonquil +- #C3B091 Khaki +- #FFF44F Lemon +- #F8DE7E Mellow Yellow +- #FFC40C Mikado Yellow +- #FFDB58 Mustard +- #FADA5E Naples Yellow +- #CFB53B Old Gold +- #FFEF00 Process Yellow +- #FADA5E Royal Yellow +- #EED202 Safety Yellow +- #F4C430 Saffron +- #FFD800 School Bus Yellow +- #E4D96F Straw +- #F3E5AB Vanilla + +### Shades of Green +- #4B5320 Army Green +- #8F9779 Artichoke +- #87A96B Asparagus +- #568203 Avacado +- #006A4E Bottle Green +- #4FFFB0 Bright Mint +- #ACE1AF Celadon +- #50C878 Emerald +- #4F7942 Fern Green +- #228B22 Forest Green +- #3FFF00 Harlequin +- #355E3B Hunter Green +- #138808 India Green +- #009000 Islamic Green +- #00A86B Jade +- #4CBB17 Kelly Green +- #A9BA9D Laurel Green +- #0BDA51 Malachite +- #74C365 Mantis +- #98FB98 Mint Green +- #8A9A5B Moss Green +- #39FF14 Neon Green +- #808000 Olive +- #006600 Pakistan Green +- #50C878 Paris Green +- #444C38 Rifle Green +- #679267 Russian Green +- #2E8B57 Sea Green +- #009E60 Shamrock Green +- #008000 Slytherin Green + +### Shades of Cyan +- #00FFFF Aqua +- #7FFFD4 Aquamarine +- #1B4D3E Brunswick Green +- #2F847C Celadon Green +- #B2FFFF Celeste +- #007BA7 Cerulean +- #232B2B Charleston Green +- #008B8B Dark Cyan +- #7DF9FF Electric Blue +- #4D5D53 Feldgrau +- #5E716A Gray Green +- #004953 Midnight Green +- #8DA399 Morning Blue +- #317873 Myrtle Green +- #00A693 Persian Green +- #00CCCC Robin Egg Blue +- #80DAEB Sky Blue +- #008080 Teal +- #367588 Teal Blue +- #40E0D0 Turquoise +- #43B3AE Verdigris +- #40826D Viridian + +### Shades of Blue +- #007FFF Azure +- #89CFF0 Baby Blue +- #6699CC Blue Gray +- #00BFFF Capri +- #6495ED Cornflower +- #1034A6 Egyptian Blue +- #6082B6 Glaucous +- #4C516D Independence +- #4B0082 Indigo +- #00416A Indigo Dye +- #545AA7 Liberty +- #ADD8E6 Light Blue +- #191970 Midnight Blue +- #000080 Navy (Blue) +- #CCCCFF Periwinkle +- #B0E0E6 Powder Blue +- #002387 Resolution Blue +- #082567 Sapphire +- #1D2951 Space Cadet +- #4682B4 Steel Blue +- #3F00FF Ultramarine + +### Shades of Purple +- #702963 Byzantium +- #301934 Dark Purple +- #6F00FF Electric Indigo +- #6C3082 Eminence +- #DF73FF Heliotrope +- #4B0082 Indigo +- #00416A Indigo Dye +- #880085 Mardi Gras +- #E0B0FF Mauve +- #9370DB Medium Purple +- #DA70D6 Orchid +- #78184A Pansy Purple +- #DF00FF Phlox +- #9A4EAE Purpureus +- #D8BFD8 Thistle +- #9683EC Tropical Indigo +- #66023C Tyrian Purple +- #7851A9 Royal Purple + +### Shades of Magenta +- #AB274F Amaranth +- #915C83 Antique Fuchsia +- #F4C2C2 Baby Pink +- #EFBBCC Cameo Pink +- #FFA6C9 Carnation Pink +- #E68FAC Charm Pink +- #DE6FA1 China Pink +- #FFBCD9 Cotton Candy +- #8B008B Dark Magenta +- #B53389 Fandango +- #FD3F92 French Fuchsia +- #FD6C9E French Pink +- #C74575 Fuchsia Rose +- #9F4576 Magenta Haze +- #FFDAE9 Mimi Pink +- #F77FBE Persian Pink +- #FDDDE6 Piggy Pink +- #FFC0CB Pink +- #FFDDF4 Pink Lace +- #DBB2D1 Pink Lavender +- #8E4585 Plum +- #E8CCD7 Queen Pink +- #FF007F Rose +- #AA98A9 Rose Quartz +- #FC0FC0 Shocking Pink +- #C4AEAD Silver Pink +- #CF71AF Sky Magenta +- #CF6BA9 Super Pink + +### Shades of Gray +- #B2BEB5 Ash Gray +- #848482 Battleship Gray +- #91A3B0 Cadet Gray +- #36454F Charcoal +- #696969 Dim Gray +- #727472 Gunmetal +- #343434 Jet +- #4C5866 Marengo +- #727472 Nickel +- #E5E4E2 Platinum +- #8A7F8D Rocket Metallic +- #C0C0C0 Silver +- #708090 Slate Gray \ No newline at end of file diff --git a/automations/alerts/battery_alert.yaml b/automations/alerts/battery_alert.yaml new file mode 100644 index 0000000..07cc0f3 --- /dev/null +++ b/automations/alerts/battery_alert.yaml @@ -0,0 +1,104 @@ +alias: "Battery Alert" +id: automation_battery_alert +initial_state: off +trigger: + - platform: time + at: "10:00:00" + - platform: time + at: "18:00:00" +condition: + condition: or + conditions: + - condition: template + value_template: >- + {%- set threshold = 40 -%} + {%- for item in states.light 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")) -%} + {%- if loop.first -%} + {{ true }} + {%- endif -%} + {%- endfor -%} + - condition: template + value_template: >- + {%- set threshold = 40 -%} + {%- for item in states.switch 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")) -%} + {%- if loop.first -%} + {{ true }} + {%- endif -%} + {%- endfor -%} + - condition: template + value_template: >- + {%- set threshold = 40 -%} + {%- for item in states.sensor 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")) -%} + {%- if loop.first -%} + {{ true }} + {%- endif -%} + {%- endfor -%} + - condition: template + value_template: >- + {%- set threshold = 40 -%} + {%- for item in states.zwave 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")) -%} + {%- if loop.first -%} + {{ true }} + {%- endif -%} + {%- endfor -%} + - condition: template + value_template: >- + {%- set threshold = 40 -%} + {%- for item in states.lock 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")) -%} + {%- if loop.first -%} + {{ true }} + {%- endif -%} + {%- endfor -%} +action: + - service: notify.mobile_app_pixel_7 + data: + message: >- + {% set threshold = 1 %} + {%- for item in states.light if (item.attributes.battery_level is defined and item.attributes['battery_level'] | int / 5 < 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")) -%} + {%- if loop.first -%} + {% for lobat in states.light if (lobat.attributes.battery_level is defined and lobat.attributes['battery_level'] | int / 5 < threshold) or ("battery" in lobat.name | lower and ((item.state | int < threshold and lobat.state|int != 0) or lobat.state | lower == "low" or lobat.state | lower == "unknown")) %} + {%- if loop.first %}Lights:{% endif %} + {{ lobat.name }} {{ lobat.state }}% + {%- endfor -%} + {% endif %} + {%- endfor %} + + {% set threshold = 1 %} + {%- for item in states.switch if (item.attributes.battery_level is defined and item.attributes['battery_level'] | int / 5 < 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")) -%} + {%- if loop.first -%} + {% for lobat in states.switch if (lobat.attributes.battery_level is defined and lobat.attributes['battery_level'] | int / 5 < threshold) or ("battery" in lobat.name | lower and ((item.state | int < threshold and lobat.state|int != 0) or lobat.state | lower == "low" or lobat.state | lower == "unknown")) %} + {%- if loop.first %}Switches:{% endif %} + {{ lobat.name }} {{ lobat.state }}% + {%- endfor -%} + {% endif %} + {%- endfor %} + + {% set threshold = 1 %} + {%- for item in states.sensor if (item.attributes.battery_level is defined and item.attributes['battery_level'] | int / 5 < 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")) -%} + {%- if loop.first -%} + {% for lobat in states.sensor if (lobat.attributes.battery_level is defined and lobat.attributes['battery_level'] | int / 5 < threshold) or ("battery" in lobat.name | lower and ((item.state | int < threshold and lobat.state|int != 0) or lobat.state | lower == "low" or lobat.state | lower == "unknown")) %} + {%- if loop.first %}Sensors:{% endif %} + {{ lobat.name }} {{ lobat.state }}% + {%- endfor -%} + {% endif %} + {%- endfor %} + + {% set threshold = 1 %} + {%- for item in states.zwave if (item.attributes.battery_level is defined and item.attributes['battery_level'] | int / 5 < 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")) -%} + {%- if loop.first -%} + {% for lobat in states.zwave if (lobat.attributes.battery_level is defined and lobat.attributes['battery_level'] | int / 5 < threshold) or ("battery" in lobat.name | lower and ((item.state | int < threshold and lobat.state|int != 0) or lobat.state | lower == "low" or lobat.state | lower == "unknown")) %} + {%- if loop.first %}Zwaves:{% endif %} + {{ lobat.name }} {{ lobat.state }}% + {%- endfor -%} + {% endif %} + {%- endfor %} + + {% set threshold = 1 %} + {%- for item in states.lock if (item.attributes.battery_level is defined and item.attributes['battery_level'] | int / 5 < 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")) -%} + {%- if loop.first -%} + {% for lobat in states.lock if (lobat.attributes.battery_level is defined and lobat.attributes['battery_level'] | int / 5 < threshold) or ("battery" in lobat.name | lower and ((item.state | int < threshold and lobat.state|int != 0) or lobat.state | lower == "low" or lobat.state | lower == "unknown")) %} + {%- if loop.first %}Locks:{% endif %} + {{ lobat.name }} {{ lobat.state }}% + {%- endfor -%} + {% endif %} + {%- endfor %} diff --git a/automations/alerts/battery_alert_template.yaml b/automations/alerts/battery_alert_template.yaml new file mode 100644 index 0000000..2f80698 --- /dev/null +++ b/automations/alerts/battery_alert_template.yaml @@ -0,0 +1,69 @@ +alias: "Battery Alert Template" +id: automation_battery_alert_template +initial_state: off +trigger: + - platform: time + at: "10:00:00" + - platform: time + at: "18:00:00" +condition: + condition: or + conditions: + - condition: template + value_template: >- + {%- set threshold = 40 -%} + {%- for item in states.light 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")) -%} + {%- if loop.first -%} + {{ true }} + {%- endif -%} + {%- endfor -%} + - condition: template + value_template: >- + {%- set threshold = 40 -%} + {%- for item in states.switch 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")) -%} + {%- if loop.first -%} + {{ true }} + {%- endif -%} + {%- endfor -%} + - condition: template + value_template: >- + {%- set threshold = 40 -%} + {%- for item in states.sensor 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")) -%} + {%- if loop.first -%} + {{ true }} + {%- endif -%} + {%- endfor -%} + - condition: template + value_template: >- + {%- set threshold = 40 -%} + {%- for item in states.zwave 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")) -%} + {%- if loop.first -%} + {{ true }} + {%- endif -%} + {%- endfor -%} + - condition: template + value_template: >- + {%- set threshold = 40 -%} + {%- for item in states.lock 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")) -%} + {%- if loop.first -%} + {{ true }} + {%- endif -%} + {%- endfor -%} + - condition: template + value_template: >- + {%- set threshold = 40 -%} + {%- for item in states.binary_sensor 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")) -%} + {%- if loop.first -%} + {{ true }} + {%- endif -%} + {%- endfor -%} +action: + - service: notify.mobile_app_pixel_7 + data: + message: >- + {% set threshold = 40 %} + + {% for item in states.binary_sensor if (item.attributes.battery_level is defined and item.attributes['battery_level'] | int / 5 < 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")) %} + {%- if loop.first %}Binary Sensors:{% endif %} + {{ item.name }} {{ item.attributes.battery_level / 5 }}% + {%- endfor -%} diff --git a/automations/alerts/something_open_hvac_on.yaml b/automations/alerts/something_open_hvac_on.yaml new file mode 100644 index 0000000..1c8bdc1 --- /dev/null +++ b/automations/alerts/something_open_hvac_on.yaml @@ -0,0 +1,26 @@ +alias: "Alert that something is open and the HVAC equipment is on" +id: automation_something_open_hvac_on + +trigger: + platform: state + entity_id: binary_sensor.something_open_hvac_on + from: "off" + to: "on" + +action: + - service: notify.mobile_app_pixel_7 + data: + message: >- + The following are open: "{{ dict((states|selectattr('entity_id', 'in', state_attr('group.my_hvac_affecting_openings', 'entity_id'))|list)|groupby('state'))['on']|map(attribute='name')|list|join(', ') }}" + data: + channel: "Alerts" + importance: high + actions: + - action: "ALARM" # The key you are sending for the event + title: "Sound Alarm" # The button title + - action: "URI" # Must be set to URI if you plan to use a URI + title: "Open Url" + uri: "https://google.com" # URL to open when action is selected, can also be a lovelace view/dashboard + - action: "URI" + title: "Adjust Thermostat" + uri: "entityId:climate.thermostat" \ No newline at end of file diff --git a/automations/cameras/camera6_presets.yaml b/automations/cameras/camera6_presets.yaml new file mode 100644 index 0000000..307dd92 --- /dev/null +++ b/automations/cameras/camera6_presets.yaml @@ -0,0 +1,53 @@ +alias: Camera06 Preset +id: automation_camera06_preset +mode: restart + +trigger: + - platform: state + entity_id: input_select.camera_06 + + - platform: homeassistant + event: start + + - platform: time_pattern + minutes: "/30" + +action: +- choose: + - conditions: + - condition: state + entity_id: input_select.camera_06 + state: 'Static' + sequence: + - service: shell_command.master_bedroom_left_preset_1 + - conditions: + - condition: state + entity_id: input_select.camera_06 + state: 'Door' + sequence: + - service: shell_command.master_bedroom_left_preset_3 + - conditions: + - condition: state + entity_id: input_select.camera_06 + state: 'Bed' + sequence: + - service: shell_command.master_bedroom_left_preset_3 + - conditions: + - condition: state + entity_id: input_select.camera_06 + state: 'Window' + sequence: + - service: shell_command.master_bedroom_left_preset_2 + - conditions: + - condition: state + entity_id: input_select.camera_06 + state: 'Floor' + sequence: + - service: shell_command.master_bedroom_left_preset_4 + - conditions: + - condition: state + entity_id: input_select.camera_06 + state: 'Privacy' + sequence: + - service: shell_command.master_bedroom_left_preset_5 + diff --git a/automations/cameras/camera7_presets.yaml b/automations/cameras/camera7_presets.yaml new file mode 100644 index 0000000..dbe0319 --- /dev/null +++ b/automations/cameras/camera7_presets.yaml @@ -0,0 +1,52 @@ +alias: Camera07 Preset +id: automation_camera07_preset +mode: restart + +trigger: + - platform: state + entity_id: input_select.camera_07 + + - platform: homeassistant + event: start + + - platform: time_pattern + minutes: "/30" + +action: +- choose: + - conditions: + - condition: state + entity_id: input_select.camera_07 + state: 'Static' + sequence: + - service: shell_command.master_bedroom_right_preset_2 + - conditions: + - condition: state + entity_id: input_select.camera_07 + state: 'Door' + sequence: + - service: shell_command.master_bedroom_right_preset_1 + - conditions: + - condition: state + entity_id: input_select.camera_07 + state: 'Bed' + sequence: + - service: shell_command.master_bedroom_right_preset_3 + - conditions: + - condition: state + entity_id: input_select.camera_07 + state: 'Window' + sequence: + - service: shell_command.master_bedroom_right_preset_2 + - conditions: + - condition: state + entity_id: input_select.camera_07 + state: 'Floor' + sequence: + - service: shell_command.master_bedroom_right_preset_4 + - conditions: + - condition: state + entity_id: input_select.camera_07 + state: 'Privacy' + sequence: + - service: shell_command.master_bedroom_right_preset_5 \ No newline at end of file diff --git a/automations/cameras/cycle_cameras.yaml b/automations/cameras/cycle_cameras.yaml new file mode 100644 index 0000000..2575626 --- /dev/null +++ b/automations/cameras/cycle_cameras.yaml @@ -0,0 +1,303 @@ +alias: Cycle Cameras +id: automation_cycle_cameras +mode: queued + +trigger: + + - id: automatic + platform: homeassistant + event: start + + - id: automatic + platform: time_pattern + seconds: "/10" + + - id: cam01 + platform: state + entity_id: binary_sensor.frigate_cam01_person_occupancy + from: 'off' + to: 'on' + - id: cam03 + platform: state + entity_id: binary_sensor.frigate_cam03_person_occupancy + from: 'off' + to: 'on' + - id: cam04 + platform: state + entity_id: binary_sensor.frigate_cam04_person_occupancy + from: 'off' + to: 'on' + - id: cam06 + platform: state + entity_id: binary_sensor.frigate_cam06_person_occupancy + from: 'off' + to: 'on' + - id: cam07 + platform: state + entity_id: binary_sensor.frigate_cam07_person_occupancy + from: 'off' + to: 'on' + - id: cam08 + platform: state + entity_id: binary_sensor.frigate_cam08_person_occupancy + from: 'off' + to: 'on' + - id: cam12 + platform: state + entity_id: binary_sensor.frigate_cam12_person_occupancy + from: 'off' + to: 'on' + - id: cam13 + platform: state + entity_id: binary_sensor.frigate_cam13_person_occupancy + from: 'off' + to: 'on' + - id: cam14 + platform: state + entity_id: binary_sensor.frigate_cam14_person_occupancy + from: 'off' + to: 'on' + - id: cam19 + platform: state + entity_id: binary_sensor.frigate_cam19_person_occupancy + from: 'off' + to: 'on' + +action: + - service: input_select.select_next + data: {} + target: + entity_id: input_select.master_bedroom_camera + + - choose: + - conditions: + - condition: trigger + id: cam01 + - condition: state + entity_id: input_boolean.indoor_camera_lock + state: 'off' + sequence: + - service: input_select.select_option + target: + entity_id: input_select.indoor_camera_cycle + data: + option: Blue Room + - conditions: + - condition: trigger + id: cam03 + - condition: state + entity_id: input_boolean.indoor_camera_lock + state: 'off' + sequence: + - service: input_select.select_option + target: + entity_id: input_select.indoor_camera_cycle + data: + option: Computer Area + - conditions: + - condition: trigger + id: cam04 + - condition: state + entity_id: input_boolean.outdoor_camera_lock + state: 'off' + sequence: + - service: input_select.select_option + target: + entity_id: input_select.outdoor_camera_cycle + data: + option: Garage + - conditions: + - condition: trigger + id: cam06 + - condition: state + entity_id: input_boolean.indoor_camera_lock + state: 'off' + sequence: + - service: input_select.select_option + target: + entity_id: input_select.indoor_camera_cycle + data: + option: Bedroom Left + - conditions: + - condition: trigger + id: cam07 + - condition: state + entity_id: input_boolean.indoor_camera_lock + state: 'off' + sequence: + - service: input_select.select_option + target: + entity_id: input_select.indoor_camera_cycle + data: + option: Bedroom Right + - conditions: + - condition: trigger + id: cam08 + - condition: state + entity_id: input_boolean.indoor_camera_lock + state: 'off' + sequence: + - service: input_select.select_option + target: + entity_id: input_select.indoor_camera_cycle + data: + option: Nursery + - conditions: + - condition: trigger + id: cam12 + - condition: state + entity_id: input_boolean.indoor_camera_lock + state: 'off' + sequence: + - service: input_select.select_option + target: + entity_id: input_select.indoor_camera_cycle + data: + option: Kitchen + - conditions: + - condition: trigger + id: cam13 + - condition: state + entity_id: input_boolean.indoor_camera_lock + state: 'off' + sequence: + - service: input_select.select_option + target: + entity_id: input_select.indoor_camera_cycle + data: + option: Front Room + - conditions: + - condition: trigger + id: cam14 + - condition: state + entity_id: input_boolean.outdoor_camera_lock + state: 'off' + sequence: + - service: input_select.select_option + target: + entity_id: input_select.outdoor_camera_cycle + data: + option: Back Yard + - conditions: + - condition: trigger + id: cam19 + - condition: state + entity_id: input_boolean.outdoor_camera_lock + state: 'off' + sequence: + - service: input_select.select_option + target: + entity_id: input_select.outdoor_camera_cycle + data: + option: Front Porch + + default: + - choose: + - conditions: + - condition: trigger + id: automatic + - condition: state + entity_id: input_boolean.indoor_camera_lock + state: 'off' + - condition: or + conditions: + - condition: and + conditions: + - condition: state + entity_id: input_select.indoor_camera_cycle + state: Blue Room + - condition: state + entity_id: binary_sensor.frigate_cam01_person_occupancy + state: 'off' + - condition: and + conditions: + - condition: state + entity_id: input_select.indoor_camera_cycle + state: Computer Area + - condition: state + entity_id: binary_sensor.frigate_cam03_person_occupancy + state: 'off' + - condition: and + conditions: + - condition: state + entity_id: input_select.indoor_camera_cycle + state: Bedroom Left + - condition: state + entity_id: binary_sensor.frigate_cam06_person_occupancy + state: 'off' + - condition: and + conditions: + - condition: state + entity_id: input_select.indoor_camera_cycle + state: Bedroom Right + - condition: state + entity_id: binary_sensor.frigate_cam07_person_occupancy + state: 'off' + - condition: and + conditions: + - condition: state + entity_id: input_select.indoor_camera_cycle + state: Nursery + - condition: state + entity_id: binary_sensor.frigate_cam08_person_occupancy + state: 'off' + - condition: and + conditions: + - condition: state + entity_id: input_select.indoor_camera_cycle + state: Kitchen + - condition: state + entity_id: binary_sensor.frigate_cam12_person_occupancy + state: 'off' + - condition: and + conditions: + - condition: state + entity_id: input_select.indoor_camera_cycle + state: Front Room + - condition: state + entity_id: binary_sensor.frigate_cam13_person_occupancy + state: 'off' + sequence: + - service: input_select.select_next + data: {} + target: + entity_id: input_select.indoor_camera_cycle + + - choose: + - conditions: + - condition: trigger + id: automatic + - condition: state + entity_id: input_boolean.outdoor_camera_lock + state: 'off' + - condition: or + conditions: + - condition: and + conditions: + - condition: state + entity_id: input_select.outdoor_camera_cycle + state: Garage + - condition: state + entity_id: binary_sensor.frigate_cam04_person_occupancy + state: 'off' + - condition: and + conditions: + - condition: state + entity_id: input_select.outdoor_camera_cycle + state: Back Yard + - condition: state + entity_id: binary_sensor.frigate_cam14_person_occupancy + state: 'off' + - condition: and + conditions: + - condition: state + entity_id: input_select.outdoor_camera_cycle + state: Front Porch + - condition: state + entity_id: binary_sensor.frigate_cam19_person_occupancy + state: 'off' + sequence: + - service: input_select.select_next + data: {} + target: + entity_id: input_select.outdoor_camera_cycle \ No newline at end of file diff --git a/automations/cameras/frigate_cam04_detect.yaml b/automations/cameras/frigate_cam04_detect.yaml new file mode 100644 index 0000000..ea6c589 --- /dev/null +++ b/automations/cameras/frigate_cam04_detect.yaml @@ -0,0 +1,69 @@ +alias: Frigate Cam04 Detect +id: automation_frigate_cam04_detect +mode: restart + +trigger: + - platform: homeassistant + event: start + + - id: motion + platform: state + entity_id: group.garage_motion + + - id: doors + platform: state + entity_id: group.my_garage_doors + + - id: occupancy + platform: state + entity_id: binary_sensor.frigate_cam04_person_occupancy + +action: + - choose: + - conditions: + - condition: state + entity_id: group.garage_motion + state: 'on' + - condition: state + entity_id: switch.frigate_cam04_detect + state: 'off' + sequence: + - service: switch.turn_on + data: {} + target: + entity_id: + - switch.frigate_cam04_detect + + - conditions: + - condition: state + entity_id: group.my_garage_doors + state: 'on' + - condition: state + entity_id: switch.frigate_cam04_detect + state: 'off' + sequence: + - service: switch.turn_on + data: {} + target: + entity_id: + - switch.frigate_cam04_detect + + - conditions: + - condition: state + entity_id: group.garage_motion + state: 'off' + - condition: state + entity_id: group.my_garage_doors + state: 'off' + - condition: state + entity_id: binary_sensor.frigate_cam04_person_occupancy + state: 'off' + - condition: state + entity_id: switch.frigate_cam04_detect + state: 'on' + sequence: + - service: switch.turn_off + data: {} + target: + entity_id: + - switch.frigate_cam04_detect \ No newline at end of file diff --git a/automations/cameras/frigate_recordings.yaml b/automations/cameras/frigate_recordings.yaml new file mode 100644 index 0000000..bcfc3ce --- /dev/null +++ b/automations/cameras/frigate_recordings.yaml @@ -0,0 +1,109 @@ +alias: Frigate Recordings +id: automation_frigate_recordings +mode: restart + +trigger: + - platform: homeassistant + event: start + + - id: automatic + platform: time_pattern + minutes: "/10" + + - id: boolean + platform: state + entity_id: input_boolean.debug_recordings + + - id: indoors + platform: state + entity_id: input_boolean.indoor_recordings + + - id: outdoors + platform: state + entity_id: input_boolean.outdoor_recordings + +action: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.debug_recordings + state: 'on' + sequence: + - service: switch.turn_on + data: {} + target: + entity_id: + - switch.frigate_cam01_recordings + - switch.frigate_cam03_recordings + - switch.frigate_cam04_recordings + - switch.frigate_cam06_recordings + - switch.frigate_cam07_recordings + - switch.frigate_cam08_recordings + - switch.frigate_cam12_recordings + - switch.frigate_cam13_recordings + - switch.frigate_cam14_recordings + - switch.frigate_cam18_recordings + - switch.frigate_cam19_recordings + + - choose: + - conditions: + - condition: state + entity_id: input_boolean.indoor_recordings + state: 'on' + sequence: + - service: switch.turn_on + data: {} + target: + entity_id: + - switch.frigate_cam01_recordings + - switch.frigate_cam03_recordings + - switch.frigate_cam06_recordings + - switch.frigate_cam07_recordings + - switch.frigate_cam08_recordings + - switch.frigate_cam12_recordings + - switch.frigate_cam13_recordings + - conditions: + - condition: state + entity_id: input_boolean.indoor_recordings + state: 'off' + sequence: + - service: switch.turn_off + data: {} + target: + entity_id: + - switch.frigate_cam01_recordings + - switch.frigate_cam03_recordings + - switch.frigate_cam06_recordings + - switch.frigate_cam07_recordings + - switch.frigate_cam08_recordings + - switch.frigate_cam12_recordings + - switch.frigate_cam13_recordings + + + - choose: + - conditions: + - condition: state + entity_id: input_boolean.outdoor_recordings + state: 'on' + sequence: + - service: switch.turn_on + data: {} + target: + entity_id: + - switch.frigate_cam04_recordings + - switch.frigate_cam14_recordings + - switch.frigate_cam18_recordings + - switch.frigate_cam19_recordings + - conditions: + - condition: state + entity_id: input_boolean.outdoor_recordings + state: 'off' + sequence: + - service: switch.turn_off + data: {} + target: + entity_id: + - switch.frigate_cam04_recordings + - switch.frigate_cam14_recordings + - switch.frigate_cam18_recordings + - switch.frigate_cam19_recordings \ No newline at end of file diff --git a/automations/cameras/frigate_snapshots.yaml b/automations/cameras/frigate_snapshots.yaml new file mode 100644 index 0000000..c9dfbdc --- /dev/null +++ b/automations/cameras/frigate_snapshots.yaml @@ -0,0 +1,109 @@ +alias: Frigate Snapshots +id: automation_frigate_snapshots +mode: restart + +trigger: + - platform: homeassistant + event: start + + - id: automatic + platform: time_pattern + minutes: "/10" + + - id: boolean + platform: state + entity_id: input_boolean.debug_snapshots + + - id: indoors + platform: state + entity_id: input_boolean.indoor_snapshots + + - id: outdoors + platform: state + entity_id: input_boolean.outdoor_snapshots + +action: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.debug_snapshots + state: 'on' + sequence: + - service: switch.turn_on + data: {} + target: + entity_id: + - switch.frigate_cam01_snapshots + - switch.frigate_cam03_snapshots + - switch.frigate_cam04_snapshots + - switch.frigate_cam06_snapshots + - switch.frigate_cam07_snapshots + - switch.frigate_cam08_snapshots + - switch.frigate_cam12_snapshots + - switch.frigate_cam13_snapshots + - switch.frigate_cam14_snapshots + - switch.frigate_cam18_snapshots + - switch.frigate_cam19_snapshots + + - choose: + - conditions: + - condition: state + entity_id: input_boolean.indoor_snapshots + state: 'on' + sequence: + - service: switch.turn_on + data: {} + target: + entity_id: + - switch.frigate_cam01_snapshots + - switch.frigate_cam03_snapshots + - switch.frigate_cam06_snapshots + - switch.frigate_cam07_snapshots + - switch.frigate_cam08_snapshots + - switch.frigate_cam12_snapshots + - switch.frigate_cam13_snapshots + - conditions: + - condition: state + entity_id: input_boolean.indoor_snapshots + state: 'off' + sequence: + - service: switch.turn_off + data: {} + target: + entity_id: + - switch.frigate_cam01_snapshots + - switch.frigate_cam03_snapshots + - switch.frigate_cam06_snapshots + - switch.frigate_cam07_snapshots + - switch.frigate_cam08_snapshots + - switch.frigate_cam12_snapshots + - switch.frigate_cam13_snapshots + + + - choose: + - conditions: + - condition: state + entity_id: input_boolean.outdoor_snapshots + state: 'on' + sequence: + - service: switch.turn_on + data: {} + target: + entity_id: + - switch.frigate_cam04_snapshots + - switch.frigate_cam14_snapshots + - switch.frigate_cam18_snapshots + - switch.frigate_cam19_snapshots + - conditions: + - condition: state + entity_id: input_boolean.outdoor_snapshots + state: 'off' + sequence: + - service: switch.turn_off + data: {} + target: + entity_id: + - switch.frigate_cam04_snapshots + - switch.frigate_cam14_snapshots + - switch.frigate_cam18_snapshots + - switch.frigate_cam19_snapshots \ No newline at end of file diff --git a/automations/climate/hvac_fan_off.yaml b/automations/climate/hvac_fan_off.yaml new file mode 100644 index 0000000..4a329f3 --- /dev/null +++ b/automations/climate/hvac_fan_off.yaml @@ -0,0 +1,64 @@ +alias: HVAC Fan Off +id: automation_hvac_fan_off + +trigger: + # Has the fan been running for ten minutes? + - platform: state + entity_id: switch.thermostat_fan_mode + to: 'on' + for: '00:10:00' + # Did the system turn on? + - platform: state + entity_id: sensor.hvac_action + from: 'idle' + # Check the conditions every 5 minutes + - platform: time_pattern + minutes: '/5' + + - platform: state + entity_id: input_boolean.allow_fan + to: 'off' + +condition: + # Is the fan currently on? + - condition: state + entity_id: switch.thermostat_fan_mode + state: 'on' + + - condition: or + conditions: + # Is it getting too warm outside? + - condition: and + conditions: + - condition: numeric_state + entity_id: sensor.thermostat_temperature + above: 68 + - condition: state + entity_id: binary_sensor.warmer_outside + state: 'on' + # Is it getting too cool outside? + - condition: and + conditions: + - condition: numeric_state + entity_id: sensor.thermostat_temperature + below: 65 + - condition: state + entity_id: binary_sensor.cooler_outside + state: 'on' + # Did the system turn on? + - condition: not + conditions: + - condition: state + entity_id: sensor.hvac_action + state: 'idle' +action: + - service: logbook.log + data_template: + name: HVAC Fan Off + entity_id: automation.hvac_fan_off + message: > + Turned off HVAC fan + + + - service: homeassistant.turn_off + entity_id: switch.thermostat_fan_mode \ No newline at end of file diff --git a/automations/climate/hvac_fan_on.yaml b/automations/climate/hvac_fan_on.yaml new file mode 100644 index 0000000..f5ee0af --- /dev/null +++ b/automations/climate/hvac_fan_on.yaml @@ -0,0 +1,102 @@ +alias: HVAC Fan On +id: automation_hvac_fan_on + +trigger: + # Has the fan been off for ten minutes? + - platform: state + entity_id: switch.thermostat_fan_mode + to: 'off' + for: '00:10:00' + + # Did the temp just switch to just right? + - platform: state + entity_id: binary_sensor.temp_just_right + to: 'on' + + # Did it just become cooler inside or outside? + - platform: state + entity_id: binary_sensor.cooler_outside + from: 'off' + to: 'on' + + # Did it just become warmer inside or outside? + - platform: state + entity_id: binary_sensor.warmer_outside + from: 'off' + to: 'on' + + # Is it starting to get too warm inside? + - platform: numeric_state + entity_id: sensor.thermostat_temperature + above: 80 + + # Is it starting to get too cool inside? + - platform: numeric_state + entity_id: sensor.thermostat_temperature + below: 60 + +condition: + - condition: state + entity_id: input_boolean.allow_fan + state: 'on' + + # Are the internal sensors above 67? + # This is mainly to ensure those sensors are working + - condition: numeric_state + entity_id: sensor.return_temperature + above: 50 + + - condition: numeric_state + entity_id: sensor.hvac_temperature + above: 50 + + # Is the fan currently off? + - condition: state + entity_id: switch.thermostat_fan_mode + state: 'off' + + # Is the system currently idle? + - condition: state + entity_id: sensor.hvac_action + state: 'idle' + + # Is the home occupied? + - condition: state + entity_id: input_boolean.home_occupied + state: 'on' + + # Is the outside temp just right? + - condition: state + entity_id: binary_sensor.temp_just_right + state: 'on' + + # Is it getting too warm or too cold in the house? + - condition: or + conditions: + - condition: and + conditions: + - condition: numeric_state + entity_id: sensor.thermostat_temperature + above: 75 + - condition: state + entity_id: binary_sensor.cooler_outside + state: 'on' + - condition: and + conditions: + - condition: numeric_state + entity_id: sensor.thermostat_temperature + below: 65 + - condition: state + entity_id: binary_sensor.warmer_outside + state: 'on' +action: + - service: logbook.log + data_template: + name: HVAC Fan On + entity_id: automation.hvac_fan_on + message: > + Turned on HVAC fan + + + - service: homeassistant.turn_on + entity_id: switch.thermostat_fan_mode \ No newline at end of file diff --git a/automations/frigate/frigate_notification_testing.yaml b/automations/frigate/frigate_notification_testing.yaml new file mode 100644 index 0000000..91e2388 --- /dev/null +++ b/automations/frigate/frigate_notification_testing.yaml @@ -0,0 +1,34 @@ +alias: Frigate Notification Testing +id: automation_frigate_notification_testing +mode: single +max_exceeded: silent + +trigger: + platform: mqtt + topic: frigate/events + +condition: + - condition: or + conditions: + - "{{ 'driveway' in trigger.payload_json['after']['entered_zones'] }}" + - "{{ 'from_street' in trigger.payload_json['after']['entered_zones'] }}" + - "{{ trigger.payload_json['after']['label'] == 'person' }}" + +action: + + - choose: + - conditions: + - "{{ 'driveway' in trigger.payload_json['after']['entered_zones'] }}" + - "{{ 'from_street' in trigger.payload_json['after']['entered_zones'] }}" + - "{{ trigger.payload_json['after']['top_score'] > 0.80 }}" + - "{{ not 'garage' in trigger.payload_json['before']['current_zones'] }}" + sequence: + - service: notify.mobile_app_pixel_7 + data_template: + message: 'A {{trigger.payload_json["after"]["label"]}} entered the driveway.' + data: + image: 'https://automation.clintweaver.com/api/frigate/notifications/{{trigger.payload_json["after"]["id"]}}/thumbnail.jpg?format=android' + tag: '{{trigger.payload_json["after"]["id"]}}' + when: '{{trigger.payload_json["after"]["start_time"]|int}}' + + - delay: '00:00:05' diff --git a/automations/frigate/frigate_person_back_yard.yaml b/automations/frigate/frigate_person_back_yard.yaml new file mode 100644 index 0000000..72b818f --- /dev/null +++ b/automations/frigate/frigate_person_back_yard.yaml @@ -0,0 +1,151 @@ +id: automation_frigate_person_back_yard +alias: Frigate Person Back Yard +description: "Fire a notification if a person is detected by Frigate in the back yard" +mode: single +max_exceeded: silent +trigger: + platform: mqtt + topic: frigate/events + payload: frigate_cam14 + value_template: "{{ value_json['after']['camera'] }}" +variables: + id: "{{ trigger.payload_json['after']['id'] }}" + camera: "{{ trigger.payload_json['after']['camera'] }}" + camera_name: "{{ camera | replace('_', ' ') | title }}" + object: "{{ trigger.payload_json['after']['label'] }}" + label: "{{ object | title }}" + entered_zones: "{{ trigger.payload_json['after']['entered_zones'] }}" + type: "{{ trigger.payload_json['type'] }}" + base_url: https://automation.clintweaver.com + group_target: "" + zone_only: false + input_zones: + - front_porch + - driveway + zones: "{{ input_zones | list }}" + input_labels: + - person + labels: "{{ input_labels | list }}" + presence_entity: person.clint +condition: + - "{{ type != 'end' }}" + - "{{ not zone_only or entered_zones|length > 0 }}" + - "{{ not zones|length or zones|select('in', entered_zones)|list|length > 0 }}" + - "{{ not labels|length or object in labels }}" + #- "{{ not presence_entity or not is_state(presence_entity, 'home') }}" + - '{{ is_state("binary_sensor.garage_door","off") }}' + - '{{ is_state("binary_sensor.outer_garage_door","off") }}' + - '{{ is_state("binary_sensor.front_door_contact","off") }}' + - '{{ is_state("binary_sensor.patio_door_contact","off") }}' +action: + - choose: + - conditions: "{{ not group_target }}" + sequence: + - device_id: 70c62eb366d6ed914b0ccc6bf41c32fd + domain: mobile_app + type: notify + message: A {{ label }} was detected on the {{ camera_name }} camera. + data: + tag: "{{ id }}" + group: frigate-notification-{{ camera }} + image: /api/frigate/notifications/{{id}}/thumbnail.jpg?format=android + attachment: + url: /api/frigate/notifications/{{id}}/thumbnail.jpg + + - service: persistent_notification.create + data: + title: A {{ label }} was detected on the {{ camera_name }} camera. + message: 'A {{ label }} was detected on the {{ camera_name }} camera. ![image](https://automation.clintweaver.com/api/frigate/notifications/{{trigger.payload_json["after"]["id"]}}/thumbnail.jpg)' + notification_id: "{{ id }}" + default: + - service: notify.{{ group_target }} + data: + message: A {{ label }} was detected on the {{ camera_name }} camera. + data: + tag: "{{ id }}" + group: frigate-notification-{{ camera }} + image: /api/frigate/notifications/{{id}}/thumbnail.jpg?format=android + attachment: + url: /api/frigate/notifications/{{id}}/thumbnail.jpg + - repeat: + sequence: + - wait_for_trigger: + - platform: mqtt + topic: frigate/events + payload: "{{ id }}" + value_template: "{{ value_json['after']['id'] }}" + timeout: + minutes: 2 + continue_on_timeout: false + - condition: template + value_template: "{{ wait.trigger.payload_json['type'] == 'end' }}" + - choose: + - conditions: "{{ not group_target }}" + sequence: + - device_id: 70c62eb366d6ed914b0ccc6bf41c32fd + domain: mobile_app + type: notify + message: A {{ label }} was detected on the {{ camera_name }} camera. + data: + tag: "{{ id }}" + group: frigate-notification-{{ camera }} + url: >- + {{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4 + clickAction: >- + {{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4 + image: >- + /api/frigate/notifications/{{id}}/thumbnail.jpg?format=android + sound: none + attachment: + url: /api/frigate/notifications/{{id}}/thumbnail.jpg + actions: + - action: URI + title: View Clip + uri: >- + {{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4 + - action: URI + title: View Snapshot + uri: >- + {{base_url}}/api/frigate/notifications/{{id}}/snapshot.jpg + - action: silence-{{ camera }} + title: Silence Notifications + destructive: true + default: + - service: notify.{{ group_target }} + data: + message: A {{ label }} was detected on the {{ camera_name }} camera. + data: + tag: "{{ id }}" + group: frigate-notification-{{ camera }} + url: >- + {{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4 + clickAction: >- + {{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4 + image: >- + /api/frigate/notifications/{{id}}/thumbnail.jpg?format=android + sound: none + attachment: + url: /api/frigate/notifications/{{id}}/thumbnail.jpg + actions: + - action: URI + title: View Clip + uri: >- + {{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4 + - action: URI + title: View Snapshot + uri: >- + {{base_url}}/api/frigate/notifications/{{id}}/snapshot.jpg + - action: silence-{{ camera }} + title: Silence Notifications + destructive: true + until: "{{ wait.trigger.payload_json['type'] == 'end' }}" + - wait_for_trigger: + - platform: event + event_type: mobile_app_notification_action + event_data: + action: silence-{{ camera }} + timeout: + seconds: 30 + continue_on_timeout: false + - delay: + minutes: 30 diff --git a/automations/frigate/frigate_person_from_street.yaml b/automations/frigate/frigate_person_from_street.yaml new file mode 100644 index 0000000..de6eafc --- /dev/null +++ b/automations/frigate/frigate_person_from_street.yaml @@ -0,0 +1,159 @@ +id: "automation_frigate_person_from_street" +alias: Frigate Person From Street +description: "Fire a notification if a person is detected by Frigate coming towards the house from the street" +mode: single +max_exceeded: silent +trigger: + platform: mqtt + topic: frigate/events + payload: new + value_template: "{{ value_json.type }}" + +variables: + id: "{{ trigger.payload_json['after']['id'] }}" + camera: "{{ trigger.payload_json['after']['camera'] }}" + camera_name: "{{ camera | replace('_', ' ') | title }}" + object: "{{ trigger.payload_json['after']['label'] }}" + label: "{{ object | title }}" + entered_zones: "{{ trigger.payload_json['after']['entered_zones'] }}" + type: "{{ trigger.payload_json['type'] }}" + stationary: "{{ trigger.payload_json['after']['stationary'] }}" + base_url: https://automation.clintweaver.com + group_target: "" + zone_only: true + before_zones: + - from_street + after_zones: + - driveway_center + - driveway_east_side + - parking_spot + input_zones: + - from_street + zones: "{{ input_zones | list }}" + input_labels: + - person + labels: "{{ input_labels | list }}" + presence_entity: person.clint + +condition: + - "{{ type != 'end' }}" + - "{{ not zone_only or entered_zones|length > 0 }}" + - "{{ not stationary }}" + - "{{ not zones|length or zones|select('in', entered_zones)|list|length > 0 }}" + - "{{ not labels|length or object in labels }}" + #- "{{ not presence_entity or not is_state(presence_entity, 'home') }}" + #- "{{ not garage_door or not is_state(garage_door, 'on') }}" + +action: + - choose: + - conditions: "{{ not group_target }}" + sequence: + - device_id: 70c62eb366d6ed914b0ccc6bf41c32fd + domain: mobile_app + type: notify + message: A {{ label }} was detected on the {{ camera_name }} camera. + data: + tag: "{{ id }}" + group: frigate-notification-{{ camera }} + image: /api/frigate/notifications/{{id}}/thumbnail.jpg?format=android + attachment: + url: /api/frigate/notifications/{{id}}/thumbnail.jpg + + - service: persistent_notification.create + data: + title: A {{ label }} was detected on the {{ camera_name }} camera. + message: 'A {{ label }} was detected on the {{ camera_name }} camera. ![image](https://automation.clintweaver.com/api/frigate/notifications/{{trigger.payload_json["after"]["id"]}}/thumbnail.jpg)' + notification_id: "{{ id }}" + default: + - service: notify.{{ group_target }} + data: + message: A {{ label }} was detected on the {{ camera_name }} camera. + data: + tag: "{{ id }}" + group: frigate-notification-{{ camera }} + image: /api/frigate/notifications/{{id}}/thumbnail.jpg?format=android + attachment: + url: /api/frigate/notifications/{{id}}/thumbnail.jpg + - repeat: + sequence: + - wait_for_trigger: + - platform: mqtt + topic: frigate/events + payload: "{{ id }}" + value_template: "{{ value_json['after']['id'] }}" + timeout: + minutes: 2 + continue_on_timeout: false + - condition: template + value_template: "{{ wait.trigger.payload_json['type'] == 'end' }}" + - choose: + - conditions: "{{ not group_target }}" + sequence: + - device_id: 70c62eb366d6ed914b0ccc6bf41c32fd + domain: mobile_app + type: notify + message: A {{ label }} was detected on the {{ camera_name }} camera. + data: + tag: "{{ id }}" + group: frigate-notification-{{ camera }} + url: >- + {{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4 + clickAction: >- + {{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4 + image: >- + /api/frigate/notifications/{{id}}/thumbnail.jpg?format=android + sound: none + attachment: + url: /api/frigate/notifications/{{id}}/thumbnail.jpg + actions: + - action: URI + title: View Clip + uri: >- + {{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4 + - action: URI + title: View Snapshot + uri: >- + {{base_url}}/api/frigate/notifications/{{id}}/snapshot.jpg + - action: silence-{{ camera }} + title: Silence Notifications + destructive: true + default: + - service: notify.{{ group_target }} + data: + message: A {{ label }} was detected on the {{ camera_name }} camera. + data: + tag: "{{ id }}" + group: frigate-notification-{{ camera }} + url: >- + {{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4 + clickAction: >- + {{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4 + image: >- + /api/frigate/notifications/{{id}}/thumbnail.jpg?format=android + sound: none + attachment: + url: /api/frigate/notifications/{{id}}/thumbnail.jpg + actions: + - action: URI + title: View Clip + uri: >- + {{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4 + - action: URI + title: View Snapshot + uri: >- + {{base_url}}/api/frigate/notifications/{{id}}/snapshot.jpg + - action: silence-{{ camera }} + title: Silence Notifications + destructive: true + until: "{{ wait.trigger.payload_json['type'] == 'end' }}" + - wait_for_trigger: + - platform: event + event_type: mobile_app_notification_action + event_data: + action: silence-{{ camera }} + timeout: + seconds: 30 + continue_on_timeout: false + - delay: + minutes: 30 + diff --git a/automations/frigate/frigate_person_front_porch.yaml b/automations/frigate/frigate_person_front_porch.yaml new file mode 100644 index 0000000..7792eeb --- /dev/null +++ b/automations/frigate/frigate_person_front_porch.yaml @@ -0,0 +1,154 @@ +id: "1642041485222" +alias: Frigate Person Front Porch +description: "Fire a notification if a person is detected by Frigate in the front yard" +mode: single +max_exceeded: silent +trigger: + platform: mqtt + topic: frigate/events + payload: frigate_cam19 + value_template: "{{ value_json['after']['camera'] }}" +variables: + id: "{{ trigger.payload_json['after']['id'] }}" + camera: "{{ trigger.payload_json['after']['camera'] }}" + camera_name: "{{ camera | replace('_', ' ') | title }}" + object: "{{ trigger.payload_json['after']['label'] }}" + label: "{{ object | title }}" + entered_zones: "{{ trigger.payload_json['after']['entered_zones'] }}" + type: "{{ trigger.payload_json['type'] }}" + base_url: https://automation.clintweaver.com + group_target: "" + zone_only: true + input_zones: + - front_porch + - driveway + zones: "{{ input_zones | list }}" + input_labels: + - person + labels: "{{ input_labels | list }}" + presence_entity: person.clint +condition: + - "{{ type != 'end' }}" + - "{{ not zone_only or entered_zones|length > 0 }}" + - "{{ not zones|length or zones|select('in', entered_zones)|list|length > 0 }}" + - "{{ not labels|length or object in labels }}" + #- "{{ not presence_entity or not is_state(presence_entity, 'home') }}" + - '{{ is_state("binary_sensor.garage_door","off") }}' + - '{{ is_state("binary_sensor.outer_garage_door","off") }}' + - '{{ is_state("binary_sensor.front_door_contact","off") }}' + - '{{ is_state("binary_sensor.patio_door_contact","off") }}' + - '{{ is_state("binary_sensor.front_porch_motion","off") }}' + - '{{ is_state("binary_sensor.garage_motion_switch_home_security_motion_detection","off") }}' +action: + - choose: + - conditions: "{{ not group_target }}" + sequence: + - device_id: 70c62eb366d6ed914b0ccc6bf41c32fd + domain: mobile_app + type: notify + message: A {{ label }} was detected on the {{ camera_name }} camera. + data: + tag: "{{ id }}" + group: frigate-notification-{{ camera }} + image: /api/frigate/notifications/{{id}}/thumbnail.jpg?format=android + attachment: + url: /api/frigate/notifications/{{id}}/thumbnail.jpg + + - service: persistent_notification.create + data: + title: A {{ label }} was detected on the {{ camera_name }} camera. + message: 'A {{ label }} was detected on the {{ camera_name }} camera. ![image](https://automation.clintweaver.com/api/frigate/notifications/{{trigger.payload_json["after"]["id"]}}/thumbnail.jpg)' + notification_id: "{{ id }}" + default: + - service: notify.{{ group_target }} + data: + message: A {{ label }} was detected on the {{ camera_name }} camera. + data: + tag: "{{ id }}" + group: frigate-notification-{{ camera }} + image: /api/frigate/notifications/{{id}}/thumbnail.jpg?format=android + attachment: + url: /api/frigate/notifications/{{id}}/thumbnail.jpg + - repeat: + sequence: + - wait_for_trigger: + - platform: mqtt + topic: frigate/events + payload: "{{ id }}" + value_template: "{{ value_json['after']['id'] }}" + timeout: + minutes: 2 + continue_on_timeout: false + - condition: template + value_template: "{{ wait.trigger.payload_json['type'] == 'end' }}" + - choose: + - conditions: "{{ not group_target }}" + sequence: + - device_id: 70c62eb366d6ed914b0ccc6bf41c32fd + domain: mobile_app + type: notify + message: A {{ label }} was detected on the {{ camera_name }} camera. + data: + tag: "{{ id }}" + group: frigate-notification-{{ camera }} + url: >- + {{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4 + clickAction: >- + {{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4 + image: >- + /api/frigate/notifications/{{id}}/thumbnail.jpg?format=android + sound: none + attachment: + url: /api/frigate/notifications/{{id}}/thumbnail.jpg + actions: + - action: URI + title: View Clip + uri: >- + {{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4 + - action: URI + title: View Snapshot + uri: >- + {{base_url}}/api/frigate/notifications/{{id}}/snapshot.jpg + - action: silence-{{ camera }} + title: Silence Notifications + destructive: true + default: + - service: notify.{{ group_target }} + data: + message: A {{ label }} was detected on the {{ camera_name }} camera. + data: + tag: "{{ id }}" + group: frigate-notification-{{ camera }} + url: >- + {{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4 + clickAction: >- + {{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4 + image: >- + /api/frigate/notifications/{{id}}/thumbnail.jpg?format=android + sound: none + attachment: + url: /api/frigate/notifications/{{id}}/thumbnail.jpg + actions: + - action: URI + title: View Clip + uri: >- + {{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4 + - action: URI + title: View Snapshot + uri: >- + {{base_url}}/api/frigate/notifications/{{id}}/snapshot.jpg + - action: silence-{{ camera }} + title: Silence Notifications + destructive: true + until: "{{ wait.trigger.payload_json['type'] == 'end' }}" + - wait_for_trigger: + - platform: event + event_type: mobile_app_notification_action + event_data: + action: silence-{{ camera }} + timeout: + seconds: 30 + continue_on_timeout: false + - delay: + minutes: 30 + diff --git a/automations/frigate/frigate_vehicle_notification.yaml b/automations/frigate/frigate_vehicle_notification.yaml new file mode 100644 index 0000000..b76b297 --- /dev/null +++ b/automations/frigate/frigate_vehicle_notification.yaml @@ -0,0 +1,162 @@ +alias: Frigate Vehicle Notification +id: automation_frigate_vehicle_notification +description: "Fire a notification if a vehicle is detected by Frigate entering the driveway" +mode: single +max_exceeded: silent + +trigger: + platform: mqtt + topic: frigate/events + payload: new + value_template: "{{ value_json.type }}" + +variables: + id: "{{ trigger.payload_json['after']['id'] }}" + camera: "{{ trigger.payload_json['after']['camera'] }}" + camera_name: "{{ camera | replace('_', ' ') | title }}" + object: "{{ trigger.payload_json['after']['label'] }}" + label: "{{ object | title }}" + entered_zones: "{{ trigger.payload_json['after']['entered_zones'] }}" + type: "{{ trigger.payload_json['type'] }}" + stationary: "{{ trigger.payload_json['after']['stationary'] }}" + base_url: https://automation.clintweaver.com + group_target: "mobile_app_ticwatch_pro_3_gps" + zone_only: true + before_zones: + - from_street + after_zones: + - driveway_center + - driveway_east_side + - parking_spot + input_zones: + - from_street + zones: "{{ input_zones | list }}" + input_labels: + - vehicle + labels: "{{ input_labels | list }}" + presence_entity: "device_tracker.chevrolet_mylink" + boolean_entity: input_boolean + garage_door: binary_sensor.garage_door + primary_vehicle: device_tracker.chevrolet_mylink + +condition: + - "{{ type != 'end' }}" + - "{{ not zone_only or entered_zones|length > 0 }}" + - "{{ not stationary }}" + - "{{ not zones|length or zones|select('in', entered_zones)|list|length > 0 }}" + - "{{ not labels|length or object in labels }}" + #- "{{ not presence_entity or not is_state(presence_entity, 'home') }}" + #- "{{ not garage_door or not is_state(garage_door, 'on') }}" + +action: + - choose: + - conditions: "{{ not group_target }}" + sequence: + - device_id: 70c62eb366d6ed914b0ccc6bf41c32fd + domain: mobile_app + type: notify + message: A {{ label }} was detected on the {{ camera_name }} camera. + data: + tag: "{{ id }}" + group: frigate-notification-{{ camera }} + image: /api/frigate/notifications/{{id}}/thumbnail.jpg?format=android + attachment: + url: /api/frigate/notifications/{{id}}/thumbnail.jpg + + - service: persistent_notification.create + data: + title: A {{ label }} was detected on the {{ camera_name }} camera. + message: 'A {{ label }} was detected on the {{ camera_name }} camera. ![image](https://automation.clintweaver.com/api/frigate/notifications/{{trigger.payload_json["after"]["id"]}}/thumbnail.jpg)' + notification_id: "{{ id }}" + default: + - service: notify.{{ group_target }} + data: + message: A {{ label }} was detected on the {{ camera_name }} camera. + data: + tag: "{{ id }}" + group: frigate-notification-{{ camera }} + image: /api/frigate/notifications/{{id}}/thumbnail.jpg?format=android + attachment: + url: /api/frigate/notifications/{{id}}/thumbnail.jpg + - repeat: + sequence: + - wait_for_trigger: + - platform: mqtt + topic: frigate/events + payload: "{{ id }}" + value_template: "{{ value_json['after']['id'] }}" + timeout: + minutes: 2 + continue_on_timeout: false + - condition: template + value_template: "{{ wait.trigger.payload_json['type'] == 'end' }}" + - choose: + - conditions: "{{ not group_target }}" + sequence: + - device_id: 70c62eb366d6ed914b0ccc6bf41c32fd + domain: mobile_app + type: notify + message: A {{ label }} was detected on the {{ camera_name }} camera. + data: + tag: "{{ id }}" + group: frigate-notification-{{ camera }} + url: >- + {{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4 + clickAction: >- + {{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4 + image: >- + /api/frigate/notifications/{{id}}/thumbnail.jpg?format=android + sound: none + attachment: + url: /api/frigate/notifications/{{id}}/thumbnail.jpg + actions: + - action: URI + title: View Clip + uri: >- + {{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4 + - action: URI + title: View Snapshot + uri: >- + {{base_url}}/api/frigate/notifications/{{id}}/snapshot.jpg + - action: silence-{{ camera }} + title: Silence Notifications + destructive: true + default: + - service: notify.{{ group_target }} + data: + message: A {{ label }} was detected on the {{ camera_name }} camera. + data: + tag: "{{ id }}" + group: frigate-notification-{{ camera }} + url: >- + {{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4 + clickAction: >- + {{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4 + image: >- + /api/frigate/notifications/{{id}}/thumbnail.jpg?format=android + sound: none + attachment: + url: /api/frigate/notifications/{{id}}/thumbnail.jpg + actions: + - action: URI + title: View Clip + uri: >- + {{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4 + - action: URI + title: View Snapshot + uri: >- + {{base_url}}/api/frigate/notifications/{{id}}/snapshot.jpg + - action: silence-{{ camera }} + title: Silence Notifications + destructive: true + until: "{{ wait.trigger.payload_json['type'] == 'end' }}" + - wait_for_trigger: + - platform: event + event_type: mobile_app_notification_action + event_data: + action: silence-{{ camera }} + timeout: + seconds: 30 + continue_on_timeout: false + - delay: + minutes: 30 diff --git a/automations/house/all_away_media_off.yaml b/automations/house/all_away_media_off.yaml new file mode 100644 index 0000000..14062f7 --- /dev/null +++ b/automations/house/all_away_media_off.yaml @@ -0,0 +1,42 @@ +alias: 'All away media off' +id: automation_all_away_media_off +initial_state: 'on' +mode: single +max_exceeded: silent + +trigger: + - platform: state + entity_id: input_boolean.home_occupied + to: 'off' + for: '00:05:00' +condition: + condition: or + conditions: + - condition: state + entity_id: media_player.kitchen + state: 'playing' + - condition: state + entity_id: media_player.great_room + state: 'playing' + - condition: state + entity_id: media_player.front_room_tv + state: 'playing' + - condition: state + entity_id: media_player.front_room_hub + state: 'playing' + - condition: state + entity_id: media_player.master_bedroom_clock + state: 'playing' + - condition: state + entity_id: media_player.nursery_hub + state: 'playing' + - condition: state + entity_id: media_player.bathroom_mini + state: 'playing' + - condition: state + entity_id: media_player.downstairs_roku + state: 'playing' +action: + service: media_player.turn_off + data: + entity_id: all diff --git a/automations/house/guest_mode_off_nobody_home.yaml b/automations/house/guest_mode_off_nobody_home.yaml new file mode 100644 index 0000000..85168b4 --- /dev/null +++ b/automations/house/guest_mode_off_nobody_home.yaml @@ -0,0 +1,28 @@ +alias: 'Guest mode off nobody home' +id: automation_guest_mode_off_nobody_home +mode: single +max_exceeded: silent + +trigger: + - platform: state + entity_id: input_boolean.guest_mode + to: 'off' +condition: + condition: and + conditions: + # We're all away + - condition: state + entity_id: input_boolean.clint_home + state: 'off' + - condition: state + entity_id: input_boolean.kristy_home + state: 'off' + - condition: or + conditions: + # Either the phone or tablet are away, or the family room isn't occupied + - condition: state + entity_id: input_boolean.clint_home + state: 'off' +action: + - service: input_boolean.turn_off + entity_id: input_boolean.home_occupied diff --git a/automations/house/home_not_occupied.yaml b/automations/house/home_not_occupied.yaml new file mode 100644 index 0000000..56d954b --- /dev/null +++ b/automations/house/home_not_occupied.yaml @@ -0,0 +1,41 @@ +alias: 'Home not occupied' +id: automation_home_not_occupied +mode: single +max_exceeded: silent + +trigger: + - platform: state + entity_id: + - input_boolean.clint_home + - input_boolean.emmett_home + - input_boolean.bridget_home + - input_boolean.kristy_home + - input_boolean.marshall_home + - input_boolean.tess_home + - input_boolean.ebin_home + - input_boolean.guest_mode + to: 'off' +condition: + - condition: state + entity_id: input_boolean.home_occupied + state: 'on' + # We're all away + - condition: numeric_state + entity_id: group.person_household + below: 1 + value_template: "{{ dict((states|selectattr('entity_id', 'in', state_attr('group.person_household', 'entity_id'))|list)|groupby('state'))['on']|count }}" +action: + - service: input_boolean.turn_off + entity_id: input_boolean.home_occupied + - service: automation.turn_on + data: + entity_id: automation.garage_open_nobody_home + - choose: + - conditions: + - condition: state + entity_id: binary_sensor.patio_door_contact + state: 'off' + sequence: + - service: lock.lock + target: + entity_id: lock.patio_door \ No newline at end of file diff --git a/automations/house/home_occupied.yaml b/automations/house/home_occupied.yaml new file mode 100644 index 0000000..07888c7 --- /dev/null +++ b/automations/house/home_occupied.yaml @@ -0,0 +1,36 @@ +alias: 'Home occupied' +id: automation_home_occupied +mode: single +max_exceeded: silent + +trigger: + - platform: state + entity_id: + - input_boolean.clint_home + - input_boolean.emmett_home + - input_boolean.bridget_home + - input_boolean.kristy_home + - input_boolean.marshall_home + - input_boolean.tess_home + - input_boolean.ebin_home + - input_boolean.guest_mode + to: 'on' + - platform: state + entity_id: cover.garage_door + from: 'off' + to: 'on' +condition: + - condition: state + entity_id: input_boolean.home_occupied + state: 'off' + # One person is home + - condition: numeric_state + entity_id: group.person_household + above: 0 + value_template: "{{ dict((states|selectattr('entity_id', 'in', state_attr('group.person_household', 'entity_id'))|list)|groupby('state'))['on']|count }}" +action: + - service: input_boolean.turn_on + entity_id: input_boolean.home_occupied + - service: automation.turn_off + data: + entity_id: automation.garage_open_nobody_home diff --git a/automations/house/house_mode_change.yaml b/automations/house/house_mode_change.yaml new file mode 100644 index 0000000..f6da62a --- /dev/null +++ b/automations/house/house_mode_change.yaml @@ -0,0 +1,104 @@ +alias: House Mode Change +id: automation_house_mode_change +mode: queued + +# Detect when something changes and/or when Home Assistant Starts +trigger: + - platform: state + entity_id: + - input_boolean.home_occupied + - input_boolean.bedtime + - sensor.people_count + + + - platform: homeassistant + event: start + +action: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.home_occupied + state: 'off' + sequence: + - service: input_select.select_option + data: + entity_id: input_select.house + option: 'Away' + + - conditions: + - condition: state + entity_id: input_boolean.home_occupied + state: 'on' + + - condition: state + entity_id: sensor.people_count + state: '1' + sequence: + - service: input_select.select_option + data: + entity_id: input_select.house + option: 'Bachelor' + + - service: homeassistant.turn_on + entity_id: + - input_boolean.lighting_automations + - input_boolean.brightness_automations + + - conditions: + - condition: state + entity_id: input_boolean.home_occupied + state: 'on' + - condition: numeric_state + entity_id: sensor.people_count + above: 1 + below: 4 + - condition: or + conditions: + - condition: state + entity_id: input_boolean.emmett_home + state: 'on' + - condition: state + entity_id: input_boolean.bridget_home + state: 'on' + + sequence: + - service: input_select.select_option + data: + entity_id: input_select.house + option: 'Dad' + - service: homeassistant.turn_on + entity_id: + - input_boolean.lighting_automations + - input_boolean.brightness_automations + + - conditions: + - condition: state + entity_id: input_select.house + state: 'Guest' + sequence: + - service: homeassistant.turn_off + entity_id: + - input_boolean.lighting_automations + + + - conditions: + - condition: state + entity_id: input_select.house + state: 'Manual' + sequence: + - service: homeassistant.turn_off + entity_id: + - input_boolean.lighting_automations + - input_boolean.brightness_automations + + default: + - service: input_select.select_option + data: + entity_id: input_select.house + option: 'Auto' + + - service: homeassistant.turn_on + entity_id: + - input_boolean.lighting_automations + - input_boolean.brightness_automations diff --git a/automations/house/leaving_home.yaml b/automations/house/leaving_home.yaml new file mode 100644 index 0000000..f43366c --- /dev/null +++ b/automations/house/leaving_home.yaml @@ -0,0 +1,16 @@ +alias: "Leaving Home" +id: automation_leaving_home +mode: single +max_exceeded: silent + +trigger: + - platform: state + entity_id: input_boolean.home_occupied + to: "off" + for: "00:05:00" +action: + - service: homeassistant.turn_off + entity_id: + - group.my_lights + - group.my_fans + - group.my_room_status diff --git a/automations/house/update_automatic_light_profile.yaml b/automations/house/update_automatic_light_profile.yaml new file mode 100644 index 0000000..09ccc76 --- /dev/null +++ b/automations/house/update_automatic_light_profile.yaml @@ -0,0 +1,219 @@ +alias: 'Update Automatic Light Profile' +id: automation_update_automatic_light_profile +trigger: + - platform: state + entity_id: + - input_select.time_of_day + - input_select.early_morning_mode + - input_select.morning_mode + - input_select.late_morning_mode + - input_select.early_afternoon_mode + - input_select.late_afternoon_mode + - input_select.early_evening_mode + - input_select.evening_mode + - input_select.late_evening_mode + - input_select.night_mode + - input_select.early_morning_kids_mode + - input_select.morning_kids_mode + - input_select.late_morning_kids_mode + - input_select.early_afternoon_kids_mode + - input_select.late_afternoon_kids_mode + - input_select.early_evening_kids_mode + - input_select.evening_kids_mode + - input_select.late_evening_kids_mode + - input_select.night_kids_mode +action: +- choose: + - conditions: + - condition: state + entity_id: binary_sensor.have_custody + state: 'off' + sequence: + - choose: + # Set to Energize during Early Morning (04:00 - 06:00) + - conditions: + - condition: state + entity_id: input_select.time_of_day + state: 'Early Morning' + sequence: + - service: input_select.select_option + data: + entity_id: input_select.automatic_light_profile + option: "{{states('input_select.early_morning_mode')}}" + # Set to Energize during Morning (06:00 - 09:00) + - conditions: + - condition: state + entity_id: input_select.time_of_day + state: 'Morning' + sequence: + - service: input_select.select_option + data: + entity_id: input_select.automatic_light_profile + option: "{{states('input_select.morning_mode')}}" + # Set to Energize during Late Morning (09:00 - 12:00) + - conditions: + - condition: state + entity_id: input_select.time_of_day + state: 'Late Morning' + sequence: + - service: input_select.select_option + data: + entity_id: input_select.automatic_light_profile + option: "{{states('input_select.late_morning_mode')}}" + # Set to Concentrate during Early Afternoon (12:00 - 15:00) + - conditions: + - condition: state + entity_id: input_select.time_of_day + state: 'Early Afternoon' + sequence: + - service: input_select.select_option + data: + entity_id: input_select.automatic_light_profile + option: "{{states('input_select.early_afternoon_mode')}}" + # Set to Concentrate during Late Afternoon (15:00 - 17:00) + - conditions: + - condition: state + entity_id: input_select.time_of_day + state: 'Late Afternoon' + sequence: + - service: input_select.select_option + data: + entity_id: input_select.automatic_light_profile + option: "{{states('input_select.late_afternoon_mode')}}" + # Set to Read during Early Evening (17:00 - 19:00) + - conditions: + - condition: state + entity_id: input_select.time_of_day + state: 'Early Evening' + sequence: + - service: input_select.select_option + data: + entity_id: input_select.automatic_light_profile + option: "{{states('input_select.early_evening_mode')}}" + # Set to Relax during Evening (19:00 - 22:00) + - conditions: + - condition: state + entity_id: input_select.time_of_day + state: 'Evening' + sequence: + - service: input_select.select_option + data: + entity_id: input_select.automatic_light_profile + option: "{{states('input_select.evening_mode')}}" + # Set to Dimmed during Late Evening (22:00 - 00:00) + - conditions: + - condition: state + entity_id: input_select.time_of_day + state: 'Late Evening' + sequence: + - service: input_select.select_option + data: + entity_id: input_select.automatic_light_profile + option: "{{states('input_select.late_evening_mode')}}" + # Set to Nightlight during Night (00:00 - 04:00) + - conditions: + - condition: state + entity_id: input_select.time_of_day + state: 'Night' + sequence: + - service: input_select.select_option + data: + entity_id: input_select.automatic_light_profile + option: "{{states('input_select.night_mode')}}" + + - conditions: + - condition: state + entity_id: binary_sensor.have_custody + state: 'on' + sequence: + - choose: + # Set to Energize during Early Morning (04:00 - 06:00) + - conditions: + - condition: state + entity_id: input_select.time_of_day + state: 'Early Morning' + sequence: + - service: input_select.select_option + data: + entity_id: input_select.automatic_light_profile + option: "{{states('input_select.early_morning_kids_mode')}}" + # Set to Energize during Morning (06:00 - 09:00) + - conditions: + - condition: state + entity_id: input_select.time_of_day + state: 'Morning' + sequence: + - service: input_select.select_option + data: + entity_id: input_select.automatic_light_profile + option: "{{states('input_select.morning_kids_mode')}}" + # Set to Energize during Late Morning (09:00 - 12:00) + - conditions: + - condition: state + entity_id: input_select.time_of_day + state: 'Late Morning' + sequence: + - service: input_select.select_option + data: + entity_id: input_select.automatic_light_profile + option: "{{states('input_select.late_morning_kids_mode')}}" + # Set to Concentrate during Early Afternoon (12:00 - 15:00) + - conditions: + - condition: state + entity_id: input_select.time_of_day + state: 'Early Afternoon' + sequence: + - service: input_select.select_option + data: + entity_id: input_select.automatic_light_profile + option: "{{states('input_select.early_afternoon_kids_mode')}}" + # Set to Concentrate during Late Afternoon (15:00 - 17:00) + - conditions: + - condition: state + entity_id: input_select.time_of_day + state: 'Late Afternoon' + sequence: + - service: input_select.select_option + data: + entity_id: input_select.automatic_light_profile + option: "{{states('input_select.late_afternoon_kids_mode')}}" + # Set to Read during Early Evening (17:00 - 19:00) + - conditions: + - condition: state + entity_id: input_select.time_of_day + state: 'Early Evening' + sequence: + - service: input_select.select_option + data: + entity_id: input_select.automatic_light_profile + option: "{{states('input_select.early_evening_kids_mode')}}" + # Set to Relax during Evening (19:00 - 22:00) + - conditions: + - condition: state + entity_id: input_select.time_of_day + state: 'Evening' + sequence: + - service: input_select.select_option + data: + entity_id: input_select.automatic_light_profile + option: "{{states('input_select.evening_kids_mode')}}" + # Set to Dimmed during Late Evening (22:00 - 00:00) + - conditions: + - condition: state + entity_id: input_select.time_of_day + state: 'Late Evening' + sequence: + - service: input_select.select_option + data: + entity_id: input_select.automatic_light_profile + option: "{{states('input_select.late_evening_kids_mode')}}" + # Set to Nightlight during Night (00:00 - 04:00) + - conditions: + - condition: state + entity_id: input_select.time_of_day + state: 'Night' + sequence: + - service: input_select.select_option + data: + entity_id: input_select.automatic_light_profile + option: "{{states('input_select.night_kids_mode')}}" \ No newline at end of file diff --git a/automations/house/update_light_off_delay.yaml b/automations/house/update_light_off_delay.yaml new file mode 100644 index 0000000..98933c9 --- /dev/null +++ b/automations/house/update_light_off_delay.yaml @@ -0,0 +1,268 @@ +alias: Update Light Off Delay +id: automation_update_light_off_delay +mode: queued + +# Detect when something changes and/or when Home Assistant Starts +trigger: + - platform: state + entity_id: input_select.house + + - platform: homeassistant + event: start + +action: + - choose: + - alias: "House set to Away" + conditions: + - condition: state + entity_id: input_select.house + state: 'Away' + sequence: + - service: input_number.set_value + target: + entity_id: input_number.short_light_off_delay_seconds + data: + value: 30 + - service: input_number.set_value + target: + entity_id: input_number.short_light_off_delay_minutes + data: + value: 0 + - service: input_number.set_value + target: + entity_id: input_number.short_light_off_delay_hours + data: + value: 0 + - service: input_number.set_value + target: + entity_id: input_number.normal_light_off_delay_seconds + data: + value: 0 + - service: input_number.set_value + target: + entity_id: input_number.normal_light_off_delay_minutes + data: + value: 5 + - service: input_number.set_value + target: + entity_id: input_number.normal_light_off_delay_hours + data: + value: 0 + - service: input_number.set_value + target: + entity_id: input_number.long_light_off_delay_seconds + data: + value: 0 + - service: input_number.set_value + target: + entity_id: input_number.long_light_off_delay_minutes + data: + value: 30 + - service: input_number.set_value + target: + entity_id: input_number.long_light_off_delay_hours + data: + value: 0 + + - alias: "House set to Bachelor - 10 minutes" + conditions: + - condition: state + entity_id: input_select.house + state: 'Bachelor' + sequence: + - service: input_number.set_value + target: + entity_id: input_number.short_light_off_delay_seconds + data: + value: 0 + - service: input_number.set_value + target: + entity_id: input_number.short_light_off_delay_minutes + data: + value: 1 + - service: input_number.set_value + target: + entity_id: input_number.short_light_off_delay_hours + data: + value: 0 + - service: input_number.set_value + target: + entity_id: input_number.normal_light_off_delay_seconds + data: + value: 0 + - service: input_number.set_value + target: + entity_id: input_number.normal_light_off_delay_minutes + data: + value: 10 + - service: input_number.set_value + target: + entity_id: input_number.normal_light_off_delay_hours + data: + value: 0 + - service: input_number.set_value + target: + entity_id: input_number.long_light_off_delay_seconds + data: + value: 0 + - service: input_number.set_value + target: + entity_id: input_number.long_light_off_delay_minutes + data: + value: 0 + - service: input_number.set_value + target: + entity_id: input_number.long_light_off_delay_hours + data: + value: 1 + + - alias: "House set to Guest - 30 minutes" + conditions: + - condition: state + entity_id: input_select.house + state: 'Manual' + sequence: + - service: input_number.set_value + target: + entity_id: input_number.short_light_off_delay_seconds + data: + value: 0 + - service: input_number.set_value + target: + entity_id: input_number.short_light_off_delay_minutes + data: + value: 10 + - service: input_number.set_value + target: + entity_id: input_number.short_light_off_delay_hours + data: + value: 0 + - service: input_number.set_value + target: + entity_id: input_number.normal_light_off_delay_seconds + data: + value: 0 + - service: input_number.set_value + target: + entity_id: input_number.normal_light_off_delay_minutes + data: + value: 30 + - service: input_number.set_value + target: + entity_id: input_number.normal_light_off_delay_hours + data: + value: 0 + - service: input_number.set_value + target: + entity_id: input_number.long_light_off_delay_seconds + data: + value: 0 + - service: input_number.set_value + target: + entity_id: input_number.long_light_off_delay_minutes + data: + value: 0 + - service: input_number.set_value + target: + entity_id: input_number.long_light_off_delay_hours + data: + value: 1 + + - alias: "House set to Manual - 60 minutes" + conditions: + - condition: state + entity_id: input_select.house + state: 'Manual' + sequence: + - service: input_number.set_value + target: + entity_id: input_number.short_light_off_delay_seconds + data: + value: 0 + - service: input_number.set_value + target: + entity_id: input_number.short_light_off_delay_minutes + data: + value: 20 + - service: input_number.set_value + target: + entity_id: input_number.short_light_off_delay_hours + data: + value: 0 + - service: input_number.set_value + target: + entity_id: input_number.normal_light_off_delay_seconds + data: + value: 0 + - service: input_number.set_value + target: + entity_id: input_number.normal_light_off_delay_minutes + data: + value: 0 + - service: input_number.set_value + target: + entity_id: input_number.normal_light_off_delay_hours + data: + value: 1 + - service: input_number.set_value + target: + entity_id: input_number.long_light_off_delay_seconds + data: + value: 0 + - service: input_number.set_value + target: + entity_id: input_number.long_light_off_delay_minutes + data: + value: 0 + - service: input_number.set_value + target: + entity_id: input_number.long_light_off_delay_hours + data: + value: 2 + + default: + - service: input_number.set_value + target: + entity_id: input_number.short_light_off_delay_seconds + data: + value: 0 + - service: input_number.set_value + target: + entity_id: input_number.short_light_off_delay_minutes + data: + value: 10 + - service: input_number.set_value + target: + entity_id: input_number.short_light_off_delay_hours + data: + value: 0 + - service: input_number.set_value + target: + entity_id: input_number.normal_light_off_delay_seconds + data: + value: 0 + - service: input_number.set_value + target: + entity_id: input_number.normal_light_off_delay_minutes + data: + value: 30 + - service: input_number.set_value + target: + entity_id: input_number.normal_light_off_delay_hours + data: + value: 0 + - service: input_number.set_value + target: + entity_id: input_number.long_light_off_delay_seconds + data: + value: 0 + - service: input_number.set_value + target: + entity_id: input_number.long_light_off_delay_minutes + data: + value: 0 + - service: input_number.set_value + target: + entity_id: input_number.long_light_off_delay_hours + data: + value: 1 diff --git a/automations/people/Bridget/bridget_asleep.yaml b/automations/people/Bridget/bridget_asleep.yaml new file mode 100644 index 0000000..44805de --- /dev/null +++ b/automations/people/Bridget/bridget_asleep.yaml @@ -0,0 +1,28 @@ +alias: Bridget Asleep +id: automation_bridget_asleep +mode: restart + +trigger: + - platform: state + id: in_bed + entity_id: input_boolean.bridget_in_bed + to: 'on' + for: '00:20:00' + - platform: homeassistant + event: start + +condition: + - condition: state + entity_id: + - input_boolean.bridget_home + - input_boolean.kids_bedtime + state: 'on' + - condition: state + entity_id: input_boolean.bridget_is_awake + state: 'on' + - condition: trigger + id: "in_bed" + +action: + - service: homeassistant.turn_off + entity_id: input_boolean.bridget_is_awake diff --git a/automations/people/Bridget/bridget_away.yaml b/automations/people/Bridget/bridget_away.yaml new file mode 100644 index 0000000..15bb3e7 --- /dev/null +++ b/automations/people/Bridget/bridget_away.yaml @@ -0,0 +1,21 @@ +alias: "Bridget Away" +id: automation_bridget_away +mode: restart + +trigger: + - platform: state + entity_id: + - binary_sensor.bridget_home + to: "off" + - platform: time_pattern + minutes: "/5" +condition: + - condition: state + entity_id: input_boolean.bridget_home + state: "on" + - condition: state + entity_id: binary_sensor.bridget_home + state: "off" +action: + - service: input_boolean.turn_off + entity_id: input_boolean.bridget_home diff --git a/automations/people/Bridget/bridget_home.yaml b/automations/people/Bridget/bridget_home.yaml new file mode 100644 index 0000000..5b5bccb --- /dev/null +++ b/automations/people/Bridget/bridget_home.yaml @@ -0,0 +1,23 @@ +alias: "Bridget Home" +id: automation_bridget_home +mode: restart + +trigger: + - platform: state + entity_id: + - binary_sensor.bridget_home + to: "on" + - platform: time_pattern + minutes: "/5" +condition: + - condition: state + entity_id: input_boolean.bridget_home + state: "off" + - condition: state + entity_id: binary_sensor.bridget_home + state: "on" +action: + - service: input_boolean.turn_off + entity_id: input_boolean.bridget_travelling + - service: input_boolean.turn_on + entity_id: input_boolean.bridget_home diff --git a/automations/people/Bridget/bridget_in_bed.yaml b/automations/people/Bridget/bridget_in_bed.yaml new file mode 100644 index 0000000..ae312a8 --- /dev/null +++ b/automations/people/Bridget/bridget_in_bed.yaml @@ -0,0 +1,38 @@ +alias: Bridget In Bed +id: automation_bridget_in_bed +mode: restart + +trigger: + - platform: state + entity_id: binary_sensor.white_bed_occupied + to: 'on' + for: '00:10:00' + - platform: state + entity_id: input_boolean.kids_bedtime + to: 'on' + - platform: homeassistant + event: start + +condition: + - condition: state + entity_id: + - input_boolean.bridget_home + - input_boolean.kids_bedtime + state: 'on' + - condition: state + entity_id: + - binary_sensor.white_bed_occupied + state: 'on' + for: '00:10:00' + - condition: state + entity_id: input_boolean.bridget_in_bed + state: 'off' + #- condition: state + # entity_id: binary_sensor.white_bed_occupied + # state: 'on' + # for: + # minutes: 5 + +action: + - service: homeassistant.turn_on + entity_id: input_boolean.bridget_in_bed diff --git a/automations/people/Bridget/bridget_location_update.yaml b/automations/people/Bridget/bridget_location_update.yaml new file mode 100644 index 0000000..f2e4f21 --- /dev/null +++ b/automations/people/Bridget/bridget_location_update.yaml @@ -0,0 +1,26 @@ +initial_state: "on" +alias: "Bridget Location Update" +id: automation_bridget_location_update +mode: restart + +trigger: + # Bridget moved + - platform: state + entity_id: + - input_select.bridget_status_dropdown + - input_boolean.bridget_home + # Clint moved + - input_select.clint_status_dropdown + - input_boolean.clint_home + # Custody changed + - binary_sensor.have_custody + # Sleeping status changed + - input_boolean.bridget_is_awake + - input_boolean.bridget_in_bed +condition: + - condition: template + value_template: "{{ trigger.from_state.state != trigger.to_state.state }}" + +action: + - service: script.turn_on + entity_id: script.bridget_travel_sensor \ No newline at end of file diff --git a/automations/people/Bridget/bridget_status_at_startup.yaml b/automations/people/Bridget/bridget_status_at_startup.yaml new file mode 100644 index 0000000..8fc9a19 --- /dev/null +++ b/automations/people/Bridget/bridget_status_at_startup.yaml @@ -0,0 +1,47 @@ +alias: Bridget Status at Startup +id: automation_bridget_status_at_startup +mode: restart + +trigger: + - platform: homeassistant + event: start +condition: + - condition: state + entity_id: input_boolean.bridget_home + state: 'on' + +action: + - choose: + - conditions: + - condition: time + after: '20:00:00' + before: '21:00:00' + sequence: + - service: input_boolean.turn_on + entity_id: + - input_boolean.bridget_in_bed + + - service: input_boolean.turn_on + entity_id: + - input_boolean.bridget_is_awake + - conditions: + - condition: time + after: '21:00:00' + before: '06:00:00' + sequence: + - service: input_boolean.turn_on + entity_id: + - input_boolean.bridget_in_bed + + - service: input_boolean.turn_off + entity_id: + - input_boolean.bridget_is_awake + default: + - service: input_boolean.turn_off + entity_id: + - input_boolean.bridget_in_bed + + - service: input_boolean.turn_on + entity_id: + - input_boolean.bridget_is_awake + diff --git a/automations/people/Clint/Clint_WFH.yaml b/automations/people/Clint/Clint_WFH.yaml new file mode 100644 index 0000000..ff5eedb --- /dev/null +++ b/automations/people/Clint/Clint_WFH.yaml @@ -0,0 +1,26 @@ +alias: Clint WFH +id: automation_clint_wfh +mode: restart +trigger: + - platform: state + entity_id: binary_sensor.clint_work_from_home + + - platform: homeassistant + event: start + +action: +- choose: + - conditions: + - condition: state + entity_id: binary_sensor.clint_work_from_home + state: 'on' + sequence: + - service: homeassistant.turn_on + entity_id: input_boolean.clint_work_from_home + - conditions: + - condition: state + entity_id: binary_sensor.clint_work_from_home + state: 'off' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.clint_work_from_home diff --git a/automations/people/Clint/Clint_asleep.yaml b/automations/people/Clint/Clint_asleep.yaml new file mode 100644 index 0000000..f8fb85e --- /dev/null +++ b/automations/people/Clint/Clint_asleep.yaml @@ -0,0 +1,26 @@ +alias: Clint Asleep +id: automation_clint_asleep + +initial_state: 'on' +trigger: + - platform: state + entity_id: input_boolean.clint_in_bed + to: 'on' + for: + minutes: 15 +condition: + - condition: and + conditions: + - condition: state + entity_id: input_boolean.clint_is_awake + state: 'on' + - condition: state + entity_id: input_boolean.clint_home + state: 'on' + - condition: time + after: '21:00:00' + before: '04:00:00' +action: + - service: input_boolean.turn_off + entity_id: input_boolean.clint_is_awake + diff --git a/automations/people/Clint/Clint_at_work.yaml b/automations/people/Clint/Clint_at_work.yaml new file mode 100644 index 0000000..389b98f --- /dev/null +++ b/automations/people/Clint/Clint_at_work.yaml @@ -0,0 +1,13 @@ +alias: Clint at Work +id: automation_clint_at_work +trigger: + platform: state + entity_id: device_tracker.pixel_7 + to: 'AGH' +action: + - service: automation.turn_on + entity_id: automation.clint_home_after_work + - service: input_text.set_value + data: + entity_id: input_text.person_clint + value: at work diff --git a/automations/people/Clint/Clint_awake.yaml b/automations/people/Clint/Clint_awake.yaml new file mode 100644 index 0000000..8e1950e --- /dev/null +++ b/automations/people/Clint/Clint_awake.yaml @@ -0,0 +1,15 @@ +alias: Clint Awake +id: automation_clint_awake +mode: restart + +trigger: + - platform: state + entity_id: input_boolean.clint_in_bed + to: 'off' + for: '00:00:30' +action: + - service: input_boolean.turn_on + entity_id: input_boolean.clint_is_awake + + - service: script.turn_on + entity_id: script.clint_travel_sensor diff --git a/automations/people/Clint/Clint_away.yaml b/automations/people/Clint/Clint_away.yaml new file mode 100644 index 0000000..f2a58a0 --- /dev/null +++ b/automations/people/Clint/Clint_away.yaml @@ -0,0 +1,39 @@ +alias: Clint Away +id: automation_clint_away +mode: restart + +trigger: + - platform: state + entity_id: + - device_tracker.pixel_7 + - person.clint + - group.person_clint + from: 'home' + + - platform: homeassistant + event: start + +condition: + + - condition: not + conditions: + - condition: state + entity_id: person.clint + state: 'home' + - condition: state + entity_id: device_tracker.pixel_7 + state: 'home' + +action: +- choose: + - conditions: + - condition: not + conditions: + - condition: state + entity_id: person.clint + state: 'home' + sequence: + - service: input_boolean.turn_off + entity_id: input_boolean.clint_home + +- delay: '00:00:30' \ No newline at end of file diff --git a/automations/people/Clint/Clint_home.yaml b/automations/people/Clint/Clint_home.yaml new file mode 100644 index 0000000..9d338f0 --- /dev/null +++ b/automations/people/Clint/Clint_home.yaml @@ -0,0 +1,58 @@ +alias: Clint Home +id: automation_clint_home +mode: restart + +trigger: + - platform: state + entity_id: + - device_tracker.pixel_7 + - person.clint + - group.person_clint + - device_tracker.pixel_7_wifi + to: 'home' + + - platform: state + id: car_home + entity_id: + - binary_sensor.gray_suv_east_side + - binary_sensor.gray_suv_west_side + from: 'off' + to: 'on' + + - platform: homeassistant + event: start + +action: +- choose: + - conditions: + - condition: or + conditions: + - condition: numeric_state + entity_id: group.person_clint + above: 0 + value_template: "{{ dict((states|selectattr('entity_id', 'in', state_attr('group.person_clint', 'entity_id'))|list)|groupby('state'))['home']|count }}" + - condition: state + entity_id: sensor.pixel_7_wifi_connection + state: 'DreamWeaver' + - condition: state + entity_id: sensor.pixel_7_wifi_connection + state: 'DreamIoT-2G' + - condition: state + entity_id: sensor.pixel_7_wifi_connection + state: 'pozfam' + - condition: state + entity_id: sensor.pixel_7_wifi_connection + state: 'pozfam-2.4G' + - condition: trigger + id: "car_home" + sequence: + - service: input_boolean.turn_off + entity_id: input_boolean.clint_travelling + - service: input_boolean.turn_on + entity_id: input_boolean.clint_home + - service: automation.turn_on + entity_id: automation.clint_at_work + +- delay: '00:00:30' + + diff --git a/automations/people/Clint/Clint_home_after_work.yaml b/automations/people/Clint/Clint_home_after_work.yaml new file mode 100644 index 0000000..6b1bca3 --- /dev/null +++ b/automations/people/Clint/Clint_home_after_work.yaml @@ -0,0 +1,28 @@ +initial_state: 'off' +alias: 'clint home after work' +id: automation_home_after_work +trigger: + platform: state + entity_id: device_tracker.pixel_7 + to: 'home' + for: + minutes: 10 +condition: + condition: and + conditions: + - condition: state + entity_id: input_boolean.notify_clint_work + state: 'on' + - condition: or + conditions: + - condition: time + after: '15:00:00' + weekday: + - mon + - tue + - wed + - thu + - fri +action: + - service: homeassistant.turn_off + entity_id: automation.clint_home_after_work diff --git a/automations/people/Clint/Clint_in_bed.yaml b/automations/people/Clint/Clint_in_bed.yaml new file mode 100644 index 0000000..d280e2c --- /dev/null +++ b/automations/people/Clint/Clint_in_bed.yaml @@ -0,0 +1,70 @@ +alias: Clint in Bed +id: automation_clint_in_bed + +trigger: + # Bed in master bedroom is occupied + - platform: state + entity_id: binary_sensor.master_bed_occupied + to: 'on' + # Radio playing + - platform: state + entity_id: media_player.master_bedroom_clock + to: 'playing' + - platform: state + entity_id: media_player.master_bedroom_clock + to: 'idle' + # Light on + - platform: state + entity_id: light.master_bedroom_hue + to: 'on' + # Front room unoccupied for at least 5 minutes + - platform: state + entity_id: input_boolean.front_room_occupied + to: 'off' + for: + minutes: 5 + # Something gets plugged in + - platform: state + entity_id: sensor.pixel_7_charger_type + to: "Wireless" + - platform: state + entity_id: sensor.pixel_7_charger_type + to: "wireless" + - platform: state + entity_id: input_boolean.clint_tablet_charging + to: 'on' +condition: + - alias: "An adult is home and not in bed" + condition: or + conditions: + - alias: "Clint is home and not in bed" + condition: and + conditions: + - condition: state + entity_id: input_boolean.clint_in_bed + state: 'off' + - condition: state + entity_id: input_boolean.clint_home + state: 'on' + - alias: "Kristy is home and not in bed" + condition: and + conditions: + - condition: state + entity_id: input_boolean.kristy_in_bed + state: 'off' + - condition: state + entity_id: input_boolean.kristy_home + state: 'on' + - alias: "Its between 8:30PM and 5AM" + condition: time + after: '20:30:00' + before: '05:00:00' + + - alias: "The bed is occupied" + condition: state + entity_id: binary_sensor.master_bed_occupied + state: 'on' +action: + - service: input_boolean.turn_on + entity_id: input_boolean.clint_in_bed + diff --git a/automations/people/Clint/Clint_location_update.yaml b/automations/people/Clint/Clint_location_update.yaml new file mode 100644 index 0000000..4ca9dd4 --- /dev/null +++ b/automations/people/Clint/Clint_location_update.yaml @@ -0,0 +1,19 @@ +initial_state: 'on' +alias: 'Clint Location Update' +id: automation_clint_location_update +mode: restart + +trigger: + # I've moved + - platform: state + entity_id: + - input_select.clint_status_dropdown + - input_boolean.clint_home + +condition: + - condition: template + value_template: '{{ trigger.from_state.state != trigger.to_state.state }}' + +action: + - service: script.turn_on + entity_id: script.clint_travel_sensor diff --git a/automations/people/Clint/Clint_travelling.yaml b/automations/people/Clint/Clint_travelling.yaml new file mode 100644 index 0000000..5439c42 --- /dev/null +++ b/automations/people/Clint/Clint_travelling.yaml @@ -0,0 +1,15 @@ +alias: Clint Travelling +id: automation_clint_travelling +initial_state: 'on' +trigger: + - platform: homeassistant + event: start + - platform: time + at: '21:00:00' +condition: +- condition: state + entity_id: input_boolean.clint_home + state: 'off' +action: + - service: input_boolean.turn_on + entity_id: input_boolean.clint_travelling diff --git a/automations/people/Clint/Clint_up.yaml b/automations/people/Clint/Clint_up.yaml new file mode 100644 index 0000000..ccbfe26 --- /dev/null +++ b/automations/people/Clint/Clint_up.yaml @@ -0,0 +1,44 @@ +alias: 'Clint Up' +id: automation_clint_up +initial_state: 'on' +trigger: + - platform: state + entity_id: media_player.great_room + to: 'playing' + - platform: state + entity_id: media_player.great_room + to: 'idle' + - platform: state + entity_id: binary_sensor.master_bed_occupied + to: 'off' + for: '00:05:00' + - platform: state + entity_id: + - binary_sensor.master_bedroom_door_contact + - binary_sensor.master_suite_door_contact + to: 'on' + - platform: state + entity_id: binary_sensor.pixel_7_is_charging + from: 'on' + to: 'off' + for: '00:10:00' +condition: + - condition: and + conditions: + - condition: state + entity_id: input_boolean.clint_home + state: 'on' + - condition: state + entity_id: input_boolean.clint_in_bed + state: 'on' + - condition: time + after: '04:00:00' + before: '22:00:00' + - condition: state + entity_id: binary_sensor.master_bed_occupied + state: 'off' + for: '00:01:00' +action: + - service: input_boolean.turn_off + entity_id: input_boolean.clint_in_bed + diff --git a/automations/people/Clint/Clint_wakeup.yaml b/automations/people/Clint/Clint_wakeup.yaml new file mode 100644 index 0000000..b9276ad --- /dev/null +++ b/automations/people/Clint/Clint_wakeup.yaml @@ -0,0 +1,37 @@ +alias: Clint Wakeup +id: automation_clint_wake_up +mode: restart + +trigger: + - platform: state + entity_id: binary_sensor.morning + to: 'on' + - platform: state + entity_id: binary_sensor.master_bed_occupied + to: 'on' + +condition: + - condition: state + entity_id: input_boolean.clint_home + state: 'on' + - condition: state + entity_id: binary_sensor.master_bed_occupied + state: 'on' + - condition: state + entity_id: binary_sensor.morning + state: 'on' + - condition: state + entity_id: binary_sensor.work_day + state: 'on' + +action: + - service: input_select.select_option + data: + entity_id: input_select.master_bedroom_mode + option: 'Auto' + + - service: homeassistant.turn_on + data: + entity_id: light.master_bedroom_hue + + - delay: '00:30:00' diff --git a/automations/people/Clint/clint_changing_zones.yaml b/automations/people/Clint/clint_changing_zones.yaml new file mode 100644 index 0000000..3814e2d --- /dev/null +++ b/automations/people/Clint/clint_changing_zones.yaml @@ -0,0 +1,19 @@ +initial_state: 'on' +alias: 'Clint changing zones' +id: automation_clint_changing_zones +trigger: + # Been away for a few minutes + - platform: state + entity_id: device_tracker.pixel_7 + to: 'not_home' + for: '00:05:00' + # Arrived in a zone + - platform: state + entity_id: device_tracker.pixel_7 + from: 'not_home' +condition: + # Been at least 5 minutes + - condition: template + value_template: "{{ ( as_timestamp(now()) - as_timestamp(state_attr('script.clint_traveltime','last_triggered'))|float)|float > 300 }}" +action: + - service: script.clint_traveltime diff --git a/automations/people/Clint/clint_status_at_startup.yaml b/automations/people/Clint/clint_status_at_startup.yaml new file mode 100644 index 0000000..e45c427 --- /dev/null +++ b/automations/people/Clint/clint_status_at_startup.yaml @@ -0,0 +1,46 @@ +alias: Clint Status at Startup +id: automation_clint_status_at_startup +mode: restart + +trigger: + - platform: homeassistant + event: start +condition: + - condition: state + entity_id: input_boolean.clint_home + state: 'on' + +action: + - choose: + - conditions: + - condition: time + after: '23:30:00' + before: '00:00:00' + sequence: + - service: input_boolean.turn_on + entity_id: + - input_boolean.clint_in_bed + + - service: input_boolean.turn_on + entity_id: + - input_boolean.clint_is_awake + - conditions: + - condition: time + after: '00:00:00' + before: '06:00:00' + sequence: + - service: input_boolean.turn_on + entity_id: + - input_boolean.clint_in_bed + + - service: input_boolean.turn_off + entity_id: + - input_boolean.clint_is_awake + default: + - service: input_boolean.turn_off + entity_id: + - input_boolean.clint_in_bed + + - service: input_boolean.turn_on + entity_id: + - input_boolean.clint_is_awake \ No newline at end of file diff --git a/automations/people/Clint/set_clint_next_alarm.yaml b/automations/people/Clint/set_clint_next_alarm.yaml new file mode 100644 index 0000000..bdda3f5 --- /dev/null +++ b/automations/people/Clint/set_clint_next_alarm.yaml @@ -0,0 +1,41 @@ +alias: Set Clint Next Alarm +id: automation_set_clint_next_alarm + +trigger: + - platform: state + entity_id: binary_sensor.work_day + to: 'off' + + - platform: state + entity_id: binary_sensor.work_day + to: 'on' + + - platform: time + at: '01:00:00' + + - platform: homeassistant + event: start + +action: + - choose: + - conditions: + - condition: state + entity_id: binary_sensor.work_day + state: 'off' + sequence: + - service: input_datetime.set_datetime + target: + entity_id: input_datetime.clint_next_alarm + data: + time: "09:00:00" + + - conditions: + - condition: state + entity_id: binary_sensor.work_day + state: 'on' + sequence: + - service: input_datetime.set_datetime + target: + entity_id: input_datetime.clint_next_alarm + data: + time: "06:00:00" diff --git a/automations/people/Clint/wake_clint.yaml b/automations/people/Clint/wake_clint.yaml new file mode 100644 index 0000000..460c89c --- /dev/null +++ b/automations/people/Clint/wake_clint.yaml @@ -0,0 +1,40 @@ +alias: 'Wake Clint' + +id: automation_wake_clint +initial_state: on +trigger: + platform: time + at: input_datetime.clint_next_alarm +# condition: +# - condition: state +# entity_id: binary_sensor.work_day +# state: 'on' +action: + - service: input_boolean.turn_off + data: + entity_id: input_boolean.master_bedroom_asleep + + - service: media_player.volume_set + data: + entity_id: media_player.master_bedroom_clock + volume_level: 0.95 + + - choose: + - conditions: + - condition: state + entity_id: input_select.master_bedroom_mode + state: 'off' + sequence: + - service: input_select.select_option + data: + option: Energize + target: + entity_id: input_select.master_bedroom_mode + + - service: input_select.select_option + data: + option: Energize + target: + entity_id: input_select.master_bedroom_mode + + - service: script.wake_up_the_master_bedroom \ No newline at end of file diff --git a/automations/people/Ebin/ebin_away.yaml b/automations/people/Ebin/ebin_away.yaml new file mode 100644 index 0000000..a72a9a2 --- /dev/null +++ b/automations/people/Ebin/ebin_away.yaml @@ -0,0 +1,18 @@ +alias: 'Ebin Away' +id: automation_ebin_away +mode: restart + +trigger: + - platform: state + entity_id: + - binary_sensor.ebin_home + to: "off" + - platform: time_pattern + minutes: "/5" +condition: + - condition: state + entity_id: input_boolean.ebin_home + state: 'on' +action: + - service: input_boolean.turn_off + entity_id: input_boolean.ebin_home \ No newline at end of file diff --git a/automations/people/Ebin/ebin_home.yaml b/automations/people/Ebin/ebin_home.yaml new file mode 100644 index 0000000..6087474 --- /dev/null +++ b/automations/people/Ebin/ebin_home.yaml @@ -0,0 +1,25 @@ +alias: 'Ebin Home' +id: automation_ebin_home +mode: restart + +trigger: + - platform: state + entity_id: + - binary_sensor.ebin_home + to: "on" + - platform: time_pattern + minutes: "/5" +condition: + - condition: and + conditions: + - condition: state + entity_id: binary_sensor.have_custody + state: 'off' + - condition: state + entity_id: person.kristy + state: 'home' +action: + - service: input_boolean.turn_off + entity_id: input_boolean.ebin_travelling + - service: input_boolean.turn_on + entity_id: input_boolean.ebin_home \ No newline at end of file diff --git a/automations/people/Ebin/ebin_in_bed.yaml b/automations/people/Ebin/ebin_in_bed.yaml new file mode 100644 index 0000000..fe9d46a --- /dev/null +++ b/automations/people/Ebin/ebin_in_bed.yaml @@ -0,0 +1,41 @@ +alias: Ebin In Bed +id: automation_ebin_in_bed +mode: restart + +trigger: + - platform: state + entity_id: binary_sensor.white_bed_occupied + to: 'on' + for: '00:05:00' + - platform: state + entity_id: binary_sensor.black_bed_occupied + to: 'on' + for: '00:05:00' + - platform: homeassistant + event: start + +condition: + - condition: state + entity_id: + - input_boolean.ebin_home + - input_boolean.kids_bedtime + state: 'on' + - condition: state + entity_id: input_boolean.ebin_in_bed + state: 'off' + - condition: or + conditions: + - condition: state + entity_id: binary_sensor.black_bed_occupied + state: 'on' + for: + minutes: 5 + - condition: state + entity_id: binary_sensor.white_bed_occupied + state: 'on' + for: + minutes: 5 + +action: + - service: homeassistant.turn_on + entity_id: input_boolean.ebin_in_bed diff --git a/automations/people/Ebin/ebin_location_update.yaml b/automations/people/Ebin/ebin_location_update.yaml new file mode 100644 index 0000000..d2fc672 --- /dev/null +++ b/automations/people/Ebin/ebin_location_update.yaml @@ -0,0 +1,17 @@ +alias: 'Ebin Location Update' +id: automation_ebin_location_update +mode: restart + +trigger: + # I've moved + - platform: state + entity_id: + - input_select.ebin_status_dropdown + - input_boolean.ebin_home +condition: + - condition: template + value_template: '{{ trigger.from_state.state != trigger.to_state.state }}' + +action: + - service: script.turn_on + entity_id: script.ebin_travel_sensor diff --git a/automations/people/Ebin/ebin_status_at_startup.yaml b/automations/people/Ebin/ebin_status_at_startup.yaml new file mode 100644 index 0000000..6c39deb --- /dev/null +++ b/automations/people/Ebin/ebin_status_at_startup.yaml @@ -0,0 +1,46 @@ +alias: Ebin Status at Startup +id: automation_ebin_status_at_startup +mode: restart + +trigger: + - platform: homeassistant + event: start +condition: + - condition: state + entity_id: input_boolean.ebin_home + state: 'on' + +action: + - choose: + - conditions: + - condition: time + after: '20:00:00' + before: '21:00:00' + sequence: + - service: input_boolean.turn_on + entity_id: + - input_boolean.ebin_in_bed + + - service: input_boolean.turn_on + entity_id: + - input_boolean.ebin_is_awake + - conditions: + - condition: time + after: '21:00:00' + before: '06:00:00' + sequence: + - service: input_boolean.turn_on + entity_id: + - input_boolean.ebin_in_bed + + - service: input_boolean.turn_off + entity_id: + - input_boolean.ebin_is_awake + default: + - service: input_boolean.turn_off + entity_id: + - input_boolean.ebin_in_bed + + - service: input_boolean.turn_on + entity_id: + - input_boolean.ebin_is_awake \ No newline at end of file diff --git a/automations/people/Emmett/emmett_asleep.yaml b/automations/people/Emmett/emmett_asleep.yaml new file mode 100644 index 0000000..bf6205a --- /dev/null +++ b/automations/people/Emmett/emmett_asleep.yaml @@ -0,0 +1,28 @@ +alias: Emmett Asleep +id: automation_emmett_asleep +mode: restart + +trigger: + - platform: state + id: in_bed + entity_id: input_boolean.emmett_in_bed + to: 'on' + for: '00:20:00' + - platform: homeassistant + event: start + +condition: + - condition: state + entity_id: + - input_boolean.emmett_home + - input_boolean.kids_bedtime + state: 'on' + - condition: state + entity_id: input_boolean.emmett_is_awake + state: 'on' + - condition: trigger + id: "in_bed" + +action: + - service: homeassistant.turn_off + entity_id: input_boolean.emmett_is_awake diff --git a/automations/people/Emmett/emmett_away.yaml b/automations/people/Emmett/emmett_away.yaml new file mode 100644 index 0000000..8e7b6d6 --- /dev/null +++ b/automations/people/Emmett/emmett_away.yaml @@ -0,0 +1,20 @@ +alias: 'Emmett Away' +id: automation_emmett_away +mode: restart + +trigger: + - platform: state + entity_id: binary_sensor.emmett_home + to: 'off' + - platform: time_pattern + minutes: "/5" +condition: + - condition: state + entity_id: input_boolean.emmett_home + state: 'on' + - condition: state + entity_id: binary_sensor.emmett_home + state: 'off' +action: + - service: input_boolean.turn_off + entity_id: input_boolean.emmett_home diff --git a/automations/people/Emmett/emmett_home.yaml b/automations/people/Emmett/emmett_home.yaml new file mode 100644 index 0000000..af4ae60 --- /dev/null +++ b/automations/people/Emmett/emmett_home.yaml @@ -0,0 +1,22 @@ +alias: 'Emmett Home' +id: automation_emmett_home +mode: restart + +trigger: + - platform: state + entity_id: binary_sensor.emmett_home + to: 'on' + - platform: time_pattern + minutes: "/5" +condition: + - condition: state + entity_id: input_boolean.emmett_home + state: 'off' + - condition: state + entity_id: binary_sensor.emmett_home + state: 'on' +action: + - service: input_boolean.turn_off + entity_id: input_boolean.emmett_travelling + - service: input_boolean.turn_on + entity_id: input_boolean.emmett_home diff --git a/automations/people/Emmett/emmett_in_bed.yaml b/automations/people/Emmett/emmett_in_bed.yaml new file mode 100644 index 0000000..2300e9a --- /dev/null +++ b/automations/people/Emmett/emmett_in_bed.yaml @@ -0,0 +1,38 @@ +alias: Emmett In Bed +id: automation_emmett_in_bed +mode: restart + +trigger: + - platform: state + entity_id: binary_sensor.black_bed_occupied + to: 'on' + for: '00:10:00' + - platform: state + entity_id: input_boolean.kids_bedtime + to: 'on' + - platform: homeassistant + event: start + +condition: + - condition: state + entity_id: + - input_boolean.emmett_home + - input_boolean.kids_bedtime + state: 'on' + - condition: state + entity_id: + - binary_sensor.black_bed_occupied + state: 'on' + for: '00:10:00' + - condition: state + entity_id: input_boolean.emmett_in_bed + state: 'off' + #- condition: state + # entity_id: binary_sensor.black_bed_occupied + # state: 'on' + # for: + # minutes: 5 + +action: + - service: homeassistant.turn_on + entity_id: input_boolean.emmett_in_bed diff --git a/automations/people/Emmett/emmett_location_update.yaml b/automations/people/Emmett/emmett_location_update.yaml new file mode 100644 index 0000000..56201d1 --- /dev/null +++ b/automations/people/Emmett/emmett_location_update.yaml @@ -0,0 +1,25 @@ +alias: Emmett Location Update +id: automation_emmett_location_update +mode: restart + +trigger: + # Emmett moved + - platform: state + entity_id: + - input_select.emmett_status_dropdown + - input_boolean.emmett_home + # Clint moved + - input_select.clint_status_dropdown + - input_boolean.clint_home + # Custody changed + - binary_sensor.have_custody + # Sleeping status changed + - input_boolean.emmett_is_awake + - input_boolean.emmett_in_bed +condition: + - condition: template + value_template: "{{ trigger.from_state.state != trigger.to_state.state }}" + +action: + - service: script.turn_on + entity_id: script.emmett_travel_sensor diff --git a/automations/people/Emmett/emmett_status_at_startup.yaml b/automations/people/Emmett/emmett_status_at_startup.yaml new file mode 100644 index 0000000..770236a --- /dev/null +++ b/automations/people/Emmett/emmett_status_at_startup.yaml @@ -0,0 +1,46 @@ +alias: Emmett Status at Startup +id: automation_emmett_status_at_startup +mode: restart + +trigger: + - platform: homeassistant + event: start +condition: + - condition: state + entity_id: input_boolean.emmett_home + state: 'on' + +action: + - choose: + - conditions: + - condition: time + after: '20:00:00' + before: '21:00:00' + sequence: + - service: input_boolean.turn_on + entity_id: + - input_boolean.emmett_in_bed + + - service: input_boolean.turn_on + entity_id: + - input_boolean.emmett_is_awake + - conditions: + - condition: time + after: '21:00:00' + before: '06:00:00' + sequence: + - service: input_boolean.turn_on + entity_id: + - input_boolean.emmett_in_bed + + - service: input_boolean.turn_off + entity_id: + - input_boolean.emmett_is_awake + default: + - service: input_boolean.turn_off + entity_id: + - input_boolean.emmett_in_bed + + - service: input_boolean.turn_on + entity_id: + - input_boolean.emmett_is_awake \ No newline at end of file diff --git a/automations/people/Guest/guest_location_update.yaml b/automations/people/Guest/guest_location_update.yaml new file mode 100644 index 0000000..1326383 --- /dev/null +++ b/automations/people/Guest/guest_location_update.yaml @@ -0,0 +1,20 @@ +alias: 'Guest Location Update' +id: automation_guest_location_update +mode: restart + +trigger: + # Guest moved + - platform: state + entity_id: + - input_select.guest_status_dropdown + - input_boolean.guest_home + # Sleeping status changed + - input_boolean.guest_is_awake + - input_boolean.guest_in_bed +condition: + - condition: template + value_template: '{{ trigger.from_state.state != trigger.to_state.state }}' + +action: + - service: script.turn_on + entity_id: script.guest_travel_sensor diff --git a/automations/people/Guest/guest_status_at_startup.yaml b/automations/people/Guest/guest_status_at_startup.yaml new file mode 100644 index 0000000..3cc966b --- /dev/null +++ b/automations/people/Guest/guest_status_at_startup.yaml @@ -0,0 +1,46 @@ +alias: Guest Status at Startup +id: automation_guest_status_at_startup +mode: restart + +trigger: + - platform: homeassistant + event: start +condition: + - condition: state + entity_id: input_boolean.guest_home + state: 'on' + +action: + - choose: + - conditions: + - condition: time + after: '23:30:00' + before: '00:00:00' + sequence: + - service: input_boolean.turn_on + entity_id: + - input_boolean.guest_in_bed + + - service: input_boolean.turn_on + entity_id: + - input_boolean.guest_is_awake + - conditions: + - condition: time + after: '00:00:00' + before: '06:00:00' + sequence: + - service: input_boolean.turn_on + entity_id: + - input_boolean.guest_in_bed + + - service: input_boolean.turn_off + entity_id: + - input_boolean.guest_is_awake + default: + - service: input_boolean.turn_off + entity_id: + - input_boolean.guest_in_bed + + - service: input_boolean.turn_on + entity_id: + - input_boolean.guest_is_awake \ No newline at end of file diff --git a/automations/people/Kristy/kristy_asleep.yaml b/automations/people/Kristy/kristy_asleep.yaml new file mode 100644 index 0000000..00748bd --- /dev/null +++ b/automations/people/Kristy/kristy_asleep.yaml @@ -0,0 +1,26 @@ +alias: Kristy Asleep +id: automation_kristy_asleep + +initial_state: 'on' +trigger: + - platform: state + entity_id: input_boolean.kristy_in_bed + to: 'on' + for: + minutes: 15 +condition: + - condition: and + conditions: + - condition: state + entity_id: input_boolean.kristy_is_awake + state: 'on' + - condition: state + entity_id: input_boolean.kristy_home + state: 'on' + - condition: time + after: '20:30:00' + before: '04:00:00' +action: + - service: input_boolean.turn_off + entity_id: input_boolean.kristy_is_awake + diff --git a/automations/people/Kristy/kristy_awake.yaml b/automations/people/Kristy/kristy_awake.yaml new file mode 100644 index 0000000..356ece1 --- /dev/null +++ b/automations/people/Kristy/kristy_awake.yaml @@ -0,0 +1,15 @@ +alias: Kristy Awake +id: automation_kristy_awake +mode: restart + +trigger: + - platform: state + entity_id: input_boolean.kristy_in_bed + to: 'off' + for: '00:05:00' +action: + - service: input_boolean.turn_on + entity_id: input_boolean.kristy_is_awake + + - service: script.turn_on + entity_id: script.kristy_travel_sensor diff --git a/automations/people/Kristy/kristy_away.yaml b/automations/people/Kristy/kristy_away.yaml new file mode 100644 index 0000000..c319acd --- /dev/null +++ b/automations/people/Kristy/kristy_away.yaml @@ -0,0 +1,37 @@ +alias: 'Kristy Away' +id: automation_kristy_away +mode: restart + +trigger: + - platform: state + entity_id: + - device_tracker.kristy_s_phone + from: 'home' + + - platform: homeassistant + event: start + +condition: + + - condition: state + entity_id: device_tracker.kristy_s_phone + state: 'not_home' + +action: +- choose: + - conditions: + - condition: state + entity_id: device_tracker.kristy_s_phone + state: 'not_home' + sequence: + - service: input_boolean.turn_off + entity_id: input_boolean.kristy_home + + - service: input_boolean.turn_on + entity_id: input_boolean.allow_announcements + + - service: input_boolean.turn_on + entity_id: input_boolean.out_of_bed_alert + +- delay: '00:00:30' + diff --git a/automations/people/Kristy/kristy_home.yaml b/automations/people/Kristy/kristy_home.yaml new file mode 100644 index 0000000..db1facd --- /dev/null +++ b/automations/people/Kristy/kristy_home.yaml @@ -0,0 +1,41 @@ +alias: 'Kristy Home' +id: automation_kristy_home +mode: restart + +trigger: + - platform: homeassistant + event: start + + - platform: state + entity_id: + - group.person_kristy + - device_tracker.kristy_s_phone + to: 'home' + + - platform: event + event_type: automation_reloaded + +condition: + - alias: 'They were previously considered away' + condition: state + entity_id: input_boolean.kristy_home + state: 'off' + + - alias: 'At least one tracker is home' + condition: numeric_state + entity_id: group.person_kristy + above: 0 + value_template: "{{ dict((states|selectattr('entity_id', 'in', state_attr('group.person_kristy', 'entity_id'))|list)|groupby('state'))['home']|count }}" + +action: + - service: input_boolean.turn_off + entity_id: input_boolean.kristy_travelling + + - service: input_boolean.turn_on + entity_id: input_boolean.kristy_home + + - service: input_boolean.turn_off + entity_id: input_boolean.allow_announcements + + - service: input_boolean.turn_off + entity_id: input_boolean.out_of_bed_alert diff --git a/automations/people/Kristy/kristy_in_bed.yaml b/automations/people/Kristy/kristy_in_bed.yaml new file mode 100644 index 0000000..9715f90 --- /dev/null +++ b/automations/people/Kristy/kristy_in_bed.yaml @@ -0,0 +1,39 @@ +alias: Kristy in Bed +id: automation_kristy_in_bed + +trigger: + # Bed in master bedroom is occupied + - platform: state + entity_id: binary_sensor.master_bed_occupied + to: 'on' + # Radio playing + - platform: state + entity_id: media_player.master_bedroom_clock + to: 'playing' + - platform: state + entity_id: media_player.master_bedroom_clock + to: 'idle' + # Light on + - platform: state + entity_id: light.master_bedroom_hue + to: 'on' +condition: + - condition: state + entity_id: input_boolean.kristy_in_bed + state: 'off' + - condition: state + entity_id: input_boolean.kristy_home + state: 'on' + - alias: "Its between 8:30PM and 5AM" + condition: time + after: '20:30:00' + before: '05:00:00' + + - alias: "The bed is occupied" + condition: state + entity_id: binary_sensor.master_bed_occupied + state: 'on' +action: + - service: input_boolean.turn_on + entity_id: input_boolean.kristy_in_bed + diff --git a/automations/people/Kristy/kristy_location_update.yaml b/automations/people/Kristy/kristy_location_update.yaml new file mode 100644 index 0000000..da82bb7 --- /dev/null +++ b/automations/people/Kristy/kristy_location_update.yaml @@ -0,0 +1,18 @@ +alias: 'Kristy Location Update' +id: automation_kristy_location_update +mode: restart + +trigger: + # I've moved + - platform: state + entity_id: + - input_select.kristy_status_dropdown + - input_boolean.kristy_home + +condition: + - condition: template + value_template: '{{ trigger.from_state.state != trigger.to_state.state }}' + +action: + - service: script.turn_on + entity_id: script.kristy_travel_sensor diff --git a/automations/people/Kristy/kristy_status_at_startup.yaml b/automations/people/Kristy/kristy_status_at_startup.yaml new file mode 100644 index 0000000..22188d9 --- /dev/null +++ b/automations/people/Kristy/kristy_status_at_startup.yaml @@ -0,0 +1,49 @@ +alias: Kristy Status at Startup +id: automation_kristy_status_at_startup +mode: restart + +trigger: + - platform: homeassistant + event: start + +condition: + - condition: state + entity_id: input_boolean.kristy_home + state: 'on' + +action: + - choose: + - conditions: + - condition: time + after: '23:30:00' + before: '00:00:00' + + sequence: + - service: input_boolean.turn_on + entity_id: + - input_boolean.kristy_in_bed + + - service: input_boolean.turn_on + entity_id: + - input_boolean.kristy_is_awake + + - conditions: + - condition: time + after: '00:00:00' + before: '06:00:00' + sequence: + - service: input_boolean.turn_on + entity_id: + - input_boolean.kristy_in_bed + + - service: input_boolean.turn_off + entity_id: + - input_boolean.kristy_is_awake + default: + - service: input_boolean.turn_off + entity_id: + - input_boolean.kristy_in_bed + + - service: input_boolean.turn_on + entity_id: + - input_boolean.kristy_is_awake \ No newline at end of file diff --git a/automations/people/Marshall/marshall_away.yaml b/automations/people/Marshall/marshall_away.yaml new file mode 100644 index 0000000..75e7b19 --- /dev/null +++ b/automations/people/Marshall/marshall_away.yaml @@ -0,0 +1,17 @@ +alias: 'Marshall Away' +id: automation_marshall_away +mode: restart + +trigger: + - platform: state + entity_id: device_tracker.nmap_tracker_fe_cf_82_b2_22_e0 + to: 'not_home' + +condition: + - condition: state + entity_id: input_boolean.marshall_home + state: 'on' + +action: + - service: input_boolean.turn_off + entity_id: input_boolean.marshall_home \ No newline at end of file diff --git a/automations/people/Marshall/marshall_home.yaml b/automations/people/Marshall/marshall_home.yaml new file mode 100644 index 0000000..023aa28 --- /dev/null +++ b/automations/people/Marshall/marshall_home.yaml @@ -0,0 +1,34 @@ +alias: 'Marshall Home' +id: automation_marshall_home +mode: restart + +trigger: + - platform: homeassistant + event: start + + - platform: state + entity_id: + - group.person_marshall + - device_tracker.nmap_tracker_fe_cf_82_b2_22_e0 + to: 'home' + + - platform: event + event_type: automation_reloaded + +condition: + - alias: 'They were previously considered away' + condition: state + entity_id: input_boolean.marshall_home + state: 'off' + + - alias: 'At least one tracker is home' + condition: numeric_state + entity_id: group.person_marshall + above: 0 + value_template: "{{ dict((states|selectattr('entity_id', 'in', state_attr('group.person_marshall', 'entity_id'))|list)|groupby('state'))['home']|count }}" + +action: + - service: input_boolean.turn_off + entity_id: input_boolean.marshall_travelling + - service: input_boolean.turn_on + entity_id: input_boolean.marshall_home \ No newline at end of file diff --git a/automations/people/Marshall/marshall_location_update.yaml b/automations/people/Marshall/marshall_location_update.yaml new file mode 100644 index 0000000..45c07ba --- /dev/null +++ b/automations/people/Marshall/marshall_location_update.yaml @@ -0,0 +1,20 @@ +alias: 'Marshall Location Update' +id: automation_marshall_location_update +mode: restart + +trigger: + # I've moved + - platform: state + entity_id: + - input_select.marshall_status_dropdown + - input_boolean.marshall_home +condition: + - condition: template + value_template: '{{ trigger.from_state.state != trigger.to_state.state }}' + - condition: state + entity_id: script.marshall_travel_sensor + state: 'off' +action: + + - service: script.turn_on + entity_id: script.marshall_travel_sensor diff --git a/automations/people/Marshall/marshall_status_at_startup.yaml b/automations/people/Marshall/marshall_status_at_startup.yaml new file mode 100644 index 0000000..6df8cda --- /dev/null +++ b/automations/people/Marshall/marshall_status_at_startup.yaml @@ -0,0 +1,46 @@ +alias: Marshall Status at Startup +id: automation_marshall_status_at_startup +mode: restart + +trigger: + - platform: homeassistant + event: start +condition: + - condition: state + entity_id: input_boolean.marshall_home + state: 'on' + +action: + - choose: + - conditions: + - condition: time + after: '22:00:00' + before: '23:00:00' + sequence: + - service: input_boolean.turn_on + entity_id: + - input_boolean.marshall_in_bed + + - service: input_boolean.turn_on + entity_id: + - input_boolean.marshall_is_awake + - conditions: + - condition: time + after: '23:00:00' + before: '06:00:00' + sequence: + - service: input_boolean.turn_on + entity_id: + - input_boolean.marshall_in_bed + + - service: input_boolean.turn_off + entity_id: + - input_boolean.marshall_is_awake + default: + - service: input_boolean.turn_off + entity_id: + - input_boolean.marshall_in_bed + + - service: input_boolean.turn_on + entity_id: + - input_boolean.marshall_is_awake \ No newline at end of file diff --git a/automations/people/Tess/tess_away.yaml b/automations/people/Tess/tess_away.yaml new file mode 100644 index 0000000..f01272b --- /dev/null +++ b/automations/people/Tess/tess_away.yaml @@ -0,0 +1,20 @@ +alias: 'Tess Away' +id: automation_tess_away +mode: restart + +trigger: + - platform: state + entity_id: + - person.kristy + to: 'not_home' + - platform: state + entity_id: + - person.tess + to: 'not_home' +condition: + - condition: state + entity_id: input_boolean.tess_home + state: 'on' +action: + - service: input_boolean.turn_off + entity_id: input_boolean.tess_home \ No newline at end of file diff --git a/automations/people/Tess/tess_home.yaml b/automations/people/Tess/tess_home.yaml new file mode 100644 index 0000000..cf35b30 --- /dev/null +++ b/automations/people/Tess/tess_home.yaml @@ -0,0 +1,29 @@ +alias: 'Tess Home' +id: automation_tess_home +mode: restart + +trigger: + - platform: event + event_type: automation_reloaded + + - platform: state + entity_id: + - group.person_tess + - device_tracker.apple_17_a6_78 + to: 'home' +condition: + - alias: 'They were previously considered away' + condition: state + entity_id: input_boolean.tess_home + state: 'off' + + - alias: 'At least one tracker is home' + condition: numeric_state + entity_id: group.person_tess + above: 0 + value_template: "{{ dict((states|selectattr('entity_id', 'in', state_attr('group.person_tess', 'entity_id'))|list)|groupby('state'))['home']|count }}" +action: + - service: input_boolean.turn_off + entity_id: input_boolean.tess_travelling + - service: input_boolean.turn_on + entity_id: input_boolean.tess_home \ No newline at end of file diff --git a/automations/people/Tess/tess_location_update.yaml b/automations/people/Tess/tess_location_update.yaml new file mode 100644 index 0000000..9047f46 --- /dev/null +++ b/automations/people/Tess/tess_location_update.yaml @@ -0,0 +1,20 @@ +alias: 'Tess Location Update' +id: automation_tess_location_update +mode: restart + +trigger: + # I've moved + - platform: state + entity_id: + - input_select.tess_status_dropdown + - input_boolean.tess_home +condition: + - condition: template + value_template: '{{ trigger.from_state.state != trigger.to_state.state }}' + - condition: state + entity_id: script.tess_travel_sensor + state: 'off' +action: + + - service: script.turn_on + entity_id: script.tess_travel_sensor diff --git a/automations/people/Tess/tess_status_at_startup.yaml b/automations/people/Tess/tess_status_at_startup.yaml new file mode 100644 index 0000000..138443b --- /dev/null +++ b/automations/people/Tess/tess_status_at_startup.yaml @@ -0,0 +1,46 @@ +alias: Tess Status at Startup +id: automation_tess_status_at_startup +mode: restart + +trigger: + - platform: homeassistant + event: start +condition: + - condition: state + entity_id: input_boolean.tess_home + state: 'on' + +action: + - choose: + - conditions: + - condition: time + after: '22:00:00' + before: '23:00:00' + sequence: + - service: input_boolean.turn_on + entity_id: + - input_boolean.tess_in_bed + + - service: input_boolean.turn_on + entity_id: + - input_boolean.tess_is_awake + - conditions: + - condition: time + after: '23:00:00' + before: '06:00:00' + sequence: + - service: input_boolean.turn_on + entity_id: + - input_boolean.tess_in_bed + + - service: input_boolean.turn_off + entity_id: + - input_boolean.tess_is_awake + default: + - service: input_boolean.turn_off + entity_id: + - input_boolean.tess_in_bed + + - service: input_boolean.turn_on + entity_id: + - input_boolean.tess_is_awake \ No newline at end of file diff --git a/automations/people/adults_asleep.yaml b/automations/people/adults_asleep.yaml new file mode 100644 index 0000000..19a14a7 --- /dev/null +++ b/automations/people/adults_asleep.yaml @@ -0,0 +1,69 @@ +alias: Adults Asleep +id: automation_adults_asleep +mode: queued + +trigger: + - platform: homeassistant + event: start + - platform: state + entity_id: + - input_boolean.clint_is_awake + - input_boolean.kristy_is_awake + - input_boolean.guest_is_awake + to: 'off' + +action: + - choose: + - conditions: + - condition: or + conditions: + - condition: and + conditions: + - condition: state + entity_id: input_boolean.clint_is_awake + state: 'off' + - condition: state + entity_id: input_boolean.clint_home + state: 'on' + - condition: and + conditions: + - condition: state + entity_id: input_boolean.kristy_is_awake + state: 'off' + - condition: state + entity_id: input_boolean.kristy_home + state: 'on' + - condition: and + conditions: + - condition: state + entity_id: input_boolean.guest_is_awake + state: 'off' + - condition: state + entity_id: input_boolean.guest_home + state: 'on' + sequence: + - service: input_boolean.turn_on + data: + entity_id: + - input_boolean.asleep + - input_boolean.teens_asleep + - input_boolean.kids_asleep + - service: input_select.select_option + target: + entity_id: input_select.master_bedroom_mode + data: + option: Nightlight + - choose: + - conditions: + - condition: state + entity_id: binary_sensor.patio_door_contact + state: 'off' + sequence: + - service: lock.lock + target: + entity_id: lock.patio_door + + default: + - service: input_boolean.turn_off + data: + entity_id: input_boolean.asleep diff --git a/automations/people/adults_awake.yaml b/automations/people/adults_awake.yaml new file mode 100644 index 0000000..cd32eaa --- /dev/null +++ b/automations/people/adults_awake.yaml @@ -0,0 +1,95 @@ +alias: Adults Awake +id: automation_adults_awake +mode: restart + +trigger: + # Consider the house awake if it is after 4:30AM and Kristy and I are both home and awake + - platform: state + entity_id: + - binary_sensor.adults_in_bed + - input_boolean.clint_in_bed + - input_boolean.clint_is_awake + - input_boolean.kristy_in_bed + - input_boolean.kristy_is_awake + - binary_sensor.master_bed_occupied + + - platform: time + id: wake_clint + at: input_datetime.clint_next_alarm + + - platform: state + id: late_morning + entity_id: binary_sensor.late_morning + from: 'off' + to: 'on' + + - platform: homeassistant + event: start + +condition: + - condition: time + after: '04:30:00' + - condition: time + before: '10:00:00' + - condition: or + conditions: + - condition: trigger + id: late_morning + - condition: trigger + id: wake_clint + - condition: state + entity_id: binary_sensor.master_bed_occupied + state: 'off' + for: '00:10:00' + - condition: and + conditions: + - condition: or + conditions: + - condition: state + entity_id: input_boolean.kristy_home + state: 'off' + - condition: and + conditions: + - condition: or + conditions: + - condition: state + entity_id: input_boolean.kristy_is_awake + state: 'on' + - condition: state + entity_id: input_boolean.kristy_in_bed + state: 'off' + - condition: state + entity_id: input_boolean.kristy_home + state: 'on' + - condition: or + conditions: + - condition: state + entity_id: input_boolean.clint_home + state: 'off' + - condition: and + conditions: + - condition: state + entity_id: input_boolean.clint_home + state: 'on' + - condition: or + conditions: + - condition: state + entity_id: input_boolean.clint_is_awake + state: 'on' + - condition: state + entity_id: input_boolean.clint_in_bed + state: 'off' + +action: + - service: input_boolean.turn_off + entity_id: + - input_boolean.bedtime + - input_boolean.asleep + - input_boolean.master_bedroom_asleep + + - service: input_select.select_option + target: + entity_id: input_select.master_bedroom_mode + data: + option: Auto + diff --git a/automations/people/adults_away.yaml b/automations/people/adults_away.yaml new file mode 100644 index 0000000..43c28b8 --- /dev/null +++ b/automations/people/adults_away.yaml @@ -0,0 +1,27 @@ +alias: Adults Away +id: automation_adults_away +mode: restart + +trigger: + - platform: state + entity_id: + - input_boolean.clint_home + - input_boolean.kristy_home + - input_boolean.guest_home + to: 'off' +condition: + # All away + - condition: and + conditions: + - condition: state + entity_id: input_boolean.clint_home + state: 'off' + - condition: state + entity_id: input_boolean.kristy_home + state: 'off' + - condition: state + entity_id: input_boolean.guest_home + state: 'off' +action: + - service: input_boolean.turn_on + entity_id: input_boolean.adults_away diff --git a/automations/people/adults_away_something_open.yaml b/automations/people/adults_away_something_open.yaml new file mode 100644 index 0000000..9e8b9c8 --- /dev/null +++ b/automations/people/adults_away_something_open.yaml @@ -0,0 +1,26 @@ +alias: "Adults away something open" +id: automation_adults_away_something_open +mode: restart + +trigger: + - platform: state + entity_id: input_boolean.adults_away + from: "off" + to: "on" +condition: + - condition: state + entity_id: binary_sensor.something_open + state: 'on' + - condition: state + entity_id: input_boolean.home_occupied + state: "off" +action: + # Notify the last person to leave + - service: notify.mobile_app_pixel_7 + data: + message: >- + {% if as_timestamp(states.input_boolean.kristy_home.last_updated) > as_timestamp(states.input_boolean.clint_home.last_updated) %} + The following are open: {{ dict((states|selectattr('entity_id', 'in', state_attr('group.my_exterior_windows', 'entity_id') + state_attr('group.my_exterior_doors', 'entity_id'))|list)|groupby('state'))['on']|map(attribute='name')|list|join(', ') }} + {% else %} + The following are open: {{ dict((states|selectattr('entity_id', 'in', state_attr('group.my_exterior_windows', 'entity_id') + state_attr('group.my_exterior_doors', 'entity_id'))|list)|groupby('state'))['on']|map(attribute='name')|list|join(', ') }} + {% endif %} diff --git a/automations/people/adults_returned.yaml b/automations/people/adults_returned.yaml new file mode 100644 index 0000000..1d7f9f1 --- /dev/null +++ b/automations/people/adults_returned.yaml @@ -0,0 +1,18 @@ +alias: 'Adults returned' +id: automation_adults_returned +mode: restart + +trigger: + - platform: state + entity_id: + - input_boolean.clint_home + - input_boolean.kristy_home + - input_boolean.guest_home + to: 'on' +condition: + - condition: state + entity_id: input_boolean.adults_away + state: 'on' +action: + - service: input_boolean.turn_off + entity_id: input_boolean.adults_away diff --git a/automations/people/all_away.yaml b/automations/people/all_away.yaml new file mode 100644 index 0000000..7c103d5 --- /dev/null +++ b/automations/people/all_away.yaml @@ -0,0 +1,57 @@ +alias: 'All away' +id: automation_all_away +mode: restart + +trigger: + - platform: state + entity_id: + - input_boolean.clint_home + - input_boolean.kristy_home + - input_boolean.guest_home + - input_boolean.emmett_home + - input_boolean.bridget_home + - input_boolean.marshall_home + - input_boolean.tess_home + - input_boolean.ebin_home + - input_boolean.front_room_occupied + - input_boolean.computer_area_occupied + - input_boolean.kitchen_occupied + - input_boolean.great_room_occupied + to: 'off' +condition: + # Adults are away + - condition: and + conditions: + - condition: state + entity_id: input_boolean.clint_home + state: 'off' + - condition: state + entity_id: input_boolean.kristy_home + state: 'off' + - condition: state + entity_id: input_boolean.guest_home + state: 'off' + # Kids are away + - condition: state + entity_id: input_boolean.emmett_home + state: 'off' + - condition: state + entity_id: input_boolean.bridget_home + state: 'off' + - condition: state + entity_id: input_boolean.marshall_home + state: 'off' + - condition: state + entity_id: input_boolean.tess_home + state: 'off' + - condition: state + entity_id: input_boolean.ebin_home + state: 'off' + # And not in guest mode + - condition: state + entity_id: input_boolean.guest_mode + state: 'off' +action: + - service: input_boolean.turn_on + entity_id: input_boolean.all_away + - delay: '00:00:30' \ No newline at end of file diff --git a/automations/people/all_returned.yaml b/automations/people/all_returned.yaml new file mode 100644 index 0000000..6c903bd --- /dev/null +++ b/automations/people/all_returned.yaml @@ -0,0 +1,13 @@ +alias: 'All returned' +id: automation_all_returned +mode: restart + +trigger: + - platform: state + entity_id: + - input_boolean.clint_home + - input_boolean.kristy_home + to: 'on' +action: + - service: input_boolean.turn_off + entity_id: input_boolean.all_away diff --git a/automations/people/almost_bedtime.yaml b/automations/people/almost_bedtime.yaml new file mode 100644 index 0000000..d83e21d --- /dev/null +++ b/automations/people/almost_bedtime.yaml @@ -0,0 +1,52 @@ +alias: "Almost Bedtime" +id: automation_almost_bedtime +initial_state: on +trigger: + platform: time + at: input_datetime.kids_five_minute_warning_time +condition: + - condition: state + entity_id: input_boolean.announce_bedtime + state: "on" + - condition: or + conditions: + - condition: state + entity_id: input_boolean.emmett_home + state: "on" + - condition: state + entity_id: input_boolean.bridget_home + state: "on" + - condition: state + entity_id: input_boolean.ebin_home + state: "on" +action: + - service: input_boolean.turn_on + target: + entity_id: input_boolean.kids_bedtime + + - service: media_player.volume_set + data: + volume_level: 0.65 + target: + entity_id: + - media_player.bathroom_mini + - media_player.kitchen + + - service: script.make_clever_announcement + data: + media_content_id: media-source://media_source/local/Sounds/tts/almost_bedtime.mp3 + volume: 0.5 + + # Because of how we're calling the script, the automation won't continue until the script is done, so we don't need a delay here + #- delay: '00:00:10' + + - choose: + - conditions: + - condition: template + value_template: "{{states('switch.nursery_bed_lights') == 'off' }}" + sequence: + - service: input_select.select_option + target: + entity_id: input_select.nursery_wled + data: + option: Read diff --git a/automations/people/almost_bedtime_tts.yaml b/automations/people/almost_bedtime_tts.yaml new file mode 100644 index 0000000..0eef405 --- /dev/null +++ b/automations/people/almost_bedtime_tts.yaml @@ -0,0 +1,44 @@ +alias: 'Almost Bedtime TTS' +id: automation_almost_bedtime_tts +initial_state: off +trigger: + platform: time + at: input_datetime.kids_five_minute_warning_time +condition: + - condition: state + entity_id: input_boolean.announce_bedtime + state: 'on' + - condition: or + conditions: + - condition: state + entity_id: input_boolean.emmett_home + state: 'on' + - condition: state + entity_id: input_boolean.bridget_home + state: 'on' + - condition: state + entity_id: input_boolean.ebin_home + state: 'on' +action: + - service: media_player.volume_set + data_template: + entity_id: + - media_player.bathroom_mini + - media_player.bathroom_mini + - media_player.front_room_hub + - media_player.kitchen + - media_player.nursery_hub + - media_player.master_bedroom_clock + volume_level: 0.7 + - delay: '00:00:03' + - service: tts.google_translate_say + entity_id: media_player.all_speakers + data_template: + message: Alright kids. Its almost bedtime. You've got 5 minutes. + - delay: '00:00:10' + - service: media_player.turn_off + entity_id: media_player.all_speakers + - service: input_select.select_option + entity_id: input_select.automatic_light_profile + data: + option: Dimmed \ No newline at end of file diff --git a/automations/people/bedtime.yaml b/automations/people/bedtime.yaml new file mode 100644 index 0000000..a7b55e3 --- /dev/null +++ b/automations/people/bedtime.yaml @@ -0,0 +1,52 @@ +initial_state: 'on' +alias: 'Bedtime' +id: automation_bedtime +trigger: + - platform: homeassistant + event: start + + - platform: state + entity_id: + - input_boolean.kristy_in_bed + - input_boolean.clint_in_bed + to: 'on' +condition: + - condition: and + conditions: + - condition: or + conditions: + - condition: state + entity_id: input_boolean.kristy_home + state: 'off' + - condition: and + conditions: + - condition: state + entity_id: input_boolean.kristy_in_bed + state: 'on' + - condition: state + entity_id: input_boolean.kristy_home + state: 'on' + - condition: or + conditions: + - condition: state + entity_id: input_boolean.clint_home + state: 'off' + - condition: and + conditions: + - condition: state + entity_id: input_boolean.clint_in_bed + state: 'on' + - condition: state + entity_id: input_boolean.clint_home + state: 'on' +action: + - service: input_boolean.turn_on + entity_id: + - input_boolean.bedtime + - input_boolean.teens_bedtime + - input_boolean.kids_bedtime + - service: input_select.select_option + target: + entity_id: input_select.automatic_light_profile + data: + option: Nightlight \ No newline at end of file diff --git a/automations/people/bedtime_something_open.yaml b/automations/people/bedtime_something_open.yaml new file mode 100644 index 0000000..58b621b --- /dev/null +++ b/automations/people/bedtime_something_open.yaml @@ -0,0 +1,40 @@ +alias: 'Bedtime something open' +id: automation_bedtime_something_open +mode: restart + +trigger: + - platform: state + entity_id: input_boolean.clint_is_awake + to: 'off' +condition: + condition: and + conditions: + # We're both in bed + - condition: state + entity_id: input_boolean.clint_is_awake + state: 'off' + - condition: state + entity_id: binary_sensor.something_open + state: 'on' + - condition: state + entity_id: binary_sensor.impending_rain + state: 'on' + +action: + - service: media_player.turn_on + data_template: + entity_id: media_player.master_bedroom_clock + - service: media_player.volume_set + data_template: + volume_level: 0.30 + entity_id: media_player.master_bedroom_clock + - service: tts.google_translate_say + data_template: + entity_id: media_player.master_bedroom_clock + message: >- + The following are open: + {{ dict((states|selectattr('entity_id', 'in', state_attr('group.my_exterior_windows', 'entity_id') + state_attr('group.my_exterior_doors', 'entity_id'))|list)|groupby('state'))['on']|map(attribute='name')|list|join(', ') }} + - delay: '00:01:00' + - service: media_player.turn_off + data: + entity_id: media_player.master_bedroom_clock diff --git a/automations/people/continue_nursery_noise.yaml b/automations/people/continue_nursery_noise.yaml new file mode 100644 index 0000000..a576ba3 --- /dev/null +++ b/automations/people/continue_nursery_noise.yaml @@ -0,0 +1,53 @@ +alias: Continue Nursery Noise +id: automation_continue_nursery_noise +trigger: + - platform: state + entity_id: media_player.nursery_hub + from: "playing" +condition: + - condition: state + entity_id: input_boolean.nursery_asleep + state: 'on' + - condition: or + conditions: + - condition: and + conditions: + - condition: state + entity_id: input_boolean.emmett_in_bed + state: 'on' + - condition: state + entity_id: input_boolean.emmett_home + state: 'on' + - condition: and + conditions: + - condition: state + entity_id: input_boolean.bridget_in_bed + state: 'on' + - condition: state + entity_id: input_boolean.bridget_home + state: 'on' + - condition: and + conditions: + - condition: state + entity_id: input_boolean.ebin_in_bed + state: 'on' + - condition: state + entity_id: input_boolean.ebin_home + state: 'on' + - condition: state + entity_id: input_select.nursery_mode + state: 'Night on' +action: + - service: input_select.select_option + data: + entity_id: input_select.google_home + option: 'Nursery' + - service: input_select.select_option + data: + entity_id: input_select.ambient_sound + option: 'Random White Noise' + - service: input_number.set_value + data: + entity_id: input_number.volume_ambientsounds + value: '0.35' + - service: script.ambientsounds diff --git a/automations/people/goodnight_kids.yaml b/automations/people/goodnight_kids.yaml new file mode 100644 index 0000000..78e1935 --- /dev/null +++ b/automations/people/goodnight_kids.yaml @@ -0,0 +1,168 @@ +alias: "Goodnight Kids" + +id: automation_goodnight_kids +initial_state: on +trigger: + platform: time + at: input_datetime.kids_bedtime_announcement_time +condition: + - condition: state + entity_id: input_boolean.announce_bedtime + state: "on" + + - condition: or + conditions: + - condition: state + entity_id: input_boolean.emmett_home + state: "on" + - condition: state + entity_id: input_boolean.bridget_home + state: "on" + - condition: state + entity_id: input_boolean.ebin_home + state: "on" +action: + - service: homeassistant.turn_on + entity_id: input_boolean.kids_bedtime + + - choose: + - conditions: + - condition: template + value_template: "{{states('media_player.announcements') == 'unknown' }}" + sequence: + - service: script.make_clever_announcement + data: + entity_id: + - media_player.bathroom_mini + - media_player.computer_area_hub + media_content_id: >- + {% if is_state('input_boolean.emmett_home', 'on') %} + {% if is_state('input_boolean.bridget_home', 'on') %} + {% if is_state('input_boolean.ebin_home', 'on') %} + media-source://media_source/local/Sounds/tts/goodnight_emmett_bridget_ebin.mp3 + {% else %} + media-source://media_source/local/Sounds/tts/goodnight_emmett_bridget.mp3 + {% endif %} + {% elif is_state('input_boolean.ebin_home','on') %} + media-source://media_source/local/Sounds/tts/goodnight_emmett_ebin.mp3 + {% else %} + media-source://media_source/local/Sounds/tts/goodnight_emmett.mp3 + {% endif %} + {% elif is_state('input_boolean.bridget_home', 'on') %} + {% if is_state('input_boolean.ebin_home', 'on') %} + media-source://media_source/local/Sounds/tts/goodnight_bridget_ebin.mp3 + {% else %} + media-source://media_source/local/Sounds/tts/goodnight_bridget.mp3 + {% endif %} + {% elif is_state('input_boolean.ebin_home', 'on') %} + media-source://media_source/local/Sounds/tts/goodnight_ebin.mp3 + {% endif %} + volume: 0.5 + default: + - service: script.make_clever_announcement + data: + entity_id: media_player.announcements + media_content_id: >- + {% if is_state('input_boolean.emmett_home', 'on') %} + {% if is_state('input_boolean.bridget_home', 'on') %} + {% if is_state('input_boolean.ebin_home', 'on') %} + media-source://media_source/local/Sounds/tts/goodnight_emmett_bridget_ebin.mp3 + {% else %} + media-source://media_source/local/Sounds/tts/goodnight_emmett_bridget.mp3 + {% endif %} + {% elif is_state('input_boolean.ebin_home','on') %} + media-source://media_source/local/Sounds/tts/goodnight_emmett_ebin.mp3 + {% else %} + media-source://media_source/local/Sounds/tts/goodnight_emmett.mp3 + {% endif %} + {% elif is_state('input_boolean.bridget_home', 'on') %} + {% if is_state('input_boolean.ebin_home', 'on') %} + media-source://media_source/local/Sounds/tts/goodnight_bridget_ebin.mp3 + {% else %} + media-source://media_source/local/Sounds/tts/goodnight_bridget.mp3 + {% endif %} + {% elif is_state('input_boolean.ebin_home', 'on') %} + media-source://media_source/local/Sounds/tts/goodnight_ebin.mp3 + {% endif %} + volume: 0.5 + + # Because of how we're calling the script, the automation won't continue until the script is done, so we don't need a delay here + #- delay: '00:00:10' + + - choose: + - conditions: "{{is_state_attr('media_player.front_room_tv','source','YouTube')}}" + sequence: + - service: homeassistant.turn_off + entity_id: media_player.front_room_tv + + - choose: + - conditions: "{{is_state_attr('media_player.downstairs_roku','source','YouTube')}}" + sequence: + - service: media_player.select_source + data: + source: Home + target: + entity_id: media_player.downstairs_roku + + - service: homeassistant.turn_off + entity_id: switch.shelly_projector + + - service: input_select.select_option + data: + entity_id: input_select.automatic_light_profile + option: Dimmed + + - delay: "00:00:01" + + # - service: media_player.play_media + # target: + # entity_id: media_player.front_room_hub + # data: + # media_content_id: camera-casting-yml/nursery-camera + # media_content_type: lovelace + # metadata: + # title: Nursery Camera + # thumbnail: https://brands.home-assistant.io/_/lovelace/logo.png + # media_class: app + # children_media_class: null + # navigateIds: + # - {} + # - media_content_type: lovelace + # media_content_id: "" + # - media_content_type: lovelace + # media_content_id: camera-casting-yml + + - choose: + - conditions: "{{is_state('input_boolean.ebin_home','on')}}" + sequence: + - service: input_select.select_option + target: + entity_id: input_select.nursery_wled + data: + option: "Off" + + - service: input_select.select_option + target: + entity_id: input_select.nursery_mode + data: + option: "Nightlight" + + - delay: "00:15:00" + + - choose: + - conditions: "{{is_state('input_boolean.emmett_home','on') or is_state('input_boolean.bridget_home','on')}}" + sequence: + - service: input_button.press + data: {} + target: + entity_id: input_button.nursery_bedtime + + - delay: "00:45:00" + + - choose: + - conditions: "{{is_state('input_boolean.emmett_home','on') or is_state('input_boolean.bridget_home','on')}}" + sequence: + - service: input_boolean.turn_on + data: {} + target: + entity_id: input_boolean.nursery_asleep diff --git a/automations/people/goodnight_kids_tts.yaml b/automations/people/goodnight_kids_tts.yaml new file mode 100644 index 0000000..f475e82 --- /dev/null +++ b/automations/people/goodnight_kids_tts.yaml @@ -0,0 +1,167 @@ +alias: 'Goodnight Kids TTS' +id: automation_goodnight_kids_tts +initial_state: off +trigger: + platform: time + at: input_datetime.kids_bedtime_announcement_time +condition: + - condition: state + entity_id: input_boolean.announce_bedtime + state: 'on' + - condition: or + conditions: + - condition: state + entity_id: input_boolean.emmett_home + state: 'on' + - condition: state + entity_id: input_boolean.bridget_home + state: 'on' + - condition: state + entity_id: input_boolean.ebin_home + state: 'on' +action: + - service: homeassistant.turn_on + entity_id: input_boolean.kids_bedtime + + - service: media_player.volume_set + data_template: + entity_id: + - media_player.bathroom_mini + - media_player.bathroom_mini + - media_player.front_room_hub + - media_player.kitchen + - media_player.nursery_hub + - media_player.master_bedroom_clock + volume_level: 0.7 + + - delay: '00:00:01' + + - service: tts.google_translate_say + entity_id: media_player.all_speakers + data_template: + message: > + It is time for bed. + {% if is_state('input_boolean.emmett_home', 'on') %} + Good night Emmett + {% if is_state('input_boolean.bridget_home', 'on') %} + {% if is_state('input_boolean.ebin_home', 'on') %} + Good night Bridget and good night Ebin + {% else %} + and good night Bridget + {% endif %} + {% elif is_state('input_boolean.ebin_home','on') %} + and good night Ebin + {% endif %} + {% elif is_state('input_boolean.bridget_home', 'on') %} + {% if is_state('input_boolean.ebin_home', 'on') %} + Good night Bridget and good night Ebin + {% else %} + Good Night Bridget + {% endif %} + {% elif is_state('input_boolean.ebin_home', 'on') %} + Good night Ebin + {% endif %} + - delay: '00:00:10' + + - service: homeassistant.turn_off + entity_id: + - media_player.all_speakers + - media_player.front_room_tv + - media_player.downstairs_roku + - switch.shelly_projector + + - service: input_select.select_option + data: + entity_id: input_select.automatic_light_profile + option: Dimmed + + - choose: + - conditions: + - condition: state + entity_id: input_boolean.emmett_home + state: 'on' + - condition: state + entity_id: input_boolean.emmett_in_bed + state: 'off' + - condition: state + entity_id: binary_sensor.black_bed_occupied + state: 'on' + sequence: + - service: homeassistant.turn_on + entity_id: input_boolean.emmett_in_bed + + - choose: + - conditions: + - condition: state + entity_id: input_boolean.bridget_home + state: 'on' + - condition: state + entity_id: input_boolean.bridget_in_bed + state: 'off' + - condition: state + entity_id: binary_sensor.white_bed_occupied + state: 'on' + sequence: + - service: homeassistant.turn_on + entity_id: input_boolean.bridget_in_bed + + - choose: + - conditions: + - condition: state + entity_id: input_boolean.ebin_home + state: 'on' + - condition: state + entity_id: input_boolean.ebin_in_bed + state: 'off' + sequence: + - service: homeassistant.turn_on + entity_id: input_boolean.ebin_in_bed + + - service: light.turn_on + data: + entity_id: + - light.black_bed_wled + - light.white_bed_wled + brightness_pct: 50 + effect: random + + - service: input_select.select_option + data: + entity_id: input_select.nursery_mode + option: 'Nightlight' + + - delay: "00:15:00" + + - service: input_select.select_option + data: + entity_id: input_select.nursery_mode + option: 'Off' + + - service: input_boolean.turn_on + entity_id: input_boolean.nursery_light_cycle + + #- service: input_select.select_option + # data: + # entity_id: input_select.google_home + # option: 'Nursery' + #- service: input_select.select_option + # data: + # entity_id: input_select.ambient_sound + # option: 'Random Kids Noise' + #- service: input_number.set_value + # data: + # entity_id: input_number.volume_ambientsounds + # value: '0.40' + #- service: script.ambientsounds + - delay: "00:30:00" + - service: input_boolean.turn_off + entity_id: input_boolean.nursery_light_cycle + - service: light.turn_off + data: + entity_id: + - light.black_bed_wled + - light.white_bed_wled + - service: input_select.select_option + data: + entity_id: input_select.nursery_mode + option: 'Off' diff --git a/automations/people/kids_asleep.yaml b/automations/people/kids_asleep.yaml new file mode 100644 index 0000000..8701103 --- /dev/null +++ b/automations/people/kids_asleep.yaml @@ -0,0 +1,86 @@ +alias: Kids Asleep +id: automation_kids_asleep +mode: queued + +trigger: + - platform: homeassistant + event: start + - platform: state + entity_id: + - input_boolean.emmett_is_awake + - input_boolean.bridget_is_awake + - input_boolean.ebin_is_awake + to: 'off' + + - platform: state + entity_id: input_boolean.kids_away + to: 'on' + +action: + - choose: + - conditions: + - condition: or + conditions: + - condition: and + conditions: + - condition: state + entity_id: input_boolean.emmett_is_awake + state: 'off' + - condition: state + entity_id: input_boolean.emmett_home + state: 'on' + - condition: and + conditions: + - condition: state + entity_id: input_boolean.bridget_is_awake + state: 'off' + - condition: state + entity_id: input_boolean.bridget_home + state: 'on' + - condition: and + conditions: + - condition: state + entity_id: input_boolean.ebin_is_awake + state: 'off' + - condition: state + entity_id: input_boolean.ebin_home + state: 'on' + sequence: + - service: input_boolean.turn_on + data: + entity_id: input_boolean.kids_asleep + + - service: logbook.log + data_template: + name: Kids Asleep Asleep + entity_id: automation.kids_asleep + message: > + {% if trigger.entity_id == 'input_select.clint_status_dropdown' %} + input_select.clint_status_dropdown + {% elif trigger.entity_id == 'input_select.emmett_status_dropdown' %} + input_select.emmett_status_dropdown + {% elif trigger.entity_id == 'input_select.bridget_status_dropdown' %} + input_select.bridget_status_dropdown + {% elif trigger.entity_id == 'input_select.kristy_status_dropdown' %} + input_select.kristy_status_dropdown + {% elif trigger.entity_id == 'input_select.marshall_status_dropdown' %} + input_select.marshall_status_dropdown + {% elif trigger.entity_id == 'input_select.tess_status_dropdown' %} + input_select.tess_status_dropdown + {% elif trigger.entity_id == 'input_select.ebin_status_dropdown' %} + input_select.ebin_status_dropdown + {% else %} + input_select.guest_status_dropdown + {% endif %} + At least one of the kids is asleep. turning on kids_asleep + default: + - service: input_boolean.turn_off + data: + entity_id: input_boolean.kids_asleep + + - service: logbook.log + data_template: + name: Kids Asleep + entity_id: automation.kids_asleep + message: > + None of the kids were asleep, defaulted to turning off kids_asleep diff --git a/automations/people/kids_awake.yaml b/automations/people/kids_awake.yaml new file mode 100644 index 0000000..2980e41 --- /dev/null +++ b/automations/people/kids_awake.yaml @@ -0,0 +1,216 @@ +alias: Kids Awake +id: automation_kids_awake +mode: restart + +trigger: + # Consider the kids awake if it is after 6:00AM and any of them that are home are also awake + - platform: state + entity_id: + - input_boolean.emmett_is_awake + - input_boolean.bridget_is_awake + - input_boolean.ebin_is_awake + - input_boolean.kids_away + - binary_sensor.morning + to: 'on' + + + - platform: state + entity_id: + - binary_sensor.black_bed_occupied + - binary_sensor.white_bed_occupied + to: 'off' + for: '00:05:00' + + - platform: homeassistant + event: start +condition: + - alias: "Kids should only be considered awake if they get out of bed after 6:00 AM and before 7:00 PM" + condition: time + before: '19:00:00' + after: '06:00:00' + - alias: "Go through all the kids that are considered home and see if their bed is occupied" + condition: and + conditions: + - condition: or + conditions: + - condition: state + entity_id: input_boolean.emmett_home + state: 'off' + - condition: and + conditions: + - condition: state + entity_id: input_boolean.emmett_is_awake + state: 'off' + - condition: state + entity_id: input_boolean.emmett_home + state: 'on' + - condition: or + conditions: + - condition: state + entity_id: binary_sensor.black_bed_occupied + state: 'off' + - condition: state + entity_id: binary_sensor.black_bed_occupied + state: 'unavailable' + - condition: or + conditions: + - condition: state + entity_id: input_boolean.bridget_home + state: 'off' + - condition: and + conditions: + - condition: state + entity_id: input_boolean.bridget_is_awake + state: 'off' + - condition: state + entity_id: input_boolean.bridget_home + state: 'on' + - condition: or + conditions: + - condition: state + entity_id: binary_sensor.white_bed_occupied + state: 'off' + - condition: state + entity_id: binary_sensor.white_bed_occupied + state: 'unavailable' + - condition: or + conditions: + - condition: state + entity_id: input_boolean.ebin_home + state: 'off' + - condition: and + conditions: + - condition: state + entity_id: input_boolean.ebin_is_awake + state: 'off' + - condition: state + entity_id: input_boolean.ebin_home + state: 'on' + - condition: or + conditions: + - condition: state + entity_id: binary_sensor.black_bed_occupied + state: 'off' + - condition: state + entity_id: binary_sensor.black_bed_occupied + state: 'unavailable' + - condition: or + conditions: + - condition: state + entity_id: binary_sensor.white_bed_occupied + state: 'off' + - condition: state + entity_id: binary_sensor.white_bed_occupied + state: 'unavailable' +action: + - service: input_boolean.turn_off + entity_id: + - input_boolean.kids_bedtime + - input_boolean.kids_asleep + + - choose: + - conditions: + - condition: state + entity_id: input_boolean.emmett_is_awake + state: 'off' + - condition: state + entity_id: input_boolean.emmett_home + state: 'on' + - condition: or + conditions: + - condition: state + entity_id: binary_sensor.black_bed_occupied + state: 'off' + - condition: state + entity_id: binary_sensor.black_bed_occupied + state: 'unavailable' + sequence: + - service: input_boolean.turn_off + entity_id: input_boolean.emmett_in_bed + - service: input_boolean.turn_on + entity_id: input_boolean.emmett_is_awake + + - choose: + - conditions: + - condition: state + entity_id: input_boolean.bridget_is_awake + state: 'off' + - condition: state + entity_id: input_boolean.bridget_home + state: 'on' + - condition: or + conditions: + - condition: state + entity_id: binary_sensor.white_bed_occupied + state: 'off' + - condition: state + entity_id: binary_sensor.white_bed_occupied + state: 'unavailable' + sequence: + - service: input_boolean.turn_off + entity_id: input_boolean.bridget_in_bed + - service: input_boolean.turn_on + entity_id: input_boolean.bridget_is_awake + + - choose: + - conditions: + - condition: state + entity_id: input_boolean.ebin_is_awake + state: 'off' + - condition: state + entity_id: input_boolean.ebin_home + state: 'on' + - condition: or + conditions: + - condition: state + entity_id: binary_sensor.black_bed_occupied + state: 'off' + - condition: state + entity_id: binary_sensor.black_bed_occupied + state: 'unavailable' + - condition: or + conditions: + - condition: state + entity_id: binary_sensor.white_bed_occupied + state: 'off' + - condition: state + entity_id: binary_sensor.white_bed_occupied + state: 'unavailable' + sequence: + - service: input_boolean.turn_off + entity_id: input_boolean.ebin_in_bed + - service: input_boolean.turn_on + entity_id: input_boolean.bridget_is_awake + + - choose: + - conditions: + - condition: or + conditions: + - condition: state + entity_id: binary_sensor.black_bed_occupied + state: 'off' + - condition: state + entity_id: binary_sensor.black_bed_occupied + state: 'unavailable' + - condition: or + conditions: + - condition: state + entity_id: binary_sensor.white_bed_occupied + state: 'off' + - condition: state + entity_id: binary_sensor.white_bed_occupied + state: 'unavailable' + - condition: not + conditions: + - condition: state + entity_id: input_select.nursery_mode + state: 'Manual' + - condition: state + entity_id: input_select.house + state: 'Away' + sequence: + - service: input_select.select_option + data: + entity_id: input_select.nursery_mode + option: Auto + diff --git a/automations/people/kids_away.yaml b/automations/people/kids_away.yaml new file mode 100644 index 0000000..96979ab --- /dev/null +++ b/automations/people/kids_away.yaml @@ -0,0 +1,26 @@ +alias: Kids Away +id: automation_kids_away +mode: restart + +trigger: + - platform: state + entity_id: + - input_boolean.emmett_home + - input_boolean.bridget_home + - input_boolean.ebin_home + to: 'off' + - platform: state + entity_id: binary_sensor.kids_at_home + to: 'off' +condition: + - condition: state + entity_id: + - input_boolean.emmett_home + - input_boolean.bridget_home + - input_boolean.ebin_home + - binary_sensor.kids_at_home + state: 'off' + +action: + - service: input_boolean.turn_on + entity_id: input_boolean.kids_away diff --git a/automations/people/kids_away_videos_on.yaml b/automations/people/kids_away_videos_on.yaml new file mode 100644 index 0000000..60b2d68 --- /dev/null +++ b/automations/people/kids_away_videos_on.yaml @@ -0,0 +1,116 @@ +alias: Kids Away Videos On +id: automation_kids_away_videos_on + +trigger: + - platform: state + entity_id: input_boolean.kids_away + from: 'off' + to: 'on' + +condition: + - condition: or + conditions: + - condition: state + entity_id: media_player.front_room_tv + state: 'on' + - condition: state + entity_id: media_player.front_room_tv + state: 'playing' + - condition: or + conditions: + - condition: state + entity_id: media_player.front_room_tv + attribute: source + state: 'PBS Kids' + - condition: state + entity_id: media_player.front_room_tv + attribute: source + state: 'YouTube' + - condition: state + entity_id: media_player.front_room_hub + attribute: source + state: 'PBS Kids' + - condition: state + entity_id: media_player.front_room_hub + attribute: source + state: 'YouTube' + - condition: state + entity_id: media_player.master_bedroom_clock + attribute: source + state: 'PBS Kids' + - condition: state + entity_id: media_player.master_bedroom_clock + attribute: source + state: 'YouTube' + +action: +- choose: + - conditions: + - condition: state + entity_id: media_player.front_room_tv + state: 'playing' + - condition: or + conditions: + - condition: state + entity_id: media_player.front_room_tv + attribute: source + state: 'YouTube' + - condition: state + entity_id: media_player.front_room_tv + attribute: source + state: 'PBS Kids' + sequence: + - service: media_player.select_source + data: + entity_id: media_player.front_room_tv + source: Home + - service: media_player.turn_off + data: + entity_id: media_player.front_room_tv +- choose: + - conditions: + - condition: state + entity_id: media_player.front_room_hub + state: 'playing' + - condition: or + conditions: + - condition: state + entity_id: media_player.front_room_hub + attribute: source + state: 'YouTube' + - condition: state + entity_id: media_player.front_room_hub + attribute: source + state: 'PBS Kids' + sequence: + - service: media_player.select_source + data: + entity_id: media_player.front_room_hub + source: Home + - service: media_player.turn_off + data: + entity_id: media_player.front_room_hub + +- choose: + - conditions: + - condition: state + entity_id: media_player.master_bedroom_clock + state: 'playing' + - condition: or + conditions: + - condition: state + entity_id: media_player.master_bedroom_clock + attribute: source + state: 'YouTube' + - condition: state + entity_id: media_player.master_bedroom_clock + attribute: source + state: 'PBS Kids' + sequence: + - service: media_player.select_source + data: + entity_id: media_player.master_bedroom_clock + source: Home + - service: media_player.turn_off + data: + entity_id: media_player.master_bedroom_clock \ No newline at end of file diff --git a/automations/people/kids_returned.yaml b/automations/people/kids_returned.yaml new file mode 100644 index 0000000..b63cffc --- /dev/null +++ b/automations/people/kids_returned.yaml @@ -0,0 +1,18 @@ +alias: Kids Returned +id: automation_kids_returned +mode: restart + +trigger: + - platform: state + entity_id: + - input_boolean.emmett_home + - input_boolean.bridget_home + - input_boolean.ebin_home + to: 'on' +condition: + - condition: state + entity_id: input_boolean.kids_away + state: 'on' +action: + - service: input_boolean.turn_off + entity_id: input_boolean.kids_away diff --git a/automations/people/nearly_home.yaml b/automations/people/nearly_home.yaml new file mode 100644 index 0000000..278b4e2 --- /dev/null +++ b/automations/people/nearly_home.yaml @@ -0,0 +1,25 @@ +alias: 'Nearly Home' +id: automation_nearly_home +initial_state: 'on' +trigger: + - platform: state + entity_id: + - binary_sensor.garage_door + - binary_sensor.front_door_contact + to: 'on' +condition: + - condition: state + entity_id: input_boolean.home_occupied + state: 'off' + for: '00:10:00' + - condition: numeric_state + entity_id: sensor.deck_light_level + below: 25 + - condition: numeric_state + entity_id: sensor.sun_elevation + below: 15 +action: + - service: input_select.select_option + data: + entity_id: input_select.entryway_mode + option: 'Auto' diff --git a/automations/people/people_count_changed.yaml b/automations/people/people_count_changed.yaml new file mode 100644 index 0000000..3c64d73 --- /dev/null +++ b/automations/people/people_count_changed.yaml @@ -0,0 +1,27 @@ +alias: People Count Changed +id: automation_people_count_changed +mode: queued + +trigger: + - platform: state + entity_id: sensor.people_count + - platform: homeassistant + event: start + +action: + - choose: + - conditions: + - condition: state + entity_id: person.clint + state: 'home' + - condition: numeric_state + entity_id: sensor.people_count + above: 0 + below: 2 + sequence: + - service: homeassistant.turn_on + entity_id: input_boolean.clint_home_alone + + default: + - service: homeassistant.turn_off + entity_id: input_boolean.clint_home_alone \ No newline at end of file diff --git a/automations/people/person_arrived.yaml b/automations/people/person_arrived.yaml new file mode 100644 index 0000000..7379fda --- /dev/null +++ b/automations/people/person_arrived.yaml @@ -0,0 +1,102 @@ +alias: Person Arrived +id: automation_person_arrived +mode: queued + +trigger: + - platform: state + entity_id: + - input_boolean.clint_home + - input_boolean.emmett_home + - input_boolean.bridget_home + - input_boolean.kristy_home + - input_boolean.marshall_home + - input_boolean.tess_home + - input_boolean.ebin_home + - input_boolean.guest_home + from: "off" + to: "on" +action: + - service: input_select.select_option + data_template: + entity_id: > + {% if trigger.entity_id == 'input_boolean.clint_home' %} + input_select.clint_status_dropdown + {% elif trigger.entity_id == 'input_boolean.emmett_home' %} + input_select.emmett_status_dropdown + {% elif trigger.entity_id == 'input_boolean.bridget_home' %} + input_select.bridget_status_dropdown + {% elif trigger.entity_id == 'input_boolean.kristy_home' %} + input_select.kristy_status_dropdown + {% elif trigger.entity_id == 'input_boolean.marshall_home' %} + input_select.marshall_status_dropdown + {% elif trigger.entity_id == 'input_boolean.tess_home' %} + input_select.tess_status_dropdown + {% elif trigger.entity_id == 'input_boolean.ebin_home' %} + input_select.ebin_status_dropdown + {% else %} + input_select.guest_status_dropdown + {% endif %} + option: > + {% if trigger.entity_id == 'input_boolean.kristy_home' %} + {% if states.input_select.kristy_status_dropdown.state == 'Just Left' %} + Home + {% else %} + Just Arrived + {% endif %} + {% elif trigger.entity_id == 'input_boolean.marshall_home' %} + {% if states.input_select.marshall_status_dropdown.state == 'Just Left' %} + Home + {% else %} + Just Arrived + {% endif %} + {% elif trigger.entity_id == 'input_boolean.clint_home' %} + {% if states.input_select.clint_status_dropdown.state == 'Just Left' %} + Home + {% else %} + Just Arrived + {% endif %} + {% elif trigger.entity_id == 'input_boolean.emmett_home' %} + {% if states.input_select.emmett_status_dropdown.state == 'Just Left' %} + Home + {% else %} + Just Arrived + {% endif %} + {% elif trigger.entity_id == 'input_boolean.bridget_home' %} + {% if states.input_select.bridget_status_dropdown.state == 'Just Left' %} + Home + {% else %} + Just Arrived + {% endif %} + {% elif trigger.entity_id == 'input_boolean.ebin_home' %} + {% if states.input_select.ebin_status_dropdown.state == 'Just Left' %} + Home + {% else %} + Just Arrived + {% endif %} + {% elif trigger.entity_id == 'input_boolean.tess_home' %} + {% if states.input_select.tess_status_dropdown.state == 'Just Left' %} + Home + {% else %} + Just Arrived + {% endif %} + {% else %} + {% if states.input_select.guest_status_dropdown.state == 'Just Left' %} + Home + {% else %} + Just Arrived + {% endif %} + {% endif %} + + - service: logbook.log + data_template: + name: Person Arrived + entity_id: automation.person_arrived + message: > + Person Arrived ran + + + - service: input_boolean.turn_off + entity_id: input_boolean.all_away + + - service: input_boolean.turn_on + entity_id: input_boolean.home_occupied diff --git a/automations/people/person_asleep.yaml b/automations/people/person_asleep.yaml new file mode 100644 index 0000000..132b409 --- /dev/null +++ b/automations/people/person_asleep.yaml @@ -0,0 +1,175 @@ +alias: Person Asleep +id: automation_person_asleep +mode: queued + +trigger: + - platform: homeassistant + event: start + - platform: state + entity_id: + - input_boolean.clint_in_bed + - input_boolean.emmett_in_bed + - input_boolean.bridget_in_bed + - input_boolean.kristy_in_bed + - input_boolean.marshall_in_bed + - input_boolean.tess_in_bed + - input_boolean.ebin_in_bed + - input_boolean.guest_in_bed + to: 'On' + for: + minutes: 5 + - platform: state + entity_id: + - input_boolean.clint_is_awake + - input_boolean.emmett_is_awake + - input_boolean.bridget_is_awake + - input_boolean.kristy_is_awake + - input_boolean.marshall_is_awake + - input_boolean.tess_is_awake + - input_boolean.ebin_is_awake + - input_boolean.guest_is_awake + to: 'off' +action: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.clint_home + state: 'on' + - condition: state + entity_id: input_boolean.clint_in_bed + state: 'on' + for: + minutes: 5 + - condition: state + entity_id: input_boolean.clint_is_awake + state: 'on' + sequence: + - service: input_boolean.turn_off + data: + entity_id: input_boolean.clint_is_awake + + - choose: + - conditions: + - condition: state + entity_id: input_boolean.emmett_home + state: 'on' + - condition: state + entity_id: input_boolean.emmett_in_bed + state: 'on' + for: + minutes: 5 + - condition: state + entity_id: input_boolean.emmett_is_awake + state: 'on' + sequence: + - service: input_boolean.turn_off + data: + entity_id: input_boolean.emmett_is_awake + + - choose: + - conditions: + - condition: state + entity_id: input_boolean.bridget_home + state: 'on' + - condition: state + entity_id: input_boolean.bridget_in_bed + state: 'on' + for: + minutes: 5 + - condition: state + entity_id: input_boolean.bridget_is_awake + state: 'on' + sequence: + - service: input_boolean.turn_off + data: + entity_id: input_boolean.bridget_is_awake + + - choose: + - conditions: + - condition: state + entity_id: input_boolean.kristy_home + state: 'on' + - condition: state + entity_id: input_boolean.kristy_in_bed + state: 'on' + for: + minutes: 5 + - condition: state + entity_id: input_boolean.kristy_is_awake + state: 'on' + sequence: + - service: input_boolean.turn_off + data: + entity_id: input_boolean.kristy_is_awake + + - choose: + - conditions: + - condition: state + entity_id: input_boolean.marshall_home + state: 'on' + - condition: state + entity_id: input_boolean.marshall_in_bed + state: 'on' + for: + minutes: 5 + - condition: state + entity_id: input_boolean.marshall_is_awake + state: 'on' + sequence: + - service: input_boolean.turn_off + data: + entity_id: input_boolean.marshall_is_awake + + - choose: + - conditions: + - condition: state + entity_id: input_boolean.tess_home + state: 'on' + - condition: state + entity_id: input_boolean.tess_in_bed + state: 'on' + for: + minutes: 5 + - condition: state + entity_id: input_boolean.tess_is_awake + state: 'on' + sequence: + - service: input_boolean.turn_off + data: + entity_id: input_boolean.tess_is_awake + + - choose: + - conditions: + - condition: state + entity_id: input_boolean.ebin_home + state: 'on' + - condition: state + entity_id: input_boolean.ebin_in_bed + state: 'on' + for: + minutes: 5 + - condition: state + entity_id: input_boolean.ebin_is_awake + state: 'on' + sequence: + - service: input_boolean.turn_off + data: + entity_id: input_boolean.ebin_is_awake + + - choose: + - conditions: + - condition: state + entity_id: input_boolean.guest_home + state: 'on' + - condition: state + entity_id: input_boolean.guest_in_bed + state: 'on' + for: + minutes: 5 + - condition: state + entity_id: input_boolean.guest_is_awake + state: 'on' + sequence: + - service: input_boolean.turn_off + data: + entity_id: input_boolean.guest_is_awake diff --git a/automations/people/person_away.yaml b/automations/people/person_away.yaml new file mode 100644 index 0000000..9c770e0 --- /dev/null +++ b/automations/people/person_away.yaml @@ -0,0 +1,47 @@ +alias: Person Away +id: automation_person_away +mode: queued + +trigger: + - platform: state + entity_id: + - input_select.clint_status_dropdown + - input_select.emmett_status_dropdown + - input_select.bridget_status_dropdown + - input_select.kristy_status_dropdown + - input_select.marshall_status_dropdown + - input_select.tess_status_dropdown + - input_select.ebin_status_dropdown + - input_select.guest_status_dropdown + to: 'Just Left' + for: + minutes: 5 +action: + - service: input_select.select_option + data_template: + entity_id: > + {% if trigger.entity_id == 'input_select.clint_status_dropdown' %} + input_select.clint_status_dropdown + {% elif trigger.entity_id == 'input_select.emmett_status_dropdown' %} + input_select.emmett_status_dropdown + {% elif trigger.entity_id == 'input_select.bridget_status_dropdown' %} + input_select.bridget_status_dropdown + {% elif trigger.entity_id == 'input_select.kristy_status_dropdown' %} + input_select.kristy_status_dropdown + {% elif trigger.entity_id == 'input_select.marshall_status_dropdown' %} + input_select.marshall_status_dropdown + {% elif trigger.entity_id == 'input_select.tess_status_dropdown' %} + input_select.tess_status_dropdown + {% elif trigger.entity_id == 'input_select.ebin_status_dropdown' %} + input_select.ebin_status_dropdown + {% else %} + input_select.guest_status_dropdown + {% endif %} + option: Away + + - service: logbook.log + data_template: + name: Person Away + entity_id: automation.person_away + message: > + Person Away ran diff --git a/automations/people/person_extended_away.yaml b/automations/people/person_extended_away.yaml new file mode 100644 index 0000000..626ff7c --- /dev/null +++ b/automations/people/person_extended_away.yaml @@ -0,0 +1,51 @@ +alias: Person Extended Away +id: automation_person_extended_away +mode: queued + +trigger: + - platform: state + entity_id: input_select.clint_status_dropdown + to: 'Away' + for: + hours: 24 + - platform: state + entity_id: input_select.emmett_status_dropdown + to: 'Away' + for: + hours: 24 + - platform: state + entity_id: input_select.bridget_status_dropdown + to: 'Away' + for: + hours: 24 + - platform: state + entity_id: input_select.kristy_status_dropdown + to: 'Away' + for: + hours: 24 + - platform: state + entity_id: input_select.marshall_status_dropdown + to: 'Away' + for: + hours: 24 + - platform: state + entity_id: input_select.tess_status_dropdown + to: 'Away' + for: + hours: 24 + - platform: state + entity_id: input_select.ebin_status_dropdown + to: 'Away' + for: + hours: 24 + - platform: state + entity_id: input_select.guest_status_dropdown + to: 'Away' + for: + hours: 24 +action: + - service: input_select.select_option + data_template: + entity_id: > + {{ trigger.entity_id }} + option: Extended Away diff --git a/automations/people/person_home.yaml b/automations/people/person_home.yaml new file mode 100644 index 0000000..ba7add7 --- /dev/null +++ b/automations/people/person_home.yaml @@ -0,0 +1,35 @@ +alias: Person Home +id: automation_person_home +mode: queued + +trigger: + - platform: state + entity_id: + - input_select.clint_status_dropdown + - input_select.emmett_status_dropdown + - input_select.bridget_status_dropdown + - input_select.kristy_status_dropdown + - input_select.marshall_status_dropdown + - input_select.tess_status_dropdown + - input_select.ebin_status_dropdown + to: 'Just Arrived' + for: + minutes: 5 + - platform: state + entity_id: + - input_select.clint_status_dropdown + - input_select.emmett_status_dropdown + - input_select.bridget_status_dropdown + - input_select.kristy_status_dropdown + - input_select.marshall_status_dropdown + - input_select.tess_status_dropdown + - input_select.ebin_status_dropdown + - input_select.guest_status_dropdown + from: 'Just Left' + to: 'Just Arrived' +action: + - service: input_select.select_option + data_template: + entity_id: > + {{ trigger.entity_id }} + option: Home diff --git a/automations/people/person_left.yaml b/automations/people/person_left.yaml new file mode 100644 index 0000000..14ee609 --- /dev/null +++ b/automations/people/person_left.yaml @@ -0,0 +1,47 @@ +alias: Person Left +id: automation_person_left +mode: queued + +trigger: + - platform: state + entity_id: + - input_boolean.clint_home + - input_boolean.emmett_home + - input_boolean.bridget_home + - input_boolean.kristy_home + - input_boolean.marshall_home + - input_boolean.tess_home + - input_boolean.ebin_home + - input_boolean.guest_home + from: "on" + to: "off" +action: + - service: input_select.select_option + data_template: + entity_id: > + {% if trigger.entity_id == 'input_boolean.clint_home' %} + input_select.clint_status_dropdown + {% elif trigger.entity_id == 'input_boolean.emmett_home' %} + input_select.emmett_status_dropdown + {% elif trigger.entity_id == 'input_boolean.bridget_home' %} + input_select.bridget_status_dropdown + {% elif trigger.entity_id == 'input_boolean.kristy_home' %} + input_select.kristy_status_dropdown + {% elif trigger.entity_id == 'input_boolean.marshall_home' %} + input_select.marshall_status_dropdown + {% elif trigger.entity_id == 'input_boolean.tess_home' %} + input_select.tess_status_dropdown + {% elif trigger.entity_id == 'input_boolean.ebin_home' %} + input_select.ebin_status_dropdown + {% else %} + input_select.guest_status_dropdown + {% endif %} + option: Just Left + + - service: logbook.log + data_template: + name: Person Left + entity_id: automation.person_left + message: > + Person Left ran + diff --git a/automations/people/respond_to_chickadee.yaml b/automations/people/respond_to_chickadee.yaml new file mode 100644 index 0000000..5270c83 --- /dev/null +++ b/automations/people/respond_to_chickadee.yaml @@ -0,0 +1,83 @@ +alias: Respond to Chickadee +id: automation_respond_to_chickadee +mode: single +description: "" +trigger: + # - platform: state + # entity_id: input_boolean.chickadee_is_waiting + # from: 'off' + # to: 'on' + - platform: numeric_state + entity_id: sensor.chickadee_unread + above: 0 +condition: + - condition: state + entity_id: input_boolean.guest_mode + state: "off" + - condition: state + entity_id: group.podeins_at_home + state: "off" +action: + - repeat: + while: + - condition: numeric_state + entity_id: sensor.chickadee_unread + above: 0 + # - condition: state + # entity_id: input_boolean.chickadee_is_waiting + # state: 'on' + sequence: + - choose: + - conditions: + - condition: state + entity_id: binary_sensor.kids_at_home + state: "off" + - condition: state + entity_id: input_boolean.allow_announcements + state: "on" + + - condition: not + conditions: + - condition: state + entity_id: sensor.pixel_7_audio_mode + state: in_communication + - condition: state + entity_id: sensor.pixel_7_audio_mode + state: in_call + - condition: state + entity_id: input_boolean.kids_bedtime + state: "on" + + sequence: + - service: script.make_clever_announcement + data: + media_content_id: media-source://media_source/local/Sounds/tts/respond_to_chickadee.mp3 + + - service: notify.mobile_app_pixel_7 + data: + message: >- + Chickadee is waiting to hear back on {{states('sensor.chickadee_unread')}} message(s)! + title: Tweet tweet + + - service: notify.hass_agent_group + data: + message: >- + Chickadee is waiting to hear back on {{states('sensor.chickadee_unread')}} message(s)! + title: Tweet tweet + + - service: persistent_notification.create + data: + message: >- + Chickadee is waiting to hear back on {{states('sensor.chickadee_unread')}} message(s)! + title: Tweet Tweet + notification_id: 07111985 + + - delay: + hours: 0 + minutes: 2 + seconds: 0 + milliseconds: 0 + + - service: persistent_notification.dismiss + data: + notification_id: 07111985 diff --git a/automations/people/returned_home.yaml b/automations/people/returned_home.yaml new file mode 100644 index 0000000..f1737f0 --- /dev/null +++ b/automations/people/returned_home.yaml @@ -0,0 +1,76 @@ +alias: Returned Home +id: automation_returned_home +mode: queued + +trigger: + - platform: state + entity_id: binary_sensor.front_door_contact + to: 'on' + - platform: state + entity_id: binary_sensor.garage_door + to: 'on' + - platform: state + entity_id: binary_sensor.outer_garage_door + to: 'on' + # People just got home + - platform: state + entity_id: + - input_select.clint_status_dropdown + - input_select.emmett_status_dropdown + - input_select.bridget_status_dropdown + - input_select.kristy_status_dropdown + - input_select.marshall_status_dropdown + - input_select.tess_status_dropdown + - input_select.ebin_status_dropdown + - input_select.guest_status_dropdown + to: 'Just Arrived' + # Should also include some travel time magic here + # Basically, travel time < 15 for 10 minutes, travelling towards home +condition: + condition: and + conditions: + # Lighting automations are enabled + - condition: state + entity_id: input_boolean.lighting_automations + state: 'on' + # It's getting dark + - condition: numeric_state + entity_id: sensor.bar_light_level + below: 15 + # Somebody is nearly home, or just arrived + - condition: or + conditions: + # Front door is open, somebody is nearly home or just arrived + - condition: state + entity_id: binary_sensor.front_door_contact + state: 'on' + - condition: state + entity_id: binary_sensor.garage_door + state: 'on' + - condition: state + entity_id: binary_sensor.outer_garage_door + state: 'on' + # Or somebody has just arrived + - condition: template + value_template: "{{ is_state('input_select.clint_status_dropdown','Just Arrived') }}" + - condition: template + value_template: "{{ is_state('input_select.emmett_status_dropdown','Just Arrived') }}" + - condition: template + value_template: "{{ is_state('input_select.bridget_status_dropdown','Just Arrived') }}" + - condition: template + value_template: "{{ is_state('input_select.kristy_status_dropdown','Just Arrived') }}" + - condition: template + value_template: "{{ is_state('input_select.marshall_status_dropdown','Just Arrived') }}" + - condition: template + value_template: "{{ is_state('input_select.tess_status_dropdown','Just Arrived') }}" + - condition: template + value_template: "{{ is_state('input_select.ebin_status_dropdown','Just Arrived') }}" + - condition: template + value_template: "{{ is_state('input_select.guest_status_dropdown','Just Arrived') }}" +action: + - service: logbook.log + data_template: + name: Returned Home + entity_id: automation.returned_home + message: > + Returned Home ran \ No newline at end of file diff --git a/automations/people/something_open_too_warm_or_cold.yaml b/automations/people/something_open_too_warm_or_cold.yaml new file mode 100644 index 0000000..2d494d0 --- /dev/null +++ b/automations/people/something_open_too_warm_or_cold.yaml @@ -0,0 +1,14 @@ +alias: 'Something open too warm or cold' +id: automation_something_open_too_warm_or_cold +mode: restart + +trigger: + - platform: state + entity_id: binary_sensor.something_open_too_warm_or_cold + to: 'on' + +action: + - service: notify.mobile_app_pixel_7 + data: + message: >- + Its too hot or cold to leave these open: {{ dict((states|selectattr('entity_id', 'in', state_attr('group.my_hvac_affecting_openings', 'entity_id'))|list)|groupby('state'))['on']|map(attribute='name')|list|join(', ') }} diff --git a/automations/people/teens_asleep.yaml b/automations/people/teens_asleep.yaml new file mode 100644 index 0000000..0d8baa8 --- /dev/null +++ b/automations/people/teens_asleep.yaml @@ -0,0 +1,57 @@ +alias: Teens Asleep +id: automation_teens_asleep +mode: queued + +trigger: + - platform: homeassistant + event: start + - platform: state + entity_id: + - input_boolean.marshall_is_awake + - input_boolean.tess_is_awake + - input_boolean.asleep + to: 'off' + +action: + - choose: + - conditions: + - condition: or + conditions: + - condition: and + conditions: + - condition: state + entity_id: input_boolean.marshall_is_awake + state: 'off' + - condition: state + entity_id: input_boolean.marshall_home + state: 'on' + - condition: and + conditions: + - condition: state + entity_id: input_boolean.tess_is_awake + state: 'off' + - condition: state + entity_id: input_boolean.tess_home + state: 'on' + sequence: + - service: input_boolean.turn_on + data: + entity_id: input_boolean.teens_asleep + + - service: logbook.log + data_template: + name: Teens Asleep + entity_id: automation.teens_asleep + message: > + At least one of the teens is asleep. turning on teens_asleep + default: + - service: input_boolean.turn_off + data: + entity_id: input_boolean.teens_asleep + + - service: logbook.log + data_template: + name: Teens Asleep + entity_id: automation.teens_asleep + message: > + None of the teens were asleep, defaulted to turning off teens_asleep diff --git a/automations/people/teens_awake.yaml b/automations/people/teens_awake.yaml new file mode 100644 index 0000000..8faa4b2 --- /dev/null +++ b/automations/people/teens_awake.yaml @@ -0,0 +1,85 @@ +alias: Teens Awake +id: automation_teen_awake +mode: restart + +trigger: + # Consider the kids awake if it is after 6:00AM and any of them that are home are also awake + - platform: state + entity_id: + - input_boolean.marshall_is_awake + - input_boolean.tess_is_awake + - binary_sensor.morning + to: 'on' + + - platform: homeassistant + event: start + +condition: + - condition: or + conditions: + - condition: time + before: '19:00:00' + after: '06:00:00' + - condition: and + conditions: + - condition: or + conditions: + - condition: state + entity_id: input_boolean.marshall_home + state: 'off' + - condition: and + conditions: + - condition: state + entity_id: input_boolean.marshall_is_awake + state: 'off' + - condition: state + entity_id: input_boolean.marshall_home + state: 'on' + - condition: or + conditions: + - condition: state + entity_id: input_boolean.tess_home + state: 'off' + - condition: and + conditions: + - condition: state + entity_id: input_boolean.tess_is_awake + state: 'off' + - condition: state + entity_id: input_boolean.tess_home + state: 'on' + +action: + - service: input_boolean.turn_off + entity_id: + - input_boolean.teens_bedtime + - input_boolean.teens_asleep + + + - choose: + - conditions: + - condition: state + entity_id: input_boolean.marshall_is_awake + state: 'off' + - condition: state + entity_id: input_boolean.marshall_home + state: 'on' + sequence: + - service: input_boolean.turn_off + entity_id: input_boolean.marshall_in_bed + - service: input_boolean.turn_on + entity_id: input_boolean.marshall_is_awake + + - choose: + - conditions: + - condition: state + entity_id: input_boolean.tess_is_awake + state: 'off' + - condition: state + entity_id: input_boolean.tess_home + state: 'on' + sequence: + - service: input_boolean.turn_off + entity_id: input_boolean.tess_in_bed + - service: input_boolean.turn_on + entity_id: input_boolean.tess_is_awake diff --git a/automations/people/vacation.yaml b/automations/people/vacation.yaml new file mode 100644 index 0000000..69b0590 --- /dev/null +++ b/automations/people/vacation.yaml @@ -0,0 +1,25 @@ +alias: 'Vacation' +id: automation_vacation +initial_state: 'on' +trigger: + - platform: state + entity_id: + - input_boolean.clint_travelling + - input_boolean.emmett_travelling + - input_boolean.bridget_travelling + to: 'on' +condition: + condition: and + conditions: + - condition: state + entity_id: input_boolean.clint_travelling + state: 'on' + - condition: state + entity_id: input_boolean.emmett_travelling + state: 'on' + - condition: state + entity_id: input_boolean.bridget_travelling + state: 'on' +action: + - service: input_boolean.turn_on + entity_id: input_boolean.vacation_mode diff --git a/automations/people/vacation_over.yaml b/automations/people/vacation_over.yaml new file mode 100644 index 0000000..831f290 --- /dev/null +++ b/automations/people/vacation_over.yaml @@ -0,0 +1,25 @@ +alias: 'Vacation over' +id: automation_vacation_over +initial_state: 'on' +trigger: + - platform: state + entity_id: + - input_boolean.clint_travelling + - input_boolean.emmett_travelling + - input_boolean.bridget_travelling + to: 'off' +condition: + condition: and + conditions: + - condition: state + entity_id: input_boolean.clint_travelling + state: 'off' + - condition: state + entity_id: input_boolean.emmett_travelling + state: 'off' + - condition: state + entity_id: input_boolean.bridget_travelling + state: 'off' +action: + - service: input_boolean.turn_off + entity_id: input_boolean.vacation_mode diff --git a/automations/platform/home_assistant_update_available.yaml b/automations/platform/home_assistant_update_available.yaml new file mode 100644 index 0000000..4def8ee --- /dev/null +++ b/automations/platform/home_assistant_update_available.yaml @@ -0,0 +1,26 @@ +alias: Home Assistant Update Available +id: automation_home_assistant_update_available + +trigger: + - platform: state + entity_id: binary_sensor.latest_version_update_available + from: 'off' + to: 'on' + + - platform: homeassistant + event: start + +condition: + - alias: "Update Available" + condition: state + entity_id: binary_sensor.latest_version_update_available + state: 'on' + +action: + - service: notify.mobile_app_pixel_7 + data: + title: Update Available + message: A Home Assistant update is available + data: + channel: "Alerts" + importance: high diff --git a/automations/platform/mount_smbs_at_boot.yaml b/automations/platform/mount_smbs_at_boot.yaml new file mode 100644 index 0000000..d7fb2d7 --- /dev/null +++ b/automations/platform/mount_smbs_at_boot.yaml @@ -0,0 +1,19 @@ +alias: Mount SMBs at boot +id: automation_mount_smbs_at_boot +description: Mount the configured SMBs at boot. +trigger: + - platform: homeassistant + event: start +condition: [] +action: + - service: shell_command.mount_music + data: {} + - service: shell_command.mount_video + data: {} + - service: shell_command.mount_sound + data: {} + - service: shell_command.mount_photo + data: {} + - service: shell_command.mount_sound_again + data: {} +mode: single \ No newline at end of file diff --git a/automations/rooms/blue_room/blue_room_lights_to_off.yaml b/automations/rooms/blue_room/blue_room_lights_to_off.yaml new file mode 100644 index 0000000..cb7b969 --- /dev/null +++ b/automations/rooms/blue_room/blue_room_lights_to_off.yaml @@ -0,0 +1,67 @@ +alias: Blue Room Lights to Off +id: automation_blue_room_lights_to_off +mode: restart + +trigger: + - platform: state + entity_id: input_select.blue_room_mode + + - platform: state + entity_id: input_boolean.blue_room_occupied + to: 'off' + + #- platform: time_pattern + # minutes: "/5" + +condition: + - condition: state + entity_id: light.blue_room_hue + state: 'on' + + - condition: state + entity_id: input_boolean.lights_off_manually + state: 'off' + - condition: or + conditions: + - condition: state + entity_id: input_select.blue_room_mode + state: 'Off' + - condition: state + entity_id: input_boolean.blue_room_occupied + state: 'off' + +action: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.lighting_automations + state: 'on' + - condition: or + conditions: + - condition: state + entity_id: input_select.blue_room_mode + state: 'Off' + - condition: state + entity_id: input_boolean.blue_room_occupied + state: 'off' + - condition: not + conditions: + - condition: state + entity_id: input_select.blue_room_mode + state: 'Manual' + sequence: + - service: scene.turn_on + data: + transition: 5 + target: + entity_id: scene.blue_room_hue_off + - choose: + - conditions: + - condition: state + entity_id: input_boolean.guest_mode + state: 'on' + sequence: + - alias: "Turn off z-wave switch since all lights are off" + service: homeassistant.turn_off + target: + entity_id: switch.blue_room_motion_switch diff --git a/automations/rooms/blue_room/blue_room_lights_to_on.yaml b/automations/rooms/blue_room/blue_room_lights_to_on.yaml new file mode 100644 index 0000000..bf02c78 --- /dev/null +++ b/automations/rooms/blue_room/blue_room_lights_to_on.yaml @@ -0,0 +1,168 @@ +alias: Blue Room Lights to On +id: automation_blue_room_lights_to_on +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent + +trigger: + - platform: state + id: mode_change + entity_id: + - input_select.blue_room_mode + - input_select.automatic_light_profile + + - platform: state + id: occupied + entity_id: + - binary_sensor.blue_room_occupied + - input_boolean.blue_room_occupied + to: "on" + + # - platform: state + # id: motion + # entity_id: group.blue_room_motion + # to: "on" + + - platform: state + id: light_level + entity_id: binary_sensor.blue_room_naturally_lit + from: 'on' + to: 'off' + +condition: + - alias: "Home is occupied" + condition: state + entity_id: input_boolean.home_occupied + state: "on" + + - alias: "Check if light should turn on" + condition: or + conditions: + + - alias: "Guest mode is on" + condition: state + entity_id: input_boolean.guest_mode + state: "on" + + - alias: "Motion or occupancy were detected in a dim room" + condition: and + conditions: + - alias: "Light level below trigger amount" + condition: state + entity_id: binary_sensor.blue_room_naturally_lit + state: 'off' + + - alias: "Motion or occupancy were detected" + condition: or + conditions: + - alias: "Motion was detected" + condition: trigger + id: "motion" + - alias: "Occupancy was detected" + condition: trigger + id: "occupied" + + - alias: "A scene changed and the lights are already on" + condition: and + conditions: + - condition: trigger + id: "mode_change" + - condition: state + entity_id: input_boolean.blue_room_occupied + state: "on" + + - alias: "The light level changed, the room is occupied, and the light is off" + condition: and + conditions: + - condition: trigger + id: light_level + - condition: state + entity_id: input_boolean.blue_room_occupied + state: 'on' + - condition: state + entity_id: light.blue_room_hue + state: 'off' + +variables: + switch_name: switch.blue_room_motion_switch + light_name: blue_room_hue + mode_name: input_select.blue_room_mode + +action: + - alias: "Make sure Z-Wave switch is turned on" + service: homeassistant.turn_on + target: + entity_id: "{{ switch_name }}" + - choose: + - alias: "If the room is set to manual, just turn the lights on" + conditions: + - alias: "Room set to manual" + condition: state + entity_id: input_select.blue_room_mode + state: Manual + sequence: + - service: light.turn_on + target: + entity_id: light.blue_room_hue + + - alias: "If the room is set to auto, the lights are already on, and the room is dim, change to the Automatic Light Profile scene with a transition" + conditions: + - alias: "Room set to auto" + condition: state + entity_id: input_select.blue_room_mode + state: Auto + - alias: "Lights are on" + condition: state + entity_id: light.blue_room_hue + state: 'on' + - "{{ states('sensor.blue_room_multisensor_illuminance') | float(default=0) < states('input_number.blue_room_light_level_trigger') | float(default=0) }}" + sequence: + - service: scene.turn_on + data: + transition: "{{ states('input_number.light_scene_transition') }}" + target: + entity_id: "scene.{{light_name}}_{{states('input_select.automatic_light_profile').lower().replace(' ','_')}}" + + - alias: "If the room is set to auto and the lights are off, change to the Automatic Light Profile scene without a transition" + conditions: + - alias: "Room set to auto" + condition: state + entity_id: input_select.blue_room_mode + state: Auto + - alias: "Lights are off" + condition: state + entity_id: light.blue_room_hue + state: 'off' + - "{{ states('sensor.blue_room_multisensor_illuminance') | float(default=0) < states('input_number.blue_room_light_level_trigger') | float(default=0) }}" + sequence: + - service: scene.turn_on + target: + entity_id: "scene.{{light_name}}_{{states('input_select.automatic_light_profile').lower().replace(' ','_')}}" + + - alias: "If the room is not set to auto and the lights are on, change to the Blue Room Mode scene with a transition" + conditions: + - alias: "Room not manual or auto and lights are on" + condition: state + entity_id: light.blue_room_hue + state: 'on' + - "{{ states('sensor.blue_room_multisensor_illuminance') | float(default=0) < states('input_number.blue_room_light_level_trigger') | float(default=0) }}" + sequence: + - service: scene.turn_on + data: + transition: "{{ states('input_number.light_scene_transition') }}" + target: + entity_id: "scene.{{light_name}}_{{states(mode_name).lower().replace(' ','_')}}" + + - alias: "If the room is not set to auto and the lights are on, change to the Blue Room Mode scene without a transition" + conditions: + - alias: "Room not manual or auto and lights are off" + condition: state + entity_id: light.blue_room_hue + state: 'off' + - "{{ states('sensor.blue_room_multisensor_illuminance') | float(default=0) < states('input_number.blue_room_light_level_trigger') | float(default=0) }}" + sequence: + - service: scene.turn_on + target: + entity_id: "scene.{{light_name}}_{{states(mode_name).lower().replace(' ','_')}}" + + - delay: 1 \ No newline at end of file diff --git a/automations/rooms/blue_room/blue_room_not_occupied.yaml b/automations/rooms/blue_room/blue_room_not_occupied.yaml new file mode 100644 index 0000000..0a8a689 --- /dev/null +++ b/automations/rooms/blue_room/blue_room_not_occupied.yaml @@ -0,0 +1,59 @@ +alias: 'Blue Room Not Occupied' +id: automation_blue_room_not_occupied +mode: restart +trigger: + - platform: state + entity_id: input_boolean.home_occupied + from: 'on' + to: 'off' + + - platform: state + entity_id: + - input_boolean.home_occupied + - binary_sensor.blue_room_occupied + to: 'off' + for: '00:10:00' + + # - platform: time_pattern + # minutes: "/5" + +condition: + - condition: or + conditions: + - condition: state + entity_id: input_boolean.home_occupied + state: 'off' + - condition: and + conditions: + - condition: state + entity_id: input_boolean.blue_room_occupied + state: 'on' + - condition: state + entity_id: binary_sensor.blue_room_occupied + state: 'off' + for: '00:10:00' + +action: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.home_occupied + state: 'off' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.blue_room_occupied + - conditions: + - condition: or + conditions: + - condition: state + entity_id: input_select.house + state: 'Auto' + - condition: state + entity_id: input_select.house + state: 'Dad' + - condition: state + entity_id: input_select.house + state: 'Bachelor' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.blue_room_occupied diff --git a/automations/rooms/blue_room/blue_room_occupied.yaml b/automations/rooms/blue_room/blue_room_occupied.yaml new file mode 100644 index 0000000..12437fe --- /dev/null +++ b/automations/rooms/blue_room/blue_room_occupied.yaml @@ -0,0 +1,25 @@ +alias: Blue Room Occupied +id: automation_blue_room_occupied +mode: restart + +trigger: + - platform: state + entity_id: + - binary_sensor.blue_room_occupied + to: 'on' + +condition: + - condition: state + entity_id: input_boolean.blue_room_occupied + state: 'off' + +action: + - service: input_boolean.turn_on + entity_id: input_boolean.blue_room_occupied + + - service: logbook.log + data_template: + name: Blue Room Occupied + entity_id: automation.blue_room_occupied + message: > + {{ states("sensor.date_time_iso") }} Blue Room Occupied ran diff --git a/automations/rooms/blue_room_lights.yaml b/automations/rooms/blue_room_lights.yaml new file mode 100644 index 0000000..b94f155 --- /dev/null +++ b/automations/rooms/blue_room_lights.yaml @@ -0,0 +1,68 @@ +# alias: Blue Room Lights +# id: automation_blue_room_lights +# mode: queued + +# trigger: +# - platform: state +# id: door_open +# entity_id: binary_sensor.blue_room_door_contact +# from: "off" +# to: "on" + +# - platform: state +# id: motion_on +# entity_id: binary_sensor.blue_room_motion_switch_home_security_motion_detection +# from: "off" +# to: "on" + +# - platform: state +# id: door_closed +# entity_id: binary_sensor.blue_room_door_contact +# to: "off" +# for: "00:10:00" + +# - platform: state +# id: motion_off +# entity_id: binary_sensor.blue_room_motion_switch_home_security_motion_detection +# to: "off" +# for: "00:15:00" + +# action: +# - choose: +# - conditions: +# - condition: or +# conditions: +# - condition: trigger +# id: "door_open" +# - condition: trigger +# id: "motion_on" +# - condition: state +# entity_id: light.blue_room +# state: 'off' +# sequence: +# - service: light.turn_on +# target: +# entity_id: light.blue_room +# - service: switch.turn_on +# target: +# entity_id: switch.frigate_cam01_detect +# - conditions: +# - condition: or +# conditions: +# - condition: trigger +# id: "door_closed" +# - condition: trigger +# id: "motion_off" +# - condition: state +# entity_id: binary_sensor.blue_room_motion_switch_home_security_motion_detection +# state: "off" +# - condition: state +# entity_id: light.blue_room +# state: 'on' +# sequence: +# - service: light.turn_off +# target: +# entity_id: light.blue_room +# - service: switch.turn_off +# target: +# entity_id: switch.frigate_cam01_detect \ No newline at end of file diff --git a/automations/rooms/computer_area/computer_area_light_cycle.yaml b/automations/rooms/computer_area/computer_area_light_cycle.yaml new file mode 100644 index 0000000..146e6ae --- /dev/null +++ b/automations/rooms/computer_area/computer_area_light_cycle.yaml @@ -0,0 +1,131 @@ +alias: Computer Area Light Cycle +id: automation_computer_area_light_cycle + +trigger: + - id: light_cycle_on + platform: state + entity_id: input_boolean.computer_area_light_cycle + from: 'off' + to: 'on' + + - id: setting_change + platform: state + entity_id: + - input_number.computer_area_light_cycle_transition + - input_select.computer_area_color_set + - input_boolean.computer_area_cycle_same + +condition: "{{ is_state('input_boolean.computer_area_light_cycle','on') }}" + +action: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.computer_area_light_cycle + state: 'on' + sequence: + + - repeat: + sequence: + - choose: + - conditions: # If all lights should be the same color and the projector is off, reference the Hue group for all the lights + - condition: state + entity_id: input_boolean.computer_area_cycle_same + state: 'on' + sequence: + - service: light.turn_on + target: + entity_id: light.computer_area_hue + data: + brightness: '{{ states("input_number.computer_area_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.computer_area_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.computer_area_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.computer_area_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.computer_area_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.computer_area_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.computer_area_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.computer_area_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.computer_area_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.computer_area_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.computer_area_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.computer_area_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.computer_area_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.computer_area_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.computer_area_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.computer_area_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.computer_area_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + + + - conditions: # If all lights should be different colors, start referencing the individual lights that don't obscure the TV + - condition: state + entity_id: input_boolean.computer_area_cycle_same + state: 'off' + sequence: + - service: light.turn_on + target: + entity_id: light.basement_1 + data: + brightness: '{{ states("input_number.computer_area_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.computer_area_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.computer_area_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.computer_area_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.computer_area_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.computer_area_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.computer_area_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.computer_area_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.computer_area_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.computer_area_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.computer_area_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.computer_area_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.computer_area_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.computer_area_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.computer_area_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.computer_area_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.computer_area_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + + - delay: + seconds: '{{ states("input_number.computer_area_light_cycle_transition") | int }}' + + until: + - condition: state + entity_id: input_boolean.computer_area_light_cycle + state: 'off' + + - service: automation.trigger + entity_id: automation.computer_area_lights_to_on diff --git a/automations/rooms/computer_area/computer_area_lights_manual.yaml b/automations/rooms/computer_area/computer_area_lights_manual.yaml new file mode 100644 index 0000000..5860c3f --- /dev/null +++ b/automations/rooms/computer_area/computer_area_lights_manual.yaml @@ -0,0 +1,16 @@ +alias: Computer Area Lights Manual +id: automation_computer_area_lights_manual +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent + +trigger: + - platform: state + entity_id: switch.great_room_motion_switch + +action: + - service: light.turn_on + data: + profile: concentrate + target: + entity_id: light.computer_area_hue \ No newline at end of file diff --git a/automations/rooms/computer_area/computer_area_lights_to_off.yaml b/automations/rooms/computer_area/computer_area_lights_to_off.yaml new file mode 100644 index 0000000..a65c860 --- /dev/null +++ b/automations/rooms/computer_area/computer_area_lights_to_off.yaml @@ -0,0 +1,83 @@ +alias: Computer Area Lights to Off +id: automation_computer_area_lights_to_off +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent + +trigger: + - platform: state + entity_id: input_select.computer_area_mode + + - platform: state + entity_id: input_boolean.computer_area_occupied + to: 'off' + + - platform: state + id: light_level + entity_id: binary_sensor.computer_area_naturally_lit + to: 'on' + +condition: + - alias: "Not occupied or mode is set to off" + condition: or + conditions: + - condition: state + entity_id: input_select.computer_area_mode + state: 'Off' + - condition: state + entity_id: input_boolean.computer_area_occupied + state: 'off' + - alias: "Great Room Light Cycle is off" + condition: state + entity_id: input_boolean.great_room_light_cycle + state: 'off' + - alias: "Computer Area Light Cycle is off" + condition: state + entity_id: input_boolean.computer_area_light_cycle + state: 'off' + +action: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.lighting_automations + state: 'on' + - condition: or + conditions: + - condition: state + entity_id: input_select.computer_area_mode + state: 'Off' + - condition: state + entity_id: input_boolean.computer_area_occupied + state: 'off' + - condition: state + entity_id: binary_sensor.computer_chair_contact_occupied + state: 'off' + - condition: not + conditions: + - condition: state + entity_id: input_select.computer_area_mode + state: 'Manual' + sequence: + - service: scene.turn_on + data: + transition: 5 + target: + entity_id: scene.computer_area_hue_off + # - service: light.turn_off + # target: + # entity_id: light.basement_1 + + - choose: + - conditions: + - condition: state + entity_id: light.great_room_hue + state: 'off' + - condition: state + entity_id: input_boolean.guest_mode + state: 'on' + sequence: + - alias: "Turn off z-wave switch since all lights are off" + service: homeassistant.turn_off + target: + entity_id: switch.great_room_motion_switch diff --git a/automations/rooms/computer_area/computer_area_lights_to_on.yaml b/automations/rooms/computer_area/computer_area_lights_to_on.yaml new file mode 100644 index 0000000..dd85a24 --- /dev/null +++ b/automations/rooms/computer_area/computer_area_lights_to_on.yaml @@ -0,0 +1,169 @@ +alias: Computer Area Lights to On +id: automation_computer_area_lights_to_on +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent + +trigger: + - platform: state + id: mode_change + entity_id: + - input_select.computer_area_mode + - input_select.automatic_light_profile + + - platform: state + id: light_level + entity_id: binary_sensor.computer_area_naturally_lit + from: 'on' + to: 'off' + + - platform: state + id: occupied + entity_id: + - binary_sensor.computer_area_occupied + - input_boolean.computer_area_occupied + to: "on" + + # - platform: state + # id: motion + # entity_id: group.computer_area_motion + # to: "on" + +condition: + - alias: "Home is occupied" + condition: state + entity_id: input_boolean.home_occupied + state: "on" + + - alias: "lighting automations enabled" + condition: state + entity_id: input_boolean.lighting_automations + state: "on" + + - alias: "Great Room Light Cycle is off" + condition: state + entity_id: input_boolean.great_room_light_cycle + state: "off" + + - alias: "Computer Area Light Cycle is off" + condition: state + entity_id: input_boolean.computer_area_light_cycle + state: "off" + + - alias: "Check if light should turn on" + condition: or + conditions: + + - alias: "Guest mode is on" + condition: state + entity_id: input_boolean.guest_mode + state: "on" + + - alias: "Motion or occupancy were detected in a dim room" + condition: and + conditions: + + - alias: "Room not naturally lit" + condition: state + entity_id: binary_sensor.computer_area_naturally_lit + state: 'off' + + - alias: "Motion or occupancy were detected" + condition: or + conditions: + - alias: "Motion was detected" + condition: trigger + id: "motion" + - alias: "Occupancy was detected" + condition: trigger + id: "occupied" + + - alias: "A scene changed and the lights are already on" + condition: and + conditions: + - condition: trigger + id: "mode_change" + + - condition: state + entity_id: input_boolean.computer_area_occupied + state: "on" + +variables: + switch_name: switch.great_room_motion_switch + light_name: computer_area_hue + mode_name: input_select.computer_area_mode + +action: + - alias: "Make sure Z-Wave switch is turned on" + service: homeassistant.turn_on + target: + entity_id: "{{ switch_name }}" + - choose: + - alias: "If the room is set to manual, just turn the lights on" + conditions: + - alias: "Room set to manual" + condition: state + entity_id: input_select.computer_area_mode + state: Manual + sequence: + - service: light.turn_on + target: + entity_id: light.computer_area_hue + + - alias: "If the room is set to auto and the lights are on, change to the Automatic Light Profile scene with a transition" + conditions: + - alias: "Room set to auto" + condition: state + entity_id: input_select.computer_area_mode + state: Auto + - alias: "Lights are on" + condition: state + entity_id: light.computer_area_hue + state: 'on' + sequence: + - service: scene.turn_on + data: + transition: "{{ states('input_number.light_scene_transition') }}" + target: + entity_id: "scene.{{light_name}}_{{states('input_select.automatic_light_profile').lower().replace(' ','_')}}" + + - alias: "If the room is set to auto and the lights are off, change to the Automatic Light Profile scene without a transition" + conditions: + - alias: "Room set to auto" + condition: state + entity_id: input_select.computer_area_mode + state: Auto + - alias: "Lights are off" + condition: state + entity_id: light.computer_area_hue + state: 'off' + sequence: + - service: scene.turn_on + target: + entity_id: "scene.{{light_name}}_{{states('input_select.automatic_light_profile').lower().replace(' ','_')}}" + + - alias: "If the room is not set to auto and the lights are on, change to the Computer Area Mode scene with a transition" + conditions: + - alias: "Room not manual or auto and lights are on" + condition: state + entity_id: light.computer_area_hue + state: 'on' + sequence: + - service: scene.turn_on + data: + transition: "{{ states('input_number.light_scene_transition') }}" + target: + entity_id: "scene.{{light_name}}_{{states(mode_name).lower().replace(' ','_')}}" + + - alias: "If the room is not set to auto and the lights are on, change to the Computer Area Mode scene without a transition" + conditions: + - alias: "Room not manual or auto and lights are off" + condition: state + entity_id: light.computer_area_hue + state: 'off' + sequence: + - service: scene.turn_on + target: + entity_id: "scene.{{light_name}}_{{states(mode_name).lower().replace(' ','_')}}" + + - delay: 1 \ No newline at end of file diff --git a/automations/rooms/computer_area/computer_area_not_occupied.yaml b/automations/rooms/computer_area/computer_area_not_occupied.yaml new file mode 100644 index 0000000..c7f75cc --- /dev/null +++ b/automations/rooms/computer_area/computer_area_not_occupied.yaml @@ -0,0 +1,68 @@ +alias: 'Computer Area Not Occupied' +id: automation_computer_area_not_occupied +mode: restart + +trigger: + - platform: state + entity_id: input_boolean.home_occupied + from: 'on' + to: 'off' + + - platform: state + entity_id: + - input_boolean.home_occupied + - binary_sensor.computer_area_occupied + to: 'off' + for: '00:15:00' + + # - platform: time_pattern + # minutes: "/5" + +condition: + - alias: "Room is considered occupied" + condition: state + entity_id: input_boolean.computer_area_occupied + state: 'on' + + - alias: "Lights are not forced to be turned off manually" + condition: state + entity_id: input_boolean.lights_off_manually + state: 'off' + + - alias: "Either the home is unoccupied, or no presence has been detected in the room for 15 minutes" + condition: or + conditions: + - condition: state + entity_id: input_boolean.home_occupied + state: 'off' + - condition: or + conditions: + - condition: state + entity_id: binary_sensor.computer_area_person_occupancy + state: 'off' + for: + minutes: 15 + - condition: state + entity_id: binary_sensor.computer_area_occupied + state: 'off' + for: + minutes: 15 + +action: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.home_occupied + state: 'off' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.computer_area_occupied + - conditions: + - condition: not + conditions: + - condition: state + entity_id: input_select.house + state: 'Manual' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.computer_area_occupied diff --git a/automations/rooms/computer_area/computer_area_occupied.yaml b/automations/rooms/computer_area/computer_area_occupied.yaml new file mode 100644 index 0000000..072bdb1 --- /dev/null +++ b/automations/rooms/computer_area/computer_area_occupied.yaml @@ -0,0 +1,33 @@ +alias: 'Computer Area Occupied' +id: automation_computer_area_occupied +mode: restart + +trigger: + - platform: state + entity_id: + - binary_sensor.computer_area_occupied + to: 'on' +condition: + # Computer area was not already occupied or computer area light is off while not set to manual or off + - condition: or + conditions: + - condition: state + entity_id: input_boolean.computer_area_occupied + state: 'off' + - condition: and + conditions: + - condition: state + entity_id: light.computer_area_hue + state: 'off' + - condition: not + conditions: + - condition: state + entity_id: input_select.computer_area_mode + state: 'Off' + - condition: state + entity_id: input_select.computer_area_mode + state: 'Manual' + +action: + - service: input_boolean.turn_on + entity_id: input_boolean.computer_area_occupied diff --git a/automations/rooms/dining_room/dining_room_lights_to_off.yaml b/automations/rooms/dining_room/dining_room_lights_to_off.yaml new file mode 100644 index 0000000..6b9ec86 --- /dev/null +++ b/automations/rooms/dining_room/dining_room_lights_to_off.yaml @@ -0,0 +1,80 @@ +alias: Dining Room Lights to Off +id: automation_dining_room_lights_to_off +mode: restart + +trigger: + - platform: state + entity_id: input_select.dining_room_mode + + - platform: state + entity_id: input_boolean.dining_room_occupied + to: 'off' + + - platform: state + id: light_level + entity_id: binary_sensor.dining_room_naturally_lit + from: 'off' + to: 'on' + + #- platform: time_pattern + # minutes: "/5" + +condition: + - condition: or + conditions: + - condition: state + entity_id: input_select.dining_room_mode + state: 'Off' + - condition: state + entity_id: input_boolean.dining_room_occupied + state: 'off' + - condition: state + entity_id: binary_sensor.dining_room_naturally_lit + state: 'on' + +action: + - choose: + - conditions: + - condition: or + conditions: + - condition: and + conditions: + - condition: state + entity_id: input_boolean.lighting_automations + state: 'on' + - condition: or + conditions: + - condition: state + entity_id: input_select.dining_room_mode + state: 'Off' + - condition: state + entity_id: input_boolean.dining_room_occupied + state: 'off' + - condition: not + conditions: + - condition: state + entity_id: input_select.dining_room_mode + state: 'Manual' + - condition: state + entity_id: binary_sensor.dining_room_naturally_lit + state: 'on' + sequence: + - alias: "Turn off z-wave switch since all lights are off" + service: homeassistant.turn_off + target: + entity_id: switch.dining_room_switch + # - service: scene.turn_on + # data: + # transition: 5 + # target: + # entity_id: scene.dining_room_hue_off + # - choose: + # - conditions: + # - condition: state + # entity_id: input_boolean.guest_mode + # state: 'on' + # sequence: + # - alias: "Turn off z-wave switch since all lights are off" + # service: homeassistant.turn_off + # target: + # entity_id: switch.dining_room_switch diff --git a/automations/rooms/dining_room/dining_room_lights_to_on.yaml b/automations/rooms/dining_room/dining_room_lights_to_on.yaml new file mode 100644 index 0000000..1ed2c29 --- /dev/null +++ b/automations/rooms/dining_room/dining_room_lights_to_on.yaml @@ -0,0 +1,161 @@ +alias: Dining Room Lights to On +id: automation_dining_room_lights_to_on +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent + +trigger: + - platform: state + id: mode_change + entity_id: + - input_select.dining_room_mode + - input_select.automatic_light_profile + + - platform: state + id: light_level + entity_id: binary_sensor.dining_room_naturally_lit + from: 'on' + to: 'off' + + - platform: state + id: occupied + entity_id: input_boolean.dining_room_occupied + to: "on" + + # - platform: state + # id: motion + # entity_id: group.dining_room_motion + # to: "on" + +condition: + - alias: "Home is occupied" + condition: state + entity_id: input_boolean.home_occupied + state: "on" + + - alias: "Check if light should turn on" + condition: or + conditions: + + - alias: "Guest mode is on" + condition: state + entity_id: input_boolean.guest_mode + state: "on" + + - alias: "Motion or occupancy were detected in a dim room" + condition: and + conditions: + - alias: "Light level below trigger amount" + condition: state + entity_id: binary_sensor.dining_room_naturally_lit + state: 'off' + - alias: "Motion or occupancy were detected" + condition: or + conditions: + - alias: "Motion was detected" + condition: trigger + id: "motion" + - alias: "Occupancy was detected" + condition: trigger + id: "occupied" + - alias: "A scene changed and the lights are already on" + condition: and + conditions: + - condition: trigger + id: "mode_change" + - condition: state + entity_id: input_boolean.dining_room_occupied + state: "on" + + - alias: "The room is not set to 'Off'" + condition: not + conditions: + - condition: state + entity_id: input_select.dining_room_mode + state: "Off" + +# variables: +# switch_name: switch.dining_room_switch +# light_name: dining_room_hue +# mode_name: input_select.dining_room_mode + +# action: +# - alias: "Make sure Z-Wave switch is turned on" +# service: homeassistant.turn_on +# target: +# entity_id: "{{ switch_name }}" +# - choose: +# - alias: "If the room is set to manual, just turn the lights on" +# conditions: +# - alias: "Room set to manual" +# condition: state +# entity_id: input_select.dining_room_mode +# state: Manual +# sequence: +# - service: light.turn_on +# target: +# entity_id: light.dining_room_hue + +# - alias: "If the room is set to auto and the lights are on, change to the Automatic Light Profile scene with a transition" +# conditions: +# - alias: "Room set to auto" +# condition: state +# entity_id: input_select.dining_room_mode +# state: Auto +# - alias: "Lights are on" +# condition: state +# entity_id: light.dining_room_hue +# state: 'on' +# sequence: +# - service: scene.turn_on +# data: +# transition: "{{ states('input_number.light_scene_transition') }}" +# target: +# entity_id: "scene.{{light_name}}_{{states('input_select.automatic_light_profile').lower().replace(' ','_')}}" + +# - alias: "If the room is set to auto and the lights are off, change to the Automatic Light Profile scene without a transition" +# conditions: +# - alias: "Room set to auto" +# condition: state +# entity_id: input_select.dining_room_mode +# state: Auto +# - alias: "Lights are off" +# condition: state +# entity_id: light.dining_room_hue +# state: 'off' +# sequence: +# - service: scene.turn_on +# target: +# entity_id: "scene.{{light_name}}_{{states('input_select.automatic_light_profile').lower().replace(' ','_')}}" + +# - alias: "If the room is not set to auto and the lights are on, change to the Dining Room Mode scene with a transition" +# conditions: +# - alias: "Room not manual or auto and lights are on" +# condition: state +# entity_id: light.dining_room_hue +# state: 'on' +# sequence: +# - service: scene.turn_on +# data: +# transition: "{{ states('input_number.light_scene_transition') }}" +# target: +# entity_id: "scene.{{light_name}}_{{states(mode_name).lower().replace(' ','_')}}" + +# - alias: "If the room is not set to auto and the lights are on, change to the Dining Room Mode scene without a transition" +# conditions: +# - alias: "Room not manual or auto and lights are off" +# condition: state +# entity_id: light.dining_room_hue +# state: 'off' +# sequence: +# - service: scene.turn_on +# target: +# entity_id: "scene.{{light_name}}_{{states(mode_name).lower().replace(' ','_')}}" + +action: + - alias: "Make sure Z-Wave switch is turned on" + service: homeassistant.turn_on + target: + entity_id: switch.dining_room_switch + + - delay: 1 \ No newline at end of file diff --git a/automations/rooms/dining_room/dining_room_not_occupied.yaml b/automations/rooms/dining_room/dining_room_not_occupied.yaml new file mode 100644 index 0000000..3d772b3 --- /dev/null +++ b/automations/rooms/dining_room/dining_room_not_occupied.yaml @@ -0,0 +1,65 @@ +alias: 'Dining Room Not Occupied' +id: automation_dining_room_not_occupied +mode: restart + +trigger: + - platform: state + entity_id: input_boolean.home_occupied + from: 'on' + to: 'off' + + - platform: state + entity_id: + - input_boolean.home_occupied + - binary_sensor.dining_room_occupied + to: 'off' + for: '00:15:00' + + # - platform: time_pattern + # minutes: "/5" + +condition: + - condition: state + entity_id: input_boolean.dining_room_occupied + state: 'on' + + - condition: state + entity_id: input_boolean.lights_off_manually + state: 'off' + + - condition: or + conditions: + - condition: state + entity_id: input_boolean.home_occupied + state: 'off' + - condition: or + conditions: + - condition: state + entity_id: binary_sensor.dining_room_person_occupancy + state: 'off' + for: + minutes: 5 + - condition: state + entity_id: binary_sensor.dining_room_occupied + state: 'off' + for: + minutes: 5 + +action: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.home_occupied + state: 'off' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.dining_room_occupied + - conditions: + - condition: not + conditions: + - condition: state + entity_id: input_select.house + state: 'Manual' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.dining_room_occupied diff --git a/automations/rooms/dining_room/dining_room_occupied.yaml b/automations/rooms/dining_room/dining_room_occupied.yaml new file mode 100644 index 0000000..a9cda6a --- /dev/null +++ b/automations/rooms/dining_room/dining_room_occupied.yaml @@ -0,0 +1,18 @@ +alias: 'Dining Room Occupied' +id: automation_dining_room_occupied +mode: restart + +trigger: + - platform: state + entity_id: + - binary_sensor.dining_room_occupied + to: 'on' +condition: + # Dining Room was not already occupied + - condition: state + entity_id: input_boolean.dining_room_occupied + state: 'off' + +action: + - service: input_boolean.turn_on + entity_id: input_boolean.dining_room_occupied diff --git a/automations/rooms/driveway_lights.yaml b/automations/rooms/driveway_lights.yaml new file mode 100644 index 0000000..6612922 --- /dev/null +++ b/automations/rooms/driveway_lights.yaml @@ -0,0 +1,70 @@ +alias: Driveway Lights +id: automation_driveway_lights +mode: queued + +trigger: + - platform: state + id: motion_on + entity_id: + - binary_sensor.from_street_vehicle_occupancy + - binary_sensor.driveway_person_occupancy + - binary_sensor.front_yard_person_occupancy + - binary_sensor.front_yard_animal_occupancy + - binary_sensor.garage_door + from: "off" + to: "on" + + - platform: state + id: motion_off + entity_id: + - binary_sensor.from_street_vehicle_occupancy + - binary_sensor.driveway_person_occupancy + - binary_sensor.front_yard_person_occupancy + - binary_sensor.front_yard_animal_occupancy + - binary_sensor.garage_door + from: "on" + to: "off" + for: "00:01:00" + + - platform: state + id: got_bright + entity_id: binary_sensor.is_dark + to: "on" + + - platform: state + id: got_dark + entity_id: binary_sensor.is_dark + to: "off" + +action: + - choose: + - conditions: + - condition: trigger + id: "motion_on" + - condition: or + conditions: + - condition: state + alias: "It is dark outside" + entity_id: binary_sensor.is_dark + state: 'on' + - condition: state + alias: "Front porch light is on" + entity_id: light.front_porch_overhead + state: 'on' + - condition: state + entity_id: light.driveway + state: 'off' + sequence: + - service: light.turn_on + target: + entity_id: light.driveway + - conditions: + - condition: trigger + id: "motion_off" + - condition: state + entity_id: light.driveway + state: 'on' + sequence: + - service: light.turn_off + target: + entity_id: light.driveway diff --git a/automations/rooms/entryway/entryway_lights_to_off.yaml b/automations/rooms/entryway/entryway_lights_to_off.yaml new file mode 100644 index 0000000..96ff5f9 --- /dev/null +++ b/automations/rooms/entryway/entryway_lights_to_off.yaml @@ -0,0 +1,83 @@ +alias: Entryway Lights to Off +id: automation_entryway_lights_to_off +mode: restart + +trigger: + - platform: state + entity_id: input_select.entryway_mode + + - platform: state + entity_id: input_boolean.entryway_occupied + to: 'off' + + - platform: state + id: light_level + entity_id: binary_sensor.entryway_naturally_lit + from: 'off' + to: 'on' + #- platform: time_pattern + # minutes: "/5" + +condition: + - condition: state + entity_id: input_boolean.lighting_automations + state: 'on' + + - condition: state + entity_id: input_boolean.lights_off_manually + state: 'off' + + - condition: or + conditions: + - condition: state + entity_id: input_select.entryway_mode + state: 'Off' + - condition: state + entity_id: input_boolean.entryway_occupied + state: 'off' + - condition: state + entity_id: binary_sensor.entryway_naturally_lit + state: 'on' + +action: + - choose: + - conditions: + - condition: or + conditions: + - condition: and + conditions: + - condition: state + entity_id: input_boolean.lighting_automations + state: 'on' + - condition: or + conditions: + - condition: state + entity_id: input_select.entryway_mode + state: 'Off' + - condition: state + entity_id: input_boolean.entryway_occupied + state: 'off' + - condition: not + conditions: + - condition: state + entity_id: input_select.entryway_mode + state: 'Manual' + - condition: state + entity_id: binary_sensor.entryway_naturally_lit + state: 'on' + sequence: + - service: scene.turn_on + data: + transition: 5 + target: + entity_id: scene.entryway_hue_off + - choose: + - conditions: + - condition: state + entity_id: input_boolean.guest_mode + state: 'on' + sequence: + - alias: "Turn off z-wave switch since all lights are off" + service: homeassistant.turn_off + target: + entity_id: switch.entryway_motion_switch \ No newline at end of file diff --git a/automations/rooms/entryway/entryway_lights_to_on.yaml b/automations/rooms/entryway/entryway_lights_to_on.yaml new file mode 100644 index 0000000..a8c8b71 --- /dev/null +++ b/automations/rooms/entryway/entryway_lights_to_on.yaml @@ -0,0 +1,162 @@ +alias: Entryway Lights to On +id: automation_entryway_lights_to_on +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent + +trigger: + - platform: state + id: "mode_change" + entity_id: + - input_select.entryway_mode + - input_select.automatic_light_profile + + - platform: state + id: light_level + entity_id: binary_sensor.entryway_naturally_lit + from: 'on' + to: 'off' + + - platform: state + id: occupied + entity_id: + - binary_sensor.entryway_occupied + - input_boolean.entryway_occupied + to: "on" + + - platform: state + id: door + entity_id: + - binary_sensor.inner_garage_door + - binary_sensor.front_door_contact + to: "on" + +# Only turn on the lights when necessary +condition: + - alias: "Home is occupied" + condition: state + entity_id: input_boolean.home_occupied + state: "on" + + - alias: "lighting automations enabled" + condition: state + entity_id: input_boolean.lighting_automations + state: "on" + + - alias: "Check if light should turn on" + condition: or + conditions: + + - alias: "Guest mode is on" + condition: state + entity_id: input_boolean.guest_mode + state: "on" + + - alias: "Motion or occupancy were detected in a dim room" + condition: and + conditions: + + - alias: "Light level below trigger amount" + condition: state + entity_id: binary_sensor.entryway_naturally_lit + state: 'off' + + - alias: "Motion or occupancy were detected" + condition: or + conditions: + - alias: "Motion was detected" + condition: trigger + id: "motion" + - alias: "Occupancy was detected" + condition: trigger + id: "occupied" + + - alias: "A scene changed and the lights are already on" + condition: and + conditions: + - condition: trigger + id: "mode_change" + + - condition: state + entity_id: input_boolean.entryway_occupied + state: "on" + +variables: + switch_name: switch.entryway_motion_switch + light_name: entryway_hue + mode_name: input_select.entryway_mode + +action: + - alias: "Make sure Z-Wave switch is turned on" + service: homeassistant.turn_on + target: + entity_id: "{{ switch_name }}" + - choose: + - alias: "If the room is set to manual, just turn the lights on" + conditions: + - alias: "Room set to manual" + condition: state + entity_id: input_select.entryway_mode + state: Manual + sequence: + - service: light.turn_on + target: + entity_id: light.entryway_hue + + - alias: "If the room is set to auto and the lights are on, change to the Automatic Light Profile scene with a transition" + conditions: + - alias: "Room set to auto" + condition: state + entity_id: input_select.entryway_mode + state: Auto + - alias: "Lights are on" + condition: state + entity_id: light.entryway_hue + state: 'on' + sequence: + - service: scene.turn_on + data: + transition: "{{ states('input_number.light_scene_transition') }}" + target: + entity_id: "scene.{{light_name}}_{{states('input_select.automatic_light_profile').lower().replace(' ','_')}}" + + - alias: "If the room is set to auto and the lights are off, change to the Automatic Light Profile scene without a transition" + conditions: + - alias: "Room set to auto" + condition: state + entity_id: input_select.entryway_mode + state: Auto + - alias: "Lights are off" + condition: state + entity_id: light.entryway_hue + state: 'off' + sequence: + - service: scene.turn_on + target: + entity_id: "scene.{{light_name}}_{{states('input_select.automatic_light_profile').lower().replace(' ','_')}}" + + - alias: "If the room is not set to auto and the lights are on, change to the Entryway Mode scene with a transition" + conditions: + - alias: "Room not manual or auto and lights are on" + condition: state + entity_id: light.entryway_hue + state: 'on' + sequence: + - service: scene.turn_on + data: + transition: "{{ states('input_number.light_scene_transition') }}" + target: + entity_id: "scene.{{light_name}}_{{states(mode_name).lower().replace(' ','_')}}" + + - alias: "If the room is not set to auto and the lights are on, change to the Entryway Mode scene without a transition" + conditions: + - alias: "Room not manual or auto and lights are off" + condition: state + entity_id: light.entryway_hue + state: 'off' + sequence: + - service: scene.turn_on + target: + entity_id: "scene.{{light_name}}_{{states(mode_name).lower().replace(' ','_')}}" + + - delay: 1 \ No newline at end of file diff --git a/automations/rooms/entryway/entryway_not_occupied.yaml b/automations/rooms/entryway/entryway_not_occupied.yaml new file mode 100644 index 0000000..11458dd --- /dev/null +++ b/automations/rooms/entryway/entryway_not_occupied.yaml @@ -0,0 +1,53 @@ +alias: 'Entryway Not Occupied' +id: automation_entryway_not_occupied +mode: restart +trigger: + - platform: state + entity_id: input_boolean.home_occupied + from: 'on' + to: 'off' + + - platform: state + entity_id: + - input_boolean.home_occupied + - binary_sensor.entryway_occupied + to: 'off' + for: '00:05:00' + + # - platform: time_pattern + # minutes: "/5" + +condition: + - condition: or + conditions: + - condition: state + entity_id: input_boolean.home_occupied + state: 'off' + - condition: and + conditions: + - condition: state + entity_id: input_boolean.entryway_occupied + state: 'on' + - condition: state + entity_id: binary_sensor.entryway_occupied + state: 'off' + for: '00:05:00' + +action: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.home_occupied + state: 'off' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.entryway_occupied + - conditions: + - condition: not + conditions: + - condition: state + entity_id: input_select.house + state: 'Manual' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.entryway_occupied diff --git a/automations/rooms/entryway/entryway_occupied.yaml b/automations/rooms/entryway/entryway_occupied.yaml new file mode 100644 index 0000000..bf219f1 --- /dev/null +++ b/automations/rooms/entryway/entryway_occupied.yaml @@ -0,0 +1,18 @@ +alias: 'Entryway Occupied' +id: automation_entryway_occupied +mode: restart + +trigger: + - platform: state + entity_id: + - binary_sensor.entryway_occupied + to: 'on' + +condition: + - condition: state + entity_id: input_boolean.entryway_occupied + state: 'off' + +action: + - service: input_boolean.turn_on + entity_id: input_boolean.entryway_occupied diff --git a/automations/rooms/front_porch_lights.yaml b/automations/rooms/front_porch_lights.yaml new file mode 100644 index 0000000..7a0c00a --- /dev/null +++ b/automations/rooms/front_porch_lights.yaml @@ -0,0 +1,111 @@ +alias: Front Porch Lights +id: automation_front_porch_lights +mode: queued + +trigger: + - platform: state + id: motion_on + entity_id: + - binary_sensor.front_porch_motion + - binary_sensor.front_porch_person_occupancy + to: "on" + + - platform: state + id: motion_off + entity_id: binary_sensor.front_porch_motion, binary_sensor.front_porch_person_occupancy + to: "off" + for: + minutes: 1 + + - platform: state + id: door_open + entity_id: binary_sensor.outer_garage_door, binary_sensor.garage_door + to: "on" + + - platform: state + id: door_shut + entity_id: binary_sensor.outer_garage_door + to: "off" + for: + minutes: 1 + + - platform: state + id: too_dark + entity_id: binary_sensor.front_porch_naturally_lit + to: "off" + + - platform: state + id: too_bright + entity_id: binary_sensor.front_porch_naturally_lit + to: "on" + +condition: + - condition: or + conditions: + - alias: "Front porch not naturally lit" + condition: state + entity_id: binary_sensor.front_porch_naturally_lit + state: 'off' + + - alias: "Light is already on" + condition: state + entity_id: light.front_porch_overhead + state: 'on' + + - alias: "It is not late evening" + condition: state + entity_id: binary_sensor.late_evening + state: 'off' + + - alias: "It is not night" + condition: state + entity_id: binary_sensor.night + state: 'off' + +action: + - choose: + - conditions: + - condition: trigger + id: "door_open" + + - condition: state + entity_id: light.front_porch_overhead + state: 'off' + + sequence: + - service: light.turn_on + target: + entity_id: light.front_porch_overhead + + - conditions: + - condition: trigger + id: "motion_on" + + - condition: state + entity_id: light.front_porch_overhead + state: 'off' + + sequence: + - service: light.turn_on + target: + entity_id: light.front_porch_overhead + + - conditions: + - condition: state + entity_id: binary_sensor.front_porch_motion + state: "off" + for: + minutes: 1 + + - condition: state + entity_id: binary_sensor.outer_garage_door + state: 'off' + + - condition: state + entity_id: light.front_porch_overhead + state: 'on' + + sequence: + - service: light.turn_off + target: + entity_id: light.front_porch_overhead \ No newline at end of file diff --git a/automations/rooms/front_room/baby_monitor_off_hub.yaml b/automations/rooms/front_room/baby_monitor_off_hub.yaml new file mode 100644 index 0000000..f6fd99f --- /dev/null +++ b/automations/rooms/front_room/baby_monitor_off_hub.yaml @@ -0,0 +1,12 @@ +alias: Baby Monitor off Front Room display +id: automation_baby_monitor_off_front_room_hub + +trigger: + platform: event + event_type: timer.finished + event_data: + entity_id: timer.nursery_camera_on_hub +action: + service: media_player.turn_off + data: + entity_id: media_player.front_room_hub \ No newline at end of file diff --git a/automations/rooms/front_room/baby_monitor_off_tv.yaml b/automations/rooms/front_room/baby_monitor_off_tv.yaml new file mode 100644 index 0000000..8d0f755 --- /dev/null +++ b/automations/rooms/front_room/baby_monitor_off_tv.yaml @@ -0,0 +1,31 @@ +alias: Baby Monitor off Front Room TV +id: automation_baby_monitor_off_front_room_tv + +trigger: +- platform: event + event_type: timer.finished + event_data: + entity_id: timer.nursery_camera_on_tv + +- platform: state + entity_id: media_player.front_room_tv + attribute: source + from: 'IP Camera Viewer - Pro' + +action: +- choose: + - conditions: + - condition: not + conditions: + - condition: state + entity_id: media_player.front_room_tv + attribute: source + state: 'IP Camera Viewer - Pro' + sequence: + - service: timer.cancel + data: + entity_id: timer.nursery_camera_on_tv + default: + service: media_player.turn_off + data: + entity_id: media_player.front_room_tv \ No newline at end of file diff --git a/automations/rooms/front_room/baby_monitor_on_front_room_hub.yaml b/automations/rooms/front_room/baby_monitor_on_front_room_hub.yaml new file mode 100644 index 0000000..9f0619d --- /dev/null +++ b/automations/rooms/front_room/baby_monitor_on_front_room_hub.yaml @@ -0,0 +1,69 @@ +alias: Baby Monitor on Front Room display +id: automation_baby_monitor_on_hub + +trigger: + - platform: state + entity_id: binary_sensor.black_bed_occupied + to: 'off' + for: '00:00:03' + + - platform: state + entity_id: binary_sensor.white_bed_occupied + to: 'off' + for: '00:00:03' + +condition: + - condition: state + entity_id: binary_sensor.kids_at_home + state: 'on' + - condition: state + entity_id: group.kids_in_bed + state: 'on' + - condition: state + entity_id: input_boolean.home_occupied + state: 'on' + - condition: state + entity_id: binary_sensor.front_room_person_occupancy + state: 'on' + - condition: or + conditions: + - condition: state + entity_id: media_player.front_room_hub + state: 'off' + - condition: state + entity_id: media_player.front_room_hub + state: 'idle' + +action: +- choose: + - conditions: + - condition: state + entity_id: timer.nursery_camera_on_hub + state: 'idle' + sequence: + - service: media_player.volume_set + data: + entity_id: media_player.front_room_hub + volume_level: 0.1 + + - service: media_player.play_media + target: + entity_id: media_player.front_room_hub + data: + media_content_id: camera-casting-yml/nursery-camera + media_content_type: lovelace + metadata: + title: Nursery Camera + thumbnail: https://brands.home-assistant.io/_/lovelace/logo.png + media_class: app + children_media_class: null + navigateIds: + - {} + - media_content_type: lovelace + media_content_id: '' + - media_content_type: lovelace + media_content_id: camera-casting-yml + +- service: timer.start + data: + entity_id: timer.nursery_camera_on_hub diff --git a/automations/rooms/front_room/baby_monitor_on_tv.yaml b/automations/rooms/front_room/baby_monitor_on_tv.yaml new file mode 100644 index 0000000..8548458 --- /dev/null +++ b/automations/rooms/front_room/baby_monitor_on_tv.yaml @@ -0,0 +1,94 @@ +alias: Baby Monitor on TV +id: automation_baby_monitor_on_tv + +trigger: + - platform: state + entity_id: binary_sensor.black_bed_occupied + to: 'off' + for: '00:00:03' + - platform: state + entity_id: binary_sensor.white_bed_occupied + to: 'off' + for: '00:00:03' + +condition: + - condition: state + entity_id: input_boolean.home_occupied + state: 'on' + - condition: state + entity_id: input_boolean.front_room_occupied + state: 'on' + - condition: or + conditions: + - condition: state + entity_id: media_player.front_room_tv + state: 'off' + - condition: state + entity_id: media_player.front_room_tv + state: 'standby' + - condition: state + entity_id: input_boolean.computer_area_occupied + state: 'off' + - condition: state + entity_id: binary_sensor.master_bed_occupied + state: 'off' + - condition: state + entity_id: binary_sensor.master_bedroom_occupied + state: 'off' + - condition: state + entity_id: input_boolean.master_bedroom_occupied + state: 'off' + - condition: state + entity_id: input_boolean.master_bedroom_asleep + state: 'off' + - condition: or + conditions: + - condition: and + conditions: + - condition: state + entity_id: input_boolean.emmett_home + state: 'on' + - condition: state + entity_id: input_boolean.emmett_in_bed + state: 'on' + - condition: and + conditions: + - condition: state + entity_id: input_boolean.bridget_home + state: 'on' + - condition: state + entity_id: input_boolean.bridget_in_bed + state: 'on' + - condition: and + conditions: + - condition: state + entity_id: input_boolean.ebin_home + state: 'on' + - condition: state + entity_id: input_boolean.ebin_in_bed + state: 'on' + - condition: not + conditions: + - condition: state + entity_id: media_player.front_room_tv + state: playing + - condition: state + entity_id: media_player.front_room_tv + state: paused + - condition: state + entity_id: media_player.front_room_tv + attribute: source + state: 'IP Camera Viewer - Pro' + +action: +- choose: + - conditions: + - condition: state + entity_id: timer.nursery_camera_on_hub + state: 'idle' + sequence: + - service: rest_command.nursery_on_roku_1 + +- service: timer.start + data: + entity_id: timer.nursery_camera_on_tv diff --git a/automations/rooms/front_room/front_room_light_cycle.yaml b/automations/rooms/front_room/front_room_light_cycle.yaml new file mode 100644 index 0000000..d25efd0 --- /dev/null +++ b/automations/rooms/front_room/front_room_light_cycle.yaml @@ -0,0 +1,169 @@ +alias: Front Room Light Cycle +id: automation_front_room_light_cycle +trigger: + - id: light_cycle_on + platform: state + entity_id: input_boolean.front_room_light_cycle + from: 'off' + to: 'on' + + - id: setting_change + platform: state + entity_id: + - input_number.front_room_light_cycle_transition + - input_select.front_room_color_set + - input_boolean.front_room_cycle_same + +condition: "{{ is_state('input_boolean.front_room_light_cycle','on') }}" + +action: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.front_room_light_cycle + state: 'on' + sequence: + + - repeat: + sequence: + - choose: + - conditions: # If all lights should be the same color and the projector is off, reference the Hue group for all the lights + - condition: state + entity_id: input_boolean.front_room_cycle_same + state: 'on' + sequence: + - service: light.turn_on + target: + entity_id: light.front_room_hue + data: + brightness: '{{ states("input_number.front_room_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.front_room_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.front_room_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.front_room_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.front_room_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.front_room_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.front_room_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.front_room_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.front_room_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.front_room_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.front_room_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.front_room_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.front_room_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.front_room_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.front_room_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.front_room_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.front_room_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + + - conditions: # If all lights should be different colors, start referencing the individual lights that don't obscure the TV + - condition: state + entity_id: input_boolean.front_room_cycle_same + state: 'off' + sequence: + - service: light.turn_on + target: + entity_id: light.front_room_splash_left + data: + brightness: '{{ states("input_number.front_room_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.front_room_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.front_room_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.front_room_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.front_room_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.front_room_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.front_room_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.front_room_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.front_room_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.front_room_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.front_room_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.front_room_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.front_room_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.front_room_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.front_room_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.front_room_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.front_room_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + + - service: light.turn_on + target: + entity_id: light.front_room_splash_left + data: + brightness: '{{ states("input_number.front_room_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.front_room_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.front_room_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.front_room_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.front_room_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.front_room_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.front_room_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.front_room_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.front_room_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.front_room_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.front_room_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.front_room_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.front_room_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.front_room_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.front_room_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.front_room_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.front_room_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + + - delay: + seconds: '{{ states("input_number.front_room_light_cycle_transition") | int }}' + + until: + - condition: state + entity_id: input_boolean.front_room_light_cycle + state: 'off' + + - service: automation.trigger + entity_id: automation.front_room_lights_to_on diff --git a/automations/rooms/front_room/front_room_lights_to_off.yaml b/automations/rooms/front_room/front_room_lights_to_off.yaml new file mode 100644 index 0000000..6ed37bd --- /dev/null +++ b/automations/rooms/front_room/front_room_lights_to_off.yaml @@ -0,0 +1,77 @@ +alias: Front Room Lights to Off +id: automation_front_room_lights_to_off +mode: restart + +trigger: + - platform: state + entity_id: input_select.front_room_mode + + - platform: state + entity_id: input_boolean.front_room_occupied + to: 'off' + + - platform: state + entity_id: binary_sensor.front_room_naturally_lit + from: 'off' + to: 'on' + + #- platform: time_pattern + # minutes: "/5" + +condition: + + - alias: "Front room light cycle not on" + condition: state + entity_id: input_boolean.front_room_light_cycle + state: "off" + + - condition: or + conditions: + - condition: state + entity_id: input_select.front_room_mode + state: 'Off' + - condition: state + entity_id: input_boolean.front_room_occupied + state: 'off' + - "{{ is_state('binary_sensor.front_room_naturally_lit','on') }}" + +action: + - choose: + - conditions: + - condition: or + conditions: + - condition: and + conditions: + - condition: state + entity_id: input_boolean.lighting_automations + state: 'on' + - condition: or + conditions: + - condition: state + entity_id: input_select.front_room_mode + state: 'Off' + - condition: state + entity_id: input_boolean.front_room_occupied + state: 'off' + - condition: not + conditions: + - condition: state + entity_id: input_select.front_room_mode + state: 'Manual' + - "{{ is_state('binary_sensor.front_room_naturally_lit','on') }}" + sequence: + - service: scene.turn_on + data: + transition: 5 + target: + entity_id: scene.front_room_hue_off + - choose: + - conditions: + - condition: state + entity_id: input_boolean.guest_mode + state: 'on' + sequence: + - alias: "Turn off z-wave switch since all lights are off" + service: homeassistant.turn_off + target: + entity_id: switch.front_room_motion_switch diff --git a/automations/rooms/front_room/front_room_lights_to_on.yaml b/automations/rooms/front_room/front_room_lights_to_on.yaml new file mode 100644 index 0000000..52a575f --- /dev/null +++ b/automations/rooms/front_room/front_room_lights_to_on.yaml @@ -0,0 +1,173 @@ +alias: Front Room Lights to On +id: automation_front_room_lights_to_on +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent + +trigger: + - platform: state + id: mode_change + entity_id: + - input_select.front_room_mode + - input_select.automatic_light_profile + + - platform: state + id: occupied + entity_id: + - binary_sensor.front_room_occupied + - input_boolean.front_room_occupied + to: "on" + + # - platform: state + # id: motion + # entity_id: group.front_room_motion + # to: "on" + + - platform: state + id: light_level + entity_id: binary_sensor.front_room_naturally_lit + from: 'on' + to: 'off' + +condition: + - alias: "Home is occupied" + condition: state + entity_id: input_boolean.home_occupied + state: "on" + + - alias: "Front room light cycle not on" + condition: state + entity_id: input_boolean.front_room_light_cycle + state: "off" + + - alias: "Check if light should turn on" + condition: or + conditions: + + - alias: "Guest mode is on" + condition: state + entity_id: input_boolean.guest_mode + state: "on" + + - alias: "Motion or occupancy were detected in a dim room" + condition: and + conditions: + - alias: "Light level below trigger amount" + condition: state + entity_id: binary_sensor.front_room_naturally_lit + state: 'off' + + - alias: "Motion or occupancy were detected" + condition: or + conditions: + - alias: "Motion was detected" + condition: trigger + id: "motion" + - alias: "Occupancy was detected" + condition: trigger + id: "occupied" + + - alias: "A scene changed and the lights are already on" + condition: and + conditions: + - condition: trigger + id: "mode_change" + - condition: state + entity_id: input_boolean.front_room_occupied + state: "on" + + - alias: "The light level changed, the room is occupied, and the light is off" + condition: and + conditions: + - condition: trigger + id: light_level + - condition: state + entity_id: input_boolean.front_room_occupied + state: 'on' + - condition: state + entity_id: light.front_room_hue + state: 'off' + +variables: + switch_name: switch.front_room_motion_switch + light_name: front_room_hue + mode_name: input_select.front_room_mode + +action: + - alias: "Make sure Z-Wave switch is turned on" + service: homeassistant.turn_on + target: + entity_id: "{{ switch_name }}" + - choose: + - alias: "If the room is set to manual, just turn the lights on" + conditions: + - alias: "Room set to manual" + condition: state + entity_id: input_select.front_room_mode + state: Manual + sequence: + - service: light.turn_on + target: + entity_id: light.front_room_hue + + - alias: "If the room is set to auto, the lights are already on, and the room is dim, change to the Automatic Light Profile scene with a transition" + conditions: + - alias: "Room set to auto" + condition: state + entity_id: input_select.front_room_mode + state: Auto + - alias: "Lights are on" + condition: state + entity_id: light.front_room_hue + state: 'on' + - "{{ states('sensor.front_room_light_level') | float(default=0) < states('input_number.front_room_light_level_trigger') | float(default=0) }}" + sequence: + - service: scene.turn_on + data: + transition: "{{ states('input_number.light_scene_transition') }}" + target: + entity_id: "scene.{{light_name}}_{{states('input_select.automatic_light_profile').lower().replace(' ','_')}}" + + - alias: "If the room is set to auto and the lights are off, change to the Automatic Light Profile scene without a transition" + conditions: + - alias: "Room set to auto" + condition: state + entity_id: input_select.front_room_mode + state: Auto + - alias: "Lights are off" + condition: state + entity_id: light.front_room_hue + state: 'off' + - "{{ states('sensor.front_room_light_level') | float(default=0) < states('input_number.front_room_light_level_trigger') | float(default=0) }}" + sequence: + - service: scene.turn_on + target: + entity_id: "scene.{{light_name}}_{{states('input_select.automatic_light_profile').lower().replace(' ','_')}}" + + - alias: "If the room is not set to auto and the lights are on, change to the Front Room Mode scene with a transition" + conditions: + - alias: "Room not manual or auto and lights are on" + condition: state + entity_id: light.front_room_hue + state: 'on' + - "{{ states('sensor.front_room_light_level') | float(default=0) < states('input_number.front_room_light_level_trigger') | float(default=0) }}" + sequence: + - service: scene.turn_on + data: + transition: "{{ states('input_number.light_scene_transition') }}" + target: + entity_id: "scene.{{light_name}}_{{states(mode_name).lower().replace(' ','_')}}" + + - alias: "If the room is not set to auto and the lights are on, change to the Front Room Mode scene without a transition" + conditions: + - alias: "Room not manual or auto and lights are off" + condition: state + entity_id: light.front_room_hue + state: 'off' + - "{{ states('sensor.front_room_light_level') | float(default=0) < states('input_number.front_room_light_level_trigger') | float(default=0) }}" + sequence: + - service: scene.turn_on + target: + entity_id: "scene.{{light_name}}_{{states(mode_name).lower().replace(' ','_')}}" + + - delay: 1 \ No newline at end of file diff --git a/automations/rooms/front_room/front_room_not_occupied.yaml b/automations/rooms/front_room/front_room_not_occupied.yaml new file mode 100644 index 0000000..1640ab4 --- /dev/null +++ b/automations/rooms/front_room/front_room_not_occupied.yaml @@ -0,0 +1,65 @@ +alias: 'Front Room Not Occupied' +id: automation_front_room_not_occupied +mode: restart + +trigger: + - platform: state + entity_id: input_boolean.home_occupied + from: 'on' + to: 'off' + + - platform: state + entity_id: + - input_boolean.home_occupied + - binary_sensor.front_room_occupied + to: 'off' + for: '00:05:00' + + # - platform: time_pattern + # minutes: "/5" + +condition: + - condition: state + entity_id: input_boolean.front_room_occupied + state: 'on' + + - condition: state + entity_id: input_boolean.lights_off_manually + state: 'off' + + - condition: or + conditions: + - condition: state + entity_id: input_boolean.home_occupied + state: 'off' + - condition: or + conditions: + - condition: state + entity_id: binary_sensor.front_room_person_occupancy + state: 'off' + for: + minutes: 5 + - condition: state + entity_id: binary_sensor.front_room_occupied + state: 'off' + for: + minutes: 5 + +action: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.home_occupied + state: 'off' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.front_room_occupied + - conditions: + - condition: not + conditions: + - condition: state + entity_id: input_select.house + state: 'Manual' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.front_room_occupied diff --git a/automations/rooms/front_room/front_room_occupied.yaml b/automations/rooms/front_room/front_room_occupied.yaml new file mode 100644 index 0000000..643a69d --- /dev/null +++ b/automations/rooms/front_room/front_room_occupied.yaml @@ -0,0 +1,18 @@ +alias: 'Front Room Occupied' +id: automation_front_room_occupied +mode: restart + +trigger: + - platform: state + entity_id: + - binary_sensor.front_room_occupied + to: 'on' +condition: + # Computer area was not already occupied + - condition: state + entity_id: input_boolean.front_room_occupied + state: 'off' + +action: + - service: input_boolean.turn_on + entity_id: input_boolean.front_room_occupied diff --git a/automations/rooms/front_room/front_room_tv_paused.yaml b/automations/rooms/front_room/front_room_tv_paused.yaml new file mode 100644 index 0000000..5f9d1b6 --- /dev/null +++ b/automations/rooms/front_room/front_room_tv_paused.yaml @@ -0,0 +1,24 @@ +alias: Front Room TV Paused +id: automation_front_room_tv_paused +trigger: + - platform: state + entity_id: media_player.front_room_tv + from: 'playing' + +condition: +- condition: state + entity_id: input_boolean.lighting_automations + state: 'on' + +- condition: state + entity_id: sun.sun + state: 'below_horizon' + +action: + - service: input_select.select_option + data_template: + entity_id: input_select.front_room_mode + option: "{{ states('input_text.front_room_mode') }}" + + - service: automation.trigger + entity_id: automation.front_room_lights_to_on diff --git a/automations/rooms/front_room/front_room_tv_playing.yaml b/automations/rooms/front_room/front_room_tv_playing.yaml new file mode 100644 index 0000000..fea73c6 --- /dev/null +++ b/automations/rooms/front_room/front_room_tv_playing.yaml @@ -0,0 +1,42 @@ +alias: Front Room TV Playing +id: automation_front_room_tv_playing +trigger: + - platform: state + entity_id: media_player.front_room_tv + to: 'playing' + +condition: +- condition: state + entity_id: input_boolean.lighting_automations + state: 'on' +- condition: state + entity_id: light.front_room_hue + state: 'on' +- condition: state + entity_id: sun.sun + state: 'below_horizon' + +- condition: not + conditions: + - condition: state + entity_id: media_player.front_room_tv + attribute: 'source' + state: 'PBS KIDS' + - condition: state + entity_id: media_player.front_room_tv + attribute: 'source' + state: 'YouTube' +action: + - service: input_text.set_value + data_template: + entity_id: input_text.front_room_mode + value: "{{ states('input_select.front_room_mode') }}" + + - service: input_select.select_option + data: + entity_id: input_select.front_room_mode + option: Dimmed + + - service: automation.trigger + entity_id: automation.front_room_lights_to_on + diff --git a/automations/rooms/front_room/front_room_tv_standby.yaml b/automations/rooms/front_room/front_room_tv_standby.yaml new file mode 100644 index 0000000..54e00a3 --- /dev/null +++ b/automations/rooms/front_room/front_room_tv_standby.yaml @@ -0,0 +1,20 @@ +alias: Front Room TV Standby +id: automation_front_room_tv_standby +trigger: + - platform: state + entity_id: media_player.front_room_tv + to: 'standby' + for: '00:05:00' + +condition: +- condition: state + entity_id: input_boolean.lighting_automations + state: 'on' +action: + - service: input_select.select_option + data_template: + entity_id: input_select.front_room_mode + option: "{{ states('input_text.front_room_mode') }}" + + - service: automation.trigger + entity_id: automation.front_room_lights_to_on diff --git a/automations/rooms/furnace_room/furnace_room_water_sensor_on.yaml b/automations/rooms/furnace_room/furnace_room_water_sensor_on.yaml new file mode 100644 index 0000000..3be6ee0 --- /dev/null +++ b/automations/rooms/furnace_room/furnace_room_water_sensor_on.yaml @@ -0,0 +1,18 @@ +alias: Furnace Room Water Sensor On +id: automation_front_room_water_sensor_on + +trigger: + - platform: state + entity_id: binary_sensor.furnace_room_water_sensor_water_alarm_water_leak_detected + to: "on" + for: "00:00:10" + +action: + - service: tts.google_translate_say + entity_id: media_player.front_room_hub, media_player.bathroom_mini, media_player.kitchen, media_player.master_bedroom_clock + data: + message: Attention! A water leak has been detected on the furnace room floor! + + - service: notify.mobile_app_pixel_7 + data: + message: Attention! A water leak has been detected on the furnace room floor! diff --git a/automations/rooms/furnace_room_lights.yaml b/automations/rooms/furnace_room_lights.yaml new file mode 100644 index 0000000..108fea3 --- /dev/null +++ b/automations/rooms/furnace_room_lights.yaml @@ -0,0 +1,48 @@ +alias: Furnace Room Lights +id: automation_furnace_room_lights +mode: queued + +trigger: + - platform: state + id: door_open + entity_id: binary_sensor.furnace_room_door + from: "off" + to: "on" + + - platform: state + id: door_closed + entity_id: binary_sensor.furnace_room_door + to: "off" + for: "00:10:00" + + - platform: state + id: motion_off + entity_id: binary_sensor.furnace_room_motion_switch_home_security_motion_detection + to: "off" + for: "00:15:00" + +action: + - choose: + # - conditions: + # - condition: trigger + # id: "door_open" + # - condition: state + # entity_id: light.furnace_room + # state: 'off' + # sequence: + # - service: light.turn_on + # target: + # entity_id: light.furnace_room + - conditions: + - condition: trigger + id: "door_closed" + - condition: state + entity_id: binary_sensor.furnace_room_motion_switch_home_security_motion_detection + state: "off" + - condition: state + entity_id: light.furnace_room + state: 'on' + sequence: + - service: light.turn_off + target: + entity_id: light.furnace_room \ No newline at end of file diff --git a/automations/rooms/garage/garage_lights_to_off.yaml b/automations/rooms/garage/garage_lights_to_off.yaml new file mode 100644 index 0000000..ab27804 --- /dev/null +++ b/automations/rooms/garage/garage_lights_to_off.yaml @@ -0,0 +1,43 @@ +alias: Garage Lights to Off +id: automation_garage_lights_to_off +mode: restart + +trigger: + - platform: state + entity_id: input_boolean.garage_occupied + to: 'off' + + - platform: state + entity_id: + - binary_sensor.inner_garage_door + - binary_sensor.outer_garage_door + - binary_sensor.garage_door + to: 'off' + for: '00:10:00' + + - platform: state + entity_id: binary_sensor.garage_naturally_lit + from: 'off' + to: 'on' + +condition: + - condition: state + entity_id: input_boolean.lighting_automations + state: 'on' + + - condition: state + entity_id: light.garage_overhead + state: 'on' + + - condition: state + entity_id: + - binary_sensor.inner_garage_door + - binary_sensor.outer_garage_door + #- binary_sensor.garage_door + - input_boolean.garage_occupied + state: 'off' + +action: + - service: light.turn_off + data: + entity_id: light.garage_overhead \ No newline at end of file diff --git a/automations/rooms/garage/garage_lights_to_on.yaml b/automations/rooms/garage/garage_lights_to_on.yaml new file mode 100644 index 0000000..15e58c5 --- /dev/null +++ b/automations/rooms/garage/garage_lights_to_on.yaml @@ -0,0 +1,132 @@ +alias: Garage Lights to On +id: automation_garage_lights_to_on +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent + +trigger: + - platform: state + id: "occupied" + entity_id: input_boolean.garage_occupied + to: "on" + + - platform: state + id: "too_dim" + entity_id: binary_sensor.garage_naturally_lit + from: "on" + to: "off" + + # - platform: state + # id: "motion" + # entity_id: group.garage_motion + # from: "off" + # to: "on" + + - platform: state + id: "garage_door_opened" + entity_id: binary_sensor.garage_door + from: "off" + to: "on" + + - platform: state + id: "garage_door_closed" + entity_id: binary_sensor.garage_door + from: "on" + to: "off" + + - platform: state + id: "doors_open" + entity_id: + - binary_sensor.inner_garage_door + - binary_sensor.outer_garage_door + from: "off" + to: "on" + + - platform: state + id: "doors_closed" + entity_id: + - binary_sensor.inner_garage_door + - binary_sensor.outer_garage_door + from: "on" + to: "off" + + - platform: state + id: "workshop_motion" + entity_id: group.workshop_motion + from: "off" + to: "on" + +# Only turn on the lights when necessary +condition: + - alias: Check if the lights should turn on + condition: or + conditions: + - alias: "Garage door was opened" + condition: trigger + id: "garage_door_opened" + + - alias: Check if the light should turn on when the home is occupied + condition: and + conditions: + + - alias: "Home is occupied" + condition: state + entity_id: input_boolean.home_occupied + state: "on" + + - alias: "Check if light should turn on" + condition: or + conditions: + + - alias: "Guest mode is on" + condition: state + entity_id: input_boolean.guest_mode + state: "on" + + - alias: "Motion in dark garage, or workshop regardless of light level" + condition: or + conditions: + + - alias: "Motion or occupancy were detected in a dim room" + condition: and + conditions: + + - alias: "Room not naturally lit" + condition: state + entity_id: binary_sensor.garage_naturally_lit + state: 'off' + + - alias: "Motion, occupancy, or door opening were detected" + condition: or + conditions: + - alias: "Motion was detected" + condition: trigger + id: "motion" + - alias: "Occupancy was detected" + condition: trigger + id: "occupied" + - alias: "Occupancy was detected" + condition: trigger + id: "doors_open" + + - condition: state + entity_id: input_boolean.garage_occupied + state: "on" + + - alias: "Motion in the workshop" + condition: and + conditions: + - condition: trigger + id: "workshop_motion" + + - condition: state + entity_id: input_boolean.garage_occupied + state: "on" + +action: + - alias: "Make sure Z-Wave switch is turned on" + service: homeassistant.turn_on + target: + entity_id: switch.garage_switch + + - delay: 1 \ No newline at end of file diff --git a/automations/rooms/garage/garage_not_occupied.yaml b/automations/rooms/garage/garage_not_occupied.yaml new file mode 100644 index 0000000..46c0543 --- /dev/null +++ b/automations/rooms/garage/garage_not_occupied.yaml @@ -0,0 +1,78 @@ +alias: 'Garage Not Occupied' +id: automation_garage_not_occupied +mode: restart + +trigger: + - platform: state + entity_id: + - binary_sensor.garage_occupied + - binary_sensor.walkway_person_occupancy + - binary_sensor.workshop_person_occupancy + to: 'off' + for: '00:05:00' + +condition: + + - condition: state + entity_id: input_boolean.lights_off_manually + state: 'off' + - condition: state + entity_id: input_boolean.garage_occupied + state: 'on' + - condition: state + entity_id: binary_sensor.garage_occupied + state: 'off' + +action: + - repeat: + sequence: + - choose: + - conditions: + - condition: state + entity_id: binary_sensor.garage_occupied + state: 'off' + for: '00:01:00' + - condition: or + conditions: + - condition: state + entity_id: input_select.house + state: 'Bachelor' + - condition: state + entity_id: input_boolean.kids_asleep + state: 'on' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.garage_occupied + - conditions: + - condition: state + entity_id: binary_sensor.garage_occupied + state: 'off' + for: '00:05:00' + - condition: or + conditions: + - condition: state + entity_id: input_select.house + state: 'Auto' + - condition: state + entity_id: input_select.house + state: 'Dad' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.garage_occupied + - conditions: + - condition: state + entity_id: binary_sensor.garage_naturally_lit + state: 'on' + for: '00:00:10' + + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.garage_occupied + + - delay: + minutes: 5 + + until: + - condition: state + entity_id: input_boolean.garage_occupied + state: 'off' diff --git a/automations/rooms/garage/garage_occupied.yaml b/automations/rooms/garage/garage_occupied.yaml new file mode 100644 index 0000000..1de2e26 --- /dev/null +++ b/automations/rooms/garage/garage_occupied.yaml @@ -0,0 +1,17 @@ +alias: 'Garage Occupied' +id: automation_garage_occupied +mode: restart +trigger: + - platform: state + entity_id: binary_sensor.garage_occupied + to: 'on' +condition: + # Computer area was not already occupied + - condition: state + entity_id: input_boolean.garage_occupied + state: 'off' + +action: + - service: input_boolean.turn_on + entity_id: input_boolean.garage_occupied + diff --git a/automations/rooms/garage/garage_open_nobody_home.yaml b/automations/rooms/garage/garage_open_nobody_home.yaml new file mode 100644 index 0000000..3a3bcdb --- /dev/null +++ b/automations/rooms/garage/garage_open_nobody_home.yaml @@ -0,0 +1,22 @@ +alias: 'Garage open nobody home' +id: automation_garage_open_nobody_home +initial_state: 'on' +trigger: + - platform: state + entity_id: binary_sensor.garage_open_nobody_home + to: 'on' + +condition: + - condition: and + conditions: + - condition: state + entity_id: input_boolean.home_occupied + state: 'off' + - condition: state + entity_id: cover.garage_door + state: 'on' + +action: + - service: notify.mobile_app_pixel_7 + data: + message: The garage is open, but nobody is home \ No newline at end of file diff --git a/automations/rooms/great_room/great_room_light_cycle.yaml b/automations/rooms/great_room/great_room_light_cycle.yaml new file mode 100644 index 0000000..988f343 --- /dev/null +++ b/automations/rooms/great_room/great_room_light_cycle.yaml @@ -0,0 +1,405 @@ +alias: Great Room Light Cycle +id: automation_great_room_light_cycle +mode: restart + +trigger: + - id: light_cycle_on + platform: state + entity_id: input_boolean.great_room_light_cycle + from: 'off' + to: 'on' + + - id: light_cycle_off + platform: state + entity_id: input_boolean.great_room_light_cycle + from: 'on' + to: 'off' + + - id: projector_off + platform: state + entity_id: switch.shelly_projector + from: 'on' + to: 'off' + + - id: projector_on + platform: state + entity_id: switch.shelly_projector + from: 'off' + to: 'on' + + - id: setting_change + platform: state + entity_id: + - input_number.great_room_light_cycle_transition + - input_select.great_room_color_set + - input_boolean.great_room_cycle_same + +condition: "{{ is_state('input_boolean.great_room_light_cycle','on') }}" + +action: + - choose: + - conditions: + - condition: state + entity_id: switch.shelly_projector + state: 'on' + sequence: + - service: light.turn_off + target: + entity_id: light.basement_2, light.basement_4 + - choose: + - conditions: + - condition: state + entity_id: input_boolean.great_room_light_cycle + state: 'on' + sequence: + + - repeat: + sequence: + - choose: + - conditions: # If all lights should be the same color and the projector is off, reference the Hue group for all the lights + - condition: state + entity_id: input_boolean.great_room_cycle_same + state: 'on' + - condition: state + entity_id: switch.shelly_projector + state: 'off' + sequence: + - service: light.turn_on + target: + entity_id: light.downstairs + data: + brightness: '{{ states("input_number.great_room_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.great_room_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.great_room_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.great_room_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.great_room_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.great_room_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.great_room_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.great_room_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.great_room_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.great_room_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.great_room_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.great_room_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.great_room_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.great_room_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.great_room_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.great_room_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.great_room_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + + - conditions: # If all lights should be the same color and the projector is on, reference the specific lights that don't obscure the tv + - condition: state + entity_id: input_boolean.great_room_cycle_same + state: 'on' + - condition: state + entity_id: switch.shelly_projector + state: 'on' + sequence: + - service: light.turn_on + target: + entity_id: light.basement_1, light.basement_3, light.basement_5 + data: + brightness: '{{ states("input_number.great_room_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.great_room_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.great_room_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.great_room_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.great_room_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.great_room_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.great_room_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.great_room_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.great_room_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.great_room_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.great_room_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.great_room_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.great_room_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.great_room_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.great_room_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.great_room_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.great_room_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + + - conditions: # If all lights should be different colors, start referencing the individual lights that don't obscure the TV + - condition: state + entity_id: input_boolean.great_room_cycle_same + state: 'off' + sequence: + - service: light.turn_on + target: + entity_id: light.basement_1 + data: + brightness: '{{ states("input_number.great_room_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.great_room_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.great_room_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.great_room_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.great_room_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.great_room_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.great_room_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.great_room_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.great_room_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.great_room_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.great_room_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.great_room_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.great_room_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.great_room_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.great_room_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.great_room_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.great_room_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + + - service: light.turn_on + target: + entity_id: light.basement_3 + data: + brightness: '{{ states("input_number.great_room_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.great_room_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.great_room_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.great_room_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.great_room_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.great_room_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.great_room_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.great_room_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.great_room_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.great_room_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.great_room_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.great_room_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.great_room_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.great_room_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.great_room_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.great_room_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.great_room_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + + - service: light.turn_on + target: + entity_id: light.basement_5 + data: + brightness: '{{ states("input_number.great_room_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.great_room_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.great_room_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.great_room_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.great_room_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.great_room_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.great_room_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.great_room_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.great_room_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.great_room_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.great_room_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.great_room_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.great_room_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.great_room_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.great_room_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.great_room_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.great_room_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + + - choose: # If the projector is off, go ahead and reference all the lights + - conditions: + - condition: state + entity_id: switch.shelly_projector + state: 'off' + sequence: + - service: light.turn_on + data_template: + entity_id: light.basement_2 + brightness: '{{ states("input_number.great_room_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.great_room_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.great_room_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.great_room_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.great_room_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.great_room_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.great_room_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.great_room_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.great_room_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.great_room_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.great_room_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.great_room_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.great_room_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.great_room_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.great_room_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.great_room_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.great_room_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + + - service: light.turn_on + data_template: + entity_id: light.basement_4 + brightness: '{{ states("input_number.great_room_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.great_room_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.great_room_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.great_room_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.great_room_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.great_room_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.great_room_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.great_room_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.great_room_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.great_room_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.great_room_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.great_room_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.great_room_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.great_room_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.great_room_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.great_room_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.great_room_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + + - delay: + seconds: '{{ states("input_number.great_room_light_cycle_transition") | int }}' + + until: + - condition: state + entity_id: input_boolean.great_room_light_cycle + state: 'off' + + + - choose: + - conditions: + - condition: state + entity_id: input_boolean.great_room_occupied + state: 'on' + sequence: + - service: automation.trigger + entity_id: automation.great_room_lights_to_on + + - conditions: + - condition: state + entity_id: input_boolean.great_room_occupied + state: 'off' + sequence: + - service: automation.trigger + entity_id: automation.great_room_lights_to_off + + - choose: + - conditions: + - condition: state + entity_id: input_boolean.computer_area_occupied + state: 'on' + sequence: + - service: automation.trigger + entity_id: automation.computer_area_lights_to_on + + - conditions: + - condition: state + entity_id: input_boolean.computer_area_occupied + state: 'off' + sequence: + - service: automation.trigger + entity_id: automation.computer_area_lights_to_off \ No newline at end of file diff --git a/automations/rooms/great_room/great_room_light_switch.yaml b/automations/rooms/great_room/great_room_light_switch.yaml new file mode 100644 index 0000000..089ac6d --- /dev/null +++ b/automations/rooms/great_room/great_room_light_switch.yaml @@ -0,0 +1,60 @@ +alias: Great Room Light Switch +description: 'Handles button presses for the Great Room Motion Switch' +id: automation.great_room_light_switch +mode: single +trigger: + - platform: state + entity_id: + - switch.great_room_motion_switch + from: "on" + to: "off" + id: turned_off + - platform: state + entity_id: + - switch.great_room_motion_switch + from: "off" + to: "on" + id: turned_on +condition: [] +action: + - choose: + - conditions: + - condition: trigger + id: turned_off + - condition: state + entity_id: switch.great_room_motion_switch + state: 'off' + sequence: + - service: input_select.select_option + data: + option: Manual + target: + entity_id: input_select.great_room_mode + - conditions: + - condition: trigger + id: turned_on + - condition: state + entity_id: switch.great_room_motion_switch + state: 'on' + sequence: + - choose: + - conditions: + - condition: state + entity_id: input_select.great_room_mode + state: Manual + sequence: + - service: input_select.select_option + data: + option: Auto + target: + entity_id: input_select.great_room_mode + - conditions: + - condition: state + entity_id: input_select.great_room_mode + state: Auto + sequence: + - service: input_select.select_option + data: + option: Bright + target: + entity_id: input_select.great_room_mode \ No newline at end of file diff --git a/automations/rooms/great_room/great_room_lights_to_off.yaml b/automations/rooms/great_room/great_room_lights_to_off.yaml new file mode 100644 index 0000000..f1e7ffa --- /dev/null +++ b/automations/rooms/great_room/great_room_lights_to_off.yaml @@ -0,0 +1,79 @@ +alias: Great Room Lights to Off +id: automation_great_room_lights_to_off +mode: restart + +trigger: + - platform: state + entity_id: input_select.great_room_mode + + - platform: state + entity_id: input_boolean.great_room_occupied + to: 'off' + + - platform: state + id: light_level + entity_id: binary_sensor.great_room_naturally_lit + from: 'off' + to: 'on' + + #- platform: time_pattern + # minutes: "/5" + +condition: + - condition: or + conditions: + - condition: state + entity_id: input_select.great_room_mode + state: 'Off' + - condition: state + entity_id: input_boolean.great_room_occupied + state: 'off' + - condition: state + entity_id: input_boolean.great_room_light_cycle + state: 'off' + +action: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.lighting_automations + state: 'on' + - condition: or + conditions: + - condition: state + entity_id: input_select.great_room_mode + state: 'Off' + - condition: state + entity_id: input_boolean.great_room_occupied + state: 'off' + - condition: not + conditions: + - condition: state + entity_id: input_select.great_room_mode + state: 'Manual' + sequence: + - service: scene.turn_on + data: + transition: 5 + target: + entity_id: scene.great_room_hue_off + # - service: light.turn_off + # target: + # entity_id: light.basement_2, light.basement_3, light.basement_4, light.basement_5 + - choose: + - conditions: + - condition: state + entity_id: light.computer_area_hue + state: 'off' + - condition: state + entity_id: input_boolean.guest_mode + state: 'on' + sequence: + - alias: "Turn off z-wave switch since all lights are off" + service: homeassistant.turn_off + target: + entity_id: switch.great_room_motion_switch + default: + - service: light.turn_off + target: + entity_id: light.great_room_hue diff --git a/automations/rooms/great_room/great_room_lights_to_on.yaml b/automations/rooms/great_room/great_room_lights_to_on.yaml new file mode 100644 index 0000000..3604ebf --- /dev/null +++ b/automations/rooms/great_room/great_room_lights_to_on.yaml @@ -0,0 +1,164 @@ +alias: Great Room Lights to On +id: automation_great_room_lights_to_on +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent + +trigger: + - platform: state + id: mode_change + entity_id: + - input_select.great_room_mode + - input_select.automatic_light_profile + + - platform: state + id: light_level + entity_id: binary_sensor.great_room_naturally_lit + from: 'on' + to: 'off' + + - platform: state + id: occupied + entity_id: + - binary_sensor.great_room_occupied + - input_boolean.great_room_occupied + to: "on" + + # - platform: state + # id: motion + # entity_id: group.great_room_motion + # to: "on" + +condition: + - alias: "Home is occupied" + condition: state + entity_id: input_boolean.home_occupied + state: "on" + + - alias: "Great Room Light Cycle is off" + condition: state + entity_id: input_boolean.great_room_light_cycle + state: "off" + + - alias: "lighting automations enabled" + condition: state + entity_id: input_boolean.lighting_automations + state: "on" + + - alias: "Check if light should turn on" + condition: or + conditions: + + - alias: "Guest mode is on" + condition: state + entity_id: input_boolean.guest_mode + state: "on" + + - alias: "Motion or occupancy were detected in a dim room" + condition: and + conditions: + + - alias: "Light level below trigger amount" + condition: state + entity_id: binary_sensor.great_room_naturally_lit + state: 'off' + + - alias: "Motion or occupancy were detected" + condition: or + conditions: + - alias: "Motion was detected" + condition: trigger + id: "motion" + - alias: "Occupancy was detected" + condition: trigger + id: "occupied" + + - alias: "A scene changed and the lights are already on" + condition: and + conditions: + - condition: trigger + id: "mode_change" + + - condition: state + entity_id: input_boolean.great_room_occupied + state: "on" + +variables: + switch_name: switch.great_room_motion_switch + light_name: great_room_hue + mode_name: input_select.great_room_mode + +action: + - alias: "Make sure Z-Wave switch is turned on" + service: homeassistant.turn_on + target: + entity_id: "{{ switch_name }}" + - choose: + - alias: "If the room is set to manual, just turn the lights on" + conditions: + - alias: "Room set to manual" + condition: state + entity_id: input_select.great_room_mode + state: Manual + sequence: + - service: light.turn_on + target: + entity_id: light.great_room_hue + + - alias: "If the room is set to auto and the lights are on, change to the Automatic Light Profile scene with a transition" + conditions: + - alias: "Room set to auto" + condition: state + entity_id: input_select.great_room_mode + state: Auto + - alias: "Lights are on" + condition: state + entity_id: light.great_room_hue + state: 'on' + sequence: + - service: scene.turn_on + data: + transition: "{{ states('input_number.light_scene_transition') }}" + target: + entity_id: "scene.{{light_name}}_{{states('input_select.automatic_light_profile').lower().replace(' ','_')}}" + + - alias: "If the room is set to auto and the lights are off, change to the Automatic Light Profile scene without a transition" + conditions: + - alias: "Room set to auto" + condition: state + entity_id: input_select.great_room_mode + state: Auto + - alias: "Lights are off" + condition: state + entity_id: light.great_room_hue + state: 'off' + sequence: + - service: scene.turn_on + target: + entity_id: "scene.{{light_name}}_{{states('input_select.automatic_light_profile').lower().replace(' ','_')}}" + + - alias: "If the room is not set to auto and the lights are on, change to the Great Room Mode scene with a transition" + conditions: + - alias: "Room not manual or auto and lights are on" + condition: state + entity_id: light.great_room_hue + state: 'on' + sequence: + - service: scene.turn_on + data: + transition: "{{ states('input_number.light_scene_transition') }}" + target: + entity_id: "scene.{{light_name}}_{{states(mode_name).lower().replace(' ','_')}}" + + - alias: "If the room is not set to auto and the lights are on, change to the Great Room Mode scene without a transition" + conditions: + - alias: "Room not manual or auto and lights are off" + condition: state + entity_id: light.great_room_hue + state: 'off' + sequence: + - service: scene.turn_on + target: + entity_id: "scene.{{light_name}}_{{states(mode_name).lower().replace(' ','_')}}" + + - delay: 1 \ No newline at end of file diff --git a/automations/rooms/great_room/great_room_not_occupied.yaml b/automations/rooms/great_room/great_room_not_occupied.yaml new file mode 100644 index 0000000..48d9e49 --- /dev/null +++ b/automations/rooms/great_room/great_room_not_occupied.yaml @@ -0,0 +1,65 @@ +alias: 'Great Room Not Occupied' +id: automation_great_room_not_occupied +mode: restart + +trigger: + - platform: state + entity_id: input_boolean.home_occupied + from: 'on' + to: 'off' + + - platform: state + entity_id: + - input_boolean.home_occupied + - binary_sensor.great_room_occupied + to: 'off' + for: '00:15:00' + + # - platform: time_pattern + # minutes: "/5" + +condition: + + - condition: state + entity_id: input_boolean.lights_off_manually + state: 'off' + - condition: state + entity_id: input_boolean.great_room_occupied + state: 'on' + + - condition: or + conditions: + - condition: state + entity_id: input_boolean.home_occupied + state: 'off' + - condition: and + conditions: + - condition: state + entity_id: binary_sensor.great_room_person_occupancy + state: 'off' + for: + minutes: 15 + - condition: state + entity_id: binary_sensor.great_room_occupied + state: 'off' + for: + minutes: 15 + +action: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.home_occupied + state: 'off' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.great_room_occupied + - conditions: + - condition: not + conditions: + - condition: state + entity_id: input_select.house + state: 'Manual' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.great_room_occupied diff --git a/automations/rooms/great_room/great_room_occupied.yaml b/automations/rooms/great_room/great_room_occupied.yaml new file mode 100644 index 0000000..21a9534 --- /dev/null +++ b/automations/rooms/great_room/great_room_occupied.yaml @@ -0,0 +1,18 @@ +alias: 'Great Room Occupied' +id: automation_great_room_occupied +mode: restart + +trigger: + - platform: state + entity_id: + - binary_sensor.great_room_occupied + to: 'on' +condition: + # Computer area was not already occupied + - condition: state + entity_id: input_boolean.great_room_occupied + state: 'off' + +action: + - service: input_boolean.turn_on + entity_id: input_boolean.great_room_occupied diff --git a/automations/rooms/great_room/great_room_projector.yaml b/automations/rooms/great_room/great_room_projector.yaml new file mode 100644 index 0000000..a9f8f3f --- /dev/null +++ b/automations/rooms/great_room/great_room_projector.yaml @@ -0,0 +1,69 @@ +alias: Great Room Projector +id: automation_great_room_projector +mode: single +trigger: + - platform: state + id: idle_five_min + entity_id: media_player.downstairs_roku + not_from: 'unavailable' + to: 'idle' + for: '00:05:00' + - platform: state + id: home_fifteen_min + entity_id: media_player.downstairs_roku + not_from: 'unavailable' + to: 'home' + for: '00:15:00' + - platform: state + id: playing_fifteen_min + entity_id: media_player.downstairs_roku + from: 'playing' + for: '00:15:00' + - platform: state + id: from_idle + entity_id: media_player.downstairs_roku + from: 'idle' + +condition: + alias: "Roku not unavailable" + condition: not + conditions: + - condition: state + entity_id: media_player.downstairs_roku + state: unavailable + +action: + - choose: + # The project turns on at seemingly random times. + # commenting this out to see if that fixes the problem + # - alias: "Roku no longer idle, turn on projector" + # conditions: + # - condition: trigger + # id: from_idle + # - condition: state + # entity_id: switch.shelly_projector + # state: 'off' + # sequence: + # - service: switch.turn_on + # data: + # entity_id: switch.shelly_projector + - alias: "Roku idle or unused, turn off projector" + conditions: + - condition: state + entity_id: switch.shelly_projector + state: 'on' + - condition: or + conditions: + - condition: trigger + id: idle_five_min + - condition: trigger + id: home_fifteen_min + sequence: + - service: switch.turn_off + target: + entity_id: switch.shelly_projector + - service: input_boolean.turn_off + data: {} + target: + entity_id: input_boolean.great_room_light_cycle + default: [] diff --git a/automations/rooms/great_room/great_room_tv_off.yaml b/automations/rooms/great_room/great_room_tv_off.yaml new file mode 100644 index 0000000..9c754a3 --- /dev/null +++ b/automations/rooms/great_room/great_room_tv_off.yaml @@ -0,0 +1,58 @@ +alias: Great Room TV Off +id: automation_great_room_tv_off +trigger: + - platform: state + entity_id: media_player.downstairs_roku + from: 'playing' + to: 'idle' + for: '00:00:30' + - platform: state + entity_id: media_player.downstairs_roku + from: 'playing' + to: 'on' + for: '00:00:30' + - platform: state + entity_id: media_player.downstairs_roku + from: 'playing' + to: 'home' + for: '00:00:30' + - platform: state + entity_id: media_player.downstairs_roku + from: 'paused' + to: 'idle' + for: '00:00:30' + - platform: state + entity_id: media_player.downstairs_roku + from: 'paused' + to: 'home' + for: '00:00:30' +condition: +- condition: state + entity_id: input_boolean.lighting_automations + state: 'on' +- condition: state + entity_id: input_boolean.great_room_light_cycle + state: 'on' +action: + - choose: + - conditions: "{{is_state('input_boolean.great_room_light_cycle','on')}}" + sequence: + - service: input_boolean.turn_off + data: {} + target: + entity_id: input_boolean.great_room_light_cycle + + - choose: + - conditions: "{{is_state('input_boolean.computer_area_light_cycle','on')}}" + sequence: + - service: input_boolean.turn_off + data: {} + target: + entity_id: input_boolean.computer_area_light_cycle + + # - service: input_select.select_option + # target: + # entity_id: input_select.nursery_mode + # data: + # option: "Nightlight" + diff --git a/automations/rooms/great_room/great_room_tv_paused.yaml b/automations/rooms/great_room/great_room_tv_paused.yaml new file mode 100644 index 0000000..ab3c7a6 --- /dev/null +++ b/automations/rooms/great_room/great_room_tv_paused.yaml @@ -0,0 +1,33 @@ +alias: Great Room TV Paused +id: automation_great_room_tv_paused +trigger: + - platform: state + entity_id: media_player.downstairs_roku + from: 'playing' + to: 'idle' + - platform: state + entity_id: media_player.downstairs_roku + from: 'playing' + to: 'home' + - platform: state + entity_id: media_player.downstairs_roku + from: 'paused' + to: 'idle' + - platform: state + entity_id: media_player.downstairs_roku + from: 'paused' + to: 'home' + +condition: +- condition: state + entity_id: input_boolean.lighting_automations + state: 'on' +- condition: state + entity_id: input_boolean.great_room_light_cycle + state: 'on' +action: + - service: input_number.set_value + data: + value: 30 + target: + entity_id: input_number.great_room_light_cycle_brightness diff --git a/automations/rooms/great_room/great_room_tv_playing.yaml b/automations/rooms/great_room/great_room_tv_playing.yaml new file mode 100644 index 0000000..0ca74db --- /dev/null +++ b/automations/rooms/great_room/great_room_tv_playing.yaml @@ -0,0 +1,117 @@ +alias: Great Room TV Playing +id: automation_great_room_tv_playing +trigger: + - platform: state + entity_id: media_player.downstairs_roku + to: 'playing' + + - platform: state + entity_id: input_select.time_of_day + + - platform: homeassistant + event: start + + - platform: event + event_type: automation_reloaded + +condition: +- alias: Something besides YouTube is playing + condition: and + conditions: + - condition: not + conditions: + - alias: "The kids aren't watching YouTube" + condition: state + entity_id: media_player.downstairs_roku + attribute: source + state: 'YouTube' + - condition: state + entity_id: media_player.downstairs_roku + state: 'playing' +- condition: state + entity_id: input_boolean.lighting_automations + state: 'on' +- condition: state + entity_id: light.great_room_hue + state: 'on' +- alias: It is later in the day/evening + condition: template + value_template: "{{ is_state('binary_sensor.early_evening','on') or is_state('binary_sensor.evening','on') or is_state('binary_sensor.late_evening','on') or is_state('binary_sensor.night','on') or is_state('binary_sensor.early_morning','on') or is_state('binary_sensor.late_afternoon','on')}}" + +- condition: or + conditions: + - alias: "Kids home and awake" + condition: and + conditions: + - condition: state + entity_id: input_boolean.kids_away + state: 'off' + - condition: state + entity_id: input_boolean.kids_asleep + state: 'off' + - alias: "Kids home and asleep" + condition: and + conditions: + - condition: state + entity_id: input_boolean.kids_away + state: 'off' + - condition: state + entity_id: input_boolean.kids_asleep + state: 'on' + - alias: "Kids away" + condition: and + conditions: + - condition: state + entity_id: input_boolean.kids_away + state: 'on' +action: + - choose: + - conditions: + - condition: state + entity_id: input_select.time_of_day + state: 'Late Afternoon' + sequence: + - service: input_number.set_value + data: + value: 100 + target: + entity_id: input_number.great_room_light_cycle_brightness + - conditions: + - condition: state + entity_id: input_select.time_of_day + state: 'Early Evening' + sequence: + - service: input_number.set_value + data: + value: 75 + target: + entity_id: input_number.great_room_light_cycle_brightness + default: + - service: input_number.set_value + data: + value: 55 + target: + entity_id: input_number.great_room_light_cycle_brightness + - service: input_number.set_value + data: + value: 30 + target: + entity_id: input_number.great_room_light_cycle_transition + - service: input_select.select_option + data: + option: Silver Swirl + target: + entity_id: input_select.great_room_color_set + - service: input_boolean.turn_off + data: {} + target: + entity_id: input_boolean.great_room_cycle_same + - service: input_boolean.turn_on + data: {} + target: + entity_id: input_boolean.great_room_light_cycle + +#b 15 +#t 30 +#Silver Swirl +# diff --git a/automations/rooms/kitchen/kitchen_lights_to_off.yaml b/automations/rooms/kitchen/kitchen_lights_to_off.yaml new file mode 100644 index 0000000..775fd50 --- /dev/null +++ b/automations/rooms/kitchen/kitchen_lights_to_off.yaml @@ -0,0 +1,82 @@ +alias: Kitchen Lights to Off +id: automation_kitchen_lights_to_off +mode: restart + +trigger: + - platform: state + entity_id: input_select.kitchen_mode + + - platform: state + entity_id: input_boolean.kitchen_occupied + to: 'off' + + - platform: state + id: light_level + entity_id: binary_sensor.kitchen_naturally_lit + from: 'off' + to: 'on' + + #- platform: time_pattern + # minutes: "/5" + +condition: + + - condition: state + entity_id: input_boolean.lights_off_manually + state: 'off' + - condition: state + entity_id: input_boolean.lighting_automations + state: 'on' + + - condition: or + conditions: + - condition: state + entity_id: input_select.kitchen_mode + state: 'Off' + - condition: state + entity_id: input_boolean.kitchen_occupied + state: 'off' + - condition: state + entity_id: binary_sensor.kitchen_naturally_lit + state: 'on' + +action: + - choose: + - conditions: + - condition: or + conditions: + - condition: and + conditions: + - condition: state + entity_id: input_boolean.lighting_automations + state: 'on' + - condition: or + conditions: + - condition: state + entity_id: input_select.kitchen_mode + state: 'Off' + - condition: state + entity_id: input_boolean.kitchen_occupied + state: 'off' + - condition: not + conditions: + - condition: state + entity_id: input_select.kitchen_mode + state: 'Manual' + - "{{ states('sensor.bar_light_level') | float(default=0) >= states('input_number.kitchen_light_level_trigger') | float(default=0) }}" + sequence: + - service: scene.turn_on + data: + transition: 5 + target: + entity_id: scene.kitchen_hue_off + - choose: + - conditions: + - condition: state + entity_id: input_boolean.guest_mode + state: 'on' + sequence: + - alias: "Turn off z-wave switch since all lights are off" + service: homeassistant.turn_off + target: + entity_id: switch.kitchen_switch \ No newline at end of file diff --git a/automations/rooms/kitchen/kitchen_lights_to_on.yaml b/automations/rooms/kitchen/kitchen_lights_to_on.yaml new file mode 100644 index 0000000..296affd --- /dev/null +++ b/automations/rooms/kitchen/kitchen_lights_to_on.yaml @@ -0,0 +1,159 @@ +alias: Kitchen Lights to On +id: automation_kitchen_lights_to_on +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent + +trigger: + - platform: state + id: mode_change + entity_id: + - input_select.kitchen_mode + - input_select.automatic_light_profile + + - platform: state + id: light_level + entity_id: binary_sensor.kitchen_naturally_lit + from: 'on' + to: 'off' + + - platform: state + id: occupied + entity_id: + - binary_sensor.kitchen_occupied + - input_boolean.kitchen_occupied + to: "on" + + # - platform: state + # id: motion + # entity_id: group.kitchen_motion + # to: "on" + +condition: + - alias: "Home is occupied" + condition: state + entity_id: input_boolean.home_occupied + state: "on" + + - alias: "lighting automations enabled" + condition: state + entity_id: input_boolean.lighting_automations + state: "on" + + - alias: "Check if light should turn on" + condition: or + conditions: + + - alias: "Guest mode is on" + condition: state + entity_id: input_boolean.guest_mode + state: "on" + + - alias: "Motion or occupancy were detected in a dim room" + condition: and + conditions: + + - alias: "Light level below trigger amount" + condition: state + entity_id: binary_sensor.kitchen_naturally_lit + state: 'off' + + - alias: "Motion or occupancy were detected" + condition: or + conditions: + - alias: "Motion was detected" + condition: trigger + id: "motion" + - alias: "Occupancy was detected" + condition: trigger + id: "occupied" + + - alias: "A scene changed and the lights are already on" + condition: and + conditions: + - condition: trigger + id: "mode_change" + + - condition: state + entity_id: input_boolean.kitchen_occupied + state: "on" + +variables: + switch_name: switch.kitchen_switch + light_name: kitchen_hue + mode_name: input_select.kitchen_mode + +action: + - alias: "Make sure Z-Wave switch is turned on" + service: homeassistant.turn_on + target: + entity_id: "{{ switch_name }}" + - choose: + - alias: "If the room is set to manual, just turn the lights on" + conditions: + - alias: "Room set to manual" + condition: state + entity_id: input_select.kitchen_mode + state: Manual + sequence: + - service: light.turn_on + target: + entity_id: light.kitchen_hue + + - alias: "If the room is set to auto and the lights are on, change to the Automatic Light Profile scene with a transition" + conditions: + - alias: "Room set to auto" + condition: state + entity_id: input_select.kitchen_mode + state: Auto + - alias: "Lights are on" + condition: state + entity_id: light.kitchen_hue + state: 'on' + sequence: + - service: scene.turn_on + data: + transition: "{{ states('input_number.light_scene_transition') }}" + target: + entity_id: "scene.{{light_name}}_{{states('input_select.automatic_light_profile').lower().replace(' ','_')}}" + + - alias: "If the room is set to auto and the lights are off, change to the Automatic Light Profile scene without a transition" + conditions: + - alias: "Room set to auto" + condition: state + entity_id: input_select.kitchen_mode + state: Auto + - alias: "Lights are off" + condition: state + entity_id: light.kitchen_hue + state: 'off' + sequence: + - service: scene.turn_on + target: + entity_id: "scene.{{light_name}}_{{states('input_select.automatic_light_profile').lower().replace(' ','_')}}" + + - alias: "If the room is not set to auto and the lights are on, change to the Kitchen Mode scene with a transition" + conditions: + - alias: "Room not manual or auto and lights are on" + condition: state + entity_id: light.kitchen_hue + state: 'on' + sequence: + - service: scene.turn_on + data: + transition: "{{ states('input_number.light_scene_transition') }}" + target: + entity_id: "scene.{{light_name}}_{{states(mode_name).lower().replace(' ','_')}}" + + - alias: "If the room is not set to auto and the lights are on, change to the Kitchen Mode scene without a transition" + conditions: + - alias: "Room not manual or auto and lights are off" + condition: state + entity_id: light.kitchen_hue + state: 'off' + sequence: + - service: scene.turn_on + target: + entity_id: "scene.{{light_name}}_{{states(mode_name).lower().replace(' ','_')}}" + + - delay: 1 \ No newline at end of file diff --git a/automations/rooms/kitchen/kitchen_not_occupied.yaml b/automations/rooms/kitchen/kitchen_not_occupied.yaml new file mode 100644 index 0000000..1b78d18 --- /dev/null +++ b/automations/rooms/kitchen/kitchen_not_occupied.yaml @@ -0,0 +1,61 @@ +alias: 'Kitchen Not Occupied' +id: automation_kitchen_not_occupied +mode: restart + +trigger: + - platform: state + entity_id: input_boolean.home_occupied + from: 'on' + to: 'off' + + - platform: state + entity_id: + - input_boolean.home_occupied + - binary_sensor.kitchen_occupied + to: 'off' + for: '00:05:00' + + # - platform: time_pattern + # minutes: "/5" + +condition: + - condition: state + entity_id: input_boolean.kitchen_occupied + state: 'on' + + - condition: or + conditions: + - condition: state + entity_id: input_boolean.home_occupied + state: 'off' + - condition: or + conditions: + - condition: state + entity_id: binary_sensor.kitchen_person_occupancy + state: 'off' + for: + minutes: 5 + - condition: state + entity_id: binary_sensor.kitchen_occupied + state: 'off' + for: + minutes: 5 + +action: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.home_occupied + state: 'off' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.kitchen_occupied + - conditions: + - condition: not + conditions: + - condition: state + entity_id: input_select.house + state: 'Manual' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.kitchen_occupied diff --git a/automations/rooms/kitchen/kitchen_occupied.yaml b/automations/rooms/kitchen/kitchen_occupied.yaml new file mode 100644 index 0000000..c4388ba --- /dev/null +++ b/automations/rooms/kitchen/kitchen_occupied.yaml @@ -0,0 +1,19 @@ +alias: 'Kitchen Occupied' +id: automation_kitchen_occupied +mode: restart + +trigger: + - platform: state + entity_id: + - binary_sensor.kitchen_occupied + to: 'on' + +condition: + - condition: state + entity_id: input_boolean.kitchen_occupied + state: 'off' + +action: + - service: input_boolean.turn_on + entity_id: input_boolean.kitchen_occupied + diff --git a/automations/rooms/mancave_lights.yaml b/automations/rooms/mancave_lights.yaml new file mode 100644 index 0000000..dfec601 --- /dev/null +++ b/automations/rooms/mancave_lights.yaml @@ -0,0 +1,49 @@ +alias: Mancave Lights +id: automation_mancave_lights +mode: queued + +trigger: + - platform: state + id: door_open + entity_id: binary_sensor.mancave_door_contact + from: "off" + to: "on" + + - platform: state + id: door_closed + entity_id: binary_sensor.mancave_door_contact + from: "on" + to: "off" + for: "00:10:00" + + - platform: state + id: motion_off + entity_id: binary_sensor.mancave_motion_switch_home_security_motion_detection + to: "off" + for: "00:15:00" + +action: + - choose: + - conditions: + - condition: trigger + id: "door_open" + - condition: state + entity_id: light.mancave + state: 'off' + sequence: + - service: light.turn_on + target: + entity_id: light.mancave + - conditions: + - condition: trigger + id: "door_closed" + - condition: state + entity_id: binary_sensor.mancave_motion_switch_home_security_motion_detection + state: "off" + - condition: state + entity_id: light.mancave + state: 'on' + sequence: + - service: light.turn_off + target: + entity_id: light.mancave \ No newline at end of file diff --git a/automations/rooms/master_bathroom/master_bathroom_lights_to_off.yaml b/automations/rooms/master_bathroom/master_bathroom_lights_to_off.yaml new file mode 100644 index 0000000..bc31882 --- /dev/null +++ b/automations/rooms/master_bathroom/master_bathroom_lights_to_off.yaml @@ -0,0 +1,66 @@ +alias: Master Bathroom Lights to Off +id: automation_master_bathrom_lights_to_off +mode: restart + +trigger: + - platform: state + entity_id: input_select.master_bathroom_mode + + - platform: state + entity_id: input_boolean.master_bathroom_occupied + to: "off" + + #- platform: time_pattern + # minutes: "/5" + +condition: + + - condition: state + entity_id: input_boolean.lights_off_manually + state: 'off' + - condition: state + entity_id: light.master_bathroom_hue + state: "on" + - condition: or + conditions: + - condition: state + entity_id: input_select.master_bathroom_mode + state: "Off" + - condition: state + entity_id: input_boolean.master_bathroom_occupied + state: "off" +action: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.lighting_automations + state: "on" + - condition: or + conditions: + - condition: state + entity_id: input_select.master_bathroom_mode + state: 'Off' + - condition: state + entity_id: input_boolean.master_bathroom_occupied + state: 'off' + - condition: not + conditions: + - condition: state + entity_id: input_select.master_bathroom_mode + state: "Manual" + sequence: + - service: scene.turn_on + data: + transition: 5 + target: + entity_id: scene.master_bathroom_hue_off + - choose: + - conditions: + - condition: state + entity_id: input_boolean.guest_mode + state: 'on' + sequence: + - alias: "Turn off z-wave switch since all lights are off" + service: homeassistant.turn_off + target: + entity_id: switch.master_bathroom_motion_switch, switch.shower_switch \ No newline at end of file diff --git a/automations/rooms/master_bathroom/master_bathroom_lights_to_on.yaml b/automations/rooms/master_bathroom/master_bathroom_lights_to_on.yaml new file mode 100644 index 0000000..d0a6399 --- /dev/null +++ b/automations/rooms/master_bathroom/master_bathroom_lights_to_on.yaml @@ -0,0 +1,116 @@ +alias: Master Bathroom Lights to On +id: automation_master_bathroom_lights_to_on +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent + +trigger: + - platform: state + entity_id: + - input_select.master_bathroom_mode + - input_select.automatic_light_profile + - platform: state + entity_id: input_boolean.master_bathroom_occupied + to: "on" + +# Only turn on the lights when necessary +condition: + - condition: or + conditions: + # Either when motion is detected + - condition: template + value_template: "{{ trigger.entity_id == 'input_boolean.master_bathroom_occupied' }}" + # Or when the scene changes while the lights are already on + - condition: and + conditions: + - condition: or + conditions: + - condition: template + value_template: "{{ trigger.entity_id == 'input_select.master_bathroom_mode' }}" + - condition: template + value_template: "{{ trigger.entity_id == 'input_select.automatic_light_profile' }}" + - condition: state + entity_id: input_boolean.master_bathroom_occupied + state: "on" + +variables: + switch_name: switch.master_bathroom_motion_switch + light_name: master_bathroom_hue + mode_name: input_select.master_bathroom_mode + +action: + - alias: "Make sure Z-Wave switch is turned on" + service: homeassistant.turn_on + target: + entity_id: + - switch.master_bathroom_motion_switch + - switch.shower_switch + - choose: + - alias: "If the room is set to manual, just turn the lights on" + conditions: + - alias: "Room set to manual" + condition: state + entity_id: input_select.master_bathroom_mode + state: Manual + sequence: + - service: light.turn_on + target: + entity_id: light.master_bathroom_hue + + - alias: "If the room is set to auto and the lights are on, change to the Automatic Light Profile scene with a transition" + conditions: + - alias: "Room set to auto" + condition: state + entity_id: input_select.master_bathroom_mode + state: Auto + - alias: "Lights are on" + condition: state + entity_id: light.master_bathroom_hue + state: 'on' + sequence: + - service: scene.turn_on + data: + transition: "{{ states('input_number.light_scene_transition') }}" + target: + entity_id: "scene.{{light_name}}_{{states('input_select.automatic_light_profile').lower().replace(' ','_')}}" + + - alias: "If the room is set to auto and the lights are off, change to the Automatic Light Profile scene without a transition" + conditions: + - alias: "Room set to auto" + condition: state + entity_id: input_select.master_bathroom_mode + state: Auto + - alias: "Lights are off" + condition: state + entity_id: light.master_bathroom_hue + state: 'off' + sequence: + - service: scene.turn_on + target: + entity_id: "scene.{{light_name}}_{{states('input_select.automatic_light_profile').lower().replace(' ','_')}}" + + - alias: "If the room is not set to auto and the lights are on, change to the Master Bathroom Mode scene with a transition" + conditions: + - alias: "Room not manual or auto and lights are on" + condition: state + entity_id: light.master_bathroom_hue + state: 'on' + sequence: + - service: scene.turn_on + data: + transition: "{{ states('input_number.light_scene_transition') }}" + target: + entity_id: "scene.{{light_name}}_{{states(mode_name).lower().replace(' ','_')}}" + + - alias: "If the room is not set to auto and the lights are on, change to the Master Bathroom Mode scene without a transition" + conditions: + - alias: "Room not manual or auto and lights are off" + condition: state + entity_id: light.master_bathroom_hue + state: 'off' + sequence: + - service: scene.turn_on + target: + entity_id: "scene.{{light_name}}_{{states(mode_name).lower().replace(' ','_')}}" + + - delay: 1 \ No newline at end of file diff --git a/automations/rooms/master_bathroom/master_bathroom_not_occupied.yaml b/automations/rooms/master_bathroom/master_bathroom_not_occupied.yaml new file mode 100644 index 0000000..396d4fb --- /dev/null +++ b/automations/rooms/master_bathroom/master_bathroom_not_occupied.yaml @@ -0,0 +1,53 @@ +alias: 'Master Bathroom Not Occupied' +id: automation_master_bathroom_not_occupied +mode: restart +trigger: + - platform: state + entity_id: input_boolean.home_occupied + from: 'on' + to: 'off' + + - platform: state + entity_id: + - input_boolean.home_occupied + - binary_sensor.master_bathroom_occupied + to: 'off' + for: '00:10:00' + + # - platform: time_pattern + # minutes: "/5" + +condition: + - condition: or + conditions: + - condition: state + entity_id: input_boolean.home_occupied + state: 'off' + - condition: and + conditions: + - condition: state + entity_id: input_boolean.master_bathroom_occupied + state: 'on' + - condition: state + entity_id: binary_sensor.master_bathroom_occupied + state: 'off' + for: '00:10:00' + +action: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.home_occupied + state: 'off' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.master_bathroom_occupied + - conditions: + - condition: not + conditions: + - condition: state + entity_id: input_select.house + state: 'Manual' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.master_bathroom_occupied \ No newline at end of file diff --git a/automations/rooms/master_bathroom/master_bathroom_occupied.yaml b/automations/rooms/master_bathroom/master_bathroom_occupied.yaml new file mode 100644 index 0000000..b62b7a4 --- /dev/null +++ b/automations/rooms/master_bathroom/master_bathroom_occupied.yaml @@ -0,0 +1,18 @@ +alias: Master Bathroom Occupied +id: automation_master_bathroom_occupied +mode: restart + +trigger: + - platform: state + entity_id: + - binary_sensor.master_bathroom_occupied + to: 'on' + +condition: + - condition: state + entity_id: input_boolean.master_bathroom_occupied + state: 'off' + +action: + - service: input_boolean.turn_on + entity_id: input_boolean.master_bathroom_occupied diff --git a/automations/rooms/master_bedroom/continue_white_noise.yaml b/automations/rooms/master_bedroom/continue_white_noise.yaml new file mode 100644 index 0000000..6e97ba8 --- /dev/null +++ b/automations/rooms/master_bedroom/continue_white_noise.yaml @@ -0,0 +1,35 @@ +alias: Continue White Noise +id: automation_continue_white_noise +initial_state: "on" +trigger: + - platform: state + entity_id: media_player.master_bedroom_clock + to: "off" + for: "00:00:02" + - platform: state + entity_id: media_player.master_bedroom_clock + to: "idle" + for: "00:00:02" +condition: + - condition: state + entity_id: input_boolean.master_bedroom_asleep + state: 'on' + +action: + #- service: input_select.select_option + # data: + # entity_id: input_select.master_bedroom_mode + # option: 'Off' + - service: input_select.select_option + data: + entity_id: input_select.google_home + option: 'Master Bedroom' + - service: input_select.select_option + data: + entity_id: input_select.ambient_sound + option: 'Thunderstorm' + - service: input_number.set_value + data: + entity_id: input_number.volume_ambientsounds + value: '0.3' + - service: script.ambientsounds diff --git a/automations/rooms/master_bedroom/master_bedroom_asleep.yaml b/automations/rooms/master_bedroom/master_bedroom_asleep.yaml new file mode 100644 index 0000000..3f4d7d2 --- /dev/null +++ b/automations/rooms/master_bedroom/master_bedroom_asleep.yaml @@ -0,0 +1,55 @@ +alias: Master Bedroom Asleep +id: automation_master_bedroom_asleep +initial_state: 'off' + +trigger: + - platform: state + entity_id: sensor.pixel_7_charger_type + to: "wireless" + + - platform: state + entity_id: binary_sensor.master_bedroom_person_occupancy + to: 'on' + for: '00:00:30' + + - platform: state + entity_id: binary_sensor.master_bed_occupied + to: 'on' + for: '00:00:05' + +condition: + - alias: "Adult Home" + condition: or + conditions: + - condition: state + entity_id: input_boolean.clint_home + state: 'on' + - condition: state + entity_id: input_boolean.kristy_home + state: 'on' + + - alias: "After 10:00PM and before 4:00AM" + condition: time + after: '21:00:00' + before: '04:00:00' + + - alias: "Clint's phone charging or someone on master bed" + condition: or + conditions: + - condition: state + entity_id: sensor.pixel_7_charger_type + state: 'wireless' + - condition: state + entity_id: binary_sensor.master_bed_occupied + state: 'on' + + + - alias: "The room is currently awake" + condition: state + entity_id: input_boolean.master_bedroom_asleep + state: 'off' + +action: + - service: input_boolean.turn_on + entity_id: input_boolean.master_bedroom_asleep + diff --git a/automations/rooms/master_bedroom/master_bedroom_awake.yaml b/automations/rooms/master_bedroom/master_bedroom_awake.yaml new file mode 100644 index 0000000..72b23ec --- /dev/null +++ b/automations/rooms/master_bedroom/master_bedroom_awake.yaml @@ -0,0 +1,52 @@ +alias: Master Bedroom Awake +id: automation_master_bedroom_awake + +trigger: + - platform: state + entity_id: binary_sensor.master_bed_occupied + to: 'off' + for: '00:10:00' + +condition: + - alias: "Adult Home" + condition: or + conditions: + - condition: state + entity_id: input_boolean.clint_home + state: 'on' + - condition: state + entity_id: input_boolean.kristy_home + state: 'on' + + - alias: "Before 10:00PM and after 4:00AM" + condition: time + before: '21:00:00' + after: '04:00:00' + + - alias: "No one on master bed" + condition: state + entity_id: binary_sensor.master_bed_occupied + state: 'off' + + - alias: "The boolean is currently on" + condition: state + entity_id: input_boolean.master_bedroom_asleep + state: 'on' + +action: + - service: input_boolean.turn_off + entity_id: input_boolean.master_bedroom_asleep + + - choose: + - conditions: + - condition: not + conditions: + - condition: state + entity_id: input_select.master_bedroom_mode + state: 'Manual' + sequence: + - service: input_select.select_option + data: + option: Auto + target: + entity_id: input_select.master_bedroom_mode diff --git a/automations/rooms/master_bedroom/master_bedroom_dimmer_leds.yaml b/automations/rooms/master_bedroom/master_bedroom_dimmer_leds.yaml new file mode 100644 index 0000000..c645d2c --- /dev/null +++ b/automations/rooms/master_bedroom/master_bedroom_dimmer_leds.yaml @@ -0,0 +1,198 @@ +alias: Master Bedroom Dimmer LEDs +id: automation_master_bedroom_dimmer_leds +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent + +trigger: + - platform: state + entity_id: light.master_bedroom_hue + attribute: brightness + + - platform: state + entity_id: light.master_bedroom_hue + + - platform: homeassistant + event: start + +action: + - choose: + - conditions: + - alias: "Light off" + condition: state + entity_id: light.master_bedroom_hue + state: 'off' + sequence: + - service: zwave_js.set_config_parameter + data: + parameter: '19' + value: '3' + target: + device_id: 201b960a4203135c454f9acb3f035021 + - service: zwave_js.set_config_parameter + data: + parameter: '21' + value: '3' + target: + device_id: 201b960a4203135c454f9acb3f035021 + + - conditions: + - alias: "Light brightness below 78" + condition: numeric_state + entity_id: light.master_bedroom_hue + attribute: brightness + below: 78 + sequence: + - service: zwave_js.set_config_parameter + data: + parameter: '19' + value: '3' + target: + device_id: 201b960a4203135c454f9acb3f035021 + - service: zwave_js.set_config_parameter + data: + parameter: '21' + value: '3' + target: + device_id: 201b960a4203135c454f9acb3f035021 + + - conditions: + - alias: "Light brightness below 104" + condition: numeric_state + entity_id: light.master_bedroom_hue + attribute: brightness + below: 104 + sequence: + - service: zwave_js.set_config_parameter + data: + parameter: '19' + value: '4' + target: + device_id: 201b960a4203135c454f9acb3f035021 + - service: zwave_js.set_config_parameter + data: + parameter: '21' + value: '4' + target: + device_id: 201b960a4203135c454f9acb3f035021 + + - conditions: + - alias: "Light brightness below 130" + condition: numeric_state + entity_id: light.master_bedroom_hue + attribute: brightness + below: 130 + sequence: + - service: zwave_js.set_config_parameter + data: + parameter: '19' + value: '5' + target: + device_id: 201b960a4203135c454f9acb3f035021 + - service: zwave_js.set_config_parameter + data: + parameter: '21' + value: '5' + target: + device_id: 201b960a4203135c454f9acb3f035021 + + - conditions: + - alias: "Light brightness below 156" + condition: numeric_state + entity_id: light.master_bedroom_hue + attribute: brightness + below: 156 + sequence: + - service: zwave_js.set_config_parameter + data: + parameter: '19' + value: '6' + target: + device_id: 201b960a4203135c454f9acb3f035021 + - service: zwave_js.set_config_parameter + data: + parameter: '21' + value: '6' + target: + device_id: 201b960a4203135c454f9acb3f035021 + + - conditions: + - alias: "Light brightness below 182" + condition: numeric_state + entity_id: light.master_bedroom_hue + attribute: brightness + below: 182 + sequence: + - service: zwave_js.set_config_parameter + data: + parameter: '19' + value: '7' + target: + device_id: 201b960a4203135c454f9acb3f035021 + - service: zwave_js.set_config_parameter + data: + parameter: '21' + value: '7' + target: + device_id: 201b960a4203135c454f9acb3f035021 + + - conditions: + - alias: "Light brightness below 208" + condition: numeric_state + entity_id: light.master_bedroom_hue + attribute: brightness + below: 208 + sequence: + - service: zwave_js.set_config_parameter + data: + parameter: '19' + value: '8' + target: + device_id: 201b960a4203135c454f9acb3f035021 + - service: zwave_js.set_config_parameter + data: + parameter: '21' + value: '8' + target: + device_id: 201b960a4203135c454f9acb3f035021 + + - conditions: + - alias: "Light brightness below 234" + condition: numeric_state + entity_id: light.master_bedroom_hue + attribute: brightness + below: 234 + sequence: + - service: zwave_js.set_config_parameter + data: + parameter: '19' + value: '9' + target: + device_id: 201b960a4203135c454f9acb3f035021 + - service: zwave_js.set_config_parameter + data: + parameter: '21' + value: '9' + target: + device_id: 201b960a4203135c454f9acb3f035021 + + default: + - service: zwave_js.set_config_parameter + data: + parameter: '19' + value: '10' + target: + device_id: 201b960a4203135c454f9acb3f035021 + - service: zwave_js.set_config_parameter + data: + parameter: '21' + value: '10' + target: + device_id: 201b960a4203135c454f9acb3f035021 + + + - delay: + hours: 0 + minutes: 0 + seconds: 1 + milliseconds: 0 \ No newline at end of file diff --git a/automations/rooms/master_bedroom/master_bedroom_humidifier.yaml b/automations/rooms/master_bedroom/master_bedroom_humidifier.yaml new file mode 100644 index 0000000..f9b89a7 --- /dev/null +++ b/automations/rooms/master_bedroom/master_bedroom_humidifier.yaml @@ -0,0 +1,59 @@ +alias: Master Bedroom Humidifier +id: automation_master_bedroom_humidifier + +trigger: + - platform: numeric_state + id: low_humidity + entity_id: sensor.master_bedroom_multisensor_humidity + below: input_number.master_bedroom_humidifier_on + + - platform: numeric_state + id: high_humidity + entity_id: sensor.master_bedroom_multisensor_humidity + above: input_number.master_bedroom_humidifier_off + +action: + - choose: + - alias: "Humidity too high via trigger" + conditions: + - condition: trigger + id: high_humidity + sequence: + - service: fan.turn_off + target: + entity_id: fan.master_bedroom + + - alias: "Humidity too high via manual run" + conditions: + - condition: numeric_state + entity_id: sensor.master_bedroom_multisensor_humidity + above: input_number.master_bedroom_humidifier_off + sequence: + - service: fan.turn_off + target: + entity_id: fan.master_bedroom + + - alias: "Humidity too low via trigger" + conditions: + - condition: trigger + id: low_humidity + sequence: + + - service: fan.turn_on + data: + percentage: 33 + target: + entity_id: fan.master_bedroom + + - alias: "Humidity too low via manual run" + conditions: + - condition: numeric_state + entity_id: sensor.master_bedroom_multisensor_humidity + below: input_number.master_bedroom_humidifier_on + sequence: + + - service: fan.turn_on + data: + percentage: 33 + target: + entity_id: fan.master_bedroom diff --git a/automations/rooms/master_bedroom/master_bedroom_light_cycle.yaml b/automations/rooms/master_bedroom/master_bedroom_light_cycle.yaml new file mode 100644 index 0000000..4edd17d --- /dev/null +++ b/automations/rooms/master_bedroom/master_bedroom_light_cycle.yaml @@ -0,0 +1,209 @@ +alias: Master Bedroom Light Cycle +id: automation_master_bedroom_light_cycle +trigger: + - id: light_cycle_on + platform: state + entity_id: input_boolean.master_bedroom_light_cycle + from: 'off' + to: 'on' + + - id: setting_change + platform: state + entity_id: + - input_number.master_bedroom_light_cycle_transition + - input_select.master_bedroom_color_set + - input_boolean.master_bedroom_cycle_same + +condition: "{{ is_state('input_boolean.master_bedroom_light_cycle','on') }}" + +action: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.master_bedroom_light_cycle + state: 'on' + sequence: + + - repeat: + sequence: + - choose: + - conditions: # If all lights should be the same color and the projector is off, reference the Hue group for all the lights + - condition: state + entity_id: input_boolean.master_bedroom_cycle_same + state: 'on' + sequence: + - service: light.turn_on + target: + entity_id: light.master_bedroom_ceiling_hue + data: + brightness: '{{ states("input_number.master_bedroom_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.master_bedroom_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.master_bedroom_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + + - conditions: # If all lights should be different colors, start referencing the individual lights that don't obscure the TV + - condition: state + entity_id: input_boolean.master_bedroom_cycle_same + state: 'off' + sequence: + - service: light.turn_on + target: + entity_id: light.master_bedroom_1 + data: + brightness: '{{ states("input_number.master_bedroom_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.master_bedroom_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.master_bedroom_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + + - service: light.turn_on + target: + entity_id: light.master_bedroom_2 + data: + brightness: '{{ states("input_number.master_bedroom_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.master_bedroom_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.master_bedroom_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + + - service: light.turn_on + target: + entity_id: light.master_bedroom_3 + data: + brightness: '{{ states("input_number.master_bedroom_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.master_bedroom_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.master_bedroom_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + + - delay: + seconds: '{{ states("input_number.master_bedroom_light_cycle_transition") | int }}' + + until: + - condition: state + entity_id: input_boolean.master_bedroom_light_cycle + state: 'off' + + - service: automation.trigger + entity_id: automation.master_bedroom_lights_to_on diff --git a/automations/rooms/master_bedroom/master_bedroom_lights_to_off.yaml b/automations/rooms/master_bedroom/master_bedroom_lights_to_off.yaml new file mode 100644 index 0000000..e750f9b --- /dev/null +++ b/automations/rooms/master_bedroom/master_bedroom_lights_to_off.yaml @@ -0,0 +1,92 @@ +alias: Master Bedroom Lights to Off +id: automation_master_bedroom_lights_to_off +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent + +trigger: + - platform: state + entity_id: input_select.master_bedroom_mode + + - platform: state + entity_id: input_boolean.master_bedroom_occupied + to: 'off' + + - platform: state + id: light_level + entity_id: binary_sensor.entryway_naturally_lit + from: 'off' + to: 'on' + + #- platform: time_pattern + # minutes: "/5" + +condition: + - condition: state + entity_id: light.master_bedroom_hue + state: 'on' + + + - alias: "Master Bedroom light cycle not on" + condition: state + entity_id: input_boolean.master_bedroom_light_cycle + state: "off" + + - condition: or + conditions: + - condition: state + entity_id: light.master_bedroom_1 + state: 'on' + - condition: state + entity_id: light.master_bedroom_2 + state: 'on' + - condition: state + entity_id: light.master_bedroom_3 + state: 'on' + - condition: or + conditions: + - condition: state + entity_id: input_select.master_bedroom_mode + state: 'Off' + - condition: state + entity_id: input_boolean.master_bedroom_occupied + state: 'off' + - condition: state + entity_id: input_select.master_bedroom_mode + state: 'Nightlight' + +action: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.lighting_automations + state: 'on' + - condition: or + conditions: + - condition: state + entity_id: input_select.master_bedroom_mode + state: 'Off' + - condition: state + entity_id: input_boolean.master_bedroom_occupied + state: 'off' + - condition: not + conditions: + - condition: state + entity_id: input_select.master_bedroom_mode + state: 'Manual' + sequence: + - service: scene.turn_on + data: + transition: 5 + target: + entity_id: scene.master_bedroom_hue_off + default: + - service: light.turn_off + target: + entity_id: + - light.master_bedroom_1 + - light.master_bedroom_2 + - light.master_bedroom_3 + - light.accent + - light.master_bedroom_accent + diff --git a/automations/rooms/master_bedroom/master_bedroom_lights_to_on.yaml b/automations/rooms/master_bedroom/master_bedroom_lights_to_on.yaml new file mode 100644 index 0000000..d2068b5 --- /dev/null +++ b/automations/rooms/master_bedroom/master_bedroom_lights_to_on.yaml @@ -0,0 +1,197 @@ +alias: Master Bedroom Lights to On +id: automation_master_bedroom_lights_to_on +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent + +trigger: + - platform: state + id: mode_change + entity_id: + - input_select.master_bedroom_mode + - input_select.automatic_light_profile + + - platform: state + id: light_level + entity_id: binary_sensor.master_bedroom_naturally_lit + from: 'on' + to: 'off' + + - platform: state + entity_id: input_boolean.master_bedroom_occupied + to: "on" + + - platform: state + id: occupied + entity_id: binary_sensor.master_bedroom_occupied + to: "on" + + # - platform: state + # id: motion + # entity_id: group.master_bedroom_motion + # to: "on" + +condition: + - alias: "Home is occupied" + condition: state + entity_id: input_boolean.home_occupied + state: "on" + + - alias: "Master Bedroom light cycle not on" + condition: state + entity_id: input_boolean.front_room_light_cycle + state: "off" + + - alias: "Check if light should turn on" + condition: or + conditions: + + - alias: "Guest mode is on" + condition: state + entity_id: input_boolean.guest_mode + state: "on" + + - alias: "Motion or occupancy were detected in a dim room" + condition: and + conditions: + - alias: "Light level below trigger amount" + condition: state + entity_id: binary_sensor.master_bedroom_naturally_lit + state: 'off' + + - alias: "Motion or occupancy were detected" + condition: or + conditions: + - alias: "Motion was detected" + condition: trigger + id: "motion" + - alias: "Occupancy was detected" + condition: trigger + id: "occupied" + - alias: "A scene changed and the lights are already on" + condition: and + conditions: + - condition: trigger + id: "mode_change" + - condition: state + entity_id: input_boolean.master_bedroom_occupied + state: "on" + +variables: + switch_name: light.master_bedroom_dimmer_light + light_name: master_bedroom_hue + mode_name: input_select.master_bedroom_mode + automatic_profile: input_select.automatic_light_profile + +action: + - alias: "Make sure Z-Wave switch is turned on" + service: homeassistant.turn_on + target: + entity_id: "{{ switch_name }}" + - choose: + - alias: "If the room is set to manual, just turn the lights on" + conditions: + - alias: "Room set to manual" + condition: state + entity_id: input_select.master_bedroom_mode + state: Manual + sequence: + - service: light.turn_on + target: + entity_id: light.master_bedroom_hue + + - alias: "If the room is set to auto, the lights are on, and the automatic profile is set to Nightlight, change to the Automatic Light Profile scene with a short transition" + conditions: + - alias: "Room set to auto" + condition: state + entity_id: input_select.master_bedroom_mode + state: Auto + - alias: "Lights are on" + condition: state + entity_id: light.master_bedroom_hue + state: 'on' + - alias: "Automatic light profile set to Nightlight" + condition: state + entity_id: input_select.automatic_light_profile + state: Nightlight + sequence: + - service: scene.turn_on + data: + transition: 10 + target: + entity_id: "scene.{{light_name}}_{{states(automatic_profile).lower().replace(' ','_')}}" + + - alias: "If the room is set to auto and the lights are on, change to the Automatic Light Profile scene with a transition" + conditions: + - alias: "Room set to auto" + condition: state + entity_id: input_select.master_bedroom_mode + state: Auto + - alias: "Lights are on" + condition: state + entity_id: light.master_bedroom_hue + state: 'on' + sequence: + - service: scene.turn_on + data: + transition: "{{ states('input_number.light_scene_transition') }}" + target: + entity_id: "scene.{{light_name}}_{{states(automatic_profile).lower().replace(' ','_')}}" + + - alias: "If the room is set to auto and the lights are off, change to the Automatic Light Profile scene without a transition" + conditions: + - alias: "Room set to auto" + condition: state + entity_id: input_select.master_bedroom_mode + state: Auto + - alias: "Lights are off" + condition: state + entity_id: light.master_bedroom_hue + state: 'off' + sequence: + - service: scene.turn_on + target: + entity_id: "scene.{{light_name}}_{{states(automatic_profile).lower().replace(' ','_')}}" + + - alias: "If the room is not set to auto, the lights are on, and the room is set to Nightlight change to the Master Bedroom Mode scene with a short transition" + conditions: + - alias: "Room not manual or auto and lights are on" + condition: state + entity_id: light.master_bedroom_hue + state: 'on' + - alias: "Room set to Nightlight" + condition: state + entity_id: input_select.master_bedroom_mode + state: Nightlight + sequence: + - service: scene.turn_on + data: + transition: 10 + target: + entity_id: "scene.{{light_name}}_{{states(mode_name).lower().replace(' ','_')}}" + + - alias: "If the room is not set to auto and the lights are on, change to the Master Bedroom Mode scene with a transition" + conditions: + - alias: "Room not manual or auto and lights are on" + condition: state + entity_id: light.master_bedroom_hue + state: 'on' + sequence: + - service: scene.turn_on + data: + transition: "{{ states('input_number.light_scene_transition') }}" + target: + entity_id: "scene.{{light_name}}_{{states(mode_name).lower().replace(' ','_')}}" + + - alias: "If the room is not set to auto and the lights are on, change to the Master Bedroom Mode scene without a transition" + conditions: + - alias: "Room not manual or auto and lights are off" + condition: state + entity_id: light.master_bedroom_hue + state: 'off' + sequence: + - service: scene.turn_on + target: + entity_id: "scene.{{light_name}}_{{states(mode_name).lower().replace(' ','_')}}" + + - delay: 1 \ No newline at end of file diff --git a/automations/rooms/master_bedroom/master_bedroom_not_occupied.yaml b/automations/rooms/master_bedroom/master_bedroom_not_occupied.yaml new file mode 100644 index 0000000..baca44a --- /dev/null +++ b/automations/rooms/master_bedroom/master_bedroom_not_occupied.yaml @@ -0,0 +1,70 @@ +alias: 'Master Bedroom Not Occupied' +id: automation_master_bedroom_not_occupied +mode: restart +trigger: + - platform: state + entity_id: input_boolean.home_occupied + from: 'on' + to: 'off' + + - platform: state + entity_id: + - input_boolean.home_occupied + - binary_sensor.master_bedroom_occupied + to: 'off' + for: '00:05:00' + + # - platform: time_pattern + # minutes: "/5" + +condition: + + - condition: state + entity_id: input_boolean.lights_off_manually + state: 'off' + - condition: state + entity_id: + - binary_sensor.master_bed_occupied + state: + - 'off' + - 'unavailable' + + - condition: state + entity_id: input_boolean.master_bedroom_occupied + state: 'on' + + - condition: or + conditions: + - condition: state + entity_id: input_boolean.home_occupied + state: 'off' + - condition: or + conditions: + - condition: state + entity_id: binary_sensor.master_bedroom_person_occupancy + state: 'off' + for: + minutes: 5 + - condition: state + entity_id: binary_sensor.master_bedroom_occupied + state: 'off' + for: + minutes: 5 +action: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.home_occupied + state: 'off' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.master_bedroom_occupied + - conditions: + - condition: not + conditions: + - condition: state + entity_id: input_select.house + state: 'Manual' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.master_bedroom_occupied \ No newline at end of file diff --git a/automations/rooms/master_bedroom/master_bedroom_occupied.yaml b/automations/rooms/master_bedroom/master_bedroom_occupied.yaml new file mode 100644 index 0000000..87b8014 --- /dev/null +++ b/automations/rooms/master_bedroom/master_bedroom_occupied.yaml @@ -0,0 +1,18 @@ +alias: 'Master Bedroom Occupied' +id: automation_master_bedroom_occupied +mode: restart + +trigger: + - platform: state + entity_id: + - binary_sensor.master_bedroom_occupied + to: 'on' + +condition: + - condition: state + entity_id: input_boolean.master_bedroom_occupied + state: 'off' + +action: + - service: input_boolean.turn_on + entity_id: input_boolean.master_bedroom_occupied diff --git a/automations/rooms/master_bedroom/master_bedroom_status.yaml b/automations/rooms/master_bedroom/master_bedroom_status.yaml new file mode 100644 index 0000000..cd5dc75 --- /dev/null +++ b/automations/rooms/master_bedroom/master_bedroom_status.yaml @@ -0,0 +1,161 @@ +alias: Master Bedroom Status +id: automation_master_bedroom_status + +trigger: + - id: master_bed_not_occupied + platform: state + entity_id: binary_sensor.master_bed_occupied + to: 'off' + for: '00:10:00' + + - id: phone_charging + platform: state + entity_id: sensor.pixel_7_charger_type + to: "wireless" + + - id: master_bed_person_occupancy + platform: state + entity_id: binary_sensor.master_bedroom_person_occupancy + to: 'on' + for: '00:00:30' + + - id: master_bed_occupied + platform: state + entity_id: binary_sensor.master_bed_occupied + to: 'on' + for: '00:00:05' + +condition: + - alias: Okay to turn off or on + condition: or + conditions: + - alias: "Is the room awake?" + condition: and + conditions: + - alias: "The room is currently asleep" + condition: state + entity_id: input_boolean.master_bedroom_asleep + state: 'on' + + - alias: "An adult is home" + condition: or + conditions: + - condition: state + entity_id: input_boolean.clint_home + state: 'on' + - condition: state + entity_id: input_boolean.kristy_home + state: 'on' + + - alias: "It is before 10:00PM and after 4:00AM" + condition: time + before: '22:00:00' + after: '04:00:00' + + - alias: "No one on master bed" + condition: state + entity_id: binary_sensor.master_bed_occupied + state: 'off' + + - alias: "Is the room asleep?" + condition: and + conditions: + - alias: "The room is currently awake" + condition: state + entity_id: input_boolean.master_bedroom_asleep + state: 'off' + + - alias: "Adult Home" + condition: or + conditions: + - condition: state + entity_id: input_boolean.clint_home + state: 'on' + - condition: state + entity_id: input_boolean.kristy_home + state: 'on' + + - alias: "After 10:00PM and before 4:00AM" + condition: time + after: '22:00:00' + before: '04:00:00' + + - alias: "Someone on master bed" + condition: state + entity_id: binary_sensor.master_bed_occupied + state: 'on' + +action: + - choose: + - conditions: + - alias: "The room is currently asleep" + condition: state + entity_id: input_boolean.master_bedroom_asleep + state: 'on' + + - alias: "An adult is home" + condition: or + conditions: + - condition: state + entity_id: input_boolean.clint_home + state: 'on' + - condition: state + entity_id: input_boolean.kristy_home + state: 'on' + + - alias: "It is before 10:00PM and after 4:00AM" + condition: time + before: '22:00:00' + after: '04:00:00' + + - alias: "No one on master bed" + condition: state + entity_id: binary_sensor.master_bed_occupied + state: 'off' + sequence: + - service: input_boolean.turn_off + entity_id: input_boolean.master_bedroom_asleep + + - conditions: + - alias: "The room is currently awake" + condition: state + entity_id: input_boolean.master_bedroom_asleep + state: 'off' + + - alias: "Adult Home" + condition: or + conditions: + - condition: state + entity_id: input_boolean.clint_home + state: 'on' + - condition: state + entity_id: input_boolean.kristy_home + state: 'on' + + - alias: "After 10:00PM and before 4:00AM" + condition: time + after: '22:00:00' + before: '04:00:00' + + - alias: "Someone on master bed" + condition: state + entity_id: binary_sensor.master_bed_occupied + state: 'on' + sequence: + - choose: + - conditions: + - condition: not + conditions: + - condition: state + entity_id: input_select.master_bedroom_mode + state: 'Manual' + sequence: + - service: input_select.select_option + data: + option: Auto + target: + entity_id: input_select.master_bedroom_mode + + # From Master Bedroom Asleep + - service: input_boolean.turn_on + entity_id: input_boolean.master_bedroom_asleep diff --git a/automations/rooms/master_bedroom/master_bedroom_white_noise_off.yaml b/automations/rooms/master_bedroom/master_bedroom_white_noise_off.yaml new file mode 100644 index 0000000..74d404b --- /dev/null +++ b/automations/rooms/master_bedroom/master_bedroom_white_noise_off.yaml @@ -0,0 +1,12 @@ +alias: Master Bedroom White Noise Off +id: automation_master_bedroom_white_noise_off + +trigger: + - platform: state + entity_id: input_boolean.master_bedroom_asleep + to: "off" + +action: + - service: media_player.turn_off + entity_id: media_player.master_bedroom_clock + diff --git a/automations/rooms/master_bedroom/master_bedroom_white_noise_on.yaml b/automations/rooms/master_bedroom/master_bedroom_white_noise_on.yaml new file mode 100644 index 0000000..f6b0216 --- /dev/null +++ b/automations/rooms/master_bedroom/master_bedroom_white_noise_on.yaml @@ -0,0 +1,75 @@ +alias: Master Bedroom White Noise On +id: automation_master_bedroom_white_noise_on + +trigger: + - platform: state + entity_id: input_boolean.master_bedroom_asleep + to: "on" + +action: + #- service: input_select.select_option + # data: + # entity_id: input_select.master_bedroom_mode + # option: 'Off' + - service: media_player.volume_set + data: + volume_level: 0.3 + target: + entity_id: media_player.master_bedroom_clock + + - choose: + - conditions: + condition: state + entity_id: input_boolean.kristy_home + state: 'on' + sequence: + - service: media_player.play_media + target: + entity_id: media_player.master_bedroom_clock + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12740 + media_content_type: audio/mpeg + metadata: + title: Thunderstorm + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12740.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16648 + default: + - service: media_player.play_media + target: + entity_id: media_player.master_bedroom_clock + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12740 + media_content_type: audio/mpeg + metadata: + title: Thunderstorm + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12740.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16648 + diff --git a/automations/rooms/master_bedroom/random_master_bed_strip.yaml b/automations/rooms/master_bedroom/random_master_bed_strip.yaml new file mode 100644 index 0000000..dc4fc4a --- /dev/null +++ b/automations/rooms/master_bedroom/random_master_bed_strip.yaml @@ -0,0 +1,29 @@ +alias: Random Master Bed Strip +id: automation_random_master_bed_strip +trigger: + - platform: template + value_template: "{{ is_state('light.master_bedroom_hue', 'on') and is_state('input_select.master_bedroom_mode', 'Nightlight') }}" + id: 'master_bedroom_nightlight' + - platform: template + value_template: "{{ is_state('light.master_bedroom_hue', 'on') and is_state('input_select.master_bedroom_mode', 'Auto') and is_state('input_select.automatic_light_profile', 'Nightlight') }}" + id: 'automatic_light_profile_nightlight' +action: + - choose: + - conditions: + - condition: or + conditions: + - condition: trigger + id: master_bedroom_nightlight + - condition: trigger + id: automatic_light_profile_nightlight + sequence: + - service: light.turn_on + target: + entity_id: light.master_bedroom_accent + data: + effect: candle + brightness_pct: 50 + default: + - service: light.turn_off + target: + entity_id: light.master_bedroom_accent diff --git a/automations/rooms/nursery/continue_nursery_white_noise.yaml b/automations/rooms/nursery/continue_nursery_white_noise.yaml new file mode 100644 index 0000000..959cf12 --- /dev/null +++ b/automations/rooms/nursery/continue_nursery_white_noise.yaml @@ -0,0 +1,35 @@ +alias: Continue Nursery White Noise +id: automation_continue_nursery_white_noise + +trigger: + - platform: state + entity_id: media_player.nursery_hub + to: "off" + for: "00:00:02" + - platform: state + entity_id: media_player.nursery_hub + to: "idle" + for: "00:00:02" +condition: + - condition: state + entity_id: input_boolean.nursery_asleep + state: 'on' + +action: + #- service: input_select.select_option + # data: + # entity_id: input_select.master_bedroom_mode + # option: 'Off' + - service: input_select.select_option + data: + entity_id: input_select.google_home + option: 'Nursery' + - service: input_select.select_option + data: + entity_id: input_select.ambient_sound + option: 'Thunderstorm' + - service: input_number.set_value + data: + entity_id: input_number.volume_ambientsounds + value: '0.6' + - service: script.ambientsounds diff --git a/automations/rooms/nursery/nursery_awake_button.yaml b/automations/rooms/nursery/nursery_awake_button.yaml new file mode 100644 index 0000000..1b2fe91 --- /dev/null +++ b/automations/rooms/nursery/nursery_awake_button.yaml @@ -0,0 +1,32 @@ +alias: Nursery Awake Button +id: automation_nursery_awake_button + +trigger: + - platform: state + entity_id: input_button.nursery_awake + +condition: [] + +action: + - service: input_select.select_option + data: + option: Auto + target: + entity_id: input_select.nursery_mode + + - service: input_select.select_option + data: + option: 'Off' + target: + entity_id: input_select.nursery_wled + + - service: switch.turn_off + target: + entity_id: + - switch.black_bed_force_occupancy + - switch.white_bed_force_occupancy + + - service: input_boolean.turn_off + data: {} + target: + entity_id: input_boolean.nursery_asleep \ No newline at end of file diff --git a/automations/rooms/nursery/nursery_bedtime_button.yaml b/automations/rooms/nursery/nursery_bedtime_button.yaml new file mode 100644 index 0000000..a1a493b --- /dev/null +++ b/automations/rooms/nursery/nursery_bedtime_button.yaml @@ -0,0 +1,45 @@ +alias: Nursery Bedtime Button +id: automation_nursery_bedtime_button + +trigger: + - platform: state + entity_id: input_button.nursery_bedtime + +condition: [] + +action: + - service: input_select.select_option + data: + option: Nightlight + target: + entity_id: input_select.nursery_mode + + - service: input_select.select_option + data: + option: Running Rainbow + target: + entity_id: input_select.nursery_wled + + - service: automation.trigger + target: + entity_id: automation.nursery_wled_changed + + #- condition: + - alias: "Do not restart the music if it is already playing" + condition: not + conditions: + condition: and + conditions: + - condition: state + entity_id: media_player.ytube_music_player + state: "playing" + - condition: state + entity_id: media_player.ytube_music_player + attribute: remote_player_id + state: "media_player.nursery_hub" + - condition: state + entity_id: media_player.ytube_music_player + attribute: current_playlist_title + state: "Kid's Goodnight Songs" + + - service: script.goodnight_kids_youtube_music \ No newline at end of file diff --git a/automations/rooms/nursery/nursery_dimmer_leds.yaml b/automations/rooms/nursery/nursery_dimmer_leds.yaml new file mode 100644 index 0000000..710ac3e --- /dev/null +++ b/automations/rooms/nursery/nursery_dimmer_leds.yaml @@ -0,0 +1,202 @@ +alias: Nursery Dimmer LEDs +id: automation_nursery_dimmer_leds +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent + +trigger: + - platform: state + entity_id: light.nursery_hue + attribute: brightness + + - platform: state + entity_id: light.nursery_hue + + - platform: homeassistant + event: start + +# condition: +# - "{{ is_state('sensor.nursery_dimmer_node_status','alive') }}" + +action: + - choose: + - conditions: + - alias: "Light off" + condition: state + entity_id: light.nursery_hue + state: 'off' + sequence: + - service: zwave_js.set_config_parameter + data: + parameter: '19' + value: '3' + target: + device_id: 89e0dee60d7bdf2aeb22b3438914aba4 + - service: zwave_js.set_config_parameter + data: + parameter: '21' + value: '3' + target: + device_id: 89e0dee60d7bdf2aeb22b3438914aba4 + + - conditions: + - alias: "Light brightness below 78" + condition: numeric_state + entity_id: light.nursery_hue + attribute: brightness + below: 78 + sequence: + - service: zwave_js.set_config_parameter + data: + parameter: '19' + value: '3' + target: + device_id: 89e0dee60d7bdf2aeb22b3438914aba4 + - service: zwave_js.set_config_parameter + data: + parameter: '21' + value: '3' + target: + device_id: 89e0dee60d7bdf2aeb22b3438914aba4 + + - conditions: + - alias: "Light brightness below 104" + condition: numeric_state + entity_id: light.nursery_hue + attribute: brightness + below: 104 + sequence: + - service: zwave_js.set_config_parameter + data: + parameter: '19' + value: '4' + target: + device_id: 89e0dee60d7bdf2aeb22b3438914aba4 + - service: zwave_js.set_config_parameter + data: + parameter: '21' + value: '4' + target: + device_id: 89e0dee60d7bdf2aeb22b3438914aba4 + + - conditions: + - alias: "Light brightness below 130" + condition: numeric_state + entity_id: light.nursery_hue + attribute: brightness + below: 130 + sequence: + - service: zwave_js.set_config_parameter + data: + parameter: '19' + value: '5' + target: + device_id: 89e0dee60d7bdf2aeb22b3438914aba4 + - service: zwave_js.set_config_parameter + data: + parameter: '21' + value: '5' + target: + device_id: 89e0dee60d7bdf2aeb22b3438914aba4 + + - conditions: + - alias: "Light brightness below 156" + condition: numeric_state + entity_id: light.nursery_hue + attribute: brightness + below: 156 + sequence: + - service: zwave_js.set_config_parameter + data: + parameter: '19' + value: '6' + target: + device_id: 89e0dee60d7bdf2aeb22b3438914aba4 + - service: zwave_js.set_config_parameter + data: + parameter: '21' + value: '6' + target: + device_id: 89e0dee60d7bdf2aeb22b3438914aba4 + + - conditions: + - alias: "Light brightness below 182" + condition: numeric_state + entity_id: light.nursery_hue + attribute: brightness + below: 182 + sequence: + - service: zwave_js.set_config_parameter + data: + parameter: '19' + value: '7' + target: + device_id: 89e0dee60d7bdf2aeb22b3438914aba4 + - service: zwave_js.set_config_parameter + data: + parameter: '21' + value: '7' + target: + device_id: 89e0dee60d7bdf2aeb22b3438914aba4 + + - conditions: + - alias: "Light brightness below 208" + condition: numeric_state + entity_id: light.nursery_hue + attribute: brightness + below: 208 + sequence: + - service: zwave_js.set_config_parameter + data: + parameter: '19' + value: '8' + target: + device_id: 89e0dee60d7bdf2aeb22b3438914aba4 + - service: zwave_js.set_config_parameter + data: + parameter: '21' + value: '8' + target: + device_id: 89e0dee60d7bdf2aeb22b3438914aba4 + + - conditions: + - alias: "Light brightness below 234" + condition: numeric_state + entity_id: light.nursery_hue + attribute: brightness + below: 234 + sequence: + - service: zwave_js.set_config_parameter + data: + parameter: '19' + value: '9' + target: + device_id: 89e0dee60d7bdf2aeb22b3438914aba4 + - service: zwave_js.set_config_parameter + data: + parameter: '21' + value: '9' + target: + device_id: 89e0dee60d7bdf2aeb22b3438914aba4 + + + default: + - service: zwave_js.set_config_parameter + data: + parameter: '19' + value: '10' + target: + device_id: 89e0dee60d7bdf2aeb22b3438914aba4 + - service: zwave_js.set_config_parameter + data: + parameter: '21' + value: '10' + target: + device_id: 89e0dee60d7bdf2aeb22b3438914aba4 + + + - delay: + hours: 0 + minutes: 0 + seconds: 1 + milliseconds: 0 \ No newline at end of file diff --git a/automations/rooms/nursery/nursery_into_bed.yaml b/automations/rooms/nursery/nursery_into_bed.yaml new file mode 100644 index 0000000..cc808bc --- /dev/null +++ b/automations/rooms/nursery/nursery_into_bed.yaml @@ -0,0 +1,49 @@ +alias: Nursery Into Bed +id: automation_nursery_into_bed + +trigger: + - platform: state + entity_id: binary_sensor.black_bed_occupied + to: 'on' + for: '00:00:30' + - platform: state + entity_id: binary_sensor.white_bed_occupied + to: 'on' + for: '00:00:30' + +condition: + - condition: or + conditions: + - condition: state + entity_id: input_boolean.home_occupied + state: 'on' + - condition: state + entity_id: input_boolean.guest_mode + state: 'on' + - condition: or + conditions: + - condition: state + entity_id: input_boolean.emmett_home + state: 'on' + - condition: state + entity_id: input_boolean.bridget_home + state: 'on' + - condition: state + entity_id: input_boolean.ebin_home + state: 'on' + - condition: state + entity_id: input_boolean.nursery_light_cycle + state: 'off' + - condition: state + entity_id: input_select.nursery_mode + state: 'Nightlight' + - condition: state + entity_id: light.nursery_hue + state: 'on' + +action: + - service: light.turn_on + data: + entity_id: + - light.black_bed_wled + - light.white_bed_wled diff --git a/automations/rooms/nursery/nursery_light_cycle.yaml b/automations/rooms/nursery/nursery_light_cycle.yaml new file mode 100644 index 0000000..8a93370 --- /dev/null +++ b/automations/rooms/nursery/nursery_light_cycle.yaml @@ -0,0 +1,169 @@ +alias: Nursery Light Cycle +id: automation_nursery_light_cycle +trigger: + - id: light_cycle_on + platform: state + entity_id: input_boolean.nursery_light_cycle + from: 'off' + to: 'on' + + - id: setting_change + platform: state + entity_id: + - input_number.nursery_light_cycle_transition + - input_select.nursery_color_set + - input_boolean.nursery_cycle_same + +condition: "{{ is_state('input_boolean.nursery_light_cycle','on') }}" + +action: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.nursery_light_cycle + state: 'on' + sequence: + + - repeat: + sequence: + - choose: + - conditions: # If all lights should be the same color and the projector is off, reference the Hue group for all the lights + - condition: state + entity_id: input_boolean.nursery_cycle_same + state: 'on' + sequence: + - service: light.turn_on + target: + entity_id: light.nursery_ceiling_hue + data: + brightness: '{{ states("input_number.nursery_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.nursery_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.nursery_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.nursery_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.nursery_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.nursery_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.nursery_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.nursery_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.nursery_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.nursery_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.nursery_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.nursery_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.nursery_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.nursery_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.nursery_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.nursery_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.nursery_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + + - conditions: # If all lights should be different colors, start referencing the individual lights that don't obscure the TV + - condition: state + entity_id: input_boolean.nursery_cycle_same + state: 'off' + sequence: + - service: light.turn_on + target: + entity_id: light.nursery_color_1 + data: + brightness: '{{ states("input_number.nursery_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.nursery_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.nursery_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.nursery_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.nursery_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.nursery_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.nursery_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.nursery_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.nursery_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.nursery_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.nursery_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.nursery_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.nursery_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.nursery_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.nursery_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.nursery_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.nursery_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + + - service: light.turn_on + target: + entity_id: light.nursery_color_2 + data: + brightness: '{{ states("input_number.nursery_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.nursery_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.nursery_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.nursery_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.nursery_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.nursery_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.nursery_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.nursery_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.nursery_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.nursery_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.nursery_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.nursery_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.nursery_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.nursery_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.nursery_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.nursery_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.nursery_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + + - delay: + seconds: '{{ states("input_number.nursery_light_cycle_transition") | int }}' + + until: + - condition: state + entity_id: input_boolean.nursery_light_cycle + state: 'off' + + - service: automation.trigger + entity_id: automation.nursery_lights_to_on diff --git a/automations/rooms/nursery/nursery_lights_to_off.yaml b/automations/rooms/nursery/nursery_lights_to_off.yaml new file mode 100644 index 0000000..3f9f92b --- /dev/null +++ b/automations/rooms/nursery/nursery_lights_to_off.yaml @@ -0,0 +1,75 @@ +alias: Nursery Lights to Off +id: automation_nursery_lights_to_off +mode: restart + +trigger: + - platform: state + entity_id: input_select.nursery_mode + + - platform: state + entity_id: input_boolean.nursery_occupied + to: 'off' + + - platform: state + id: light_level + entity_id: binary_sensor.nursery_naturally_lit + from: 'off' + to: 'on' + + #- platform: time_pattern + # minutes: "/5" + +condition: + - condition: state + entity_id: light.nursery_hue + state: 'on' + + - alias: "Nursery light cycle not on" + condition: state + entity_id: input_boolean.nursery_light_cycle + state: "off" + + - condition: or + conditions: + - condition: state + entity_id: input_select.nursery_mode + state: 'Off' + - condition: state + entity_id: input_boolean.nursery_occupied + state: 'off' + +action: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.lighting_automations + state: 'on' + - condition: or + conditions: + - condition: state + entity_id: input_select.nursery_mode + state: 'Off' + - condition: state + entity_id: input_boolean.nursery_occupied + state: 'off' + - condition: not + conditions: + - condition: state + entity_id: input_select.nursery_mode + state: 'Manual' + sequence: + - service: scene.turn_on + data: + transition: 5 + target: + entity_id: scene.nursery_hue_off + - choose: + - conditions: + - condition: state + entity_id: input_boolean.guest_mode + state: 'on' + sequence: + - alias: "Turn off z-wave switch since all lights are off" + service: homeassistant.turn_off + target: + entity_id: light.nursery_color_1, light.nursery_color_2 diff --git a/automations/rooms/nursery/nursery_lights_to_on.yaml b/automations/rooms/nursery/nursery_lights_to_on.yaml new file mode 100644 index 0000000..efca27d --- /dev/null +++ b/automations/rooms/nursery/nursery_lights_to_on.yaml @@ -0,0 +1,196 @@ +alias: Nursery Lights to On +id: automation_nursery_lights_to_on +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent + +trigger: + - platform: state + id: mode_change + entity_id: + - input_select.nursery_mode + - input_select.automatic_light_profile + + - platform: state + id: light_level + entity_id: binary_sensor.nursery_naturally_lit + from: 'on' + to: 'off' + + - platform: state + entity_id: input_boolean.nursery_occupied + to: "on" + + - platform: state + id: occupied + entity_id: binary_sensor.nursery_occupied + to: "on" + + # - platform: state + # id: motion + # entity_id: group.nursery_motion + # to: "on" + +condition: + - alias: "Home is occupied" + condition: state + entity_id: input_boolean.home_occupied + state: "on" + + - alias: "Nursery light cycle not on" + condition: state + entity_id: input_boolean.nursery_light_cycle + state: "off" + + - alias: "Check if light should turn on" + condition: or + conditions: + + - alias: "Guest mode is on" + condition: state + entity_id: input_boolean.guest_mode + state: "on" + + - alias: "Motion or occupancy were detected in a dim room" + condition: and + conditions: + - alias: "Light level below trigger amount" + condition: state + entity_id: binary_sensor.nursery_naturally_lit + state: 'off' + + - alias: "Motion or occupancy were detected" + condition: or + conditions: + - alias: "Motion was detected" + condition: trigger + id: "motion" + - alias: "Occupancy was detected" + condition: trigger + id: "occupied" + - alias: "A scene changed and the lights are already on" + condition: and + conditions: + - condition: trigger + id: "mode_change" + - condition: state + entity_id: input_boolean.nursery_occupied + state: "on" + +variables: + switch_name: light.nursery_dimmer_light + light_name: nursery_hue + mode_name: input_select.nursery_mode + automatic_profile: input_select.automatic_light_profile +action: + - alias: "Make sure Z-Wave switch is turned on" + service: homeassistant.turn_on + target: + entity_id: "{{ switch_name }}" + - choose: + - alias: "If the room is set to manual, just turn the lights on" + conditions: + - alias: "Room set to manual" + condition: state + entity_id: input_select.nursery_mode + state: Manual + sequence: + - service: light.turn_on + target: + entity_id: light.nursery_hue + + - alias: "If the room is set to auto, the lights are on, and the automatic profile is set to Nightlight, change to the Automatic Light Profile scene with a short transition" + conditions: + - alias: "Room set to auto" + condition: state + entity_id: input_select.nursery_mode + state: Auto + - alias: "Lights are on" + condition: state + entity_id: light.nursery_hue + state: 'on' + - alias: "Automatic light profile set to Nightlight" + condition: state + entity_id: input_select.automatic_light_profile + state: Nightlight + sequence: + - service: scene.turn_on + data: + transition: 10 + target: + entity_id: "scene.{{light_name}}_{{states(automatic_profile).lower().replace(' ','_')}}" + + - alias: "If the room is set to auto and the lights are on, change to the Automatic Light Profile scene with a transition" + conditions: + - alias: "Room set to auto" + condition: state + entity_id: input_select.nursery_mode + state: Auto + - alias: "Lights are on" + condition: state + entity_id: light.nursery_hue + state: 'on' + sequence: + - service: scene.turn_on + data: + transition: "{{ states('input_number.light_scene_transition') }}" + target: + entity_id: "scene.{{light_name}}_{{states(automatic_profile).lower().replace(' ','_')}}" + + - alias: "If the room is set to auto and the lights are off, change to the Automatic Light Profile scene without a transition" + conditions: + - alias: "Room set to auto" + condition: state + entity_id: input_select.nursery_mode + state: Auto + - alias: "Lights are off" + condition: state + entity_id: light.nursery_hue + state: 'off' + sequence: + - service: scene.turn_on + target: + entity_id: "scene.{{light_name}}_{{states(automatic_profile).lower().replace(' ','_')}}" + + - alias: "If the room is not set to auto, the lights are on, and the room is set to Nightlight change to the Nursery Mode scene with a short transition" + conditions: + - alias: "Room not manual or auto and lights are on" + condition: state + entity_id: light.nursery_hue + state: 'on' + - alias: "Room set to Nightlight" + condition: state + entity_id: input_select.nursery_mode + state: Nightlight + sequence: + - service: scene.turn_on + data: + transition: 10 + target: + entity_id: "scene.{{light_name}}_{{states(mode_name).lower().replace(' ','_')}}" + + - alias: "If the room is not set to auto and the lights are on, change to the Nursery Mode scene with a transition" + conditions: + - alias: "Room not manual or auto and lights are on" + condition: state + entity_id: light.nursery_hue + state: 'on' + sequence: + - service: scene.turn_on + data: + transition: "{{ states('input_number.light_scene_transition') }}" + target: + entity_id: "scene.{{light_name}}_{{states(mode_name).lower().replace(' ','_')}}" + + - alias: "If the room is not set to auto and the lights are on, change to the Nursery Mode scene without a transition" + conditions: + - alias: "Room not manual or auto and lights are off" + condition: state + entity_id: light.nursery_hue + state: 'off' + sequence: + - service: scene.turn_on + target: + entity_id: "scene.{{light_name}}_{{states(mode_name).lower().replace(' ','_')}}" + + - delay: 1 \ No newline at end of file diff --git a/automations/rooms/nursery/nursery_not_occupied.yaml b/automations/rooms/nursery/nursery_not_occupied.yaml new file mode 100644 index 0000000..4d508dc --- /dev/null +++ b/automations/rooms/nursery/nursery_not_occupied.yaml @@ -0,0 +1,73 @@ +alias: 'Nursery Not Occupied' +id: automation_nursery_not_occupied +mode: restart + +trigger: + - platform: state + entity_id: input_boolean.home_occupied + from: 'on' + to: 'off' + + - platform: state + entity_id: + - input_boolean.home_occupied + - binary_sensor.nursery_occupied + to: 'off' + for: '00:05:00' + + # - platform: time_pattern + # minutes: "/5" + +condition: + + - condition: state + entity_id: input_boolean.lights_off_manually + state: 'off' + - condition: state + entity_id: + - binary_sensor.white_bed_occupied + - binary_sensor.black_bed_occupied + state: + - 'off' + - 'unavailable' + + - condition: state + entity_id: input_boolean.nursery_occupied + state: 'on' + + - condition: or + conditions: + - condition: state + entity_id: input_boolean.home_occupied + state: 'off' + - condition: or + conditions: + - condition: state + entity_id: binary_sensor.nursery_person_occupancy + state: 'off' + for: + minutes: 5 + - condition: state + entity_id: binary_sensor.nursery_occupied + state: 'off' + for: + minutes: 5 + +action: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.home_occupied + state: 'off' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.nursery_occupied + - conditions: + - condition: not + conditions: + - condition: state + entity_id: input_select.house + state: 'Manual' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.nursery_occupied \ No newline at end of file diff --git a/automations/rooms/nursery/nursery_occupied.yaml b/automations/rooms/nursery/nursery_occupied.yaml new file mode 100644 index 0000000..95c58cd --- /dev/null +++ b/automations/rooms/nursery/nursery_occupied.yaml @@ -0,0 +1,18 @@ +alias: Nursery Occupied +id: automation_nursery_occupied +mode: restart + +trigger: + - platform: state + entity_id: + - binary_sensor.nursery_occupied + to: 'on' + +condition: + - condition: state + entity_id: input_boolean.nursery_occupied + state: 'off' + +action: + - service: input_boolean.turn_on + entity_id: input_boolean.nursery_occupied diff --git a/automations/rooms/nursery/nursery_out_of_bed.yaml b/automations/rooms/nursery/nursery_out_of_bed.yaml new file mode 100644 index 0000000..4e7ba95 --- /dev/null +++ b/automations/rooms/nursery/nursery_out_of_bed.yaml @@ -0,0 +1,165 @@ +alias: Nursery Out of Bed +id: automation_nursery_out_of_bed +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent + +trigger: + - platform: template + value_template: "{% if is_state('binary_sensor.nursery_door_person_occupancy','on') and is_state('binary_sensor.nursery_door','off')%}true{%endif%}" + + - platform: state + entity_id: binary_sensor.black_bed_occupied + from: 'on' + to: 'off' + for: '00:00:05' + - platform: state + entity_id: binary_sensor.white_bed_occupied + from: 'on' + to: 'off' + for: '00:00:05' + - platform: state + entity_id: binary_sensor.nursery_door + from: 'off' + to: 'on' + +condition: + - alias: "Do we want to be alerted?" + condition: state + entity_id: input_boolean.out_of_bed_alert + state: 'on' + + - alias: "Is the home occupied or in guest mode?" + condition: or + conditions: + - condition: state + entity_id: input_boolean.home_occupied + state: 'on' + - condition: state + entity_id: input_boolean.guest_mode + state: 'on' + + - alias: "Are any of the kids considered home?" + condition: or + conditions: + - condition: state + entity_id: input_boolean.emmett_home + state: 'on' + - condition: state + entity_id: input_boolean.bridget_home + state: 'on' + - condition: state + entity_id: input_boolean.ebin_home + state: 'on' + + - alias: "Is at a time of day when the kids should be sleeping?" + condition: or + conditions: + - condition: state + entity_id: binary_sensor.evening + state: 'on' + - condition: state + entity_id: binary_sensor.late_evening + state: 'on' + - condition: state + entity_id: binary_sensor.night + state: 'on' + - condition: state + entity_id: binary_sensor.early_morning + state: 'on' + + - alias: "Is Nursery Light Cycle turned off?" + condition: state + entity_id: input_boolean.nursery_light_cycle + state: 'off' + + - alias: "Are the kids asleep?" + condition: state + entity_id: input_boolean.kids_asleep + state: 'on' + + - alias: "Is an adult awake?" + condition: state + entity_id: binary_sensor.adults_asleep + state: 'off' + +variables: + computer_area: "{{ states('binary_sensor.computer_area_person_occupancy') }}" + front_room: "{{ states('binary_sensor.front_room_person_occupancy') }}" + entryway: "{{ states('input_boolean.entryway_occupied') }}" + +action: + - choose: + - conditions: + - condition: state + entity_id: binary_sensor.garage_occupied + state: 'on' + sequence: + - service: script.blink_garage_lights + + - choose: + - conditions: + - condition: state + entity_id: binary_sensor.computer_area_occupied + state: 'on' + sequence: + - service: webrtc.dash_cast + data: + entity_id: media_player.computer_area_hub + url: rtsp_cam08_sub + force: true + extra: + mode: webrtc + + - choose: + - conditions: + - condition: state + entity_id: binary_sensor.front_room_occupied + state: 'on' + sequence: + - service: webrtc.dash_cast + data: + entity_id: media_player.front_room_hub + url: rtsp_cam08_sub + force: true + extra: + mode: webrtc + + - delay: '00:10:00' + + - service: media_player.turn_off + entity_id: media_player.front_room_hub, media_player.computer_area_hub + + # - alias: "Flash some lights" + # repeat: + # count: 6 + # sequence: + # - delay: 1 + # - service: light.toggle + # target: + # entity_id: + # - light.entryway_hue + # - light.computer_area_hue + # - light.front_room_hue + #- delay: '00:00:02' + + # - alias: "Fix computer area lights" + # service: automation.trigger + # target: + # entity_id: "automation.computer_area_lights_to_{{ computer_area }}" + # data: + # skip_condition: true + + # - alias: "Fix front room lights" + # service: automation.trigger + # target: + # entity_id: "automation.front_room_lights_to_{{ front_room }}" + # data: + # skip_condition: true + + # - alias: "Fix entryway lights" + # service: automation.trigger + # target: + # entity_id: "automation.entryway_lights_to_{{ entryway }}" + # data: + # skip_condition: true diff --git a/automations/rooms/nursery/nursery_white_noise_off.yaml b/automations/rooms/nursery/nursery_white_noise_off.yaml new file mode 100644 index 0000000..370398e --- /dev/null +++ b/automations/rooms/nursery/nursery_white_noise_off.yaml @@ -0,0 +1,12 @@ +alias: Nursery White Noise Off +id: automation_nursery_white_noise_off + +trigger: + - platform: state + entity_id: input_boolean.nursery_asleep + to: "off" + +action: + - service: media_player.turn_off + entity_id: media_player.nursery_hub + diff --git a/automations/rooms/nursery/nursery_white_noise_on.yaml b/automations/rooms/nursery/nursery_white_noise_on.yaml new file mode 100644 index 0000000..7056db0 --- /dev/null +++ b/automations/rooms/nursery/nursery_white_noise_on.yaml @@ -0,0 +1,58 @@ +alias: Nursery White Noise On +id: automation_nursery_white_noise_on + +trigger: + - platform: state + entity_id: input_boolean.nursery_asleep + to: "on" + +action: + - choose: + - conditions: + - condition: state + entity_id: media_player.ytube_music_player + state: "playing" + - condition: state + entity_id: media_player.ytube_music_player + attribute: remote_player_id + state: "media_player.nursery_hub" + sequence: + - service: media_player.media_stop + target: + entity_id: media_player.ytube_music_player + + #- service: input_select.select_option + # data: + # entity_id: input_select.nursery_mode + # option: 'Off' + - service: media_player.volume_set + data: + volume_level: 0.6 + target: + entity_id: media_player.nursery_hub + + - service: media_player.play_media + target: + entity_id: media_player.nursery_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12740 + media_content_type: audio/mpeg + metadata: + title: Thunderstorm + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12740.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16648 + diff --git a/automations/rooms/storage_room_lights.yaml b/automations/rooms/storage_room_lights.yaml new file mode 100644 index 0000000..780caff --- /dev/null +++ b/automations/rooms/storage_room_lights.yaml @@ -0,0 +1,39 @@ +alias: Storage Room Lights +id: automation_storage_room_lights +mode: queued + +trigger: + - platform: state + id: door_open + entity_id: binary_sensor.storage_room_door_contact + from: 'off' + to: "on" + + - platform: state + id: door_closed + entity_id: binary_sensor.storage_room_door_contact + to: "off" + for: "00:10:00" + +action: + - choose: + - conditions: + - condition: trigger + id: "door_open" + - condition: state + entity_id: light.storage_room + state: 'off' + sequence: + - service: light.turn_on + target: + entity_id: light.storage_room + - conditions: + - condition: trigger + id: "door_closed" + - condition: state + entity_id: light.storage_room + state: 'on' + sequence: + - service: light.turn_off + target: + entity_id: light.storage_room \ No newline at end of file diff --git a/automations/rooms/utility_room/utility_room_lights_to_off.yaml b/automations/rooms/utility_room/utility_room_lights_to_off.yaml new file mode 100644 index 0000000..32c74f1 --- /dev/null +++ b/automations/rooms/utility_room/utility_room_lights_to_off.yaml @@ -0,0 +1,59 @@ +alias: Utility Room Lights to Off +id: automation_utility_room_lights_to_off +mode: restart + +trigger: + - platform: state + entity_id: input_select.utility_room_mode + + - platform: state + entity_id: input_boolean.utility_room_occupied + to: 'off' + + #- platform: time_pattern + # minutes: "/5" + +condition: + - condition: state + entity_id: light.utility_room_hue + state: 'on' + + - condition: state + entity_id: input_boolean.lights_off_manually + state: 'off' + - condition: or + conditions: + - condition: state + entity_id: input_select.utility_room_mode + state: 'Off' + - condition: state + entity_id: input_boolean.utility_room_occupied + state: 'off' + +action: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.lighting_automations + state: 'on' + - condition: or + conditions: + - condition: state + entity_id: input_select.utility_room_mode + state: 'Off' + - condition: state + entity_id: input_boolean.utility_room_occupied + state: 'off' + - condition: not + conditions: + - condition: state + entity_id: input_select.utility_room_mode + state: 'Manual' + sequence: + - service: light.turn_off + data: + entity_id: + - light.utility_room_vanity + - service: light.turn_off + target: + entity_id: light.laundry diff --git a/automations/rooms/utility_room/utility_room_lights_to_on.yaml b/automations/rooms/utility_room/utility_room_lights_to_on.yaml new file mode 100644 index 0000000..c12ab5d --- /dev/null +++ b/automations/rooms/utility_room/utility_room_lights_to_on.yaml @@ -0,0 +1,56 @@ +alias: Utility Room Lights to On +id: automation_utility_room_lights_to_on +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent + +trigger: + - platform: state + entity_id: + - input_select.utility_room_mode + - input_select.automatic_light_profile + - platform: state + entity_id: input_boolean.utility_room_occupied + to: "on" + +# Only turn on the lights when necessary +condition: + - condition: or + conditions: + # Either when motion is detected + - condition: template + value_template: "{{ trigger.entity_id == 'input_boolean.utility_room_occupied' }}" + # Or when the scene changes while the lights are already on + - condition: and + conditions: + - condition: or + conditions: + - condition: template + value_template: "{{ trigger.entity_id == 'input_select.utility_room_mode' }}" + - condition: template + value_template: "{{ trigger.entity_id == 'input_select.automatic_light_profile' }}" + - condition: state + entity_id: light.utility_room_vanity + state: "on" + +action: + - alias: "Make sure Z-Wave switch is turned on" + service: homeassistant.turn_on + target: + entity_id: switch.utility_room_motion_switch + + - choose: + - conditions: + - condition: state + entity_id: input_select.utility_room_mode + state: Auto + sequence: + - service: scene.turn_on + target: + entity_id: "scene.utility_room_hue_{{states('input_select.automatic_light_profile').lower().replace(' ','_')}}" + default: + - service: scene.turn_on + target: + entity_id: "scene.utility_room_hue_{{states('input_select.utility_room_mode').lower().replace(' ','_')}}" + + - delay: 1 \ No newline at end of file diff --git a/automations/rooms/utility_room/utility_room_not_occupied.yaml b/automations/rooms/utility_room/utility_room_not_occupied.yaml new file mode 100644 index 0000000..78b9f47 --- /dev/null +++ b/automations/rooms/utility_room/utility_room_not_occupied.yaml @@ -0,0 +1,59 @@ +alias: 'Utility Room Not Occupied' +id: automation_utility_room_not_occupied +mode: restart +trigger: + - platform: state + entity_id: input_boolean.home_occupied + from: 'on' + to: 'off' + + - platform: state + entity_id: + - input_boolean.home_occupied + - binary_sensor.utility_room_occupied + to: 'off' + for: '00:10:00' + + # - platform: time_pattern + # minutes: "/5" + +condition: + - condition: or + conditions: + - condition: state + entity_id: input_boolean.home_occupied + state: 'off' + - condition: and + conditions: + - condition: state + entity_id: input_boolean.utility_room_occupied + state: 'on' + - condition: state + entity_id: binary_sensor.utility_room_occupied + state: 'off' + for: '00:10:00' + +action: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.home_occupied + state: 'off' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.utility_room_occupied + - conditions: + - condition: or + conditions: + - condition: state + entity_id: input_select.house + state: 'Auto' + - condition: state + entity_id: input_select.house + state: 'Dad' + - condition: state + entity_id: input_select.house + state: 'Bachelor' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.utility_room_occupied diff --git a/automations/rooms/utility_room/utility_room_occupied.yaml b/automations/rooms/utility_room/utility_room_occupied.yaml new file mode 100644 index 0000000..09e3a12 --- /dev/null +++ b/automations/rooms/utility_room/utility_room_occupied.yaml @@ -0,0 +1,25 @@ +alias: Utility Room Occupied +id: automation_utility_room_occupied +mode: restart + +trigger: + - platform: state + entity_id: + - binary_sensor.utility_room_occupied + to: 'on' + +condition: + - condition: state + entity_id: input_boolean.utility_room_occupied + state: 'off' + +action: + - service: input_boolean.turn_on + entity_id: input_boolean.utility_room_occupied + + - service: logbook.log + data_template: + name: Utility Room Occupied + entity_id: automation.utility_room_occupied + message: > + {{ states("sensor.date_time_iso") }} Utlity Room Occupied ran diff --git a/automations/season/season_is_autumn.yaml b/automations/season/season_is_autumn.yaml new file mode 100644 index 0000000..452caf1 --- /dev/null +++ b/automations/season/season_is_autumn.yaml @@ -0,0 +1,16 @@ +alias: 'Season is autumn' +initial_state: 'on' +id: automation_season_is_autumn +trigger: + - platform: homeassistant + event: start + - platform: time + at: '03:00:00' +condition: + - condition: template + value_template: '{{ 12 > now().month > 8 }}' +action: + - service: input_select.select_option + data: + entity_id: input_select.season + option: Autumn diff --git a/automations/season/season_is_christmas.yaml b/automations/season/season_is_christmas.yaml new file mode 100644 index 0000000..df4e9d5 --- /dev/null +++ b/automations/season/season_is_christmas.yaml @@ -0,0 +1,18 @@ +alias: 'Season is Christmas' +id: automation_season_is_christmas +initial_state: 'on' +trigger: + - platform: homeassistant + event: start + - platform: time + at: '02:00:00' +condition: + - condition: template + #value_template: '{{ ( now().month == 12 and now().day >= 1 ) and ( now().month == 12 and now().day < 31 ) }}' + #value_template: "{{ state_attr('calendar.holidays_in_united_states','message') == 'Christmas Eve' or state_attr('calendar.holidays_in_united_states','message') == 'Christmas Day' or state_attr('calendar.holidays_in_united_states','message') == 'New Year''s Eve'}}" + value_template: "{{ state_attr('calendar.holidays_in_united_states', 'message') in 'Christmas Eve' 'Christmas Day' 'New Year''s Eve' }}" +action: + - service: input_select.select_option + data: + entity_id: input_select.season + option: Christmas diff --git a/automations/season/season_is_easter.yaml b/automations/season/season_is_easter.yaml new file mode 100644 index 0000000..8401c3f --- /dev/null +++ b/automations/season/season_is_easter.yaml @@ -0,0 +1,19 @@ +alias: 'Season is Easter' +id: automation_season_is_easter +initial_state: 'on' +trigger: + - platform: homeassistant + event: start + - platform: time + at: '02:00:00' + - platform: state + entity_id: calendar.holidays_in_united_states + to: 'on' +condition: + - condition: template + value_template: '{{ states.calendar.holidays_in_united_states.attributes.message in "Good Friday" "Easter Sunday" "Easter Monday" }}' +action: + - service: input_select.select_option + data: + entity_id: input_select.season + option: Easter diff --git a/automations/season/season_is_spring.yaml b/automations/season/season_is_spring.yaml new file mode 100644 index 0000000..8793fc7 --- /dev/null +++ b/automations/season/season_is_spring.yaml @@ -0,0 +1,21 @@ +alias: 'Season is Spring' +id: automation_season_is_spring +initial_state: 'on' +trigger: + - platform: homeassistant + event: start + - platform: time + at: '03:00:00' +condition: + - condition: and + conditions: + - condition: template + value_template: '{{ 6 > now().month > 2 }}' + - condition: template + value_template: '{{ states.calendar.holidays_in_united_states.attributes.message not in "Good Friday" "Easter Sunday" "Easter Monday" }}' + +action: + - service: input_select.select_option + data: + entity_id: input_select.season + option: Spring diff --git a/automations/season/season_is_summer.yaml b/automations/season/season_is_summer.yaml new file mode 100644 index 0000000..21791fc --- /dev/null +++ b/automations/season/season_is_summer.yaml @@ -0,0 +1,16 @@ +alias: 'Season is Summer' +id: automation_season_is_summer +initial_state: 'on' +trigger: + - platform: homeassistant + event: start + - platform: time + at: '03:00:00' +condition: + - condition: template + value_template: '{{ 9 > now().month > 5 }}' +action: + - service: input_select.select_option + data: + entity_id: input_select.season + option: Summer diff --git a/automations/season/season_is_winter.yaml b/automations/season/season_is_winter.yaml new file mode 100644 index 0000000..b3ce95e --- /dev/null +++ b/automations/season/season_is_winter.yaml @@ -0,0 +1,30 @@ +alias: 'Season is Winter' +id: automation_season_is_winter +initial_state: 'on' +trigger: + - platform: homeassistant + event: start + - platform: time + at: '03:00:00' +condition: + - condition: and + conditions: + - condition: template + value_template: '{{ ( now().month == 12 ) or ( now().month < 3 ) }}' + - condition: or + conditions: + # Either after the 1st of January + - condition: template + value_template: '{{ now().month == 1 and now().day >= 1 }}' + - condition: and + conditions: + # or before the 12th of December and we've not turned it on early + - condition: template + value_template: '{{ now().month == 12 and now().day < 12 }}' + - condition: template + value_template: '{{ states("input_select.season") != "Christmas" }}' +action: + - service: input_select.select_option + data: + entity_id: input_select.season + option: Winter diff --git a/automations/things/androidtv_tag_watch.yaml b/automations/things/androidtv_tag_watch.yaml new file mode 100644 index 0000000..33bd1f7 --- /dev/null +++ b/automations/things/androidtv_tag_watch.yaml @@ -0,0 +1,154 @@ +# alias: 'Android TV Tag Watch' +# description: 'Watches for tags directed at AndroidTV' +# trigger: +# - platform: tag +# id: netflix +# tag_id: +# - https://www.netflix.com/watch/80020935 +# - https://www.netflix.com/watch/81009946 +# - https://www.netflix.com/watch/70206898 +# - https://www.netflix.com/watch/80242184 +# - https://www.netflix.com/watch/81362788 +# - https://www.netflix.com/watch/80223368 +# - https://www.netflix.com/watch/80237347 +# - https://www.netflix.com/watch/80108159 +# - https://www.netflix.com/watch/80218107 +# - https://www.netflix.com/watch/70155567 +# - https://www.netflix.com/watch/70264612 +# - https://www.netflix.com/watch/80189632 +# - https://www.netflix.com/watch/80044965 +# - platform: tag +# id: disney +# tag_id: +# - https://www.disneyplus.com/series/pj-masks/1jRsm0G4Kuls +# - https://www.disneyplus.com/series/bluey/1xy9TAOQ0M3r +# - https://www.disneyplus.com/series/mickey-mouse-clubhouse/5iD5lXOdr1lj +# - platform: tag +# id: pbs +# tag_id: +# - https://pbskids.org/video/daniel-tigers-neighborhood +# - https://pbskids.org/video/wild-kratts +# - https://pbskids.org/video/dinosaur-train +# - platform: tag +# id: hbo +# tag_id: +# - >- +# https://play.hbomax.com/series/urn:hbo:series:GXouLWwp8MsPDIgEAAAqT?action=play +# - >- +# https://play.hbomax.com/feature/urn:hbo:feature:GYD2E8gKtW7GbrAEAAAAU?action=play +# - >- +# https://play.hbomax.com/feature/urn:hbo:feature:GXt_2LQiaY6UJwwEAAAEM?action=play +# - platform: tag +# id: paramount +# tag_id: +# - https://www.paramountplus.com/shows/blues-clues/ +# - https://www.paramountplus.com/shows/blues-clues-and-you/ +# - https://www.paramountplus.com/shows/maurice-sendaks-little-bear/ +# - https://www.paramountplus.com/shows/paw-patrol/ +# condition: [] +# action: +# - service: androidtv.adb_command +# data: +# entity_id: media_player.fire_10 +# command: am start -a android.intent.action.VIEW -d {{trigger.event.data.tag_id}} +# - choose: +# - conditions: +# - condition: trigger +# id: disney +# sequence: +# - service: androidtv.adb_command +# data: +# entity_id: media_player.fire_10 +# command: >- +# am start -a android.intent.action.VIEW -d +# {{trigger.event.data.tag_id}} +# - delay: +# hours: 0 +# minutes: 0 +# seconds: 5 +# milliseconds: 0 +# - service: androidtv.adb_command +# data: +# entity_id: media_player.fire_10 +# command: >- +# input keyevent 61 && input keyevent 61 && input keyevent 61 && +# input keyevent 66 +# - conditions: +# - condition: trigger +# id: paramount +# sequence: +# - service: androidtv.adb_command +# data: +# entity_id: media_player.fire_10 +# command: >- +# am start -a android.intent.action.VIEW -d +# {{trigger.event.data.tag_id}} +# - delay: +# hours: 0 +# minutes: 0 +# seconds: 10 +# milliseconds: 0 +# - service: androidtv.adb_command +# data: +# entity_id: media_player.fire_10 +# command: input keyevent 19 && input keyevent 19 && input keyevent 23 +# - conditions: +# - condition: trigger +# id: pbs +# sequence: +# - service: androidtv.adb_command +# data: +# entity_id: media_player.fire_10 +# command: >- +# am force-stop org.pbskids.video && am start -a +# android.intent.action.VIEW -d {{trigger.event.data.tag_id}} +# - delay: +# hours: 0 +# minutes: 0 +# seconds: 5 +# milliseconds: 0 +# - service: androidtv.adb_command +# data: +# entity_id: media_player.fire_10 +# command: ls / +# default: +# - service: androidtv.adb_command +# data: +# entity_id: media_player.fire_10 +# command: >- +# am start -a android.intent.action.VIEW -d +# {{trigger.event.data.tag_id}} +# mode: single + + +# # Got my kid setup with an NFC card system for their favorite shows! + +# # https://imgur.com/a/akZZYjk +# # Used these cards with an Avery name tag label: https://smile.amazon.com/dp/B087P24Q8K + +# # https://gist.github.com/rbray89/2a8ab437366a8b46967f88cd277eed91 +# # The automation is in the Gist above. + +# # I use a Fire HD 10+ tablet with the Anker wireless charging stand, but any Android tablet or Android TV (including fire TV) should work. Just enable ABD debugging, and then enable TCPIP debug: + +# # https://magic.secure.force.com/PublicKnowledge/articles/bl_Reference/Using-the-Android-Debug-Bridge-ADB-Utility-xpa#:~:text=Enable%20ADB%20over%20TCP%2FIP,command%3A%20adb%20kill%2Dserver. + +# # Only downside to using a tablet is that tcpip ADB is lost on reboot, so I had to prevent automatic updates via DNS rules. Fire TV or rooted devices shouldn't have this issue. + +# # Then add the "TV" to Home assistant: + +# # https://www.home-assistant.io/integrations/androidtv/ + +# # I just write the video URL to the tags as the tag ID, then add the URL to the automation under the appropriate service. As long as the service app is installed, a prompt should come up asking what app should open the link. Select the app, and then select "Always" so it won't prompt next time. + +# # You can find the app link by googling the show, and using the "watch now" links that Google shows for streamable content now. Just right-click the button and select "Copy link address" + +# # With Amazon Video and shows (movies should be fine), you have to select by season, so there is no good way to play an entire series and keep track of position without more logic. Same with PBS Kids, bit they rotate content every Friday. + +# # To auto play on some services, I had to navigate to the play button and select it, but Netflix and HBO just go. + +# # Right now we use an Android phone as the reader, but I have plans to build the one shown here: + +# # https://github.com/adonno/tagreader + +# # Figured I'd share this little project, as it lets us better control what is watched (no going through the menu and getting distracted) and is WAY easier to find the show quickly. \ No newline at end of file diff --git a/automations/things/automatic_fan_speeds.yaml b/automations/things/automatic_fan_speeds.yaml new file mode 100644 index 0000000..4089eb0 --- /dev/null +++ b/automations/things/automatic_fan_speeds.yaml @@ -0,0 +1,297 @@ +alias: Automatic Fan Speeds +id: automation_fan_speeds +mode: parallel +max: 4 + +trigger: + - platform: homeassistant + event: start + id: start + + - platform: numeric_state + entity_id: sensor.nursery_multisensor_air_temperature + id: nursery_off + below: input_number.nursery_fan_low_temp + + - platform: numeric_state + entity_id: sensor.nursery_multisensor_air_temperature + id: nursery_low + above: input_number.nursery_fan_low_temp + below: input_number.nursery_fan_medium_temp + + - platform: numeric_state + entity_id: sensor.nursery_multisensor_air_temperature + id: nursery_mid + above: input_number.nursery_fan_medium_temp + below: input_number.nursery_fan_high_temp + + - platform: numeric_state + entity_id: sensor.nursery_multisensor_air_temperature + id: nursery_high + above: input_number.nursery_fan_high_temp + + - platform: numeric_state + entity_id: sensor.master_bedroom_multisensor_air_temperature + below: input_number.master_bedroom_fan_low_temp + id: mbr_off + + - platform: numeric_state + entity_id: sensor.master_bedroom_multisensor_air_temperature + above: input_number.master_bedroom_fan_low_temp + below: input_number.master_bedroom_fan_medium_temp + id: mbr_low + + - platform: numeric_state + entity_id: sensor.master_bedroom_multisensor_air_temperature + above: input_number.master_bedroom_fan_medium_temp + below: input_number.master_bedroom_fan_high_temp + id: mbr_med + + - platform: numeric_state + entity_id: sensor.master_bedroom_multisensor_air_temperature + above: input_number.master_bedroom_fan_high_temp + id: mbr_high + + - platform: state + entity_id: input_boolean.nursery_occupied + + - platform: state + entity_id: input_boolean.master_bedroom_occupied + + - platform: state + entity_id: input_boolean.nursery_asleep + + - platform: state + entity_id: input_boolean.master_bedroom_asleep + +# Chose not to use conditions so fan speeds will be updated regardless of trigger + +condition: + - alias: "Only turn the fans on if it's warm enough outside" + condition: template + value_template: "{{ (states('sensor.lacrosse_tx141thbv2_0_54_temperature') | float(default=0) > 60.0) or is_state('group.ceiling_fans','on') }}" + +action: + - alias: "Calculate fan speeds" + variables: + nursery_fan_speed: "{{((states('sensor.nursery_multisensor_air_temperature') | float(default=0) - states('input_number.nursery_fan_min_temp') | float(default=0))/(states('input_number.nursery_fan_high_temp') | float(default=1) - states('input_number.nursery_fan_min_temp') | float(default=0)) * 100)|int(default=0) }}" + master_bedroom_fan_speed: "{{((states('sensor.master_bedroom_multisensor_air_temperature') | float(default=0) - states('input_number.master_bedroom_fan_min_temp') | float(default=0))/(states('input_number.master_bedroom_fan_high_temp') | float(default=1) - states('input_number.master_bedroom_fan_min_temp') | float(default=0)) * 100)|int(default=0) }}" + + - service: logbook.log + data_template: + name: Automatic Fan Speeds + entity_id: automation.automatic_fan_speeds + message: > + Outdoor Air Temp: {{states('sensor.lacrosse_tx141thbv2_0_54_temperature') | float(default=0)}} + Nursery Air Temp: {{states('sensor.nursery_multisensor_air_temperature') | float(default=0)}} + Nursery Min Temp: {{states('input_number.nursery_fan_min_temp') | float(default=0)}} + Nursery High Temp: {{states('input_number.nursery_fan_high_temp') | float(default=0)}} + Nursery Calculated: {{ nursery_fan_speed }} + Master Bedroom Air Temp: {{states('sensor.master_bedroom_multisensor_air_temperature') | float(default=0)}} + Master Bedroom Min Temp: {{states('input_number.master_bedroom_fan_min_temp') | float(default=0)}} + Master Bedroom High Temp: {{states('input_number.master_bedroom_fan_high_temp') | float(default=0)}} + Master Bedroom Calculated: {{ master_bedroom_fan_speed }} + + - alias: "Set Nursery fan speed" + choose: + - conditions: + - alias: "It is too cold outside to start the nursery fan" + condition: numeric_state + entity_id: sensor.nursery_multisensor_air_temperature + below: input_number.nursery_fan_min_temp + - alias: "Nursery fan on" + condition: state + entity_id: fan.nursery + state: "on" + sequence: + - alias: "Turn nursery fan off because it is too cold outside" + service: fan.turn_off + target: + entity_id: fan.nursery + - conditions: + - alias: "Nusery not occupied and window is closed" + condition: state + entity_id: input_boolean.nursery_occupied + state: "off" + - alias: "Nusery not asleep" + condition: state + entity_id: input_boolean.nursery_asleep + state: "off" + - alias: "Nursery fan on" + condition: state + entity_id: fan.nursery + state: "on" + - alias: "Nursery window is closed" + condition: state + entity_id: binary_sensor.nursery_window_contact + state: "off" + sequence: + - alias: "Turn nursery fan off because room isn't occupied" + service: fan.turn_off + target: + entity_id: fan.nursery + - conditions: + - alias: "Nursery below low" + condition: template + value_template: "{{states('sensor.nursery_multisensor_air_temperature') | float(default=0) <= states('input_number.nursery_fan_min_temp') | float(default=0)}}" + + - alias: "Nursery fan on" + condition: state + entity_id: fan.nursery + state: "on" + sequence: + - alias: "Turn nursery fan off because the room is too cool" + service: fan.turn_off + target: + entity_id: fan.nursery + - conditions: + - alias: "Nursery is occupied" + condition: state + entity_id: input_boolean.nursery_occupied + state: "on" + - alias: "Nusery above high" + condition: template + value_template: "{{states('sensor.nursery_multisensor_air_temperature') | float(default=0) > states('input_number.nursery_fan_high_temp') | float(default=0)}}" + + sequence: + - alias: "Turn nursery fan on to percentage speed" + service: fan.set_percentage + target: + entity_id: fan.nursery + data: + percentage: 100 + + - conditions: + - alias: "Nursery is occupied" + condition: state + entity_id: input_boolean.nursery_occupied + state: "on" + - alias: "Nusery above medium" + condition: template + value_template: "{{states('sensor.nursery_multisensor_air_temperature') | float(default=0) > states('input_number.nursery_fan_medium_temp') | float(default=0)}}" + + sequence: + - alias: "Turn nursery fan on to percentage speed" + service: fan.set_percentage + target: + entity_id: fan.nursery + data: + percentage: 66 + + - conditions: + - alias: "Nursery is occupied" + condition: state + entity_id: input_boolean.nursery_occupied + state: "on" + - alias: "Nusery above low" + condition: template + value_template: "{{states('sensor.nursery_multisensor_air_temperature') | float(default=0) > states('input_number.nursery_fan_low_temp') | float(default=0)}}" + + sequence: + - alias: "Turn nursery fan on to percentage speed" + service: fan.set_percentage + target: + entity_id: fan.nursery + data: + percentage: 33 + + - alias: "Set Master Bedroom fan speed" + choose: + - conditions: + - alias: "It is too cold outside, so turn off the master bedroom fan" + condition: numeric_state + entity_id: sensor.master_bedroom_multisensor_air_temperature + below: input_number.master_bedroom_fan_min_temp + sequence: + - alias: "Turn master bedroom fan off because it is too cold outside" + service: fan.turn_off + target: + entity_id: fan.master_bedroom + - conditions: + - alias: "Master Bedroom not occupied" + condition: state + entity_id: input_boolean.master_bedroom_occupied + state: "off" + - alias: "Master Bedroom not asleep" + condition: state + entity_id: input_boolean.master_bedroom_asleep + state: "off" + - alias: "Master Bedroom fan on" + condition: state + entity_id: fan.master_bedroom + state: "on" + - alias: "Master bedroom window is closed" + condition: state + entity_id: binary_sensor.master_bedroom_window_contact + state: "off" + sequence: + - alias: "Turn master bedroom fan off because room isn't occupied" + service: fan.turn_off + target: + entity_id: fan.master_bedroom + + - conditions: + - alias: "Master Bedroom below low" + condition: template + value_template: "{{states('sensor.master_bedroom_multisensor_air_temperature') | float(default=0) <= states('input_number.master_bedroom_fan_min_temp') | float(default=0)}}" + + - alias: "Master Bedroom fan on" + condition: state + entity_id: fan.master_bedroom + state: "on" + sequence: + - alias: "Turn master bedroom fan off because the room is too cool" + service: fan.turn_off + target: + entity_id: fan.master_bedroom + + - conditions: + - alias: "Master Bedroom is occupied" + condition: state + entity_id: input_boolean.master_bedroom_occupied + state: "on" + - alias: "Master Bedroom above high" + condition: template + value_template: "{{states('sensor.master_bedroom_multisensor_air_temperature') | float(default=0) > states('input_number.master_bedroom_fan_high_temp') | float(default=0)}}" + + sequence: + - alias: "Turn master bedroom fan on to percentage speed" + service: fan.set_percentage + target: + entity_id: fan.master_bedroom + data: + percentage: 100 + + - conditions: + - alias: "Master Bedroom is occupied" + condition: state + entity_id: input_boolean.master_bedroom_occupied + state: "on" + - alias: "Master Bedroom above medium" + condition: template + value_template: "{{states('sensor.master_bedroom_multisensor_air_temperature') | float(default=0) > states('input_number.master_bedroom_fan_medium_temp') | float(default=0)}}" + + sequence: + - alias: "Turn master bedroom fan on to percentage speed" + service: fan.set_percentage + target: + entity_id: fan.master_bedroom + data: + percentage: 66 + + - conditions: + - alias: "Master Bedroom is occupied" + condition: state + entity_id: input_boolean.master_bedroom_occupied + state: "on" + - alias: "Master Bedroom above low" + condition: template + value_template: "{{states('sensor.master_bedroom_multisensor_air_temperature') | float(default=0) > states('input_number.master_bedroom_fan_low_temp') | float(default=0)}}" + + sequence: + - alias: "Turn master bedroom fan on to percentage speed" + service: fan.set_percentage + target: + entity_id: fan.master_bedroom + data: + percentage: 33 diff --git a/automations/things/bridget_wled_changed.yaml b/automations/things/bridget_wled_changed.yaml new file mode 100644 index 0000000..243a16e --- /dev/null +++ b/automations/things/bridget_wled_changed.yaml @@ -0,0 +1,22 @@ +id: bridget_wled_changed +alias: Bridget WLED Changed +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent + +trigger: + - platform: state + entity_id: input_select.bridget_wled + +action: + #- alias: "Clear segment first" + # service: rest_command.bridget_clear + + #- alias: "Call new WLED segment settings" + # service: "rest_command.bridget_{{states('input_select.bridget_wled') | string | lower | replace(' ','_') }}" + - alias: "Update select.white_bed_wled_preset" + service: select.select_option + data: + option: "{{states('input_select.bridget_wled')}}" + target: + entity_id: select.white_bed_wled_preset \ No newline at end of file diff --git a/automations/things/car/car_away.yaml b/automations/things/car/car_away.yaml new file mode 100644 index 0000000..5c6683d --- /dev/null +++ b/automations/things/car/car_away.yaml @@ -0,0 +1,29 @@ +initial_state: 'on' +id: automation_car_away +alias: Car Away +trigger: + - platform: state + entity_id: + - binary_sensor.gray_suv_east_side + - binary_sensor.gray_suv_west_side + to: 'off' + for: '00:00:30' + + - platform: homeassistant + event: start +condition: + - condition: state + entity_id: input_boolean.car_home + state: 'on' + - condition: and + conditions: + - condition: state + entity_id: binary_sensor.gray_suv_east_side + state: 'off' + - condition: state + entity_id: binary_sensor.gray_suv_west_side + state: 'off' + +action: + - service: input_boolean.turn_off + entity_id: input_boolean.car_home \ No newline at end of file diff --git a/automations/things/car/car_home.yaml b/automations/things/car/car_home.yaml new file mode 100644 index 0000000..fbd93f8 --- /dev/null +++ b/automations/things/car/car_home.yaml @@ -0,0 +1,33 @@ +initial_state: 'on' +id: automation_car_home +alias: Car Home +trigger: + - platform: state + entity_id: + - binary_sensor.gray_suv_east_side + - binary_sensor.gray_suv_west_side + to: 'on' + + - platform: homeassistant + event: start +condition: + - condition: state + entity_id: input_boolean.car_home + state: 'off' + - condition: or + conditions: + - condition: state + entity_id: binary_sensor.gray_suv_east_side + state: 'on' + - condition: state + entity_id: binary_sensor.gray_suv_west_side + state: 'on' + - condition: state + entity_id: binary_sensor.east_side_vehicle_occupancy + state: 'on' + - condition: state + entity_id: binary_sensor.west_side_vehicle_occupancy + state: 'on' +action: + - service: input_boolean.turn_on + entity_id: input_boolean.car_home \ No newline at end of file diff --git a/automations/things/dishwasher_done.yaml b/automations/things/dishwasher_done.yaml new file mode 100644 index 0000000..954d342 --- /dev/null +++ b/automations/things/dishwasher_done.yaml @@ -0,0 +1,98 @@ +alias: Dishwasher Done +id: dishwashwer_done +description: "Dishwasher just finished" +trigger: + - platform: state + entity_id: input_boolean.empty_dishwasher + from: "off" + to: "on" + + - platform: homeassistant + event: start + +condition: + - alias: "The home is occupied" + condition: state + entity_id: input_boolean.home_occupied + state: "on" + + - alias: "Its not bedtime" + condition: state + entity_id: input_boolean.bedtime + state: "off" + +action: + - repeat: + while: "{{ is_state('input_boolean.empty_dishwasher','on') }}" + sequence: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.allow_announcements + state: "on" + + - condition: not + conditions: + - condition: state + entity_id: sensor.pixel_7_audio_mode + state: in_communication + - condition: state + entity_id: sensor.pixel_7_audio_mode + state: in_call + - condition: state + entity_id: input_boolean.kids_bedtime + state: "on" + # - condition: state + # entity_id: input_boolean.announcement_pending + # state: 'on' + + sequence: + - service: input_boolean.turn_off + data: {} + target: + entity_id: + - input_boolean.announce_dishwasher_done + - service: input_boolean.turn_on + data: {} + target: + entity_id: + - input_boolean.announce_dishwasher_done + # - input_boolean.announcement_pending + + - choose: + - conditions: + - "{{states('sensor.dreambox_audio_audio_sessions') | int(default=0) > 0 or is_state('binary_sensor.dreambox_recently_active','on') }}" + + sequence: + - service: notify.dreambox + data: + message: The dishwasher is done + + - choose: + - conditions: + - "{{states('sensor.dreamsurface_audio_audio_sessions') | int(default=0) > 0 or is_state('binary_sensor.dreamsurface_recently_active','on') }}" + + sequence: + - service: notify.dreamsurface + data: + message: The dishwasher is done + + - choose: + - conditions: + - condition: state + entity_id: input_boolean.clint_home + state: "off" + + sequence: + - service: notify.mobile_app_pixel_7 + data: + message: The dishwasher is done + + - delay: + minutes: 30 + + - service: input_boolean.turn_off + data: {} + target: + entity_id: + - input_boolean.announce_dishwasher_done diff --git a/automations/things/doorbell.yaml b/automations/things/doorbell.yaml new file mode 100644 index 0000000..70253e5 --- /dev/null +++ b/automations/things/doorbell.yaml @@ -0,0 +1,82 @@ +alias: Doorbell +id: automation_doorbell +description: "Someone pushed the doorbell" +trigger: + - id: button_pressed + platform: webhook + webhook_id: "synology_doorbell_actionrule" + local_only: true + + - id: button_pressed + platform: event + event_type: "amcrest" + event_data: + camera: "Front Porch" + event: "AlarmLocal" + + - id: button_pressed + platform: state + entity_id: binary_sensor.front_porch_button_pressed + from: "off" + to: "on" + + - id: door_opened + platform: state + entity_id: + - binary_sensor.front_door_contact + - binary_sensor.outer_garage_door + from: "off" + to: "on" + + - id: door_closed + platform: state + entity_id: + - binary_sensor.front_door_contact + - binary_sensor.outer_garage_door + from: "on" + to: "off" + +action: + - choose: + - conditions: + - condition: trigger + id: button_pressed + + sequence: + - service: notify.mobile_app_pixel_7 + data: + message: Someone is at the door + data: + image_url: "https://frigate.clintweaver.com/api/frigate_cam19/latest.jpg" + + - service: input_boolean.turn_on + data: {} + target: + entity_id: input_boolean.doorbell + + - service: notify.dreamsurface + data: + title: Ding Dong + message: "Someone is at the door" + data: + image: "https://frigate.clintweaver.com/api/frigate_cam19/latest.jpg" + + - service: notify.dreambox + data: + title: Ding Dong + message: "Someone is at the door" + data: + image: "https://frigate.clintweaver.com/api/frigate_cam19/latest.jpg" + + - conditions: + - condition: trigger + id: door_opened + - condition: state + entity_id: input_boolean.doorbell + state: "on" + + sequence: + - service: input_boolean.turn_off + data: {} + target: + entity_id: input_boolean.doorbell diff --git a/automations/things/emmett_wled_changed.yaml b/automations/things/emmett_wled_changed.yaml new file mode 100644 index 0000000..cae1698 --- /dev/null +++ b/automations/things/emmett_wled_changed.yaml @@ -0,0 +1,22 @@ +id: emmett_wled_changed +alias: Emmett WLED Changed +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent + +trigger: + - platform: state + entity_id: input_select.emmett_wled + +action: + #- alias: "Clear segment first" + # service: rest_command.emmett_clear + + #- alias: "Call new WLED segment settings" + # service: "rest_command.emmett_{{states('input_select.emmett_wled') | string | lower | replace(' ','_') }}" + - alias: "Update select.black_bed_wled_preset" + service: select.select_option + data: + option: "{{states('input_select.emmett_wled')}}" + target: + entity_id: select.black_bed_wled_preset \ No newline at end of file diff --git a/automations/things/handle_chore_tag_scan.yaml b/automations/things/handle_chore_tag_scan.yaml new file mode 100644 index 0000000..d4c23d5 --- /dev/null +++ b/automations/things/handle_chore_tag_scan.yaml @@ -0,0 +1,43 @@ +# Note, this is using new automation features introduced in Home Assistant 0.115 +id: handle_chore_tag_scan +alias: Handle Chore Tag Scan +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent +variables: + # Map scanner device ID to media player entity ID + devices: + 75060fd1afdd90be: 2 + + # Map tag ID to content + tags: + # Lights: Reading + 04-1F-22-8A-21-6E-81: + chore_id: 4 + +trigger: + platform: event + event_type: tag_scanned +condition: + # Test that we support this device and tag + - "{{ trigger.event.data.tag_id in tags }}" + - "{{ trigger.event.data.device_id in devices }}" +action: + - variables: + person_id: "{{ devices[trigger.event.data.device_id] }}" + chore_id: "{{ tags[trigger.event.data.tag_id].chore_id }}" + + + - service: logbook.log + data_template: + name: Handle Chore Tag Scan + entity_id: automation.handle_chore_tag_scan + message: > + Tag {{ trigger.event.data.tag_id }} scanned on device {{ trigger.event.data.device_id }}. person_id: {{ person_id }} - chore_id: {{ chore_id }} + + - service: grocy.execute_chore + data: + chore_id: "{{chore_id}}" + done_by: "{{person_id}}" + + - delay: 2 # timeout before we allow processing next scan \ No newline at end of file diff --git a/automations/things/handle_clints_meds.yaml b/automations/things/handle_clints_meds.yaml new file mode 100644 index 0000000..0138f30 --- /dev/null +++ b/automations/things/handle_clints_meds.yaml @@ -0,0 +1,34 @@ +alias: Handle Clints Meds +id: automation_handle_clints_meds +description: 'Manage the booleans associated with Clints meds' +trigger: + - id: homeassistant_start + platform: homeassistant + event: start + + - id: boolean_changed + platform: state + entity_id: + - input_boolean.clint_needs_am_meds + - input_boolean.clint_needs_pm_meds + +action: + - choose: + - conditions: + - condition: state + entity_id: + - input_boolean.clint_needs_am_meds + - input_boolean.clint_needs_pm_meds + state: 'off' + + sequence: + - service: input_boolean.turn_off + data: {} + target: + entity_id: input_boolean.clint_needs_meds + + default: + - service: input_boolean.turn_on + data: {} + target: + entity_id: input_boolean.clint_needs_meds \ No newline at end of file diff --git a/automations/things/handle_dreamsurface_brightness.yaml b/automations/things/handle_dreamsurface_brightness.yaml new file mode 100644 index 0000000..b7975f4 --- /dev/null +++ b/automations/things/handle_dreamsurface_brightness.yaml @@ -0,0 +1,48 @@ +alias: Handle DreamSurface Brightness +id: handle_dreamsurface_brightness +description: "Handle DreamSurface Brightness" +trigger: + - platform: state + id: going_to_bed + entity_id: input_boolean.clint_in_bed + from: "off" + to: "on" + + - platform: state + id: waking_up + entity_id: input_boolean.clint_in_bed + from: "on" + to: "off" + +# condition: +# - alias: "The home is occupied" +# condition: state +# entity_id: input_boolean.home_occupied +# state: "on" + +# - alias: "Its not bedtime" +# condition: state +# entity_id: input_boolean.bedtime +# state: "off" + +action: + - choose: + - conditions: + - condition: trigger + id: going_to_bed + + sequence: + - service: button.press + data: {} + target: + entity_id: button.dreamsurface_low_brightness + + - conditions: + - condition: trigger + id: waking_up + + sequence: + - service: button.press + data: {} + target: + entity_id: button.dreamsurface_normal_brightness \ No newline at end of file diff --git a/automations/things/handle_jasco_buttons.yaml b/automations/things/handle_jasco_buttons.yaml new file mode 100644 index 0000000..69f5e90 --- /dev/null +++ b/automations/things/handle_jasco_buttons.yaml @@ -0,0 +1,53 @@ +alias: Handle Jasco Buttons +id: automation_handle_jasco_buttons +description: 'Tries to catch all of the buttons pressed on any of the Jasco switches.' +mode: queued +variables: + # Map scanner device ID to media player entity ID + sources: + 9975a90a307974388d6655c5a1bbba75: entryway_motion_switch + ac9942c01ebc59124e6ca3bb0597dc50: bathroom_vent_switch + 5b2a9ae622deb2c1276f4bb772f709bf: blue_room_motion_switch + ae49ef7725fa7ca095f8bcd6bcce355e: dining_room_motion_switch + d3e866b0495a5793d8bc7d0e1530d44b: driveway_switch + 64aefd7592f9792796f2b15a033b0c26: front_room_motion_switch + 7bf6374f20b63629515ed391e44249ef: furnace_room_motion_switch + fad31eebed4bfa169e16d5ef314a87a7: garage_motion_switch + 92891e75f89d2252f436a94beb134950: garage_switch + 3fe75960129c234bebb7a70820460cf2: great_room_motion_switch + 2f95eb95270b23404d52b011f28179bc: kitchen_switch + 3ce88b51335de032397b61e9003efe7b: mancave_motion_switch + bee0ff46ae368c83ebd408ea7196f226: master_bathroom_motion_switch + 69bfa35651cd293ad221f32d3f836669: master_bedroom_closet_motion_switch + ab40de79ce13e074ce0a820c47db717c: nursery_closet_motion_switch + 8291a2e240629c547b08733faaf53e90: shower_switch + c0d80ce8eab4bdebce5343ce4a748f34: storage_room_switch + 8d77dcb0ee41302d5de67b4c333f5099: utility_room_motion_switch + b3f9869ae389ab96de294152b43f40a3: utility_room_vent_switch + + +trigger: + - platform: event + event_type: zwave_js_value_notification + +condition: + - "{{ trigger.event.data.device_id in sources }}" +action: + - variables: + device: "{{ sources[trigger.event.data.device_id] }}" + command_class: "{{ trigger.event.data.command_class_name }}" + command_class_name: "{{ trigger.event.data.command_class_name }}" + value: "{{ trigger.event.data.value }}" + value_raw: "{{ trigger.event.data.value_raw }}" + #value: "{{ tags[trigger.event.data.tag_id].light_command }}" + + - service: logbook.log + data_template: + name: Handle Jasco Buttons + entity_id: automation.handle_jasco_buttons + message: > + Device: {{ device }} + Command Class: {{ command_class }} + Command Class Name: {{ command_class_name }} + Value: {{ value }} + Value Raw: {{ value_raw }} \ No newline at end of file diff --git a/automations/things/handle_light_tag_scan.yaml b/automations/things/handle_light_tag_scan.yaml new file mode 100644 index 0000000..8210fb2 --- /dev/null +++ b/automations/things/handle_light_tag_scan.yaml @@ -0,0 +1,161 @@ +# Note, this is using new automation features introduced in Home Assistant 0.115 +id: handle_light_tag_scan +alias: Handle Light Tag Scan +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent +variables: + # Map scanner device ID to media player entity ID + devices: + 299e280bcc3579ca9b3ef714677dbf9b: nursery_tagreader + 75060fd1afdd90be: pixel_4 + + # Map tag ID to content + tags: + # Lights: Reading + 04-AE-91-3A-B4-6D-80: + input_select: nursery_wled + select_option: Read + light_command: 'No change' + #preset: 6 + #lights: light.black_bed_wled, light.white_bed_wled + + # Lights: Bedtime + 04-8F-50-3A-B4-6D-80: + input_select: nursery_wled + select_option: Bedtime + light_command: 'No change' + #preset: 3 + #lights: light.black_bed_wled, light.white_bed_wled + + # Lights: Bouncing Balls - Bridget + 04-16-E1-3A-B4-6D-81: + input_select: bridget_wled + select_option: Bouncing Balls + light_command: 'No change' + #preset: 13 + #lights: light.white_bed_wled + + # Lights: Bouncing Balls - Emmett + 04-32-FB-3A-B4-6D-81: + input_select: emmett_wled + select_option: Bouncing Balls + light_command: 'No change' + #preset: 13 + #lights: light.black_bed_wled + + # Lights: Fireworks - Bridget + 04-09-F8-3A-B4-6D-81: + input_select: bridget_wled + select_option: Fireworks + light_command: 'No change' + #preset: 4 + #lights: light.white_bed_wled + + # Lights: Fireworks - Emmett + 04-F0-E1-3A-B4-6D-80: + input_select: emmett_wled + select_option: Fireworks + light_command: 'No change' + #preset: 4 + #lights: light.black_bed_wled + + # Lights: Twinkle + 04-7C-B8-3A-B4-6D-80: + input_select: nursery_wled + select_option: Twinkle + light_command: 'No change' + #preset: 2 + #lights: light.black_bed_wled, light.white_bed_wled + + # Lights:Dim + 04-98-2F-3A-B4-6D-80: + input_select: nursery_wled + select_option: 'Off' + light_command: 'Dimmed' + #preset: -2 + #lights: light.black_bed_wled, light.white_bed_wled + + # Lights: Normal + 04-0C-22-3A-B4-6D-81: + input_select: nursery_wled + select_option: 'Off' + light_command: 'Auto' + #preset: -1 + #lights: light.black_bed_wled, light.white_bed_wled + + # Lights: Off + 04-6D-46-3A-B4-6D-81: + input_select: nursery_wled + select_option: 'Off' + light_command: 'Off' + #preset: 0 + #lights: light.black_bed_wled, light.white_bed_wled +trigger: + platform: event + event_type: tag_scanned +condition: + # Test that we support this device and tag + - "{{ trigger.event.data.tag_id in tags }}" + - "{{ trigger.event.data.device_id in devices }}" +action: + - variables: + device: "{{ devices[trigger.event.data.device_id] }}" + #preset: "{{ tags[trigger.event.data.tag_id].preset }}" + #lights: "{{ tags[trigger.event.data.tag_id].lights }}" + input_select: "{{ tags[trigger.event.data.tag_id].input_select }}" + select_option: "{{ tags[trigger.event.data.tag_id].select_option }}" + light_command: "{{ tags[trigger.event.data.tag_id].light_command }}" + + - service: logbook.log + data_template: + name: Handle Light Tag Scan + entity_id: automation.handle_light_tag_scan + message: > + Tag {{ trigger.event.data.tag_id }} scanned on device {{ trigger.event.data.device_id }}. input_select: {{ input_select }} - select_option: {{ select_option }} + + - choose: + - conditions: + - condition: template + value_template: "{{ light_command | string != 'No change'}}" + sequence: + - service: input_select.select_option + data: + entity_id: input_select.nursery_mode + option: "{{ light_command }}" + + - conditions: + - condition: template + value_template: "{{ input_select | string == 'nursery_wled'}}" + sequence: + - service: input_select.select_option + data: + entity_id: input_select.nursery_wled + option: "{{ select_option }}" + + - conditions: + - condition: template + value_template: "{{ input_select | string == 'bridget_wled'}}" + sequence: + - service: select.select_option + data: + entity_id: select.white_bed_wled_preset + option: "{{ select_option }}" + + - conditions: + - condition: template + value_template: "{{ input_select | string == 'emmett_wled'}}" + sequence: + - service: select.select_option + data: + entity_id: select.black_bed_wled_preset + option: "{{ select_option }}" + + # - service: input_select.select_option + # data: + # option: "{{ select_option }}" + # target: + # entity_id: "input_select.{{ input_select }}" + + + - delay: 2 # timeout before we allow processing next scan \ No newline at end of file diff --git a/automations/things/handle_music_tag_scan.yaml b/automations/things/handle_music_tag_scan.yaml new file mode 100644 index 0000000..dc0b734 --- /dev/null +++ b/automations/things/handle_music_tag_scan.yaml @@ -0,0 +1,159 @@ +# Note, this is using new automation features introduced in Home Assistant 0.115 +id: handle_music_tag_scan +alias: Handle Music Tag Scan +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent +variables: + # Map scanner device ID to media player entity ID + sources: + 299e280bcc3579ca9b3ef714677dbf9b: nursery_hub + 75060fd1afdd90be: upstairs_speakers + # Map tag ID to content + tags: + # Song: Wimoweh + 04-59-32-3A-B4-6D-81: + media_content_id: hL1m4__BUPs + media_content_type: track + shuffle: 'off' + repeat: 'off' + + # Song: Three Little Birds + 04-1D-6D-3A-B4-6D-80: + media_content_id: g3U6YQiIHc0 + media_content_type: track + shuffle: 'off' + repeat: 'off' + + # Song: Don't Worry Be Happy + 04-D4-9A-3A-B4-6D-80: + media_content_id: qTuntvl6oLQ + media_content_type: track + shuffle: 'off' + repeat: 'off' + + # Song: Lollipop + 04-AD-10-3A-B4-6D-84: + media_content_id: Yw0qIyZMtH8 + media_content_type: track + shuffle: 'off' + repeat: 'off' + + # Song: Life is a Highway + 04-F6-5D-3A-B4-6D-80: + media_content_id: 8v9V6oNGAvw + media_content_type: track + shuffle: 'off' + repeat: 'off' + + # Song: Gummy Bear + 04-6C-29-3A-B4-6D-80: + media_content_id: n-PzpfWclIE + media_content_type: track + shuffle: 'off' + repeat: 'off' + + # Song: Yellow Submarine + 04-CE-D2-3A-B4-6D-80: + media_content_id: j_JaDDcyIIU + media_content_type: track + shuffle: 'off' + repeat: 'off' + + # Song: Day-O + 04-A2-41-3A-B4-6D-80: + media_content_id: DYYkJ0kwNss + media_content_type: track + shuffle: 'off' + repeat: 'off' + + # Song: We Are Family + 04-2B-23-3A-B4-6D-81: + media_content_id: jdsqht1m1rE + media_content_type: track + shuffle: 'off' + repeat: 'off' + + # Song: The Cat Came Back + 04-63-CB-3A-B4-6D-81: + media_content_id: LjMffHG1V_Q + media_content_type: track + shuffle: 'off' + repeat: 'off' + + # Song: Ooga Chaka + 04-7A-CC-3A-B4-6D-81: + media_content_id: 7q0UTFq-o-o + media_content_type: track + shuffle: 'off' + repeat: 'off' + + # Song: Big Girls Don't Cry + 04-6F-2D-3A-B4-6D-80: + media_content_id: HV-9NaF4KXE + media_content_type: track + shuffle: 'off' + repeat: 'off' + + # Song: Walk the Dinosaur + 04-A3-A9-3A-B4-6D-80: + media_content_id: 3CA9prE6pKs + media_content_type: track + shuffle: 'off' + repeat: 'off' + + # Room: Master Bathroom + 04-57-86-8A-21-6E-81: + media_content_id: MPREb_iNWH4dO6PQO + media_content_type: album + shuffle: 'off' + repeat: 'off' + # Song: Kids Playlist + 04-69-CA-3A-B4-6D-80: + media_content_id: PLtfKVM9o2_5ag5qC9nHxl7tKBvGRnh2HM + media_content_type: playlist + shuffle: 'off' + repeat: 'all' +trigger: + platform: event + event_type: tag_scanned +condition: + # Test that we support this device and tag + - "{{ trigger.event.data.tag_id in tags }}" + - "{{ trigger.event.data.device_id in sources }}" +action: + - variables: + source: "{{ sources[trigger.event.data.device_id] }}" + media_content_id: "{{ tags[trigger.event.data.tag_id].media_content_id }}" + media_content_type: "{{ tags[trigger.event.data.tag_id].media_content_type }}" + shuffle: "{{ tags[trigger.event.data.tag_id].shuffle }}" + repeat: "{{ tags[trigger.event.data.tag_id].repeat }}" + + - service: logbook.log + data_template: + name: Handle Music Tag Scan + entity_id: automation.handle_music_tag_scan + message: > + Tag {{ trigger.event.data.tag_id }} scanned on device {{ trigger.event.data.device_id }} + + - service: media_player.select_source + data: + source: "{{ source }}" + entity_id: media_player.ytube_music_player + + - service: media_player.shuffle_set + data: + shuffle: "{{ shuffle }}" + entity_id: media_player.ytube_music_player + + - service: media_player.repeat_set + data: + repeat: "{{ repeat }}" + entity_id: media_player.ytube_music_player + + - service: media_player.play_media + data: + entity_id: media_player.ytube_music_player + media_content_id: "{{ media_content_id }}" + media_content_type: "{{ media_content_type }}" + - delay: 2 # timeout before we allow processing next scan \ No newline at end of file diff --git a/automations/things/handle_tag_scan_example.yaml b/automations/things/handle_tag_scan_example.yaml new file mode 100644 index 0000000..662861d --- /dev/null +++ b/automations/things/handle_tag_scan_example.yaml @@ -0,0 +1,81 @@ +# Note, this is using new automation features introduced in Home Assistant 0.115 +id: handle_tag_scan_example +alias: Handle Tag Scan Example +initial_state: off +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent +variables: + # Map scanner device ID to media player entity ID + sources: + 299e280bcc3579ca9b3ef714677dbf9b: nursery_hub + 75060fd1afdd90be: front_room_hub + # Map tag ID to content + tags: + # Song: Wimoweh + 04-59-32-3A-B4-6D-81: + media_content_id: hL1m4__BUPs + media_content_type: track + shuffle: 'off' + repeat: 'off' + # Song: Three Little Birds + 04-1D-6D-3A-B4-6D-80: + media_content_id: g3U6YQiIHc0 + media_content_type: track + shuffle: 'off' + repeat: 'off' + # Song: Don't Worry Be Happy + 04-D4-9A-3A-B4-6D-80: + media_content_id: qTuntvl6oLQ + media_content_type: track + shuffle: 'off' + repeat: 'off' + # Room: Master Bathroom + 04-57-86-8A-21-6E-81: + media_content_id: MPREb_iNWH4dO6PQO + media_content_type: album + shuffle: 'off' + repeat: 'off' +trigger: + platform: event + event_type: tag_scanned +condition: + # Test that we support this device and tag + - "{{ trigger.event.data.tag_id in tags }}" + - "{{ trigger.event.data.device_id in sources }}" +action: + - variables: + source: "{{ sources[trigger.event.data.device_id] }}" + media_content_id: "{{ tags[trigger.event.data.tag_id].media_content_id }}" + media_content_type: "{{ tags[trigger.event.data.tag_id].media_content_type }}" + shuffle: "{{ tags[trigger.event.data.tag_id].shuffle }}" + repeat: "{{ tags[trigger.event.data.tag_id].repeat }}" + + - service: logbook.log + data_template: + name: Handle Tag Scan Example + entity_id: automation.handle_tag_scan_example + message: > + Tag {{ trigger.event.data.tag_id }} scanned on device {{ trigger.event.data.device_id }} + + - service: media_player.select_source + data: + source: "{{ source }}" + entity_id: media_player.ytube_music_player + + - service: media_player.shuffle_set + data: + shuffle: "{{ shuffle }}" + entity_id: media_player.ytube_music_player + + - service: media_player.repeat_set + data: + repeat: "{{ repeat }}" + entity_id: media_player.ytube_music_player + + - service: media_player.play_media + data: + entity_id: media_player.ytube_music_player + media_content_id: "{{ media_content_id }}" + media_content_type: "{{ media_content_type }}" + - delay: 2 # timeout before we allow processing next scan \ No newline at end of file diff --git a/automations/things/handle_video_tag_scan.yaml b/automations/things/handle_video_tag_scan.yaml new file mode 100644 index 0000000..191aa3d --- /dev/null +++ b/automations/things/handle_video_tag_scan.yaml @@ -0,0 +1,74 @@ +# Note, this is using new automation features introduced in Home Assistant 0.115 +id: handle_video_tag_scan +alias: Handle Video Tag Scan +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent +variables: + # Map scanner device ID to media player entity ID + devices: + 299e280bcc3579ca9b3ef714677dbf9b: media_player.nursery_hub + + # Map tag ID to content + tags: + # Video: Super Wings + 04-F9-95-3A-B4-6D-80: + app_name: "youtube" + video_id: "hx7fp8Kq_lY" + playlist_id: "PL-nQOC8BAGD0JLCSGiaJhOPFwI46fOARp" + + # Video: BabyBus + 04-BB-1B-3A-B4-6D-80: + app_name: "youtube" + video_id: "mGN-NxX4LrA" + playlist_id: "PLPA49Pz3BAxMDFKmtvn9MlPUKmEz2q1D1" + + # Video: NumberBlocks + 04-F5-0D-3A-B4-6D-84: + app_name: "youtube" + video_id: "c2GN65bckFw" + playlist_id: "" + + # Video: Cocomelon + 04-28-EB-3A-B4-6D-81: + app_name: "youtube" + video_id: "wwosJXWGWRY" + playlist_id: "PLT1rvk7Trkw6-eCetnOs60kLGdmcHhyj0" + + 04-EC-41-3A-B4-6D-80: + app_name: "youtube" + video_id: "qJQjb2wbn-I" + playlist_id: "PLzgk_uTg08P9hCg4AUSY88m3dDwo55pp9" + +trigger: + platform: event + event_type: tag_scanned +condition: + # Test that we support this device and tag + - "{{ trigger.event.data.tag_id in tags }}" + - "{{ trigger.event.data.device_id in devices }}" +action: + - variables: + device: "{{ devices[trigger.event.data.device_id] }}" + app_name: "{{ tags[trigger.event.data.tag_id].app_name }}" + video_id: "{{ tags[trigger.event.data.tag_id].video_id }}" + playlist_id: "{{ tags[trigger.event.data.tag_id].playlist_id }}" + + - service: logbook.log + data_template: + name: Handle Video Tag Scan + entity_id: automation.handle_video_tag_scan + message: > + Tag {{ trigger.event.data.tag_id }} scanned on device {{ trigger.event.data.device_id }} + + - service: media_player.play_media + data: + entity_id: "{{ device }}" + media_content_id: ' + { + "app_name": "{{ app_name }}", + "media_id": "{{ video_id }}", + "playlist_id": "{{ playlist_id }}" + }' + media_content_type: cast + - delay: 2 # timeout before we allow processing next scan \ No newline at end of file diff --git a/automations/things/keurig_done.yaml b/automations/things/keurig_done.yaml new file mode 100644 index 0000000..ef64a85 --- /dev/null +++ b/automations/things/keurig_done.yaml @@ -0,0 +1,63 @@ +alias: KCup Done Brewing +id: kcup_done_brewing +description: "Keurig just finished" +trigger: + - platform: state + entity_id: binary_sensor.keurig + from: "on" + to: "off" + +condition: + - alias: "The carafe is off" + condition: state + entity_id: binary_sensor.keurig_carafe + state: "off" + - condition: state + entity_id: input_boolean.allow_announcements + state: "on" + +action: + - choose: + - alias: "The home is occupied, there are no meetings, and the kids are not in bed" + conditions: + - alias: "The kitchen is not occupied" + condition: state + entity_id: binary_sensor.kitchen_occupied + state: "off" + + - condition: or + conditions: + - condition: and + conditions: + - alias: "The home is occupied" + condition: state + entity_id: input_boolean.home_occupied + state: "on" + + - alias: "Pixel 4 not in_communication and its not the kids bedtime" + condition: not + conditions: + - condition: state + entity_id: sensor.pixel_7_audio_mode + state: in_communication + - condition: state + entity_id: sensor.pixel_7_audio_mode + state: in_call + - condition: state + entity_id: input_boolean.kids_bedtime + state: "on" + + - condition: state + entity_id: media_player.ytube_music_player + state: "playing" + sequence: + - alias: "Announce that the coffee is ready" + service: script.make_clever_announcement + data: + media_content_id: media-source://media_source/local/Sounds/tts/coffee_ready.mp3 + + - alias: "Consume K-Cup" + service: input_button.press + data: {} + target: + entity_id: input_button.grocy_consume_kcup diff --git a/automations/things/kitchen_fridge_door.yaml b/automations/things/kitchen_fridge_door.yaml new file mode 100644 index 0000000..0abdcc8 --- /dev/null +++ b/automations/things/kitchen_fridge_door.yaml @@ -0,0 +1,63 @@ +alias: Close Kitchen Fridge Door +id: close_kitchen_fridge_door +description: "Alert to close the kitchen fridge door" +trigger: + - platform: state + entity_id: binary_sensor.close_kitchen_fridge + from: "off" + to: "on" + + - platform: homeassistant + event: start + +condition: + - alias: "The home is occupied" + condition: state + entity_id: input_boolean.home_occupied + state: "on" + + - alias: "Its not bedtime" + condition: state + entity_id: input_boolean.bedtime + state: "off" + +action: + - repeat: + while: "{{ is_state('binary_sensor.close_kitchen_fridge','on') }}" + sequence: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.allow_announcements + state: "on" + + - condition: not + conditions: + - condition: state + entity_id: sensor.pixel_7_audio_mode + state: in_communication + - condition: state + entity_id: sensor.pixel_7_audio_mode + state: in_call + - condition: state + entity_id: input_boolean.kids_bedtime + state: "on" + + sequence: + - service: script.make_clever_announcement + data: + media_content_id: media-source://media_source/local/Sounds/tts/kitchen_fridge_open_too_long.mp3 + + - choose: + - conditions: + - condition: state + entity_id: input_boolean.clint_home + state: "off" + + sequence: + - service: notify.mobile_app_pixel_7 + data: + message: The kitchen fridge has been open for too long! + + - delay: + minutes: 5 diff --git a/automations/things/master_bedroom_dimmer_on.yaml b/automations/things/master_bedroom_dimmer_on.yaml new file mode 100644 index 0000000..10f4c94 --- /dev/null +++ b/automations/things/master_bedroom_dimmer_on.yaml @@ -0,0 +1,24 @@ +id: master_bedroom_dimmer_on +alias: Master Bedroom Dimmer On +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent + +trigger: + - platform: state + entity_id: light.master_bedroom_dimmer_main + +condition: + - alias: "Master Bedroom Dimmer Less Than 255" + condition: numeric_state + entity_id: light.master_bedroom_dimmer_main + attribute: brightness + below: 255 + +action: + - alias: "Set Master Bedroom Dimmer to 255" + service: light.turn_on + target: + entity_id: light.master_bedroom_dimmer_main + data: + brightness: 255 \ No newline at end of file diff --git a/automations/things/media_testing_debug.yaml b/automations/things/media_testing_debug.yaml new file mode 100644 index 0000000..296aa60 --- /dev/null +++ b/automations/things/media_testing_debug.yaml @@ -0,0 +1,883 @@ +alias: Media Testing Debug +id: automation_media_testing_debug +description: "" +trigger: + - platform: zone + entity_id: device_tracker.bridget_s_fire_wifi + zone: zone.plainwell + event: enter +condition: [] +action: + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12723 + media_content_type: audio/mpeg + metadata: + title: goodnight_emmett_bridget_ebin + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12723.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16647 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12726 + media_content_type: audio/mpeg + metadata: + title: goodnight_emmett_bridget + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12726.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16647 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12716 + media_content_type: audio/mpeg + metadata: + title: goodnight_emmett_ebin + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12716.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16647 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12728 + media_content_type: audio/mpeg + metadata: + title: goodnight_emmett + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12728.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16647 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12725 + media_content_type: audio/mpeg + metadata: + title: goodnight_bridget_ebin + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12725.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16647 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12718 + media_content_type: audio/mpeg + metadata: + title: goodnight_bridget + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12718.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16647 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12717 + media_content_type: audio/mpeg + metadata: + title: goodnight_ebin + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12717.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16647 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12729 + media_content_type: audio/mpeg + metadata: + title: taking_afternoon_meds + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12729.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16647 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12727 + media_content_type: audio/mpeg + metadata: + title: taking_morning_meds + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12727.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16647 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12715 + media_content_type: audio/mpeg + metadata: + title: coffee_ready + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12701.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16647 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12724 + media_content_type: audio/mpeg + metadata: + title: dishwasher_done + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12724.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16647 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12720 + media_content_type: audio/mpeg + metadata: + title: dryer_done + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12720.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16647 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12721 + media_content_type: audio/mpeg + metadata: + title: washing_machine_done + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12721.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16647 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12722 + media_content_type: audio/mpeg + metadata: + title: meds_not_needed + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12722.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16647 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12711 + media_content_type: audio/mpeg + metadata: + title: alarm clock beeps + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12711.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16646 + - service: media_player.play_media + target: + entity_id: media_player.front_room_hub + data: + media_content_id: media-source://camera/camera.frigate_cam08 + media_content_type: image/jpeg + metadata: + title: Frigate Cam08 + thumbnail: /api/camera_proxy/camera.frigate_cam08 + media_class: video + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://camera + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12744 + media_content_type: audio/mpeg + metadata: + title: Babbling Brook + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12744.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16648 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12745 + media_content_type: audio/mpeg + metadata: + title: Female Baby Shusher + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12745.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16648 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12736 + media_content_type: audio/mpeg + metadata: + title: Male Baby Shusher + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12736.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16648 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12741 + media_content_type: audio/mpeg + metadata: + title: Country Nights + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12741.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16648 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12743 + media_content_type: audio/mpeg + metadata: + title: Fireplace + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12743.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16648 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12731 + media_content_type: audio/mpeg + metadata: + title: Forest + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12731.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16648 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12734 + media_content_type: audio/mpeg + metadata: + title: Female Lullaby + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12734.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16648 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12739 + media_content_type: audio/mpeg + metadata: + title: Male Lullaby + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12739.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16648 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12747 + media_content_type: audio/mpeg + metadata: + title: Ocean + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12747.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16648 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12746 + media_content_type: audio/mpeg + metadata: + title: Oscillating Fan + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12746.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16648 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12735 + media_content_type: audio/mpeg + metadata: + title: Pink Noise + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12735.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16648 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12737 + media_content_type: audio/mpeg + metadata: + title: Rain + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12737.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16648 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12738 + media_content_type: audio/mpeg + metadata: + title: River + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12738.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16648 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12748 + media_content_type: audio/mpeg + metadata: + title: Female Rock-a-bye Baby + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12748.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16648 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12733 + media_content_type: audio/mpeg + metadata: + title: Male Rock-a-bye Baby + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12733.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16648 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12740 + media_content_type: audio/mpeg + metadata: + title: Thunderstorm + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12740.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16648 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12742 + media_content_type: audio/mpeg + metadata: + title: Female Twinkle Twinkle + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12742.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16648 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12732 + media_content_type: audio/mpeg + metadata: + title: Male Twinkle Twinkle + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12732.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16648 + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12730 + media_content_type: audio/mpeg + metadata: + title: White Noise + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12730.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16644 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16648 + - service: media_player.play_media + target: + entity_id: media_player.front_room_hub + data: + media_content_id: cams-yml/nursery-camera + media_content_type: lovelace + metadata: + title: Nursery Camera + thumbnail: https://brands.home-assistant.io/_/lovelace/logo.png + media_class: app + children_media_class: null + navigateIds: + - {} + - media_content_type: lovelace + media_content_id: "" + - media_content_type: lovelace + media_content_id: cams-yml + - service: media_player.play_media + target: + entity_id: media_player.computer_area_hub + data: + media_content_id: media-source://dlna_dms/dream_media/:22$@12719 + media_content_type: audio/mpeg + metadata: + title: almost_bedtime + thumbnail: >- + http://192.168.1.10:50002/transcoder/jpegtnscaler.cgi/folderart/12719.jpg + media_class: music + children_media_class: null + navigateIds: + - {} + - media_content_type: app + media_content_id: media-source://dlna_dms + - media_content_type: object.container + media_content_id: media-source://dlna_dms/dream_media/:21 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16996 + - media_content_type: object.container.storageFolder + media_content_id: media-source://dlna_dms/dream_media/:22$16999 +mode: single diff --git a/automations/things/new_mail.yaml b/automations/things/new_mail.yaml new file mode 100644 index 0000000..378102c --- /dev/null +++ b/automations/things/new_mail.yaml @@ -0,0 +1,45 @@ +alias: New Mail +id: automation_new_mail + +# Removed 'No Mail' trigger and action because mail should only be considered "checked" once the boolean has been turned off + +trigger: + - id: new_mail + platform: numeric_state + entity_id: sensor.mail_usps_mail + above: 0 + + - id: no_mail + platform: numeric_state + entity_id: sensor.mail_usps_mail + below: 1 + + - platform: homeassistant + event: start + + - platform: event + event_type: automation_reloaded + +action: + - choose: + - conditions: + - condition: numeric_state + entity_id: sensor.mail_usps_mail + above: 0 + + sequence: + - service: input_boolean.turn_on + target: + entity_id: input_boolean.incoming_mail + + - conditions: + - condition: numeric_state + entity_id: sensor.mail_usps_mail + below: 1 + + sequence: + - service: input_boolean.turn_off + target: + entity_id: input_boolean.incoming_mail + + diff --git a/automations/things/notify_frigate_events.yaml b/automations/things/notify_frigate_events.yaml new file mode 100644 index 0000000..aae8c6e --- /dev/null +++ b/automations/things/notify_frigate_events.yaml @@ -0,0 +1,14 @@ +alias: Notify of Frigate Events +id: automation_notify_of_frigate_events +initial_state: 'off' +trigger: + platform: mqtt + topic: frigate/events +action: + - service: notify.mobile_app_pixel_7 + data: + message: 'A {{trigger.payload_json["after"]["label"]}} was detected.' + data: + image: 'https://automation.clintweaver.com/api/frigate/notifications/{{trigger.payload_json["after"]["id"]}}/thumbnail.jpg?format=android' + tag: '{{trigger.payload_json["after"]["id"]}}' + when: '{{trigger.payload_json["after"]["start_time"]|int}}' \ No newline at end of file diff --git a/automations/things/nursery_dimmer_on.yaml b/automations/things/nursery_dimmer_on.yaml new file mode 100644 index 0000000..bd3ed07 --- /dev/null +++ b/automations/things/nursery_dimmer_on.yaml @@ -0,0 +1,24 @@ +id: nursery_dimmer_on +alias: Nursery Dimmer On +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent + +trigger: + - platform: state + entity_id: light.nursery_dimmer_main + +condition: + - alias: "Nursery Dimmer Less Than 255" + condition: numeric_state + entity_id: light.nursery_dimmer_main + attribute: brightness + below: 255 + +action: + - alias: "Set Nursery Dimmer to 255" + service: light.turn_on + target: + entity_id: light.nursery_dimmer_main + data: + brightness: 255 \ No newline at end of file diff --git a/automations/things/nursery_wled_changed.yaml b/automations/things/nursery_wled_changed.yaml new file mode 100644 index 0000000..230a043 --- /dev/null +++ b/automations/things/nursery_wled_changed.yaml @@ -0,0 +1,24 @@ +id: nursery_wled_changed +alias: Nursery WLED Changed +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent + +trigger: + - platform: state + entity_id: input_select.nursery_wled + +action: + #- alias: "Clear segment first" + # service: rest_command.bridget_clear + + #- alias: "Call new WLED segment settings" + # service: "rest_command.bridget_{{states('input_select.bridget_wled') | string | lower | replace(' ','_') }}" + - alias: "Update wled presets for both beds" + service: select.select_option + data: + option: "{{states('input_select.nursery_wled')}}" + target: + entity_id: + - select.black_bed_wled_preset + - select.white_bed_wled_preset \ No newline at end of file diff --git a/automations/things/reset_climate.yaml b/automations/things/reset_climate.yaml new file mode 100644 index 0000000..c5af5e6 --- /dev/null +++ b/automations/things/reset_climate.yaml @@ -0,0 +1,27 @@ +alias: Reset Climate +id: automation_reset_climate + +trigger: + - platform: state + entity_id: group.my_hvac_affecting_openings + to: 'off' + for: '00:00:03' + +condition: + - condition: state + entity_id: group.my_hvac_affecting_openings + state: 'off' + - condition: state + entity_id: climate.thermostat + state: 'off' + +action: + - service: climate.turn_on + target: + entity_id: climate.thermostat + + - service: climate.set_preset_mode + target: + entity_id: climate.thermostat + data: + preset_mode: 'auto' \ No newline at end of file diff --git a/automations/things/restart_modem.yaml b/automations/things/restart_modem.yaml new file mode 100644 index 0000000..71525a5 --- /dev/null +++ b/automations/things/restart_modem.yaml @@ -0,0 +1,53 @@ +id: automation_restart_modem +alias: Restart Modem +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent + +trigger: + - id: button_pressed + platform: state + entity_id: input_button.restart_modem + + - id: boolean_turned_on + platform: state + entity_id: input_boolean.restart_modem + from: 'off' + to: 'on' + +action: + - choose: + - conditions: + - condition: trigger + id: button_pressed + sequence: + - alias: Create a persistent notification for testing + service: persistent_notification.create + data: + message: "The modem would have restarted at {{now()}}" + title: "Modem restarting" + + - conditions: + - condition: trigger + id: boolean_turned_on + sequence: + - alias: Turn off switch controlling modem + service: switch.turn_off + data: {} + target: + entity_id: switch.furnace_room_plug + + - alias: Wait for 10 seconds + delay: '00:00:10' + + - alias: Turn on switch controlling modem + service: switch.turn_on + data: {} + target: + entity_id: switch.furnace_room_plug + + - alias: Turn of input_boolean controlling the restart + service: input_boolean.turn_off + data: {} + target: + entity_id: input_boolean.restart_modem \ No newline at end of file diff --git a/automations/things/restart_network.yaml b/automations/things/restart_network.yaml new file mode 100644 index 0000000..4b66531 --- /dev/null +++ b/automations/things/restart_network.yaml @@ -0,0 +1,69 @@ +id: automation_restart_network +alias: Restart Network +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent + +trigger: + - id: button_pressed + platform: state + entity_id: input_button.restart_network + + - id: boolean_turned_on + platform: state + entity_id: input_boolean.restart_network + from: 'off' + to: 'on' + +action: + - choose: + - conditions: + - condition: trigger + id: button_pressed + sequence: + - alias: Create a persistent notification for testing + service: persistent_notification.create + data: + message: "The network would have restarted at {{now()}}" + title: "Network restarting" + + - conditions: + - condition: trigger + id: boolean_turned_on + sequence: + - alias: Turn off switch controlling router + service: switch.turn_off + data: {} + target: + entity_id: switch.computer_area_double_power_plug_router + + - alias: Turn off switch controlling modem + service: switch.turn_off + data: {} + target: + entity_id: switch.computer_area_double_power_plug_modem + + - alias: Waiting for 10 seconds + delay: '00:00:10' + + - alias: Turn on switch controlling modem + service: switch.turn_on + data: {} + target: + entity_id: switch.computer_area_double_power_plug_modem + + - alias: Waiting for 10 seconds + delay: '00:00:10' + + - alias: Turn on switch controlling router + service: switch.turn_on + data: {} + target: + entity_id: switch.computer_area_double_power_plug_router + + - alias: Turn of input_boolean controlling the restart + service: input_boolean.turn_off + data: {} + target: + entity_id: input_boolean.restart_network + diff --git a/automations/things/restart_router.yaml b/automations/things/restart_router.yaml new file mode 100644 index 0000000..823b0d2 --- /dev/null +++ b/automations/things/restart_router.yaml @@ -0,0 +1,55 @@ +id: automation_restart_router +alias: Restart Router +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent + +trigger: + - id: button_pressed + platform: state + entity_id: input_button.restart_router + + - id: boolean_turned_on + platform: state + entity_id: input_boolean.restart_router + from: 'off' + to: 'on' + +action: + - choose: + - conditions: + - condition: trigger + id: button_pressed + sequence: + - alias: Create a persistent notification for testing + service: persistent_notification.create + data: + message: "The router would have restarted at {{now()}}" + title: "Router restarting" + - conditions: + - condition: trigger + id: boolean_turned_on + sequence: + - alias: Turn off switch controlling router + service: switch.turn_off + data: {} + target: + entity_id: switch.computer_area_double_power_plug_router + + - alias: Wait for 10 seconds + delay: '00:00:10' + + - alias: Turn on switch controlling router + service: switch.turn_on + data: {} + target: + entity_id: switch.computer_area_double_power_plug_router + + - alias: Turn of input_boolean controlling the restart + service: input_boolean.turn_off + data: {} + target: + entity_id: input_boolean.restart_router + + + diff --git a/automations/things/steam_vr_off copy.yaml b/automations/things/steam_vr_off copy.yaml new file mode 100644 index 0000000..3585e9b --- /dev/null +++ b/automations/things/steam_vr_off copy.yaml @@ -0,0 +1,22 @@ +id: steam_vr_on +alias: Steam VR On +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent + +trigger: + - platform: numeric_state + entity_id: sensor.dreambox_steamvractive + above: 0 + +condition: + - alias: "VR switch is powered off" + condition: state + entity_id: switch.virtual_reality + state: 'off' + +action: + - alias: "Turn on the VR Headset plug" + service: switch.turn_on + target: + entity_id: switch.virtual_reality diff --git a/automations/things/steam_vr_off.yaml b/automations/things/steam_vr_off.yaml new file mode 100644 index 0000000..d04cec6 --- /dev/null +++ b/automations/things/steam_vr_off.yaml @@ -0,0 +1,24 @@ +id: steam_vr_off +alias: Steam VR Off +mode: single +# Hide warnings when triggered while in delay. +max_exceeded: silent + +trigger: + - platform: numeric_state + entity_id: sensor.dreambox_steamvractive + below: 1 + for: + seconds: 30 + +condition: + - alias: "VR switch is powered on" + condition: state + entity_id: switch.virtual_reality + state: 'on' + +action: + - alias: "Turn off the VR Headset plug" + service: switch.turn_off + target: + entity_id: switch.virtual_reality diff --git a/automations/things/trash_can/take_trash_out.yaml b/automations/things/trash_can/take_trash_out.yaml new file mode 100644 index 0000000..2f219e9 --- /dev/null +++ b/automations/things/trash_can/take_trash_out.yaml @@ -0,0 +1,36 @@ +alias: Take Trash out +id: automation_take_trash_out +trigger: + - platform: calendar + id: trash-day-start + event: start + entity_id: calendar.trash_schedule + offset: -18:00:00 + + - platform: calendar + id: trash-day-end + event: end + entity_id: calendar.trash_schedule + offset: 12:00:00 + +# condition: +# - condition: state +# entity_id: input_boolean.trash_out +# state: 'off' +# - condition: or +# conditions: +# - condition: state +# entity_id: sensor.general_waste +# state: 'tomorrow' +# - condition: state +# entity_id: sensor.general_waste +# state: 'today' + +action: +- choose: + - conditions: + - condition: trigger + id: trash-day-end + sequence: + - service: input_boolean.turn_off + entity_id: input_boolean.trash_out diff --git a/automations/things/tumble_dryer_done.yaml b/automations/things/tumble_dryer_done.yaml new file mode 100644 index 0000000..511c0d7 --- /dev/null +++ b/automations/things/tumble_dryer_done.yaml @@ -0,0 +1,107 @@ +alias: Tumble Dryer Done +id: tumble_dryer_done +description: "Dryer just finished" +trigger: + - platform: state + entity_id: input_boolean.fold_clothes + from: "off" + to: "on" + + - platform: homeassistant + event: start + +condition: + - alias: "The home is occupied" + condition: state + entity_id: input_boolean.home_occupied + state: "on" + + - alias: "Its not bedtime" + condition: state + entity_id: input_boolean.bedtime + state: "off" + + - condition: state + entity_id: input_boolean.allow_announcements + state: "on" + +action: + - repeat: + while: "{{ is_state('input_boolean.fold_clothes','on') }}" + sequence: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.clint_home + state: "on" + - condition: state + entity_id: binary_sensor.utility_room_occupied + state: "off" + - condition: not + conditions: + - condition: state + entity_id: sensor.pixel_7_audio_mode + state: in_communication + - condition: state + entity_id: sensor.pixel_7_audio_mode + state: in_call + - condition: state + entity_id: input_boolean.kids_bedtime + state: "on" + - condition: state + entity_id: input_boolean.bedtime + state: "on" + # - condition: state + # entity_id: input_boolean.announcement_pending + # state: 'on' + + sequence: + - service: input_boolean.turn_off + data: {} + target: + entity_id: + - input_boolean.announce_dryer_done + - service: input_boolean.turn_on + data: {} + target: + entity_id: + - input_boolean.announce_dryer_done + # - input_boolean.announcement_pending + + - choose: + - conditions: + - "{{states('sensor.dreambox_audio_audio_sessions') | int(default=0) > 0 or is_state('binary_sensor.dreambox_recently_active','on') }}" + + sequence: + - service: notify.dreambox + data: + message: The dryer is done + + - choose: + - conditions: + - "{{states('sensor.dreamsurface_audio_audio_sessions') | int(default=0) > 0 or is_state('binary_sensor.dreamsurface_recently_active','on') }}" + + sequence: + - service: notify.dreamsurface + data: + message: The dryer is done + + - choose: + - conditions: + - condition: state + entity_id: input_boolean.clint_home + state: "off" + + sequence: + - service: notify.mobile_app_pixel_7 + data: + message: The dryer is done + + - delay: + minutes: 15 + + - service: input_boolean.turn_off + data: {} + target: + entity_id: + - input_boolean.announce_dryer_done diff --git a/automations/things/washing_machine_done.yaml b/automations/things/washing_machine_done.yaml new file mode 100644 index 0000000..1a355cc --- /dev/null +++ b/automations/things/washing_machine_done.yaml @@ -0,0 +1,107 @@ +alias: Washing Machine Done +id: washing_machine_done +description: "Washing machine just finished" +trigger: + - platform: state + entity_id: input_boolean.swap_laundry + from: "off" + to: "on" + + - platform: homeassistant + event: start + +condition: + - alias: "The home is occupied" + condition: state + entity_id: input_boolean.home_occupied + state: "on" + + - alias: "Its not bedtime" + condition: state + entity_id: input_boolean.bedtime + state: "off" + + - condition: state + entity_id: input_boolean.allow_announcements + state: "on" + +action: + - repeat: + while: "{{ is_state('input_boolean.swap_laundry','on') }}" + sequence: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.clint_home + state: "on" + - condition: state + entity_id: binary_sensor.utility_room_occupied + state: "off" + - condition: not + conditions: + - condition: state + entity_id: sensor.pixel_7_audio_mode + state: in_communication + - condition: state + entity_id: sensor.pixel_7_audio_mode + state: in_call + - condition: state + entity_id: input_boolean.kids_bedtime + state: "on" + - condition: state + entity_id: input_boolean.bedtime + state: "on" + # - condition: state + # entity_id: input_boolean.announcement_pending + # state: 'on' + + sequence: + - service: input_boolean.turn_off + data: {} + target: + entity_id: + - input_boolean.announce_washing_machine_done + - service: input_boolean.turn_on + data: {} + target: + entity_id: + - input_boolean.announce_washing_machine_done + # - input_boolean.announcement_pending + + - choose: + - conditions: + - "{{states('sensor.dreambox_audio_audio_sessions') | int(default=0) > 0 or is_state('binary_sensor.dreambox_recently_active','on') }}" + + sequence: + - service: notify.dreambox + data: + message: The washing machine is done + + - choose: + - conditions: + - "{{states('sensor.dreamsurface_audio_audio_sessions') | int(default=0) > 0 or is_state('binary_sensor.dreamsurface_recently_active','on') }}" + + sequence: + - service: notify.dreamsurface + data: + message: The washing machine is done + + - choose: + - conditions: + - condition: state + entity_id: input_boolean.clint_home + state: "off" + + sequence: + - service: notify.mobile_app_pixel_7 + data: + message: The washing machine is done + + - delay: + minutes: 15 + + - service: input_boolean.turn_off + data: {} + target: + entity_id: + - input_boolean.announce_washing_machine_done diff --git a/automations/time_of_day/early_afternoon_on.yaml b/automations/time_of_day/early_afternoon_on.yaml new file mode 100644 index 0000000..28269dd --- /dev/null +++ b/automations/time_of_day/early_afternoon_on.yaml @@ -0,0 +1,31 @@ +id: set_house_to_early_afternoon +alias: Set House to Early Afternoon +mode: single +# Testing if this will update, save, and push just fine + +trigger: + - platform: state + entity_id: binary_sensor.early_afternoon + to: 'on' + +condition: + - condition: or + conditions: + - condition: state + entity_id: binary_sensor.early_afternoon + state: 'on' + - condition: state + entity_id: input_select.time_of_day + state: Early Afternoon + +action: + - service: homeassistant.turn_on + entity_id: + - input_boolean.clint_needs_pm_meds + + - service: input_select.select_option + data: + entity_id: input_select.time_of_day + option: Early Afternoon + + - delay: '00:00:30' \ No newline at end of file diff --git a/automations/time_of_day/early_evening_on.yaml b/automations/time_of_day/early_evening_on.yaml new file mode 100644 index 0000000..cc8a4e3 --- /dev/null +++ b/automations/time_of_day/early_evening_on.yaml @@ -0,0 +1,26 @@ +id: set_house_to_early_evening +alias: Set House to Early Evening +mode: single + +trigger: + - platform: state + entity_id: binary_sensor.early_evening + to: 'on' + +condition: + - condition: or + conditions: + - condition: state + entity_id: binary_sensor.early_evening + state: 'on' + - condition: state + entity_id: input_select.time_of_day + state: Early Evening + +action: + - service: input_select.select_option + data: + entity_id: input_select.time_of_day + option: Early Evening + + - delay: '00:00:30' \ No newline at end of file diff --git a/automations/time_of_day/early_morning_on.yaml b/automations/time_of_day/early_morning_on.yaml new file mode 100644 index 0000000..911dd23 --- /dev/null +++ b/automations/time_of_day/early_morning_on.yaml @@ -0,0 +1,33 @@ +id: set_house_to_early_morning +alias: Set House to Early Morning +mode: single + +trigger: + - platform: state + entity_id: binary_sensor.early_morning + to: 'on' + +condition: + - condition: or + conditions: + - condition: state + entity_id: binary_sensor.early_morning + state: 'on' + - condition: state + entity_id: input_select.time_of_day + state: Early Morning +action: + - service: input_select.select_option + data: + entity_id: input_select.time_of_day + option: Early Morning + + - service: homeassistant.turn_on + entity_id: + - input_boolean.clint_needs_am_meds + + - service: homeassistant.turn_off + data: + entity_id: + - input_boolean.mail_checked + - delay: '00:00:30' \ No newline at end of file diff --git a/automations/time_of_day/evening_on.yaml b/automations/time_of_day/evening_on.yaml new file mode 100644 index 0000000..094e016 --- /dev/null +++ b/automations/time_of_day/evening_on.yaml @@ -0,0 +1,26 @@ +id: set_house_to_evening +alias: Set House to Evening +mode: single + +trigger: + - platform: state + entity_id: binary_sensor.evening + to: 'on' + +condition: + - condition: or + conditions: + - condition: state + entity_id: binary_sensor.evening + state: 'on' + - condition: state + entity_id: input_select.time_of_day + state: Evening + +action: + - service: input_select.select_option + data: + entity_id: input_select.time_of_day + option: Evening + + - delay: '00:00:30' \ No newline at end of file diff --git a/automations/time_of_day/late_afternoon_on.yaml b/automations/time_of_day/late_afternoon_on.yaml new file mode 100644 index 0000000..12637b3 --- /dev/null +++ b/automations/time_of_day/late_afternoon_on.yaml @@ -0,0 +1,26 @@ +id: set_house_to_late_afternoon +alias: Set House to Late Afternoon +mode: single + +trigger: + - platform: state + entity_id: binary_sensor.late_afternoon + to: 'on' + +condition: + - condition: or + conditions: + - condition: state + entity_id: binary_sensor.late_afternoon + state: 'on' + - condition: state + entity_id: input_select.time_of_day + state: Late Afternoon + +action: + - service: input_select.select_option + data: + entity_id: input_select.time_of_day + option: Late Afternoon + + - delay: '00:00:30' \ No newline at end of file diff --git a/automations/time_of_day/late_evening_on.yaml b/automations/time_of_day/late_evening_on.yaml new file mode 100644 index 0000000..452f460 --- /dev/null +++ b/automations/time_of_day/late_evening_on.yaml @@ -0,0 +1,76 @@ +id: set_house_to_late_evening +alias: Set House to Late Evening +mode: single + +trigger: + - platform: state + entity_id: binary_sensor.late_evening + to: 'on' + +condition: + - condition: or + conditions: + - condition: state + entity_id: binary_sensor.late_evening + state: 'on' + - condition: state + entity_id: input_select.time_of_day + state: Late Evening + +action: + - service: input_select.select_option + data: + entity_id: input_select.time_of_day + option: Late Evening + + # The kids should be asleep by now... + - choose: + - conditions: + - condition: state + entity_id: input_boolean.emmett_home + state: 'on' + - condition: state + entity_id: input_boolean.emmett_in_bed + state: 'off' + sequence: + - service: homeassistant.turn_on + entity_id: input_boolean.emmett_in_bed + - service: homeassistant.turn_off + entity_id: input_boolean.emmett_is_awake + - choose: + - conditions: + - condition: state + entity_id: input_boolean.bridget_home + state: 'on' + - condition: state + entity_id: input_boolean.bridget_in_bed + state: 'off' + sequence: + - service: homeassistant.turn_on + entity_id: input_boolean.bridget_in_bed + - service: homeassistant.turn_off + entity_id: input_boolean.bridget_is_awake + - choose: + - conditions: + - condition: state + entity_id: input_boolean.ebin_in_bed + state: 'on' + - condition: state + entity_id: input_boolean.ebin_in_bed + state: 'off' + sequence: + - service: homeassistant.turn_on + entity_id: input_boolean.ebin_in_bed + - service: homeassistant.turn_off + entity_id: input_boolean.ebin_is_awake + + - choose: + - conditions: + - condition: state + entity_id: media_player.nursery_hub + state: 'playing' + sequence: + - service: media_player.turn_off + entity_id: media_player.nursery_hub + + - delay: '00:00:30' \ No newline at end of file diff --git a/automations/time_of_day/late_morning_on.yaml b/automations/time_of_day/late_morning_on.yaml new file mode 100644 index 0000000..c206155 --- /dev/null +++ b/automations/time_of_day/late_morning_on.yaml @@ -0,0 +1,119 @@ +id: set_house_to_late_morning +alias: Set House to Late Morning +mode: single + +trigger: + - platform: state + entity_id: binary_sensor.late_morning + to: 'on' + +condition: + - condition: or + conditions: + - condition: state + entity_id: binary_sensor.late_morning + state: 'on' + - condition: state + entity_id: input_select.time_of_day + state: Late Morning + +action: + - service: input_select.select_option + data: + entity_id: input_select.time_of_day + option: Late Morning + + # Everyone should be awake by now... + - choose: + - conditions: + - condition: state + entity_id: input_boolean.clint_home + state: 'on' + - condition: state + entity_id: input_boolean.clint_in_bed + state: 'on' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.clint_in_bed + - service: homeassistant.turn_on + entity_id: input_boolean.clint_is_awake + - choose: + - conditions: + - condition: state + entity_id: input_boolean.emmett_home + state: 'on' + - condition: state + entity_id: input_boolean.emmett_in_bed + state: 'on' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.emmett_in_bed + - service: homeassistant.turn_on + entity_id: input_boolean.emmett_is_awake + - choose: + - conditions: + - condition: state + entity_id: input_boolean.bridget_home + state: 'on' + - condition: state + entity_id: input_boolean.bridget_in_bed + state: 'on' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.bridget_in_bed + - service: homeassistant.turn_on + entity_id: input_boolean.bridget_is_awake + - choose: + - conditions: + - condition: state + entity_id: input_boolean.kristy_in_bed + state: 'on' + - condition: state + entity_id: input_boolean.kristy_in_bed + state: 'on' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.kristy_in_bed + - service: homeassistant.turn_on + entity_id: input_boolean.kristy_is_awake + - choose: + - conditions: + - condition: state + entity_id: input_boolean.marshall_in_bed + state: 'on' + - condition: state + entity_id: input_boolean.marshall_in_bed + state: 'on' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.marshall_in_bed + - service: homeassistant.turn_on + entity_id: input_boolean.marshall_is_awake + - choose: + - conditions: + - condition: state + entity_id: input_boolean.tess_in_bed + state: 'on' + - condition: state + entity_id: input_boolean.tess_in_bed + state: 'on' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.tess_in_bed + - service: homeassistant.turn_on + entity_id: input_boolean.tess_is_awake + - choose: + - conditions: + - condition: state + entity_id: input_boolean.ebin_in_bed + state: 'on' + - condition: state + entity_id: input_boolean.ebin_in_bed + state: 'on' + sequence: + - service: homeassistant.turn_off + entity_id: input_boolean.ebin_in_bed + - service: homeassistant.turn_on + entity_id: input_boolean.ebin_is_awake + + - delay: '00:00:30' \ No newline at end of file diff --git a/automations/time_of_day/morning_on.yaml b/automations/time_of_day/morning_on.yaml new file mode 100644 index 0000000..ac0808f --- /dev/null +++ b/automations/time_of_day/morning_on.yaml @@ -0,0 +1,30 @@ +id: set_house_to_morning +alias: Set House to Morning +mode: single + +trigger: + - platform: state + entity_id: binary_sensor.morning + to: 'on' + +condition: + - condition: or + conditions: + - condition: state + entity_id: binary_sensor.morning + state: 'on' + - condition: state + entity_id: input_select.time_of_day + state: Morning + +action: + - service: input_select.select_option + data: + entity_id: input_select.time_of_day + option: Morning + + + - service: homeassistant.turn_off + entity_id: input_boolean.nursery_asleep + + - delay: '00:00:30' \ No newline at end of file diff --git a/automations/time_of_day/night_on.yaml b/automations/time_of_day/night_on.yaml new file mode 100644 index 0000000..19a0102 --- /dev/null +++ b/automations/time_of_day/night_on.yaml @@ -0,0 +1,53 @@ +id: set_house_to_night +alias: Set House to Night +mode: single + +trigger: + - platform: state + entity_id: binary_sensor.night + to: 'on' + +condition: + - condition: or + conditions: + - condition: state + entity_id: binary_sensor.night + state: 'on' + - condition: state + entity_id: input_select.time_of_day + state: Night + +action: + - service: input_select.select_option + data: + entity_id: input_select.time_of_day + option: Night + + - delay: '00:00:30' + + - choose: + - conditions: + - condition: state + entity_id: input_boolean.marshall_home + state: 'on' + - condition: state + entity_id: input_boolean.marshall_in_bed + state: 'off' + sequence: + - service: homeassistant.turn_on + entity_id: input_boolean.marshall_in_bed + - service: homeassistant.turn_off + entity_id: input_boolean.marshall_is_awake + - choose: + - conditions: + - condition: state + entity_id: input_boolean.tess_in_bed + state: 'on' + - condition: state + entity_id: input_boolean.tess_in_bed + state: 'off' + sequence: + - service: homeassistant.turn_on + entity_id: input_boolean.tess_in_bed + - service: homeassistant.turn_off + entity_id: input_boolean.tess_is_awake \ No newline at end of file diff --git a/automations/time_of_day/set_time_of_day.yaml b/automations/time_of_day/set_time_of_day.yaml new file mode 100644 index 0000000..2637788 --- /dev/null +++ b/automations/time_of_day/set_time_of_day.yaml @@ -0,0 +1,29 @@ +alias: Set Time of Day +id: automation_set_time_of_day +trigger: + - platform: homeassistant + event: start +action: + - service: input_select.select_option + data_template: + entity_id: input_select.time_of_day + option: >- + {% if is_state('binary_sensor.early_morning', 'on') %} + Early Morning + {% elif is_state('binary_sensor.morning', 'on') %} + Morning + {% elif is_state('binary_sensor.late_morning', 'on') %} + Late Morning + {% elif is_state('binary_sensor.early_afternoon', 'on') %} + Early Afternoon + {% elif is_state('binary_sensor.late_afternoon', 'on') %} + Late Afternoon + {% elif is_state('binary_sensor.early_evening', 'on') %} + Early Evening + {% elif is_state('binary_sensor.evening', 'on') %} + Evening + {% elif is_state('binary_sensor.late_evening', 'on') %} + Late Evening + {% else %} + Night + {% endif %} \ No newline at end of file diff --git a/blueprints/automation/Ante987/speaker_volume.yaml b/blueprints/automation/Ante987/speaker_volume.yaml new file mode 100644 index 0000000..ca015cc --- /dev/null +++ b/blueprints/automation/Ante987/speaker_volume.yaml @@ -0,0 +1,85 @@ +blueprint: + name: Set volyme of speakers based of time of day + description: Set volyme to different level on different times a day + domain: automation + input: + daytime_starts: + name: Time of day + description: Change level depending of time of day, Daytime level + default: 07:00:00 + selector: + time: {} + daytime_ends: + name: Time of night + description: Change level depending of time of day, Nighttime level + default: '20:00:00' + selector: + time: {} + volume_day: + name: Set volume day + description: The volume you want your media player to be reset to + default: '0.5' + selector: + number: + min: 0.0 + max: 1.0 + step: 0.1 + mode: slider + volume_night: + name: Set volume night + description: The volume you want your media player to be reset to + default: '0.1' + selector: + number: + min: 0.0 + max: 1.0 + step: 0.1 + mode: slider + filter: + name: Filter players + description: Players not to be reset or not. Only entities are supported, devices + must be expanded! + default: + entity_id: [] + selector: + target: + entity: + domain: media_player + include_exclude: + name: Filter invert + description: Turn off to reset choosen and on to choose all other + default: true + selector: + boolean: {} + source_url: https://gist.github.com/Ante987/80c376901fa5f2bd9d2197734ec49e80 +variables: + filter: !input 'filter' + player: "{% set result = namespace(player=[]) %} {% for state in states.media_player\ + \ %}\n {% if include_exclude == 'true' %}\n {% if not state.state == 'playing'\ + \ and not state.entity_id in filter.entity_id %}\n {% set result.player =\ + \ result.player + [state.entity_id] %}\n {% endif %}\n {% else %}\n {%\ + \ if state.state != 'playing' and state.entity_id in filter.entity_id %}\n \ + \ {% set result.player = result.player + [state.entity_id] %}\n {% endif\ + \ %}\n {% endif %}\n{% endfor %} {{result.player|join(',')}}\n" +trigger: +- platform: time + at: !input 'daytime_starts' +- platform: time + at: !input 'daytime_ends' +action: +- choose: + - conditions: + - after: !input 'daytime_starts' + before: !input 'daytime_ends' + condition: time + sequence: + - service: media_player.volume_set + data_template: + entity_id: '{{ player }}' + volume_level: !input 'volume_day' + default: + - service: media_player.volume_set + data_template: + entity_id: '{{ player }}' + volume_level: !input 'volume_night' +mode: single diff --git a/blueprints/automation/Mikkelmoeller/aqara-magic-cube-zha-51-actions.yaml b/blueprints/automation/Mikkelmoeller/aqara-magic-cube-zha-51-actions.yaml new file mode 100644 index 0000000..3e24112 --- /dev/null +++ b/blueprints/automation/Mikkelmoeller/aqara-magic-cube-zha-51-actions.yaml @@ -0,0 +1,544 @@ +blueprint: + name: Aqara Magic Cube + description: Control anything using Aqara Magic Cube. + domain: automation + input: + remote: + name: Magic Cube + description: Select the Aqara Magic Cube device + selector: + device: + integration: zha + manufacturer: LUMI + flip_90: + name: Flip 90 degrees + description: 'Actions to run when cube flips 90 degrees. + + This cancels all specific 90 degrees functions. + + e.g From side 1 to side 2 will be the same as from side 6 to side 2' + default: false + selector: + boolean: {} + cube_flip_90: + name: Flip cube 90 degrees + description: Action to run when cube flips 90 degrees. This only works if 'Flip + 90 degrees' is toggled + default: [] + selector: + action: {} + flip_180: + name: Flip 180 degrees + description: 'Actions to run when cube flips 180 degrees. + + This cancels all specific 180 degrees functions + + e.g From side 1 to side 4 will be the same as from side 5 to side 2' + default: false + selector: + boolean: {} + cube_flip_180: + name: Flip cube 180 degrees + description: Action to run when cube flips 180 degrees. This only works if 'Flip + 180 degrees' is toggled + default: [] + selector: + action: {} + slide_any_side: + name: Slide any side + description: 'Actions to run when cube slides on any side. + + This cancels all specific ''slide'' functions + + e.g Slide on side 1 will be the same as slide on side 2' + default: false + selector: + boolean: {} + cube_slide_any: + name: Slide cube on any side + description: Action to run when cube slides on any slide. This only works if + 'Slide any side' is toggled + default: [] + selector: + action: {} + knock_any_side: + name: Knock on any side + description: 'Actions to run when knocking cube regardless of the side. + + This cancels all specific ''knock'' functions + + e.g Knock on side 1 will be the same as knocking side 2' + default: false + selector: + boolean: {} + cube_knock_any: + name: Knock cube on any side + description: Action to run when knocking cube on any side. This only works if + 'Knock on any side' is toggled + default: [] + selector: + action: {} + one_to_two: + name: From side 1 to side 2 + description: Action to run when cube goes from side 1 to side 2 + default: [] + selector: + action: {} + one_to_three: + name: From side 1 to side 3 + description: Action to run when cube goes from side 1 to side 3 + default: [] + selector: + action: {} + one_to_four: + name: From side 1 to side 4 + description: Action to run when cube goes from side 1 to side 4 + default: [] + selector: + action: {} + one_to_five: + name: From side 1 to side 5 + description: Action to run when cube goes from side 1 to side 5 + default: [] + selector: + action: {} + one_to_six: + name: From side 1 to side 6 + description: Action to run when cube goes from side 1 to side 6 + default: [] + selector: + action: {} + two_to_one: + name: From side 2 to side 1 + description: Action to run when cube goes from side 2 to side 1 + default: [] + selector: + action: {} + two_to_three: + name: From side 2 to side 3 + description: Action to run when cube goes from side 2 to side 3 + default: [] + selector: + action: {} + two_to_four: + name: From side 2 to side 4 + description: Action to run when cube goes from side 2 to side 4 + default: [] + selector: + action: {} + two_to_five: + name: From side 2 to side 5 + description: Action to run when cube goes from side 2 to side 5 + default: [] + selector: + action: {} + two_to_six: + name: From side 2 to side 6 + description: Action to run when cube goes from side 2 to side 6 + default: [] + selector: + action: {} + three_to_one: + name: From side 3 to side 1 + description: Action to run when cube goes from side 3 to side 1 + default: [] + selector: + action: {} + three_to_two: + name: From side 3 to side 2 + description: Action to run when cube goes from side 3 to side 2 + default: [] + selector: + action: {} + three_to_four: + name: From side 3 to side 4 + description: Action to run when cube goes from side 3 to side 4 + default: [] + selector: + action: {} + three_to_five: + name: From side 3 to side 5 + description: Action to run when cube goes from side 3 to side 5 + default: [] + selector: + action: {} + three_to_six: + name: From side 3 to side 6 + description: Action to run when cube goes from side 3 to side 6 + default: [] + selector: + action: {} + four_to_one: + name: From side 4 to side 1 + description: Action to run when cube goes from side 4 to side 1 + default: [] + selector: + action: {} + four_to_two: + name: From side 4 to side 2 + description: Action to run when cube goes from side 4 to side 2 + default: [] + selector: + action: {} + four_to_three: + name: From side 4 to side 3 + description: Action to run when cube goes from side 4 to side 3 + default: [] + selector: + action: {} + four_to_five: + name: From side 4 to side 5 + description: Action to run when cube goes from side 4 to side 5 + default: [] + selector: + action: {} + four_to_six: + name: From side 4 to side 6 + description: Action to run when cube goes from side 4 to side 6 + default: [] + selector: + action: {} + five_to_one: + name: From side 5 to side 1 + description: Action to run when cube goes from side 5 to side 1 + default: [] + selector: + action: {} + five_to_two: + name: From side 5 to side 2 + description: Action to run when cube goes from side 5 to side 2 + default: [] + selector: + action: {} + five_to_three: + name: From side 5 to side 3 + description: Action to run when cube goes from side 5 to side 3 + default: [] + selector: + action: {} + five_to_four: + name: From side 5 to side 4 + description: Action to run when cube goes from side 5 to side 4 + default: [] + selector: + action: {} + five_to_six: + name: From side 5 to side 6 + description: Action to run when cube goes from side 5 to side 6 + default: [] + selector: + action: {} + six_to_one: + name: From side 6 to side 1 + description: Action to run when cube goes from side 6 to side 1 + default: [] + selector: + action: {} + six_to_two: + name: From side 6 to side 2 + description: Action to run when cube goes from side 6 to side 2 + default: [] + selector: + action: {} + six_to_three: + name: From side 6 to side 3 + description: Action to run when cube goes from side 6 to side 3 + default: [] + selector: + action: {} + six_to_four: + name: From side 6 to side 4 + description: Action to run when cube goes from side 6 to side 4 + default: [] + selector: + action: {} + six_to_five: + name: From side 6 to side 5 + description: Action to run when cube goes from side 6 to side 5 + default: [] + selector: + action: {} + one_to_one: + name: Knock - Side 1 + description: Action to run when knocking on side 1 + default: [] + selector: + action: {} + two_to_two: + name: Knock - Side 2 + description: Action to run when knocking on side 2 + default: [] + selector: + action: {} + three_to_three: + name: Knock - Side 3 + description: Action to run when knocking on side 3 + default: [] + selector: + action: {} + four_to_four: + name: Knock - Side 4 + description: Action to run when knocking on side 4 + default: [] + selector: + action: {} + five_to_five: + name: Knock - Side 5 + description: Action to run when knocking on side 5 + default: [] + selector: + action: {} + six_to_six: + name: Knock - Side 6 + description: Action to run when knocking on side 6 + default: [] + selector: + action: {} + slide_on_one: + name: Slide - Side 1 up + description: Action to run when slides with Side 1 up + default: [] + selector: + action: {} + slide_on_two: + name: Slide - Side 2 up + description: Action to run when slides with Side 2 up + default: [] + selector: + action: {} + slide_on_three: + name: Slide - Side 3 up + description: Action to run when slides with Side 3 up + default: [] + selector: + action: {} + slide_on_four: + name: Slide - Side 4 up + description: Action to run when slides with Side 4 up + default: [] + selector: + action: {} + slide_on_five: + name: Slide - Side 5 up + description: Action to run when slides with Side 5 up + default: [] + selector: + action: {} + slide_on_six: + name: Slide - Side 6 up + description: Action to run when slides with Side 6 up + default: [] + selector: + action: {} + cube_wake: + name: Wake up the cube + description: Action to run when cube wakes up + default: [] + selector: + action: {} + cube_drop: + name: Cube drops + description: Action to run when cube drops + default: [] + selector: + action: {} + cube_shake: + name: Shake cube + description: Action to run when you shake the cube + default: [] + selector: + action: {} + rotate_right: + name: Rotate right + description: Action to run when cube rotates right + default: [] + selector: + action: {} + rotate_left: + name: Rotate left + description: Action to run when cube rotates left + default: [] + selector: + action: {} + source_url: https://community.home-assistant.io/t/aqara-magic-cube-zha-51-actions/270829 +mode: restart +max_exceeded: silent +trigger: +- platform: event + event_type: zha_event + event_data: + device_id: !input 'remote' +action: +- variables: + command: '{{ trigger.event.data.command }}' + value: '{{ trigger.event.data.args.value }}' + flip_degrees: '{{ trigger.event.data.args.flip_degrees }}' + relative_degrees: '{{ trigger.event.data.args.relative_degrees }}' + flip_90: !input 'flip_90' + flip_180: !input 'flip_180' + slide_any_side: !input 'slide_any_side' + knock_any_side: !input 'knock_any_side' + flip90: 64 + flip180: 128 + slide: 256 + knock: 512 + shake: 0 + drop: 3 + activated_face: "\n{% if command == \"slide\" or command == \"knock\" %}\n\n \ + \ {% if trigger.event.data.args.activated_face == 1 %} 1\n\n {% elif trigger.event.data.args.activated_face\ + \ == 2 %} 5\n\n {% elif trigger.event.data.args.activated_face == 3 %} 6\n\n\ + \ {% elif trigger.event.data.args.activated_face == 4 %} 4\n\n {% elif trigger.event.data.args.activated_face\ + \ == 5 %} 2\n\n {% elif trigger.event.data.args.activated_face == 6 %} 3\n\n\ + \ {% endif %}\n\n{% elif command == 'flip' %}\n\n {{ trigger.event.data.args.activated_face\ + \ | int }}\n\n{% endif %}\n" + from_face: "\n{% if command == \"flip\" and flip_degrees == 90 %}\n\n {{ ((value\ + \ - flip90 - (trigger.event.data.args.activated_face - 1)) / 8) + 1 | int }}\n\ + \n{% endif %}\n" +- choose: + - conditions: + - '{{ command == ''rotate_right'' }}' + sequence: !input 'rotate_right' + - conditions: + - '{{ command == ''rotate_left'' }}' + sequence: !input 'rotate_left' + - conditions: + - '{{ command == ''checkin'' }}' + sequence: !input 'cube_wake' + - conditions: + - '{{ value == shake }}' + sequence: !input 'cube_shake' + - conditions: + - '{{ value == drop }}' + sequence: !input 'cube_drop' + - conditions: + - '{{ command == ''knock'' and knock_any_side }}' + sequence: !input 'cube_knock_any' + - conditions: + - '{{ command == ''slide'' and slide_any_side }}' + sequence: !input 'cube_slide_any' + - conditions: + - '{{ flip_degrees == 90 and flip_90 }}' + sequence: !input 'cube_flip_90' + - conditions: + - '{{ flip_degrees == 180 and flip_180 }}' + sequence: !input 'cube_flip_180' + - conditions: + - '{{ flip_degrees == 90 and activated_face == 1 }}' + sequence: + - choose: + - conditions: '{{ from_face == 2 }}' + sequence: !input 'two_to_one' + - conditions: '{{ from_face == 3 }}' + sequence: !input 'three_to_one' + - conditions: '{{ from_face == 5 }}' + sequence: !input 'five_to_one' + - conditions: '{{ from_face == 6 }}' + sequence: !input 'six_to_one' + - conditions: + - '{{ flip_degrees == 90 and activated_face == 2 }}' + sequence: + - choose: + - conditions: '{{ from_face == 1 }}' + sequence: !input 'one_to_two' + - conditions: '{{ from_face == 3 }}' + sequence: !input 'three_to_two' + - conditions: '{{ from_face == 4 }}' + sequence: !input 'four_to_two' + - conditions: '{{ from_face == 6 }}' + sequence: !input 'six_to_two' + - conditions: + - '{{ flip_degrees == 90 and activated_face == 3 }}' + sequence: + - choose: + - conditions: '{{ from_face == 1 }}' + sequence: !input 'one_to_three' + - conditions: '{{ from_face == 2 }}' + sequence: !input 'two_to_three' + - conditions: '{{ from_face == 4 }}' + sequence: !input 'four_to_three' + - conditions: '{{ from_face == 5 }}' + sequence: !input 'five_to_three' + - conditions: + - '{{ flip_degrees == 90 and activated_face == 4 }}' + sequence: + - choose: + - conditions: '{{ from_face == 2 }}' + sequence: !input 'two_to_four' + - conditions: '{{ from_face == 3 }}' + sequence: !input 'three_to_four' + - conditions: '{{ from_face == 5 }}' + sequence: !input 'five_to_four' + - conditions: '{{ from_face == 6 }}' + sequence: !input 'six_to_four' + - conditions: + - '{{ flip_degrees == 90 and activated_face == 5 }}' + sequence: + - choose: + - conditions: '{{ from_face == 1 }}' + sequence: !input 'one_to_five' + - conditions: '{{ from_face == 3 }}' + sequence: !input 'three_to_five' + - conditions: '{{ from_face == 4 }}' + sequence: !input 'four_to_five' + - conditions: '{{ from_face == 6 }}' + sequence: !input 'six_to_five' + - conditions: + - '{{ flip_degrees == 90 and activated_face == 6 }}' + sequence: + - choose: + - conditions: '{{ from_face == 1 }}' + sequence: !input 'one_to_six' + - conditions: '{{ from_face == 2 }}' + sequence: !input 'two_to_six' + - conditions: '{{ from_face == 4 }}' + sequence: !input 'four_to_six' + - conditions: '{{ from_face == 5 }}' + sequence: !input 'five_to_six' + - conditions: + - '{{ value == flip180 + activated_face - 1 }}' + sequence: + - choose: + - conditions: '{{ activated_face == 1 }}' + sequence: !input 'four_to_one' + - conditions: '{{ activated_face == 2 }}' + sequence: !input 'five_to_two' + - conditions: '{{ activated_face == 3 }}' + sequence: !input 'six_to_three' + - conditions: '{{ activated_face == 4 }}' + sequence: !input 'one_to_four' + - conditions: '{{ activated_face == 5 }}' + sequence: !input 'two_to_five' + - conditions: '{{ activated_face == 6 }}' + sequence: !input 'three_to_six' + - conditions: + - '{{ value == knock + activated_face - 1 }}' + sequence: + - choose: + - conditions: '{{ activated_face == 1 }}' + sequence: !input 'one_to_one' + - conditions: '{{ activated_face == 2 }}' + sequence: !input 'two_to_two' + - conditions: '{{ activated_face == 3 }}' + sequence: !input 'three_to_three' + - conditions: '{{ activated_face == 4 }}' + sequence: !input 'four_to_four' + - conditions: '{{ activated_face == 5 }}' + sequence: !input 'five_to_five' + - conditions: '{{ activated_face == 6 }}' + sequence: !input 'six_to_six' + - conditions: + - '{{ value == slide + activated_face - 1 }}' + sequence: + - choose: + - conditions: '{{ activated_face == 1 }}' + sequence: !input 'slide_on_one' + - conditions: '{{ activated_face == 2 }}' + sequence: !input 'slide_on_two' + - conditions: '{{ activated_face == 3 }}' + sequence: !input 'slide_on_three' + - conditions: '{{ activated_face == 4 }}' + sequence: !input 'slide_on_four' + - conditions: '{{ activated_face == 5 }}' + sequence: !input 'slide_on_five' + - conditions: '{{ activated_face == 6 }}' + sequence: !input 'slide_on_six' diff --git a/blueprints/automation/SirGoodenough/Zigbee2MQTT - Xiaomi Cube Controller.yaml b/blueprints/automation/SirGoodenough/Zigbee2MQTT - Xiaomi Cube Controller.yaml new file mode 100644 index 0000000..e69b650 --- /dev/null +++ b/blueprints/automation/SirGoodenough/Zigbee2MQTT - Xiaomi Cube Controller.yaml @@ -0,0 +1,787 @@ +blueprint: + name: Aqara Magic Cube Zigbee2MQTT - 2022-05-05 + description: "This Blueprint uses a Zigbee2MQTT built sensor to sort out the 38(+54) + unique commands available from the Xiaomi Magic Cube Remote. (Some unique commands + are available thru templating only. See the related document.)\nThe split out + of functions gives you the ability to assign local scripts or functions to do + the things you want the remote to do.\nFunctions that are left empty will simply + do nothing.\n\n### \U0001F34E There is a set of 36 event functions that will trigger + on specific actions on specific sides that are listed as **Group 1 actions \U0001F34E**.\n\n### + \U0001F34A There is a set of 6 event functions that will trigger on specific actions + on *ANY* side that are listed as **Group 2 sctions \U0001F34A**.\n\n### \U0001F350 + There is a set of 30 event functions that will trigger on cube flips to & froma + specific sides that are listed as **Group 3 sctions \U0001F350**.\n\n### \U0001F369 + There are 2 actions (shake and drop) that only occur once and are OK to be combined + with any other group.\n\nPlease be aware that ALL actions except the 2 listed + above,\n\U0001F369 will trigger an action in **ALL 3 groups at the same time** + every time. Therefore I suggest if you just have a couple of things you want this + remote to do that you choose the *ANY / Group 2 / \U0001F34A* events.\nIf you + want more than a few events, you should select actions in **Group 1 / \U0001F34E + OR Group 3 / \U0001F350**.\nWith careful selection you can use mixed groups, but + you run the risk of a single cube action triggering more than 1 Home Assistant + action and making a mess of things \U0001F371.\n\n#### NOTICE: This cube *can* + be triggered 124 ways, but only 38(+54) of them are unique (with templating).\n\nThere + is sample code to make the template sensor in the help file on GitHib named [Zigbee2MQTT + - Xiaomi Cube Controller.md](https://github.com/SirGoodenough/HA_Blueprints/blob/master/Automations/Zigbee2MQTT%20-%20Xiaomi%20Cube%20Controller.md) + & in the [community page related to this](https://community.home-assistant.io/t/zigbee2mqtt-xiaomi-cube-controller/393203).\n\nWithin + this blueprint there is an event handler that will latch the last command that + the blueprint finds and sends that to the event buss. From there a simple Template + sensor can grab it and show you the last action sent. Thie will help when setting + up new functions and to troubleshoot strange behaviours.\n\n> This was forked + from https://community.home-assistant.io/t/z2m-xiaomi-cube-controller/263006 1.2 + project authored by luckypoppy and the friends he pulled together to create the + base. I sincerely thank Him (Them) for their work. I felt there needed to be more + documentation for rookie users to properly set this up. I had quite a few questions + and when I saw a few questions in that chat from people struggling, I wanted to + help. I also had a better idea for troubleshooting info.\n" + source_url: https://github.com/SirGoodenough/HA_Blueprints/blob/master/Automations/Zigbee2MQTT%20-%20Xiaomi%20Cube%20Controller.yaml + domain: automation + homeassistant: + min_version: 2022.5.2 + input: + remote: + name: Remote + description: 'The entity to put here is the sensor that Z2M imported which is + named like this> sensor.XXYour_HameXX_action. + + The other 4 sensors can be disabled, they will not be used.' + selector: + entity: + integration: mqtt + domain: sensor + multiple: false + slide_face_0: + name: "Group 1 actions \U0001F34E Slide the cube with face 0 up" + description: Face 0 is the one with the 'Aqara' LOGO + default: [] + selector: + action: {} + doubletap_face_0: + name: "Group 1 actions \U0001F34E Double tap the cube with face 0 up" + description: Face 0 is the one with the 'Aqara' LOGO + default: [] + selector: + action: {} + flipped90_face_0: + name: "Group 1 actions \U0001F34E Flip the cube 90 degrees to face 0" + description: Face 0 is the one with the 'Aqara' LOGO + default: [] + selector: + action: {} + flipped180_face_0: + name: "Group 1 actions \U0001F34E Flip the cube 180 degrees to face 0" + description: '**NOTE:** This action is trick to master, and should be used sparingly... + + Face 0 is the one with the ''Aqara'' LOGO' + default: [] + selector: + action: {} + rotate_cw_face_0: + name: "Group 1 actions \U0001F34E Rotate cube clockwise with face 0 up" + description: Face 0 is the one with the 'Aqara' LOGO + default: [] + selector: + action: {} + rotate_ccw_face_0: + name: "Group 1 actions \U0001F34E Rotate cube counter clockwise with face 0 + up" + description: Face 0 is the one with the 'Aqara' LOGO + default: [] + selector: + action: {} + slide_face_1: + name: "Group 1 actions \U0001F34E Slide the cube with face 1 up" + default: [] + selector: + action: {} + doubletap_face_1: + name: "Group 1 actions \U0001F34E Double tap the cube with face 1 up" + default: [] + selector: + action: {} + flipped90_face_1: + name: "Group 1 actions \U0001F34E Flip the cube 90 degrees to face 1" + default: [] + selector: + action: {} + flipped180_face_1: + name: "Group 1 actions \U0001F34E Flip the cube 180 degrees to face 1" + description: '**NOTE:** This action is trick to master, and should be used sparingly...' + default: [] + selector: + action: {} + rotate_cw_face_1: + name: "Group 1 actions \U0001F34E Rotate cube clockwise with face 1 up" + default: [] + selector: + action: {} + rotate_ccw_face_1: + name: "Group 1 actions \U0001F34E Rotate cube counter clockwise with face 1 + up" + default: [] + selector: + action: {} + slide_face_2: + name: "Group 1 actions \U0001F34E Slide the cube with face 2 up" + default: [] + selector: + action: {} + doubletap_face_2: + name: "Group 1 actions \U0001F34E Double tap the cube with face 2 up" + default: [] + selector: + action: {} + flipped90_face_2: + name: "Group 1 actions \U0001F34E Flip the cube 90 degrees to face 2" + default: [] + selector: + action: {} + flipped180_face_2: + name: "Group 1 actions \U0001F34E Flip the cube 180 degrees to face 2" + description: '**NOTE:** This action is trick to master, and should be used sparingly...' + default: [] + selector: + action: {} + rotate_cw_face_2: + name: "Group 1 actions \U0001F34E Rotate cube clockwise with face 2 up" + default: [] + selector: + action: {} + rotate_ccw_face_2: + name: "Group 1 actions \U0001F34E Rotate cube counter clockwise with face 2 + up" + default: [] + selector: + action: {} + slide_face_3: + name: "Group 1 actions \U0001F34E Slide the cube with face 3 up" + default: [] + selector: + action: {} + doubletap_face_3: + name: "Group 1 actions \U0001F34E Double tap the cube with face 3 up" + default: [] + selector: + action: {} + flipped90_face_3: + name: "Group 1 actions \U0001F34E Flip the cube 90 degrees to face 3" + default: [] + selector: + action: {} + flipped180_face_3: + name: "Group 1 actions \U0001F34E Flip the cube 180 degrees to face 3" + description: '**NOTE:** This action is trick to master, and should be used sparingly...' + default: [] + selector: + action: {} + rotate_cw_face_3: + name: "Group 1 actions \U0001F34E Rotate cube clockwise with face 3 up" + default: [] + selector: + action: {} + rotate_ccw_face_3: + name: "Group 1 actions \U0001F34E Rotate cube counter clockwise with face 3 + up" + default: [] + selector: + action: {} + slide_face_4: + name: "Group 1 actions \U0001F34E Slide the cube with face 4 up" + default: [] + selector: + action: {} + doubletap_face_4: + name: "Group 1 actions \U0001F34E Double tap the cube with face 4 up" + default: [] + selector: + action: {} + flipped90_face_4: + name: "Group 1 actions \U0001F34E Flip the cube 90 degrees to face 4" + default: [] + selector: + action: {} + flipped180_face_4: + name: "Group 1 actions \U0001F34E Flip the cube 180 degrees to face 4" + description: '**NOTE:** This action is trick to master, and should be used sparingly...' + default: [] + selector: + action: {} + rotate_cw_face_4: + name: "Group 1 actions \U0001F34E Rotate cube clockwise with face 4 up" + default: [] + selector: + action: {} + rotate_ccw_face_4: + name: "Group 1 actions \U0001F34E Rotate cube counter clockwise with face 4 + up" + default: [] + selector: + action: {} + slide_face_5: + name: "Group 1 actions \U0001F34E Slide the cube with face 5 up" + default: [] + selector: + action: {} + doubletap_face_5: + name: "Group 1 actions \U0001F34E Double tap the cube with face 5 up" + default: [] + selector: + action: {} + flipped90_face_5: + name: "Group 1 actions \U0001F34E Flip the cube 90 degrees to face 5" + default: [] + selector: + action: {} + flipped180_face_5: + name: "Group 1 actions \U0001F34E Flip the cube 180 degrees to face 5" + description: '**NOTE:** This action is trick to master, and should be used sparingly...' + default: [] + selector: + action: {} + rotate_cw_face_5: + name: "Group 1 actions \U0001F34E Rotate cube clockwise with face 5 up" + default: [] + selector: + action: {} + rotate_ccw_face_5: + name: "Group 1 actions \U0001F34E Rotate cube counter clockwise with face 5 + up" + default: [] + selector: + action: {} + shake: + name: "Shake the cube \U0001F369" + description: 'This trigger only occurs once in the set-up. + + It can be combined in any group.' + default: [] + selector: + action: {} + fall: + name: "Drop the cube \U0001F369" + description: 'This trigger only occurs once in the set-up. + + It can be combined in any group.' + default: [] + selector: + action: {} + slide_any: + name: "Group 2 actions \U0001F34A Slide the cube with any side" + description: "Side doesn't matter on this one.\n**!!Warning!!** The automations + for the specific side will also trigger. \U0001F34E\U0001F350\nI suggest using + only one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + doubletap_any: + name: "Group 2 actions \U0001F34A Double tap the cube with any side" + description: "Side doesn't matter on this one.\n**!!Warning!!** The automations + for the specific side will also trigger. \U0001F34E\U0001F350\nI suggest using + only one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + flipped90_any: + name: "Group 2 actions \U0001F34A Flip the cube 90 degrees to any side" + description: "Side doesn't matter on this one.\n**!!Warning!!** The automations + for the specific side will also trigger. \U0001F34E\U0001F350\nI suggest using + only one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + flipped180_any: + name: "Group 2 actions \U0001F34A Flip the cube 180 degrees any side" + description: "NOTE: This action is trick to master, and should be used sparingly... + Side doesn't matter on this one.\n**!!Warning!!** The automations for the + specific side will also trigger. \U0001F34E\U0001F350\nI suggest using only + one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + rotate_cw_any: + name: "Group 2 actions \U0001F34A Rotate cube clockwise with any side" + description: "Side doesn't matter on this one.\n**!!Warning!!** The automations + for the specific side will also trigger. \U0001F34E\U0001F350\nI suggest using + only one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + rotate_ccw_any: + name: "Group 2 actions \U0001F34A Rotate cube counter clockwise with any side" + description: "Side doesn't matter on this one.\n**!!Warning!!** The automations + for the specific side will also trigger. \U0001F34E\U0001F350\nI suggest using + only one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + 0_from_1: + name: "Group 3 actions \U0001F350 Flip the cube to side 0 from side 1" + description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 0 + and the ANY \U0001F34A automations will also trigger.\nI suggest using only + one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + 0_from_2: + name: "Group 3 actions \U0001F350 Flip the cube to side 0 from side 2" + description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 0 + and the ANY \U0001F34A automations will also trigger.\nI suggest using only + one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + 0_from_3: + name: "Group 3 actions \U0001F350 Flip the cube to side 0 from side 3" + description: "**!!Warning!!** The flip 180 automations \U0001F34E for side 0 + and the ANY \U0001F34A automations will also trigger.\nI suggest using only + one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + 0_from_4: + name: "Group 3 actions \U0001F350 Flip the cube to side 0 from side 4" + description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 0 + and the ANY \U0001F34A automations will also trigger.\nI suggest using only + one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + 0_from_5: + name: "Group 3 actions \U0001F350 Flip the cube to side 0 from side 5" + description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 0 + and the ANY \U0001F34A automations will also trigger.\nI suggest using only + one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + 1_from_0: + name: "Group 3 actions \U0001F350 Flip the cube to side 1 from side 0" + description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 1 + and the ANY \U0001F34A automations will also trigger.\nI suggest using only + one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + 1_from_2: + name: "Group 3 actions \U0001F350 Flip the cube to side 1 from side 2" + description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 1 + and the ANY \U0001F34A automations will also trigger.\nI suggest using only + one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + 1_from_3: + name: "Group 3 actions \U0001F350 Flip the cube to side 1 from side 3" + description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 1 + and the ANY \U0001F34A automations will also trigger.\nI suggest using only + one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + 1_from_4: + name: "Group 3 actions \U0001F350 Flip the cube to side 1 from side 4" + description: "**!!Warning!!** The flip 180 automations \U0001F34E for side 1 + and the ANY \U0001F34A automations will also trigger.\nI suggest using only + one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + 1_from_5: + name: "Group 3 actions \U0001F350 Flip the cube to side 1 from side 5" + description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 1 + and the ANY \U0001F34A automations will also trigger.\nI suggest using only + one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + 2_from_0: + name: "Group 3 actions \U0001F350 Flip the cube to side 2 from side 0" + description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 2 + and the ANY \U0001F34A automations will also trigger.\nI suggest using only + one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + 2_from_1: + name: "Group 3 actions \U0001F350 Flip the cube to side 2 from side 1" + description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 2 + and the ANY \U0001F34A automations will also trigger.\nI suggest using only + one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + 2_from_3: + name: "Group 3 actions \U0001F350 Flip the cube to side 2 from side 3" + description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 2 + and the ANY \U0001F34A automations will also trigger.\nI suggest using only + one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + 2_from_4: + name: "Group 3 actions \U0001F350 Flip the cube to side 2 from side 4" + description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 2 + and the ANY \U0001F34A automations will also trigger.\nI suggest using only + one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + 2_from_5: + name: "Group 3 actions \U0001F350 Flip the cube to side 2 from side 5" + description: "**!!Warning!!** The flip 180 automations \U0001F34E for side 2 + and the ANY \U0001F34A automations will also trigger.\nI suggest using only + one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + 3_from_0: + name: "Group 3 actions \U0001F350 Flip the cube to side 3 from side 0" + description: "**!!Warning!!** The flip 180 automations \U0001F34E for side 3 + and the ANY \U0001F34A automations will also trigger.\nI suggest using only + one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + 3_from_1: + name: "Group 3 actions \U0001F350 Flip the cube to side 3 from side 1" + description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 3 + and the ANY \U0001F34A automations will also trigger.\nI suggest using only + one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + 3_from_2: + name: "Group 3 actions \U0001F350 Flip the cube to side 3 from side 2" + description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 3 + and the ANY \U0001F34A automations will also trigger.\nI suggest using only + one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + 3_from_4: + name: "Group 3 actions \U0001F350 Flip the cube to side 3 from side 4" + description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 3 + and the ANY \U0001F34A automations will also trigger.\nI suggest using only + one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + 3_from_5: + name: "Group 3 actions \U0001F350 Flip the cube to side 3 from side 5" + description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 3 + and the ANY \U0001F34A automations will also trigger.\nI suggest using only + one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + 4_from_0: + name: "Group 3 actions \U0001F350 Flip the cube to side 4 from side 0" + description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 4 + and the ANY \U0001F34A automations will also trigger.\nI suggest using only + one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + 4_from_1: + name: "Group 3 actions \U0001F350 Flip the cube to side 4 from side 1" + description: "**!!Warning!!** The flip 180 automations \U0001F34E for side 4 + and the ANY \U0001F34A automations will also trigger.\nI suggest using only + one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + 4_from_2: + name: "Group 3 actions \U0001F350 Flip the cube to side 4 from side 2" + description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 4 + and the ANY \U0001F34A automations will also trigger.\nI suggest using only + one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + 4_from_3: + name: "Group 3 actions \U0001F350 Flip the cube to side 4 from side 3" + description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 4 + and the ANY \U0001F34A automations will also trigger.\nI suggest using only + one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + 4_from_5: + name: "Group 3 actions \U0001F350 Flip the cube to side 4 from side 5" + description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 4 + and the ANY \U0001F34A automations will also trigger.\nI suggest using only + one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + 5_from_0: + name: "Group 3 actions \U0001F350 Flip the cube to side 5 from side 0" + description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 5 + and the ANY \U0001F34A automations will also trigger.\nI suggest using only + one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + 5_from_1: + name: "Group 3 actions \U0001F350 Flip the cube to side 5 from side 1" + description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 5 + and the ANY \U0001F34A automations will also trigger. \U0001F34E\U0001F350\nI + suggest using only one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + 5_from_2: + name: "Group 3 actions \U0001F350 Flip the cube to side 5 from side 2" + description: "**!!Warning!!** The flip 180 automations \U0001F34E for side 5 + and the ANY \U0001F34A automations will also trigger.\nI suggest using only + one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + 5_from_3: + name: "Group 3 actions \U0001F350 Flip the cube to side 5 from side 3" + description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 5 + and the ANY \U0001F34A automations will also trigger.\nI suggest using only + one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + 5_from_4: + name: "Group 3 actions \U0001F350 Flip the cube to side 5 from side 4" + description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 5 + and the ANY \U0001F34A automations will also trigger.\nI suggest using only + one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} +mode: single +max_exceeded: silent +trigger: +- platform: state + entity_id: !input remote +condition: + condition: template + value_template: '{{ trigger.to_state.attributes.action in (''rotate_right'', ''rotate_left'', + ''flip90'', ''flip180'', ''slide'', ''tap'', ''shake'', ''fall'') }}' +action: +- variables: + action: '{{ trigger.to_state.attributes.action }}' + side: '{{ trigger.to_state.attributes.side }}' + last_side: '{{ trigger.from_state.attributes.side }}' + entity_id: !input remote + friendly_name: '{{ trigger.to_state.attributes.friendly_name }}' +- alias: Fire Last Action event + event: cube_last_action + event_data: + action: '{{ action }}' + side: '{{ side }}' + last_side: '{{ last_side }}' + entity_id: '{{ entity_id }}' + friendly_name: '{{ friendly_name }}' +- alias: "Group 2 \U0001F34A and No Group \U0001F369 These are action events for ANY + Side" + choose: + - conditions: '{{ action == "slide" }}' + sequence: !input slide_any + - conditions: '{{ action == "tap" }}' + sequence: !input doubletap_any + - conditions: '{{ action == "flip90" }}' + sequence: !input flipped90_any + - conditions: '{{ action == "flip180" }}' + sequence: !input flipped180_any + - conditions: '{{ action == "rotate_right" }}' + sequence: !input rotate_cw_any + - conditions: '{{ action == "rotate_left" }}' + sequence: !input rotate_ccw_any + - conditions: '{{ action == "shake" }}' + sequence: !input shake + - conditions: '{{ action == "fall" }}' + sequence: !input fall +- alias: "Group 1 \U0001F34E These are action events based on the action broken down + by side" + choose: + - conditions: '{{ action == "slide" }}' + sequence: + - alias: These are slide events + choose: + - conditions: '{{ side == 0 }}' + sequence: !input slide_face_0 + - conditions: '{{ side == 1 }}' + sequence: !input slide_face_1 + - conditions: '{{ side == 2 }}' + sequence: !input slide_face_2 + - conditions: '{{ side == 3 }}' + sequence: !input slide_face_3 + - conditions: '{{ side == 4 }}' + sequence: !input slide_face_4 + - conditions: '{{ side == 5 }}' + sequence: !input slide_face_5 + - conditions: '{{ action == "tap" }}' + sequence: + - alias: These are doubletap events + choose: + - conditions: '{{ side == 0 }}' + sequence: !input doubletap_face_0 + - conditions: '{{ side == 1 }}' + sequence: !input doubletap_face_1 + - conditions: '{{ side == 2 }}' + sequence: !input doubletap_face_2 + - conditions: '{{ side == 3 }}' + sequence: !input doubletap_face_3 + - conditions: '{{ side == 4 }}' + sequence: !input doubletap_face_4 + - conditions: '{{ side == 5 }}' + sequence: !input doubletap_face_5 + - conditions: '{{ action == "flip90" }}' + sequence: + - alias: These are flipped90 events + choose: + - conditions: '{{ side == 0 }}' + sequence: !input flipped90_face_0 + - conditions: '{{ side == 1 }}' + sequence: !input flipped90_face_1 + - conditions: '{{ side == 2 }}' + sequence: !input flipped90_face_2 + - conditions: '{{ side == 3 }}' + sequence: !input flipped90_face_3 + - conditions: '{{ side == 4 }}' + sequence: !input flipped90_face_4 + - conditions: '{{ side == 5 }}' + sequence: !input flipped90_face_5 + - conditions: '{{ action == "flip180" }}' + sequence: + - alias: These are flipped180 events + choose: + - conditions: '{{ side == 0 }}' + sequence: !input flipped180_face_0 + - conditions: '{{ side == 1 }}' + sequence: !input flipped180_face_1 + - conditions: '{{ side == 2 }}' + sequence: !input flipped180_face_2 + - conditions: '{{ side == 3 }}' + sequence: !input flipped180_face_3 + - conditions: '{{ side == 4 }}' + sequence: !input flipped180_face_4 + - conditions: '{{ side == 5 }}' + sequence: !input flipped180_face_5 + - conditions: '{{ action == "rotate_right" }}' + sequence: + - alias: These are rotate CW events + choose: + - conditions: '{{ side == 0 }}' + sequence: !input rotate_cw_face_0 + - conditions: '{{ side == 1 }}' + sequence: !input rotate_cw_face_1 + - conditions: '{{ side == 2 }}' + sequence: !input rotate_cw_face_2 + - conditions: '{{ side == 3 }}' + sequence: !input rotate_cw_face_3 + - conditions: '{{ side == 4 }}' + sequence: !input rotate_cw_face_4 + - conditions: '{{ side == 5 }}' + sequence: !input rotate_cw_face_5 + - conditions: '{{ action == "rotate_left" }}' + sequence: + - alias: These are rotate CCW events + choose: + - conditions: '{{ side == 0 }}' + sequence: !input rotate_ccw_face_0 + - conditions: '{{ side == 1 }}' + sequence: !input rotate_ccw_face_1 + - conditions: '{{ side == 2 }}' + sequence: !input rotate_ccw_face_2 + - conditions: '{{ side == 3 }}' + sequence: !input rotate_ccw_face_3 + - conditions: '{{ side == 4 }}' + sequence: !input rotate_ccw_face_4 + - conditions: '{{ side == 5 }}' + sequence: !input rotate_ccw_face_5 +- alias: "Group 3 \U0001F350 Side to side jump events" + choose: + - conditions: '{{ side == 0 }}' + sequence: + - alias: To side 0 from any events + choose: + - conditions: '{{ last_side == 1 }}' + sequence: !input 0_from_1 + - conditions: '{{ last_side == 2 }}' + sequence: !input 0_from_2 + - conditions: '{{ last_side == 3 }}' + sequence: !input 0_from_3 + - conditions: '{{ last_side == 4 }}' + sequence: !input 0_from_4 + - conditions: '{{ last_side == 5 }}' + sequence: !input 0_from_5 + - conditions: '{{ side == 1 }}' + sequence: + - alias: To side 1 from any events + choose: + - conditions: '{{ last_side == 0 }}' + sequence: !input 1_from_0 + - conditions: '{{ last_side == 2 }}' + sequence: !input 1_from_2 + - conditions: '{{ last_side == 3 }}' + sequence: !input 1_from_3 + - conditions: '{{ last_side == 4 }}' + sequence: !input 1_from_4 + - conditions: '{{ last_side == 5 }}' + sequence: !input 1_from_5 + - conditions: '{{ side == 2 }}' + sequence: + - alias: To side 2 from any events + choose: + - conditions: '{{ last_side == 0 }}' + sequence: !input 2_from_0 + - conditions: '{{ last_side == 1 }}' + sequence: !input 2_from_1 + - conditions: '{{ last_side == 3 }}' + sequence: !input 2_from_3 + - conditions: '{{ last_side == 4 }}' + sequence: !input 2_from_4 + - conditions: '{{ last_side == 5 }}' + sequence: !input 2_from_5 + - conditions: '{{ side == 3 }}' + sequence: + - alias: To side 3 from any events + choose: + - conditions: '{{ last_side == 0 }}' + sequence: !input 3_from_0 + - conditions: '{{ last_side == 1 }}' + sequence: !input 3_from_1 + - conditions: '{{ last_side == 2 }}' + sequence: !input 3_from_2 + - conditions: '{{ last_side == 4 }}' + sequence: !input 3_from_4 + - conditions: '{{ last_side == 5 }}' + sequence: !input 3_from_5 + - conditions: '{{ side == 4 }}' + sequence: + - alias: To side 4 from any events + choose: + - conditions: '{{ last_side == 0 }}' + sequence: !input 4_from_0 + - conditions: '{{ last_side == 1 }}' + sequence: !input 4_from_1 + - conditions: '{{ last_side == 2 }}' + sequence: !input 4_from_2 + - conditions: '{{ last_side == 3 }}' + sequence: !input 4_from_3 + - conditions: '{{ last_side == 5 }}' + sequence: !input 4_from_5 + - conditions: '{{ side == 5 }}' + sequence: + - alias: To side 5 from any events + choose: + - conditions: '{{ last_side == 0 }}' + sequence: !input 5_from_0 + - conditions: '{{ last_side == 1 }}' + sequence: !input 5_from_1 + - conditions: '{{ last_side == 2 }}' + sequence: !input 5_from_2 + - conditions: '{{ last_side == 3 }}' + sequence: !input 5_from_3 + - conditions: '{{ last_side == 4 }}' + sequence: !input 5_from_4 +- alias: Delay ⏱ for debounce so toggle functions work. Also blueprint is in single + mode. + delay: 00:00:01 diff --git a/blueprints/automation/clevertwain/appliance_finished.yaml b/blueprints/automation/clevertwain/appliance_finished.yaml new file mode 100644 index 0000000..a8a13b2 --- /dev/null +++ b/blueprints/automation/clevertwain/appliance_finished.yaml @@ -0,0 +1,56 @@ +blueprint: + name: Appliance has finished + description: Do something when an appliance (like a washing machine or dishwasher) has finished as detected by a binary sensor. + domain: automation + input: + binary_sensor: + name: Binary Sensor + description: 'Vibration sensor entity (e.g. Aqara lumi.vibration.aq1 by LUMI vibration sensor). Needs to have device_class: vibration' + selector: + entity: + domain: binary_sensor + starting_hysteresis: + name: Starting hysteresis + description: Time duration the sensor has to stay on. + default: 5 + selector: + number: + min: 1.0 + max: 60.0 + unit_of_measurement: min + mode: slider + step: 1.0 + finishing_hysteresis: + name: Finishing hysteresis + description: Time duration the sensor has to stay off. + default: 5 + selector: + number: + min: 1.0 + max: 60.0 + unit_of_measurement: min + mode: slider + step: 1.0 + actions: + name: Actions + description: Actions (e.g. pushing a notification, TTS announcement, ...) + selector: + action: {} +trigger: +- platform: state + entity_id: !input 'binary_sensor' + to: 'on' + for: + minutes: !input 'starting_hysteresis' +condition: [] +action: +- wait_for_trigger: + - platform: state + entity_id: !input 'binary_sensor' + to: 'off' + for: + minutes: !input 'finishing_hysteresis' +- choose: [] + default: !input 'actions' +mode: single +max_exceeded: silent \ No newline at end of file diff --git a/blueprints/automation/clevertwain/ge_jasco_46201.yaml b/blueprints/automation/clevertwain/ge_jasco_46201.yaml new file mode 100644 index 0000000..0ba25fc --- /dev/null +++ b/blueprints/automation/clevertwain/ge_jasco_46201.yaml @@ -0,0 +1,113 @@ +blueprint: + name: GE/Jasco 46201 / ZW4008 Switch (Z-Wave JS) v0.02 + description: Create automations for the GE/Jasco Switches using the Z-Wave JS integration. + domain: automation + input: + ge_jasco: + name: Switch Device + description: List of available GE/Jasco 46201 / ZW4008 switches + selector: + device: + integration: zwave_js + manufacturer: GE/Jasco + model: 46201 / ZW4008 + tap_1x_up: + name: Tap 1x Up + description: Action to run when Up button is pressed 1 time. + default: [] + selector: + action: + tap_1x_dn: + name: Tap 1x Down + description: Action to run when Down button is pressed 1 time. + default: [] + selector: + action: + tap_2x_up: + name: Tap 2x Up + description: Action to run when Up button is pressed 2 times. + default: [] + selector: + action: + tap_2x_dn: + name: Tap 2x Down + description: Action to run when Down button is pressed 2 times. + default: [] + selector: + action: + tap_3x_up: + name: Tap 3x Up + description: Action to run when Up button is pressed 3 times. + default: [] + selector: + action: + tap_3x_dn: + name: Tap 3x Down + description: Action to run when Down button is pressed 3 times. + default: [] + selector: + action: + up_btn_hld: + name: Up Button Held + description: Action to run when Up button is Held. + default: [] + selector: + action: + up_btn_rel: + name: Up Button Released + description: Action to run when Up button is Released. + default: [] + selector: + action: + dn_btn_hld: + name: Down Button Held + description: Action to run when Down button is Held. + default: [] + selector: + action: + dn_btn_rel: + name: Down Button Released + description: Action to run when Down button is Released. + default: [] + selector: + action: +# source_url: https://gist.github.com/shannonfritz/b5151cd53285a1694bf68f56053114b7 +mode: single +max_exceeded: silent +variables: + device_id: !input 'ge_jasco' +trigger: +- platform: event + event_type: zwave_js_value_notification +condition: '{{ trigger.event.data.device_id == device_id }}' +action: +- variables: + property_key_name: '{{ trigger.event.data.property_key_name }}' + label: '{{ trigger.event.data.label }}' + command_class_name: '{{ trigger.event.data.command_class_name }}' + value: '{{ trigger.event.data.value }}' +- service: logbook.log + data: + name: 'Z-Wave JS' + message: 'received event: {{ command_class_name }} - {{ value }} - {{ label }}' +- choose: + - conditions: '{{ property_key_name == ''001'' and value == ''KeyPressed'' }}' + sequence: !input 'tap_1x_up' + - conditions: '{{ property_key_name == ''002'' and value == ''KeyPressed'' }}' + sequence: !input 'tap_1x_dn' + - conditions: '{{ property_key_name == ''001'' and value == ''KeyPressed2x'' }}' + sequence: !input 'tap_2x_up' + - conditions: '{{ property_key_name == ''002'' and value == ''KeyPressed2x'' }}' + sequence: !input 'tap_2x_dn' + - conditions: '{{ property_key_name == ''001'' and value == ''KeyPressed3x'' }}' + sequence: !input 'tap_3x_up' + - conditions: '{{ property_key_name == ''002'' and value == ''KeyPressed3x'' }}' + sequence: !input 'tap_3x_dn' + - conditions: '{{ property_key_name == ''001'' and value == ''KeyHeldDown'' }}' + sequence: !input 'up_btn_hld' + - conditions: '{{ property_key_name == ''001'' and value == ''KeyReleased'' }}' + sequence: !input 'up_btn_rel' + - conditions: '{{ property_key_name == ''002'' and value == ''KeyHeldDown'' }}' + sequence: !input 'dn_btn_hld' + - conditions: '{{ property_key_name == ''002'' and value == ''KeyReleased'' }}' + sequence: !input 'dn_btn_rel' \ No newline at end of file diff --git a/blueprints/automation/clevertwain/room_lights_to_off.yaml b/blueprints/automation/clevertwain/room_lights_to_off.yaml new file mode 100644 index 0000000..5a7705a --- /dev/null +++ b/blueprints/automation/clevertwain/room_lights_to_off.yaml @@ -0,0 +1,151 @@ +blueprint: + name: Room Lights to Off + description: "## Room Lights to Off\n\nThis blueprint will turn off lights\ + \ in a room based off of the criteria specified. The room will need an input_boolean\ + \ to use for determining if it is occupied. It will also need an input_select to determine\ + \ whether the room is in Auto mode, Manual mode, or forcefully off.\n\nIf specified\ + \ a switch will also be turned off when the room is in Guest mode" + + domain: automation + input: + target_light: + name: Lights + description: The lights in the room that need to be turned off + selector: + entity: + domain: light + + room_mode: + name: Room Mode + description: The Input_Select that describes what mode the room is in. + selector: + entity: + domain: input_select + + manual_option: + name: Manual Option + description: The Input_Select option that implies the room is in Manual mode. + default: Manual + selector: + text: + + off_option: + name: Off Option + description: The Input_Select option that implies the room is forcefully Off. + default: 'Off' + selector: + text: + + room_occupied: + name: Room Occupied + description: The Input_Boolean that describes whether the room is occupied + selector: + entity: + domain: input_boolean + + light_level_sensor: + name: Light Level Sensor + description: To keep from turning the light on when the room is already naturally lit, this sensor is checked + selector: + entity: + domain: sensor + device_class: illuminance + + light_level_trigger: + name: Light Level Trigger + description: The Input_Number that is compared against the specified light level sensor + selector: + entity: + domain: input_number + + manual_switch: + name: Manual Switch (Optional) + description: The Switch that should be turned off if the room is in Manual mode + selector: + entity: + domain: switch + + lighting_automations: + name: Lighting Automations + description: The Input_Boolean that describes whether lighting automations are enabled + selector: + entity: + domain: input_boolean + + guest_mode: + name: Guest Mode (Optional) + description: The Input_Boolean that describes whether guest mode is enabled + selector: + entity: + domain: input_boolean + +mode: restart + +variables: + light_level_sensor: !input light_level_sensor + light_level_trigger: !input light_level_trigger + +trigger: + - platform: state + entity_id: !input room_mode + + - platform: state + entity_id: !input room_occupied + to: 'off' + + - platform: state + entity_id: !input light_level_sensor + + - platform: state + entity_id: !input light_level_trigger + +condition: + - condition: or + conditions: + - condition: state + entity_id: !input room_mode + state: !input off_option + - condition: state + entity_id: !input room_occupied + state: 'off' + - "{{ states(light_level_sensor) | float(default=0) >= states(light_level_trigger) | float(default=0) }}" + +action: + - choose: + - conditions: + - condition: or + conditions: + - condition: and + conditions: + - condition: state + entity_id: !input lighting_automations + state: 'on' + - condition: state + entity_id: !input room_occupied + state: 'off' + - condition: not + conditions: + - condition: state + entity_id: !input room_mode + state: !input manual_option + - "{{ states(light_level_sensor) | float(default=0) >= states(light_level_trigger) | float(default=0) }}" + sequence: + - alias: Turn off lights + service: light.turn_off + target: + entity_id: !input target_light + - choose: + - conditions: + - "{{ manual_switch is defined }}" + - "{{ guest_mode is defined }}" + sequence: + - choose: + - conditions: + - condition: state + entity_id: !input guest_mode + state: 'on' + sequence: + - alias: "Turn off the switch since all lights are off" + service: homeassistant.turn_off + target: + entity_id: !input manual_switch \ No newline at end of file diff --git a/blueprints/automation/clevertwain/room_lights_to_on.yaml b/blueprints/automation/clevertwain/room_lights_to_on.yaml new file mode 100644 index 0000000..cf51895 --- /dev/null +++ b/blueprints/automation/clevertwain/room_lights_to_on.yaml @@ -0,0 +1,265 @@ +blueprint: + name: Room Lights to On + description: "## Room Lights to On\n\nThis blueprint will turn on lights\ + \ in a room based off of the criteria specified. The room will need an input_boolean\ + \ to use for determining if it is occupied. It will also need an input_select to determine\ + \ whether the room is in Auto mode, Manual mode, or forcefully off.\n\nIf specified\ + \ a switch will also be turned off when the room is in Guest mode" + + domain: automation + input: + light_name: + name: Light Name + description: The name of the light that need to be turned on (without the light.##) + selector: + text: + + auto_option: + name: Auto Option + description: The Input_Select option that implies the room is in Auto mode. + default: Auto + selector: + text: + + manual_option: + name: Manual Option + description: The Input_Select option that implies the room is in Manual mode. + default: Manual + selector: + text: + + off_option: + name: Off Option + description: The Input_Select option that implies the room is forcefully Off. + default: 'Off' + selector: + text: + + occupancy_sensor: + name: Occupancy Sensor + description: The Binary_Sensor that defines whether the room is occupied + selector: + entity: + domain: binary_sensor + + motion_sensor: + name: Motion Sensor + description: The motion sensor (or group) that defines whether the room is occupied + selector: + entity: + + automatic_profile: + name: Automatic Profile + description: The Input_Select that describes the mode to use when a room is set to Auto + default: input_select.automatic_light_profile + selector: + entity: + domain: input_select + + room_occupied: + name: Room Occupied + description: The Input_Boolean that describes whether the room is occupied + selector: + entity: + domain: input_boolean + + room_mode: + name: Room Mode + description: The Input_Select that describes what mode the room is in + selector: + entity: + domain: input_select + + home_occupied: + name: Home Occupied + description: The Input_Boolean that describes whether the home is occupied + default: input_boolean.home_occupied + selector: + entity: + domain: input_boolean + + light_level_sensor: + name: Light Level Sensor + description: To keep from turning the light on when the room is already naturally lit, this sensor is checked + selector: + entity: + domain: sensor + device_class: illuminance + + light_level_trigger: + name: Light Level Trigger + description: The Input_Number that is compared against the specified light level sensor + selector: + entity: + domain: input_number + + light_scene_transition: + name: Light Scene Transition + description: The Input_Number that specifies the transition length when needed + default: input_number.light_scene_transition + selector: + entity: + domain: input_number + + manual_switch: + name: Manual Switch (Optional) + description: The Switch that should be turned off if the room is in Manual mode + selector: + entity: + + lighting_automations: + name: Lighting Automations + description: The Input_Boolean that describes whether lighting automations are enabled + default: input_boolean.lighting_automations + selector: + entity: + domain: input_boolean + + guest_mode: + name: Guest Mode (Optional) + description: The Input_Boolean that describes whether guest mode is enabled + default: input_boolean.guest_mode + selector: + entity: + domain: input_boolean + +mode: single +max_exceeded: silent + +variables: + switch_name: !input manual_switch + light_name: !input light_name + light_entity: "{{'light.' ~ light_name}}" + room_mode: "{{'input_select.' ~ light_name}}" + automatic_profile: !input automatic_profile + light_scene_transition: !input light_scene_transition + light_level_trigger: "{{'input_number.' ~ light_name ~ '_light_level_trigger'}}" + occupancy_sensor: "{{'binary_sensor.' ~ light_name ~ '_occupied'}}" + auto_option: !input auto_option + manual_option: !input manual_option + off_option: !input off_option + +trigger: + - platform: state + id: mode_change + entity_id: + - !input room_mode + - !input automatic_profile + + - platform: state + id: light_level + entity_id: + - !input light_level_sensor + - !input light_level_trigger + + - platform: state + id: occupied + entity_id: !input occupancy_sensor + to: "on" + + - platform: state + id: motion + entity_id: !input motion_sensor + to: "on" + + - platform: state + entity_id: !input room_occupied + to: "on" + +condition: + - alias: "Home is occupied" + condition: state + entity_id: !input home_occupied + state: "on" + + - alias: "Check if light should turn on" + condition: or + conditions: + + - alias: "Guest mode is on" + condition: state + entity_id: !input guest_mode + state: "on" + + - alias: "Motion or occupancy were detected in a dim room" + condition: and + conditions: + + - alias: "Light level below trigger amount" + condition: numeric_state + entity_id: !input light_level_sensor + below: !input light_level_trigger + + - alias: "Motion or occupancy were detected" + condition: or + conditions: + - alias: "Motion was detected" + condition: trigger + id: "motion" + - alias: "Occupancy was detected" + condition: trigger + id: "occupied" + + - alias: "A scene changed and the lights are already on" + condition: and + conditions: + - condition: trigger + id: "mode_change" + + - condition: state + entity_id: !input room_occupied + state: "on" + +action: + - alias: "Make sure the switch is turned on" + service: homeassistant.turn_on + target: + entity_id: !input manual_switch + - choose: + - alias: "If the room is set to manual, just turn the lights on" + conditions: + - "{{is_state(room_mode,manual_option)}}" + sequence: + - service: light.turn_on + target: + entity_id: "{{light_entity}}" + + - alias: "If the room is set to auto and the lights are on, change to the Automatic Light Profile scene with a transition" + conditions: + - "{{is_state(room_mode,auto_option)}}" + - "{{is_state(light_entity,'on')}}" + sequence: + - service: scene.turn_on + data: + transition: "{{ states(light_scene_transition) }}" + target: + entity_id: "scene.{{light_name}}_{{states(automatic_profile).lower().replace(' ','_')}}" + + - alias: "If the room is set to auto and the lights are off, change to the Automatic Light Profile scene without a transition" + conditions: + - "{{is_state(room_mode,auto_option)}}" + - "{{is_state(light_entity,'off')}}" + sequence: + - service: scene.turn_on + target: + entity_id: "scene.{{light_name}}_{{states(automatic_profile).lower().replace(' ','_')}}" + + - alias: "If the room is not set to auto and the lights are on, change to the room mode scene with a transition" + conditions: + - "{{is_state(light_entity,'on')}}" + sequence: + - service: scene.turn_on + data: + transition: "{{ states(light_scene_transition) }}" + target: + entity_id: "scene.{{light_name}}_{{states(mode_name).lower().replace(' ','_')}}" + + - alias: "If the room is not set to auto and the lights are on, change to the room scene without a transition" + conditions: + - "{{is_state(light_entity,'off')}}" + sequence: + - service: scene.turn_on + target: + entity_id: "scene.{{light_name}}_{{states(mode_name).lower().replace(' ','_')}}" + + - delay: 1 \ No newline at end of file diff --git a/blueprints/automation/clevertwain/room_occupancy.yaml b/blueprints/automation/clevertwain/room_occupancy.yaml new file mode 100644 index 0000000..4944362 --- /dev/null +++ b/blueprints/automation/clevertwain/room_occupancy.yaml @@ -0,0 +1,153 @@ +blueprint: + name: Room Occupancy + description: "## Room Occupancy\n\nThis blueprint will turn on and off the\ + \ input_boolean associated with the occupancy of a room. The room will need an input_boolean\ + \ to use for determining if it is occupied. It will also need an input_select to determine\ + \ whether the room is in Auto mode, Manual mode, or forcefully off.\n\nIf specified\ + \ a switch will also be turned off when the room is in Guest mode" + + domain: automation + input: + room_occupied: + name: Room Occupied + description: The Input_Boolean that should be turned off + selector: + entity: + domain: input_boolean + + home_occupied: + name: Home Occupied + description: The Input_Boolean that describes whether the home is occupied + default: input_boolean.home_occupied + selector: + entity: + domain: input_boolean + + binary_sensor: + name: Binary Sensor + description: The Binary_Sensor that describes whether the room is occupied + selector: + entity: + domain: binary_sensor + + delay_seconds: + name: Delay Seconds + description: The number of seconds to wait after the binary sensor turns off + default: 300 + selector: + number: + min: 0 + max: 3600 + unit_of_measurement: seconds + + house_mode: + name: House Mode (Optional) + description: The Input_Select that describes what mode the house is in. + default: input_select.house + selector: + entity: + domain: input_select + + manual_option: + name: Manual Option (optional) + description: The Input_Select option that implies the House is in Manual mode. + default: Manual + selector: + text: + +mode: restart +trigger: + - platform: state + entity_id: !input home_occupied + from: 'on' + to: 'off' + + - platform: state + id: room_occupied + entity_id: !input binary_sensor + from: 'off' + to: 'on' + + - platform: state + id: 'not_occupied' + entity_id: + - !input home_occupied + - !input binary_sensor + to: 'off' + for: + seconds: !input delay_seconds + + - platform: time_pattern + id: 'time_pattern' + minutes: "/5" + +condition: + - condition: or + conditions: + - alias: "Home not occupied" + condition: state + entity_id: !input home_occupied + state: 'off' + + - alias: "Room just occupied" + condition: trigger + id: room_occupied + + - alias: "Room not occupied" + condition: and + conditions: + - condition: state + entity_id: !input room_occupied + state: 'on' + + - condition: state + entity_id: !input binary_sensor + state: 'off' + +action: + - choose: + - alias: "Home not occupied" + conditions: + - condition: state + entity_id: !input home_occupied + state: 'off' + sequence: + - service: homeassistant.turn_off + entity_id: !input room_occupied + + - alias: "Room not occupied" + conditions: + - condition: trigger + id: not_occupied + - condition: not + conditions: + - condition: state + entity_id: !input house_mode + state: !input manual_option + sequence: + - service: homeassistant.turn_off + entity_id: !input room_occupied + + - alias: "Room occupied" + conditions: + - condition: trigger + id: room_occupied + sequence: + - service: homeassistant.turn_on + entity_id: !input room_occupied + + - alias: "Time pattern" + conditions: + - condition: trigger + id: time_pattern + - condition: state + entity_id: !input room_occupied + state: 'on' + - condition: state + entity_id: !input binary_sensor + state: 'off' + for: + seconds: !input delay_seconds + sequence: + - service: homeassistant.turn_off + entity_id: !input room_occupied \ No newline at end of file diff --git a/blueprints/automation/cree8/zwave-js-inovelli-lzw36-fan-switch-dimmer.yaml b/blueprints/automation/cree8/zwave-js-inovelli-lzw36-fan-switch-dimmer.yaml new file mode 100644 index 0000000..5f461c2 --- /dev/null +++ b/blueprints/automation/cree8/zwave-js-inovelli-lzw36-fan-switch-dimmer.yaml @@ -0,0 +1,164 @@ +blueprint: + name: Inovelli Red Series LZW36 Fan Controller (ZWave-JS) + description: Create automations for the Inovelli Fan/Switch combo the ZWave-JS integration. + domain: automation + input: + inovelli_fan_switch: + name: Inovelli FanController + description: List of available Inovelli LZW36 dimmer combos. + selector: + device: + integration: zwave_js + manufacturer: Inovelli + model: LZW36 + button_a: + name: Button A - Up/On press 1x + description: Action to run, when the button is pressed one time. + default: [] + selector: + action: {} + button_b: + name: Button B - Down/Off press 1x + description: Action to run, when the button is pressed one time. + default: [] + selector: + action: {} + button_a_held: + name: Button A - Up/On held down + description: Action to run, when the button is held down. + default: [] + selector: + action: {} + button_b_held: + name: Button B - Down/Off held down + description: Action to run, when the button is held down. + default: [] + selector: + action: {} + button_a2: + name: Button A - Up/On press 2x + description: Action to run, when the button is pressed two times. + default: [] + selector: + action: {} + button_b2: + name: Button B - Down/Off press 2x + description: Action to run, when the button is pressed two times. + default: [] + selector: + action: {} + button_a3: + name: Button A - Up/On press 3x + description: Action to run, when the button is pressed three times. + default: [] + selector: + action: {} + button_b3: + name: Button B - Down/Off press 3x + description: Action to run, when the button is pressed three times. + default: [] + selector: + action: {} + button_a4: + name: Button A - Up/On press 4x + description: Action to run, when the button is pressed four times. + default: [] + selector: + action: {} + button_b4: + name: Button B - Down/Off press 4x + description: Action to run, when the button is pressed four times. + default: [] + selector: + action: {} + button_a5: + name: Button A - Up/On press 5x + description: Action to run, when the button is pressed five times. + default: [] + selector: + action: {} + button_b5: + name: Button B - Down/Off press 5x + description: Action to run, when the button is pressed five times. + default: [] + selector: + action: {} + button_c1: + name: Button C - Up/Increase (Top) + description: Action to run, when the light rocker is pressed up. + default: [] + selector: + action: {} + button_c2: + name: Button C - Down/Decrease (Top) + description: Action to run, when the light rocker is pressed down. + default: [] + selector: + action: {} + button_d1: + name: Button D - Up/Increase (Bottom) + description: Action to run, when the fan rocker is pressed up. + default: [] + selector: + action: {} + button_d2: + name: Button D - Down/Decrease (Bottom) + description: Action to run, when the fan rocker is pressed down. + default: [] + selector: + action: {} + source_url: https://community.home-assistant.io/t/zwave-js-inovelli-lzw36-fan-switch-dimmer/277704 +mode: single +max_exceeded: silent +variables: + device_id: !input 'inovelli_fan_switch' +trigger: +- platform: event + event_type: zwave_js_value_notification +condition: '{{ trigger.event.data.device_id == device_id }}' +action: +- variables: + button_id: '{{ trigger.event.data.property_key_name }}' + press_count: '{{ trigger.event.data.value }}' +- service: logbook.log + data: + name: Button Id + message: '{{ button_id }}' +- service: logbook.log + data: + name: Press Count + message: '{{ press_count }}' + +- choose: + - conditions: '{{ button_id == "002" and press_count == "KeyPressed" }}' + sequence: !input 'button_a' + - conditions: '{{ button_id == "001" and press_count == "KeyPressed" }}' + sequence: !input 'button_b' + - conditions: '{{ button_id == "002" and press_count == "KeyHeldDown" }}' + sequence: !input 'button_a_held' + - conditions: '{{ button_id == "001" and press_count == "KeyHeldDown" }}' + sequence: !input 'button_b_held' + - conditions: '{{ button_id == "002" and press_count == "KeyPressed2x" }}' + sequence: !input 'button_a2' + - conditions: '{{ button_id == "001" and press_count == "KeyPressed2x" }}' + sequence: !input 'button_b2' + - conditions: '{{ button_id == "002" and press_count == "KeyPressed3x" }}' + sequence: !input 'button_a3' + - conditions: '{{ button_id == "001" and press_count == "KeyPressed3x" }}' + sequence: !input 'button_b3' + - conditions: '{{ button_id == "002" and press_count == "KeyPressed4x" }}' + sequence: !input 'button_a4' + - conditions: '{{ button_id == "001" and press_count == "KeyPressed4x" }}' + sequence: !input 'button_b4' + - conditions: '{{ button_id == "002" and press_count == "KeyPressed5x" }}' + sequence: !input 'button_a5' + - conditions: '{{ button_id == "001" and press_count == "KeyPressed5x" }}' + sequence: !input 'button_b5' + - conditions: '{{ button_id == "003" and press_count == "KeyPressed" }}' + sequence: !input 'button_c1' + - conditions: '{{ button_id == "004" and press_count == "KeyPressed" }}' + sequence: !input 'button_c2' + - conditions: '{{ button_id == "005" and press_count == "KeyPressed" }}' + sequence: !input 'button_d1' + - conditions: '{{ button_id == "006" and press_count == "KeyPressed" }}' + sequence: !input 'button_d2' diff --git a/blueprints/automation/homeassistant/motion_light.yaml b/blueprints/automation/homeassistant/motion_light.yaml new file mode 100644 index 0000000..dc2d3ca --- /dev/null +++ b/blueprints/automation/homeassistant/motion_light.yaml @@ -0,0 +1,83 @@ +blueprint: + name: Motion-activated Light + description: Turn on a light when motion is detected. + domain: automation + source_url: https://github.com/home-assistant/core/blob/dev/homeassistant/components/automation/blueprints/motion_light.yaml + input: + motion_entity: + name: Motion Sensor + selector: + entity: + domain: binary_sensor + device_class: motion + light_target: + name: Light + selector: + target: + entity: + domain: light + light_profile: + name: Light Profile + selector: + target: + entity: + domain: input_select + no_motion_wait: + name: Wait time + description: Time to leave the light on after last motion is detected. + default: 120 + selector: + number: + min: 0 + max: 3600 + unit_of_measurement: seconds + presence_boolean: + name: Presence boolean + description: The selected input boolean needs to be off before the light will turn off. + selector: + target: + entity: + domain: input_boolean + +# If motion is detected within the delay, +# we restart the script. +mode: restart +max_exceeded: silent + +trigger: + - platform: state + id: 'motion_or_presence_on' + entity_id: !input motion_entity + from: "off" + to: "on" + + - platform: state + id: 'presence_off' + entity_id: !input presence_boolean + from: "on" + to: "off" + +action: + - choose: + - conditions: + - condition: trigger + trigger: 'motion_or_presence_on' + sequence: + - service: light.turn_on + target: !input light_target + - wait_for_trigger: + platform: state + entity_id: !input motion_entity + from: "on" + to: "off" + - delay: !input no_motion_wait + - service: light.turn_off + target: !input light_target + + - conditions: + - condition: trigger + trigger: 'presence_off' + sequence: + - service: light.turn_off + target: !input light_target + diff --git a/blueprints/automation/homeassistant/notify_leaving_zone.yaml b/blueprints/automation/homeassistant/notify_leaving_zone.yaml new file mode 100644 index 0000000..d3a70d7 --- /dev/null +++ b/blueprints/automation/homeassistant/notify_leaving_zone.yaml @@ -0,0 +1,43 @@ +blueprint: + name: Zone Notification + description: Send a notification to a device when a person leaves a specific zone. + domain: automation + source_url: https://github.com/home-assistant/core/blob/dev/homeassistant/components/automation/blueprints/notify_leaving_zone.yaml + input: + person_entity: + name: Person + selector: + entity: + domain: person + zone_entity: + name: Zone + selector: + entity: + domain: zone + notify_device: + name: Device to notify + description: Device needs to run the official Home Assistant app to receive notifications. + selector: + device: + integration: mobile_app + +trigger: + platform: state + entity_id: !input person_entity + +variables: + zone_entity: !input zone_entity + # This is the state of the person when it's in this zone. + zone_state: "{{ states[zone_entity].name }}" + person_entity: !input person_entity + person_name: "{{ states[person_entity].name }}" + +condition: + condition: template + value_template: "{{ trigger.from_state.state == zone_state and trigger.to_state.state != zone_state }}" + +action: + domain: mobile_app + type: notify + device_id: !input notify_device + message: "{{ person_name }} has left {{ zone_state }}" diff --git a/blueprints/automation/hunterjm/frigate_notification.yaml b/blueprints/automation/hunterjm/frigate_notification.yaml new file mode 100644 index 0000000..326314f --- /dev/null +++ b/blueprints/automation/hunterjm/frigate_notification.yaml @@ -0,0 +1,225 @@ +blueprint: + name: Frigate Notification + description: "## Frigate Mobile App Notification\n\nThis blueprint will send a notification\ + \ to your device when a Frigate event for the selected camera is fired. The notification\ + \ will initially include the thumbnail of the detection, but will update to include\ + \ actionable notifications allowing you to view the saved clip/snapshot when available,\ + \ or silence the notification for a configurable amount of time.\n\nWith this\ + \ blueprint, you may send the notification to multiple devices by leaving \"Device\"\ + \ blank and instead use a [notification group][1].\n\n### Required entities:\n\ + \ - Frigate Camera Name\n - Mobile App Device **or** the name of a Notification\ + \ Group\n\n### Optional features:\n - You can limit notifications to objects\ + \ entering **any** pre-defined [zones][2] in Frigate.\n - You can specify which\ + \ [zones][2] to be notified about. This must be a list (e.g.):\n ```yaml\n\ + \ - backyard\n ```\n - You can specify what type of [objects][3] to be\ + \ notified about. This must be a list (e.g.):\n ```yaml\n - person\n \ + \ - car\n ```\n - You can disable notifications if a presence entity or group\ + \ is \"home\".\n - You can configure a cooldown for the camera to reduce the\ + \ number of notifications when back-to-back events occur.\n - You can silence\ + \ future notifications for a defined amount of time through actionable notifications.\ + \ This is helpful in situations where you know you will be triggering detections\ + \ for an extended period of time, like when the kids are playing outside.\n\n\ + [1]: https://companion.home-assistant.io/docs/notifications/notifications-basic#sending-notifications-to-multiple-devices\n\ + [2]: https://blakeblackshear.github.io/frigate/configuration/cameras#zones\n[3]:\ + \ https://blakeblackshear.github.io/frigate/configuration/objects\n" + domain: automation + source_url: https://gist.github.com/hunterjm/23c1588a9f2b8b9c2a62ffc364e17f8c + input: + camera: + name: Frigate Camera + description: The name of the camera as defined in your frigate configuration. + notify_device: + name: Device + description: The device must run the official Home Assistant app to receive + notifications. + default: false + selector: + device: + integration: mobile_app + notify_group: + name: Notification Group + description: The name of the notification group to call. + default: '' + base_url: + name: (Optional) Base URL + description: 'The external url for your Home Assistant instance. This will default + to a relative URL and will open the clips in the app instead of the browser, + which may cause issues on some devices. + + ' + default: '' + zone_filter: + name: (Optional) Zone Filter + description: Only notify if object has entered a defined zone. + default: false + selector: + boolean: {} + zones: + name: (Optional) Trigger Zones + description: A list (-) of zones you wish to recieve notifications for. + default: [] + selector: + object: {} + labels: + name: (Optional) Trigger Objects + description: A list (-) of objects you wish to recieve notifications for. + default: [] + selector: + object: {} + presence_filter: + name: (Optional) Presence Filter + description: Only notify if selected presence entity is not "home". + default: '' + selector: + entity: {} + cooldown: + name: (Optional) Cooldown + description: Delay before sending another notification for this camera after + the last event. + default: 30 + selector: + number: + max: 300.0 + min: 0.0 + unit_of_measurement: seconds + step: 1.0 + mode: slider + silence_timer: + name: (Optional) Silence Notifications + description: 'How long to silence notifications for this camera when requested + as part of the actionable notification. + + ' + default: 30 + selector: + number: + max: 300.0 + min: 0.0 + unit_of_measurement: minutes + step: 1.0 + mode: slider +mode: single +max_exceeded: silent +trigger: + platform: mqtt + topic: frigate/events + payload: !input 'camera' + value_template: '{{ value_json[''after''][''camera''] }}' +variables: + id: '{{ trigger.payload_json[''after''][''id''] }}' + camera: '{{ trigger.payload_json[''after''][''camera''] }}' + camera_name: '{{ camera | replace(''_'', '' '') | title }}' + object: '{{ trigger.payload_json[''after''][''label''] }}' + label: '{{ object | title }}' + entered_zones: '{{ trigger.payload_json[''after''][''entered_zones''] }}' + type: '{{ trigger.payload_json[''type''] }}' + base_url: !input 'base_url' + group_target: !input 'notify_group' + zone_only: !input 'zone_filter' + input_zones: !input 'zones' + zones: '{{ input_zones | list }}' + input_labels: !input 'labels' + labels: '{{ input_labels | list }}' + presence_entity: !input 'presence_filter' +condition: +- '{{ type != ''end'' }}' +- '{{ not zone_only or entered_zones|length > 0 }}' +- '{{ not zones|length or zones|select(''in'', entered_zones)|list|length > 0 }}' +- '{{ not labels|length or object in labels }}' +- '{{ not presence_entity or not is_state(presence_entity, ''home'') }}' +action: +- choose: + - conditions: '{{ not group_target }}' + sequence: + - device_id: !input 'notify_device' + domain: mobile_app + type: notify + message: A {{ label }} was detected on the {{ camera_name }} camera. + data: + tag: '{{ id }}' + group: frigate-notification-{{ camera }} + image: /api/frigate/notifications/{{id}}/thumbnail.jpg?format=android + attachment: + url: /api/frigate/notifications/{{id}}/thumbnail.jpg + default: + - service: notify.{{ group_target }} + data: + message: A {{ label }} was detected on the {{ camera_name }} camera. + data: + tag: '{{ id }}' + group: frigate-notification-{{ camera }} + image: /api/frigate/notifications/{{id}}/thumbnail.jpg?format=android + attachment: + url: /api/frigate/notifications/{{id}}/thumbnail.jpg +- repeat: + sequence: + - wait_for_trigger: + - platform: mqtt + topic: frigate/events + payload: '{{ id }}' + value_template: '{{ value_json[''after''][''id''] }}' + timeout: + minutes: 2 + continue_on_timeout: false + - condition: template + value_template: '{{ wait.trigger.payload_json[''type''] == ''end'' }}' + - choose: + - conditions: '{{ not group_target }}' + sequence: + - device_id: !input 'notify_device' + domain: mobile_app + type: notify + message: A {{ label }} was detected on the {{ camera_name }} camera. + data: + tag: '{{ id }}' + group: frigate-notification-{{ camera }} + url: '{{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4' + clickAction: '{{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4' + image: /api/frigate/notifications/{{id}}/thumbnail.jpg?format=android + sound: none + attachment: + url: /api/frigate/notifications/{{id}}/thumbnail.jpg + actions: + - action: URI + title: View Clip + uri: '{{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4' + - action: URI + title: View Snapshot + uri: '{{base_url}}/api/frigate/notifications/{{id}}/snapshot.jpg' + - action: silence-{{ camera }} + title: Silence Notifications + destructive: true + default: + - service: notify.{{ group_target }} + data: + message: A {{ label }} was detected on the {{ camera_name }} camera. + data: + tag: '{{ id }}' + group: frigate-notification-{{ camera }} + url: '{{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4' + clickAction: '{{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4' + image: /api/frigate/notifications/{{id}}/thumbnail.jpg?format=android + sound: none + attachment: + url: /api/frigate/notifications/{{id}}/thumbnail.jpg + actions: + - action: URI + title: View Clip + uri: '{{base_url}}/api/frigate/notifications/{{id}}/{{camera}}/clip.mp4' + - action: URI + title: View Snapshot + uri: '{{base_url}}/api/frigate/notifications/{{id}}/snapshot.jpg' + - action: silence-{{ camera }} + title: Silence Notifications + destructive: true + until: '{{ wait.trigger.payload_json[''type''] == ''end'' }}' +- wait_for_trigger: + - platform: event + event_type: mobile_app_notification_action + event_data: + action: silence-{{ camera }} + timeout: + seconds: !input 'cooldown' + continue_on_timeout: false +- delay: + minutes: !input 'silence_timer' diff --git a/blueprints/automation/kpine/ge_double.yaml b/blueprints/automation/kpine/ge_double.yaml new file mode 100644 index 0000000..04ddf7f --- /dev/null +++ b/blueprints/automation/kpine/ge_double.yaml @@ -0,0 +1,41 @@ +blueprint: + name: GE Switch Double Taps + description: Create automations to react to double taps from supporting GE switches. + domain: automation + input: + device: + name: Switch Device + description: A GE switch that supports double taps. + selector: + device: + integration: zwave_js + manufacturer: GE/Jasco + double_tap_on: + name: Double Tap On + description: Actions to run for a double tap on. + default: [] + selector: + action: {} + double_tap_off: + name: Double Tap Off + description: Actions to run for a double tap off. + default: [] + selector: + action: {} + source_url: https://gist.github.com/kpine/65e6324a0e6a9d48f9f50f77310ecd7f +mode: single +max_exceeded: silent +trigger: + platform: event + event_type: zwave_js_value_notification + event_data: + device_id: !input 'device' + command_class: 32 +action: +- variables: + value: '{{ trigger.event.data.value_raw }}' +- choose: + - conditions: '{{ value == 0 }}' + sequence: !input 'double_tap_off' + - conditions: '{{ value == 255 }}' + sequence: !input 'double_tap_on' diff --git a/blueprints/automation/rvaidya/aqara_magic_cube.yaml b/blueprints/automation/rvaidya/aqara_magic_cube.yaml new file mode 100644 index 0000000..e8983a8 --- /dev/null +++ b/blueprints/automation/rvaidya/aqara_magic_cube.yaml @@ -0,0 +1,755 @@ +blueprint: + name: Aqara Magic Cube + description: Control anything using Aqara Magic Cube. + domain: automation + input: + remote: + name: Magic Cube + description: Select the Aqara Magic Cube device + selector: + device: + integration: zha + manufacturer: LUMI + multiple: false + active_face: + name: Active Face + description: Select the number input for tracking active face + selector: + entity: + domain: input_number + multiple: false + flip_90: + name: Flip 90 degrees + description: 'Actions to run when cube flips 90 degrees. + + This cancels all specific 90 degrees functions. + + e.g From side 1 to side 2 will be the same as from side 6 to side 2' + default: false + selector: + boolean: {} + cube_flip_90: + name: Flip cube 90 degrees + description: Action to run when cube flips 90 degrees. This only works if 'Flip + 90 degrees' is toggled + default: [] + selector: + action: {} + flip_180: + name: Flip 180 degrees + description: 'Actions to run when cube flips 180 degrees. + + This cancels all specific 180 degrees functions + + e.g From side 1 to side 4 will be the same as from side 5 to side 2' + default: false + selector: + boolean: {} + cube_flip_180: + name: Flip cube 180 degrees + description: Action to run when cube flips 180 degrees. This only works if 'Flip + 180 degrees' is toggled + default: [] + selector: + action: {} + flip_any: + name: Flip cube to any side + description: 'Actions to run when cube flips to any side. + + This cares about the end side, but cancels all specific flip functions. + + e.g From side 1 to side 2 will be the same as from side 6 to side 2 + + but different than side 1 to side 5' + default: false + selector: + boolean: {} + cube_flip_1: + name: Flip cube to side 1 + description: Action to run when cube flips to side 1. This only works if 'Flip + any' is toggled + default: [] + selector: + action: {} + cube_flip_2: + name: Flip cube to side 2 + description: Action to run when cube flips to side 2. This only works if 'Flip + any' is toggled + default: [] + selector: + action: {} + cube_flip_3: + name: Flip cube to side 3 + description: Action to run when cube flips to side 3. This only works if 'Flip + any' is toggled + default: [] + selector: + action: {} + cube_flip_4: + name: Flip cube to side 4 + description: Action to run when cube flips to side 4. This only works if 'Flip + any' is toggled + default: [] + selector: + action: {} + cube_flip_5: + name: Flip cube to side 5 + description: Action to run when cube flips to side 5. This only works if 'Flip + any' is toggled + default: [] + selector: + action: {} + cube_flip_6: + name: Flip cube to side 6 + description: Action to run when cube flips to side 6. This only works if 'Flip + any' is toggled + default: [] + selector: + action: {} + slide_any_side: + name: Slide any side + description: 'Actions to run when cube slides on any side. + + This cancels all specific ''slide'' functions + + e.g Slide on side 1 will be the same as slide on side 2' + default: false + selector: + boolean: {} + cube_slide_any: + name: Slide cube on any side + description: Action to run when cube slides on any side. This only works if + 'Slide any side' is toggled + default: [] + selector: + action: {} + knock_any_side: + name: Knock on any side + description: 'Actions to run when knocking cube regardless of the side. + + This cancels all specific ''knock'' functions + + e.g Knock on side 1 will be the same as knocking side 2' + default: false + selector: + boolean: {} + cube_knock_any: + name: Knock cube on any side + description: Action to run when knocking cube on any side. This only works if + 'Knock on any side' is toggled + default: [] + selector: + action: {} + one_to_two: + name: From side 1 to side 2 + description: Action to run when cube goes from side 1 to side 2 + default: [] + selector: + action: {} + one_to_three: + name: From side 1 to side 3 + description: Action to run when cube goes from side 1 to side 3 + default: [] + selector: + action: {} + one_to_four: + name: From side 1 to side 4 + description: Action to run when cube goes from side 1 to side 4 + default: [] + selector: + action: {} + one_to_five: + name: From side 1 to side 5 + description: Action to run when cube goes from side 1 to side 5 + default: [] + selector: + action: {} + one_to_six: + name: From side 1 to side 6 + description: Action to run when cube goes from side 1 to side 6 + default: [] + selector: + action: {} + two_to_one: + name: From side 2 to side 1 + description: Action to run when cube goes from side 2 to side 1 + default: [] + selector: + action: {} + two_to_three: + name: From side 2 to side 3 + description: Action to run when cube goes from side 2 to side 3 + default: [] + selector: + action: {} + two_to_four: + name: From side 2 to side 4 + description: Action to run when cube goes from side 2 to side 4 + default: [] + selector: + action: {} + two_to_five: + name: From side 2 to side 5 + description: Action to run when cube goes from side 2 to side 5 + default: [] + selector: + action: {} + two_to_six: + name: From side 2 to side 6 + description: Action to run when cube goes from side 2 to side 6 + default: [] + selector: + action: {} + three_to_one: + name: From side 3 to side 1 + description: Action to run when cube goes from side 3 to side 1 + default: [] + selector: + action: {} + three_to_two: + name: From side 3 to side 2 + description: Action to run when cube goes from side 3 to side 2 + default: [] + selector: + action: {} + three_to_four: + name: From side 3 to side 4 + description: Action to run when cube goes from side 3 to side 4 + default: [] + selector: + action: {} + three_to_five: + name: From side 3 to side 5 + description: Action to run when cube goes from side 3 to side 5 + default: [] + selector: + action: {} + three_to_six: + name: From side 3 to side 6 + description: Action to run when cube goes from side 3 to side 6 + default: [] + selector: + action: {} + four_to_one: + name: From side 4 to side 1 + description: Action to run when cube goes from side 4 to side 1 + default: [] + selector: + action: {} + four_to_two: + name: From side 4 to side 2 + description: Action to run when cube goes from side 4 to side 2 + default: [] + selector: + action: {} + four_to_three: + name: From side 4 to side 3 + description: Action to run when cube goes from side 4 to side 3 + default: [] + selector: + action: {} + four_to_five: + name: From side 4 to side 5 + description: Action to run when cube goes from side 4 to side 5 + default: [] + selector: + action: {} + four_to_six: + name: From side 4 to side 6 + description: Action to run when cube goes from side 4 to side 6 + default: [] + selector: + action: {} + five_to_one: + name: From side 5 to side 1 + description: Action to run when cube goes from side 5 to side 1 + default: [] + selector: + action: {} + five_to_two: + name: From side 5 to side 2 + description: Action to run when cube goes from side 5 to side 2 + default: [] + selector: + action: {} + five_to_three: + name: From side 5 to side 3 + description: Action to run when cube goes from side 5 to side 3 + default: [] + selector: + action: {} + five_to_four: + name: From side 5 to side 4 + description: Action to run when cube goes from side 5 to side 4 + default: [] + selector: + action: {} + five_to_six: + name: From side 5 to side 6 + description: Action to run when cube goes from side 5 to side 6 + default: [] + selector: + action: {} + six_to_one: + name: From side 6 to side 1 + description: Action to run when cube goes from side 6 to side 1 + default: [] + selector: + action: {} + six_to_two: + name: From side 6 to side 2 + description: Action to run when cube goes from side 6 to side 2 + default: [] + selector: + action: {} + six_to_three: + name: From side 6 to side 3 + description: Action to run when cube goes from side 6 to side 3 + default: [] + selector: + action: {} + six_to_four: + name: From side 6 to side 4 + description: Action to run when cube goes from side 6 to side 4 + default: [] + selector: + action: {} + six_to_five: + name: From side 6 to side 5 + description: Action to run when cube goes from side 6 to side 5 + default: [] + selector: + action: {} + one_to_one: + name: Knock - Side 1 + description: Action to run when knocking on side 1 + default: [] + selector: + action: {} + two_to_two: + name: Knock - Side 2 + description: Action to run when knocking on side 2 + default: [] + selector: + action: {} + three_to_three: + name: Knock - Side 3 + description: Action to run when knocking on side 3 + default: [] + selector: + action: {} + four_to_four: + name: Knock - Side 4 + description: Action to run when knocking on side 4 + default: [] + selector: + action: {} + five_to_five: + name: Knock - Side 5 + description: Action to run when knocking on side 5 + default: [] + selector: + action: {} + six_to_six: + name: Knock - Side 6 + description: Action to run when knocking on side 6 + default: [] + selector: + action: {} + slide_on_one: + name: Slide - Side 1 up + description: Action to run when slides with Side 1 up + default: [] + selector: + action: {} + slide_on_two: + name: Slide - Side 2 up + description: Action to run when slides with Side 2 up + default: [] + selector: + action: {} + slide_on_three: + name: Slide - Side 3 up + description: Action to run when slides with Side 3 up + default: [] + selector: + action: {} + slide_on_four: + name: Slide - Side 4 up + description: Action to run when slides with Side 4 up + default: [] + selector: + action: {} + slide_on_five: + name: Slide - Side 5 up + description: Action to run when slides with Side 5 up + default: [] + selector: + action: {} + slide_on_six: + name: Slide - Side 6 up + description: Action to run when slides with Side 6 up + default: [] + selector: + action: {} + cube_wake: + name: Wake up the cube + description: Action to run when cube wakes up + default: [] + selector: + action: {} + cube_drop: + name: Cube drops + description: Action to run when cube drops + default: [] + selector: + action: {} + cube_shake: + name: Shake cube + description: Action to run when you shake the cube + default: [] + selector: + action: {} + rotate_any_side: + name: Rotate any side + description: 'Actions to run when rotating cube regardless of the side. + + This cancels all side-specific ''rotate'' functions + + e.g Rotate on side 1 will be the same as rotating side 2' + default: false + selector: + boolean: {} + rotate_right: + name: Rotate right + description: Action to run when cube rotates right on any side. This only works + if 'Rotate any side' is toggled + default: [] + selector: + action: {} + rotate_left: + name: Rotate left + description: Action to run when cube rotates left on any side. This only works + if 'Rotate any side' is toggled + default: [] + selector: + action: {} + rotate_left_side_1: + name: Rotate cube left with side 1 up + default: [] + selector: + action: {} + rotate_left_side_2: + name: Rotate cube left with side 2 up + default: [] + selector: + action: {} + rotate_left_side_3: + name: Rotate cube left with side 3 up + default: [] + selector: + action: {} + rotate_left_side_4: + name: Rotate cube left with side 4 up + default: [] + selector: + action: {} + rotate_left_side_5: + name: Rotate cube left with side 5 up + default: [] + selector: + action: {} + rotate_left_side_6: + name: Rotate cube left with side 6 up + default: [] + selector: + action: {} + rotate_right_side_1: + name: Rotate cube right with side 1 up + default: [] + selector: + action: {} + rotate_right_side_2: + name: Rotate cube right with side 2 up + default: [] + selector: + action: {} + rotate_right_side_3: + name: Rotate cube right with side 3 up + default: [] + selector: + action: {} + rotate_right_side_4: + name: Rotate cube right with side 4 up + default: [] + selector: + action: {} + rotate_right_side_5: + name: Rotate cube right with side 5 up + default: [] + selector: + action: {} + rotate_right_side_6: + name: Rotate cube right with side 6 up + default: [] + selector: + action: {} + source_url: https://gist.github.com/rvaidya/3fe8a5f3b1d113ffa8625cf5ff2c88a3 +mode: restart +max_exceeded: silent +trigger: +- platform: event + event_type: zha_event + event_data: + device_id: !input remote +action: +- variables: + command: '{{ trigger.event.data.command }}' + value: '{{ trigger.event.data.args.value | default(0) }}' + flip_degrees: '{{ trigger.event.data.args.flip_degrees | default(0) }}' + flip_any: !input flip_any + flip_90: !input flip_90 + flip_180: !input flip_180 + slide_any_side: !input slide_any_side + knock_any_side: !input knock_any_side + rotate_any_side: !input rotate_any_side + flip90: 64 + flip180: 128 + slide: 256 + knock: 512 + shake: 0 + drop: 3 + active_face_entity: !input active_face + active_face: '{{ states(active_face_entity) | int }}' + activated_face: "\n{% if command == \"slide\" or command == \"knock\" %}\n\n {% + if trigger.event.data.args.activated_face == 1 %} 1\n\n {% elif trigger.event.data.args.activated_face + == 2 %} 5\n\n {% elif trigger.event.data.args.activated_face == 3 %} 6\n\n + \ {% elif trigger.event.data.args.activated_face == 4 %} 4\n\n {% elif trigger.event.data.args.activated_face + == 5 %} 2\n\n {% elif trigger.event.data.args.activated_face == 6 %} 3\n\n + \ {% endif %}\n\n{% elif command == 'flip' %}\n\n {{ trigger.event.data.args.activated_face + | int }}\n\n{% endif %}\n" + from_face: "\n{% if command == \"flip\" and flip_degrees == 90 %}\n\n {{ ((value + - flip90 - (trigger.event.data.args.activated_face - 1)) / 8) + 1 | int }}\n\n{% + endif %}\n" + relative_degrees: "\n{% if command == \"rotate_right\" or command == \"rotate_left\" + %}\n\n {{ trigger.event.data.args.relative_degrees | float }}\n\n{% endif %}\n" +- choose: + - conditions: + - '{{ command == ''checkin'' }}' + sequence: !input cube_wake + - conditions: + - '{{ command == ''flip'' }}' + sequence: + - service: input_number.set_value + target: + entity_id: '{{ active_face_entity }}' + data: + value: '{{ activated_face | int }}' + - choose: + - conditions: '{{ flip_any }}' + sequence: + - choose: + - conditions: '{{ activated_face == 1 }}' + sequence: !input cube_flip_1 + - conditions: '{{ activated_face == 2 }}' + sequence: !input cube_flip_2 + - conditions: '{{ activated_face == 3 }}' + sequence: !input cube_flip_3 + - conditions: '{{ activated_face == 4 }}' + sequence: !input cube_flip_4 + - conditions: '{{ activated_face == 5 }}' + sequence: !input cube_flip_5 + - conditions: '{{ activated_face == 6 }}' + sequence: !input cube_flip_6 + - conditions: + - '{{ flip_degrees == 90 and flip_90 }}' + sequence: !input cube_flip_90 + - conditions: + - '{{ flip_degrees == 180 and flip_180 }}' + sequence: !input cube_flip_180 + - conditions: + - '{{ flip_degrees == 90 and activated_face == 1 }}' + sequence: + - choose: + - conditions: '{{ from_face == 2 }}' + sequence: !input two_to_one + - conditions: '{{ from_face == 3 }}' + sequence: !input three_to_one + - conditions: '{{ from_face == 5 }}' + sequence: !input five_to_one + - conditions: '{{ from_face == 6 }}' + sequence: !input six_to_one + - conditions: + - '{{ flip_degrees == 90 and activated_face == 2 }}' + sequence: + - choose: + - conditions: '{{ from_face == 1 }}' + sequence: !input one_to_two + - conditions: '{{ from_face == 3 }}' + sequence: !input three_to_two + - conditions: '{{ from_face == 4 }}' + sequence: !input four_to_two + - conditions: '{{ from_face == 6 }}' + sequence: !input six_to_two + - conditions: + - '{{ flip_degrees == 90 and activated_face == 3 }}' + sequence: + - choose: + - conditions: '{{ from_face == 1 }}' + sequence: !input one_to_three + - conditions: '{{ from_face == 2 }}' + sequence: !input two_to_three + - conditions: '{{ from_face == 4 }}' + sequence: !input four_to_three + - conditions: '{{ from_face == 5 }}' + sequence: !input five_to_three + - conditions: + - '{{ flip_degrees == 90 and activated_face == 4 }}' + sequence: + - choose: + - conditions: '{{ from_face == 2 }}' + sequence: !input two_to_four + - conditions: '{{ from_face == 3 }}' + sequence: !input three_to_four + - conditions: '{{ from_face == 5 }}' + sequence: !input five_to_four + - conditions: '{{ from_face == 6 }}' + sequence: !input six_to_four + - conditions: + - '{{ flip_degrees == 90 and activated_face == 5 }}' + sequence: + - choose: + - conditions: '{{ from_face == 1 }}' + sequence: !input one_to_five + - conditions: '{{ from_face == 3 }}' + sequence: !input three_to_five + - conditions: '{{ from_face == 4 }}' + sequence: !input four_to_five + - conditions: '{{ from_face == 6 }}' + sequence: !input six_to_five + - conditions: + - '{{ flip_degrees == 90 and activated_face == 6 }}' + sequence: + - choose: + - conditions: '{{ from_face == 1 }}' + sequence: !input one_to_six + - conditions: '{{ from_face == 2 }}' + sequence: !input two_to_six + - conditions: '{{ from_face == 4 }}' + sequence: !input four_to_six + - conditions: '{{ from_face == 5 }}' + sequence: !input five_to_six + - conditions: + - '{{ value == flip180 + activated_face - 1 }}' + sequence: + - choose: + - conditions: '{{ activated_face == 1 }}' + sequence: !input four_to_one + - conditions: '{{ activated_face == 2 }}' + sequence: !input five_to_two + - conditions: '{{ activated_face == 3 }}' + sequence: !input six_to_three + - conditions: '{{ activated_face == 4 }}' + sequence: !input one_to_four + - conditions: '{{ activated_face == 5 }}' + sequence: !input two_to_five + - conditions: '{{ activated_face == 6 }}' + sequence: !input three_to_six + - conditions: + - '{{ command == ''knock'' }}' + sequence: + - service: input_number.set_value + target: + entity_id: '{{ active_face_entity }}' + data: + value: '{{ activated_face | int }}' + - choose: + - conditions: '{{ knock_any_side }}' + sequence: !input cube_knock_any + - conditions: '{{ activated_face == 1 }}' + sequence: !input one_to_one + - conditions: '{{ activated_face == 2 }}' + sequence: !input two_to_two + - conditions: '{{ activated_face == 3 }}' + sequence: !input three_to_three + - conditions: '{{ activated_face == 4 }}' + sequence: !input four_to_four + - conditions: '{{ activated_face == 5 }}' + sequence: !input five_to_five + - conditions: '{{ activated_face == 6 }}' + sequence: !input six_to_six + - conditions: + - '{{ command == ''slide'' }}' + sequence: + - service: input_number.set_value + target: + entity_id: '{{ active_face_entity }}' + data: + value: '{{ activated_face | int }}' + - choose: + - conditions: '{{ slide_any_side }}' + sequence: !input cube_slide_any + - conditions: + - '{{ value == slide + activated_face - 1 }}' + sequence: + - choose: + - conditions: '{{ activated_face == 1 }}' + sequence: !input slide_on_one + - conditions: '{{ activated_face == 2 }}' + sequence: !input slide_on_two + - conditions: '{{ activated_face == 3 }}' + sequence: !input slide_on_three + - conditions: '{{ activated_face == 4 }}' + sequence: !input slide_on_four + - conditions: '{{ activated_face == 5 }}' + sequence: !input slide_on_five + - conditions: '{{ activated_face == 6 }}' + sequence: !input slide_on_six + - conditions: + - '{{ command == ''rotate_left'' and rotate_any_side }}' + sequence: !input rotate_left + - conditions: + - '{{ command == ''rotate_left'' and active_face == 1 }}' + sequence: !input rotate_left_side_1 + - conditions: + - '{{ command == ''rotate_left'' and active_face == 2 }}' + sequence: !input rotate_left_side_2 + - conditions: + - '{{ command == ''rotate_left'' and active_face == 3 }}' + sequence: !input rotate_left_side_3 + - conditions: + - '{{ command == ''rotate_left'' and active_face == 4 }}' + sequence: !input rotate_left_side_4 + - conditions: + - '{{ command == ''rotate_left'' and active_face == 5 }}' + sequence: !input rotate_left_side_5 + - conditions: + - '{{ command == ''rotate_left'' and active_face == 6 }}' + sequence: !input rotate_left_side_6 + - conditions: + - '{{ command == ''rotate_right'' and rotate_any_side }}' + sequence: !input rotate_right + - conditions: + - '{{ command == ''rotate_right'' and active_face == 1 }}' + sequence: !input rotate_right_side_1 + - conditions: + - '{{ command == ''rotate_right'' and active_face == 2 }}' + sequence: !input rotate_right_side_2 + - conditions: + - '{{ command == ''rotate_right'' and active_face == 3 }}' + sequence: !input rotate_right_side_3 + - conditions: + - '{{ command == ''rotate_right'' and active_face == 4 }}' + sequence: !input rotate_right_side_4 + - conditions: + - '{{ command == ''rotate_right'' and active_face == 5 }}' + sequence: !input rotate_right_side_5 + - conditions: + - '{{ command == ''rotate_right'' and active_face == 6 }}' + sequence: !input rotate_right_side_6 + - conditions: + - '{{ command == ''shake'' or value == shake }}' + sequence: !input cube_shake + - conditions: + - '{{ command == ''drop'' or value == drop }}' + sequence: !input cube_drop diff --git a/blueprints/script/homeassistant/confirmable_notification.yaml b/blueprints/script/homeassistant/confirmable_notification.yaml new file mode 100644 index 0000000..ae170ea --- /dev/null +++ b/blueprints/script/homeassistant/confirmable_notification.yaml @@ -0,0 +1,74 @@ +blueprint: + name: Confirmable Notification + description: >- + A script that sends an actionable notification with a confirmation before + running the specified action. + domain: script + source_url: https://github.com/home-assistant/core/blob/master/homeassistant/components/script/blueprints/confirmable_notification.yaml + input: + notify_device: + name: Device to notify + description: Device needs to run the official Home Assistant app to receive notifications. + selector: + device: + integration: mobile_app + title: + name: "Title" + description: "The title of the button shown in the notification." + default: "" + selector: + text: + message: + name: "Message" + description: "The message body" + selector: + text: + confirm_text: + name: "Confirmation Text" + description: "Text to show on the confirmation button" + default: "Confirm" + selector: + text: + confirm_action: + name: "Confirmation Action" + description: "Action to run when notification is confirmed" + default: [] + selector: + action: + dismiss_text: + name: "Dismiss Text" + description: "Text to show on the dismiss button" + default: "Dismiss" + selector: + text: + dismiss_action: + name: "Dismiss Action" + description: "Action to run when notification is dismissed" + default: [] + selector: + action: + +mode: restart + +sequence: + - alias: "Send notification" + domain: mobile_app + type: notify + device_id: !input notify_device + title: !input title + message: !input message + data: + actions: + - action: "CONFIRM" + title: !input confirm_text + - action: "DISMISS" + title: !input dismiss_text + - alias: "Awaiting response" + wait_for_trigger: + - platform: event + event_type: mobile_app_notification_action + - choose: + - conditions: "{{ wait.trigger.event.data.action == 'CONFIRM' }}" + sequence: !input confirm_action + - conditions: "{{ wait.trigger.event.data.action == 'DISMISS' }}" + sequence: !input dismiss_action diff --git a/components/alerts/README.md b/components/alerts/README.md new file mode 100644 index 0000000..a881592 --- /dev/null +++ b/components/alerts/README.md @@ -0,0 +1,7 @@ +# Alerts + +Component: [alert](https://home-assistant.io/components/alert/) + +## Garage + +Simple alerts to nag us that we've left either of the the garage doors open. We need this because they're not visible from the house. diff --git a/components/alerts/close_windows.yaml b/components/alerts/close_windows.yaml new file mode 100644 index 0000000..e3c5f5e --- /dev/null +++ b/components/alerts/close_windows.yaml @@ -0,0 +1,10 @@ +name: "Close Windows" +done_message: "Windows are closed" +entity_id: binary_sensor.close_windows +state: "on" +repeat: + - 30 +can_acknowledge: True +skip_first: false +notifiers: + - mobile_app_pixel_7 diff --git a/components/alerts/dream_nas.yaml b/components/alerts/dream_nas.yaml new file mode 100644 index 0000000..07ab594 --- /dev/null +++ b/components/alerts/dream_nas.yaml @@ -0,0 +1,12 @@ +# name: "Dream NAS has been unavailable for {{ relative_time(states.device_tracker.dream_nas.last_changed) }}" +# done_message: "Dream NAS is now available" +# entity_id: device_tracker.dream_nas_1 +# state: 'not_home' +# repeat: +# - 1 +# - 5 +# - 15 +# can_acknowledge: True +# skip_first: true +# notifiers: +# - mobile_app_pixel_7 diff --git a/components/alerts/front_door.yaml b/components/alerts/front_door.yaml new file mode 100644 index 0000000..2e94447 --- /dev/null +++ b/components/alerts/front_door.yaml @@ -0,0 +1,9 @@ +name: "Front door has been open for {{ relative_time(states.binary_sensor.front_door_contact.last_changed) }}" +done_message: "Front door is now closed" +entity_id: binary_sensor.front_door_contact +state: 'on' +repeat: 10 +can_acknowledge: True +skip_first: True +notifiers: + - garage diff --git a/components/alerts/garage_door.yaml b/components/alerts/garage_door.yaml new file mode 100644 index 0000000..0a34f16 --- /dev/null +++ b/components/alerts/garage_door.yaml @@ -0,0 +1,9 @@ +name: "Garage door has been open for {{ relative_time(states.cover.garage_door.last_changed) }}" +done_message: "Garage door is now closed" +entity_id: binary_sensor.garage_open_nobody_home +state: "on" +repeat: 10 +can_acknowledge: True +skip_first: True +notifiers: + - mobile_app_pixel_7 diff --git a/components/alerts/hvac_delta_sensors_unavailable.yaml b/components/alerts/hvac_delta_sensors_unavailable.yaml new file mode 100644 index 0000000..f7726ab --- /dev/null +++ b/components/alerts/hvac_delta_sensors_unavailable.yaml @@ -0,0 +1,10 @@ +# name: "HVAC Delta Sensors Unavailable" +# done_message: "HVAC delta sensors available" +# entity_id: binary_sensor.hvac_delta_sensors_unavailable +# state: 'on' +# repeat: +# - 15 +# can_acknowledge: True +# skip_first: false +# notifiers: +# - mobile_app_pixel_7 diff --git a/components/alerts/hvac_delta_too_small_for_too_long.yaml b/components/alerts/hvac_delta_too_small_for_too_long.yaml new file mode 100644 index 0000000..e233534 --- /dev/null +++ b/components/alerts/hvac_delta_too_small_for_too_long.yaml @@ -0,0 +1,13 @@ +# name: "The AC is probably broken again!" +# message: "It is {{states('sensor.front_porch_temperature')}} outside and {{state_attr('climate.thermostat','current_temperature')}} inside. The thermostat is set to {{state_attr('climate.thermostat','target_temp_low')}} and the delta is {{states('sensor.hvac_delta')}}" +# done_message: "AC is now {{states('sensor.hvac_delta')}}" +# entity_id: binary_sensor.hvac_delta_too_small_for_too_long +# state: "on" +# repeat: +# - 1 +# - 5 +# - 15 +# can_acknowledge: True +# skip_first: true +# notifiers: +# - mobile_app_pixel_7 diff --git a/components/alerts/kitchen_freezer_too_warm.yaml b/components/alerts/kitchen_freezer_too_warm.yaml new file mode 100644 index 0000000..a79b7c3 --- /dev/null +++ b/components/alerts/kitchen_freezer_too_warm.yaml @@ -0,0 +1,10 @@ +name: "Kitchen Freezer Too Warm" +done_message: "Kitchen Freezer Okay" +entity_id: binary_sensor.kitchen_freezer_too_warm +state: "on" +repeat: + - 60 +can_acknowledge: True +skip_first: false +notifiers: + - mobile_app_pixel_7 diff --git a/components/alerts/kitchen_fridge_too_warm.yaml b/components/alerts/kitchen_fridge_too_warm.yaml new file mode 100644 index 0000000..b7512ed --- /dev/null +++ b/components/alerts/kitchen_fridge_too_warm.yaml @@ -0,0 +1,10 @@ +name: "Kitchen Fridge Too Warm" +done_message: "Kitchen Fridge Okay" +entity_id: binary_sensor.kitchen_fridge_too_warm +state: "on" +repeat: + - 60 +can_acknowledge: True +skip_first: false +notifiers: + - mobile_app_pixel_7 diff --git a/components/alerts/need_salt.yaml b/components/alerts/need_salt.yaml new file mode 100644 index 0000000..9fd0c80 --- /dev/null +++ b/components/alerts/need_salt.yaml @@ -0,0 +1,10 @@ +name: "Water softener is low on salt" +done_message: "Water sotener has enough salt" +entity_id: binary_sensor.need_salt +state: 0 +repeat: + - 60 +can_acknowledge: True +skip_first: true +notifiers: + - mobile_app_pixel_7 diff --git a/components/alerts/trash_day.yaml b/components/alerts/trash_day.yaml new file mode 100644 index 0000000..bc1d8ed --- /dev/null +++ b/components/alerts/trash_day.yaml @@ -0,0 +1,9 @@ +name: "Take the dumpster to the curb" +done_message: "Trash has been taken out to the curb" +entity_id: binary_sensor.take_trash_out +state: "on" +repeat: 360 +can_acknowledge: True +skip_first: False +notifiers: + - mobile_app_pixel_7 diff --git a/components/binary_sensors/bayesian_bridget.yaml b/components/binary_sensors/bayesian_bridget.yaml new file mode 100644 index 0000000..d3890c5 --- /dev/null +++ b/components/binary_sensors/bayesian_bridget.yaml @@ -0,0 +1,61 @@ +platform: 'bayesian' +name: 'Bridget Home' +device_class: presence +prior: 0.5 +probability_threshold: 0.7 +observations: + - entity_id: 'person.clint' + prob_given_true: .99 + prob_given_false: .99 + platform: 'state' + to_state: 'home' + + - entity_id: 'calendar.my_custody' + prob_given_true: .99 + prob_given_false: .5 + platform: 'state' + to_state: 'on' + + + - entity_id: 'input_boolean.clint_work_from_home' + prob_given_true: .01 + prob_given_false: .33 + platform: 'state' + to_state: 'on' + + - entity_id: 'input_select.weaver_kids' + prob_given_true: .99 + prob_given_false: 0.01 + platform: 'state' + to_state: 'Home' + + - entity_id: 'input_select.weaver_kids' + prob_given_true: .01 + prob_given_false: 0.99 + platform: 'state' + to_state: 'Away' + + - entity_id: 'input_select.weaver_kids' + prob_given_true: .5 + prob_given_false: 0.5 + platform: 'state' + to_state: 'Auto' + + # # If I am working from home and the 'Weaver Kids' are in automatic mode + # - platform: template + # value_template: > + # {{ is_state('input_boolean.clint_work_from_home', 'on') and is_state('input_select.weaver_kids','Auto') }} + # prob_given_true: 0.01 + # prob_given_false: .99 + # # If I am working from home and the 'Weaver Kids' are manually set as home + # - platform: template + # value_template: > + # {{ is_state('input_boolean.clint_work_from_home', 'on') and is_state('input_select.weaver_kids','Home') }} + # prob_given_true: 0.99 + # prob_given_false: .01 + # # If I am working from home and the 'Weaver Kids' are manually set as away + # - platform: template + # value_template: > + # {{ is_state('input_boolean.clint_work_from_home', 'on') and is_state('input_select.weaver_kids','Away') }} + # prob_given_true: 0.01 + # prob_given_false: .99 \ No newline at end of file diff --git a/components/binary_sensors/bayesian_clint.yaml b/components/binary_sensors/bayesian_clint.yaml new file mode 100644 index 0000000..7764769 --- /dev/null +++ b/components/binary_sensors/bayesian_clint.yaml @@ -0,0 +1,16 @@ +platform: 'bayesian' +name: 'Clint' +device_class: presence +prior: 0.75 +probability_threshold: 0.5 +observations: + - entity_id: 'group.person_clint' + prob_given_true: 0.75 + prob_given_false: 0.1 + platform: 'state' + to_state: 'home' + - entity_id: 'input_boolean.car_home' + prob_given_true: 0.75 + prob_given_false: 0.1 + platform: 'state' + to_state: 'on' diff --git a/components/binary_sensors/bayesian_ebin.yaml b/components/binary_sensors/bayesian_ebin.yaml new file mode 100644 index 0000000..bdbd2f6 --- /dev/null +++ b/components/binary_sensors/bayesian_ebin.yaml @@ -0,0 +1,26 @@ +platform: 'bayesian' +name: 'Ebin Home' +device_class: presence +prior: 0.1 +probability_threshold: 0.2 +observations: + - entity_id: 'person.kristy' + prob_given_true: 0.5 + prob_given_false: 0.1 + platform: 'state' + to_state: 'home' + - entity_id: 'calendar.my_custody' + prob_given_true: 0.5 + prob_given_false: 0.1 + platform: 'state' + to_state: 'on' + - entity_id: 'input_select.podein_kids' + prob_given_true: .99 + prob_given_false: 0.01 + platform: 'state' + to_state: 'Home' + - entity_id: 'input_select.podein_kids' + prob_given_true: .01 + prob_given_false: 0.01 + platform: 'state' + to_state: 'Away' \ No newline at end of file diff --git a/components/binary_sensors/bayesian_emmett.yaml b/components/binary_sensors/bayesian_emmett.yaml new file mode 100644 index 0000000..b4aaf07 --- /dev/null +++ b/components/binary_sensors/bayesian_emmett.yaml @@ -0,0 +1,61 @@ +platform: 'bayesian' +name: 'Emmett Home' +device_class: presence +prior: 0.5 +probability_threshold: 0.7 +observations: + - entity_id: 'person.clint' + prob_given_true: .99 + prob_given_false: .99 + platform: 'state' + to_state: 'home' + + - entity_id: 'calendar.my_custody' + prob_given_true: .99 + prob_given_false: .5 + platform: 'state' + to_state: 'on' + + + - entity_id: 'input_boolean.clint_work_from_home' + prob_given_true: .01 + prob_given_false: .33 + platform: 'state' + to_state: 'on' + + - entity_id: 'input_select.weaver_kids' + prob_given_true: .99 + prob_given_false: 0.01 + platform: 'state' + to_state: 'Home' + + - entity_id: 'input_select.weaver_kids' + prob_given_true: .01 + prob_given_false: 0.99 + platform: 'state' + to_state: 'Away' + + - entity_id: 'input_select.weaver_kids' + prob_given_true: .5 + prob_given_false: 0.5 + platform: 'state' + to_state: 'Auto' + + # # If I am working from home and the 'Weaver Kids' are in automatic mode + # - platform: template + # value_template: > + # {{ is_state('input_boolean.clint_work_from_home', 'on') and is_state('input_select.weaver_kids','Auto') }} + # prob_given_true: 0.01 + # prob_given_false: .99 + # # If I am working from home and the 'Weaver Kids' are manually set as home + # - platform: template + # value_template: > + # {{ is_state('input_boolean.clint_work_from_home', 'on') and is_state('input_select.weaver_kids','Home') }} + # prob_given_true: 0.99 + # prob_given_false: .01 + # # If I am working from home and the 'Weaver Kids' are manually set as away + # - platform: template + # value_template: > + # {{ is_state('input_boolean.clint_work_from_home', 'on') and is_state('input_select.weaver_kids','Away') }} + # prob_given_true: 0.01 + # prob_given_false: .99 \ No newline at end of file diff --git a/components/binary_sensors/bayesian_wfh.yaml b/components/binary_sensors/bayesian_wfh.yaml new file mode 100644 index 0000000..f9ea1a7 --- /dev/null +++ b/components/binary_sensors/bayesian_wfh.yaml @@ -0,0 +1,47 @@ +platform: 'bayesian' +name: Clint Work From Home +prior: 0.4 +probability_threshold: 0.75 +observations: + - entity_id: 'person.clint' + # Probability that I'm working from home when person.clint is home + prob_given_true: .4 + # Probability that I'm not working from home when person.clint is home + prob_given_false: .6 + platform: 'state' + to_state: 'home' + - entity_id: 'person.clint' + # Probability that I'm working from home when person.clint is away + prob_given_true: .01 + # Probability that I'm not working from home when person.clint is away + prob_given_false: .9 + platform: 'state' + to_state: 'away' + - entity_id: 'person.clint' + # Probability that I'm working from home when person.clint is at AGH + prob_given_true: .01 + # Probability that I'm not working from home when person.clint is at AGH + prob_given_false: .7 + platform: 'state' + to_state: 'AGH' + # Probability that I'm working from home from 8:00 AM to 4:30 PM + - entity_id: binary_sensor.work_hours + prob_given_true: .4 + # Probability that I'm not working from 8:00 AM to 4:30 PM + prob_given_false: .1 + platform: 'state' + to_state: 'on' + - entity_id: binary_sensor.work_hours + # Probability that I'm working from home outside of 8AM to 4:30PM + prob_given_true: .001 + # Probability that I'm not working from home outside of 8AM to 4:30PM + prob_given_false: .9 + platform: 'state' + to_state: 'off' + - entity_id: binary_sensor.clint_home_during_work_hours + # Probability that I'm working from home if I'm home during work hours + prob_given_true: .8 + # Probability that I'm not working from home if I'm home during work hours + prob_given_false: .2 + platform: 'state' + to_state: 'on' diff --git a/components/binary_sensors/bayesian_window_open_hvac.yaml b/components/binary_sensors/bayesian_window_open_hvac.yaml new file mode 100644 index 0000000..a3b9529 --- /dev/null +++ b/components/binary_sensors/bayesian_window_open_hvac.yaml @@ -0,0 +1,31 @@ +platform: 'bayesian' +name: 'Window Open HVAC On' +device_class: problem +prior: 0 +probability_threshold: 0.6 +observations: + - entity_id: 'group.my_exterior_windows' + prob_given_true: .5 + prob_given_false: 0.01 + platform: 'state' + to_state: 'on' + - entity_id: 'group.my_exterior_doors' + prob_given_true: .5 + prob_given_false: 0.01 + platform: 'state' + to_state: 'on' + - entity_id: sensor.hvac_action + prob_given_true: .5 + prob_given_false: 0.01 + platform: 'state' + to_state: 'cooling' + - entity_id: sensor.hvac_action + prob_given_true: .5 + prob_given_false: 0.01 + platform: 'state' + to_state: 'heating' + - entity_id: sensor.hvac_action + prob_given_true: .01 + prob_given_false: 0.01 + platform: 'state' + to_state: 'idle' \ No newline at end of file diff --git a/components/binary_sensors/floorplan.yaml b/components/binary_sensors/floorplan.yaml new file mode 100644 index 0000000..1b5523c --- /dev/null +++ b/components/binary_sensors/floorplan.yaml @@ -0,0 +1,13 @@ +# Disabling the first two lines, as I don't think they are even necessary +# If they need to be re-implemented, refer to this: +# https://www.home-assistant.io/integrations/binary_sensor.mqtt/#new_format + +# platform: mqtt +# state_topic: dummy/floorplan/sensor + + + + +# #name: Floorplan +# #custom_ui_state_card: state-card-floorplan +# #config: !include ../../floorplan.yaml \ No newline at end of file diff --git a/components/binary_sensors/is_friday.yaml b/components/binary_sensors/is_friday.yaml new file mode 100644 index 0000000..ae18419 --- /dev/null +++ b/components/binary_sensors/is_friday.yaml @@ -0,0 +1,5 @@ +# platform: workday +# name: Is Friday +# country: US +# workdays: [fri] +# excludes: [mon,tue, wed, thu, sat, sun] \ No newline at end of file diff --git a/components/binary_sensors/is_monday.yaml b/components/binary_sensors/is_monday.yaml new file mode 100644 index 0000000..26b499c --- /dev/null +++ b/components/binary_sensors/is_monday.yaml @@ -0,0 +1,5 @@ +# platform: workday +# name: Is Monday +# country: US +# workdays: [mon] +# excludes: [tue, wed, thu, fri,sat, sun, holiday] \ No newline at end of file diff --git a/components/binary_sensors/is_tuesday.yaml b/components/binary_sensors/is_tuesday.yaml new file mode 100644 index 0000000..7a9d178 --- /dev/null +++ b/components/binary_sensors/is_tuesday.yaml @@ -0,0 +1,5 @@ +# platform: workday +# name: Is Tuesday +# country: US +# workdays: [tue] +# excludes: [mon, wed, thu, fri,sat, sun, holiday] \ No newline at end of file diff --git a/components/binary_sensors/rooms/back_yard_occupied.yaml b/components/binary_sensors/rooms/back_yard_occupied.yaml new file mode 100644 index 0000000..b223e49 --- /dev/null +++ b/components/binary_sensors/rooms/back_yard_occupied.yaml @@ -0,0 +1,19 @@ +platform: bayesian +unique_id: bayesianbinarysensor.back_yard_occupied +name: Back Yard Occupied +device_class: occupancy +prior: 0.25 +probability_threshold: 0.75 +observations: + + - entity_id: input_boolean.home_occupied + platform: state + prob_given_true: .01 + prob_given_false: 0.01 + to_state: 'off' + + - entity_id: group.back_yard_motion + prob_given_true: .9 + prob_given_false: 0.01 + platform: state + to_state: 'on' diff --git a/components/binary_sensors/rooms/blue_room_occupied.yaml b/components/binary_sensors/rooms/blue_room_occupied.yaml new file mode 100644 index 0000000..b6f8ad8 --- /dev/null +++ b/components/binary_sensors/rooms/blue_room_occupied.yaml @@ -0,0 +1,25 @@ +platform: bayesian +unique_id: bayesianbinarysensor.blue_room_occupied +name: Blue Room Occupied +device_class: occupancy +prior: 0.25 +probability_threshold: 0.7 +observations: + + - entity_id: group.blue_room_motion + prob_given_true: .99 + prob_given_false: .85 + platform: state + to_state: 'on' + + - entity_id: binary_sensor.blue_room_person_occupancy + prob_given_true: .99 + prob_given_false: .85 + platform: state + to_state: 'on' + + - entity_id: input_boolean.home_occupied + platform: state + prob_given_true: .99 + prob_given_false: 0.01 + to_state: 'on' diff --git a/components/binary_sensors/rooms/computer_area_occupied.yaml b/components/binary_sensors/rooms/computer_area_occupied.yaml new file mode 100644 index 0000000..4d18bac --- /dev/null +++ b/components/binary_sensors/rooms/computer_area_occupied.yaml @@ -0,0 +1,31 @@ +platform: bayesian +unique_id: bayesianbinarysensor.computer_area_occupied +name: Computer Area Occupied +device_class: occupancy +prior: 0.25 +probability_threshold: 0.7 +observations: + + - entity_id: group.computer_area_motion + prob_given_true: .99 + prob_given_false: 0.97 + platform: state + to_state: 'on' + + - entity_id: binary_sensor.computer_chair_contact_occupied + prob_given_true: .99 + prob_given_false: 0.97 + platform: state + to_state: 'on' + + - entity_id: input_boolean.home_occupied + platform: state + prob_given_true: .99 + prob_given_false: 0.01 + to_state: 'on' + + - entity_id: binary_sensor.computer_area_person_occupancy + prob_given_true: .99 + prob_given_false: 0.97 + platform: state + to_state: 'on' \ No newline at end of file diff --git a/components/binary_sensors/rooms/dining_room_occupied.yaml b/components/binary_sensors/rooms/dining_room_occupied.yaml new file mode 100644 index 0000000..9fc3f5e --- /dev/null +++ b/components/binary_sensors/rooms/dining_room_occupied.yaml @@ -0,0 +1,25 @@ +platform: bayesian +unique_id: bayesianbinarysensor.dining_room_occupied +name: Dining Room Occupied +device_class: occupancy +prior: 0.25 +probability_threshold: 0.7 +observations: + + - entity_id: group.dining_room_motion + prob_given_true: .99 + prob_given_false: .85 + platform: state + to_state: 'on' + + - entity_id: binary_sensor.dining_room_person_occupancy + prob_given_true: .99 + prob_given_false: .85 + platform: state + to_state: 'on' + + - entity_id: input_boolean.home_occupied + platform: state + prob_given_true: .99 + prob_given_false: 0.01 + to_state: 'on' \ No newline at end of file diff --git a/components/binary_sensors/rooms/entryway_occupied.yaml b/components/binary_sensors/rooms/entryway_occupied.yaml new file mode 100644 index 0000000..414e44c --- /dev/null +++ b/components/binary_sensors/rooms/entryway_occupied.yaml @@ -0,0 +1,36 @@ +platform: bayesian +unique_id: bayesianbinarysensor.entryway_occupied +name: Entryway Occupied +device_class: occupancy +prior: 0.02 +probability_threshold: 0.65 +observations: + - entity_id: group.entryway_motion + prob_given_true: 0.9 + prob_given_false: 0.01 + platform: state + to_state: 'on' + + - entity_id: input_boolean.home_occupied + platform: state + prob_given_true: .98 + prob_given_false: 0.85 + to_state: 'on' + + - entity_id: binary_sensor.entryway_person_occupancy + prob_given_true: .02 + prob_given_false: 0.0 + platform: state + to_state: 'on' + + - entity_id: binary_sensor.inner_garage_door + prob_given_true: 0.02 + prob_given_false: 0.0 + platform: state + to_state: 'on' + + - entity_id: binary_sensor.front_door_contact + prob_given_true: 0.02 + prob_given_false: 0.0 + platform: state + to_state: 'on' \ No newline at end of file diff --git a/components/binary_sensors/rooms/front_room_occupied.yaml b/components/binary_sensors/rooms/front_room_occupied.yaml new file mode 100644 index 0000000..d2bf31a --- /dev/null +++ b/components/binary_sensors/rooms/front_room_occupied.yaml @@ -0,0 +1,37 @@ +platform: bayesian +unique_id: bayesianbinarysensor.front_room_occupied +name: Front Room Occupied +device_class: occupancy +prior: 0.5 +probability_threshold: 0.75 +observations: + + - entity_id: group.front_room_motion + prob_given_true: .75 + prob_given_false: 0.01 + platform: state + to_state: 'on' + + - entity_id: media_player.front_room_tv + prob_given_true: .9 + prob_given_false: 0.01 + platform: state + to_state: 'playing' + + - entity_id: media_player.front_room_tv + prob_given_true: .5 + prob_given_false: 0.01 + platform: state + to_state: 'home' + + - entity_id: input_boolean.home_occupied + platform: state + prob_given_true: .01 + prob_given_false: 0.01 + to_state: 'off' + + - entity_id: binary_sensor.front_room_person_occupancy + prob_given_true: .99 + prob_given_false: 0.01 + platform: state + to_state: 'on' diff --git a/components/binary_sensors/rooms/front_yard_occupied.yaml b/components/binary_sensors/rooms/front_yard_occupied.yaml new file mode 100644 index 0000000..e84d1e5 --- /dev/null +++ b/components/binary_sensors/rooms/front_yard_occupied.yaml @@ -0,0 +1,19 @@ +platform: bayesian +unique_id: bayesianbinarysensor.front_yard_occupied +name: Front Yard Occupied +device_class: occupancy +prior: 0.25 +probability_threshold: 0.75 +observations: + + - entity_id: input_boolean.home_occupied + platform: state + prob_given_true: .01 + prob_given_false: 0.01 + to_state: 'off' + + - entity_id: group.front_yard_motion + prob_given_true: .9 + prob_given_false: 0.01 + platform: state + to_state: 'on' diff --git a/components/binary_sensors/rooms/furnace_room_occupied.yaml b/components/binary_sensors/rooms/furnace_room_occupied.yaml new file mode 100644 index 0000000..dd528c3 --- /dev/null +++ b/components/binary_sensors/rooms/furnace_room_occupied.yaml @@ -0,0 +1,13 @@ +platform: bayesian +unique_id: bayesianbinarysensor.furnace_room_occupied +name: Furnace Room Occupied +device_class: occupancy +prior: 0.2 +probability_threshold: 0.75 +observations: + + - entity_id: group.furnace_room_motion + prob_given_true: .99 + prob_given_false: 0.01 + platform: state + to_state: 'on' diff --git a/components/binary_sensors/rooms/garage_occupied.yaml b/components/binary_sensors/rooms/garage_occupied.yaml new file mode 100644 index 0000000..1812706 --- /dev/null +++ b/components/binary_sensors/rooms/garage_occupied.yaml @@ -0,0 +1,67 @@ +platform: bayesian +unique_id: bayesianbinarysensor.garage_occupied +name: Garage Occupied +device_class: occupancy +prior: 0.4 +probability_threshold: 0.6 +observations: + + - entity_id: group.garage_motion + prob_given_true: .8 + prob_given_false: 0.01 + platform: state + to_state: 'on' + + - entity_id: group.garage_motion + prob_given_true: .5 + prob_given_false: 0.5 + platform: state + to_state: 'off' + + - entity_id: cover.garage_door + prob_given_true: .60 + prob_given_false: 0.5 + platform: state + to_state: 'open' + + - entity_id: cover.garage_door + prob_given_true: .50 + prob_given_false: 0.5 + platform: state + to_state: 'closed' + + - entity_id: binary_sensor.inner_garage_door + prob_given_true: .75 + prob_given_false: 0.01 + platform: state + to_state: 'on' + + - entity_id: binary_sensor.inner_garage_door + prob_given_true: .5 + prob_given_false: 0.5 + platform: state + to_state: 'off' + + - entity_id: binary_sensor.outer_garage_door + prob_given_true: .75 + prob_given_false: 0.5 + platform: state + to_state: 'on' + + - entity_id: binary_sensor.outer_garage_door + prob_given_true: 0.5 + prob_given_false: 0.5 + platform: state + to_state: 'off' + + - entity_id: binary_sensor.workshop_person_occupancy + prob_given_true: .99 + prob_given_false: 0.5 + platform: state + to_state: 'on' + + - entity_id: binary_sensor.workshop_person_occupancy + prob_given_true: 0.5 + prob_given_false: 0.5 + platform: state + to_state: 'off' \ No newline at end of file diff --git a/components/binary_sensors/rooms/great_room_occupied.yaml b/components/binary_sensors/rooms/great_room_occupied.yaml new file mode 100644 index 0000000..7c36cb8 --- /dev/null +++ b/components/binary_sensors/rooms/great_room_occupied.yaml @@ -0,0 +1,43 @@ +platform: bayesian +unique_id: bayesianbinarysensor.great_room_occupied +name: Great Room Occupied +device_class: occupancy +prior: 0.5 +probability_threshold: 0.75 +observations: + + - entity_id: group.great_room_motion + platform: state + prob_given_true: .9 + prob_given_false: 0.01 + to_state: 'on' + + - entity_id: input_boolean.home_occupied + platform: state + prob_given_true: .01 + prob_given_false: 0.01 + to_state: 'off' + + - entity_id: media_player.downstairs_roku + platform: state + prob_given_true: .9 + prob_given_false: 0.01 + to_state: 'playing' + + - entity_id: media_player.downstairs_roku + platform: state + prob_given_true: .9 + prob_given_false: 0.01 + to_state: 'paused' + + - entity_id: media_player.downstairs_roku + platform: state + prob_given_true: .5 + prob_given_false: 0.01 + to_state: 'idle' + + - entity_id: binary_sensor.great_room_person_occupancy + prob_given_true: .99 + prob_given_false: 0.01 + platform: state + to_state: 'on' diff --git a/components/binary_sensors/rooms/kitchen_occupied.yaml b/components/binary_sensors/rooms/kitchen_occupied.yaml new file mode 100644 index 0000000..8379ed5 --- /dev/null +++ b/components/binary_sensors/rooms/kitchen_occupied.yaml @@ -0,0 +1,25 @@ +platform: bayesian +unique_id: bayesianbinarysensor.kitchen_occupied +name: Kitchen Occupied +device_class: occupancy +prior: 0.25 +probability_threshold: 0.7 +observations: + + - entity_id: group.kitchen_motion + prob_given_true: .99 + prob_given_false: .85 + platform: state + to_state: 'on' + + - entity_id: binary_sensor.kitchen_person_occupancy + prob_given_true: .99 + prob_given_false: .85 + platform: state + to_state: 'on' + + - entity_id: input_boolean.home_occupied + platform: state + prob_given_true: .99 + prob_given_false: 0.01 + to_state: 'on' \ No newline at end of file diff --git a/components/binary_sensors/rooms/mancave_occupied.yaml b/components/binary_sensors/rooms/mancave_occupied.yaml new file mode 100644 index 0000000..68bee90 --- /dev/null +++ b/components/binary_sensors/rooms/mancave_occupied.yaml @@ -0,0 +1,19 @@ +platform: bayesian +unique_id: bayesianbinarysensor.mancave_occupied +name: Mancave Occupied +device_class: occupancy +prior: 0.5 +probability_threshold: 0.75 +observations: + + - entity_id: group.mancave_motion + prob_given_true: .9 + prob_given_false: 0.01 + platform: state + to_state: 'on' + + - entity_id: input_boolean.home_occupied + platform: state + prob_given_true: .01 + prob_given_false: 0.01 + to_state: 'off' \ No newline at end of file diff --git a/components/binary_sensors/rooms/master_bathroom_occupied.yaml b/components/binary_sensors/rooms/master_bathroom_occupied.yaml new file mode 100644 index 0000000..8f6a2d6 --- /dev/null +++ b/components/binary_sensors/rooms/master_bathroom_occupied.yaml @@ -0,0 +1,43 @@ +platform: bayesian +unique_id: bayesianbinarysensor.master_bathroom_occupied +name: Master Bathroom Occupied +device_class: occupancy +prior: 0.2 +probability_threshold: 0.75 +observations: + + - entity_id: group.master_bathroom_motion + prob_given_true: .99 + prob_given_false: 0.05 + platform: state + to_state: 'on' + + # - entity_id: binary_sensor.bathroom_getting_humid + # prob_given_true: .75 + # prob_given_false: 0.01 + # platform: state + # to_state: 'on' + + - entity_id: binary_sensor.master_bathroom_hygrostat + prob_given_true: .99 + prob_given_false: 0.05 + platform: state + to_state: 'on' + + - entity_id: input_boolean.home_occupied + platform: state + prob_given_true: .99 + prob_given_false: 0.01 + to_state: 'on' + + # - platform: template + # value_template: > + # {{ states('sensor.master_bathroom_thermostat_humidity') | float(default=0) - states('sensor.master_bedroom_multisensor_humidity') | float(default=0) > 30 }} + # prob_given_true: 0.99 + # prob_given_false: 0.01 + + # - entity_id: input_boolean.home_occupied + # platform: state + # prob_given_true: .01 + # prob_given_false: 0.5 + # to_state: 'off' \ No newline at end of file diff --git a/components/binary_sensors/rooms/master_bedroom_occupied.yaml b/components/binary_sensors/rooms/master_bedroom_occupied.yaml new file mode 100644 index 0000000..179456f --- /dev/null +++ b/components/binary_sensors/rooms/master_bedroom_occupied.yaml @@ -0,0 +1,31 @@ +platform: bayesian +unique_id: bayesianbinarysensor.master_bedroom_occupied +name: Master Bedroom Occupied +device_class: occupancy +prior: 0.25 +probability_threshold: 0.75 +observations: + + - entity_id: binary_sensor.master_bed_occupied + platform: state + prob_given_true: .83 + prob_given_false: 0.0 + to_state: 'on' + + - entity_id: binary_sensor.master_bedroom_person_occupancy + prob_given_true: .4 + prob_given_false: 0.0 + platform: state + to_state: 'on' + + - entity_id: input_boolean.home_occupied + platform: state + prob_given_true: .99 + prob_given_false: 0.67 + to_state: 'on' + + - entity_id: group.master_bedroom_motion + platform: state + prob_given_true: .5 + prob_given_false: 0.0 + to_state: 'on' \ No newline at end of file diff --git a/components/binary_sensors/rooms/nursery_occupied.yaml b/components/binary_sensors/rooms/nursery_occupied.yaml new file mode 100644 index 0000000..b0a0c0a --- /dev/null +++ b/components/binary_sensors/rooms/nursery_occupied.yaml @@ -0,0 +1,37 @@ +platform: bayesian +unique_id: bayesianbinarysensor.nursery_occupied +name: Nursery Occupied +device_class: occupancy +prior: 0.25 +probability_threshold: 0.90 +observations: + + - platform: state + entity_id: group.nursery_motion + to_state: 'on' + prob_given_true: .33 + prob_given_false: 0.0 + + - entity_id: binary_sensor.nursery_person_occupancy + prob_given_true: .33 + prob_given_false: 0.0 + platform: state + to_state: 'on' + + - platform: state + entity_id: binary_sensor.black_bed_occupied + to_state: 'on' + prob_given_true: .67 + prob_given_false: 0.0 + + - platform: state + entity_id: binary_sensor.white_bed_occupied + to_state: 'on' + prob_given_true: .67 + prob_given_false: 0.0 + + - entity_id: input_boolean.home_occupied + platform: state + prob_given_true: .92 + prob_given_false: 0.5 + to_state: 'on' \ No newline at end of file diff --git a/components/binary_sensors/rooms/storage_room_occupied.yaml b/components/binary_sensors/rooms/storage_room_occupied.yaml new file mode 100644 index 0000000..f1ba0a6 --- /dev/null +++ b/components/binary_sensors/rooms/storage_room_occupied.yaml @@ -0,0 +1,13 @@ +platform: bayesian +unique_id: bayesianbinarysensor.storage_room_occupied +name: Storage Room Occupied +device_class: occupancy +prior: 0.5 +probability_threshold: 0.75 +observations: + + - entity_id: binary_sensor.storage_room_door_contact + prob_given_true: .4 + prob_given_false: 0.01 + platform: state + to_state: 'on' diff --git a/components/binary_sensors/rooms/utility_room_occupied.yaml b/components/binary_sensors/rooms/utility_room_occupied.yaml new file mode 100644 index 0000000..0ce2cae --- /dev/null +++ b/components/binary_sensors/rooms/utility_room_occupied.yaml @@ -0,0 +1,31 @@ +platform: bayesian +unique_id: bayesianbinarysensor.utility_room_occupied +name: Utility Room Occupied +device_class: occupancy +prior: 0.2 +probability_threshold: 0.75 +observations: + + - entity_id: group.utility_room_motion + prob_given_true: .99 + prob_given_false: 0.05 + platform: state + to_state: 'on' + + # - entity_id: binary_sensor.utility_room_getting_humid + # prob_given_true: .75 + # prob_given_false: 0.01 + # platform: state + # to_state: 'on' + + - entity_id: binary_sensor.utility_room_hygrostat + prob_given_true: .99 + prob_given_false: 0.05 + platform: state + to_state: 'on' + + - entity_id: input_boolean.home_occupied + platform: state + prob_given_true: .99 + prob_given_false: 0.01 + to_state: 'on' \ No newline at end of file diff --git a/components/binary_sensors/template.yaml b/components/binary_sensors/template.yaml new file mode 100644 index 0000000..c019f54 --- /dev/null +++ b/components/binary_sensors/template.yaml @@ -0,0 +1,756 @@ +platform: template +sensors: + ten_minute_warning_kids_bedtime: + unique_id: templatebinarysensor.ten_minute_warning_kids_bedtime + friendly_name: Ten Minute Warning Kids Bedtime + icon_template: mdi:bed-clock + value_template: "{{ now() >= today_at(states('input_datetime.kids_bedtime_announcement_time')) - timedelta(minutes= 10) }}" + + pixel_7_connected_to_traverse: + unique_id: templatebinarysensor.pixel_7_connected_to_traverse + friendly_name: Pixel 7 Connected to Traverse + icon_template: mdi:cellphone-key + value_template: "{{ '30:C3:D9:B0:CA:E4 (Chevrolet MyLink)' in state_attr('sensor.pixel_7_bluetooth_connection','connected_paired_devices') }}" + + humidity_too_low: + unique_id: templatebinarysensor.humidity_too_low + friendly_name: Humidity Too Low + icon_template: mdi:water-minus + value_template: "{{ states('sensor.upstairs_min_humidity') | float(default=0) < states('input_number.humidity_too_low')|float(default=0) or states('sensor.downstairs_min_humidity') | float(default=0) < states('input_number.humidity_too_low')|float(default=0) }}" + attribute_templates: + upstairs_area: "{{ state_attr('sensor.upstairs_min_humidity', 'min_entity_id') }}" + upstairs_value: "{{ states('sensor.upstairs_min_humidity') }}" + downstairs_area: "{{ state_attr('sensor.downstairs_min_humidity', 'min_entity_id') }}" + downstairs_value: "{{ states('sensor.downstairs_min_humidity') }}" + + humidity_too_high: + unique_id: templatebinarysensor.humidity_too_high + friendly_name: Humidity Too High + icon_template: mdi:water-plus + value_template: "{{ states('sensor.upstairs_max_humidity') | float(default=0) > states('input_number.humidity_too_high')|float(default=0) or states('sensor.downstairs_max_humidity') | float(default=0) > states('input_number.humidity_too_high')|float(default=0) }}" + attribute_templates: + upstairs_area: "{{ state_attr('sensor.upstairs_max_humidity', 'max_entity_id') }}" + upstairs_value: "{{ states('sensor.upstairs_max_humidity') }}" + downstairs_area: "{{ state_attr('sensor.downstairs_max_humidity', 'max_entity_id') }}" + downstairs_value: "{{ states('sensor.downstairs_max_humidity') }}" + + temperature_too_low: + unique_id: templatebinarysensor.temperature_too_low + friendly_name: Temperature Too Low + icon_template: mdi:thermometer-chevron-down + value_template: "{{ states('sensor.upstairs_min_temperature') | float(default=0) < states('input_number.temperature_too_low')|float(default=0) or states('sensor.downstairs_min_temperature') | float(default=0) < states('input_number.temperature_too_low')|float(default=0) }}" + attribute_templates: + upstairs_area: "{{ state_attr('sensor.upstairs_min_temperature', 'min_entity_id') }}" + upstairs_value: "{{ states('sensor.upstairs_min_temperature') }}" + downstairs_area: "{{ state_attr('sensor.downstairs_min_temperature', 'min_entity_id') }}" + downstairs_value: "{{ states('sensor.downstairs_min_temperature') }}" + + temperature_too_high: + unique_id: templatebinarysensor.temperature_too_high + friendly_name: Temperature Too High + icon_template: mdi:thermometer-chevron-up + value_template: "{{ states('sensor.upstairs_max_temperature') | float(default=0) > states('input_number.temperature_too_high')|float(default=0) or states('sensor.downstairs_max_temperature') | float(default=0) > states('input_number.temperature_too_high')|float(default=0) }}" + attribute_templates: + upstairs_area: "{{ state_attr('sensor.upstairs_max_temperature', 'max_entity_id') }}" + upstairs_value: "{{ states('sensor.upstairs_max_temperature') }}" + downstairs_area: "{{ state_attr('sensor.downstairs_max_temperature', 'max_entity_id') }}" + downstairs_value: "{{ states('sensor.downstairs_max_temperature') }}" + + humidity_problem: + unique_id: templatebinarysensor.humidity_problem + friendly_name: Humidity Problem + icon_template: mdi:water-alert + value_template: "{{ is_state('binary_sensor.humidity_too_low','on') or is_state('binary_sensor.humidity_too_high','on') }}" + + kids_possible: + unique_id: templatebinarysensor.kids_possible + friendly_name: Kids Possible + icon_template: mdi:human-male-female-child + value_template: "{{ is_state('binary_sensor.have_custody','on') or is_state('input_boolean.kristy_home','on') or is_state('input_boolean.ebin_home','on') or is_state('input_select.weaver_kids','Home') or is_state('input_select.podein_kids','Home') }}" + + double_planter_needs_water: + unique_id: templatebinarysensor.double_planter_needs_water + friendly_name: Double Planter Needs Water + value_template: "{{ states('sensor.fineoffset_wh51_00f935_moisture')|float(default=0) <= states('input_number.double_planter_water_alert')|int(default=0) }}" + delay_on: "00:05:00" + icon_template: > + {% if states('sensor.fineoffset_wh51_00f935_moisture') == 'unavailable' %} + mdi:flower-outline + {% else %} + mdi:flower + {% endif %} + attribute_templates: + moisture: "{{states('sensor.fineoffset_wh51_00f935_moisture') | float(default=0)}}" + alarm_trigger: "{{states('input_number.double_planter_water_alert') | float(default=0)}}" + + kitchen_fridge_too_warm: + unique_id: templatebinarysensor.kitchen_fridge_too_warm + friendly_name: Kitchen Fridge Too Warm + value_template: "{{ states('sensor.acurite_986_1r_48226_temperature')|int(default=0) > states('input_number.kitchen_fridge_alert')|int(default=0) }}" + delay_on: "00:30:00" + icon_template: > + {% if states('sensor.acurite_986_1r_48226_temperature')|int(default=0) > states('input_number.kitchen_fridge_alert')|int(default=0) %} + mdi:fridge-variant-alert + {% else %} + mdi:fridge-variant + {% endif %} + + kitchen_freezer_too_warm: + unique_id: templatebinarysensor.kitchen_freezer_too_warm + friendly_name: Kitchen Freezer Too Warm + value_template: "{{ states('sensor.acurite_986_2f_42383_temperature')|int(default=0) > states('input_number.kitchen_freezer_alert')|int(default=0) }}" + delay_on: "00:30:00" + icon_template: > + {% if states('sensor.acurite_986_2f_42383_temperature')|int(default=0) > states('input_number.kitchen_freezer_alert')|int(default=0) %} + mdi:fridge-variant-alert + {% else %} + mdi:fridge-variant + {% endif %} + + kitchen_fridge_or_freezer_too_warm: + unique_id: templatebinarysensor.kitchen_fridge_or_freezer_too_warm + friendly_name: Kitchen Fridge or Freezer Too Warm + value_template: "{{ states('sensor.acurite_986_1r_48226_temperature')|int(default=0) > states('input_number.kitchen_fridge_alert')|int(default=0) or states('sensor.acurite_986_2f_42383_temperature')|int(default=0) > states('input_number.kitchen_freezer_alert')|int(default=0) }}" + delay_on: "00:30:00" + icon_template: > + {% if states('sensor.acurite_986_1r_48226_temperature')|int(default=0) > states('input_number.kitchen_fridge_alert')|int(default=0) or states('sensor.acurite_986_2f_42383_temperature')|int(default=0) > states('input_number.kitchen_freezer_alert')|int(default=0) %} + mdi:fridge-variant-alert + {% else %} + mdi:fridge-variant + {% endif %} + + master_bed_left_occupied: + unique_id: templatebinarysensor.master_bed_left_occupied + friendly_name: Master Bedroom Left Occupied + icon_template: mdi:bed-king + value_template: "{{ is_state('binary_sensor.master_bed_occupied','on') and states('sensor.master_bed_weight') | float(default=0) > 200 }}" + + master_bed_right_occupied: + unique_id: templatebinarysensor.master_bed_right_occupied + friendly_name: Master Bedroom Right Occupied + icon_template: mdi:bed-king + value_template: "{{ is_state('binary_sensor.master_bed_occupied','on') }}" + + bathroom_getting_humid: + unique_id: templatebinarysensor.bathroom_getting_humid + friendly_name: Bathroom Getting Humid + delay_off: + minutes: 5 + #value_template: "{{ is_state('binary_sensor.trend_bathroom_humidity','on') or states('sensor.master_bathroom_thermostat_humidity') | int(default=0) - states('sensor.master_bedroom_multisensor_humidity') | int(default=100) > 5}}" + value_template: "{{ states('sensor.master_bathroom_thermostat_humidity') | float(default=0) - states('sensor.upstairs_mean_humidity') | float(default=100) > 10 }}" + icon_template: > + {% if states('sensor.master_bathroom_thermostat_humidity') | float(default=0) - states('sensor.upstairs_mean_humidity') | float(default=100) > 10 %} + mdi:water-percent + {% else %} + mdi:water-off + {% endif %} + attribute_templates: + room_humidity: "{{ states('sensor.master_bathroom_thermostat_humidity') | float(default=0) }}" + mean_humidity: "{{ states('sensor.upstairs_mean_humidity') | float(default=0) }}" + difference: "{{ states('sensor.master_bathroom_thermostat_humidity') | float(default=0) - states('sensor.upstairs_mean_humidity') | float(default=0) }}" + + utility_room_getting_humid: + unique_id: templatebinarysensor.utility_room_getting_humid + friendly_name: Utility Room Getting Humid + delay_off: + minutes: 5 + #value_template: "{{ is_state('binary_sensor.trend_utility_humidity','on') or states('sensor.utility_room_thermostat_humidity') | int(default=0) - states('sensor.computer_area_multisensor_humidity') | int(default=100) > 5}}" + value_template: "{{ states('sensor.utility_room_thermostat_humidity') | float(default=0) - states('sensor.downstairs_mean_humidity') | float(default=100) > 10 }}" + icon_template: > + {% if states('sensor.utility_room_thermostat_humidity') | float(default=0) - states('sensor.downstairs_mean_humidity') | float(default=100) > 10 %} + mdi:water-percent + {% else %} + mdi:water-off + {% endif %} + attribute_templates: + room_humidity: "{{ states('sensor.utility_room_thermostat_humidity') | float(default=0) }}" + mean_humidity: "{{ states('sensor.downstairs_mean_humidity') | float(default=0) }}" + difference: "{{ states('sensor.utility_room_thermostat_humidity') | float(default=0) - states('sensor.downstairs_mean_humidity') | float(default=0) }}" + + work_hours: + unique_id: templatebinarysensor.work_hours + friendly_name: Work Hours + value_template: "{{ is_state('binary_sensor.work_day', 'on') and is_state('binary_sensor.business_hours', 'on') }}" + icon_template: mdi:briefcase + + # washing_machine: + # unique_id: templatebinarysensor.washing_machine + # friendly_name: Washing Machine + # delay_off: + # seconds: 30 + # icon_template: mdi:washing-machine + # availability_template: "{{ states('sensor.pm_laundry_plug_w') not in ['unkown', 'unavailable'] }}" + # value_template: "{{ states('sensor.pm_laundry_plug_w')|float(default=0) >= states('input_number.washing_machine_on')|float(default=0) }}" + # attribute_templates: + # model_number: 'WF45R6100AW/US' + # serial_number: '01FY57AM802740X' + # power: "{{ states('sensor.pm_laundry_plug_w') | float(default=0)}}" + # target: "{{ states('input_number.washing_machine_on') | float(default=0)}}" + + + # tumble_dryer: + # unique_id: binary-sensor-tumble-dryer + # friendly_name: Tumble Dryer + # delay_off: + # seconds: 30 + # icon_template: mdi:tumble-dryer + # availability_template: "{{ states('sensor.pm_dryer_w') not in ['unkown', 'unavailable'] }}" + # value_template: "{{ states('sensor.pm_dryer_w')|float(default=0) >= states('input_number.tumble_dryer_on')|float(default=0) }}" + # attribute_templates: + # model_number: 'DVE45R6100W/A3' + # serial_number: '0AY95BBM605793X' + # power: "{{ states('sensor.pm_dryer_w') | float(default=0)}}" + # target: "{{ states('input_number.tumble_dryer_on') | float(default=0)}}" + + # dishwasher: + # unique_id: templatebinarysensor.dishwasher + # friendly_name: Dishwasher + # delay_on: + # seconds: 60 + # delay_off: + # seconds: 30 + # icon_template: mdi:dishwasher + # availability_template: "{{ states('sensor.pm_dishwasher_w') not in ['unkown', 'unavailable'] }}" + # value_template: "{{ states('sensor.pm_dishwasher_w')|float(default=0) >= states('input_number.dishwasher_on')|float(default=0) }}" + # attribute_templates: + # model_number: 'MDB6769PAS1' + # serial_number: 'F24407234' + # power: "{{ states('sensor.pm_dishwasher_w') | float(default=0)}}" + # target: "{{ states('input_number.dishwasher_on') | float(default=0)}}" + + stove: + unique_id: binary-sensor-stove + friendly_name: Stove + delay_off: + seconds: 120 + value_template: "{{ states('sensor.pm_stove_w') | float(default=0) > states('input_number.stove_on') | float(default=0) }}" + icon_template: mdi:stove + attribute_templates: + model_number: 'WFE505W0JS3' + serial_number: 'RB4659869' + power: "{{ states('sensor.pm_stove_w') | float(default=0)}}" + oven_temperature: "{{ iif(is_state('sensor.oven_temperature', 'unavailable'), 'unavailable', states('sensor.oven_temperature') | float(default=0)) }}" + + + microwave: + unique_id: binary-sensor-microwave + friendly_name: Microwave + value_template: "{{ states('sensor.pm_microwave_plug_w') | float(default=0) > states('input_number.microwave_on') | float(default=0) }}" + icon_template: mdi:microwave + attribute_templates: + model_number: 'testmodel' + serial_number: 'testserial' + power: "{{ states('sensor.pm_microwave_plug_w') | float(default=0)}}" + + furnace: + unique_id: binary-sensor-furnace + friendly_name: Furnace + value_template: "{{ states('sensor.pm_furnace_w') | float(default=0) > states('input_number.furnace_on') | float(default=0) }}" + icon_template: mdi:radiator + attribute_templates: + model_number: 'testmodel' + serial_number: 'testserial' + power: "{{ states('sensor.pm_furnace_w') | float(default=0)}}" + + heat_pump: + unique_id: binary-sensor-heat-pump + friendly_name: Heat Pump + value_template: "{{ states('sensor.pm_heat_pump_w') | float(default=0) > states('input_number.heat_pump_on') | float(default=0) }}" + icon_template: mdi:air-filter + attribute_templates: + model_number: 'testmodel' + serial_number: 'testserial' + power: "{{ states('sensor.pm_heat_pump_w') | float(default=0)}}" + + sump_pump: + unique_id: binary-sensor-sump-pump + friendly_name: Sump Pump + value_template: "{{ states('sensor.pm_sump_pump_plug_w') | float(default=0) > states('input_number.sump_pump_on') | float(default=0) }}" + icon_template: mdi:pump + attribute_templates: + model_number: 'testmodel' + serial_number: 'testserial' + power: "{{ states('sensor.pm_sump_pump_plug_w') | float(default=0)}}" + + something_open_hvac_on: + unique_id: templatebinarysensor.something_open_hvac_on + friendly_name: Something Open HVAC On + device_class: problem + delay_on: + minutes: 5 + value_template: >- + {% if is_state('binary_sensor.patio_door_contact', 'on') or is_state('group.my_exterior_windows', 'on') or is_state('binary_sensor.front_door_contact', 'on') %} + {% if is_state_attr('climate.thermostat', 'hvac_action', 'cooling') and states('sensor.master_bedroom_multisensor_air_temperature') | int < states('sensor.front_porch_temperature') | int %} + {{'true'}} + {% elif is_state_attr('climate.thermostat', 'hvac_action', 'heating') and states('sensor.master_bedroom_multisensor_air_temperature') | int > states('sensor.front_porch_temperature') | int %} + {{'true'}} + {% else %} + {{'false'}} + {% endif %} + {% else %} + {{'false'}} + {% endif %} + + hvac_delta_too_small_for_too_long: + unique_id: templatebinarysensor.hvac_delta_too_small_for_too_long + friendly_name: HVAC Delta Too Small For Too Long + device_class: problem + delay_on: + minutes: 10 + value_template: >- + {% if is_state('binary_sensor.hvac_delta_sensors_unavailable','on') %} + {{'false'}} + {% else %} + {% if is_state_attr('climate.thermostat', 'hvac_action', 'cooling') and states('sensor.hvac_delta') | int(default=0) >= -5 %} + {{'true'}} + {% elif is_state_attr('climate.thermostat', 'hvac_action', 'heating') and states('sensor.hvac_delta') | int(default=0) <= 5 %} + {{'true'}} + {% else %} + {{'false'}} + {% endif %} + {% endif %} + + have_custody: + unique_id: templatebinarysensor.have_custody + friendly_name: Have Custody + value_template: >- + {% if is_state('calendar.my_custody', 'on') %} + {{'true'}} + {% else %} + {{'false'}} + {% endif %} + + computer_chair_contact_occupied: + unique_id: templatebinarysensor.computer_chair_contact_occupied + friendly_name: Computer Chair Occupied + value_template: "{{ states('binary_sensor.computer_chair_contact') | string == 'off' }}" + + # If the AC has been on for more than 5 minutes, the Delta Temperature should be more than 5 + # ( The air coming out of a vent should be more than 5 degrees cooler than the air going into a return ) + hvac_delta_temperature_good: + unique_id: templatebinarysensor.hvac_delta_temperature_good + friendly_name: HVAC Delta Temperature Good + value_template: >- + {% if states("sensor.hvac_temperature") | string != "unknown" and states("sensor.return_temperature") | string != "unknown" %} + {% if states('sensor.hvac_action') | string == 'cooling' and as_timestamp(now())-(as_timestamp(states.sensor.hvac_action.last_changed))|round(1) > 300 %} + {% if states('sensor.hvac_delta') | float(default=0) < -10 %} + {{ 'true' }} + {% else %} + {{ 'false' }} + {% endif %} + {% elif states('sensor.hvac_action') | string == 'heating' and as_timestamp(now())-(as_timestamp(states.sensor.hvac_action.last_changed))|round(1) > 300 %} + {% if states('sensor.hvac_delta') | float(default=0) > 10 %} + {{ 'true' }} + {% else %} + {{ 'false' }} + {% endif %} + {% endif %} + {% endif %} + + hvac_delta_sensors_unavailable: + unique_id: templatebinarysensor.hvac_delta_sensors_unavailable + friendly_name: HVAC Delta Sensors Unavailable + device_class: connectivity + delay_on: + minutes: 5 + value_template: >- + {% if states("sensor.hvac_temperature") | string == 'unknown' or states("sensor.return_temperature") | string == 'unknown' or states("sensor.hvac_temperature") | string == 'unavailable' or states("sensor.return_temperature") | string == 'unavailable' %} + {{ 'true' }} + {% else %} + {{ 'false' }} + {% endif %} + + # Is it too cold or too warm outside to turn on the fan? + temp_just_right: + unique_id: templatebinarysensor.temp_just_right + friendly_name: Temp Just Right + value_template: >- + {% if states('sensor.front_porch_temperature') | float(default=0) > 50 and states('sensor.front_porch_temperature') | float(default=0) < 90 %} + {{'true'}} + {% else %} + {{ 'false' }} + {% endif %} + + + # Moved to temperature_management.yaml + # Is it more than 5 degrees warmer outside? + # warmer_outside: + # unique_id: templatebinarysensor.warmer_outside + # friendly_name: Warmer Outside + # value_template: >- + # {% if states('sensor.thermostat_temperature') | float(default=0) - 5 < states('sensor.lacrosse_tx141thbv2_0_54_temperature') | float(default=0) %} + # {{'true'}} + # {% else %} + # {{ 'false' }} + # {% endif %} + + # Moved to temperature_management.yaml + # Is it more than 5 degrees cooler outside? + # cooler_outside: + # unique_id: templatebinarysensor.cooler_outside + # friendly_name: Cooler Outside + # value_template: >- + # {% if states('sensor.lacrosse_tx141thbv2_0_54_temperature') | float(default=0) + 5 < states('sensor.thermostat_temperature') | float(default=0) %} + # {{'true'}} + # {% else %} + # {{ 'false' }} + # {% endif %} + + + is_dark: + unique_id: templatebinarysensor.is_dark + friendly_name: Is Dark + value_template: "{{ (states('sensor.front_porch_light_level') | int(0) < states('input_number.is_dark') | int(0)) or (states('sensor.front_porch_light_level') | int(0) < 30 and is_state('light.front_porch_overhead','on')) }}" + + is_dim: + unique_id: templatebinarysensor.is_dim + friendly_name: Is Dim + value_template: "{{ states('sensor.front_porch_light_level') | int(0) >= states('input_number.is_dark') | int(0) and states('sensor.front_porch_light_level') | int(0) < states('input_number.is_daylight') | int(0) }}" + + is_daylight: + unique_id: templatebinarysensor.is_daylight + friendly_name: Is Daylight + value_template: "{{ states('sensor.front_porch_light_level') | int(0) >= states('input_number.is_daylight') | int(0) }}" + + garage_open_nobody_home: + unique_id: templatebinarysensor.garage_open_nobody_home + friendly_name: 'Garage Open Nobody Home' + value_template: >- + {% if is_state('cover.garage_door', 'open') %} + {% if is_state('input_boolean.home_occupied', 'off') %} + {{ 'true' }} + {% else %} + {{ 'false' }} + {% endif %} + {% else %} + {{ 'false' }} + {% endif %} + + adults_at_home: + unique_id: templatebinarysensor.adults_at_home + friendly_name: Adults At Home + value_template: >- + {% if + is_state('input_boolean.clint_home','on') or + is_state('input_boolean.kristy_home','on') + %} + {{'true'}} + {% else %} + {{'false'}} + {% endif %} + + adults_in_bed: + unique_id: templatebinarysensor.adults_in_bed + friendly_name: Adults In Bed + value_template: >- + {% if + is_state('binary_sensor.adults_at_home','on') and + (is_state('input_boolean.clint_home','off') or is_state('input_boolean.clint_in_bed', 'on')) and + (is_state('input_boolean.kristy_home','off') or is_state('input_boolean.kristy_in_bed', 'on')) + %} + {{'true'}} + {% else %} + {{'false'}} + {% endif %} + + adults_asleep: + unique_id: templatebinarysensor.adults_asleep + friendly_name: Adults Asleep + value_template: >- + {% if + is_state('binary_sensor.adults_at_home','on') and + (is_state('input_boolean.clint_home','off') or is_state('input_boolean.clint_is_awake', 'off')) and + (is_state('input_boolean.kristy_home','off') or is_state('input_boolean.kristy_is_awake', 'off')) + %} + {{'true'}} + {% else %} + {{'false'}} + {% endif %} + + teens_at_home: + unique_id: templatebinarysensor.teens_at_home + friendly_name: Teens At Home + value_template: >- + {% if + is_state('input_boolean.marshall_home','on') or + is_state('input_boolean.tess_home','on') + %} + {{'true'}} + {% else %} + {{'false'}} + {% endif %} + + teens_in_bed: + unique_id: templatebinarysensor.teens_in_bed + friendly_name: Teens In Bed + value_template: >- + {% if + is_state('binary_sensor.teens_at_home','on') and + (is_state('input_boolean.marshall_home','off') or is_state('input_boolean.marshall_in_bed', 'on')) and + (is_state('input_boolean.tess_home','off') or is_state('input_boolean.tess_in_bed', 'on')) + %} + {{'true'}} + {% else %} + {{'false'}} + {% endif %} + + teens_asleep: + unique_id: templatebinarysensor.teens_asleep + friendly_name: Teens Asleep + value_template: >- + {% if + is_state('binary_sensor.teens_at_home','on') and + (is_state('input_boolean.marshall_home','off') or is_state('input_boolean.marshall_is_awake', 'off')) and + (is_state('input_boolean.tess_home','off') or is_state('input_boolean.tess_is_awake', 'off')) + %} + {{'true'}} + {% else %} + {{'false'}} + {% endif %} + + kids_at_home: + unique_id: templatebinarysensor.kids_at_home + friendly_name: Kids At Home + value_template: >- + {% if + is_state('input_boolean.emmett_home','on') or + is_state('input_boolean.bridget_home','on') or + is_state('input_boolean.ebin_home','on') + %} + {{'true'}} + {% else %} + {{'false'}} + {% endif %} + + kids_in_bed: + unique_id: templatebinarysensor.kids_in_bed + friendly_name: Kids In Bed + value_template: >- + {% if + is_state('input_boolean.kids_away','off') and + (is_state('input_boolean.emmett_home','off') or is_state('input_boolean.emmett_in_bed', 'on')) and + (is_state('input_boolean.bridget_home','off') or is_state('input_boolean.bridget_in_bed', 'on')) and + (is_state('input_boolean.ebin_home','off') or is_state('input_boolean.ebin_in_bed', 'on')) + %} + {{'true'}} + {% else %} + {{'false'}} + {% endif %} + + kids_asleep: + unique_id: templatebinarysensor.kids_asleep + friendly_name: Kids Asleep + value_template: >- + {% if + is_state('input_boolean.kids_away','off') and + (is_state('input_boolean.emmett_home','off') or is_state('input_boolean.emmett_is_awake', 'off')) and + (is_state('input_boolean.bridget_home','off') or is_state('input_boolean.bridget_is_awake', 'off')) and + (is_state('input_boolean.ebin_home','off') or is_state('input_boolean.ebin_is_awake', 'off')) + %} + {{'true'}} + {% else %} + {{'false'}} + {% endif %} + + green_car_east_side: + unique_id: templatebinarysensor.green_car_east_side + friendly_name: Green Car East Side + value_template: "{{ states('sensor.car_sensor_east_side') | float(default=0) >= 1.3 and states('sensor.car_sensor_east_side') | float(default=0) <= 1.5 }}" + + green_car_west_side: + unique_id: templatebinarysensor.green_car_west_side + friendly_name: Green Car West Side + value_template: "{{ states('sensor.car_sensor_west_side') | float(default=0) >= 1.3 and states('sensor.car_sensor_west_side') | float(default=0) <= 1.5 }}" + + gray_suv_east_side: + unique_id: templatebinarysensor.gray_suv_east_side + friendly_name: Gray SUV East Side + value_template: "{{ states('sensor.car_sensor_east_side') | float(default=0) >= 0.8 and states('sensor.car_sensor_east_side') | float(default=0) < 1.8 }}" + + gray_suv_west_side: + unique_id: templatebinarysensor.gray_suv_west_side + friendly_name: Gray SUV West Side + value_template: "{{ states('sensor.car_sensor_west_side') | float(default=0) >= 0.8 and states('sensor.car_sensor_west_side') | float(default=0) < 1.8 }}" + + clint_home_during_work_hours: + unique_id: templatebinarysensor.clint_home_during_work_hours + friendly_name: Clint Home During Work Hours + value_template: "{{ states('input_boolean.clint_home') == 'on' and states('binary_sensor.work_hours') == 'on' }}" + + back_yard_light_left_on: + unique_id: templatebinarysensor.back_yard_light_left_on + friendly_name: Back Yard Light Left On + value_template: "{{ is_state('light.deck','on') }}" + delay_on: + seconds: 30 + + storage_room_light_left_on: + unique_id: templatebinarysensor.storage_room_light_left_on + friendly_name: Storage Room Light Left On + value_template: "{{ is_state('light.storage_room','on') }}" + delay_on: + seconds: 30 + + furnace_room_light_left_on: + unique_id: templatebinarysensor.furnace_room_light_left_on + friendly_name: Furnace Room Light Left On + value_template: "{{ is_state('light.furnace_room','on') }}" + delay_on: + seconds: 30 + + blue_room_light_left_on: + unique_id: templatebinarysensor.blue_room_light_left_on + friendly_name: Blue Room Light Left On + value_template: "{{ is_state('light.blue_room_hue','on') }}" + delay_on: + seconds: 30 + + mancave_light_left_on: + unique_id: templatebinarysensor.mancave_light_left_on + friendly_name: Mancave Light Left On + value_template: "{{ is_state('light.mancave','on') }}" + delay_on: + seconds: 30 + + front_yard_light_left_on: + unique_id: templatebinarysensor.front_yard_light_left_on + friendly_name: Front Yard Light Left On + value_template: "{{ is_state('light.front_porch_overhead','on') }}" + delay_on: + seconds: 30 + + computer_area_light_left_on: + unique_id: templatebinarysensor.computer_area_light_left_on + friendly_name: Computer Area Light Left On + value_template: "{{ is_state('light.computer_area_hue','on') and is_state('input_boolean.computer_area_occupied','off') }}" + delay_on: + seconds: 30 + + dining_room_light_left_on: + unique_id: templatebinarysensor.dining_room_light_left_on + friendly_name: Dining Room Light Left On + value_template: "{{ is_state('light.dining_room_switch','on') and is_state('input_boolean.dining_room_occupied','off') }}" + delay_on: + seconds: 30 + + entryway_light_left_on: + unique_id: templatebinarysensor.entryway_light_left_on + friendly_name: Entryway Light Left On + value_template: "{{ is_state('light.entryway_hue','on') and is_state('input_boolean.entryway_occupied','off') }}" + delay_on: + seconds: 30 + + front_room_light_left_on: + unique_id: templatebinarysensor.front_room_light_left_on + friendly_name: Front Room Light Left On + value_template: "{{ is_state('light.front_room_hue','on') and is_state('input_boolean.front_room_occupied','off') }}" + delay_on: + seconds: 30 + + garage_light_left_on: + unique_id: templatebinarysensor.garage_light_left_on + friendly_name: Garage Light Left On + value_template: "{{ is_state('light.garage_overhead','on') and is_state('input_boolean.garage_occupied','off') }}" + delay_on: + seconds: 30 + + great_room_light_left_on: + unique_id: templatebinarysensor.great_room_light_left_on + friendly_name: Great Room Light Left On + value_template: "{{ is_state('light.great_room_hue','on') and is_state('input_boolean.great_room_occupied','off') }}" + delay_on: + seconds: 30 + + kitchen_light_left_on: + unique_id: templatebinarysensor.kitchen_light_left_on + friendly_name: Kitchen Light Left On + value_template: "{{ is_state('light.kitchen_hue','on') and is_state('input_boolean.kitchen_occupied','off') }}" + delay_on: + seconds: 30 + + master_bathroom_light_left_on: + unique_id: templatebinarysensor.master_bathroom_light_left_on + friendly_name: Master Bathroom Light Left On + value_template: "{{ is_state('light.master_bathroom_hue','on') and is_state('input_boolean.master_bathroom_occupied','off') }}" + delay_on: + seconds: 30 + + master_bedroom_light_left_on: + unique_id: templatebinarysensor.master_bedroom_light_left_on + friendly_name: Master Bedroom Light Left On + value_template: "{{ is_state('light.master_bedroom_ceiling_hue','on') and is_state('input_boolean.master_bedroom_occupied','off') }}" + delay_on: + seconds: 30 + + nursery_light_left_on: + unique_id: templatebinarysensor.nursery_light_left_on + friendly_name: Nursery Light Left On + value_template: "{{ is_state('light.nursery_ceiling_hue','on') and is_state('input_boolean.nursery_occupied','off') }}" + delay_on: + seconds: 30 + + utility_room_light_left_on: + unique_id: templatebinarysensor.utility_room_light_left_on + friendly_name: Utility Room Light Left On + value_template: "{{ is_state('light.utility_room_hue','on') and is_state('input_boolean.utility_room_occupied','off') }}" + delay_on: + seconds: 30 + + take_dumpster_to_curb: + unique_id: templatebinarysensor.take_dumpster_to_curb + friendly_name: Take Dumpster To Curb + value_template: "{{ iif(is_state('input_boolean.trash_out','off') and state_attr('calendar.trash_schedule','offset_reached') )}}" + icon_template: mdi:trash-can + + take_trash_out: + unique_id: templatesensor.take_trash_out + friendly_name: 'Take Trash Out' + icon_template: mdi:trash-can + value_template: "{{ is_state('calendar.trash_schedule','on') or state_attr('calendar.trash_schedule','offset_reached') and is_state('input_boolean.trash_out','off') }}" + + need_salt: + unique_id: templatebinarysensor.need_salt + friendly_name: Need Salt + value_template: "{{ is_state('binary_sensor.furnace_room_multisensor_status', 'on') and is_state('sensor.salt_level_in_bags','0') }}" + icon_template: mdi:shaker-outline + delay_on: + seconds: 900 + + emmetts_bed: + unique_id: templatebinarysensor.emmetts_bed + friendly_name: Emmett's Bed + value_template: "{{ states('binary_sensor.black_bed_occupied') }}" + icon_template: "{{ iif(is_state('binary_sensor.black_bed_occupied','on'),'mdi:bed','mdi:bed-empty','mdi:bed-outline')}}" + + bridgets_bed: + unique_id: templatebinarysensor.bridgets_bed + friendly_name: Bridget's Bed + value_template: "{{ states('binary_sensor.white_bed_occupied') }}" + icon_template: "{{ iif(is_state('binary_sensor.white_bed_occupied','on'),'mdi:bed','mdi:bed-empty','mdi:bed-outline')}}" + + should_mow: # + unique_id: templatebinarysensor.should_mow + friendly_name: Should Mow + #value_template: "{{ as_timestamp(states('sensor.chore_mow')) < as_timestamp(now()) }}" + value_template: "{{ (( now().month > 3 ) and ( now().month < 9 )) and (as_timestamp(states('sensor.chore_mow')) < as_timestamp(now())) }}" + icon_template: mdi:mower-bag + + check_mail: + unique_id: templatebinarysensor.check_mail + friendly_name: Check Mail + value_template: "{{is_state('input_boolean.incoming_mail','on') and is_state('input_boolean.mail_checked','off')}}" + icon_template: mdi:mailbox + + close_windows: + unique_id: templatebinarysensor.close_windows + friendly_name: Close Windows + value_template: "{{is_state('group.my_exterior_windows','on') and is_state('binary_sensor.impending_rain','on')}}" + icon_template: mdi:window-open + + close_kitchen_fridge: + unique_id: templatebinarysensor.close_kitchen_fridge + friendly_name: Close Kitchen Fridge + value_template: "{{is_state('binary_sensor.kitchen_fridge_door_contact','on') }}" + icon_template: mdi:fridge-variant + delay_on: + minutes: 3 \ No newline at end of file diff --git a/components/binary_sensors/time_of_day/business_hours.yaml b/components/binary_sensors/time_of_day/business_hours.yaml new file mode 100644 index 0000000..734c13f --- /dev/null +++ b/components/binary_sensors/time_of_day/business_hours.yaml @@ -0,0 +1,4 @@ +platform: tod +name: Business Hours +after: '07:45' +before: '16:45' \ No newline at end of file diff --git a/components/binary_sensors/time_of_day/childcare_hours.yaml b/components/binary_sensors/time_of_day/childcare_hours.yaml new file mode 100644 index 0000000..3380a0c --- /dev/null +++ b/components/binary_sensors/time_of_day/childcare_hours.yaml @@ -0,0 +1,4 @@ +platform: tod +name: Childcare Hours +after: '07:00' +before: '16:30' \ No newline at end of file diff --git a/components/binary_sensors/time_of_day/childcare_nonschool_hours.yaml b/components/binary_sensors/time_of_day/childcare_nonschool_hours.yaml new file mode 100644 index 0000000..7ea6d60 --- /dev/null +++ b/components/binary_sensors/time_of_day/childcare_nonschool_hours.yaml @@ -0,0 +1,4 @@ +platform: tod +name: Childcare NonSchool Hours +after: '08:00' +before: '16:30' \ No newline at end of file diff --git a/components/binary_sensors/time_of_day/early_afternoon.yaml b/components/binary_sensors/time_of_day/early_afternoon.yaml new file mode 100644 index 0000000..daf62f4 --- /dev/null +++ b/components/binary_sensors/time_of_day/early_afternoon.yaml @@ -0,0 +1,4 @@ +platform: tod +name: Early Afternoon +after: '12:00' +before: '15:00' \ No newline at end of file diff --git a/components/binary_sensors/time_of_day/early_evening.yaml b/components/binary_sensors/time_of_day/early_evening.yaml new file mode 100644 index 0000000..7d53c21 --- /dev/null +++ b/components/binary_sensors/time_of_day/early_evening.yaml @@ -0,0 +1,4 @@ +platform: tod +name: Early Evening +after: '17:00' +before: '19:00' \ No newline at end of file diff --git a/components/binary_sensors/time_of_day/early_morning.yaml b/components/binary_sensors/time_of_day/early_morning.yaml new file mode 100644 index 0000000..54f36f5 --- /dev/null +++ b/components/binary_sensors/time_of_day/early_morning.yaml @@ -0,0 +1,4 @@ +platform: tod +name: Early Morning +after: '04:00' +before: '06:00' \ No newline at end of file diff --git a/components/binary_sensors/time_of_day/evening.yaml b/components/binary_sensors/time_of_day/evening.yaml new file mode 100644 index 0000000..92db6bc --- /dev/null +++ b/components/binary_sensors/time_of_day/evening.yaml @@ -0,0 +1,4 @@ +platform: tod +name: Evening +after: '19:00' +before: '22:00' \ No newline at end of file diff --git a/components/binary_sensors/time_of_day/last_chance_to_mow.yaml b/components/binary_sensors/time_of_day/last_chance_to_mow.yaml new file mode 100644 index 0000000..12297c2 --- /dev/null +++ b/components/binary_sensors/time_of_day/last_chance_to_mow.yaml @@ -0,0 +1,6 @@ +platform: tod +name: Last Chance to Mow +after: sunset +after_offset: "-02:30" +before: sunset +before_offset: "-01:30" \ No newline at end of file diff --git a/components/binary_sensors/time_of_day/late_afternoon.yaml b/components/binary_sensors/time_of_day/late_afternoon.yaml new file mode 100644 index 0000000..7076ba9 --- /dev/null +++ b/components/binary_sensors/time_of_day/late_afternoon.yaml @@ -0,0 +1,4 @@ +platform: tod +name: Late Afternoon +after: '15:00' +before: '17:00' \ No newline at end of file diff --git a/components/binary_sensors/time_of_day/late_evening.yaml b/components/binary_sensors/time_of_day/late_evening.yaml new file mode 100644 index 0000000..3b6cca9 --- /dev/null +++ b/components/binary_sensors/time_of_day/late_evening.yaml @@ -0,0 +1,4 @@ +platform: tod +name: Late Evening +after: '22:00' +before: '00:00' \ No newline at end of file diff --git a/components/binary_sensors/time_of_day/late_morning.yaml b/components/binary_sensors/time_of_day/late_morning.yaml new file mode 100644 index 0000000..2f22a01 --- /dev/null +++ b/components/binary_sensors/time_of_day/late_morning.yaml @@ -0,0 +1,4 @@ +platform: tod +name: Late Morning +after: '09:00' +before: '12:00' \ No newline at end of file diff --git a/components/binary_sensors/time_of_day/morning.yaml b/components/binary_sensors/time_of_day/morning.yaml new file mode 100644 index 0000000..ba60031 --- /dev/null +++ b/components/binary_sensors/time_of_day/morning.yaml @@ -0,0 +1,4 @@ +platform: tod +name: Morning +after: '06:00' +before: '09:00' \ No newline at end of file diff --git a/components/binary_sensors/time_of_day/night.yaml b/components/binary_sensors/time_of_day/night.yaml new file mode 100644 index 0000000..326bfc2 --- /dev/null +++ b/components/binary_sensors/time_of_day/night.yaml @@ -0,0 +1,4 @@ +platform: tod +name: Night +after: '00:00' +before: '04:00' \ No newline at end of file diff --git a/components/binary_sensors/time_of_day/too_late_to_mow.yaml b/components/binary_sensors/time_of_day/too_late_to_mow.yaml new file mode 100644 index 0000000..f53307c --- /dev/null +++ b/components/binary_sensors/time_of_day/too_late_to_mow.yaml @@ -0,0 +1,5 @@ +platform: tod +name: Too Late to Mow +after: sunset +after_offset: "-01:30" +before: sunset \ No newline at end of file diff --git a/components/binary_sensors/weekday.yaml b/components/binary_sensors/weekday.yaml new file mode 100644 index 0000000..8631ad1 --- /dev/null +++ b/components/binary_sensors/weekday.yaml @@ -0,0 +1,5 @@ +# platform: workday +# name: Weekday +# country: US +# workdays: [mon, tue, wed, thu, fri] +# excludes: [sat, sun] \ No newline at end of file diff --git a/components/binary_sensors/work_tomorrow.yaml b/components/binary_sensors/work_tomorrow.yaml new file mode 100644 index 0000000..f0e7b08 --- /dev/null +++ b/components/binary_sensors/work_tomorrow.yaml @@ -0,0 +1,12 @@ +# platform: workday +# name: Work Day Tomorrow +# country: US +# workdays: [mon, tue, wed, thu, fri] +# excludes: [sat, sun, holiday] +# days_offset: 1 +# remove_holidays: +# # - "Martin Luther King Jr. Day" +# - "Washington's Birthday" +# - "Juneteenth" +# - "Columbus Day" +# - "Veterans Day" \ No newline at end of file diff --git a/components/binary_sensors/workday.yaml b/components/binary_sensors/workday.yaml new file mode 100644 index 0000000..1243e68 --- /dev/null +++ b/components/binary_sensors/workday.yaml @@ -0,0 +1,11 @@ +# platform: workday +# name: Work Day +# country: US +# workdays: [mon, tue, wed, thu, fri] +# excludes: [sat, sun, holiday] +# remove_holidays: +# # - "Martin Luther King Jr. Day" +# - "Washington's Birthday" +# - "Juneteenth" +# - "Columbus Day" +# - "Veterans Day" \ No newline at end of file diff --git a/components/cameras/blueiris_cameras.yaml b/components/cameras/blueiris_cameras.yaml new file mode 100644 index 0000000..43dd06f --- /dev/null +++ b/components/cameras/blueiris_cameras.yaml @@ -0,0 +1,112 @@ +camera: +- platform: mjpeg + mjpeg_url: http://192.168.1.7:81/mjpg/Cam01 + name: Camera01 + username: !secret bi_username + password: !secret bi_password + authentication: basic + +- platform: mjpeg + mjpeg_url: http://192.168.1.7:81/mjpg/Cam02 + name: Camera02 + username: !secret bi_username + password: !secret bi_password + authentication: basic + +- platform: mjpeg + mjpeg_url: http://192.168.1.7:81/mjpg/Cam03 + name: Camera03 + username: !secret bi_username + password: !secret bi_password + authentication: basic + +- platform: mjpeg + mjpeg_url: http://192.168.1.7:81/mjpg/Cam04 + name: Camera04 + username: !secret bi_username + password: !secret bi_password + authentication: basic + +- platform: mjpeg + mjpeg_url: http://192.168.1.7:81/mjpg/Cam05 + name: Camera05 + username: !secret bi_username + password: !secret bi_password + authentication: basic + +- platform: mjpeg + mjpeg_url: http://192.168.1.7:81/mjpg/Cam06 + name: Camera06 + username: !secret bi_username + password: !secret bi_password + authentication: basic + +- platform: mjpeg + mjpeg_url: http://192.168.1.7:81/mjpg/Cam07 + name: Camera07 + username: !secret bi_username + password: !secret bi_password + authentication: basic + +- platform: mjpeg + mjpeg_url: http://192.168.1.7:81/mjpg/Cam08 + name: Camera08 + username: !secret bi_username + password: !secret bi_password + authentication: basic + +- platform: mjpeg + mjpeg_url: http://192.168.1.7:81/mjpg/Cam09 + name: Camera09 + username: !secret bi_username + password: !secret bi_password + authentication: basic + +- platform: mjpeg + mjpeg_url: http://192.168.1.7:81/mjpg/WyzeCube + name: WyzeCube + username: !secret bi_username + password: !secret bi_password + authentication: basic + +- platform: mjpeg + mjpeg_url: http://192.168.1.7:81/mjpg/Upstairs?/video.mjpg + name: Upstairs + username: !secret bi_username + password: !secret bi_password + authentication: basic + +- platform: mjpeg + mjpeg_url: http://192.168.1.7:81/mjpg/@Upstairs?/video.mjpg + name: CycleUpstairs + username: !secret bi_username + password: !secret bi_password + authentication: basic + +- platform: mjpeg + mjpeg_url: http://192.168.1.7:81/mjpg/Downstairs?/video.mjpg + name: Downstairs + username: !secret bi_username + password: !secret bi_password + authentication: basic + +- platform: mjpeg + mjpeg_url: http://192.168.1.7:81/mjpg/@Downstairs?/video.mjpg + name: CycleDownstairs + username: !secret bi_username + password: !secret bi_password + authentication: basic + +- platform: mjpeg + mjpeg_url: http://192.168.1.7:81/mjpg/All?/video.mjpg + name: AllCameras + username: !secret bi_username + password: !secret bi_password + authentication: basic + +- platform: mjpeg + mjpeg_url: http://192.168.1.7:81/mjpg/@All?/video.mjpg + name: CycleAllCameras + username: !secret bi_username + password: !secret bi_password + authentication: basic \ No newline at end of file diff --git a/components/cameras/cameras.yaml b/components/cameras/cameras.yaml new file mode 100644 index 0000000..e21fe5b --- /dev/null +++ b/components/cameras/cameras.yaml @@ -0,0 +1,106 @@ +#binary_sensor: !include_dir_list ../cameras + +camera: +- platform: mjpeg + mjpeg_url: http://192.168.1.7:81/mjpg/Cam01 + name: Camera01 + username: !secret bi_username + password: !secret bi_password + authentication: basic + +- platform: mjpeg + mjpeg_url: http://192.168.1.7:81/mjpg/Cam02 + name: Camera02 + username: !secret bi_username + password: !secret bi_password + authentication: basic + +- platform: mjpeg + mjpeg_url: http://192.168.1.7:81/mjpg/Cam03 + name: Camera03 + username: !secret bi_username + password: !secret bi_password + authentication: basic + +- platform: mjpeg + mjpeg_url: http://192.168.1.7:81/mjpg/Cam04 + name: Camera04 + username: !secret bi_username + password: !secret bi_password + authentication: basic + +- platform: mjpeg + mjpeg_url: http://192.168.1.7:81/mjpg/Cam05 + name: Camera05 + username: !secret bi_username + password: !secret bi_password + authentication: basic + +- platform: mjpeg + mjpeg_url: http://192.168.1.7:81/mjpg/Cam06 + name: Camera06 + username: !secret bi_username + password: !secret bi_password + authentication: basic + +- platform: mjpeg + mjpeg_url: http://192.168.1.7:81/mjpg/Cam07 + name: Camera07 + username: !secret bi_username + password: !secret bi_password + authentication: basic + +- platform: mjpeg + mjpeg_url: http://192.168.1.7:81/mjpg/Cam08 + name: Camera08 + username: !secret bi_username + password: !secret bi_password + authentication: basic + +- platform: mjpeg + mjpeg_url: http://192.168.1.7:81/mjpg/Cam09 + name: Camera09 + username: !secret bi_username + password: !secret bi_password + authentication: basic + +- platform: mjpeg + mjpeg_url: http://192.168.1.7:81/mjpg/Cam10 + name: Camera10 + username: !secret bi_username + password: !secret bi_password + authentication: basic + +- platform: mjpeg + mjpeg_url: http://192.168.1.7:81/mjpg/Cam11 + name: Camera11 + username: !secret bi_username + password: !secret bi_password + authentication: basic + +- platform: mjpeg + mjpeg_url: http://192.168.1.7:81/mjpg/Cam12 + name: Camera12 + username: !secret bi_username + password: !secret bi_password + authentication: basic + +- platform: mjpeg + mjpeg_url: http://192.168.1.7:81/mjpg/All?/video.mjpg + name: AllCameras + username: !secret bi_username + password: !secret bi_password + authentication: basic + +- platform: mjpeg + mjpeg_url: http://192.168.1.7:81/mjpg/@All?/video.mjpg + name: CycleAllCameras + username: !secret bi_username + password: !secret bi_password + authentication: basic + +- platform: mjpeg + name: Octoprint + still_image_url: http://192.168.1.99/webcam/?action=snapshot + mjpeg_url: http://192.168.1.99/webcam/?action=stream + diff --git a/components/cameras/deepstack_cameras.yaml b/components/cameras/deepstack_cameras.yaml new file mode 100644 index 0000000..856d3ef --- /dev/null +++ b/components/cameras/deepstack_cameras.yaml @@ -0,0 +1,89 @@ +camera: +- platform: local_file + name: Cam01 Person + file_path: /config/snapshots/cam01_person/cam01_person_latest.jpg + +- platform: local_file + name: Cam02 Person + file_path: /config/snapshots/cam02_person/cam02_person_latest.jpg + +- platform: local_file + name: Cam03 Person + file_path: /config/snapshots/cam03_person/cam03_person_latest.jpg + +- platform: local_file + name: Cam04 Person + file_path: /config/snapshots/cam04_person/cam04_person_latest.jpg + +- platform: local_file + name: Cam04 Vehicle + file_path: /config/snapshots/cam04_vehicle/cam04_vehicle_latest.jpg + +- platform: local_file + name: Cam05 Person + file_path: /config/snapshots/cam05_person/cam05_person_latest.jpg + +- platform: local_file + name: Cam06 Person + file_path: /config/snapshots/cam06_person/cam06_person_latest.jpg + +- platform: local_file + name: Cam07 Person + file_path: /config/snapshots/cam07_person/cam07_person_latest.jpg + +- platform: local_file + name: Cam08 Person + file_path: /config/snapshots/cam08_person/cam08_person_latest.jpg + +- platform: local_file + name: Cam09 Person + file_path: /config/snapshots/cam09_person/cam09_person_latest.jpg + +- platform: local_file + name: WyzeCube Person + file_path: /config/snapshots/wyzecube_person/wyzecube_person_latest.jpg + +#- platform: generic +# name: Cam01 Snapshot +# still_image_url: >- +# http://192.168.1.32:81/image/Cam01?q=50&user=deepstack&pw=deepstack + +#- platform: generic +# name: Cam02 Snapshot +# still_image_url: >- +# http://192.168.1.32:81/image/Cam02?q=50&user=deepstack&pw=deepstack + +#- platform: generic +# name: Cam03 Snapshot +# still_image_url: >- +# http://192.168.1.32:81/image/Cam03?q=50&user=deepstack&pw=deepstack + +#- platform: generic +# name: Cam04 Snapshot +# still_image_url: >- +# http://192.168.1.32:81/image/Cam04?q=50&user=deepstack&pw=deepstack + +#- platform: generic +# name: Cam05 Snapshot +# still_image_url: >- +# http://192.168.1.32:81/image/Cam05?q=50&user=deepstack&pw=deepstack + +#- platform: generic +# name: Cam06 Snapshot +# still_image_url: >- +# http://192.168.1.32:81/image/Cam06?q=50&user=deepstack&pw=deepstack + +#- platform: generic +# name: Cam07 Snapshot +# still_image_url: >- +# http://192.168.1.32:81/image/Cam07?q=50&user=deepstack&pw=deepstack + +#- platform: generic +# name: nursery_camera Snapshot +# still_image_url: >- +# http://192.168.1.32:81/image/nursery_camera?q=50&user=deepstack&pw=deepstack + +#- platform: generic +# name: CamCar Snapshot +# still_image_url: >- +# http://192.168.1.32:81/image/Cam04?q=50&user=deepstack&pw=deepstack \ No newline at end of file diff --git a/components/cameras/octoprint_cameras.yaml b/components/cameras/octoprint_cameras.yaml new file mode 100644 index 0000000..f058770 --- /dev/null +++ b/components/cameras/octoprint_cameras.yaml @@ -0,0 +1,4 @@ +platform: mjpeg +name: Octoprint +still_image_url: http://192.168.1.14/webcam/?action=snapshot +mjpeg_url: http://192.168.1.14/webcam/?action=stream \ No newline at end of file diff --git a/components/covers/garage_door.yaml b/components/covers/garage_door.yaml new file mode 100644 index 0000000..ab6475f --- /dev/null +++ b/components/covers/garage_door.yaml @@ -0,0 +1,19 @@ +platform: template +covers: + garage_door: + unique_id: templatecover.garage_door + friendly_name: "Garage Door" + device_class: garage + value_template: "{{is_state('binary_sensor.garage_door','on')}}" + open_cover: + service: switch.turn_on + data: + entity_id: switch.shelly_garage_door + close_cover: + service: switch.turn_on + data: + entity_id: switch.shelly_garage_door + stop_cover: + service: switch.turn_on + data: + entity_id: switch.shelly_garage_door \ No newline at end of file diff --git a/components/device_trackers/bluetooth.yaml b/components/device_trackers/bluetooth.yaml new file mode 100644 index 0000000..fe03ac7 --- /dev/null +++ b/components/device_trackers/bluetooth.yaml @@ -0,0 +1 @@ +#platform: bluetooth_tracker \ No newline at end of file diff --git a/components/device_trackers/bluetooth_le.yaml b/components/device_trackers/bluetooth_le.yaml new file mode 100644 index 0000000..eb9acc3 --- /dev/null +++ b/components/device_trackers/bluetooth_le.yaml @@ -0,0 +1 @@ +#platform: bluetooth_le_tracker \ No newline at end of file diff --git a/components/fans/template_fans.yaml b/components/fans/template_fans.yaml new file mode 100644 index 0000000..c9b83b9 --- /dev/null +++ b/components/fans/template_fans.yaml @@ -0,0 +1,23 @@ +platform: template +fans: + utility_room_vent: + unique_id: template_fan.utility_room_vent + friendly_name: "Utility Room Vent" + value_template: "{{ states('switch.utility_room_vent_switch') }}" + turn_on: + service: switch.turn_on + entity_id: switch.utility_room_vent_switch + turn_off: + service: switch.turn_off + entity_id: switch.utility_room_vent_switch + + bathroom_vent: + unique_id: templatefan.bathroom_vent + friendly_name: "Bathroom Vent" + value_template: "{{ states('switch.bathroom_vent_switch') }}" + turn_on: + service: switch.turn_on + entity_id: switch.bathroom_vent_switch + turn_off: + service: switch.turn_off + entity_id: switch.bathroom_vent_switch \ No newline at end of file diff --git a/components/input_booleans/README.md b/components/input_booleans/README.md new file mode 100644 index 0000000..a5912dc --- /dev/null +++ b/components/input_booleans/README.md @@ -0,0 +1,61 @@ +# Input booleans + +Component: [input boolean](https://home-assistant.io/components/input_boolean/) + +Some of these are used to enable and disable automations, some are used to track whether something is in a particular state (and then trigger automations). + +## Adults + +A simple toggle for when the adults are away, since we'll want different things to happen then. + +## Alarm + +Now I'm using the manual alarm control panel, I don't need this any more. + +## All + +A simple toggle for when we're all away. This is mostly for things like lighting control, for now. It will be replaced by `input_boolean.home_occupied` + +## Bedtime + +If it's bedtime then it's time to turn off lights. If it's no longer bedtime, and it's still dark, it's time to turn some on. + +## Guest mode + +When we've got guests around certain behaviours need to be different, this is a manual toggle to control that. + +## Holiday mode + +If we're all away then some automations we'll simply not want running (and others that we wouldn't want running when we're home we would). This is to control those. + +## Lighting + +Just in case we ever want to disable the lighting automations, this will control that. + +## Rooms + +* There's a toggle to indicate that the living room lights were turned on automatically +* Each room has one to indicate whether it's occupied + +## Notifications + +To track whether it's a work/school/whatever day for people and nag them about key things. + +Also controls whether to notify about the train status. + +## People + +Various people related booleans + +### Awake + +These are the indicators of whether people are (probably) asleep or awake, or in bed. These feed in to various automations. + +### Home + +Simple binary home/away indicators for people, plus one for the house as a whole. + +### Travelling + +These are used to indicate whether people are on an extended trip. These feed in to the Holiday mode, and will eventually feed in to things like chosing which notifiers get used, and other things. + diff --git a/components/input_booleans/alarm_mode.yaml b/components/input_booleans/alarm_mode.yaml new file mode 100644 index 0000000..8868c8a --- /dev/null +++ b/components/input_booleans/alarm_mode.yaml @@ -0,0 +1,2 @@ +name: Alarm mode +icon: mdi:shield-home diff --git a/components/input_booleans/allow_announcements.yaml b/components/input_booleans/allow_announcements.yaml new file mode 100644 index 0000000..af41ae8 --- /dev/null +++ b/components/input_booleans/allow_announcements.yaml @@ -0,0 +1,2 @@ +name: Allow Announcements +icon: mdi:bullhorn \ No newline at end of file diff --git a/components/input_booleans/allow_fan.yaml b/components/input_booleans/allow_fan.yaml new file mode 100644 index 0000000..2179e65 --- /dev/null +++ b/components/input_booleans/allow_fan.yaml @@ -0,0 +1,2 @@ +name: Allow Fan +icon: mdi:fan diff --git a/components/input_booleans/announce_bedtime.yaml b/components/input_booleans/announce_bedtime.yaml new file mode 100644 index 0000000..d4f911b --- /dev/null +++ b/components/input_booleans/announce_bedtime.yaml @@ -0,0 +1,2 @@ +name: Announce Bedtime +icon: mdi:bullhorn \ No newline at end of file diff --git a/components/input_booleans/asleep.yaml b/components/input_booleans/asleep.yaml new file mode 100644 index 0000000..87c609f --- /dev/null +++ b/components/input_booleans/asleep.yaml @@ -0,0 +1,2 @@ +name: Adult(s) Asleep +icon: mdi:bed diff --git a/components/input_booleans/bedtime.yaml b/components/input_booleans/bedtime.yaml new file mode 100644 index 0000000..f578f8a --- /dev/null +++ b/components/input_booleans/bedtime.yaml @@ -0,0 +1,2 @@ +name: Bedtime for Adults +icon: mdi:bed diff --git a/components/input_booleans/brightness_automations.yaml b/components/input_booleans/brightness_automations.yaml new file mode 100644 index 0000000..4525e6a --- /dev/null +++ b/components/input_booleans/brightness_automations.yaml @@ -0,0 +1,2 @@ +name: Enable Brightness Automations +icon: mdi:brightness-auto diff --git a/components/input_booleans/car_home.yaml b/components/input_booleans/car_home.yaml new file mode 100644 index 0000000..dc69a50 --- /dev/null +++ b/components/input_booleans/car_home.yaml @@ -0,0 +1,2 @@ +name: Car home +icon: mdi:car diff --git a/components/input_booleans/cleaning_house.yaml b/components/input_booleans/cleaning_house.yaml new file mode 100644 index 0000000..edb6515 --- /dev/null +++ b/components/input_booleans/cleaning_house.yaml @@ -0,0 +1,2 @@ +name: Cleaning House +icon: mdi:spray-bottle \ No newline at end of file diff --git a/components/input_booleans/cycle_cam14.yaml b/components/input_booleans/cycle_cam14.yaml new file mode 100644 index 0000000..78d8956 --- /dev/null +++ b/components/input_booleans/cycle_cam14.yaml @@ -0,0 +1,2 @@ +name: Cycle Cam14 +icon: mdi:cctv \ No newline at end of file diff --git a/components/input_booleans/debug_recordings.yaml b/components/input_booleans/debug_recordings.yaml new file mode 100644 index 0000000..3a3f0d2 --- /dev/null +++ b/components/input_booleans/debug_recordings.yaml @@ -0,0 +1,2 @@ +name: Debug Recordings +icon: mdi:camera-metering-center \ No newline at end of file diff --git a/components/input_booleans/debug_snapshots.yaml b/components/input_booleans/debug_snapshots.yaml new file mode 100644 index 0000000..452641d --- /dev/null +++ b/components/input_booleans/debug_snapshots.yaml @@ -0,0 +1,2 @@ +name: Debug Snapshots +icon: mdi:camera-metering-center \ No newline at end of file diff --git a/components/input_booleans/doorbell.yaml b/components/input_booleans/doorbell.yaml new file mode 100644 index 0000000..ece237e --- /dev/null +++ b/components/input_booleans/doorbell.yaml @@ -0,0 +1,2 @@ +name: Doorbell +icon: mdi:doorbell \ No newline at end of file diff --git a/components/input_booleans/floorplan/floorplan_show_ground_level_sensors.yaml b/components/input_booleans/floorplan/floorplan_show_ground_level_sensors.yaml new file mode 100644 index 0000000..968fd03 --- /dev/null +++ b/components/input_booleans/floorplan/floorplan_show_ground_level_sensors.yaml @@ -0,0 +1,2 @@ +name: Show Ground Level Sensors +icon: mdi:alpha-g-circle \ No newline at end of file diff --git a/components/input_booleans/guest_mode.yaml b/components/input_booleans/guest_mode.yaml new file mode 100644 index 0000000..d46744d --- /dev/null +++ b/components/input_booleans/guest_mode.yaml @@ -0,0 +1,2 @@ +name: Guest mode +icon: mdi:account-multiple-plus diff --git a/components/input_booleans/home_occupied.yaml b/components/input_booleans/home_occupied.yaml new file mode 100644 index 0000000..1f913d5 --- /dev/null +++ b/components/input_booleans/home_occupied.yaml @@ -0,0 +1,2 @@ +name: Home occupied +icon: mdi:home-variant-outline \ No newline at end of file diff --git a/components/input_booleans/incoming_mail.yaml b/components/input_booleans/incoming_mail.yaml new file mode 100644 index 0000000..72781fd --- /dev/null +++ b/components/input_booleans/incoming_mail.yaml @@ -0,0 +1,2 @@ +name: Incoming Mail +icon: mdi:mailbox diff --git a/components/input_booleans/indoor_camera_lock.yaml b/components/input_booleans/indoor_camera_lock.yaml new file mode 100644 index 0000000..8c2bb07 --- /dev/null +++ b/components/input_booleans/indoor_camera_lock.yaml @@ -0,0 +1,2 @@ +name: Indoor Camera Lock +icon: mdi:lock diff --git a/components/input_booleans/indoor_recordings.yaml b/components/input_booleans/indoor_recordings.yaml new file mode 100644 index 0000000..7431a0a --- /dev/null +++ b/components/input_booleans/indoor_recordings.yaml @@ -0,0 +1,2 @@ +name: Indoor Recordings +icon: mdi:camera-metering-center \ No newline at end of file diff --git a/components/input_booleans/indoor_snapshots.yaml b/components/input_booleans/indoor_snapshots.yaml new file mode 100644 index 0000000..2d90019 --- /dev/null +++ b/components/input_booleans/indoor_snapshots.yaml @@ -0,0 +1,2 @@ +name: Indoor Snapshots +icon: mdi:camera-metering-center \ No newline at end of file diff --git a/components/input_booleans/kids_asleep.yaml b/components/input_booleans/kids_asleep.yaml new file mode 100644 index 0000000..5c6e277 --- /dev/null +++ b/components/input_booleans/kids_asleep.yaml @@ -0,0 +1,2 @@ +name: Kids Asleep +icon: mdi:bunk-bed \ No newline at end of file diff --git a/components/input_booleans/kids_bedtime.yaml b/components/input_booleans/kids_bedtime.yaml new file mode 100644 index 0000000..d7b29ff --- /dev/null +++ b/components/input_booleans/kids_bedtime.yaml @@ -0,0 +1,2 @@ +name: Bedtime for Kids +icon: mdi:bunk-bed \ No newline at end of file diff --git a/components/input_booleans/lighting_automations.yaml b/components/input_booleans/lighting_automations.yaml new file mode 100644 index 0000000..8fb4bff --- /dev/null +++ b/components/input_booleans/lighting_automations.yaml @@ -0,0 +1,2 @@ +name: Enable Lighting Automations +icon: mdi:light-switch diff --git a/components/input_booleans/lights_off_manually.yaml b/components/input_booleans/lights_off_manually.yaml new file mode 100644 index 0000000..45ab1c0 --- /dev/null +++ b/components/input_booleans/lights_off_manually.yaml @@ -0,0 +1,2 @@ +name: Lights Off Manually +icon: mdi:light-switch-off diff --git a/components/input_booleans/loop_livingcolors.yaml b/components/input_booleans/loop_livingcolors.yaml new file mode 100644 index 0000000..64d0f81 --- /dev/null +++ b/components/input_booleans/loop_livingcolors.yaml @@ -0,0 +1,3 @@ +name: Loop LivingColors +initial: off +icon: mdi:spotlight \ No newline at end of file diff --git a/components/input_booleans/lovelace/lovelace_bridget_more.yaml b/components/input_booleans/lovelace/lovelace_bridget_more.yaml new file mode 100644 index 0000000..677c7ea --- /dev/null +++ b/components/input_booleans/lovelace/lovelace_bridget_more.yaml @@ -0,0 +1,2 @@ +name: Bridget More +icon: mdi:alpha-b-circle \ No newline at end of file diff --git a/components/input_booleans/lovelace/lovelace_clint_more.yaml b/components/input_booleans/lovelace/lovelace_clint_more.yaml new file mode 100644 index 0000000..5e9d762 --- /dev/null +++ b/components/input_booleans/lovelace/lovelace_clint_more.yaml @@ -0,0 +1,2 @@ +name: Clint More +icon: mdi:alpha-c-circle diff --git a/components/input_booleans/lovelace/lovelace_dreamtablet_more.yaml b/components/input_booleans/lovelace/lovelace_dreamtablet_more.yaml new file mode 100644 index 0000000..37a7195 --- /dev/null +++ b/components/input_booleans/lovelace/lovelace_dreamtablet_more.yaml @@ -0,0 +1,2 @@ +name: More +icon: mdi:laptop \ No newline at end of file diff --git a/components/input_booleans/lovelace/lovelace_ebin_more.yaml b/components/input_booleans/lovelace/lovelace_ebin_more.yaml new file mode 100644 index 0000000..47b4a79 --- /dev/null +++ b/components/input_booleans/lovelace/lovelace_ebin_more.yaml @@ -0,0 +1,2 @@ +name: Ebin More +icon: mdi:alpha-e-circle-outline diff --git a/components/input_booleans/lovelace/lovelace_emmett_more.yaml b/components/input_booleans/lovelace/lovelace_emmett_more.yaml new file mode 100644 index 0000000..efd4627 --- /dev/null +++ b/components/input_booleans/lovelace/lovelace_emmett_more.yaml @@ -0,0 +1,2 @@ +name: Emmett More +icon: mdi:alpha-e-circle diff --git a/components/input_booleans/lovelace/lovelace_front_room_roku_keyboard.yaml b/components/input_booleans/lovelace/lovelace_front_room_roku_keyboard.yaml new file mode 100644 index 0000000..7e773d1 --- /dev/null +++ b/components/input_booleans/lovelace/lovelace_front_room_roku_keyboard.yaml @@ -0,0 +1,2 @@ +name: Front Room Roku Keyboard +icon: mdi:keyboard diff --git a/components/input_booleans/lovelace/lovelace_great_room_roku_keyboard.yaml b/components/input_booleans/lovelace/lovelace_great_room_roku_keyboard.yaml new file mode 100644 index 0000000..78b98d6 --- /dev/null +++ b/components/input_booleans/lovelace/lovelace_great_room_roku_keyboard.yaml @@ -0,0 +1,2 @@ +name: Great Room Roku Keyboard +icon: mdi:keyboard diff --git a/components/input_booleans/lovelace/lovelace_inside_cameras.yaml b/components/input_booleans/lovelace/lovelace_inside_cameras.yaml new file mode 100644 index 0000000..fa4844f --- /dev/null +++ b/components/input_booleans/lovelace/lovelace_inside_cameras.yaml @@ -0,0 +1,2 @@ +name: Inside Cameras +icon: mdi:home-circle diff --git a/components/input_booleans/lovelace/lovelace_kids_bedtime_more.yaml b/components/input_booleans/lovelace/lovelace_kids_bedtime_more.yaml new file mode 100644 index 0000000..9cf9ef9 --- /dev/null +++ b/components/input_booleans/lovelace/lovelace_kids_bedtime_more.yaml @@ -0,0 +1,2 @@ +name: Kids Bedtime More +icon: mdi:bunk-bed \ No newline at end of file diff --git a/components/input_booleans/lovelace/lovelace_kristy_more.yaml b/components/input_booleans/lovelace/lovelace_kristy_more.yaml new file mode 100644 index 0000000..6d1dd2c --- /dev/null +++ b/components/input_booleans/lovelace/lovelace_kristy_more.yaml @@ -0,0 +1,2 @@ +name: Kristy More +icon: mdi:alpha-k-circle-outline diff --git a/components/input_booleans/lovelace/lovelace_light_levels_more.yaml b/components/input_booleans/lovelace/lovelace_light_levels_more.yaml new file mode 100644 index 0000000..78bcee1 --- /dev/null +++ b/components/input_booleans/lovelace/lovelace_light_levels_more.yaml @@ -0,0 +1 @@ +name: Lovelace Light Levels More diff --git a/components/input_booleans/lovelace/lovelace_marshall_more.yaml b/components/input_booleans/lovelace/lovelace_marshall_more.yaml new file mode 100644 index 0000000..5800427 --- /dev/null +++ b/components/input_booleans/lovelace/lovelace_marshall_more.yaml @@ -0,0 +1,2 @@ +name: Marshall More +icon: mdi:alpha-m-circle-outline diff --git a/components/input_booleans/lovelace/lovelace_outside_cameras.yaml b/components/input_booleans/lovelace/lovelace_outside_cameras.yaml new file mode 100644 index 0000000..bd30918 --- /dev/null +++ b/components/input_booleans/lovelace/lovelace_outside_cameras.yaml @@ -0,0 +1,2 @@ +name: Outside Cameras +icon: mdi:home-circle-outline diff --git a/components/input_booleans/lovelace/lovelace_pixel_4_more.yaml b/components/input_booleans/lovelace/lovelace_pixel_4_more.yaml new file mode 100644 index 0000000..22e0e8f --- /dev/null +++ b/components/input_booleans/lovelace/lovelace_pixel_4_more.yaml @@ -0,0 +1,2 @@ +name: More +icon: mdi:cellphone \ No newline at end of file diff --git a/components/input_booleans/lovelace/lovelace_show_sprinklers.yaml b/components/input_booleans/lovelace/lovelace_show_sprinklers.yaml new file mode 100644 index 0000000..7d8088a --- /dev/null +++ b/components/input_booleans/lovelace/lovelace_show_sprinklers.yaml @@ -0,0 +1,2 @@ +name: Show Sprinklers +icon: mdi:sprinkler diff --git a/components/input_booleans/lovelace/lovelace_show_stock.yaml b/components/input_booleans/lovelace/lovelace_show_stock.yaml new file mode 100644 index 0000000..51d65c7 --- /dev/null +++ b/components/input_booleans/lovelace/lovelace_show_stock.yaml @@ -0,0 +1,2 @@ +name: Lovelace Show Stock +icon: mdi:cart diff --git a/components/input_booleans/lovelace/lovelace_tess_more.yaml b/components/input_booleans/lovelace/lovelace_tess_more.yaml new file mode 100644 index 0000000..a8f167d --- /dev/null +++ b/components/input_booleans/lovelace/lovelace_tess_more.yaml @@ -0,0 +1,2 @@ +name: Tess More +icon: mdi:alpha-t-circle-outline diff --git a/components/input_booleans/lovelace/lovelace_whats_home_more.yaml b/components/input_booleans/lovelace/lovelace_whats_home_more.yaml new file mode 100644 index 0000000..df7f47b --- /dev/null +++ b/components/input_booleans/lovelace/lovelace_whats_home_more.yaml @@ -0,0 +1,2 @@ +name: Whats Home More +icon: mdi:account-group \ No newline at end of file diff --git a/components/input_booleans/mail_checked.yaml b/components/input_booleans/mail_checked.yaml new file mode 100644 index 0000000..ea58fc6 --- /dev/null +++ b/components/input_booleans/mail_checked.yaml @@ -0,0 +1,2 @@ +name: Mail Checked +icon: mdi:mailbox-open diff --git a/components/input_booleans/out_of_bed_alert.yaml b/components/input_booleans/out_of_bed_alert.yaml new file mode 100644 index 0000000..4af5b2e --- /dev/null +++ b/components/input_booleans/out_of_bed_alert.yaml @@ -0,0 +1,2 @@ +name: Out of Bed Alert +icon: mdi:bed \ No newline at end of file diff --git a/components/input_booleans/outdoor_camera_lock.yaml b/components/input_booleans/outdoor_camera_lock.yaml new file mode 100644 index 0000000..910d905 --- /dev/null +++ b/components/input_booleans/outdoor_camera_lock.yaml @@ -0,0 +1,2 @@ +name: Outdoor Camera Lock +icon: mdi:lock diff --git a/components/input_booleans/outdoor_recordings.yaml b/components/input_booleans/outdoor_recordings.yaml new file mode 100644 index 0000000..050089b --- /dev/null +++ b/components/input_booleans/outdoor_recordings.yaml @@ -0,0 +1,2 @@ +name: Outdoor Recordings +icon: mdi:camera-metering-center \ No newline at end of file diff --git a/components/input_booleans/outdoor_snapshots.yaml b/components/input_booleans/outdoor_snapshots.yaml new file mode 100644 index 0000000..8133cde --- /dev/null +++ b/components/input_booleans/outdoor_snapshots.yaml @@ -0,0 +1,2 @@ +name: Outdoor Snapshots +icon: mdi:camera-metering-center \ No newline at end of file diff --git a/components/input_booleans/people/adults_away.yaml b/components/input_booleans/people/adults_away.yaml new file mode 100644 index 0000000..e54ced7 --- /dev/null +++ b/components/input_booleans/people/adults_away.yaml @@ -0,0 +1,2 @@ +name: Adults are away +icon: mdi:account-multiple \ No newline at end of file diff --git a/components/input_booleans/people/all_away.yaml b/components/input_booleans/people/all_away.yaml new file mode 100644 index 0000000..d14592c --- /dev/null +++ b/components/input_booleans/people/all_away.yaml @@ -0,0 +1 @@ +name: Everybody is away \ No newline at end of file diff --git a/components/input_booleans/people/bridget/bridget_at_work.yaml b/components/input_booleans/people/bridget/bridget_at_work.yaml new file mode 100644 index 0000000..f0c3027 --- /dev/null +++ b/components/input_booleans/people/bridget/bridget_at_work.yaml @@ -0,0 +1,2 @@ +name: Bridget At Work +icon: mdi:briefcase diff --git a/components/input_booleans/people/bridget/bridget_home.yaml b/components/input_booleans/people/bridget/bridget_home.yaml new file mode 100644 index 0000000..3c80feb --- /dev/null +++ b/components/input_booleans/people/bridget/bridget_home.yaml @@ -0,0 +1,2 @@ +name: Bridget Home +icon: mdi:human-child diff --git a/components/input_booleans/people/bridget/bridget_in_bed.yaml b/components/input_booleans/people/bridget/bridget_in_bed.yaml new file mode 100644 index 0000000..23f5a6b --- /dev/null +++ b/components/input_booleans/people/bridget/bridget_in_bed.yaml @@ -0,0 +1,2 @@ +name: Bridget In Bed +icon: mdi:bed diff --git a/components/input_booleans/people/bridget/bridget_is_awake.yaml b/components/input_booleans/people/bridget/bridget_is_awake.yaml new file mode 100644 index 0000000..c116f3c --- /dev/null +++ b/components/input_booleans/people/bridget/bridget_is_awake.yaml @@ -0,0 +1,2 @@ +name: Bridget Is Awake +icon: mdi:alarm diff --git a/components/input_booleans/people/bridget/bridget_tablet_home.yaml b/components/input_booleans/people/bridget/bridget_tablet_home.yaml new file mode 100644 index 0000000..1a76b3a --- /dev/null +++ b/components/input_booleans/people/bridget/bridget_tablet_home.yaml @@ -0,0 +1,2 @@ +name: Bridget Tablet Home +icon: mdi:tablet diff --git a/components/input_booleans/people/bridget/bridget_travelling.yaml b/components/input_booleans/people/bridget/bridget_travelling.yaml new file mode 100644 index 0000000..44087e7 --- /dev/null +++ b/components/input_booleans/people/bridget/bridget_travelling.yaml @@ -0,0 +1,2 @@ +name: Bridget Travelling +icon: mdi:road diff --git a/components/input_booleans/people/clint/clint_home.yaml b/components/input_booleans/people/clint/clint_home.yaml new file mode 100644 index 0000000..d5b5642 --- /dev/null +++ b/components/input_booleans/people/clint/clint_home.yaml @@ -0,0 +1,2 @@ +name: Clint Home +icon: mdi:human-male \ No newline at end of file diff --git a/components/input_booleans/people/clint/clint_home_alone.yaml b/components/input_booleans/people/clint/clint_home_alone.yaml new file mode 100644 index 0000000..952ebba --- /dev/null +++ b/components/input_booleans/people/clint/clint_home_alone.yaml @@ -0,0 +1,2 @@ +name: Clint Home Alone +icon: mdi:human-male \ No newline at end of file diff --git a/components/input_booleans/people/clint/clint_in_bed.yaml b/components/input_booleans/people/clint/clint_in_bed.yaml new file mode 100644 index 0000000..4b197ac --- /dev/null +++ b/components/input_booleans/people/clint/clint_in_bed.yaml @@ -0,0 +1,2 @@ +name: Clint In Bed +icon: mdi:bed diff --git a/components/input_booleans/people/clint/clint_is_awake.yaml b/components/input_booleans/people/clint/clint_is_awake.yaml new file mode 100644 index 0000000..314016c --- /dev/null +++ b/components/input_booleans/people/clint/clint_is_awake.yaml @@ -0,0 +1,2 @@ +name: Clint Is Awake +icon: mdi:alarm diff --git a/components/input_booleans/people/clint/clint_needs_am_meds.yaml b/components/input_booleans/people/clint/clint_needs_am_meds.yaml new file mode 100644 index 0000000..0abecc8 --- /dev/null +++ b/components/input_booleans/people/clint/clint_needs_am_meds.yaml @@ -0,0 +1,2 @@ +name: Clint Needs AM Meds +icon: mdi:pill \ No newline at end of file diff --git a/components/input_booleans/people/clint/clint_needs_meds.yaml b/components/input_booleans/people/clint/clint_needs_meds.yaml new file mode 100644 index 0000000..6fb2ca3 --- /dev/null +++ b/components/input_booleans/people/clint/clint_needs_meds.yaml @@ -0,0 +1,2 @@ +name: Clint Needs Meds +icon: mdi:pill \ No newline at end of file diff --git a/components/input_booleans/people/clint/clint_needs_pm_meds.yaml b/components/input_booleans/people/clint/clint_needs_pm_meds.yaml new file mode 100644 index 0000000..d65f4f2 --- /dev/null +++ b/components/input_booleans/people/clint/clint_needs_pm_meds.yaml @@ -0,0 +1,2 @@ +name: Clint Needs AP Meds +icon: mdi:pill \ No newline at end of file diff --git a/components/input_booleans/people/clint/clint_tablet_charging.yaml b/components/input_booleans/people/clint/clint_tablet_charging.yaml new file mode 100644 index 0000000..550c7b3 --- /dev/null +++ b/components/input_booleans/people/clint/clint_tablet_charging.yaml @@ -0,0 +1,2 @@ +name: Clint Tablet Charging +icon: mdi:battery-charging diff --git a/components/input_booleans/people/clint/clint_tablet_home.yaml b/components/input_booleans/people/clint/clint_tablet_home.yaml new file mode 100644 index 0000000..dd21ff8 --- /dev/null +++ b/components/input_booleans/people/clint/clint_tablet_home.yaml @@ -0,0 +1,2 @@ +name: Clint Tablet Home +icon: mdi:tablet diff --git a/components/input_booleans/people/clint/clint_travelling.yaml b/components/input_booleans/people/clint/clint_travelling.yaml new file mode 100644 index 0000000..6751e7c --- /dev/null +++ b/components/input_booleans/people/clint/clint_travelling.yaml @@ -0,0 +1,2 @@ +name: Clint Travelling +icon: mdi:airplane diff --git a/components/input_booleans/people/clint/clint_work_from_home.yaml b/components/input_booleans/people/clint/clint_work_from_home.yaml new file mode 100644 index 0000000..4e7aa78 --- /dev/null +++ b/components/input_booleans/people/clint/clint_work_from_home.yaml @@ -0,0 +1,2 @@ +name: Clint Work From Home +icon: mdi:vpn diff --git a/components/input_booleans/people/clint/notify_clint_work.yaml b/components/input_booleans/people/clint/notify_clint_work.yaml new file mode 100644 index 0000000..fad3b25 --- /dev/null +++ b/components/input_booleans/people/clint/notify_clint_work.yaml @@ -0,0 +1 @@ +name: Notify Clint Work diff --git a/components/input_booleans/people/ebin/ebin_at_work.yaml b/components/input_booleans/people/ebin/ebin_at_work.yaml new file mode 100644 index 0000000..3ac8bb6 --- /dev/null +++ b/components/input_booleans/people/ebin/ebin_at_work.yaml @@ -0,0 +1,2 @@ +name: Ebin At Work +icon: mdi:briefcase diff --git a/components/input_booleans/people/ebin/ebin_home.yaml b/components/input_booleans/people/ebin/ebin_home.yaml new file mode 100644 index 0000000..1bd23a0 --- /dev/null +++ b/components/input_booleans/people/ebin/ebin_home.yaml @@ -0,0 +1,2 @@ +name: Ebin Home +icon: mdi:human-child diff --git a/components/input_booleans/people/ebin/ebin_in_bed.yaml b/components/input_booleans/people/ebin/ebin_in_bed.yaml new file mode 100644 index 0000000..1891a83 --- /dev/null +++ b/components/input_booleans/people/ebin/ebin_in_bed.yaml @@ -0,0 +1,2 @@ +name: Ebin In Bed +icon: mdi:bed diff --git a/components/input_booleans/people/ebin/ebin_is_awake.yaml b/components/input_booleans/people/ebin/ebin_is_awake.yaml new file mode 100644 index 0000000..4eaa1dc --- /dev/null +++ b/components/input_booleans/people/ebin/ebin_is_awake.yaml @@ -0,0 +1,2 @@ +name: Ebin Is Awake +icon: mdi:alarm diff --git a/components/input_booleans/people/ebin/ebin_travelling.yaml b/components/input_booleans/people/ebin/ebin_travelling.yaml new file mode 100644 index 0000000..b7f57e0 --- /dev/null +++ b/components/input_booleans/people/ebin/ebin_travelling.yaml @@ -0,0 +1,2 @@ +name: Ebin Travelling +icon: mdi:road diff --git a/components/input_booleans/people/emmett/emmett_at_work.yaml b/components/input_booleans/people/emmett/emmett_at_work.yaml new file mode 100644 index 0000000..c58967f --- /dev/null +++ b/components/input_booleans/people/emmett/emmett_at_work.yaml @@ -0,0 +1,2 @@ +name: Emmett At Work +icon: mdi:briefcase diff --git a/components/input_booleans/people/emmett/emmett_home.yaml b/components/input_booleans/people/emmett/emmett_home.yaml new file mode 100644 index 0000000..4b5a13b --- /dev/null +++ b/components/input_booleans/people/emmett/emmett_home.yaml @@ -0,0 +1,2 @@ +name: Emmett Home +icon: mdi:human-child diff --git a/components/input_booleans/people/emmett/emmett_in_bed.yaml b/components/input_booleans/people/emmett/emmett_in_bed.yaml new file mode 100644 index 0000000..6adfe2b --- /dev/null +++ b/components/input_booleans/people/emmett/emmett_in_bed.yaml @@ -0,0 +1,2 @@ +name: Emmett In Bed +icon: mdi:bed diff --git a/components/input_booleans/people/emmett/emmett_is_awake.yaml b/components/input_booleans/people/emmett/emmett_is_awake.yaml new file mode 100644 index 0000000..27aca8c --- /dev/null +++ b/components/input_booleans/people/emmett/emmett_is_awake.yaml @@ -0,0 +1,2 @@ +name: Emmett Is Awake +icon: mdi:alarm diff --git a/components/input_booleans/people/emmett/emmett_tablet_home.yaml b/components/input_booleans/people/emmett/emmett_tablet_home.yaml new file mode 100644 index 0000000..1d1687c --- /dev/null +++ b/components/input_booleans/people/emmett/emmett_tablet_home.yaml @@ -0,0 +1,2 @@ +name: Emmett Tablet Home +icon: mdi:tablet diff --git a/components/input_booleans/people/emmett/emmett_travelling.yaml b/components/input_booleans/people/emmett/emmett_travelling.yaml new file mode 100644 index 0000000..9872148 --- /dev/null +++ b/components/input_booleans/people/emmett/emmett_travelling.yaml @@ -0,0 +1,2 @@ +name: Emmett Travelling +icon: mdi:road \ No newline at end of file diff --git a/components/input_booleans/people/guest/guest_at_work.yaml b/components/input_booleans/people/guest/guest_at_work.yaml new file mode 100644 index 0000000..baf0efb --- /dev/null +++ b/components/input_booleans/people/guest/guest_at_work.yaml @@ -0,0 +1,2 @@ +name: Guest at work +icon: mdi:briefcase diff --git a/components/input_booleans/people/guest/guest_home.yaml b/components/input_booleans/people/guest/guest_home.yaml new file mode 100644 index 0000000..3565863 --- /dev/null +++ b/components/input_booleans/people/guest/guest_home.yaml @@ -0,0 +1,2 @@ +name: Guest home +icon: mdi:human-male diff --git a/components/input_booleans/people/guest/guest_in_bed.yaml b/components/input_booleans/people/guest/guest_in_bed.yaml new file mode 100644 index 0000000..9b845fb --- /dev/null +++ b/components/input_booleans/people/guest/guest_in_bed.yaml @@ -0,0 +1,2 @@ +name: Guest in bed +icon: mdi:bed diff --git a/components/input_booleans/people/guest/guest_is_awake.yaml b/components/input_booleans/people/guest/guest_is_awake.yaml new file mode 100644 index 0000000..3884fb5 --- /dev/null +++ b/components/input_booleans/people/guest/guest_is_awake.yaml @@ -0,0 +1,2 @@ +name: Guest is awake +icon: mdi:alarm diff --git a/components/input_booleans/people/kids_away.yaml b/components/input_booleans/people/kids_away.yaml new file mode 100644 index 0000000..b5302bb --- /dev/null +++ b/components/input_booleans/people/kids_away.yaml @@ -0,0 +1 @@ +name: Kids are away \ No newline at end of file diff --git a/components/input_booleans/people/kristy/chickadee_is_waiting.yaml b/components/input_booleans/people/kristy/chickadee_is_waiting.yaml new file mode 100644 index 0000000..9448793 --- /dev/null +++ b/components/input_booleans/people/kristy/chickadee_is_waiting.yaml @@ -0,0 +1,2 @@ +name: Chickadee is Waiting +icon: mdi:alarm diff --git a/components/input_booleans/people/kristy/kristy_at_work.yaml b/components/input_booleans/people/kristy/kristy_at_work.yaml new file mode 100644 index 0000000..f093e38 --- /dev/null +++ b/components/input_booleans/people/kristy/kristy_at_work.yaml @@ -0,0 +1,2 @@ +name: Kristy At Work +icon: mdi:briefcase diff --git a/components/input_booleans/people/kristy/kristy_home.yaml b/components/input_booleans/people/kristy/kristy_home.yaml new file mode 100644 index 0000000..484f3d3 --- /dev/null +++ b/components/input_booleans/people/kristy/kristy_home.yaml @@ -0,0 +1,2 @@ +name: Kristy Home +icon: mdi:human-female diff --git a/components/input_booleans/people/kristy/kristy_in_bed.yaml b/components/input_booleans/people/kristy/kristy_in_bed.yaml new file mode 100644 index 0000000..42ece73 --- /dev/null +++ b/components/input_booleans/people/kristy/kristy_in_bed.yaml @@ -0,0 +1,2 @@ +name: Kristy In Bed +icon: mdi:bed diff --git a/components/input_booleans/people/kristy/kristy_is_awake.yaml b/components/input_booleans/people/kristy/kristy_is_awake.yaml new file mode 100644 index 0000000..603aed8 --- /dev/null +++ b/components/input_booleans/people/kristy/kristy_is_awake.yaml @@ -0,0 +1,2 @@ +name: Kristy Is Awake +icon: mdi:alarm diff --git a/components/input_booleans/people/kristy/kristy_travelling.yaml b/components/input_booleans/people/kristy/kristy_travelling.yaml new file mode 100644 index 0000000..9ef5c13 --- /dev/null +++ b/components/input_booleans/people/kristy/kristy_travelling.yaml @@ -0,0 +1,2 @@ +name: Kristy Travelling +icon: mdi:road diff --git a/components/input_booleans/people/marshall/marshall_at_work.yaml b/components/input_booleans/people/marshall/marshall_at_work.yaml new file mode 100644 index 0000000..1a70f1b --- /dev/null +++ b/components/input_booleans/people/marshall/marshall_at_work.yaml @@ -0,0 +1,2 @@ +name: Marshall At Work +icon: mdi:briefcase diff --git a/components/input_booleans/people/marshall/marshall_home.yaml b/components/input_booleans/people/marshall/marshall_home.yaml new file mode 100644 index 0000000..3a7a97c --- /dev/null +++ b/components/input_booleans/people/marshall/marshall_home.yaml @@ -0,0 +1,2 @@ +name: Marshall Home +icon: mdi:human-male diff --git a/components/input_booleans/people/marshall/marshall_in_bed.yaml b/components/input_booleans/people/marshall/marshall_in_bed.yaml new file mode 100644 index 0000000..d963822 --- /dev/null +++ b/components/input_booleans/people/marshall/marshall_in_bed.yaml @@ -0,0 +1,2 @@ +name: Marshall In Bed +icon: mdi:bed diff --git a/components/input_booleans/people/marshall/marshall_is_awake.yaml b/components/input_booleans/people/marshall/marshall_is_awake.yaml new file mode 100644 index 0000000..1c94b85 --- /dev/null +++ b/components/input_booleans/people/marshall/marshall_is_awake.yaml @@ -0,0 +1,2 @@ +name: Marshall Is Awake +icon: mdi:alarm diff --git a/components/input_booleans/people/marshall/marshall_travelling.yaml b/components/input_booleans/people/marshall/marshall_travelling.yaml new file mode 100644 index 0000000..e1ac515 --- /dev/null +++ b/components/input_booleans/people/marshall/marshall_travelling.yaml @@ -0,0 +1,2 @@ +name: Marshall Travelling +icon: mdi:road diff --git a/components/input_booleans/people/teens_away.yaml b/components/input_booleans/people/teens_away.yaml new file mode 100644 index 0000000..1ba6c8f --- /dev/null +++ b/components/input_booleans/people/teens_away.yaml @@ -0,0 +1 @@ +name: Teens are away \ No newline at end of file diff --git a/components/input_booleans/people/tess/tess_at_work.yaml b/components/input_booleans/people/tess/tess_at_work.yaml new file mode 100644 index 0000000..0a96903 --- /dev/null +++ b/components/input_booleans/people/tess/tess_at_work.yaml @@ -0,0 +1,2 @@ +name: Tess At Work +icon: mdi:briefcase diff --git a/components/input_booleans/people/tess/tess_home.yaml b/components/input_booleans/people/tess/tess_home.yaml new file mode 100644 index 0000000..eabf6dc --- /dev/null +++ b/components/input_booleans/people/tess/tess_home.yaml @@ -0,0 +1,2 @@ +name: Tess Home +icon: mdi:human-female diff --git a/components/input_booleans/people/tess/tess_in_bed.yaml b/components/input_booleans/people/tess/tess_in_bed.yaml new file mode 100644 index 0000000..44b7f74 --- /dev/null +++ b/components/input_booleans/people/tess/tess_in_bed.yaml @@ -0,0 +1,2 @@ +name: Tess In Bed +icon: mdi:bed diff --git a/components/input_booleans/people/tess/tess_is_awake.yaml b/components/input_booleans/people/tess/tess_is_awake.yaml new file mode 100644 index 0000000..5140ca0 --- /dev/null +++ b/components/input_booleans/people/tess/tess_is_awake.yaml @@ -0,0 +1,2 @@ +name: Tess Is Awake +icon: mdi:alarm diff --git a/components/input_booleans/people/tess/tess_travelling.yaml b/components/input_booleans/people/tess/tess_travelling.yaml new file mode 100644 index 0000000..3d4ee33 --- /dev/null +++ b/components/input_booleans/people/tess/tess_travelling.yaml @@ -0,0 +1,2 @@ +name: Tess Travelling +icon: mdi:road diff --git a/components/input_booleans/rooms/back_yard_occupied.yaml b/components/input_booleans/rooms/back_yard_occupied.yaml new file mode 100644 index 0000000..620f648 --- /dev/null +++ b/components/input_booleans/rooms/back_yard_occupied.yaml @@ -0,0 +1,2 @@ +name: Back Yard +icon: mdi:slide diff --git a/components/input_booleans/rooms/blue_room_automatic_lights.yaml b/components/input_booleans/rooms/blue_room_automatic_lights.yaml new file mode 100644 index 0000000..c8a0145 --- /dev/null +++ b/components/input_booleans/rooms/blue_room_automatic_lights.yaml @@ -0,0 +1,2 @@ +name: Blue Room Automatic Lights +icon: mdi:lightbulb-auto diff --git a/components/input_booleans/rooms/blue_room_lights.yaml b/components/input_booleans/rooms/blue_room_lights.yaml new file mode 100644 index 0000000..114039b --- /dev/null +++ b/components/input_booleans/rooms/blue_room_lights.yaml @@ -0,0 +1,2 @@ +name: Blue Room Lights +icon: mdi:lightbulb-multiple diff --git a/components/input_booleans/rooms/blue_room_occupied.yaml b/components/input_booleans/rooms/blue_room_occupied.yaml new file mode 100644 index 0000000..df9542d --- /dev/null +++ b/components/input_booleans/rooms/blue_room_occupied.yaml @@ -0,0 +1,2 @@ +name: Blue Room +icon: mdi:yoga diff --git a/components/input_booleans/rooms/computer_area_automatic_lights.yaml b/components/input_booleans/rooms/computer_area_automatic_lights.yaml new file mode 100644 index 0000000..1f272fc --- /dev/null +++ b/components/input_booleans/rooms/computer_area_automatic_lights.yaml @@ -0,0 +1,2 @@ +name: Computer Area Automatic Lights +icon: mdi:lightbulb-auto \ No newline at end of file diff --git a/components/input_booleans/rooms/computer_area_cycle_same.yaml b/components/input_booleans/rooms/computer_area_cycle_same.yaml new file mode 100644 index 0000000..3caea46 --- /dev/null +++ b/components/input_booleans/rooms/computer_area_cycle_same.yaml @@ -0,0 +1 @@ +name: Computer Area Cycle Same \ No newline at end of file diff --git a/components/input_booleans/rooms/computer_area_light_cycle.yaml b/components/input_booleans/rooms/computer_area_light_cycle.yaml new file mode 100644 index 0000000..8d69ef9 --- /dev/null +++ b/components/input_booleans/rooms/computer_area_light_cycle.yaml @@ -0,0 +1 @@ +name: Computer Area Light Cycle \ No newline at end of file diff --git a/components/input_booleans/rooms/computer_area_lights.yaml b/components/input_booleans/rooms/computer_area_lights.yaml new file mode 100644 index 0000000..7a8b547 --- /dev/null +++ b/components/input_booleans/rooms/computer_area_lights.yaml @@ -0,0 +1,2 @@ +name: Computer Area Lights +icon: mdi:lightbulb-multiple diff --git a/components/input_booleans/rooms/computer_area_occupied.yaml b/components/input_booleans/rooms/computer_area_occupied.yaml new file mode 100644 index 0000000..1bb7624 --- /dev/null +++ b/components/input_booleans/rooms/computer_area_occupied.yaml @@ -0,0 +1,2 @@ +name: Computer Area +icon: mdi:desktop-classic \ No newline at end of file diff --git a/components/input_booleans/rooms/deck_occupied.yaml b/components/input_booleans/rooms/deck_occupied.yaml new file mode 100644 index 0000000..8bafbf6 --- /dev/null +++ b/components/input_booleans/rooms/deck_occupied.yaml @@ -0,0 +1,2 @@ +name: Deck +icon: mdi:fence \ No newline at end of file diff --git a/components/input_booleans/rooms/dining_room_automatic_lights.yaml b/components/input_booleans/rooms/dining_room_automatic_lights.yaml new file mode 100644 index 0000000..18b7061 --- /dev/null +++ b/components/input_booleans/rooms/dining_room_automatic_lights.yaml @@ -0,0 +1,2 @@ +name: Dining Roomn Automatic Lights +icon: mdi:lightbulb-auto \ No newline at end of file diff --git a/components/input_booleans/rooms/dining_room_lights.yaml b/components/input_booleans/rooms/dining_room_lights.yaml new file mode 100644 index 0000000..847a1c6 --- /dev/null +++ b/components/input_booleans/rooms/dining_room_lights.yaml @@ -0,0 +1,2 @@ +name: Dining Room Lights +icon: mdi:lightbulb-multiple diff --git a/components/input_booleans/rooms/dining_room_occupied.yaml b/components/input_booleans/rooms/dining_room_occupied.yaml new file mode 100644 index 0000000..0c5baec --- /dev/null +++ b/components/input_booleans/rooms/dining_room_occupied.yaml @@ -0,0 +1,2 @@ +name: Dining Room +icon: mdi:table-chair diff --git a/components/input_booleans/rooms/entryway_automatic_lights.yaml b/components/input_booleans/rooms/entryway_automatic_lights.yaml new file mode 100644 index 0000000..8885513 --- /dev/null +++ b/components/input_booleans/rooms/entryway_automatic_lights.yaml @@ -0,0 +1,2 @@ +name: Entryway Automatic Lights +icon: mdi:lightbulb-auto \ No newline at end of file diff --git a/components/input_booleans/rooms/entryway_lights.yaml b/components/input_booleans/rooms/entryway_lights.yaml new file mode 100644 index 0000000..da5fa4f --- /dev/null +++ b/components/input_booleans/rooms/entryway_lights.yaml @@ -0,0 +1,2 @@ +name: Entryway Lights +icon: mdi:lightbulb-multiple diff --git a/components/input_booleans/rooms/entryway_occupied.yaml b/components/input_booleans/rooms/entryway_occupied.yaml new file mode 100644 index 0000000..b190747 --- /dev/null +++ b/components/input_booleans/rooms/entryway_occupied.yaml @@ -0,0 +1,2 @@ +name: Entryway +icon: mdi:ceiling-light \ No newline at end of file diff --git a/components/input_booleans/rooms/front_porch_occupied.yaml b/components/input_booleans/rooms/front_porch_occupied.yaml new file mode 100644 index 0000000..26c0bc3 --- /dev/null +++ b/components/input_booleans/rooms/front_porch_occupied.yaml @@ -0,0 +1,2 @@ +name: Front Porch +icon: mdi:outdoor-lamp \ No newline at end of file diff --git a/components/input_booleans/rooms/front_room_automatic_lights.yaml b/components/input_booleans/rooms/front_room_automatic_lights.yaml new file mode 100644 index 0000000..116c490 --- /dev/null +++ b/components/input_booleans/rooms/front_room_automatic_lights.yaml @@ -0,0 +1,2 @@ +name: Front Room Automatic Lights +icon: mdi:lightbulb-auto \ No newline at end of file diff --git a/components/input_booleans/rooms/front_room_cycle_same.yaml b/components/input_booleans/rooms/front_room_cycle_same.yaml new file mode 100644 index 0000000..7b674fb --- /dev/null +++ b/components/input_booleans/rooms/front_room_cycle_same.yaml @@ -0,0 +1 @@ +name: Front Room Cycle Same \ No newline at end of file diff --git a/components/input_booleans/rooms/front_room_light_cycle.yaml b/components/input_booleans/rooms/front_room_light_cycle.yaml new file mode 100644 index 0000000..2eb8b29 --- /dev/null +++ b/components/input_booleans/rooms/front_room_light_cycle.yaml @@ -0,0 +1 @@ +name: Front Room Light Cycle \ No newline at end of file diff --git a/components/input_booleans/rooms/front_room_lights.yaml b/components/input_booleans/rooms/front_room_lights.yaml new file mode 100644 index 0000000..7003fe4 --- /dev/null +++ b/components/input_booleans/rooms/front_room_lights.yaml @@ -0,0 +1,2 @@ +name: Front Room Lights +icon: mdi:lightbulb-multiple diff --git a/components/input_booleans/rooms/front_room_occupied.yaml b/components/input_booleans/rooms/front_room_occupied.yaml new file mode 100644 index 0000000..d501ca1 --- /dev/null +++ b/components/input_booleans/rooms/front_room_occupied.yaml @@ -0,0 +1,2 @@ +name: Front Room +icon: mdi:television \ No newline at end of file diff --git a/components/input_booleans/rooms/front_yard_occupied.yaml b/components/input_booleans/rooms/front_yard_occupied.yaml new file mode 100644 index 0000000..4112e4b --- /dev/null +++ b/components/input_booleans/rooms/front_yard_occupied.yaml @@ -0,0 +1,2 @@ +name: Front Yard +icon: mdi:grass \ No newline at end of file diff --git a/components/input_booleans/rooms/furnace_room_occupied.yaml b/components/input_booleans/rooms/furnace_room_occupied.yaml new file mode 100644 index 0000000..977b77f --- /dev/null +++ b/components/input_booleans/rooms/furnace_room_occupied.yaml @@ -0,0 +1,2 @@ +name: Furnace Room +icon: mdi:hvac \ No newline at end of file diff --git a/components/input_booleans/rooms/garage_occupied.yaml b/components/input_booleans/rooms/garage_occupied.yaml new file mode 100644 index 0000000..3671c20 --- /dev/null +++ b/components/input_booleans/rooms/garage_occupied.yaml @@ -0,0 +1,2 @@ +name: Garage +icon: mdi:garage \ No newline at end of file diff --git a/components/input_booleans/rooms/great_room_automatic_lights.yaml b/components/input_booleans/rooms/great_room_automatic_lights.yaml new file mode 100644 index 0000000..7f6312f --- /dev/null +++ b/components/input_booleans/rooms/great_room_automatic_lights.yaml @@ -0,0 +1,2 @@ +name: Great Room Automatic Lights +icon: mdi:lightbulb-auto \ No newline at end of file diff --git a/components/input_booleans/rooms/great_room_cycle_same.yaml b/components/input_booleans/rooms/great_room_cycle_same.yaml new file mode 100644 index 0000000..b291736 --- /dev/null +++ b/components/input_booleans/rooms/great_room_cycle_same.yaml @@ -0,0 +1 @@ +name: Great Room Cycle Same \ No newline at end of file diff --git a/components/input_booleans/rooms/great_room_light_cycle.yaml b/components/input_booleans/rooms/great_room_light_cycle.yaml new file mode 100644 index 0000000..d65f70f --- /dev/null +++ b/components/input_booleans/rooms/great_room_light_cycle.yaml @@ -0,0 +1 @@ +name: Great Room Light Cycle \ No newline at end of file diff --git a/components/input_booleans/rooms/great_room_lights.yaml b/components/input_booleans/rooms/great_room_lights.yaml new file mode 100644 index 0000000..e4bf922 --- /dev/null +++ b/components/input_booleans/rooms/great_room_lights.yaml @@ -0,0 +1,2 @@ +name: Great Room Lights +icon: mdi:lightbulb-multiple diff --git a/components/input_booleans/rooms/great_room_occupied.yaml b/components/input_booleans/rooms/great_room_occupied.yaml new file mode 100644 index 0000000..a9e621e --- /dev/null +++ b/components/input_booleans/rooms/great_room_occupied.yaml @@ -0,0 +1,2 @@ +name: Great Room +icon: mdi:microsoft-xbox-controller \ No newline at end of file diff --git a/components/input_booleans/rooms/kitchen_automatic_lights.yaml b/components/input_booleans/rooms/kitchen_automatic_lights.yaml new file mode 100644 index 0000000..c8f799f --- /dev/null +++ b/components/input_booleans/rooms/kitchen_automatic_lights.yaml @@ -0,0 +1,2 @@ +name: Kitchen Automatic Lights +icon: mdi:lightbulb-auto \ No newline at end of file diff --git a/components/input_booleans/rooms/kitchen_lights.yaml b/components/input_booleans/rooms/kitchen_lights.yaml new file mode 100644 index 0000000..aaa8938 --- /dev/null +++ b/components/input_booleans/rooms/kitchen_lights.yaml @@ -0,0 +1,2 @@ +name: Kitchen Lights +icon: mdi:lightbulb-multiple diff --git a/components/input_booleans/rooms/kitchen_occupied.yaml b/components/input_booleans/rooms/kitchen_occupied.yaml new file mode 100644 index 0000000..4427378 --- /dev/null +++ b/components/input_booleans/rooms/kitchen_occupied.yaml @@ -0,0 +1,2 @@ +name: Kitchen +icon: mdi:fridge diff --git a/components/input_booleans/rooms/mancave_lights.yaml b/components/input_booleans/rooms/mancave_lights.yaml new file mode 100644 index 0000000..0cc3d4b --- /dev/null +++ b/components/input_booleans/rooms/mancave_lights.yaml @@ -0,0 +1,2 @@ +name: Mancave Lights +icon: mdi:lightbulb-multiple diff --git a/components/input_booleans/rooms/mancave_occupied.yaml b/components/input_booleans/rooms/mancave_occupied.yaml new file mode 100644 index 0000000..fa3efe4 --- /dev/null +++ b/components/input_booleans/rooms/mancave_occupied.yaml @@ -0,0 +1,2 @@ +name: Mancave +icon: mdi:human-male diff --git a/components/input_booleans/rooms/master_bathroom_automatic_lights.yaml b/components/input_booleans/rooms/master_bathroom_automatic_lights.yaml new file mode 100644 index 0000000..2c2a666 --- /dev/null +++ b/components/input_booleans/rooms/master_bathroom_automatic_lights.yaml @@ -0,0 +1,2 @@ +name: Master Bathroom Automatic Lights +icon: mdi:lightbulb-auto \ No newline at end of file diff --git a/components/input_booleans/rooms/master_bathroom_lights.yaml b/components/input_booleans/rooms/master_bathroom_lights.yaml new file mode 100644 index 0000000..7ed682a --- /dev/null +++ b/components/input_booleans/rooms/master_bathroom_lights.yaml @@ -0,0 +1,2 @@ +name: Master Bathroom Lights +icon: mdi:lightbulb-multiple diff --git a/components/input_booleans/rooms/master_bathroom_occupied.yaml b/components/input_booleans/rooms/master_bathroom_occupied.yaml new file mode 100644 index 0000000..b06c0af --- /dev/null +++ b/components/input_booleans/rooms/master_bathroom_occupied.yaml @@ -0,0 +1,2 @@ +name: Master Bathroom +icon: mdi:shower diff --git a/components/input_booleans/rooms/master_bedroom_asleep.yaml b/components/input_booleans/rooms/master_bedroom_asleep.yaml new file mode 100644 index 0000000..9893698 --- /dev/null +++ b/components/input_booleans/rooms/master_bedroom_asleep.yaml @@ -0,0 +1,2 @@ +name: Master Bedroom Asleep +icon: mdi:sleep diff --git a/components/input_booleans/rooms/master_bedroom_automatic_lights.yaml b/components/input_booleans/rooms/master_bedroom_automatic_lights.yaml new file mode 100644 index 0000000..1617d65 --- /dev/null +++ b/components/input_booleans/rooms/master_bedroom_automatic_lights.yaml @@ -0,0 +1,2 @@ +name: Master Bedroom Automatic Lights +icon: mdi:lightbulb-auto \ No newline at end of file diff --git a/components/input_booleans/rooms/master_bedroom_closet_occupied.yaml b/components/input_booleans/rooms/master_bedroom_closet_occupied.yaml new file mode 100644 index 0000000..a7a1c46 --- /dev/null +++ b/components/input_booleans/rooms/master_bedroom_closet_occupied.yaml @@ -0,0 +1,2 @@ +name: Master Bedroom Closet +icon: mdi:hanger diff --git a/components/input_booleans/rooms/master_bedroom_cycle_same.yaml b/components/input_booleans/rooms/master_bedroom_cycle_same.yaml new file mode 100644 index 0000000..75981f7 --- /dev/null +++ b/components/input_booleans/rooms/master_bedroom_cycle_same.yaml @@ -0,0 +1 @@ +name: Master Bedroom Cycle Same \ No newline at end of file diff --git a/components/input_booleans/rooms/master_bedroom_light_cycle.yaml b/components/input_booleans/rooms/master_bedroom_light_cycle.yaml new file mode 100644 index 0000000..8f00a14 --- /dev/null +++ b/components/input_booleans/rooms/master_bedroom_light_cycle.yaml @@ -0,0 +1 @@ +name: Master Bedroom Light Cycle diff --git a/components/input_booleans/rooms/master_bedroom_lights.yaml b/components/input_booleans/rooms/master_bedroom_lights.yaml new file mode 100644 index 0000000..2a4577b --- /dev/null +++ b/components/input_booleans/rooms/master_bedroom_lights.yaml @@ -0,0 +1,2 @@ +name: Master Bedroom Lights +icon: mdi:lightbulb-multiple diff --git a/components/input_booleans/rooms/master_bedroom_occupied.yaml b/components/input_booleans/rooms/master_bedroom_occupied.yaml new file mode 100644 index 0000000..3dcb0da --- /dev/null +++ b/components/input_booleans/rooms/master_bedroom_occupied.yaml @@ -0,0 +1,2 @@ +name: Master Bedroom +icon: mdi:bed-king diff --git a/components/input_booleans/rooms/master_bedroom_white_noise.yaml b/components/input_booleans/rooms/master_bedroom_white_noise.yaml new file mode 100644 index 0000000..e398461 --- /dev/null +++ b/components/input_booleans/rooms/master_bedroom_white_noise.yaml @@ -0,0 +1 @@ +name: Master Bedroom White Noise diff --git a/components/input_booleans/rooms/nursery_asleep.yaml b/components/input_booleans/rooms/nursery_asleep.yaml new file mode 100644 index 0000000..fb36c92 --- /dev/null +++ b/components/input_booleans/rooms/nursery_asleep.yaml @@ -0,0 +1,2 @@ +name: Nursery Asleep +icon: mdi:sleep diff --git a/components/input_booleans/rooms/nursery_automatic_lights.yaml b/components/input_booleans/rooms/nursery_automatic_lights.yaml new file mode 100644 index 0000000..1077805 --- /dev/null +++ b/components/input_booleans/rooms/nursery_automatic_lights.yaml @@ -0,0 +1,2 @@ +name: Nursery Automatic Lights +icon: mdi:lightbulb-auto \ No newline at end of file diff --git a/components/input_booleans/rooms/nursery_closet_occupied.yaml b/components/input_booleans/rooms/nursery_closet_occupied.yaml new file mode 100644 index 0000000..e9e6483 --- /dev/null +++ b/components/input_booleans/rooms/nursery_closet_occupied.yaml @@ -0,0 +1,2 @@ +name: Nursery Closet +icon: mdi:hanger \ No newline at end of file diff --git a/components/input_booleans/rooms/nursery_cycle_same.yaml b/components/input_booleans/rooms/nursery_cycle_same.yaml new file mode 100644 index 0000000..64c18f4 --- /dev/null +++ b/components/input_booleans/rooms/nursery_cycle_same.yaml @@ -0,0 +1 @@ +name: Nursery Cycle Same \ No newline at end of file diff --git a/components/input_booleans/rooms/nursery_light_cycle.yaml b/components/input_booleans/rooms/nursery_light_cycle.yaml new file mode 100644 index 0000000..d6940aa --- /dev/null +++ b/components/input_booleans/rooms/nursery_light_cycle.yaml @@ -0,0 +1 @@ +name: Nursery Light Cycle \ No newline at end of file diff --git a/components/input_booleans/rooms/nursery_lights.yaml b/components/input_booleans/rooms/nursery_lights.yaml new file mode 100644 index 0000000..92da42a --- /dev/null +++ b/components/input_booleans/rooms/nursery_lights.yaml @@ -0,0 +1,2 @@ +name: Nursery Lights +icon: mdi:lightbulb-multiple diff --git a/components/input_booleans/rooms/nursery_occupied.yaml b/components/input_booleans/rooms/nursery_occupied.yaml new file mode 100644 index 0000000..826d6c8 --- /dev/null +++ b/components/input_booleans/rooms/nursery_occupied.yaml @@ -0,0 +1,2 @@ +name: Nursery +icon: mdi:bunk-bed \ No newline at end of file diff --git a/components/input_booleans/rooms/nursery_white_noise.yaml b/components/input_booleans/rooms/nursery_white_noise.yaml new file mode 100644 index 0000000..5fd4fb4 --- /dev/null +++ b/components/input_booleans/rooms/nursery_white_noise.yaml @@ -0,0 +1 @@ +name: Nursery White Noise diff --git a/components/input_booleans/rooms/utility_room_automatic_lights.yaml b/components/input_booleans/rooms/utility_room_automatic_lights.yaml new file mode 100644 index 0000000..1957ff2 --- /dev/null +++ b/components/input_booleans/rooms/utility_room_automatic_lights.yaml @@ -0,0 +1,2 @@ +name: Utility Room Automatic Lights +icon: mdi:lightbulb-auto \ No newline at end of file diff --git a/components/input_booleans/rooms/utility_room_lights.yaml b/components/input_booleans/rooms/utility_room_lights.yaml new file mode 100644 index 0000000..b9b5fd7 --- /dev/null +++ b/components/input_booleans/rooms/utility_room_lights.yaml @@ -0,0 +1,2 @@ +name: Utility Room Lights +icon: mdi:lightbulb-multiple diff --git a/components/input_booleans/rooms/utility_room_occupied.yaml b/components/input_booleans/rooms/utility_room_occupied.yaml new file mode 100644 index 0000000..ba51ad8 --- /dev/null +++ b/components/input_booleans/rooms/utility_room_occupied.yaml @@ -0,0 +1,2 @@ +name: Utility Room +icon: mdi:washing-machine diff --git a/components/input_booleans/spring_break.yaml b/components/input_booleans/spring_break.yaml new file mode 100644 index 0000000..5817e1d --- /dev/null +++ b/components/input_booleans/spring_break.yaml @@ -0,0 +1,2 @@ +name: Spring Break +icon: mdi:bee-flower \ No newline at end of file diff --git a/components/input_booleans/stream_camera.yaml b/components/input_booleans/stream_camera.yaml new file mode 100644 index 0000000..1591c41 --- /dev/null +++ b/components/input_booleans/stream_camera.yaml @@ -0,0 +1,2 @@ +name: Stream camera +icon: mdi:cctv diff --git a/components/input_booleans/submit_timecard.yaml b/components/input_booleans/submit_timecard.yaml new file mode 100644 index 0000000..4837c9f --- /dev/null +++ b/components/input_booleans/submit_timecard.yaml @@ -0,0 +1,2 @@ +name: Submit Timecard +icon: mdi:account-clock \ No newline at end of file diff --git a/components/input_booleans/summer_break.yaml b/components/input_booleans/summer_break.yaml new file mode 100644 index 0000000..155623f --- /dev/null +++ b/components/input_booleans/summer_break.yaml @@ -0,0 +1,2 @@ +name: Summer Break +icon: mdi:sunglasses \ No newline at end of file diff --git a/components/input_booleans/teens_asleep.yaml b/components/input_booleans/teens_asleep.yaml new file mode 100644 index 0000000..78aff01 --- /dev/null +++ b/components/input_booleans/teens_asleep.yaml @@ -0,0 +1,2 @@ +name: Teens Asleep +icon: mdi:bunk-bed \ No newline at end of file diff --git a/components/input_booleans/teens_bedtime.yaml b/components/input_booleans/teens_bedtime.yaml new file mode 100644 index 0000000..d2323dd --- /dev/null +++ b/components/input_booleans/teens_bedtime.yaml @@ -0,0 +1,2 @@ +name: Teens Bedtime +icon: mdi:bunk-bed \ No newline at end of file diff --git a/components/input_booleans/test_mode.yaml b/components/input_booleans/test_mode.yaml new file mode 100644 index 0000000..6fc6e6e --- /dev/null +++ b/components/input_booleans/test_mode.yaml @@ -0,0 +1,2 @@ +name: Test mode +icon: mdi:help-circle diff --git a/components/input_booleans/timecard_submitted.yaml b/components/input_booleans/timecard_submitted.yaml new file mode 100644 index 0000000..0d722c5 --- /dev/null +++ b/components/input_booleans/timecard_submitted.yaml @@ -0,0 +1,2 @@ +name: Timecard Submitted +icon: mdi:account-clock-outline \ No newline at end of file diff --git a/components/input_booleans/trash_out.yaml b/components/input_booleans/trash_out.yaml new file mode 100644 index 0000000..e55d247 --- /dev/null +++ b/components/input_booleans/trash_out.yaml @@ -0,0 +1,2 @@ +name: Trash Out +icon: mdi:trash-can diff --git a/components/input_booleans/vacation_mode.yaml b/components/input_booleans/vacation_mode.yaml new file mode 100644 index 0000000..3dcf8a7 --- /dev/null +++ b/components/input_booleans/vacation_mode.yaml @@ -0,0 +1,2 @@ +name: Vacation Mode +icon: mdi:shield-airplane diff --git a/components/input_booleans/winter_break.yaml b/components/input_booleans/winter_break.yaml new file mode 100644 index 0000000..fb1d097 --- /dev/null +++ b/components/input_booleans/winter_break.yaml @@ -0,0 +1,2 @@ +name: Winter Break +icon: mdi:sledding \ No newline at end of file diff --git a/components/input_buttons/bedtimes.yaml b/components/input_buttons/bedtimes.yaml new file mode 100644 index 0000000..dd96c5b --- /dev/null +++ b/components/input_buttons/bedtimes.yaml @@ -0,0 +1,23 @@ +nursery_bedtime: + name: Nursery Bedtime + icon: mdi:bunk-bed + +nursery_awake: + name: Nursery Awake + icon: mdi:bunk-bed + +master_bedroom_bedtime: + name: Master Bedroom Bedtime + icon: mdi:bed-king + +master_bedroom_awake: + name: Master Bedroom Awake + icon: mdi:bed-king + +blue_room_bedtime: + name: Blue Room Bedtime + icon: mdi:bed + +blue_room_awake: + name: Blue Room Awake + icon: mdi:bed \ No newline at end of file diff --git a/components/input_buttons/grocy_chore_buttons.yaml b/components/input_buttons/grocy_chore_buttons.yaml new file mode 100644 index 0000000..e39b40a --- /dev/null +++ b/components/input_buttons/grocy_chore_buttons.yaml @@ -0,0 +1,87 @@ +all_chores: + name: All Chores + icon: mdi:checkbox-marked-circle + +blue_room_chores: + name: Blue Room Chores + icon: mdi:yoga + +computer_area_chores: + name: Computer Area Chores + icon: mdi:desktop-classic + +dining_room_chores: + name: Dining Room Chores + icon: mdi:table-chair + +entryway_chores: + name: Entryway Chores + icon: mdi:ceiling-light + +front_room_chores: + name: Front Room Chores + icon: mdi:television + +furnace_room_chores: + name: Furnace Room Chores + icon: mdi:hvac + +garage_chores: + name: Garage Chores + icon: mdi:garage + +kitchen_chores: + name: Kitchen Chores + icon: mdi:fridge + +great_room_chores: + name: Great Room Chores + icon: mdi:microsoft-xbox-controller + +mancave_chores: + name: Mancave Chores + icon: mdi:human-male + +master_bathroom_chores: + name: Master Bathroom Chores + icon: mdi:shower + +master_bedroom_chores: + name: Master Bedroom Chores + icon: mdi:bed-king + +nursery_chores: + name: Nursery Chores + icon: mdi:bunk-bed + +utility_room_chores: + name: Utility Room Chores + icon: mdi:tumble-dryer + +daddy_chores: + name: Daddy's Chores + icon: mdi:human-male + +chickadee_chores: + name: Chickadee's Chores + icon: mdi:human-female + +marshall_chores: + name: Marshall's Chores + icon: mdi:alpha-m-circle-outline + +tess_chores: + name: Tess' Chores + icon: mdi:alpha-t-circle-outline + +emmett_chores: + name: Emmett's Chores + icon: mdi:alpha-e-circle + +bridget_chores: + name: Bridget's Chores + icon: mdi:alpha-b-circle + +ebin_chores: + name: Ebin's Chores + icon: mdi:alpha-e-circle-outline \ No newline at end of file diff --git a/components/input_buttons/grocy_consume_buttons.yaml b/components/input_buttons/grocy_consume_buttons.yaml new file mode 100644 index 0000000..cb02a87 --- /dev/null +++ b/components/input_buttons/grocy_consume_buttons.yaml @@ -0,0 +1,19 @@ +grocy_consume_kcup: + name: Consume KCup + icon: mdi:coffee + +grocy_consume_am_meds: + name: Consume AM Meds + icon: mdi:pill + +grocy_consume_pm_meds: + name: Consume PM Meds + icon: mdi:pill + +grocy_consume_milk: + name: Consume Milk + icon: mdi:cup + +grocy_consume_diet_coke: + name: Consume Diet Coke + icon: mdi:bottle-soda-classic diff --git a/components/input_buttons/grocy_purchase_buttons.yaml b/components/input_buttons/grocy_purchase_buttons.yaml new file mode 100644 index 0000000..6a0ffd0 --- /dev/null +++ b/components/input_buttons/grocy_purchase_buttons.yaml @@ -0,0 +1,15 @@ +grocy_purchase_am_meds: + name: Purchase AM Meds + icon: mdi:pill + +grocy_purchase_pm_meds: + name: Purchase PM Meds + icon: mdi:pill + +grocy_purchase_milk: + name: Purchase Milk + icon: mdi:cup + +grocy_purchase_diet_coke_12_pack: + name: Purchase Diet Coke 12 Pack + icon: mdi:bottle-soda-classic \ No newline at end of file diff --git a/components/input_datetime/alarm_clock.yaml b/components/input_datetime/alarm_clock.yaml new file mode 100644 index 0000000..d671f5a --- /dev/null +++ b/components/input_datetime/alarm_clock.yaml @@ -0,0 +1,11 @@ +workday_alarmclock_time: + name: Workday Alarm Time + has_date: false + has_time: true + initial: '06:00' + +nonwork_alarmclock_time: + name: Nonwork Alarm Time + has_date: false + has_time: true + initial: '07:00' \ No newline at end of file diff --git a/components/input_datetime/clint_next_alarm.yaml b/components/input_datetime/clint_next_alarm.yaml new file mode 100644 index 0000000..fccc042 --- /dev/null +++ b/components/input_datetime/clint_next_alarm.yaml @@ -0,0 +1,5 @@ +clint_next_alarm: + name: Clint Next Alarm + has_date: false + has_time: true + initial: '06:00' \ No newline at end of file diff --git a/components/input_datetime/filter_last_changed.yaml b/components/input_datetime/filter_last_changed.yaml new file mode 100644 index 0000000..12fb51a --- /dev/null +++ b/components/input_datetime/filter_last_changed.yaml @@ -0,0 +1,4 @@ +filter_last_changed: + name: Filter Last Changed + has_date: true + has_time: true diff --git a/components/input_datetime/last_mowed.yaml b/components/input_datetime/last_mowed.yaml new file mode 100644 index 0000000..9e02417 --- /dev/null +++ b/components/input_datetime/last_mowed.yaml @@ -0,0 +1,4 @@ +last_mowed: + name: Last Mowed + has_date: true + has_time: true diff --git a/components/input_datetime/room_occupied.yaml b/components/input_datetime/room_occupied.yaml new file mode 100644 index 0000000..014c34e --- /dev/null +++ b/components/input_datetime/room_occupied.yaml @@ -0,0 +1,79 @@ +back_yard_occupied: + name: Back Yard Occupied + has_date: true + has_time: true + +blue_room_occupied: + name: Blue Room Occupied + has_date: true + has_time: true + +computer_area_occupied: + name: Computer Area Occupied + has_date: true + has_time: true + +dining_room_occupied: + name: Dining Room Occupied + has_date: true + has_time: true + +entryway_occupied: + name: Entryway Occupied + has_date: true + has_time: true + +front_room_occupied: + name: Front Room Occupied + has_date: true + has_time: true + +front_yard_occupied: + name: Front Yard Occupied + has_date: true + has_time: true + +furnace_room_occupied: + name: Furnace Room Occupied + has_date: true + has_time: true + +garage_occupied: + name: Garage Occupied + has_date: true + has_time: true + +great_room_occupied: + name: Great Room Occupied + has_date: true + has_time: true + +kitchen_occupied: + name: Kitchen Occupied + has_date: true + has_time: true + +mancave_occupied: + name: Mancave Occupied + has_date: true + has_time: true + +master_bathroom_occupied: + name: Master Bathroom Occupied + has_date: true + has_time: true + +master_bedroom_occupied: + name: Master Bedroom Occupied + has_date: true + has_time: true + +nursery_occupied: + name: Nursery Occupied + has_date: true + has_time: true + +utility_room_occupied: + name: Utility Room Occupied + has_date: true + has_time: true \ No newline at end of file diff --git a/components/input_datetime/sleepy_clock.yaml b/components/input_datetime/sleepy_clock.yaml new file mode 100644 index 0000000..b5184db --- /dev/null +++ b/components/input_datetime/sleepy_clock.yaml @@ -0,0 +1,16 @@ +adults_regular_bedtime: + name: Adults Regular Bedtime + has_date: false + has_time: true + + +kids_bedtime_announcement_time: + name: Kids Bedtime + has_date: false + has_time: true + + +kids_five_minute_warning_time: + name: Kids Warning Time + has_date: false + has_time: true diff --git a/components/input_numbers/README.md b/components/input_numbers/README.md new file mode 100644 index 0000000..9706afa --- /dev/null +++ b/components/input_numbers/README.md @@ -0,0 +1,19 @@ +# Input numbers + +Component: [input number](https://home-assistant.io/components/input_number/) + +## Door delay + +This is the delay after the garden door opens (in seconds) before the automation for turning the lights off is re-enabled. + +## Garden time + +Used to determine if the lights have been left on too long, in minutes. + +## Lights + +These are for the Yeelight control scripts, for changing the brightness and colour temperature. + +## Room + +This is for future lighting automations, not currently used. diff --git a/components/input_numbers/accent_sunrise_transition.yaml b/components/input_numbers/accent_sunrise_transition.yaml new file mode 100644 index 0000000..b040311 --- /dev/null +++ b/components/input_numbers/accent_sunrise_transition.yaml @@ -0,0 +1,5 @@ +name: Accent Sunrise Transition +icon: hass:lightbuilb +min: 15 +max: 900 +mode: box \ No newline at end of file diff --git a/components/input_numbers/black_bed/black_bed_loadcell_load.yaml b/components/input_numbers/black_bed/black_bed_loadcell_load.yaml new file mode 100644 index 0000000..92077d7 --- /dev/null +++ b/components/input_numbers/black_bed/black_bed_loadcell_load.yaml @@ -0,0 +1,5 @@ +name: Black Bed LoadCell Load +icon: mdi:weight +min: -8388000 +max: 8388000 +mode: box \ No newline at end of file diff --git a/components/input_numbers/black_bed/black_bed_loadcell_weight.yaml b/components/input_numbers/black_bed/black_bed_loadcell_weight.yaml new file mode 100644 index 0000000..f41c68a --- /dev/null +++ b/components/input_numbers/black_bed/black_bed_loadcell_weight.yaml @@ -0,0 +1,5 @@ +name: Black Bed LoadCell Weight +icon: mdi:weight-pound +min: 0 +max: 300 +mode: box \ No newline at end of file diff --git a/components/input_numbers/black_bed/black_bed_loadcell_zero.yaml b/components/input_numbers/black_bed/black_bed_loadcell_zero.yaml new file mode 100644 index 0000000..aa698b5 --- /dev/null +++ b/components/input_numbers/black_bed/black_bed_loadcell_zero.yaml @@ -0,0 +1,5 @@ +name: Black Bed LoadCell Zero +icon: mdi:weight +min: -8388000 +max: 8388000 +mode: box \ No newline at end of file diff --git a/components/input_numbers/black_bed/black_bed_occupied.yaml b/components/input_numbers/black_bed/black_bed_occupied.yaml new file mode 100644 index 0000000..d7c8bad --- /dev/null +++ b/components/input_numbers/black_bed/black_bed_occupied.yaml @@ -0,0 +1,5 @@ +name: Black Bed Occupied +icon: mdi:weight-pound +min: 0 +max: 300 +mode: box \ No newline at end of file diff --git a/components/input_numbers/climate_maximum.yaml b/components/input_numbers/climate_maximum.yaml new file mode 100644 index 0000000..40f9a3c --- /dev/null +++ b/components/input_numbers/climate_maximum.yaml @@ -0,0 +1,5 @@ +name: 'Climate Max' +min: 50 +max: 100 +step: 1 +mode: slider diff --git a/components/input_numbers/climate_minimum.yaml b/components/input_numbers/climate_minimum.yaml new file mode 100644 index 0000000..35b3ba8 --- /dev/null +++ b/components/input_numbers/climate_minimum.yaml @@ -0,0 +1,5 @@ +name: 'Climate Min' +min: 40 +max: 90 +step: 1 +mode: slider diff --git a/components/input_numbers/computer_area_light_cycle_brightness.yaml b/components/input_numbers/computer_area_light_cycle_brightness.yaml new file mode 100644 index 0000000..b5deacd --- /dev/null +++ b/components/input_numbers/computer_area_light_cycle_brightness.yaml @@ -0,0 +1,5 @@ +name: Computer Area Light Cycle Brightness +icon: mdi:brightness-auto +min: 1 +max: 254 +mode: box \ No newline at end of file diff --git a/components/input_numbers/computer_area_light_cycle_transition.yaml b/components/input_numbers/computer_area_light_cycle_transition.yaml new file mode 100644 index 0000000..7975044 --- /dev/null +++ b/components/input_numbers/computer_area_light_cycle_transition.yaml @@ -0,0 +1,5 @@ +name: Computer Area Light Cycle Transition +icon: mdi:clock +min: 1 +max: 300 +mode: box \ No newline at end of file diff --git a/components/input_numbers/door_delay.yaml b/components/input_numbers/door_delay.yaml new file mode 100644 index 0000000..3d01b56 --- /dev/null +++ b/components/input_numbers/door_delay.yaml @@ -0,0 +1,5 @@ +name: 'Delay' +min: 4 +max: 60 +step: 1 +mode: slider diff --git a/components/input_numbers/double_planter_water_alert.yaml b/components/input_numbers/double_planter_water_alert.yaml new file mode 100644 index 0000000..1b123b5 --- /dev/null +++ b/components/input_numbers/double_planter_water_alert.yaml @@ -0,0 +1,6 @@ +name: Double Planter Water Alert +icon: mdi:water-percent +min: 1 +max: 100 +step: 1 +mode: slider diff --git a/components/input_numbers/fridge_alert_temps/garage_freezer_alert.yaml b/components/input_numbers/fridge_alert_temps/garage_freezer_alert.yaml new file mode 100644 index 0000000..24d6776 --- /dev/null +++ b/components/input_numbers/fridge_alert_temps/garage_freezer_alert.yaml @@ -0,0 +1,5 @@ +name: 'Garage Freezer Alert' +min: -10 +max: 100 +step: 1 +mode: box \ No newline at end of file diff --git a/components/input_numbers/fridge_alert_temps/garage_fridge_alert.yaml b/components/input_numbers/fridge_alert_temps/garage_fridge_alert.yaml new file mode 100644 index 0000000..d5ed3f2 --- /dev/null +++ b/components/input_numbers/fridge_alert_temps/garage_fridge_alert.yaml @@ -0,0 +1,5 @@ +name: 'Garage Fridge Alert' +min: 0 +max: 100 +step: 1 +mode: box \ No newline at end of file diff --git a/components/input_numbers/fridge_alert_temps/kitchen_freezer_alert.yaml b/components/input_numbers/fridge_alert_temps/kitchen_freezer_alert.yaml new file mode 100644 index 0000000..ff27ab6 --- /dev/null +++ b/components/input_numbers/fridge_alert_temps/kitchen_freezer_alert.yaml @@ -0,0 +1,5 @@ +name: 'Kitchen Freezer Alert' +min: -10 +max: 100 +step: 1 +mode: box \ No newline at end of file diff --git a/components/input_numbers/fridge_alert_temps/kitchen_fridge_alert.yaml b/components/input_numbers/fridge_alert_temps/kitchen_fridge_alert.yaml new file mode 100644 index 0000000..c6ef36d --- /dev/null +++ b/components/input_numbers/fridge_alert_temps/kitchen_fridge_alert.yaml @@ -0,0 +1,5 @@ +name: 'Kitchen Fridge Alert' +min: 0 +max: 100 +step: 1 +mode: box \ No newline at end of file diff --git a/components/input_numbers/front_room_light_cycle_brightness.yaml b/components/input_numbers/front_room_light_cycle_brightness.yaml new file mode 100644 index 0000000..9d618b5 --- /dev/null +++ b/components/input_numbers/front_room_light_cycle_brightness.yaml @@ -0,0 +1,5 @@ +name: Front Room Light Cycle Brightness +icon: mdi:brightness-auto +min: 1 +max: 254 +mode: box \ No newline at end of file diff --git a/components/input_numbers/front_room_light_cycle_transition.yaml b/components/input_numbers/front_room_light_cycle_transition.yaml new file mode 100644 index 0000000..c877278 --- /dev/null +++ b/components/input_numbers/front_room_light_cycle_transition.yaml @@ -0,0 +1,5 @@ +name: Front Room Light Cycle Transition +icon: mdi:clock +min: 1 +max: 300 +mode: box \ No newline at end of file diff --git a/components/input_numbers/furnace_on.yaml b/components/input_numbers/furnace_on.yaml new file mode 100644 index 0000000..9f46a02 --- /dev/null +++ b/components/input_numbers/furnace_on.yaml @@ -0,0 +1,6 @@ +name: 'Furnace On' +icon: mdi:hvac +min: 0 +max: 10000 +step: 0.1 +mode: box \ No newline at end of file diff --git a/components/input_numbers/great_room_light_cycle_brightness.yaml b/components/input_numbers/great_room_light_cycle_brightness.yaml new file mode 100644 index 0000000..c8f3c51 --- /dev/null +++ b/components/input_numbers/great_room_light_cycle_brightness.yaml @@ -0,0 +1,5 @@ +name: Great Room Light Cycle Brightness +icon: mdi:brightness-auto +min: 1 +max: 254 +mode: box \ No newline at end of file diff --git a/components/input_numbers/great_room_light_cycle_transition.yaml b/components/input_numbers/great_room_light_cycle_transition.yaml new file mode 100644 index 0000000..67d71ae --- /dev/null +++ b/components/input_numbers/great_room_light_cycle_transition.yaml @@ -0,0 +1,5 @@ +name: Great Room Light Cycle Transition +icon: mdi:clock +min: 1 +max: 300 +mode: box \ No newline at end of file diff --git a/components/input_numbers/heat_pump_on.yaml b/components/input_numbers/heat_pump_on.yaml new file mode 100644 index 0000000..91f957d --- /dev/null +++ b/components/input_numbers/heat_pump_on.yaml @@ -0,0 +1,6 @@ +name: 'Heat Pump On' +icon: mdi:hvac +min: 0 +max: 10000 +step: 0.1 +mode: box \ No newline at end of file diff --git a/components/input_numbers/humidity_too_high.yaml b/components/input_numbers/humidity_too_high.yaml new file mode 100644 index 0000000..1659c6f --- /dev/null +++ b/components/input_numbers/humidity_too_high.yaml @@ -0,0 +1,6 @@ +name: Humidity Too High +icon: mdi:water-plus +step: 1 +min: 1 +max: 100 +mode: box \ No newline at end of file diff --git a/components/input_numbers/humidity_too_low.yaml b/components/input_numbers/humidity_too_low.yaml new file mode 100644 index 0000000..caa1da7 --- /dev/null +++ b/components/input_numbers/humidity_too_low.yaml @@ -0,0 +1,6 @@ +name: Humidity Too Low +icon: mdi:water-minus +step: 1 +min: 1 +max: 100 +mode: box \ No newline at end of file diff --git a/components/input_numbers/light_delays/light_delay_long.yaml b/components/input_numbers/light_delays/light_delay_long.yaml new file mode 100644 index 0000000..0ff7a94 --- /dev/null +++ b/components/input_numbers/light_delays/light_delay_long.yaml @@ -0,0 +1,5 @@ +name: 'Light Delay - Long (Minutes)' +min: 0 +max: 480 +step: 1 +mode: box diff --git a/components/input_numbers/light_delays/light_delay_normal.yaml b/components/input_numbers/light_delays/light_delay_normal.yaml new file mode 100644 index 0000000..5c20042 --- /dev/null +++ b/components/input_numbers/light_delays/light_delay_normal.yaml @@ -0,0 +1,5 @@ +name: 'Light Delay - Normal (Minutes)' +min: 0 +max: 480 +step: 1 +mode: box diff --git a/components/input_numbers/light_delays/light_delay_short.yaml b/components/input_numbers/light_delays/light_delay_short.yaml new file mode 100644 index 0000000..e8f949d --- /dev/null +++ b/components/input_numbers/light_delays/light_delay_short.yaml @@ -0,0 +1,5 @@ +name: 'Light Delay - Short (Seconds)' +min: 0 +max: 1800 +step: 1 +mode: box diff --git a/components/input_numbers/light_delays/long_light_off_delay_hours.yaml b/components/input_numbers/light_delays/long_light_off_delay_hours.yaml new file mode 100644 index 0000000..e648dce --- /dev/null +++ b/components/input_numbers/light_delays/long_light_off_delay_hours.yaml @@ -0,0 +1,5 @@ +name: 'Long Light Off Delay - Hours' +min: 0 +max: 48 +step: 1 +mode: box diff --git a/components/input_numbers/light_delays/long_light_off_delay_minutes.yaml b/components/input_numbers/light_delays/long_light_off_delay_minutes.yaml new file mode 100644 index 0000000..0b4d924 --- /dev/null +++ b/components/input_numbers/light_delays/long_light_off_delay_minutes.yaml @@ -0,0 +1,5 @@ +name: 'Long Light Off Delay - Minutes' +min: 0 +max: 480 +step: 1 +mode: box diff --git a/components/input_numbers/light_delays/long_light_off_delay_seconds.yaml b/components/input_numbers/light_delays/long_light_off_delay_seconds.yaml new file mode 100644 index 0000000..193f30c --- /dev/null +++ b/components/input_numbers/light_delays/long_light_off_delay_seconds.yaml @@ -0,0 +1,5 @@ +name: 'Long Light Off Delay - Seconds' +min: 0 +max: 900 +step: 1 +mode: box diff --git a/components/input_numbers/light_delays/normal_light_off_delay_hours.yaml b/components/input_numbers/light_delays/normal_light_off_delay_hours.yaml new file mode 100644 index 0000000..e2aa152 --- /dev/null +++ b/components/input_numbers/light_delays/normal_light_off_delay_hours.yaml @@ -0,0 +1,5 @@ +name: 'Normal Light Off Delay - Hours' +min: 0 +max: 48 +step: 1 +mode: box diff --git a/components/input_numbers/light_delays/normal_light_off_delay_minutes.yaml b/components/input_numbers/light_delays/normal_light_off_delay_minutes.yaml new file mode 100644 index 0000000..c94380e --- /dev/null +++ b/components/input_numbers/light_delays/normal_light_off_delay_minutes.yaml @@ -0,0 +1,5 @@ +name: 'Normal Light Off Delay - Minutes' +min: 0 +max: 480 +step: 1 +mode: box diff --git a/components/input_numbers/light_delays/normal_light_off_delay_seconds.yaml b/components/input_numbers/light_delays/normal_light_off_delay_seconds.yaml new file mode 100644 index 0000000..608ef13 --- /dev/null +++ b/components/input_numbers/light_delays/normal_light_off_delay_seconds.yaml @@ -0,0 +1,5 @@ +name: 'Normal Light Off Delay - Seconds' +min: 0 +max: 900 +step: 1 +mode: box diff --git a/components/input_numbers/light_delays/short_light_off_delay_hours.yaml b/components/input_numbers/light_delays/short_light_off_delay_hours.yaml new file mode 100644 index 0000000..0a96193 --- /dev/null +++ b/components/input_numbers/light_delays/short_light_off_delay_hours.yaml @@ -0,0 +1,5 @@ +name: 'Short Light Off Delay - Hours' +min: 0 +max: 48 +step: 1 +mode: box diff --git a/components/input_numbers/light_delays/short_light_off_delay_minutes.yaml b/components/input_numbers/light_delays/short_light_off_delay_minutes.yaml new file mode 100644 index 0000000..1bbcb19 --- /dev/null +++ b/components/input_numbers/light_delays/short_light_off_delay_minutes.yaml @@ -0,0 +1,5 @@ +name: 'Short Light Off Delay - Minutes' +min: 0 +max: 480 +step: 1 +mode: box diff --git a/components/input_numbers/light_delays/short_light_off_delay_seconds.yaml b/components/input_numbers/light_delays/short_light_off_delay_seconds.yaml new file mode 100644 index 0000000..992ed82 --- /dev/null +++ b/components/input_numbers/light_delays/short_light_off_delay_seconds.yaml @@ -0,0 +1,5 @@ +name: 'Short Light Off Delay - Seconds' +min: 0 +max: 900 +step: 1 +mode: box diff --git a/components/input_numbers/light_maximum.yaml b/components/input_numbers/light_maximum.yaml new file mode 100644 index 0000000..4e507bf --- /dev/null +++ b/components/input_numbers/light_maximum.yaml @@ -0,0 +1,5 @@ +name: 'Max Dim' +min: 50 +max: 255 +step: 1 +mode: slider diff --git a/components/input_numbers/light_minimum.yaml b/components/input_numbers/light_minimum.yaml new file mode 100644 index 0000000..cce5772 --- /dev/null +++ b/components/input_numbers/light_minimum.yaml @@ -0,0 +1,5 @@ +name: 'Min. Dim' +min: 1 +max: 255 +step: 1 +mode: slider diff --git a/components/input_numbers/light_scene_transition.yaml b/components/input_numbers/light_scene_transition.yaml new file mode 100644 index 0000000..aae8f56 --- /dev/null +++ b/components/input_numbers/light_scene_transition.yaml @@ -0,0 +1,5 @@ +name: Light Scene Transition +min: 0 +max: 1800 +step: 1 +mode: box \ No newline at end of file diff --git a/components/input_numbers/light_step.yaml b/components/input_numbers/light_step.yaml new file mode 100644 index 0000000..1d904bc --- /dev/null +++ b/components/input_numbers/light_step.yaml @@ -0,0 +1,5 @@ +name: 'Light Step' +min: 1 +max: 80 +step: 1 +mode: slider diff --git a/components/input_numbers/light_step_color.yaml b/components/input_numbers/light_step_color.yaml new file mode 100644 index 0000000..fa75256 --- /dev/null +++ b/components/input_numbers/light_step_color.yaml @@ -0,0 +1,5 @@ +name: 'Color Step' +min: 1 +max: 128 +step: 1 +mode: slider diff --git a/components/input_numbers/light_timeout.yaml b/components/input_numbers/light_timeout.yaml new file mode 100644 index 0000000..a84aea4 --- /dev/null +++ b/components/input_numbers/light_timeout.yaml @@ -0,0 +1,4 @@ +name: 'Light Timeout' +min: 1 +max: 60 +step: 1 diff --git a/components/input_numbers/master_bed/master_bed_loadcell_load.yaml b/components/input_numbers/master_bed/master_bed_loadcell_load.yaml new file mode 100644 index 0000000..c0572df --- /dev/null +++ b/components/input_numbers/master_bed/master_bed_loadcell_load.yaml @@ -0,0 +1,5 @@ +name: Master Bed LoadCell Load +icon: mdi:weight +min: -8388000 +max: 8388000 +mode: box \ No newline at end of file diff --git a/components/input_numbers/master_bed/master_bed_loadcell_weight.yaml b/components/input_numbers/master_bed/master_bed_loadcell_weight.yaml new file mode 100644 index 0000000..7c13a6f --- /dev/null +++ b/components/input_numbers/master_bed/master_bed_loadcell_weight.yaml @@ -0,0 +1,5 @@ +name: Master Bed LoadCell Weight +icon: mdi:weight-pound +min: 0 +max: 300 +mode: box \ No newline at end of file diff --git a/components/input_numbers/master_bed/master_bed_loadcell_zero.yaml b/components/input_numbers/master_bed/master_bed_loadcell_zero.yaml new file mode 100644 index 0000000..4a9a060 --- /dev/null +++ b/components/input_numbers/master_bed/master_bed_loadcell_zero.yaml @@ -0,0 +1,5 @@ +name: Master Bed LoadCell Zero +icon: mdi:weight +min: -8388000 +max: 8388000 +mode: box \ No newline at end of file diff --git a/components/input_numbers/master_bed/master_bed_occupied.yaml b/components/input_numbers/master_bed/master_bed_occupied.yaml new file mode 100644 index 0000000..1762e36 --- /dev/null +++ b/components/input_numbers/master_bed/master_bed_occupied.yaml @@ -0,0 +1,5 @@ +name: Master Bed Occupied +icon: mdi:weight-pound +min: 0 +max: 300 +mode: box \ No newline at end of file diff --git a/components/input_numbers/master_bedroom_fan_led.yaml b/components/input_numbers/master_bedroom_fan_led.yaml new file mode 100644 index 0000000..acef2cd --- /dev/null +++ b/components/input_numbers/master_bedroom_fan_led.yaml @@ -0,0 +1,5 @@ +name: Master Bedroom Fan LED +icon: mdi:fan +min: 0 +max: 83823359 +mode: box \ No newline at end of file diff --git a/components/input_numbers/master_bedroom_humidifier_off.yaml b/components/input_numbers/master_bedroom_humidifier_off.yaml new file mode 100644 index 0000000..a1080cc --- /dev/null +++ b/components/input_numbers/master_bedroom_humidifier_off.yaml @@ -0,0 +1,5 @@ +name: Master Bedroom Humidifier Off +icon: mdi:water-percent-alert +min: 1 +max: 100 +mode: box \ No newline at end of file diff --git a/components/input_numbers/master_bedroom_humidifier_on.yaml b/components/input_numbers/master_bedroom_humidifier_on.yaml new file mode 100644 index 0000000..47e649e --- /dev/null +++ b/components/input_numbers/master_bedroom_humidifier_on.yaml @@ -0,0 +1,5 @@ +name: Master Bedroom Humidifier On +icon: mdi:water-percent +min: 1 +max: 100 +mode: box \ No newline at end of file diff --git a/components/input_numbers/master_bedroom_light_cycle_brightness.yaml b/components/input_numbers/master_bedroom_light_cycle_brightness.yaml new file mode 100644 index 0000000..0bd63dd --- /dev/null +++ b/components/input_numbers/master_bedroom_light_cycle_brightness.yaml @@ -0,0 +1,5 @@ +name: Master Bedroom Light Cycle Brightness +icon: mdi:brightness-auto +min: 1 +max: 254 +mode: box \ No newline at end of file diff --git a/components/input_numbers/master_bedroom_light_cycle_transition.yaml b/components/input_numbers/master_bedroom_light_cycle_transition.yaml new file mode 100644 index 0000000..10f67f1 --- /dev/null +++ b/components/input_numbers/master_bedroom_light_cycle_transition.yaml @@ -0,0 +1,5 @@ +name: Master Bedroom Light Cycle Transition +icon: mdi:clock +min: 1 +max: 300 +mode: box \ No newline at end of file diff --git a/components/input_numbers/master_bedroom_light_led.yaml b/components/input_numbers/master_bedroom_light_led.yaml new file mode 100644 index 0000000..f9819c6 --- /dev/null +++ b/components/input_numbers/master_bedroom_light_led.yaml @@ -0,0 +1,5 @@ +name: Master Bedroom Light LED +icon: hass:lightbuilb +min: 0 +max: 83823359 +mode: box \ No newline at end of file diff --git a/components/input_numbers/master_bedroom_sunrise_transition.yaml b/components/input_numbers/master_bedroom_sunrise_transition.yaml new file mode 100644 index 0000000..97c4d3f --- /dev/null +++ b/components/input_numbers/master_bedroom_sunrise_transition.yaml @@ -0,0 +1,5 @@ +name: Master Bedroom Sunrise Transition +icon: hass:lightbuilb +min: 15 +max: 900 +mode: box \ No newline at end of file diff --git a/components/input_numbers/max_outside_temp.yaml b/components/input_numbers/max_outside_temp.yaml new file mode 100644 index 0000000..583e4e2 --- /dev/null +++ b/components/input_numbers/max_outside_temp.yaml @@ -0,0 +1,5 @@ +name: Max Outside Temp +min: 70 +max: 90 +step: 1 +mode: box diff --git a/components/input_numbers/microwave_on.yaml b/components/input_numbers/microwave_on.yaml new file mode 100644 index 0000000..19e9e3b --- /dev/null +++ b/components/input_numbers/microwave_on.yaml @@ -0,0 +1,6 @@ +name: 'Microwave On' +icon: mdi:microwave +min: 0 +max: 10000 +step: 0.1 +mode: box \ No newline at end of file diff --git a/components/input_numbers/nursery_light_cycle_brightness.yaml b/components/input_numbers/nursery_light_cycle_brightness.yaml new file mode 100644 index 0000000..8da21dd --- /dev/null +++ b/components/input_numbers/nursery_light_cycle_brightness.yaml @@ -0,0 +1,5 @@ +name: Nursery Light Cycle Brightness +icon: mdi:brightness-auto +min: 1 +max: 254 +mode: box \ No newline at end of file diff --git a/components/input_numbers/nursery_light_cycle_transition.yaml b/components/input_numbers/nursery_light_cycle_transition.yaml new file mode 100644 index 0000000..573c03b --- /dev/null +++ b/components/input_numbers/nursery_light_cycle_transition.yaml @@ -0,0 +1,5 @@ +name: Nursery Light Cycle Transition +icon: mdi:clock +min: 1 +max: 300 +mode: box \ No newline at end of file diff --git a/components/input_numbers/outdoor_light_levels/is_dark.yaml b/components/input_numbers/outdoor_light_levels/is_dark.yaml new file mode 100644 index 0000000..43367f1 --- /dev/null +++ b/components/input_numbers/outdoor_light_levels/is_dark.yaml @@ -0,0 +1,5 @@ +name: 'Is Dark' +min: 0 +max: 1000 +step: 1 +mode: box \ No newline at end of file diff --git a/components/input_numbers/outdoor_light_levels/is_daylight.yaml b/components/input_numbers/outdoor_light_levels/is_daylight.yaml new file mode 100644 index 0000000..0724e17 --- /dev/null +++ b/components/input_numbers/outdoor_light_levels/is_daylight.yaml @@ -0,0 +1,5 @@ +name: 'Is Daylight' +min: 0 +max: 1000 +step: 1 +mode: box diff --git a/components/input_numbers/outdoor_light_levels/is_dim.yaml b/components/input_numbers/outdoor_light_levels/is_dim.yaml new file mode 100644 index 0000000..fd9f792 --- /dev/null +++ b/components/input_numbers/outdoor_light_levels/is_dim.yaml @@ -0,0 +1,5 @@ +name: 'Is Dim' +min: 0 +max: 1000 +step: 1 +mode: box diff --git a/components/input_numbers/room_dark.yaml b/components/input_numbers/room_dark.yaml new file mode 100644 index 0000000..ee82785 --- /dev/null +++ b/components/input_numbers/room_dark.yaml @@ -0,0 +1,5 @@ +name: 'Dark Lux' +min: 0 +max: 15 +step: 1 +mode: slider diff --git a/components/input_numbers/room_low_light.yaml b/components/input_numbers/room_low_light.yaml new file mode 100644 index 0000000..ceb79e6 --- /dev/null +++ b/components/input_numbers/room_low_light.yaml @@ -0,0 +1,5 @@ +name: 'Low Lux' +min: 5 +max: 30 +step: 1 +mode: slider diff --git a/components/input_numbers/stove_on.yaml b/components/input_numbers/stove_on.yaml new file mode 100644 index 0000000..aec6792 --- /dev/null +++ b/components/input_numbers/stove_on.yaml @@ -0,0 +1,6 @@ +name: 'Stove On' +icon: mdi:stove +min: 0 +max: 10000 +step: 0.1 +mode: box \ No newline at end of file diff --git a/components/input_numbers/sump_pump_on.yaml b/components/input_numbers/sump_pump_on.yaml new file mode 100644 index 0000000..21bf345 --- /dev/null +++ b/components/input_numbers/sump_pump_on.yaml @@ -0,0 +1,6 @@ +name: 'Sump Pump On' +icon: mdi:pump +min: 0 +max: 10000 +step: 0.1 +mode: box \ No newline at end of file diff --git a/components/input_numbers/temperature_too_high.yaml b/components/input_numbers/temperature_too_high.yaml new file mode 100644 index 0000000..072ea81 --- /dev/null +++ b/components/input_numbers/temperature_too_high.yaml @@ -0,0 +1,6 @@ +name: Temperature Too High +icon: mdi:thermometer-chevron-up +min: 1 +max: 100 +step: 1 +mode: box \ No newline at end of file diff --git a/components/input_numbers/temperature_too_low.yaml b/components/input_numbers/temperature_too_low.yaml new file mode 100644 index 0000000..74238d9 --- /dev/null +++ b/components/input_numbers/temperature_too_low.yaml @@ -0,0 +1,6 @@ +name: Temperature Too Low +icon: mdi:thermometer-chevron-down +min: 1 +max: 100 +step: 1 +mode: box \ No newline at end of file diff --git a/components/input_numbers/white_bed/white_bed_loadcell_load.yaml b/components/input_numbers/white_bed/white_bed_loadcell_load.yaml new file mode 100644 index 0000000..30bdc8b --- /dev/null +++ b/components/input_numbers/white_bed/white_bed_loadcell_load.yaml @@ -0,0 +1,5 @@ +name: White Bed LoadCell Load +icon: mdi:weight +min: -8388000 +max: 8388000 +mode: box \ No newline at end of file diff --git a/components/input_numbers/white_bed/white_bed_loadcell_weight.yaml b/components/input_numbers/white_bed/white_bed_loadcell_weight.yaml new file mode 100644 index 0000000..488a3b3 --- /dev/null +++ b/components/input_numbers/white_bed/white_bed_loadcell_weight.yaml @@ -0,0 +1,5 @@ +name: White Bed LoadCell Weight +icon: mdi:weight-pound +min: 0 +max: 300 +mode: box \ No newline at end of file diff --git a/components/input_numbers/white_bed/white_bed_loadcell_zero.yaml b/components/input_numbers/white_bed/white_bed_loadcell_zero.yaml new file mode 100644 index 0000000..b0c8449 --- /dev/null +++ b/components/input_numbers/white_bed/white_bed_loadcell_zero.yaml @@ -0,0 +1,5 @@ +name: White Bed LoadCell Zero +icon: mdi:weight +min: -8388000 +max: 8388000 +mode: box \ No newline at end of file diff --git a/components/input_numbers/white_bed/white_bed_occupied.yaml b/components/input_numbers/white_bed/white_bed_occupied.yaml new file mode 100644 index 0000000..f47494b --- /dev/null +++ b/components/input_numbers/white_bed/white_bed_occupied.yaml @@ -0,0 +1,5 @@ +name: White Bed Occupied +icon: mdi:weight +min: 0 +max: 300 +mode: box \ No newline at end of file diff --git a/components/input_numbers/wind_speed_blowing_rain.yaml b/components/input_numbers/wind_speed_blowing_rain.yaml new file mode 100644 index 0000000..4bc66cb --- /dev/null +++ b/components/input_numbers/wind_speed_blowing_rain.yaml @@ -0,0 +1,7 @@ +name: Wind Speed Blowing Rain +min: 0 +max: 50 +step: 1 +mode: box +unit_of_measurement: mph +icon: mdi:weather-windy diff --git a/components/input_selects/README.md b/components/input_selects/README.md new file mode 100644 index 0000000..3fad472 --- /dev/null +++ b/components/input_selects/README.md @@ -0,0 +1,15 @@ +# Input Selects + +Component: [input select](https://home-assistant.io/components/input_select/) + +## People + +For use with Phil Hawthorne's [making presence detection not so binary](https://philhawthorne.com/making-home-assistants-presence-detection-not-so-binary/) automations. + +## Rooms + +I split up a lot of the room based logic, turning a smaller number of monster automations into a larger number of simpler automations. These set and use these input selects, which indicate the state of the room. + +## Season + +For use in various lighting automations (and probably others in the future). While it's called season, it also covers other events. diff --git a/components/input_selects/assistant_relay_presets.yaml b/components/input_selects/assistant_relay_presets.yaml new file mode 100644 index 0000000..8b83a1c --- /dev/null +++ b/components/input_selects/assistant_relay_presets.yaml @@ -0,0 +1,12 @@ +name: Assistant Relay Presets +options: + - Wake Up + - Breakfast + - Lunch + - Dinner + - Time To Leave + - Arrived Home + - On The Way + - Movie Time + - TV Time + - Bedtime diff --git a/components/input_selects/automatic_light_profile.yaml b/components/input_selects/automatic_light_profile.yaml new file mode 100644 index 0000000..9f140c3 --- /dev/null +++ b/components/input_selects/automatic_light_profile.yaml @@ -0,0 +1,10 @@ +name: Automatic Light Profile +options: + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' \ No newline at end of file diff --git a/components/input_selects/cameras/camera_01.yaml b/components/input_selects/cameras/camera_01.yaml new file mode 100644 index 0000000..f10b479 --- /dev/null +++ b/components/input_selects/cameras/camera_01.yaml @@ -0,0 +1,3 @@ +name: Camera01 Preset +options: + - Static \ No newline at end of file diff --git a/components/input_selects/cameras/camera_02.yaml b/components/input_selects/cameras/camera_02.yaml new file mode 100644 index 0000000..d97b924 --- /dev/null +++ b/components/input_selects/cameras/camera_02.yaml @@ -0,0 +1,3 @@ +name: Camera02 Preset +options: + - Static \ No newline at end of file diff --git a/components/input_selects/cameras/camera_03.yaml b/components/input_selects/cameras/camera_03.yaml new file mode 100644 index 0000000..2c01cbe --- /dev/null +++ b/components/input_selects/cameras/camera_03.yaml @@ -0,0 +1,3 @@ +name: Camera03 Preset +options: + - Static \ No newline at end of file diff --git a/components/input_selects/cameras/camera_04.yaml b/components/input_selects/cameras/camera_04.yaml new file mode 100644 index 0000000..67700e9 --- /dev/null +++ b/components/input_selects/cameras/camera_04.yaml @@ -0,0 +1,3 @@ +name: Camera04 Preset +options: + - Static \ No newline at end of file diff --git a/components/input_selects/cameras/camera_05.yaml b/components/input_selects/cameras/camera_05.yaml new file mode 100644 index 0000000..ec7604d --- /dev/null +++ b/components/input_selects/cameras/camera_05.yaml @@ -0,0 +1,3 @@ +name: Camera05 Preset +options: + - Static \ No newline at end of file diff --git a/components/input_selects/cameras/camera_06.yaml b/components/input_selects/cameras/camera_06.yaml new file mode 100644 index 0000000..7a53322 --- /dev/null +++ b/components/input_selects/cameras/camera_06.yaml @@ -0,0 +1,9 @@ +name: Camera06 Preset +options: + - Static + + #1 Zoomed out bed - s/b door + #2 Zoomed in a bit bed -s/b bed + #3 = 1 - s/b window + #4 floor -s/b floor + #5 privacy -s/b privacy \ No newline at end of file diff --git a/components/input_selects/cameras/camera_06_and_07.yaml b/components/input_selects/cameras/camera_06_and_07.yaml new file mode 100644 index 0000000..a922c45 --- /dev/null +++ b/components/input_selects/cameras/camera_06_and_07.yaml @@ -0,0 +1,7 @@ +name: Camera06 and Camera07 Preset +options: + - Door + - Bed + - Window + - Floor + - Privacy \ No newline at end of file diff --git a/components/input_selects/cameras/camera_07.yaml b/components/input_selects/cameras/camera_07.yaml new file mode 100644 index 0000000..49509b9 --- /dev/null +++ b/components/input_selects/cameras/camera_07.yaml @@ -0,0 +1,9 @@ +name: Camera07 Preset +options: + - Static + +# 1 bed - s/b door +# 2 sleeping - s/b bed +# 3 better-ish bed - s/b window +# 4 floor - s/b floor +# 5 privacy - s/b privacy \ No newline at end of file diff --git a/components/input_selects/cameras/camera_08.yaml b/components/input_selects/cameras/camera_08.yaml new file mode 100644 index 0000000..06552ce --- /dev/null +++ b/components/input_selects/cameras/camera_08.yaml @@ -0,0 +1,3 @@ +name: Camera08 Preset +options: + - Static \ No newline at end of file diff --git a/components/input_selects/cameras/camera_09.yaml b/components/input_selects/cameras/camera_09.yaml new file mode 100644 index 0000000..c84cf22 --- /dev/null +++ b/components/input_selects/cameras/camera_09.yaml @@ -0,0 +1,3 @@ +name: Camera09 Preset +options: + - Static \ No newline at end of file diff --git a/components/input_selects/cameras/camera_10.yaml b/components/input_selects/cameras/camera_10.yaml new file mode 100644 index 0000000..6e5a614 --- /dev/null +++ b/components/input_selects/cameras/camera_10.yaml @@ -0,0 +1,3 @@ +name: Camera 10 Preset +options: + - 'Static' \ No newline at end of file diff --git a/components/input_selects/cameras/camera_11.yaml b/components/input_selects/cameras/camera_11.yaml new file mode 100644 index 0000000..f772670 --- /dev/null +++ b/components/input_selects/cameras/camera_11.yaml @@ -0,0 +1,3 @@ +name: Camera 11 Preset +options: + - 'Static' \ No newline at end of file diff --git a/components/input_selects/cameras/camera_12.yaml b/components/input_selects/cameras/camera_12.yaml new file mode 100644 index 0000000..bd4d8e5 --- /dev/null +++ b/components/input_selects/cameras/camera_12.yaml @@ -0,0 +1,3 @@ +name: Camera12 Preset +options: + - Static \ No newline at end of file diff --git a/components/input_selects/cameras/indoor_camera_cycle.yaml b/components/input_selects/cameras/indoor_camera_cycle.yaml new file mode 100644 index 0000000..cddb48a --- /dev/null +++ b/components/input_selects/cameras/indoor_camera_cycle.yaml @@ -0,0 +1,9 @@ +name: Indoor Camera Cycle +options: + - Nursery + - Kitchen + - Front Room + - Computer Area + - Bedroom Left + - Bedroom Right + - Blue Room \ No newline at end of file diff --git a/components/input_selects/cameras/master_bedroom_camera.yaml b/components/input_selects/cameras/master_bedroom_camera.yaml new file mode 100644 index 0000000..918d243 --- /dev/null +++ b/components/input_selects/cameras/master_bedroom_camera.yaml @@ -0,0 +1,4 @@ +name: Master Bedroom Camera +options: + - Left + - Right \ No newline at end of file diff --git a/components/input_selects/cameras/outdoor_camera_cycle.yaml b/components/input_selects/cameras/outdoor_camera_cycle.yaml new file mode 100644 index 0000000..f56b0c5 --- /dev/null +++ b/components/input_selects/cameras/outdoor_camera_cycle.yaml @@ -0,0 +1,6 @@ +name: Outdoor Camera Cycle +options: + - Garage + - Front Porch + - Front Yard + - Back Yard \ No newline at end of file diff --git a/components/input_selects/floor.yaml b/components/input_selects/floor.yaml new file mode 100644 index 0000000..8c22c69 --- /dev/null +++ b/components/input_selects/floor.yaml @@ -0,0 +1,7 @@ +name: Floor +icon: mdi:floor-plan +initial: First +options: + - First + - Ground + - Basement diff --git a/components/input_selects/people/bridget_status_dropdown.yaml b/components/input_selects/people/bridget_status_dropdown.yaml new file mode 100644 index 0000000..8b83b5d --- /dev/null +++ b/components/input_selects/people/bridget_status_dropdown.yaml @@ -0,0 +1,7 @@ +name: Bridget +options: + - Home + - Just Arrived + - Just Left + - Away + - Extended Away diff --git a/components/input_selects/people/clint_status_dropdown.yaml b/components/input_selects/people/clint_status_dropdown.yaml new file mode 100644 index 0000000..9dbeb11 --- /dev/null +++ b/components/input_selects/people/clint_status_dropdown.yaml @@ -0,0 +1,7 @@ +name: Clint +options: + - Home + - Just Arrived + - Just Left + - Away + - Extended Away \ No newline at end of file diff --git a/components/input_selects/people/ebin_status_dropdown.yaml b/components/input_selects/people/ebin_status_dropdown.yaml new file mode 100644 index 0000000..34e3350 --- /dev/null +++ b/components/input_selects/people/ebin_status_dropdown.yaml @@ -0,0 +1,7 @@ +name: Ebin +options: + - Home + - Just Arrived + - Just Left + - Away + - Extended Away \ No newline at end of file diff --git a/components/input_selects/people/emmett_status_dropdown.yaml b/components/input_selects/people/emmett_status_dropdown.yaml new file mode 100644 index 0000000..d79dd0a --- /dev/null +++ b/components/input_selects/people/emmett_status_dropdown.yaml @@ -0,0 +1,7 @@ +name: Emmett +options: + - Home + - Just Arrived + - Just Left + - Away + - Extended Away \ No newline at end of file diff --git a/components/input_selects/people/family_status_dropdown.yaml b/components/input_selects/people/family_status_dropdown.yaml new file mode 100644 index 0000000..1aafc4b --- /dev/null +++ b/components/input_selects/people/family_status_dropdown.yaml @@ -0,0 +1,7 @@ +name: Family +options: + - Home + - Just Arrived + - Just Left + - Away + - Extended Away \ No newline at end of file diff --git a/components/input_selects/people/guest_status_dropdown.yaml b/components/input_selects/people/guest_status_dropdown.yaml new file mode 100644 index 0000000..94d2c1c --- /dev/null +++ b/components/input_selects/people/guest_status_dropdown.yaml @@ -0,0 +1,7 @@ +name: Guest +options: + - Home + - Just Arrived + - Just Left + - Away + - Extended Away \ No newline at end of file diff --git a/components/input_selects/people/kristy_status_dropdown.yaml b/components/input_selects/people/kristy_status_dropdown.yaml new file mode 100644 index 0000000..fcaab67 --- /dev/null +++ b/components/input_selects/people/kristy_status_dropdown.yaml @@ -0,0 +1,7 @@ +name: Kristy +options: + - Home + - Just Arrived + - Just Left + - Away + - Extended Away \ No newline at end of file diff --git a/components/input_selects/people/marshall_status_dropdown.yaml b/components/input_selects/people/marshall_status_dropdown.yaml new file mode 100644 index 0000000..6bcf93c --- /dev/null +++ b/components/input_selects/people/marshall_status_dropdown.yaml @@ -0,0 +1,7 @@ +name: Marshall +options: + - Home + - Just Arrived + - Just Left + - Away + - Extended Away \ No newline at end of file diff --git a/components/input_selects/people/podein_kids.yaml b/components/input_selects/people/podein_kids.yaml new file mode 100644 index 0000000..abb7894 --- /dev/null +++ b/components/input_selects/people/podein_kids.yaml @@ -0,0 +1,5 @@ +name: Podein Kids +options: + - Auto + - Home + - Away diff --git a/components/input_selects/people/tess_status_dropdown.yaml b/components/input_selects/people/tess_status_dropdown.yaml new file mode 100644 index 0000000..a3a3c6a --- /dev/null +++ b/components/input_selects/people/tess_status_dropdown.yaml @@ -0,0 +1,7 @@ +name: Tess +options: + - Home + - Just Arrived + - Just Left + - Away + - Extended Away \ No newline at end of file diff --git a/components/input_selects/people/weaver_kids.yaml b/components/input_selects/people/weaver_kids.yaml new file mode 100644 index 0000000..d67feb3 --- /dev/null +++ b/components/input_selects/people/weaver_kids.yaml @@ -0,0 +1,5 @@ +name: Weaver Kids +options: + - Auto + - Home + - Away diff --git a/components/input_selects/rooms/blue_room_light_off_delay.yaml b/components/input_selects/rooms/blue_room_light_off_delay.yaml new file mode 100644 index 0000000..b19da4f --- /dev/null +++ b/components/input_selects/rooms/blue_room_light_off_delay.yaml @@ -0,0 +1,5 @@ +name: Blue Room Light Off Delay +options: + - 'Normal' + - 'Long' + - 'Short' diff --git a/components/input_selects/rooms/blue_room_mode.yaml b/components/input_selects/rooms/blue_room_mode.yaml new file mode 100644 index 0000000..887b8f9 --- /dev/null +++ b/components/input_selects/rooms/blue_room_mode.yaml @@ -0,0 +1,13 @@ +name: Blue Room Mode +options: + - 'Auto' + - 'Manual' + - 'Off' + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' diff --git a/components/input_selects/rooms/computer_area_color_set.yaml b/components/input_selects/rooms/computer_area_color_set.yaml new file mode 100644 index 0000000..dfad622 --- /dev/null +++ b/components/input_selects/rooms/computer_area_color_set.yaml @@ -0,0 +1,32 @@ +name: Computer Area Color Set +options: + - Basic +#'white','black','red','orange','yellow','green','blue','purple','pink','brown','gray' + - Color Wheel +#'red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta' + - Rainbow +#'red','orange','yellow','green','blue','indigo','violet' + - Flourescent +#'radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz' + - Silver Swirl +#'aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream' + - Gem Tones +#'amethyst','citrine','emerald','jade','lapis_lazuli','malachite','onyx','rose_quartz','ruby','sapphire','smokey_topaz' + - Reds +#'auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine' + - Oranges +#'beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown' + - Yellows +#'amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla' + - Greens +#'army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green' + - Cyans +#'aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian' + - Blues +#'azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine' + - Purples +#'byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple' + - Magentas +#'amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink' + - Grays +#'ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray' \ No newline at end of file diff --git a/components/input_selects/rooms/computer_area_light_off_delay.yaml b/components/input_selects/rooms/computer_area_light_off_delay.yaml new file mode 100644 index 0000000..6a4734b --- /dev/null +++ b/components/input_selects/rooms/computer_area_light_off_delay.yaml @@ -0,0 +1,5 @@ +name: Computer Area Light Off Delay +options: + - 'Normal' + - 'Long' + - 'Short' diff --git a/components/input_selects/rooms/computer_area_mode.yaml b/components/input_selects/rooms/computer_area_mode.yaml new file mode 100644 index 0000000..c01cc2a --- /dev/null +++ b/components/input_selects/rooms/computer_area_mode.yaml @@ -0,0 +1,13 @@ +name: Computer Area Mode +options: + - 'Auto' + - 'Manual' + - 'Off' + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' diff --git a/components/input_selects/rooms/dining_room_light_off_delay.yaml b/components/input_selects/rooms/dining_room_light_off_delay.yaml new file mode 100644 index 0000000..fb4af89 --- /dev/null +++ b/components/input_selects/rooms/dining_room_light_off_delay.yaml @@ -0,0 +1,5 @@ +name: Dining Room Light Off Delay +options: + - 'Normal' + - 'Long' + - 'Short' diff --git a/components/input_selects/rooms/dining_room_mode.yaml b/components/input_selects/rooms/dining_room_mode.yaml new file mode 100644 index 0000000..ecbea86 --- /dev/null +++ b/components/input_selects/rooms/dining_room_mode.yaml @@ -0,0 +1,13 @@ +name: Dining Room Mode +options: + - 'Auto' + - 'Manual' + - 'Off' + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' diff --git a/components/input_selects/rooms/entryway_light_off_delay.yaml b/components/input_selects/rooms/entryway_light_off_delay.yaml new file mode 100644 index 0000000..4b0c33b --- /dev/null +++ b/components/input_selects/rooms/entryway_light_off_delay.yaml @@ -0,0 +1,5 @@ +name: Entryway Light Off Delay +options: + - 'Normal' + - 'Long' + - 'Short' diff --git a/components/input_selects/rooms/entryway_mode.yaml b/components/input_selects/rooms/entryway_mode.yaml new file mode 100644 index 0000000..3ece25e --- /dev/null +++ b/components/input_selects/rooms/entryway_mode.yaml @@ -0,0 +1,13 @@ +name: Entryway Mode +options: + - 'Auto' + - 'Manual' + - 'Off' + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' \ No newline at end of file diff --git a/components/input_selects/rooms/front_room_color_set.yaml b/components/input_selects/rooms/front_room_color_set.yaml new file mode 100644 index 0000000..de3c426 --- /dev/null +++ b/components/input_selects/rooms/front_room_color_set.yaml @@ -0,0 +1,32 @@ +name: Front Room Color Set +options: + - Basic +#'white','black','red','orange','yellow','green','blue','purple','pink','brown','gray' + - Color Wheel +#'red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta' + - Rainbow +#'red','orange','yellow','green','blue','indigo','violet' + - Flourescent +#'radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz' + - Silver Swirl +#'aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream' + - Gem Tones +#'amethyst','citrine','emerald','jade','lapis_lazuli','malachite','onyx','rose_quartz','ruby','sapphire','smokey_topaz' + - Reds +#'auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine' + - Oranges +#'beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown' + - Yellows +#'amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla' + - Greens +#'army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green' + - Cyans +#'aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian' + - Blues +#'azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine' + - Purples +#'byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple' + - Magentas +#'amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink' + - Grays +#'ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray' \ No newline at end of file diff --git a/components/input_selects/rooms/front_room_light_off_delay.yaml b/components/input_selects/rooms/front_room_light_off_delay.yaml new file mode 100644 index 0000000..0cd4477 --- /dev/null +++ b/components/input_selects/rooms/front_room_light_off_delay.yaml @@ -0,0 +1,5 @@ +name: Front Room Light Off Delay +options: + - 'Normal' + - 'Long' + - 'Short' diff --git a/components/input_selects/rooms/front_room_mode.yaml b/components/input_selects/rooms/front_room_mode.yaml new file mode 100644 index 0000000..44e5901 --- /dev/null +++ b/components/input_selects/rooms/front_room_mode.yaml @@ -0,0 +1,13 @@ +name: Front Room Mode +options: + - 'Auto' + - 'Manual' + - 'Off' + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' diff --git a/components/input_selects/rooms/great_room_color_set.yaml b/components/input_selects/rooms/great_room_color_set.yaml new file mode 100644 index 0000000..5d98f99 --- /dev/null +++ b/components/input_selects/rooms/great_room_color_set.yaml @@ -0,0 +1,32 @@ +name: Great Room Color Set +options: + - Basic +#'white','black','red','orange','yellow','green','blue','purple','pink','brown','gray' + - Color Wheel +#'red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta' + - Rainbow +#'red','orange','yellow','green','blue','indigo','violet' + - Flourescent +#'radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz' + - Silver Swirl +#'aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream' + - Gem Tones +#'amethyst','citrine','emerald','jade','lapis_lazuli','malachite','onyx','rose_quartz','ruby','sapphire','smokey_topaz' + - Reds +#'auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine' + - Oranges +#'beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown' + - Yellows +#'amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla' + - Greens +#'army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green' + - Cyans +#'aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian' + - Blues +#'azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine' + - Purples +#'byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple' + - Magentas +#'amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink' + - Grays +#'ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray' \ No newline at end of file diff --git a/components/input_selects/rooms/great_room_light_off_delay.yaml b/components/input_selects/rooms/great_room_light_off_delay.yaml new file mode 100644 index 0000000..de48a10 --- /dev/null +++ b/components/input_selects/rooms/great_room_light_off_delay.yaml @@ -0,0 +1,5 @@ +name: Great Room Light Off Delay +options: + - 'Normal' + - 'Long' + - 'Short' diff --git a/components/input_selects/rooms/great_room_mode.yaml b/components/input_selects/rooms/great_room_mode.yaml new file mode 100644 index 0000000..3d648db --- /dev/null +++ b/components/input_selects/rooms/great_room_mode.yaml @@ -0,0 +1,13 @@ +name: Great Room Mode +options: + - 'Auto' + - 'Manual' + - 'Off' + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' diff --git a/components/input_selects/rooms/house.yaml b/components/input_selects/rooms/house.yaml new file mode 100644 index 0000000..285d4fb --- /dev/null +++ b/components/input_selects/rooms/house.yaml @@ -0,0 +1,14 @@ +name: House +options: + # Auto mode - automate everything with regular timers and regular motion sensors + - 'Auto' + # Away mode - ignore motion (due to dog), but possibly randomize lights turning off and on + - 'Away' + # Bachelor mode - automate everything and have short timeouts and modified motion sensors + - 'Bachelor' + # Single Dad mode - automate everything with regular timers, but dim things earlier for bedtime + - 'Dad' + # Guest mode - automate brightness, but rely on manual light switches + - 'Guest' + # Manual mode - rely on manual light switches and mimic incandescent lights + - 'Manual' diff --git a/components/input_selects/rooms/kitchen_light_off_delay.yaml b/components/input_selects/rooms/kitchen_light_off_delay.yaml new file mode 100644 index 0000000..7bbe9c5 --- /dev/null +++ b/components/input_selects/rooms/kitchen_light_off_delay.yaml @@ -0,0 +1,5 @@ +name: Kitchen Light Off Delay +options: + - 'Normal' + - 'Long' + - 'Short' diff --git a/components/input_selects/rooms/kitchen_mode.yaml b/components/input_selects/rooms/kitchen_mode.yaml new file mode 100644 index 0000000..d1d4193 --- /dev/null +++ b/components/input_selects/rooms/kitchen_mode.yaml @@ -0,0 +1,13 @@ +name: Kitchen Mode +options: + - 'Auto' + - 'Manual' + - 'Off' + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' diff --git a/components/input_selects/rooms/mancave_light_off_delay.yaml b/components/input_selects/rooms/mancave_light_off_delay.yaml new file mode 100644 index 0000000..c103e8a --- /dev/null +++ b/components/input_selects/rooms/mancave_light_off_delay.yaml @@ -0,0 +1,5 @@ +name: Mancave Light Off Delay +options: + - 'Normal' + - 'Long' + - 'Short' diff --git a/components/input_selects/rooms/mancave_mode.yaml b/components/input_selects/rooms/mancave_mode.yaml new file mode 100644 index 0000000..1239915 --- /dev/null +++ b/components/input_selects/rooms/mancave_mode.yaml @@ -0,0 +1,13 @@ +name: Mancave Mode +options: + - 'Auto' + - 'Manual' + - 'Off' + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' diff --git a/components/input_selects/rooms/master_bathroom_light_off_delay.yaml b/components/input_selects/rooms/master_bathroom_light_off_delay.yaml new file mode 100644 index 0000000..812ce72 --- /dev/null +++ b/components/input_selects/rooms/master_bathroom_light_off_delay.yaml @@ -0,0 +1,5 @@ +name: Master Bathroom Light Off Delay +options: + - 'Normal' + - 'Long' + - 'Short' diff --git a/components/input_selects/rooms/master_bathroom_mode.yaml b/components/input_selects/rooms/master_bathroom_mode.yaml new file mode 100644 index 0000000..77f1152 --- /dev/null +++ b/components/input_selects/rooms/master_bathroom_mode.yaml @@ -0,0 +1,13 @@ +name: Master Bathroom Mode +options: + - 'Auto' + - 'Manual' + - 'Off' + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' diff --git a/components/input_selects/rooms/master_bedroom_color_set.yaml b/components/input_selects/rooms/master_bedroom_color_set.yaml new file mode 100644 index 0000000..0bfbc6a --- /dev/null +++ b/components/input_selects/rooms/master_bedroom_color_set.yaml @@ -0,0 +1,32 @@ +name: Master Bedroom Color Set +options: + - Basic +#'white','black','red','orange','yellow','green','blue','purple','pink','brown','gray' + - Color Wheel +#'red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta' + - Rainbow +#'red','orange','yellow','green','blue','indigo','violet' + - Flourescent +#'radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz' + - Silver Swirl +#'aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream' + - Gem Tones +#'amethyst','citrine','emerald','jade','lapis_lazuli','malachite','onyx','rose_quartz','ruby','sapphire','smokey_topaz' + - Reds +#'auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine' + - Oranges +#'beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown' + - Yellows +#'amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla' + - Greens +#'army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green' + - Cyans +#'aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian' + - Blues +#'azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine' + - Purples +#'byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple' + - Magentas +#'amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink' + - Grays +#'ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray' \ No newline at end of file diff --git a/components/input_selects/rooms/master_bedroom_light_off_delay.yaml b/components/input_selects/rooms/master_bedroom_light_off_delay.yaml new file mode 100644 index 0000000..25069b4 --- /dev/null +++ b/components/input_selects/rooms/master_bedroom_light_off_delay.yaml @@ -0,0 +1,5 @@ +name: Master Bedroom Light Off Delay +options: + - 'Normal' + - 'Long' + - 'Short' diff --git a/components/input_selects/rooms/master_bedroom_mode.yaml b/components/input_selects/rooms/master_bedroom_mode.yaml new file mode 100644 index 0000000..dd426f1 --- /dev/null +++ b/components/input_selects/rooms/master_bedroom_mode.yaml @@ -0,0 +1,13 @@ +name: Master Bedroom Mode +options: + - 'Auto' + - 'Manual' + - 'Off' + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' diff --git a/components/input_selects/rooms/nursery_color_set.yaml b/components/input_selects/rooms/nursery_color_set.yaml new file mode 100644 index 0000000..d41e970 --- /dev/null +++ b/components/input_selects/rooms/nursery_color_set.yaml @@ -0,0 +1,32 @@ +name: Nursery Color Set +options: + - Basic +#'white','black','red','orange','yellow','green','blue','purple','pink','brown','gray' + - Color Wheel +#'red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta' + - Rainbow +#'red','orange','yellow','green','blue','indigo','violet' + - Flourescent +#'radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz' + - Silver Swirl +#'aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream' + - Gem Tones +#'amethyst','citrine','emerald','jade','lapis_lazuli','malachite','onyx','rose_quartz','ruby','sapphire','smokey_topaz' + - Reds +#'auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine' + - Oranges +#'beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown' + - Yellows +#'amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla' + - Greens +#'army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green' + - Cyans +#'aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian' + - Blues +#'azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine' + - Purples +#'byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple' + - Magentas +#'amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink' + - Grays +#'ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray' \ No newline at end of file diff --git a/components/input_selects/rooms/nursery_light_off_delay.yaml b/components/input_selects/rooms/nursery_light_off_delay.yaml new file mode 100644 index 0000000..a7a5074 --- /dev/null +++ b/components/input_selects/rooms/nursery_light_off_delay.yaml @@ -0,0 +1,5 @@ +name: Nursery Light Off Delay +options: + - 'Normal' + - 'Long' + - 'Short' diff --git a/components/input_selects/rooms/nursery_mode.yaml b/components/input_selects/rooms/nursery_mode.yaml new file mode 100644 index 0000000..3af1014 --- /dev/null +++ b/components/input_selects/rooms/nursery_mode.yaml @@ -0,0 +1,13 @@ +name: Nursery Mode +options: + - 'Auto' + - 'Manual' + - 'Off' + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' diff --git a/components/input_selects/rooms/utility_room_light_off_delay.yaml b/components/input_selects/rooms/utility_room_light_off_delay.yaml new file mode 100644 index 0000000..5a6d795 --- /dev/null +++ b/components/input_selects/rooms/utility_room_light_off_delay.yaml @@ -0,0 +1,5 @@ +name: Utility Room Light Off Delay +options: + - 'Normal' + - 'Long' + - 'Short' diff --git a/components/input_selects/rooms/utility_room_mode.yaml b/components/input_selects/rooms/utility_room_mode.yaml new file mode 100644 index 0000000..b6aca00 --- /dev/null +++ b/components/input_selects/rooms/utility_room_mode.yaml @@ -0,0 +1,13 @@ +name: Utility Room Mode +options: + - 'Auto' + - 'Manual' + - 'Off' + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' diff --git a/components/input_selects/season.yaml b/components/input_selects/season.yaml new file mode 100644 index 0000000..594f9ba --- /dev/null +++ b/components/input_selects/season.yaml @@ -0,0 +1,11 @@ +name: Season +icon: mdi:calendar-question +options: + - Celebration + - Christmas + - Halloween + - Easter + - Winter + - Spring + - Summer + - Autumn diff --git a/components/input_selects/time_of_day.yaml b/components/input_selects/time_of_day.yaml new file mode 100644 index 0000000..f53988e --- /dev/null +++ b/components/input_selects/time_of_day.yaml @@ -0,0 +1,12 @@ +name: Time of Day +icon: mdi:clock +options: + - Early Morning + - Morning + - Late Morning + - Early Afternoon + - Late Afternoon + - Early Evening + - Evening + - Late Evening + - Night diff --git a/components/input_selects/time_of_day/early_afternoon_kids_mode.yaml b/components/input_selects/time_of_day/early_afternoon_kids_mode.yaml new file mode 100644 index 0000000..00d0cb8 --- /dev/null +++ b/components/input_selects/time_of_day/early_afternoon_kids_mode.yaml @@ -0,0 +1,11 @@ +name: Early Afternoon Kids Mode +options: + - 'Off' + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' diff --git a/components/input_selects/time_of_day/early_afternoon_mode.yaml b/components/input_selects/time_of_day/early_afternoon_mode.yaml new file mode 100644 index 0000000..dddb2e6 --- /dev/null +++ b/components/input_selects/time_of_day/early_afternoon_mode.yaml @@ -0,0 +1,11 @@ +name: Early Afternoon Mode +options: + - 'Off' + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' diff --git a/components/input_selects/time_of_day/early_evening_kids_mode.yaml b/components/input_selects/time_of_day/early_evening_kids_mode.yaml new file mode 100644 index 0000000..ff95516 --- /dev/null +++ b/components/input_selects/time_of_day/early_evening_kids_mode.yaml @@ -0,0 +1,11 @@ +name: Early Evening Kids Mode +options: + - 'Off' + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' diff --git a/components/input_selects/time_of_day/early_evening_mode.yaml b/components/input_selects/time_of_day/early_evening_mode.yaml new file mode 100644 index 0000000..98fbdb7 --- /dev/null +++ b/components/input_selects/time_of_day/early_evening_mode.yaml @@ -0,0 +1,11 @@ +name: Early Evening Mode +options: + - 'Off' + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' diff --git a/components/input_selects/time_of_day/early_morning_kids_mode.yaml b/components/input_selects/time_of_day/early_morning_kids_mode.yaml new file mode 100644 index 0000000..03c6f4e --- /dev/null +++ b/components/input_selects/time_of_day/early_morning_kids_mode.yaml @@ -0,0 +1,11 @@ +name: Early Morning Kids Mode +options: + - 'Off' + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' diff --git a/components/input_selects/time_of_day/early_morning_mode.yaml b/components/input_selects/time_of_day/early_morning_mode.yaml new file mode 100644 index 0000000..1012572 --- /dev/null +++ b/components/input_selects/time_of_day/early_morning_mode.yaml @@ -0,0 +1,11 @@ +name: Early Morning Mode +options: + - 'Off' + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' diff --git a/components/input_selects/time_of_day/evening_kids_mode.yaml b/components/input_selects/time_of_day/evening_kids_mode.yaml new file mode 100644 index 0000000..8e9502a --- /dev/null +++ b/components/input_selects/time_of_day/evening_kids_mode.yaml @@ -0,0 +1,11 @@ +name: Evening Kids Mode +options: + - 'Off' + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' diff --git a/components/input_selects/time_of_day/evening_mode.yaml b/components/input_selects/time_of_day/evening_mode.yaml new file mode 100644 index 0000000..21754bb --- /dev/null +++ b/components/input_selects/time_of_day/evening_mode.yaml @@ -0,0 +1,11 @@ +name: Evening Mode +options: + - 'Off' + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' diff --git a/components/input_selects/time_of_day/late_afternoon_kids_mode.yaml b/components/input_selects/time_of_day/late_afternoon_kids_mode.yaml new file mode 100644 index 0000000..84d7929 --- /dev/null +++ b/components/input_selects/time_of_day/late_afternoon_kids_mode.yaml @@ -0,0 +1,11 @@ +name: Late Afternoon Kids Mode +options: + - 'Off' + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' diff --git a/components/input_selects/time_of_day/late_afternoon_mode.yaml b/components/input_selects/time_of_day/late_afternoon_mode.yaml new file mode 100644 index 0000000..8586df8 --- /dev/null +++ b/components/input_selects/time_of_day/late_afternoon_mode.yaml @@ -0,0 +1,11 @@ +name: Late Afternoon Mode +options: + - 'Off' + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' diff --git a/components/input_selects/time_of_day/late_evening_kids_mode.yaml b/components/input_selects/time_of_day/late_evening_kids_mode.yaml new file mode 100644 index 0000000..f298053 --- /dev/null +++ b/components/input_selects/time_of_day/late_evening_kids_mode.yaml @@ -0,0 +1,11 @@ +name: Late Evening Kids Mode +options: + - 'Off' + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' diff --git a/components/input_selects/time_of_day/late_evening_mode.yaml b/components/input_selects/time_of_day/late_evening_mode.yaml new file mode 100644 index 0000000..986113c --- /dev/null +++ b/components/input_selects/time_of_day/late_evening_mode.yaml @@ -0,0 +1,11 @@ +name: Late Evening Mode +options: + - 'Off' + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' diff --git a/components/input_selects/time_of_day/late_morning_kids_mode.yaml b/components/input_selects/time_of_day/late_morning_kids_mode.yaml new file mode 100644 index 0000000..2b60153 --- /dev/null +++ b/components/input_selects/time_of_day/late_morning_kids_mode.yaml @@ -0,0 +1,11 @@ +name: Late Morning Kids Mode +options: + - 'Off' + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' diff --git a/components/input_selects/time_of_day/late_morning_mode.yaml b/components/input_selects/time_of_day/late_morning_mode.yaml new file mode 100644 index 0000000..1ed6f57 --- /dev/null +++ b/components/input_selects/time_of_day/late_morning_mode.yaml @@ -0,0 +1,11 @@ +name: Late Morning Mode +options: + - 'Off' + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' diff --git a/components/input_selects/time_of_day/morning_kids_mode.yaml b/components/input_selects/time_of_day/morning_kids_mode.yaml new file mode 100644 index 0000000..e0f8b5c --- /dev/null +++ b/components/input_selects/time_of_day/morning_kids_mode.yaml @@ -0,0 +1,11 @@ +name: Morning Kids Mode +options: + - 'Off' + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' diff --git a/components/input_selects/time_of_day/morning_mode.yaml b/components/input_selects/time_of_day/morning_mode.yaml new file mode 100644 index 0000000..5bb4384 --- /dev/null +++ b/components/input_selects/time_of_day/morning_mode.yaml @@ -0,0 +1,11 @@ +name: Morning Mode +options: + - 'Off' + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' diff --git a/components/input_selects/time_of_day/night_kids_mode.yaml b/components/input_selects/time_of_day/night_kids_mode.yaml new file mode 100644 index 0000000..734d4f9 --- /dev/null +++ b/components/input_selects/time_of_day/night_kids_mode.yaml @@ -0,0 +1,11 @@ +name: Night Kids Mode +options: + - 'Off' + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' diff --git a/components/input_selects/time_of_day/night_mode.yaml b/components/input_selects/time_of_day/night_mode.yaml new file mode 100644 index 0000000..eabf372 --- /dev/null +++ b/components/input_selects/time_of_day/night_mode.yaml @@ -0,0 +1,11 @@ +name: Night Mode +options: + - 'Off' + - 'Bright' + - 'Concentrate' + - 'Energize' + - 'Read' + - 'Relax' + - 'Dimmed' + - 'Nightlight' + - 'Natural light' diff --git a/components/input_selects/wled/bridget_wled.yaml b/components/input_selects/wled/bridget_wled.yaml new file mode 100644 index 0000000..8dbaacf --- /dev/null +++ b/components/input_selects/wled/bridget_wled.yaml @@ -0,0 +1,11 @@ +name: Bridget WLED +options: + - 'On' + - Ceiling + - Read + - Bedtime + - Bouncing Balls + - Fireworks + - Twinkle + - Meteor + - 'Off' \ No newline at end of file diff --git a/components/input_selects/wled/emmett_wled.yaml b/components/input_selects/wled/emmett_wled.yaml new file mode 100644 index 0000000..54274a1 --- /dev/null +++ b/components/input_selects/wled/emmett_wled.yaml @@ -0,0 +1,11 @@ +name: Emmett WLED +options: + - 'On' + - Ceiling + - Read + - Bedtime + - Bouncing Balls + - Fireworks + - Twinkle + - Meteor + - 'Off' \ No newline at end of file diff --git a/components/input_selects/wled/nursery_wled.yaml b/components/input_selects/wled/nursery_wled.yaml new file mode 100644 index 0000000..445d60d --- /dev/null +++ b/components/input_selects/wled/nursery_wled.yaml @@ -0,0 +1,12 @@ +name: Nursery WLED +options: + - 'On' + - Ceiling + - Read + - Bedtime + - Bouncing Balls + - Fireworks + - Twinkle + - Meteor + - Running Rainbow + - 'Off' \ No newline at end of file diff --git a/components/input_text/person_bridget.yaml b/components/input_text/person_bridget.yaml new file mode 100644 index 0000000..fb46083 --- /dev/null +++ b/components/input_text/person_bridget.yaml @@ -0,0 +1,2 @@ +name: Bridget +icon: mdi:alpha-b-circle \ No newline at end of file diff --git a/components/input_text/person_clint.yaml b/components/input_text/person_clint.yaml new file mode 100644 index 0000000..77d6a15 --- /dev/null +++ b/components/input_text/person_clint.yaml @@ -0,0 +1,2 @@ +name: Clint +icon: mdi:alpha-c-circle \ No newline at end of file diff --git a/components/input_text/person_ebin.yaml b/components/input_text/person_ebin.yaml new file mode 100644 index 0000000..6174ff7 --- /dev/null +++ b/components/input_text/person_ebin.yaml @@ -0,0 +1,2 @@ +name: Ebin +icon: mdi:alpha-e-circle-outline \ No newline at end of file diff --git a/components/input_text/person_emmett.yaml b/components/input_text/person_emmett.yaml new file mode 100644 index 0000000..2012bf6 --- /dev/null +++ b/components/input_text/person_emmett.yaml @@ -0,0 +1,2 @@ +name: Emmett +icon: mdi:alpha-e-circle \ No newline at end of file diff --git a/components/input_text/person_guest.yaml b/components/input_text/person_guest.yaml new file mode 100644 index 0000000..b351b85 --- /dev/null +++ b/components/input_text/person_guest.yaml @@ -0,0 +1,2 @@ +name: Guest +icon: mdi:alpha-g-circle \ No newline at end of file diff --git a/components/input_text/person_kristy.yaml b/components/input_text/person_kristy.yaml new file mode 100644 index 0000000..5cbb136 --- /dev/null +++ b/components/input_text/person_kristy.yaml @@ -0,0 +1,2 @@ +name: Kristy +icon: mdi:alpha-k-circle-outline \ No newline at end of file diff --git a/components/input_text/person_marshall.yaml b/components/input_text/person_marshall.yaml new file mode 100644 index 0000000..674038f --- /dev/null +++ b/components/input_text/person_marshall.yaml @@ -0,0 +1,2 @@ +name: Marshall +icon: mdi:alpha-m-circle-outline \ No newline at end of file diff --git a/components/input_text/person_tess.yaml b/components/input_text/person_tess.yaml new file mode 100644 index 0000000..705aa1c --- /dev/null +++ b/components/input_text/person_tess.yaml @@ -0,0 +1,2 @@ +name: Tess +icon: mdi:alpha-t-circle-outline \ No newline at end of file diff --git a/components/input_text/rooms/computer_area_mode.yaml b/components/input_text/rooms/computer_area_mode.yaml new file mode 100644 index 0000000..65a6e7a --- /dev/null +++ b/components/input_text/rooms/computer_area_mode.yaml @@ -0,0 +1 @@ +name: Computer Area Mode \ No newline at end of file diff --git a/components/input_text/rooms/front_room_mode.yaml b/components/input_text/rooms/front_room_mode.yaml new file mode 100644 index 0000000..2ce5cf1 --- /dev/null +++ b/components/input_text/rooms/front_room_mode.yaml @@ -0,0 +1 @@ +name: Front Room Mode \ No newline at end of file diff --git a/components/input_text/rooms/great_room_mode.yaml b/components/input_text/rooms/great_room_mode.yaml new file mode 100644 index 0000000..06eb826 --- /dev/null +++ b/components/input_text/rooms/great_room_mode.yaml @@ -0,0 +1 @@ +name: Great Room Mode \ No newline at end of file diff --git a/components/input_text/rooms/master_bedroom_mode.yaml b/components/input_text/rooms/master_bedroom_mode.yaml new file mode 100644 index 0000000..0009f52 --- /dev/null +++ b/components/input_text/rooms/master_bedroom_mode.yaml @@ -0,0 +1 @@ +name: Master Bedroom Mode \ No newline at end of file diff --git a/components/input_text/rooms/nursery_mode.yaml b/components/input_text/rooms/nursery_mode.yaml new file mode 100644 index 0000000..549155f --- /dev/null +++ b/components/input_text/rooms/nursery_mode.yaml @@ -0,0 +1 @@ +name: Nursery Mode \ No newline at end of file diff --git a/components/lights/template.yaml b/components/lights/template.yaml new file mode 100644 index 0000000..e69de29 diff --git a/components/notifies/discord.yaml b/components/notifies/discord.yaml new file mode 100644 index 0000000..faf1113 --- /dev/null +++ b/components/notifies/discord.yaml @@ -0,0 +1,3 @@ +# name: Discord +# platform: discord +# token: !secret discord_bot_token \ No newline at end of file diff --git a/components/notifies/ecobee.yaml b/components/notifies/ecobee.yaml new file mode 100644 index 0000000..9e0dc37 --- /dev/null +++ b/components/notifies/ecobee.yaml @@ -0,0 +1,4 @@ +### This has been deprecated as of 2022.11 + +# name: ecobee +# platform: ecobee \ No newline at end of file diff --git a/components/notifies/html5.yaml b/components/notifies/html5.yaml new file mode 100644 index 0000000..8f68c01 --- /dev/null +++ b/components/notifies/html5.yaml @@ -0,0 +1,5 @@ +# platform: html5 +# name: html5 +# vapid_pub_key: !secret vapid_pub_key +# vapid_prv_key: !secret vapid_prv_key +# vapid_email: !secret vapid_email diff --git a/components/notifies/mindsdb_responses.yaml b/components/notifies/mindsdb_responses.yaml new file mode 100644 index 0000000..64b40b5 --- /dev/null +++ b/components/notifies/mindsdb_responses.yaml @@ -0,0 +1,3 @@ +name: MindsDB Responses +platform: file +filename: /config/custom_logs/mindsdb_responses.log \ No newline at end of file diff --git a/components/notifies/precipitation.yaml b/components/notifies/precipitation.yaml new file mode 100644 index 0000000..8653078 --- /dev/null +++ b/components/notifies/precipitation.yaml @@ -0,0 +1,4 @@ +name: Precipitation +platform: file +filename: /config/custom_logs/precipitation.csv +timestamp: false \ No newline at end of file diff --git a/components/notifies/soil_moisture.yaml b/components/notifies/soil_moisture.yaml new file mode 100644 index 0000000..7d312c4 --- /dev/null +++ b/components/notifies/soil_moisture.yaml @@ -0,0 +1,4 @@ +name: Soil Moisture +platform: file +filename: /config/custom_logs/soil_moisture.csv +timestamp: false \ No newline at end of file diff --git a/components/notifies/telegram.yaml b/components/notifies/telegram.yaml new file mode 100644 index 0000000..c54ac9c --- /dev/null +++ b/components/notifies/telegram.yaml @@ -0,0 +1,3 @@ +# name: Telegram +# platform: telegram +# chat_id: !secret telegram_main_chat_id \ No newline at end of file diff --git a/components/packages/ambientsounds.yaml b/components/packages/ambientsounds.yaml new file mode 100644 index 0000000..f9feadb --- /dev/null +++ b/components/packages/ambientsounds.yaml @@ -0,0 +1,194 @@ +--- ###### CUSTOMIZE ---------------------------------------- + +# RESOURCES: +# Credit to /u/dsgraham on Reddit - https://www.reddit.com/r/homeassistant/comments/9n0llr/google_ambient_sound_urls/ +# Script adapted from Bob_NL on Home Assistant Forums - https://community.home-assistant.io/t/chromecast-radio-with-station-and-player-selection/12732 +# Google webpage: https://support.google.com/googlehome/answer/7364558?hl=en +# Updating to use DLNA +homeassistant: + customize: + script.ambientsounds: + icon: mdi:play + friendly_name: Start Playing + +###### GROUPS ---------------------------------------- + +group: + Ambient Sounds: + name: Ambient Sounds + entities: + - input_select.ambient_sound + - input_select.google_home + - script.ambientsounds + - input_number.volume_ambientsounds + + Home Group: + name: Home Group + entities: + - media_player.great_room + - media_player.kitchen + - media_player.front_room_hub + - media_player.nursery_hub + - media_player.bathroom_mini + - media_player.master_bedroom_clock + - media_player.computer_area_hub + +###### INPUT SELECT ------------------------------------------ + +input_select: + ambient_sound: + name: "Select Radio Station:" + options: + - Random White Noise + - Random Kids Noise + - Babbling Brook + - Female Baby Shusher + - Male Baby Shusher + - Country Night + - Fireplace + - Forest + - Female Lullaby + - Male Lullaby + - Ocean + - Oscillating Fan + - Pink Noise + - Rain + - River + - Female Rock-a-bye Baby + - Male Rock-a-bye Baby + - Thunderstorm + - Female Twinkle Twinkle + - Male Twinkle Twinkle + - White Noise + + google_home: + name: "Select Speakers:" + options: + - Front Room + - Master Bedroom + - Kitchen + - Nursery + - Computer Area + - Downstairs + - Master Bathroom + - Everywhere + initial: Everywhere + icon: mdi:speaker-wireless + +###### INPUT NUMBER ------------------------------------------ + +input_number: + volume_ambientsounds: + name: Volume + icon: mdi:volume-high + min: 0 + max: 1 + step: 0.05 + initial: 0.45 + +###### SCRIPTS ------------------------------------------ + +script: + ambientsounds: + alias: Play Ambient Sounds + sequence: + - service: media_player.volume_set + data_template: + entity_id: > + {% if is_state("input_select.google_home", "Front Room") %} media_player.front_room_hub + {% elif is_state("input_select.google_home", "Master Bedroom") %} media_player.master_bedroom_clock + {% elif is_state("input_select.google_home", "Master Bathroom") %} media_player.great_room + {% elif is_state("input_select.google_home", "Kitchen") %} media_player.kitchen + {% elif is_state("input_select.google_home", "Nursery") %} media_player.nursery_hub + {% elif is_state("input_select.google_home", "Computer Area") %} media_player.computer_area_hub + {% elif is_state("input_select.google_home", "Downstairs") %} media_player.downstairs_public + {% elif is_state("input_select.google_home", "Everywhere") %} media_player.all_speakers + {% endif %} + volume_level: "0.0" + - delay: "00:00:02" + - service: media_player.play_media + data_template: + entity_id: > + {% if is_state("input_select.google_home", "Front Room") %} media_player.front_room_hub + {% elif is_state("input_select.google_home", "Master Bedroom") %} media_player.master_bedroom_clock + {% elif is_state("input_select.google_home", "Master Bathroom") %} media_player.great_room + {% elif is_state("input_select.google_home", "Kitchen") %} media_player.kitchen + {% elif is_state("input_select.google_home", "Nursery") %} media_player.nursery_hub + {% elif is_state("input_select.google_home", "Computer Area") %} media_player.computer_area_hub + {% elif is_state("input_select.google_home", "Downstairs") %} media_player.downstairs_public + {% elif is_state("input_select.google_home", "Everywhere") %} media_player.all_speakers + {% endif %} + media_content_id: > + {% if is_state("input_select.ambient_sound", "Babbling Brook") %} media-source://dlna_dms/dream_media/:22$@12744 + {% elif is_state("input_select.ambient_sound", "Female Baby Shusher") %} media-source://dlna_dms/dream_media/:22$@12745 + {% elif is_state("input_select.ambient_sound", "Male Baby Shusher") %} media-source://dlna_dms/dream_media/:22$@12736 + {% elif is_state("input_select.ambient_sound", "Country Night") %} media-source://dlna_dms/dream_media/:22$@12741 + {% elif is_state("input_select.ambient_sound", "Fireplace") %} media-source://dlna_dms/dream_media/:22$@12743 + {% elif is_state("input_select.ambient_sound", "Forest") %} media-source://dlna_dms/dream_media/:22$@12731 + {% elif is_state("input_select.ambient_sound", "Female Lullaby") %} media-source://dlna_dms/dream_media/:22$@12734 + {% elif is_state("input_select.ambient_sound", "Male Lullaby") %} media-source://dlna_dms/dream_media/:22$@12739 + {% elif is_state("input_select.ambient_sound", "Ocean") %} media-source://dlna_dms/dream_media/:22$@12747 + {% elif is_state("input_select.ambient_sound", "Oscillating Fan") %} media-source://dlna_dms/dream_media/:22$@12746 + {% elif is_state("input_select.ambient_sound", "Pink Noise") %} media-source://dlna_dms/dream_media/:22$@12735 + {% elif is_state("input_select.ambient_sound", "Rain") %} media-source://dlna_dms/dream_media/:22$@12737 + {% elif is_state("input_select.ambient_sound", "River") %} media-source://dlna_dms/dream_media/:22$@12738 + {% elif is_state("input_select.ambient_sound", "Female Rock-a-bye Baby") %} media-source://dlna_dms/dream_media/:22$@12748 + {% elif is_state("input_select.ambient_sound", "Male Rock-a-bye Baby") %} media-source://dlna_dms/dream_media/:22$@12733 + {% elif is_state("input_select.ambient_sound", "Thunderstorm") %} media-source://dlna_dms/dream_media/:22$@12740 + {% elif is_state("input_select.ambient_sound", "Female Twinkle Twinkle") %} media-source://dlna_dms/dream_media/:22$@12742 + {% elif is_state("input_select.ambient_sound", "Male Twinkle Twinkle") %} media-source://dlna_dms/dream_media/:22$@12730 + {% elif is_state("input_select.ambient_sound", "White Noise") %} media-source://dlna_dms/dream_media/:22$@12740 + {% elif is_state("input_select.ambient_sound", "Random White Noise") %} + {% set noises = ['media-source://dlna_dms/dream_media/:22$@12744', + 'media-source://dlna_dms/dream_media/:22$@12746', + 'media-source://dlna_dms/dream_media/:22$@12731', + 'media-source://dlna_dms/dream_media/:22$@12747', + 'media-source://dlna_dms/dream_media/:22$@12738', + 'media-source://dlna_dms/dream_media/:22$@12740'] %} + {{ noises|random }} + {% elif is_state("input_select.ambient_sound", "Random Kids Noise") %} + {% set noises = ['media-source://dlna_dms/dream_media/:22$@12734', + 'media-source://dlna_dms/dream_media/:22$@12748', + 'media-source://dlna_dms/dream_media/:22$@12742'] %} + {{ noises|random }} + {% endif %} + media_content_type: "audio/mp4" + - delay: "00:00:01" + - service: media_player.volume_set + data_template: + entity_id: > + {% if is_state("input_select.google_home", "Front Room") %} media_player.front_room_hub + {% elif is_state("input_select.google_home", "Master Bedroom") %} media_player.master_bedroom_clock + {% elif is_state("input_select.google_home", "Master Bathroom") %} media_player.great_room + {% elif is_state("input_select.google_home", "Kitchen") %} media_player.kitchen + {% elif is_state("input_select.google_home", "Nursery") %} media_player.nursery_hub + {% elif is_state("input_select.google_home", "Computer Area") %} media_player.computer_area_hub + {% elif is_state("input_select.google_home", "Downstairs") %} media_player.downstairs_public + {% elif is_state("input_select.google_home", "Everywhere") %} media_player.all_speakers + {% endif %} + volume_level: "{{ states.input_number.volume_ambientsounds.state }}" + +############################################################################### +# Automations +############################################################################### + +automation: + - alias: "Set Radio Volume" + id: automation_set_radio_volume + trigger: + platform: state + entity_id: input_number.volume_ambientsounds + action: + service: media_player.volume_set + data_template: + entity_id: > + {% if is_state("input_select.google_home", "Front Room") %} media_player.front_room_hub + {% elif is_state("input_select.google_home", "Master Bedroom") %} media_player.master_bedroom_clock + {% elif is_state("input_select.google_home", "Master Bathroom") %} media_player.great_room + {% elif is_state("input_select.google_home", "Kitchen") %} media_player.kitchen + {% elif is_state("input_select.google_home", "Nursery") %} media_player.nursery_hub + {% elif is_state("input_select.google_home", "Computer Area") %} media_player.computer_area_hub + {% elif is_state("input_select.google_home", "Downstairs") %} media_player.downstairs_public + {% elif is_state("input_select.google_home", "Everywhere") %} media_player.all_speakers + {% endif %} + volume_level: "{{ states.input_number.volume_ambientsounds.state }}" diff --git a/components/packages/announcements.yaml b/components/packages/announcements.yaml new file mode 100644 index 0000000..02a60e3 --- /dev/null +++ b/components/packages/announcements.yaml @@ -0,0 +1,48 @@ +input_boolean: + announcement_pending: + name: Announcement Pending + icon: mdi:bullhorn + + announce_washing_machine_done: + name: Announce Washing Machine Done + icon: mdi:washing-machine + + announce_dryer_done: + name: Announce Dryer Done + icon: mdi:tumble-dryer + + announce_dishwasher_done: + name: Announce Dishwasher Done + icon: mdi:dishwasher + + announce_almost_bedtime: + name: Announce Almost Bedtime + icon: mdi:sleep + + announce_goodnight_emmett: + name: Announce Goodnight Emmett + icon: mdi:sleep + + announce_goodnight_bridget: + name: Announce Goodnight Bridget + icon: mdi:sleep + + announce_goodnight_ebin: + name: Announce Goodnight Ebin + icon: mdi:sleep + + announce_goodnight_emmett_bridget: + name: Announce Goodnight Emmett Bridget + icon: mdi:sleep + + announce_goodnight_emmett_ebin: + name: Announce Goodnight Emmett Ebin + icon: mdi:sleep + + announce_goodnight_bridget_ebin: + name: Announce Goodnight Bridget Ebin + icon: mdi:sleep + + announce_goodnight_emmett_bridget_ebin: + name: Announce Goodnight Emmett Bridget Ebin + icon: mdi:sleep \ No newline at end of file diff --git a/components/packages/appliances/dishwasher.yaml b/components/packages/appliances/dishwasher.yaml new file mode 100644 index 0000000..e8b4544 --- /dev/null +++ b/components/packages/appliances/dishwasher.yaml @@ -0,0 +1,170 @@ +template: + - binary_sensor: + - name: Dishwasher + unique_id: templatebinarysensor.dishwasher + icon: mdi:dishwasher + delay_on: "{{states('input_number.dishwasher_delay_on') | float(default=0) }}" + delay_off: "{{states('input_number.dishwasher_delay_off') | float(default=0) }}" + availability: "{{ states('sensor.pm_dishwasher_w') not in ['unkown', 'unavailable'] }}" + attributes: + model_number: 'MDB6769PAS1' + serial_number: 'F24407234' + power: "{{ states('sensor.pm_dishwasher_w') | float(default=0)}}" + target: "{{ states('input_number.dishwasher_on') | float(default=0)}}" + state: "{{ states('sensor.pm_dishwasher_w')|float(default=0) >= states('input_number.dishwasher_on')|float(default=0) }}" + + - sensor: + - name: Dishwasher + unique_id: templatesensor_dishwasher + state: > + {% if is_state('binary_sensor.dishwasher','on')%} + running + {% elif is_state('binary_sensor.dishwasher','off') and is_state('input_boolean.empty_dishwasher','on') %} + pending + {% else %} + idle + {% endif %} + icon: > + {% if is_state('sensor.dishwasher','idle') %} + mdi:dishwasher-off + {% elif is_state('sensor.dishwasher','pending') %} + mdi:dishwasher-alert + {% else %} + mdi:dishwasher + {% endif %} + attributes: + model_number: 'MDB6769PAS1' + serial_number: 'F24407234' + power: "{{ states('sensor.pm_dishwasher_w') | float(default=0)}}" + target: "{{ states('input_number.dishwasher_on') | float(default=0)}}" + +input_boolean: + empty_dishwasher: + name: Empty Dishwasher + icon: mdi:cupboard + +input_number: + dishwasher_on: + # was 4 + name: 'Dishwasher On' + icon: mdi:dishwasher + min: 0 + max: 1000 + step: 0.1 + mode: box + unit_of_measurement: W + + dishwasher_off: + name: 'Dishwasher Off' + icon: mdi:dishwasher-off + min: 0 + max: 1000 + step: 0.1 + mode: box + unit_of_measurement: W + + dishwasher_delay_on: + name: 'Dishwasher Delay On' + icon: mdi:clock + min: 0 + max: 900 + step: 10 + mode: box + + dishwasher_delay_off: + # was 600 + name: 'Dishwasher Delay Off' + icon: mdi:clock-alert + min: 0 + max: 900 + step: 10 + mode: box + +automation: + - id: automation_empty_dishwasher_state + alias: Empty Dishwasher + trigger: + - id: dishwasher_off + platform: state + entity_id: binary_sensor.dishwasher + from: 'on' + to: 'off' + + - id: dishwasher_on + platform: state + entity_id: binary_sensor.dishwasher + from: 'off' + to: 'on' + + - id: door_open + platform: state + entity_id: binary_sensor.dishwasher_door_contact + from: 'off' + to: 'on' + for: + seconds: 5 + + condition: [] + action: + - choose: + - alias: "Dishwasher is running. No need to empty it yet" + conditions: + - condition: trigger + id: dishwasher_on + + - condition: state + entity_id: input_boolean.empty_dishwasher + state: 'on' + + sequence: + - service: logbook.log + data_template: + name: Empty Dishwasher - Load Started + entity_id: automation.empty_dishwasher + message: Dishwasher just turned on. Turning off input_boolean in case it got left on + + - service: homeassistant.turn_off + target: + entity_id: input_boolean.empty_dishwasher + + - alias: "Dishwasher finished while door was shut" + conditions: + - condition: trigger + id: dishwasher_off + + - condition: state + entity_id: binary_sensor.dishwasher_door_contact + state: 'off' + + sequence: + - service: logbook.log + data_template: + name: Empty Dishwasher - Load finished + entity_id: automation.empty_dishwasher + message: Dishwasher just turned off while the door was shut. Assuming dishes need to be put away + + - service: homeassistant.turn_on + target: + entity_id: input_boolean.empty_dishwasher + + - alias: "Door was opened for 30 seconds while dishwasher was off" + conditions: + - condition: trigger + id: door_open + + - condition: state + entity_id: binary_sensor.dishwasher + state: 'off' + + sequence: + - service: logbook.log + data_template: + name: Empty Dishwasher - Dishes put away + entity_id: automation.empty_dishwasher + message: Dishwasher door was opened while the dishwasher was off. Assuming dishes don't need to be put away. + + - service: homeassistant.turn_off + target: + entity_id: input_boolean.empty_dishwasher + + mode: single diff --git a/components/packages/appliances/tumble_dryer.yaml b/components/packages/appliances/tumble_dryer.yaml new file mode 100644 index 0000000..c8b3208 --- /dev/null +++ b/components/packages/appliances/tumble_dryer.yaml @@ -0,0 +1,215 @@ +template: + - trigger: + - platform: state + entity_id: + - sensor.pm_dryer_w + - input_number.tumble_dryer_delay_on + - input_number.tumble_dryer_delay_off + not_to: + - "unknown" + - "unavailable" + + - platform: event + event_type: event_template_reloaded + id: "reload" + + - platform: homeassistant + event: start + + binary_sensor: + - name: Tumble Dryer + unique_id: binary-sensor-tumble-dryer + delay_on: "{{states('input_number.tumble_dryer_delay_on') | float(default=0)}}" + delay_off: "{{states('input_number.tumble_dryer_delay_off') | float(default=0)}}" + icon: mdi:tumble-dryer + availability: "{{ states('sensor.pm_dryer_w') not in ['unkown', 'unavailable'] }}" + attributes: + model_number: 'DVE45R6100W/A3' + serial_number: '0AY95BBM605793X' + power: "{{ states('sensor.pm_dryer_w') | float(default=0)}}" + target: "{{ states('input_number.tumble_dryer_on') | float(default=0)}}" + state: "{{ states('sensor.pm_dryer_w')|float(default=0) >= states('input_number.tumble_dryer_on')|float(default=0) }}" + + - trigger: + - platform: state + entity_id: sensor.pm_dryer_w + not_to: + - "unknown" + - "unavailable" + - platform: state + entity_id: input_number.tumble_dryer_delay_on + not_to: + - "unknown" + - "unavailable" + - platform: state + entity_id: input_number.tumble_dryer_delay_off + not_to: + - "unknown" + - "unavailable" + + - platform: event + event_type: event_template_reloaded + id: "reload" + + - platform: homeassistant + event: start + + sensor: + - name: Tumble Dryer + unique_id: templatesensor_tumble_dryer + state: > + {% if is_state('binary_sensor.tumble_dryer','on') %} + running + {% elif is_state('binary_sensor.tumble_dryer','off') and is_state('input_boolean.fold_clothes','on') %} + pending + {% else %} + idle + {% endif %} + icon: > + {% if is_state('sensor.tumble_dryer','idle') %} + mdi:tumble-dryer-off + {% elif is_state('sensor.tumble_dryer','pending') %} + mdi:tumble-dryer-alert + {% else %} + mdi:tumble-dryer + {% endif %} + attributes: + model_number: 'DVE45R6100W/A3' + serial_number: '0AY95BBM605793X' + power: "{{ states('sensor.pm_dryer_w') | float(default=0)}}" + target: "{{ states('input_number.tumble_dryer_on') | float(default=0)}}" + +input_boolean: + fold_clothes: + name: Fold Clothes + icon: mdi:hanger + +input_number: + tumble_dryer_on: + # was 10 + name: 'Tumble Dryer On' + icon: mdi:tumble-dryer + min: 0 + max: 1000 + step: 0.1 + mode: box + unit_of_measurement: W + + tumble_dryer_off: + name: 'Tumble Dryer Off' + icon: mdi:tumble-dryer-off + min: 0 + max: 1000 + step: 0.1 + mode: box + unit_of_measurement: W + + tumble_dryer_delay_on: + name: 'Tumble Dryer Delay On' + icon: mdi:clock + min: 0 + max: 900 + step: 10 + mode: box + + tumble_dryer_delay_off: + # was 10 + name: 'Tumble Dryer Delay Off' + icon: mdi:clock-alert + min: 0 + max: 900 + step: 10 + mode: box + +automation: + - id: automation_fold_clothes_state + alias: Fold Clothes + trigger: + - id: tumble_dryer_off + platform: state + entity_id: binary_sensor.tumble_dryer + from: 'on' + to: 'off' + + - id: tumble_dryer_on + platform: state + entity_id: binary_sensor.tumble_dryer + from: 'off' + to: 'on' + + - id: door_open + platform: state + entity_id: binary_sensor.tumble_dryer_door_contact + from: 'off' + to: 'on' + for: + seconds: 5 + + condition: [] + action: + - choose: + - alias: "Dryer is running. No need to fold clothes yet" + conditions: + - condition: trigger + id: tumble_dryer_on + + - condition: state + entity_id: input_boolean.fold_clothes + state: 'on' + sequence: + - service: logbook.log + data_template: + name: Fold Clothes - Load started + entity_id: automation.fold_clothes + message: Dryer turned on. No need to fold clothes yet. Turning off input_boolean in case it got left on + + + - service: homeassistant.turn_off + target: + entity_id: input_boolean.fold_clothes + + - alias: "Dryer finished while door was shut" + conditions: + - condition: trigger + id: tumble_dryer_off + + - condition: state + entity_id: binary_sensor.tumble_dryer_door_contact + state: 'off' + + sequence: + - service: logbook.log + data_template: + name: Fold Clothes - Load finished + entity_id: automation.fold_clothes + message: Dryer just turned off. Assuming clothes need to be folded + + - service: homeassistant.turn_on + target: + entity_id: input_boolean.fold_clothes + + - alias: "Door was opened while dryer was off" + conditions: + - condition: trigger + id: door_open + + - condition: state + entity_id: binary_sensor.tumble_dryer + state: 'off' + + - condition: state + entity_id: input_boolean.fold_clothes + state: 'on' + + sequence: + - service: logbook.log + data_template: + name: Fold Clothes - Clothes folded + entity_id: automation.fold_clothes + message: Door was opened while dryer was off. Assuming clothes are now folded + + - service: homeassistant.turn_off + target: + entity_id: input_boolean.fold_clothes + + mode: single diff --git a/components/packages/appliances/washing_machine.yaml b/components/packages/appliances/washing_machine.yaml new file mode 100644 index 0000000..ecf3ae2 --- /dev/null +++ b/components/packages/appliances/washing_machine.yaml @@ -0,0 +1,172 @@ +template: + - binary_sensor: + - name: Washing Machine + unique_id: templatebinarysensor.washing_machine + delay_on: "{{states('input_number.washing_machine_delay_on') | float(default=0)}}" + delay_off: "{{states('input_number.washing_machine_delay_off') | float(default=0)}}" + icon: mdi:washing-machine + availability: "{{ states('sensor.pm_laundry_plug_w') not in ['unkown', 'unavailable'] }}" + attributes: + model_number: 'WF45R6100AW/US' + serial_number: '01FY57AM802740X' + power: "{{ states('sensor.pm_laundry_plug_w') | float(default=0)}}" + target: "{{ states('input_number.washing_machine_on') | float(default=0)}}" + state: "{{ states('sensor.pm_laundry_plug_w')|float(default=0) >= states('input_number.washing_machine_on')|float(default=0) }}" + + - sensor: + - name: Washing Machine + unique_id: templatesensor_washing_machine + state: > + {% if is_state('binary_sensor.washing_machine','on') %} + running + {% elif is_state('binary_sensor.washing_machine','off') and is_state('input_boolean.swap_laundry','on') %} + pending + {% else %} + idle + {% endif %} + icon: > + {% if is_state('sensor.washing_machine','idle') %} + mdi:washing-machine-off + {% elif is_state('sensor.washing_machine','pending') %} + mdi:washing-machine-alert + {% else %} + mdi:washing-machine + {% endif %} + attributes: + model_number: 'WF45R6100AW/US' + serial_number: '01FY57AM802740X' + power: "{{ states('sensor.pm_laundry_plug_w') | float(default=0)}}" + target: "{{ states('input_number.washing_machine_on') | float(default=0)}}" + +input_boolean: + swap_laundry: + name: Swap Laundry + icon: mdi:tshirt-crew + +input_number: + washing_machine_on: + # was 5 + name: 'Washing Machine On' + icon: mdi:washing-machine + min: 0 + max: 20 + step: 0.1 + mode: box + unit_of_measurement: W + + washing_machine_off: + name: 'Washing Machine Off' + icon: mdi:washing-machine-off + min: 0 + max: 20 + step: 0.1 + mode: box + unit_of_measurement: W + + washing_machine_delay_on: + name: 'Washing Machine Delay On' + icon: mdi:clock + min: 0 + max: 900 + step: 10 + mode: box + + washing_machine_delay_off: + # was 10 + name: 'Washing Machine Delay Off' + icon: mdi:clock-alert + min: 0 + max: 900 + step: 10 + mode: box + +automation: + - id: automation_swap_laundry_state + alias: Swap Laundry + trigger: + - id: washing_machine_off + platform: state + entity_id: binary_sensor.washing_machine + from: 'on' + to: 'off' + + - id: washing_machine_on + platform: state + entity_id: binary_sensor.washing_machine + from: 'off' + to: 'on' + + - id: door_open + platform: state + entity_id: binary_sensor.washing_machine_door_contact + from: 'off' + to: 'on' + for: + seconds: 5 + + condition: [] + action: + - choose: + - alias: "Washing machine is running. No need to swap laundry yet" + conditions: + - condition: trigger + id: washing_machine_on + + - condition: state + entity_id: input_boolean.swap_laundry + state: 'on' + sequence: + - service: logbook.log + data_template: + name: Swap Laundry - Load started + entity_id: automation.swap_laundry + message: Washing machine is running. No need to swap laundry yet. Turning off input_boolean.swap_laundry, in case it was left on + + - service: homeassistant.turn_off + target: + entity_id: input_boolean.swap_laundry + + - alias: "Washing machine finished while door was shut" + conditions: + - condition: trigger + id: washing_machine_off + + - condition: state + entity_id: binary_sensor.washing_machine_door_contact + state: 'off' + + sequence: + - service: logbook.log + data_template: + name: Swap Laundry - Load needs to be swapped + entity_id: automation.swap_laundry + message: Washing machine turned off while the door was shut. Assuming that a load needs to be swapped + - service: homeassistant.turn_on + target: + entity_id: input_boolean.swap_laundry + + - alias: "Door was opened while washing machine was off" + conditions: + - condition: trigger + id: door_open + + - condition: state + entity_id: binary_sensor.washing_machine + state: 'off' + + - condition: state + entity_id: input_boolean.swap_laundry + state: 'on' + + sequence: + - service: logbook.log + data_template: + name: Swap Laundry - Load swapped + entity_id: automation.swap_laundry + message: Door was opened while washing machine was off. Assuming a load just got swapped + + - service: homeassistant.turn_off + target: + entity_id: input_boolean.swap_laundry + + mode: single diff --git a/components/packages/automatic_sprinkler_system.yaml b/components/packages/automatic_sprinkler_system.yaml new file mode 100644 index 0000000..d75eaed --- /dev/null +++ b/components/packages/automatic_sprinkler_system.yaml @@ -0,0 +1,778 @@ +input_boolean: + sprinkler_is_winterized: + name: "Sprinkler: Is Winterized" + icon: mdi:sprinkler + + log_precipitation: + name: "Log Precipitation" + icon: mdi:file + + log_soil_moisture: + name: "Log Soil Moisture" + icon: mdi:file + +input_datetime: + sprinkler_last_reset: + name: "Sprinkler: Last Reset" + icon: mdi:calendar + has_date: true + has_time: false + + sprinkler_last_run: + name: "Sprinkler: Last Run" + icon: mdi:calendar + has_date: true + has_time: false + + sprinkler_next_dawn: + name: "Sprinkler: Next Dawn" + icon: mdi:weather-sunset-up + has_date: true + has_time: true + +input_number: + sprinkler_days_before_high_run: + name: "Sprinkler: Days Before High Run" + icon: mdi:calendar + min: 0 + max: 10 + step: 1 + mode: box + + sprinkler_days_before_medium_run: + name: "Sprinkler: Days Before Medium Run" + icon: mdi:calendar + min: 0 + max: 10 + step: 1 + mode: box + + sprinkler_days_before_low_run: + name: "Sprinkler: Days Before Low Run" + icon: mdi:calendar + min: 0 + max: 10 + step: 1 + mode: box + + sprinkler_days_before_reset: + name: "Sprinkler: Days Before Reset" + icon: mdi:calendar + min: 0 + max: 20 + step: 1 + mode: box + + sprinkler_precipitation_below_high_run: + name: "Sprinkler: Precipitation Below - High Run" + icon: mdi:water + min: 0 + max: 50 + step: 0.1 + unit_of_measurement: mm + mode: box + + sprinkler_precipitation_below_medium_run: + name: "Sprinkler: Precipitation Below - Medium Run" + icon: mdi:water + min: 0 + max: 50 + step: 0.1 + unit_of_measurement: mm + mode: box + + sprinkler_precipitation_below_low_run: + name: "Sprinkler: Precipitation Below - Low Run" + icon: mdi:water + min: 0 + max: 50 + step: 0.1 + unit_of_measurement: mm + mode: box + + sprinkler_temp_above_high_run: + name: "Sprinkler: Temp Above - High Run" + icon: mdi:thermometer-high + min: 50 + max: 90 + step: 1 + unit_of_measurement: °F + + sprinkler_temp_above_medium_run: + name: "Sprinkler: Temp Above - Medium Run" + icon: mdi:thermometer + min: 50 + max: 90 + step: 1 + unit_of_measurement: °F + + sprinkler_temp_above_low_run: + name: "Sprinkler: Temp Above - Low Run" + icon: mdi:thermometer-low + min: 50 + max: 90 + step: 1 + unit_of_measurement: °F + + sprinkler_maximum_temperature_measured: + name: "Sprinkler: Maximum Temperature Measured" + icon: mdi:thermometer + min: -20 + max: 150 + step: 0.01 + unit_of_measurement: °F + mode: box + + sprinkler_repeat_program_amount: + name: "Sprinkler: Repeat Program Amount" + icon: mdi:pound + min: 0 + max: 10 + step: 1 + + sprinkler_high_water_level: + name: "Sprinkler: High Water Level" + icon: mdi:water-plus + min: 0 + max: 300 + step: 1 + mode: box + + sprinkler_medium_water_level: + name: "Sprinkler: Medium Water Level" + icon: mdi:water + min: 0 + max: 300 + step: 1 + mode: box + + sprinkler_low_water_level: + name: "Sprinkler: Low Water Level" + icon: mdi:water-minus + min: 0 + max: 300 + step: 1 + mode: box + +template: + - trigger: + - platform: state + entity_id: + - input_number.sprinkler_maximum_temperature_measured + - sensor.sprinkler_total_rain_fallen_plus_expected + - sensor.sprinkler_days_since_last_watering + - input_number.sprinkler_temp_above_high_run + - input_number.sprinkler_temp_above_medium_run + - input_number.sprinkler_temp_above_low_run + - input_number.sprinkler_precipitation_below_high_run + - input_number.sprinkler_precipitation_below_medium_run + - input_number.sprinkler_precipitation_below_low_run + - input_number.sprinkler_days_before_high_run + - input_number.sprinkler_days_before_medium_run + - input_number.sprinkler_days_before_low_run + - switch.opensprinkler_enabled + not_to: "unavailable" + + - platform: event + event_type: event_template_reloaded + id: "reload" + + - platform: homeassistant + event: start + + sensor: + - name: "Sprinkler: Current Status" + unique_id: "custom_sensor.sprinkler_current_status" + icon: mdi:sprinkler-variant + state: > + {%- if is_state('input_boolean.sprinkler_is_winterized','on') %} + Sprinkler is winterized + {%- else %} + {%- if is_state('switch.opensprinkler_enabled','on') %} + {%- if states('input_number.sprinkler_maximum_temperature_measured') | int(default=0) > states('input_number.sprinkler_temp_above_low_run') | int(default=0) %} + {%- if states('input_number.sprinkler_maximum_temperature_measured') | int(default=0) > states('input_number.sprinkler_temp_above_medium_run') | int(default=0) %} + {%- if states('input_number.sprinkler_maximum_temperature_measured') | int(default=0) > states('input_number.sprinkler_temp_above_high_run') | int(default=0) %} + {%- if states('sensor.sprinkler_total_rain_fallen_plus_expected') | float(default=0) < states('input_number.sprinkler_precipitation_below_high_run') | float(default=0.0) -%} + {%- if states('sensor.sprinkler_days_since_last_watering') | float(default=0) > states('input_number.sprinkler_days_before_high_run') | float(default=10.0) -%} + High + {%- else %} + Too Soon + {% endif %} + {%- else %} + Too Wet + {% endif %} + {%- else %} + {%- if states('sensor.sprinkler_total_rain_fallen_plus_expected') | float(default=0) < states('input_number.sprinkler_precipitation_below_medium_run') | float(default=0.0) %} + {%- if states('sensor.sprinkler_days_since_last_watering') | float(default=0) > states('input_number.sprinkler_days_before_medium_run') | float(default=10.0) %} + Medium + {%- else %} + Too Soon + {% endif %} + {%- else %} + Too Wet + {%- endif %} + {% endif %} + {%- else %} + {%- if states('sensor.sprinkler_total_rain_fallen_plus_expected') | float(default=0) < states('input_number.sprinkler_precipitation_below_low_run') | float(default=0.0) %} + {%- if states('sensor.sprinkler_days_since_last_watering') | float(default=0) > states('input_number.sprinkler_days_before_low_run') | float(default=10.0) %} + Low + {%- else %} + Too Soon + {% endif %} + {%- else %} + Too Wet + {% endif %} + {% endif %} + {%- else %} + Too Cold + {% endif %} + {%- else %} + Off + {% endif %} + {% endif %} + + - trigger: + - platform: state + entity_id: sensor.sprinkler_recent_rain_precipitation + + - platform: event + event_type: event_template_reloaded + id: "reload" + + - platform: homeassistant + event: start + + sensor: + - name: "Sprinkler: Total Rain Fallen Plus Expected" + unique_id: "custom_sensor.sprinkler_total_rain_fallen_plus_expected" + icon: mdi:weather-pouring + unit_of_measurement: mm + availability: "{{ states('sensor.sprinkler_recent_rain_precipitation') not in ['unkown', 'unavailable'] }}" + state: > + {{ (states('sensor.sprinkler_recent_rain_precipitation') | float + states('sensor.sprinkler_total_expected_precipitation') | float(default=100.0) ) | round(2) }} + + - trigger: + - platform: state + entity_id: sensor.sun_next_rising + + - platform: event + event_type: event_template_reloaded + id: "reload" + + - platform: homeassistant + event: start + + sensor: + - name: "Sprinkler: One Hour Before Sunrise" + unique_id: "custom_sensor.sprinkler_one_hour_before_sunrise" + icon: mdi:clock + device_class: timestamp + state: > + {{ (( as_timestamp(states('sensor.sun_next_rising')) - 3600) | timestamp_utc) }} + + - trigger: + - platform: state + entity_id: + - sensor.opensprinkler_water_level + - input_number.front_yard_station_minutes + - input_number.east_side_station_minutes + - input_number.back_yard_station_minutes + - input_number.west_side_station_minutes + - input_number.sprinkler_repeat_program_amount + + - platform: event + event_type: event_template_reloaded + id: "reload" + + - platform: homeassistant + event: start + + sensor: + - name: "Sprinkler: Expected Run Length" + unique_id: "custom_sensor.sprinkler_expected_run_length" + icon: mdi:clock + unit_of_measurement: seconds + availability: > + {{ states('sensor.opensprinkler_water_level') not in ['unkown', 'unavailable'] and + states('input_number.front_yard_station_minutes') not in ['unkown', 'unavailable'] and + states('input_number.east_side_station_minutes') not in ['unkown', 'unavailable'] and + states('input_number.back_yard_station_minutes') not in ['unkown', 'unavailable'] and + states('input_number.west_side_station_minutes') not in ['unkown', 'unavailable'] and + states('input_number.sprinkler_repeat_program_amount') not in ['unkown', 'unavailable'] }} + state: > + {{ states("sensor.opensprinkler_water_level")| float(default=0) | multiply(0.01) | multiply(states("input_number.front_yard_station_minutes") | multiply(60)) | float(default=0) + + states("sensor.opensprinkler_water_level")| float(default=0) | multiply(0.01) | multiply(states("input_number.east_side_station_minutes") | multiply(60)) | float(default=0) + + states("sensor.opensprinkler_water_level")| float(default=0) | multiply(0.01) | multiply(states("input_number.back_yard_station_minutes") | multiply(60)) | float(default=0) + + states("sensor.opensprinkler_water_level")| float(default=0) | multiply(0.01) | multiply(states("input_number.west_side_station_minutes") | multiply(60)) | float(default=0) * + states("input_number.sprinkler_repeat_program_amount") | float(default=0) }} + + attributes: + front_yard: "{{ states('sensor.opensprinkler_water_level')| float(default=0) | multiply(0.01) | multiply(states('input_number.front_yard_station_minutes') | multiply(60)) | float(default=0) }} seconds" + east_side: "{{ states('sensor.opensprinkler_water_level')| float(default=0) | multiply(0.01) | multiply(states('input_number.east_side_station_minutes') | multiply(60)) | float(default=0) }} seconds" + back_yard: "{{ states('sensor.opensprinkler_water_level')| float(default=0) | multiply(0.01) | multiply(states('input_number.back_yard_station_minutes') | multiply(60)) | float(default=0) }} seconds" + west_side: "{{ states('sensor.opensprinkler_water_level')| float(default=0) | multiply(0.01) | multiply(states('input_number.west_side_station_minutes') | multiply(60)) | float(default=0) }} seconds" + water_level: "{{ states('sensor.opensprinkler_water_level') | float(default=0) }}%" + run_cycle: "{{ states('input_number.sprinkler_repeat_program_amount') | float(default=0) }} time(s)" + + - trigger: + - platform: time_pattern + minutes: "/5" + + - platform: state + entity_id: input_datetime.sprinkler_last_reset + + - platform: state + entity_id: input_datetime.sprinkler_next_dawn + + - platform: event + event_type: event_template_reloaded + id: "reload" + + - platform: homeassistant + event: start + + sensor: + - name: "Sprinkler: Days Since Last Watering" + unique_id: "custom_sensor.sprinkler_days_since_last_watering" + icon: mdi:calendar + state: > + {{ ((as_timestamp(states('sensor.sprinkler_one_hour_before_sunrise')) - as_timestamp(states('input_datetime.sprinkler_last_reset'))) / 86400 | float) | round(2) }} + + # This really isn't needed. It just checks the trend binary_sensor.is_raining, and keeps it 'on' an extra 15 minutes + - trigger: + - platform: state + entity_id: binary_sensor.is_raining + not_from: + - "unknown" + - "unavailable" + + binary_sensor: + - name: "Sprinkler: Raining" + unique_id: "custom_binary_sensor.sprinkler_raining" + device_class: moisture + delay_off: + minutes: 15 + # availability: "{{ states('sensor.rain_quarter_hourly_precipitation') not in ['unkown', 'unavailable'] }}" + # state: > + # {{ states('sensor.rain_quarter_hourly_precipitation') | float(default=0) > 0.0 }} + availability: "{{ states('binary_sensor.is_raining') not in ['unkown', 'unavailable'] }}" + state: > + {{ states('binary_sensor.is_raining') }} + + - trigger: + # - platform: homeassistant + # event: start + + # - platform: time + # at: '01:00:00' + + # - platform: state + # entity_id: input_boolean.sprinkler_is_winterized + + binary_sensor: + - name: "Sprinkler: In Season" + unique_id: "custom_binary_sensor.sprinkler_in_season" + device_class: moisture + state: "{{ now().month > 4 and now().month < 10 }}" + + # - trigger: + # - platform: homeassistant + # event: start + + # - platform: time + # at: '01:00:00' + + # - platform: state + # entity_id: input_boolean.sprinkler_is_winterized + + # - platform: event + # event_type: event_template_reloaded + # id: "reload" + + # binary_sensor: + # - name: "Sprinkler: Should Winterize" + # unique_id: "custom_binary_sensor.sprinkler_should_winterize" + # device_class: problem + # state: "{{ iif(is_state('binary_sensor.sprinkler_in_season', 'off'), iif(is_state('input_boolean.sprinkler_is_winterized', 'off'), 'on', 'off'), 'off') }}" + + # - trigger: + # - platform: homeassistant + # event: start + + # - platform: time + # at: '01:00:00' + + # - platform: state + # entity_id: input_boolean.sprinkler_is_winterized + + # - platform: event + # event_type: event_template_reloaded + # id: "reload" + + # binary_sensor: + # - name: "Sprinkler: Should Dewinterize" + # unique_id: "custom_binary_sensor.sprinkler_should_dewinterize" + # device_class: problem + # state: "{{ iif(is_state('binary_sensor.sprinkler_in_season', 'on'), iif(is_state('input_boolean.sprinkler_is_winterized', 'on'), 'on', 'off'), 'off') }}" + +automation: + - alias: "Log Precipitation" + id: 1f133cd1-7e69-4eb9-ba5f-7fa967dd869d + trigger: + - platform: state + entity_id: input_boolean.log_precipitation + from: "off" + to: "on" + + - platform: state + entity_id: sensor.ecowitt_wh40_21917_precipitation + not_to: + - "unknown" + - "unavailable" + + - platform: state + entity_id: binary_sensor.is_raining + + condition: + - condition: state + entity_id: input_boolean.log_precipitation + state: "on" + action: + - service: notify.precipitation + data: + message: "{{now().strftime('%Y-%m-%d')}}T{{now().strftime('%H:%M:%S.%f')}},{{states('sensor.ecowitt_wh40_21917_precipitation')}},{{states('binary_sensor.is_raining')}},{{state_attr('binary_sensor.is_raining','sample_count')}},{{state_attr('binary_sensor.is_raining','sample_duration')}},{{state_attr('binary_sensor.is_raining','min_gradient')}},{{state_attr('binary_sensor.is_raining','gradient')}}" + + + - alias: "Log Soil Moisture" + id: 362fbc8d-64f1-47dd-a686-e460e9c18690 + trigger: + - platform: state + entity_id: input_boolean.log_soil_moisture + from: "off" + to: "on" + + - platform: state + entity_id: sensor.fineoffset_wh51_00f935_moisture + not_to: + - "unknown" + - "unavailable" + + - platform: state + entity_id: sensor.fineoffset_wh51_0ce593_moisture + not_to: + - "unknown" + - "unavailable" + + - platform: state + entity_id: sensor.fineoffset_wh51_0d1e11_moisture + not_to: + - "unknown" + - "unavailable" + + condition: + - condition: state + entity_id: input_boolean.log_soil_moisture + state: "on" + action: + - service: notify.soil_moisture + data: + message: "{{now().strftime('%Y-%m-%d')}}T{{now().strftime('%H:%M:%S.%f')}},{{states('sensor.fineoffset_wh51_00f935_moisture')}},{{states('sensor.fineoffset_wh51_0ce593_moisture')}},{{states('sensor.fineoffset_wh51_0d1e11_moisture')}}" + + - alias: "Sprinkler: Reset After Automatic Run" + id: automation_sprinkler_reset_after_automatic_run + trigger: + - platform: state + entity_id: binary_sensor.automatic_run_program_running + from: "on" + to: "off" + action: + - service: script.sprinkler_reset_helper_values + + - service: input_datetime.set_datetime + target: + entity_id: input_datetime.sprinkler_last_run + data: + timestamp: "{{ as_timestamp(now()) }}" + + - alias: "Sprinkler: Update Next Dawn" + id: automation_sprinkler_update_next_dawn + trigger: + - platform: state + entity_id: sensor.sun_next_dawn + condition: "{{ states('sensor.sun_next_dawn') not in ['unkown', 'unavailable'] }}" + action: + - service: input_datetime.set_datetime + target: + entity_id: input_datetime.sprinkler_next_dawn + data: + timestamp: "{{ as_timestamp(states('sensor.sun_next_dawn')) }}" + + - alias: "Sprinkler: Check Maximum Temperature When Temperature Changes" + id: automation_sprinkler_check_maximum_temperature_when_temperature_changes + trigger: + - platform: state + entity_id: sensor.outdoors_mean_temperature + condition: + - condition: numeric_state + entity_id: sensor.outdoors_mean_temperature + above: input_number.sprinkler_maximum_temperature_measured + action: + service: input_number.set_value + target: + entity_id: input_number.sprinkler_maximum_temperature_measured + data: + value: "{{ states('sensor.outdoors_mean_temperature') | float(default=50) }}" + + - alias: "Sprinkler: Stop Watering If Starts Raining" + id: 74ef91ed-6665-4e24-a817-c1a3540d2e3d + trigger: + - platform: state + entity_id: binary_sensor.is_raining + to: 'on' + + condition: + condition: or + conditions: + - condition: state + entity_id: binary_sensor.back_yard_station_running + state: "on" + - condition: state + entity_id: binary_sensor.front_yard_station_running + state: "on" + - condition: state + entity_id: binary_sensor.east_side_station_running + state: "on" + - condition: state + entity_id: binary_sensor.west_side_station_running + state: "on" + - condition: state + entity_id: binary_sensor.s05_station_running + state: "on" + - condition: state + entity_id: binary_sensor.s06_station_running + state: "on" + - condition: state + entity_id: binary_sensor.s07_station_running + state: "on" + - condition: state + entity_id: binary_sensor.master_station_running + state: "on" + + action: + service: opensprinkler.stop + data: + entity_id: switch.opensprinkler_enabled + + - alias: "Sprinkler: Check If Yard Needs to Be Watered" + id: automation_sprinkler_check_if_yard_needs_to_be_watered + description: "If OpenSprinkler is enabled and the sprinkler system is not winterized, then check if the grass should be watered" + mode: queued + trigger: + - platform: sun + event: sunrise + offset: "-01:15:00" + - platform: state + entity_id: sensor.sprinkler_total_rain_fallen_plus_expected + - platform: state + entity_id: input_number.sprinkler_maximum_temperature_measured + - platform: state + entity_id: sensor.sprinkler_days_since_last_watering + - platform: state + entity_id: input_number.sprinkler_temp_above_high_run + - platform: state + entity_id: input_number.sprinkler_temp_above_medium_run + - platform: state + entity_id: input_number.sprinkler_temp_above_low_run + + condition: + - condition: state + entity_id: switch.opensprinkler_enabled + state: "on" + + - condition: state + entity_id: input_boolean.sprinkler_is_winterized + state: "off" + + action: + - choose: + # Check for High run + - conditions: + - condition: numeric_state + entity_id: input_number.sprinkler_maximum_temperature_measured + above: input_number.sprinkler_temp_above_high_run + - condition: numeric_state + entity_id: sensor.sprinkler_days_since_last_watering + above: input_number.sprinkler_days_before_high_run #0 + - condition: numeric_state + entity_id: sensor.sprinkler_total_rain_fallen_plus_expected + below: input_number.sprinkler_precipitation_below_high_run #20.1 + sequence: + - service: input_number.set_value + target: + entity_id: input_number.sprinkler_repeat_program_amount + data: + value: 1 + - service: opensprinkler.set_water_level + data: + entity_id: sensor.opensprinkler_water_level + water_level: "{{ states('input_number.sprinkler_high_water_level') | int }}" + + # Check for Medium run + - conditions: + - condition: numeric_state + entity_id: sensor.sprinkler_days_since_last_watering + above: input_number.sprinkler_days_before_medium_run #2 + - condition: numeric_state + entity_id: input_number.sprinkler_maximum_temperature_measured + above: input_number.sprinkler_temp_above_medium_run + below: input_number.sprinkler_temp_above_high_run + - condition: numeric_state + entity_id: sensor.sprinkler_total_rain_fallen_plus_expected + below: input_number.sprinkler_precipitation_below_medium_run #15.1 + sequence: + - service: input_number.set_value + target: + entity_id: input_number.sprinkler_repeat_program_amount + data: + value: 1 + - service: opensprinkler.set_water_level + data: + entity_id: sensor.opensprinkler_water_level + water_level: "{{ states('input_number.sprinkler_medium_water_level') | int }}" + + # Check for Low run + - conditions: + - condition: numeric_state + entity_id: sensor.sprinkler_days_since_last_watering + above: input_number.sprinkler_days_before_low_run #3 + - condition: numeric_state + entity_id: input_number.sprinkler_maximum_temperature_measured + above: input_number.sprinkler_temp_above_low_run + below: input_number.sprinkler_temp_above_medium_run + - condition: numeric_state + entity_id: sensor.sprinkler_total_rain_fallen_plus_expected + below: input_number.sprinkler_precipitation_below_low_run #10.1 + sequence: + - service: input_number.set_value + target: + entity_id: input_number.sprinkler_repeat_program_amount + data: + value: 1 + - service: opensprinkler.set_water_level + data: + entity_id: sensor.opensprinkler_water_level + water_level: "{{ states('input_number.sprinkler_low_water_level') | int }}" + + # Check for reset + - conditions: + - condition: numeric_state + entity_id: sensor.sprinkler_days_since_last_watering + above: input_number.sprinkler_days_before_reset #4 + sequence: + - service: script.sprinkler_reset_helper_values + data: {} + + default: + - service: input_number.set_value + target: + entity_id: input_number.sprinkler_repeat_program_amount + data: + value: 0 + - service: opensprinkler.set_water_level + data: + entity_id: sensor.opensprinkler_water_level + water_level: 0 + +script: + sprinkler_reset_helper_values: + alias: "Sprinkler: Reset Helper Values" + icon: mdi:refresh + sequence: + - service: input_number.set_value + target: + entity_id: input_number.sprinkler_maximum_temperature_measured + data: + value: "{{ states('sensor.outdoors_mean_temperature') | float(default=50) }}" + + - service: input_datetime.set_datetime + target: + entity_id: input_datetime.sprinkler_last_reset + data: + timestamp: "{{ as_timestamp(now()) }}" + + - service: utility_meter.reset + data: {} + target: + entity_id: select.sprinkler_recent_rain + + sprinkler_start_scripted_watering: + alias: "Sprinkler: Start Scripted Watering" + icon: mdi:sprinkler-variant + sequence: + - alias: "Run the sprinkler program the appropriate number of times" + repeat: + count: "{{states('input_number.sprinkler_repeat_program_amount') | int }}" + sequence: + - service: opensprinkler.run + data: + entity_id: switch.opensprinkler_enabled + run_seconds: + - '{{ states("sensor.opensprinkler_water_level") | multiply(0.01) | multiply(states("input_number.front_yard_station_minutes") | multiply(60)) | int }}' + - '{{ states("sensor.opensprinkler_water_level") | multiply(0.01) | multiply(states("input_number.east_side_station_minutes") | multiply(60)) | int }}' + - '{{ states("sensor.opensprinkler_water_level") | multiply(0.01) | multiply(states("input_number.back_yard_station_minutes") | multiply(60)) | int }}' + - '{{ states("sensor.opensprinkler_water_level") | multiply(0.01) | multiply(states("input_number.west_side_station_minutes") | multiply(60)) | int }}' + + - delay: '{{ states("sensor.opensprinkler_water_level") | multiply(0.01) | multiply(states("input_number.front_yard_station_minutes") | multiply(60)) | int }}' + - delay: '{{ states("sensor.opensprinkler_water_level") | multiply(0.01) | multiply(states("input_number.east_side_station_minutes") | multiply(60)) | int }}' + - delay: '{{ states("sensor.opensprinkler_water_level") | multiply(0.01) | multiply(states("input_number.back_yard_station_minutes") | multiply(60)) | int }}' + - delay: '{{ states("sensor.opensprinkler_water_level") | multiply(0.01) | multiply(states("input_number.west_side_station_minutes") | multiply(60)) | int }}' + +utility_meter: + rain_quarter_hourly: + unique_id: utility_meter_rain_quarter_hourly + name: "Rain: Quarter Hourly" + source: sensor.ecowitt_wh40_21917_precipitation + cycle: quarter-hourly + tariffs: + - Precipitation + + rain_hourly: + unique_id: utility_meter_rain_hourly + name: "Rain: Hourly" + source: sensor.ecowitt_wh40_21917_precipitation + cycle: hourly + tariffs: + - Precipitation + + rain_daily: + unique_id: utility_meter_rain_daily + name: "Rain: Daily" + source: sensor.ecowitt_wh40_21917_precipitation + cycle: daily + offset: "12:00" + tariffs: + - Precipitation + + rain_monthly: + unique_id: utility_meter_rain_monthly + name: "Rain: Monthly" + source: sensor.ecowitt_wh40_21917_precipitation + cycle: monthly + tariffs: + - Precipitation + + rain_yearly: + unique_id: utility_meter_rain_yearly + name: "Rain: Yearly" + source: sensor.ecowitt_wh40_21917_precipitation + cycle: yearly + tariffs: + - Precipitation + + sprinkler_recent_rain: + unique_id: utility_meter_sprinkler_recent_rain + name: "Sprinkler: Recent Rain" + source: sensor.ecowitt_wh40_21917_precipitation + cycle: yearly + tariffs: + - Precipitation diff --git a/components/packages/automation.yaml b/components/packages/automation.yaml new file mode 100644 index 0000000..b777d75 --- /dev/null +++ b/components/packages/automation.yaml @@ -0,0 +1,2 @@ +# Import default automations file +automation: !include ../../automations.yaml \ No newline at end of file diff --git a/components/packages/automations_redirected.yaml b/components/packages/automations_redirected.yaml new file mode 100644 index 0000000..4b430d7 --- /dev/null +++ b/components/packages/automations_redirected.yaml @@ -0,0 +1,2 @@ +# Import nested automations +automation nested: !include_dir_list ../../automations diff --git a/components/packages/bayesian_testing.yaml b/components/packages/bayesian_testing.yaml new file mode 100644 index 0000000..23241fe --- /dev/null +++ b/components/packages/bayesian_testing.yaml @@ -0,0 +1,68 @@ +binary_sensor: + - name: 'Bayesian Crunching' + platform: 'bayesian' + prior: 0.25 + probability_threshold: 0.7 + observations: + - entity_id: 'input_boolean.bayesian_test_1' # Motion + prob_given_true: 0.99 + prob_given_false: 0.85 + platform: 'state' + to_state: 'on' + + - entity_id: 'input_boolean.bayesian_test_2' # Person + prob_given_true: 0.99 + prob_given_false: 0.85 + platform: 'state' + to_state: 'on' + + - entity_id: 'input_boolean.bayesian_test_3' # Home Occupied + prob_given_true: 0.99 + prob_given_false: 0.01 + platform: 'state' + to_state: 'on' + + # - entity_id: 'input_boolean.bayesian_test_4' # person occupancy + # prob_given_true: 0.99 + # prob_given_false: 0.97 + # platform: 'state' + # to_state: 'on' + + # - entity_id: 'input_boolean.bayesian_test_5' # dreambox recently active + # prob_given_true: 0.75 + # prob_given_false: 0.5 + # platform: 'state' + # to_state: 'on' + +input_boolean: + bayesian_test_1: + name: Bayesian Test 1 + icon: mdi:numeric-1-circle + + bayesian_test_2: + name: Bayesian Test 2 + icon: mdi:numeric-2-circle + + bayesian_test_3: + name: Bayesian Test 3 + icon: mdi:numeric-3-circle + + bayesian_test_4: + name: Bayesian Test 4 + icon: mdi:numeric-4-circle + + bayesian_test_5: + name: Bayesian Test 5 + icon: mdi:numeric-5-circle + + bayesian_test_6: + name: Bayesian Test 6 + icon: mdi:numeric-6-circle + + bayesian_test_7: + name: Bayesian Test 7 + icon: mdi:numeric-7-circle + + bayesian_test_8: + name: Bayesian Test 8 + icon: mdi:numeric-8-circle \ No newline at end of file diff --git a/components/packages/camera_casting.yaml b/components/packages/camera_casting.yaml new file mode 100644 index 0000000..83032ee --- /dev/null +++ b/components/packages/camera_casting.yaml @@ -0,0 +1,107 @@ +input_select: + camera_dropdown: + name: Cast Camera + options: + - Blue Room + - Kitchen + - Front Room + - Computer Area + - Garage + - Nursery + - Back Yard + - Front Yard + - Front Door + - Master Bedroom + initial: Nursery + icon: mdi:camera + cast_to_screen_dropdown: + name: To Screen + options: + - Front Room Display + - Nursery Hub + - Computer Area Hub + +script: + execute_cast_dropdown: + alias: Press to execute + sequence: + # - service: media_player.play_media + # target: + # entity_id: > + # {% if is_state('input_select.cast_to_screen_dropdown', 'Front Room Display') %} + # media_player.front_room_hub + # {% elif is_state('input_select.cast_to_screen_dropdown', 'Nursery Hub') %} + # media_player.nursery_hub + # {% elif is_state('input_select.cast_to_screen_dropdown', 'Computer Area Hub') %} + # media_player.computer_area_hub + # {% endif %} + # data: + # media_content_id: > + # {% if is_state('input_select.camera_dropdown', 'Blue Room') %} + # media-source://camera/camera.frigate_cam01 + # {% elif is_state('input_select.camera_dropdown', 'Kitchen') %} + # media-source://camera/camera.frigate_cam12 + # {% elif is_state('input_select.camera_dropdown', 'Computer Area') %} + # media-source://camera/camera.frigate_cam03 + # {% elif is_state('input_select.camera_dropdown', 'Garage') %} + # media-source://camera/camera.frigate_cam04 + # {% elif is_state('input_select.camera_dropdown', 'Master Bedroom') %} + # media-source://camera/camera.frigate_cam06 + # {% elif is_state('input_select.camera_dropdown', 'Nursery') %} + # media-source://camera/camera.frigate_cam08 + # {% elif is_state('input_select.camera_dropdown', 'Back Yard') %} + # media-source://camera/camera.frigate_cam14 + # {% elif is_state('input_select.camera_dropdown', 'Front Yard') %} + # media-source://camera/camera.frigate_cam19 + # {% elif is_state('input_select.camera_dropdown', 'Front Room') %} + # media-source://camera/camera.frigate_cam13 + # {% endif %} + # media_content_type: 'image/jpeg' + + - service: media_player.volume_set + data: + entity_id: > + {% if is_state('input_select.cast_to_screen_dropdown', 'Front Room Display') %} + media_player.front_room_hub + {% elif is_state('input_select.cast_to_screen_dropdown', 'Nursery Hub') %} + media_player.nursery_hub + {% elif is_state('input_select.cast_to_screen_dropdown', 'Computer Area Hub') %} + media_player.computer_area_hub + {% endif %} + volume_level: 0.100 + + - service: webrtc.dash_cast + data: + entity_id: > + {% if is_state('input_select.cast_to_screen_dropdown', 'Front Room Display') %} + media_player.front_room_hub + {% elif is_state('input_select.cast_to_screen_dropdown', 'Nursery Hub') %} + media_player.nursery_hub + {% elif is_state('input_select.cast_to_screen_dropdown', 'Computer Area Hub') %} + media_player.computer_area_hub + {% endif %} + url: > + {% if is_state('input_select.camera_dropdown', 'Blue Room') %} + rtsp://192.168.1.11:8554/rtsp_cam01_sub + {% elif is_state('input_select.camera_dropdown', 'Kitchen') %} + rtsp://192.168.1.11:8554/rtsp_cam12_sub + {% elif is_state('input_select.camera_dropdown', 'Computer Area') %} + rtsp://192.168.1.11:8554/rtsp_cam03_sub + {% elif is_state('input_select.camera_dropdown', 'Garage') %} + rtsp://192.168.1.11:8554/rtsp_cam04_sub + {% elif is_state('input_select.camera_dropdown', 'Master Bedroom') %} + rtsp://192.168.1.11:8554/rtsp_cam06_sub + {% elif is_state('input_select.camera_dropdown', 'Nursery') %} + rtsp://192.168.1.11:8554/rtsp_cam08_sub + {% elif is_state('input_select.camera_dropdown', 'Back Yard') %} + rtsp://192.168.1.11:8554/rtsp_cam14_sub + {% elif is_state('input_select.camera_dropdown', 'Front Yard') %} + rtsp://192.168.1.11:8554/rtsp_cam18_sub + {% elif is_state('input_select.camera_dropdown', 'Front Door') %} + rtsp://192.168.1.11:8554/rtsp_cam19_sub + {% elif is_state('input_select.camera_dropdown', 'Front Room') %} + rtsp://192.168.1.11:8554/rtsp_cam13_sub + {% endif %} + force: true + extra: + mode: webrtc diff --git a/components/packages/camera_ptz/cam14.yaml b/components/packages/camera_ptz/cam14.yaml new file mode 100644 index 0000000..972e8aa --- /dev/null +++ b/components/packages/camera_ptz/cam14.yaml @@ -0,0 +1,593 @@ +input_text: + camera14_status: + name: Camera14 Status + icon: mdi:cctv + +input_select: + camera14_preset: + name: Camera14 Preset + options: + - Deck + - Sandbox + - Grove + - Grass + - Yard + - Stairs + - BesideStairs + +input_button: + # PTZ Controls + cam14_ptz_up: + name: Cam14 PTZ Up + icon: mdi:arrow-up + cam14_ptz_right_up: + name: Cam14 PTZ Right Up + icon: mdi:arrow-top-right + cam14_ptz_right: + name: Cam14 PTZ Right + icon: mdi:arrow-right + cam14_ptz_right_down: + name: Cam14 Right Down + icon: mdi:arrow-bottom-right + cam14_ptz_down: + name: Cam14 PTZ Down + icon: mdi:arrow-down + cam14_ptz_left_down: + name: Cam14 PTZ Left Down + icon: mdi:arrow-bottom-left + cam14_ptz_left: + name: Cam14 PTZ Left + icon: mdi:arrow-left + cam14_ptz_left_up: + name: Cam14 Left Up + icon: mdi:arrow-top-left + cam14_ptz_zoom_in: + name: Cam14 Zoom In + icon: mdi:magnify-plus + cam14_ptz_zoom_out: + name: Cam14 Zoom Out + icon: mdi:magnify-minus + + # Camera Preset + cam14_ptz_preset_1: + name: Cam14 Deck + icon: mdi:grill + cam14_ptz_preset_2: + name: Cam14 Sandbox + icon: mdi:pail + cam14_ptz_preset_3: + name: Cam14 Yard + icon: mdi:slide + cam14_ptz_preset_4: + name: Cam14 Grove + icon: mdi:forest + cam14_ptz_preset_5: + name: Cam14 Stairs + icon: mdi:stairs + cam14_ptz_preset_6: + name: Cam14 Preset 6 + icon: mdi:stairs-down + cam14_ptz_preset_7: + name: Cam14 Preset 7 + icon: mdi:grass + cam14_ptz_preset_8: + name: Cam14 Preset 8 + icon: mdi:map-marker + cam14_ptz_preset_9: + name: Cam14 Preset 9 + icon: mdi:map-marker + cam14_ptz_preset_10: + name: Cam14 Preset 10 + icon: mdi:map-marker + +automation: + # - id: automation_cam14_ptz_controls + # alias: Cam14 PTZ Controls + # mode: queued + # trigger: + # - id: up + # platform: state + # entity_id: input_button.cam14_ptz_up + + # - id: right_up + # platform: state + # entity_id: input_button.cam14_ptz_right_up + + # - id: right + # platform: state + # entity_id: input_button.cam14_ptz_right + + # - id: right_down + # platform: state + # entity_id: input_button.cam14_ptz_right_down + + # - id: down + # platform: state + # entity_id: input_button.cam14_ptz_down + + # - id: left_down + # platform: state + # entity_id: input_button.cam14_ptz_left_down + + # - id: left + # platform: state + # entity_id: input_button.cam14_ptz_left + + # - id: left_up + # platform: state + # entity_id: input_button.cam14_ptz_left_up + + # - id: zoom_in + # platform: state + # entity_id: input_button.cam14_ptz_zoom_in + + # - id: zoom_out + # platform: state + # entity_id: input_button.cam14_ptz_zoom_out + + # condition: [] + # action: + # - service: amcrest.ptz_control + # data: + # entity_id: camera.frigate_cam14 + # movement: "{{ trigger.id }}" + # travel_time: 0.5 + + # - delay: '00:00:01' + + # - id: automation_manage_frigate_cam14_motion + # mode: single + # alias: Manage Frigate Cam14 Motion + # description: "" + # trigger: + # - platform: state + # entity_id: input_boolean.cycle_cam14 + + # - platform: homeassistant + # event: start + + # - platform: event + # event_type: automation_reloaded + + # action: + # - choose: + # - conditions: + # - condition: state + # entity_id: input_boolean.cycle_cam14 + # state: 'off' + # sequence: + # - service: switch.turn_on + # target: + # entity_id: switch.frigate_cam14_motion + # default: + # - service: switch.turn_off + # target: + # entity_id: switch.frigate_cam14_motion + + - id: automation_cycle_back_yard_camera + mode: single + alias: Cycle Back Yard Camera + description: "" + trigger: + - platform: state + entity_id: input_boolean.cycle_cam14 + + - platform: homeassistant + event: start + + - platform: event + event_type: automation_reloaded + + condition: [] + # - alias: "The input_boolean controlling the cycling of cam14 is on" + # condition: state + # entity_id: input_boolean.cycle_cam14 + # state: "on" + + # - alias: "No people or animals detected by Frigate for the last 5 seconds" + # condition: state + # entity_id: binary_sensor.frigate_cam14_all_occupancy + # state: "off" + # for: + # hours: 0 + # minutes: 0 + # seconds: 5 + + # # Either the camera isn't looking at the deck + # # or the camera is looking at the deck and the deck motion sensor has been off for at least 30 seconds + # # or the camera is looking at the deck and the patio door has been closed for at least 30 seconds + # - condition: or + # conditions: + # - alias: "The input_select isn't set to Deck" + # condition: not + # conditions: + # - condition: state + # entity_id: input_select.camera14_preset + # state: "Deck" + # - alias: "The input_select is set to Deck and there hasn't been motion detected on the deck for the last 30 seconds" + # condition: and + # conditions: + # - condition: state + # entity_id: input_select.camera14_preset + # state: "Deck" + # - condition: state + # entity_id: binary_sensor.deck_motion + # state: "off" + # for: + # seconds: 30 + # - alias: "The input_select is set to deck and the patio door has been shut for at least 30 seconds" + # condition: and + # conditions: + # - condition: state + # entity_id: input_select.camera14_preset + # state: "Deck" + # - condition: state + # entity_id: binary_sensor.patio_door_contact + # state: "off" + # for: + # seconds: 30 + + action: + # - alias: "This always cycles the back yard camera every 45 seconds. It should stop cycling when a person is found, but this version doesn't" + # repeat: + # while: "{{ is_state('input_boolean.cycle_cam14', 'on') }}" + # sequence: + # - service: input_select.select_next + # data: + # cycle: true + # target: + # entity_id: input_select.camera14_preset + + # - delay: "00:00:45" + + - alias: "This should only cycle the back yard camera, if a person isn't found." + repeat: + while: "{{ is_state('input_boolean.cycle_cam14', 'on') }}" + sequence: + - choose: + # If the camera is looking at the deck and the deck motion sensor is on, then wait 5 seconds. + - conditions: + - condition: state + entity_id: input_select.camera14_preset + state: Deck + - condition: state + entity_id: binary_sensor.deck_motion + state: 'on' + sequence: + - service: input_text.set_value + target: + entity_id: input_text.camera14_status + data: + value: "Deck" + - delay: 5 + + # If a person is not found, cycle to the next preset, then wait 30 seconds. + - conditions: + - condition: template + value_template: "{{ is_state('binary_sensor.frigate_cam14_person_occupancy','off') }}" + sequence: + - service: input_text.set_value + target: + entity_id: input_text.camera14_status + data: + value: "Cycling" + - service: input_select.select_next + data: + cycle: true + target: + entity_id: input_select.camera14_preset + + - delay: 30 + + # If a person is found, check if the person is still present every 5 seconds + default: + - service: input_text.set_value + target: + entity_id: input_text.camera14_status + data: + value: "Focusing" + + - repeat: + while: "{{ is_state('binary_sensor.frigate_cam14_person_occupancy','off') }}" + sequence: + - delay: 5 + + - service: input_text.set_value + target: + entity_id: input_text.camera14_status + data: + value: "Static" + + - id: automation_look_at_deck + mode: restart + alias: "Look at deck" + description: "When the patio door is opened, set the camera to the deck preset, if frigate isn't currently detecting anything" + trigger: + - platform: state + entity_id: binary_sensor.patio_door_contact + from: "off" + to: "on" + condition: + - condition: numeric_state + entity_id: sensor.frigate_cam14_all_count + below: 2 + + action: + # We don't need to turn off cycling the back yard camera. + # - service: input_boolean.turn_off + # target: + # entity_id: input_boolean.cycle_cam14 + + - service: input_text.set_value + target: + entity_id: input_text.camera14_status + data: + value: "Deck" + + - service: input_select.select_option + data: + option: Deck + target: + entity_id: input_select.camera14_preset + + # the Cycle cam 14 automation already checks if something is detected. All we need to do is force cam14 to look at the deck + + # - delay: "00:00:05" + + # - repeat: + # while: "{{ is_state('binary_sensor.frigate_cam14_all_occupancy', 'on')}}" + # sequence: + # - delay: "00:00:05" + + # - service: input_boolean.turn_on + # target: + # entity_id: input_boolean.cycle_cam14 + + - id: automation_back_yard_snapshot + mode: restart + alias: "Back Yard Snapshot" + trigger: + - platform: homeassistant + event: start + + - platform: state + entity_id: camera.frigate_cam14 + to: "streaming" + + action: + - service: camera.snapshot + target: + entity_id: camera.frigate_cam14 + data: + filename: "/config/tmp/snapshots/cam14-{{states('input_select.camera14_preset')}}-{{now().strftime('%y%m%d-%H%M%S')}}.jpg" + + - id: automation_cam14_ptz_preset + alias: Cam14 PTZ Presets + mode: single + max_exceeded: silent + trigger: + - id: Preset 1 + platform: state + entity_id: input_button.cam14_ptz_preset_1 + + - id: Preset 2 + platform: state + entity_id: input_button.cam14_ptz_preset_2 + + - id: Preset 3 + platform: state + entity_id: input_button.cam14_ptz_preset_3 + + - id: Preset 4 + platform: state + entity_id: input_button.cam14_ptz_preset_4 + + - id: Preset 5 + platform: state + entity_id: input_button.cam14_ptz_preset_5 + + - id: Preset 6 + platform: state + entity_id: input_button.cam14_ptz_preset_6 + + - id: Preset 7 + platform: state + entity_id: input_button.cam14_ptz_preset_7 + + - id: Preset 8 + platform: state + entity_id: input_button.cam14_ptz_preset_8 + + - id: Preset 9 + platform: state + entity_id: input_button.cam14_ptz_preset_9 + + - id: Preset 10 + platform: state + entity_id: input_button.cam14_ptz_preset_10 + + action: + - choose: + - conditions: > + {{ trigger.id|replace('Preset ','')|int(default=0) == 1}} + sequence: + - service: input_select.select_option + target: + entity_id: input_select.camera14_preset + data: + option: "Deck" + - conditions: > + {{ trigger.id|replace('Preset ','')|int(default=0) == 2}} + sequence: + - service: input_select.select_option + target: + entity_id: input_select.camera14_preset + data: + option: "Sandbox" + - conditions: > + {{ trigger.id|replace('Preset ','')|int(default=0) == 3}} + sequence: + - service: input_select.select_option + target: + entity_id: input_select.camera14_preset + data: + option: "Yard" + - conditions: > + {{ trigger.id|replace('Preset ','')|int(default=0) == 4}} + sequence: + - service: input_select.select_option + target: + entity_id: input_select.camera14_preset + data: + option: "Grove" + - conditions: > + {{ trigger.id|replace('Preset ','')|int(default=0) == 5}} + sequence: + - service: input_select.select_option + target: + entity_id: input_select.camera14_preset + data: + option: "Stairs" + - conditions: > + {{ trigger.id|replace('Preset ','')|int(default=0) == 6}} + sequence: + - service: input_select.select_option + target: + entity_id: input_select.camera14_preset + data: + option: "BesideStairs" + - conditions: > + {{ trigger.id|replace('Preset ','')|int(default=0) == 7}} + sequence: + - service: input_select.select_option + target: + entity_id: input_select.camera14_preset + data: + option: "Grass" + + - service: "shell_command.back_yard_preset_{{ trigger.id|replace('Preset ','')|int(default=1) }}" + # - service: amcrest.goto_preset + # data: + # entity_id: camera.frigate_cam14 + # preset: "{{ trigger.id|replace('Preset ','')|int(default=1) }}" + + - delay: "00:00:2" + + - id: automation_cam14_ptz_move + alias: Cam14 PTZ Move + mode: restart + trigger: + - platform: state + entity_id: input_select.camera14_preset + - platform: state + entity_id: camera.frigate_cam14 + from: unavailable + - platform: homeassistant + event: start + - platform: time_pattern + minutes: /10 + action: + - choose: + - conditions: + - condition: state + entity_id: input_select.camera14_preset + state: Sandbox + sequence: + - service: input_button.press + data: {} + target: + entity_id: input_button.cam14_ptz_preset_2 + - conditions: + - condition: state + entity_id: input_select.camera14_preset + state: Yard + sequence: + - service: input_button.press + data: {} + target: + entity_id: input_button.cam14_ptz_preset_3 + - conditions: + - condition: state + entity_id: input_select.camera14_preset + state: Grove + sequence: + - service: input_button.press + data: {} + target: + entity_id: input_button.cam14_ptz_preset_4 + - conditions: + - condition: state + entity_id: input_select.camera14_preset + state: Stairs + sequence: + - service: input_button.press + data: {} + target: + entity_id: input_button.cam14_ptz_preset_5 + - conditions: + - condition: state + entity_id: input_select.camera14_preset + state: BesideStairs + sequence: + - service: input_button.press + data: {} + target: + entity_id: input_button.cam14_ptz_preset_6 + - conditions: + - condition: state + entity_id: input_select.camera14_preset + state: Grass + sequence: + - service: input_button.press + data: {} + target: + entity_id: input_button.cam14_ptz_preset_7 + default: + - service: input_button.press + data: {} + target: + entity_id: input_button.cam14_ptz_preset_1 + +template: + - binary_sensor: + - name: Deck Person Occupancy + unique_id: templatebinarysensor.deck_person_occupancy + availability: "{{ states('binary_sensor.possible_deck_person_occupancy') not in ['unkown', 'unavailable'] }}" + state: "{{ is_state('binary_sensor.possible_deck_person_occupancy','on') and is_state('input_select.camera14_preset','Deck') }}" + icon: > + {% if is_state('binary_sensor.deck_person_occupancy','on') %} + mdi:motion-sensor + {% else %} + mdi:motion-sensor-off + {% endif %} + + - name: Deck Animal Motion + unique_id: templatebinarysensor.deck_animal_occupancy + availability: "{{ states('binary_sensor.possible_deck_animal_occupancy') not in ['unkown', 'unavailable'] }}" + state: "{{ is_state('binary_sensor.possible_deck_animal_occupancy','on') and is_state('input_select.camera14_preset','Deck') }}" + icon: mdi:bird + + - sensor: + - name: Deck Person Count + unique_id: templatesensor.deck_person_count + availability: "{{ states('sensor.possible_deck_person_count') not in ['unkown', 'unavailable'] }}" + unit_of_measurement: objects + state: > + {% if is_state('input_select.camera14_preset','Deck') %} + {{ states('sensor.possible_deck_person_count') }} + {% else %} + 0 + {% endif %} + icon: mdi:shield-account + + - name: Deck Animal Count + unique_id: templatesensor.deck_animal_count + availability: "{{ states('sensor.possible_deck_animal_count') not in ['unkown', 'unavailable'] }}" + unit_of_measurement: objects + state: > + {% if is_state('input_select.camera14_preset','Deck') %} + {{ states('sensor.possible_deck_animal_count') }} + {% else %} + 0 + {% endif %} + icon: mdi:paw diff --git a/components/packages/camera_ptz/command_line_ptz_controls.yaml b/components/packages/camera_ptz/command_line_ptz_controls.yaml new file mode 100644 index 0000000..63d2f64 --- /dev/null +++ b/components/packages/camera_ptz/command_line_ptz_controls.yaml @@ -0,0 +1,20 @@ +shell_command: + master_bedroom_left_preset_1: !secret master_bedroom_left_preset_1 + master_bedroom_left_preset_2: !secret master_bedroom_left_preset_2 + master_bedroom_left_preset_3: !secret master_bedroom_left_preset_3 + master_bedroom_left_preset_4: !secret master_bedroom_left_preset_4 + master_bedroom_left_preset_5: !secret master_bedroom_left_preset_5 + + master_bedroom_right_preset_1: !secret master_bedroom_right_preset_1 + master_bedroom_right_preset_2: !secret master_bedroom_right_preset_2 + master_bedroom_right_preset_3: !secret master_bedroom_right_preset_3 + master_bedroom_right_preset_4: !secret master_bedroom_right_preset_4 + master_bedroom_right_preset_5: !secret master_bedroom_right_preset_5 + + back_yard_preset_1: !secret back_yard_preset_1 + back_yard_preset_2: !secret back_yard_preset_2 + back_yard_preset_3: !secret back_yard_preset_3 + back_yard_preset_4: !secret back_yard_preset_4 + back_yard_preset_5: !secret back_yard_preset_5 + back_yard_preset_6: !secret back_yard_preset_6 + back_yard_preset_7: !secret back_yard_preset_7 \ No newline at end of file diff --git a/components/packages/cameras.yaml b/components/packages/cameras.yaml new file mode 100644 index 0000000..3be9642 --- /dev/null +++ b/components/packages/cameras.yaml @@ -0,0 +1,120 @@ +#binary_sensor: !include_dir_list ../cameras + +camera: +# - platform: mjpeg +# name: Octoprint +# still_image_url: http://192.168.1.99/webcam/?action=snapshot +# mjpeg_url: http://192.168.1.99/webcam/?action=stream +# - platform: mjpeg +# mjpeg_url: http://192.168.1.112:80/cgi-bin/mjpg/video.cgi?channel=1&subtype=1 +# name: Camera12 MJjpeg +# username: !secret camerausername +# password: !secret camerapassword +# authentication: basic + +# - platform: generic +# mjpeg_url: rtmp://192.168.1.7/live/frigate_cam12 +# name: Camera12 MJjpeg +# username: !secret bi_username +# password: !secret bi_password +# authentication: basic + + + - platform: local_file + name: Emmett + file_path: /config/image/4b8a4e30436d64121be7b0b59f857877/512x512 + + - platform: local_file + name: Bridget + file_path: /config/image/4ce4447957c07525227b0574cbb1e40b/512x512 + + - platform: local_file + name: Clint + file_path: /config/image/ca19fa93140bf891d9a871858d910c69/512x512 + + - platform: local_file + name: Ebin + file_path: /config/image/80720d36ba13e7993b992ee2c8c76144/512x512 + + - platform: local_file + name: Kristy + file_path: /config/image/7dde65b227b3d96cb4546c9c2447db5d/512x512 + + - platform: local_file + name: Tess + file_path: /config/image/929bf1b71232216f9ed31d8dbdbd7a54/512x512 + + - platform: local_file + name: Marshall + file_path: /config/image/29196e13641d83e1c54656d88b272c7c/512x512 + +# amcrest: +# - name: Back Yard +# host: !secret camera14ip +# username: !secret camerausername +# password: !secret camerapassword +# resolution: low +# stream_source: rtsp + +# - name: Blue Room +# host: !secret camera01ip +# username: !secret camerausername +# password: !secret camerapassword +# resolution: low +# stream_source: rtsp + +# - name: Computer Area +# host: !secret camera03ip +# username: !secret camerausername +# password: !secret camerapassword +# resolution: low +# stream_source: rtsp + +# - name: Front Porch +# host: !secret camera19ip +# username: !secret camerausername +# password: !secret camerapassword +# resolution: low +# stream_source: rtsp + +# - name: Front Room +# host: !secret camera13ip +# username: !secret camerausername +# password: !secret camerapassword +# resolution: low +# stream_source: rtsp + +# - name: Garage +# host: !secret camera04ip +# username: !secret camerausername +# password: !secret camerapassword +# resolution: low +# stream_source: rtsp + +# - name: Kitchen +# host: !secret camera12ip +# username: !secret camerausername +# password: !secret camerapassword +# resolution: low +# stream_source: rtsp + +# - name: Master Bedroom Left +# host: !secret camera06ip +# username: !secret camerausername +# password: !secret camerapassword +# resolution: low +# stream_source: rtsp + +# - name: Master Bedroom Right +# host: !secret camera07ip +# username: !secret camerausername +# password: !secret camerapassword +# resolution: low +# stream_source: rtsp + +# - name: Nursery +# host: !secret camera08ip +# username: !secret camerausername +# password: !secret camerapassword +# resolution: low +# stream_source: rtsp \ No newline at end of file diff --git a/components/packages/clever_announcements.yaml b/components/packages/clever_announcements.yaml new file mode 100644 index 0000000..b8c86de --- /dev/null +++ b/components/packages/clever_announcements.yaml @@ -0,0 +1,146 @@ +script: + make_clever_announcement: + alias: Make Clever Announcement + description: Play an announcement cleverly + icon: mdi:bullhorn + mode: queued + fields: + entity_id: + description: Media player to use for announcements (If left empty, uses the ytube music player speaker(s) currently in use) + example: media_player.announcements + selector: + entity: + multiple: false + domain: media_player + + media_content_id: + description: "Media Content ID to announce" + example: media-source://media_source/local/Sounds/tts/welcome_to_daddys_house.mp3 + selector: + text: + + media_content_type: + description: "The media content type of the specified media" + example: audio/mpeg + selector: + text: + + volume: + description: "The volume that the announcement should play at" + example: "0.6" + selector: + number: + min: 0.0 + max: 1.0 + step: 0.01 + + variables: + # This beast of a line uses the media players in this order: + # If an entity_id was specified, use that always + # If an entity_id was not specified, check if YTube Music Player is in use: + # If YTube Music Player is in use, play the announcement over those speakers + # If YTube Music Player is not in use, play the announcement over the media_player.announcements speaker group + media_player: '{{ iif(entity_id is defined, entity_id, iif(is_state("media_player.ytube_music_player","playing") or is_state("media_player.ytube_music_player","idle") or is_state("media_player.ytube_music_player","paused"),state_attr("media_player.ytube_music_player","remote_player_id"),"media_player.announcements")) }}' + remote_player: '{{ state_attr("media_player.ytube_music_player","remote_player_id") }}' + content_id: '{{ iif(media_content_id is defined,media_content_id,"media-source://media_source/local/Sounds/tts/welcome_to_daddys_house.mp3") }}' + content_type: '{{ iif(media_content_type is defined,media_content_type,"audio/mpeg") }}' + volume: "{{ iif(volume is defined,volume,0.6) }}" + original_volume: '{{ iif(state_attr(state_attr("media_player.ytube_music_player","remote_player_id"), "volume_level") is not none,state_attr(state_attr("media_player.ytube_music_player","remote_player_id"), "volume_level"),0.0) }}' + ytube_in_use: '{{ is_state("media_player.ytube_music_player","playing") or is_state("media_player.ytube_music_player","idle") or is_state("media_player.ytube_music_player","paused") }}' + + sequence: + - choose: + - alias: "Ytube music player is playing something" + conditions: "{{ ytube_in_use }}" + sequence: + - alias: "Interrupt ytube music player" + service: ytube_music_player.call_method + entity_id: media_player.ytube_music_player + data: + command: interrupt_start + + - alias: "Then wait a second" + delay: "00:00:01" + + # This looks to cause the first part of the message to be missed. + # Instead of initally muting the speakers, I'll just set them to the appropriate volume off the bat + # - alias: "Mute the announcement speakers momentarily" + # service: media_player.volume_set + # target: + # entity_id: '{{ media_player }}' + # data: + # volume_level: 0 + + - alias: "Set the volume on the announcement speakers" + service: media_player.volume_set + target: + entity_id: "{{media_player}}" + data: + volume_level: "{{volume}}" + + - alias: "Wait another bit for the volume to be set" + delay: + seconds: 2 + + - alias: "Play the announcement" + service: media_player.play_media + target: + entity_id: "{{media_player}}" + data: + media_content_id: "{{content_id}}" + media_content_type: "{{content_type}}" + + # This is now being done before the announcement is played + # - alias: "Set the volume on the announcement speakers" + # service: media_player.volume_set + # target: + # entity_id: '{{media_player}}' + # data: + # volume_level: '{{volume}}' + + # Wait until media player is idle + # This doesn't seem to be working as written. Trying a wait_for_trigger instead + #- wait_template: "{{ is_state(media_player,'idle')}}" + + # This shit doesn't work either + - alias: Wait for the specified media_player(s) to become idle + wait_for_trigger: + - platform: template + value_template: "{{ is_state(media_player, 'idle') }}" + + - alias: "Give a second of dead air after the announcement" + delay: "00:00:02" + + - choose: + - alias: "Ytube music player was playing something earlier" + conditions: "{{ ytube_in_use }}" + sequence: + - alias: "Mute the remote speakers momentarily" + service: media_player.volume_set + target: + entity_id: "{{ remote_player }}" + data: + volume_level: 0 + + - alias: "Resume the ytube music player playlist" + service: ytube_music_player.call_method + entity_id: media_player.ytube_music_player + data: + command: interrupt_resume + + - alias: "Reset the volume of the remote speakers to the previous level" + service: media_player.volume_set + target: + entity_id: "{{ remote_player }}" + data: + volume_level: "{{original_volume}}" + + default: + - alias: "Since we're not resuming music, turn off the speakers used to make the announcement" + service: media_player.turn_off + data: {} + target: + entity_id: "{{ media_player }}" + + - alias: "Wait at least 1 seconds before handling the next announcement in queue" + delay: "00:00:02" diff --git a/components/packages/clints_watch.yaml b/components/packages/clints_watch.yaml new file mode 100644 index 0000000..a32d647 --- /dev/null +++ b/components/packages/clints_watch.yaml @@ -0,0 +1,61 @@ +template: +# Watch Done Charging + - trigger: + - platform: state + entity_id: sensor.ticwatch_pro_3_gps_charger_type + + - platform: state + entity_id: sensor.ticwatch_pro_3_gps_battery_level + + - platform: event + event_type: event_template_reloaded + id: "reload" + + - platform: homeassistant + event: start + + binary_sensor: + - name: Clint's Watch Done Charging + unique_id: templatebinarysensor.clints_watch_done_charging + icon: mdi:battery-charging-100 + availability: "{{ states('sensor.ticwatch_pro_3_gps_battery_level') not in ['unkown', 'unavailable'] }}" + state: "{{ states('sensor.ticwatch_pro_3_gps_battery_level')|int(default=0) >= states('input_number.clints_watch_charged')|int(default=0) and is_state('sensor.ticwatch_pro_3_gps_charger_type','ac') }}" + +# Watch Done Charging + - trigger: + - platform: state + entity_id: sensor.ticwatch_pro_3_gps_charger_type + + - platform: state + entity_id: sensor.ticwatch_pro_3_gps_battery_level + + - platform: event + event_type: event_template_reloaded + id: "reload" + + - platform: homeassistant + event: start + + binary_sensor: + - name: Clint's Watch Needs to Charge + unique_id: templatebinarysensor.clints_watch_needs_to_charge + icon: mdi:battery-20 + availability: "{{ states('sensor.ticwatch_pro_3_gps_battery_level') not in ['unkown', 'unavailable'] }}" + state: "{{ states('sensor.ticwatch_pro_3_gps_battery_level')|int(default=0) <= states('input_number.clints_watch_low')|int(default=0) and is_state('sensor.ticwatch_pro_3_gps_charger_type','none') }}" + +input_number: + clints_watch_charged: + name: 'Clints Watch Charged' + icon: mdi:battery + min: 0 + max: 100 + step: 1 + mode: box + + clints_watch_low: + name: 'Clints Watch Low' + icon: mdi:battery-20 + min: 0 + max: 100 + step: 1 + mode: box \ No newline at end of file diff --git a/components/packages/config.yaml b/components/packages/config.yaml new file mode 100644 index 0000000..1e2812b --- /dev/null +++ b/components/packages/config.yaml @@ -0,0 +1 @@ +config: diff --git a/components/packages/conversation.yaml b/components/packages/conversation.yaml new file mode 100644 index 0000000..3c7a1ff --- /dev/null +++ b/components/packages/conversation.yaml @@ -0,0 +1 @@ +conversation: \ No newline at end of file diff --git a/components/packages/databases.yaml b/components/packages/databases.yaml new file mode 100644 index 0000000..88a9bd7 --- /dev/null +++ b/components/packages/databases.yaml @@ -0,0 +1,294 @@ +# Recorder is the primary storage place for states, attributes, etc. +# Recorder used to save to a MariaDB instance on the NAS. +# It now saves to the local MariaDB instance +# If Recorder is disable for a specific entity, the history and logbook become unavailable for that entity + +# Example Purge +# service: recorder.purge +# data: +# apply_filter: true +# keep_days: 180 + +recorder: + purge_keep_days: 14 + auto_purge: true + db_url: !secret recorder_url + #db_url: !secret recorder_url_nas + db_max_retries: 10 + db_retry_wait: 3 + #commit_interval: 1 + exclude: + entities: + - sensor.date + - sensor.date_time + - sensor.date_time_iso + - sensor.date_time_utc + - sensor.time + - sensor.time_date + - sensor.time_utc + - sensor.last_boot + - sensor.mail_updated + - light.upstairs_public + - input_select.master_bedroom_camera + - automation.cycle_cameras + - input_select.outdoor_camera_cycle + - automation.cam14_ptz_presets + - automation.cam14_ptz_move + - automation.cycle_back_yard_camera + - sensor.grocy_chores + - sensor.grocy_shopping_list + - sensor.grocy_stock + - sensor.grocy_tasks + - sensor.grocy_batteries + - sensor.grocy_meal_plan + entity_globs: + - sensor.*_text + - sensor.*_last_motion + #- sensor.*_battery + - binary_sensor.cam* + - sensor.weather_* + - sensor.acurite* + - sensor.*auto_tare + - sensor.*mac_address + - binary_sensor.*running + - switch.frigate* + #- binary_sensor.*battery* + - automation.*preset + - sensor.mail* + - sensor.ddns* + - sensor.synology_srm* + #- sensor.sun* + - sensor.network* + - sensor.count* + - sensor.*mac_address + #- sensor.*battery_level + #- sensor.*battery + #- sensor.*battery_state + # sensor.ups_battery_charge + - sensor.*_portion + - sensor.gt_* + - sensor.oregon* + - sensor.springfield* + - sensor.opus* + - sensor.wt* + - sensor.*cpu_usage + - binary_sensor.grocy* + - sensor.fineoffset_wh1050* + - sensor.ambietweather* + - sensor.esic* + - sensor.fineoffset_whx080* + - sensor.nexus_* + - sensor.gt_* + - sensor.tfa_* + - sensor.rubicscon_* + - sensor.interlogix* + domains: + - updater + - calendar + - camera + - input_button + # - group + - scene + - button + - remote + # include: + # domains: + # - sensor + # - switch + # - media_player + # - light + # - device_tracker + # - input_boolean + # - binary_sensor + # - input_text + # - input_select + # - automation + # - script + # - input_number + + +# The history integration tracks everything going on in Home Assistant, and allows the user to visually browse through it. +# It relies on the Recorder integration. If something is blocked by the recorder integration, it won't show up in the history integration. +# I really need to go through the History section, and see if there is anything useful that is worth keeping around. +history: + # include: + # domains: + # - binary_sensor + # - sensor + # - switch + # - light + + # exclude: + # entities: + # - binary_sensor.have_custody + # - sensor.mail_image_url + # - automation.cam14_ptz_move + # - automation.cycle_back_yard_camera + # - input_select.camera14_preset + # - input_select.indoor_camera_cycle + # domains: + # - automation + # - updater + # - alert + # - button + # - camera + # - weather + # entity_globs: + # - binary_sensor.55_tcl* + # - binary_sensor.roku_streaming_stick* + # - binary_sensor.dream_nas* + # - binary_sensor.grocy* + # - binary_sensor.dream_nas* + # - sensor.dream_nas* + # - sensor.grocy* + # - sensor.*cpu_percent + # - sensor.*memory_percent + # - sensor.*weight + # - switch.frigate* + # - sensor.*utc + # - sensor.*bssid + # - sensor.*version + # - sensor.mail* + # - sensor.synology_srm* + # #- sensor.sun* + # - sensor.pixel* + # - sensor.network* + # - sensor.dream_nas* + # - sensor.*fps + # - sensor.ups* + # - sensor.*pet + # - sensor.*person + # - sensor.*animal + # - sensor.*vehicle + # - switch.adaptive* + # - sensor.*mac_address + # - sensor.ddns* + # - sensor.count* + # - sensor.*mac_address + # #- sensor.*battery_level + # #- sensor.*battery + # #- sensor.*battery_state + # # sensor.ups_battery_charge + # - sensor.*rssi + # - sensor.*_portion + # - sensor.*raw_value + # - sensor.dreamtablet_audio* + # - sensor.dreambox_audio* + # - sensor.dreamtablet_lastactive* + # - sensor.dreambox_lastactive* + # - sensor.dreamtablet_active* + # - sensor.dreambox_active* + # - sensor.*power_outage_count + +logbook: + exclude: + entities: + - sensor.date + - sensor.date_time + - sensor.date_time_iso + - sensor.date_time_utc + - sensor.time + - sensor.time_date + - sensor.time_utc + - sensor.hvac_delta + - sensor.master_bed_person_count + - automation.cam14_ptz_move + - automation.cycle_back_yard_camera + - input_select.camera14_preset + - input_select.indoor_camera_cycle + - sensor.lights_on_count + + entity_globs: + - sensor.*_text + - sensor.*_last_motion + - sensor.weather_* + - sensor.*battery_level + - sensor.*battery + - sensor.*battery_state + - sensor.network* + - sensor.openweathermap* + # sensor.ups_battery_charge + #- sensor.sun_* + - sensor.adaptive_lighting_color* + - switch.adaptive_lighting_adapt* + - sensor.*_utc + - sensor.*_portion + - sensor.pm* + - sensor.*raw_value + - sensor.dreamtablet_audio* + - sensor.dreambox_audio* + - sensor.dreamtablet_lastactive* + - sensor.dreambox_lastactive* + - sensor.dreamtablet_active* + - sensor.dreambox_active* + - binary_sensor.*occupancy + - binary_sensor.*motion_detection + - binary_sensor.frigate_*_motion + - sensor.*sensor_status + - number.*_basic + - sensor.*cube* + - sensor.*power_outage_count + domains: + - sun + - device_tracker + + +# InfluxDB is used for external storage of data and generating pretty charts and graphs that I really don't use anywhere right now... +# As of right now, about the only info I would use are the long-term stats that are already managed in the main database, so there really is no current +# need for influx. + +# influxdb: +# # api_version: 2 +# # ssl: false +# # host: !secret influxDB_host +# # port: !secret influxDB_port +# # token: !secret influxDB_write_token +# # organization: !secret influxDB_organization +# # bucket: !secret influxDB_bucket +# # tags: +# # source: HA +# # tags_attributes: +# # - friendly_name +# # default_measurement: units + +# host: !secret local_influxDB_host +# port: !secret local_influxDB_port +# database: !secret local_influxDB_name +# username: !secret local_influxDB_user +# password: !secret local_influxDB_password +# max_retries: 3 +# default_measurement: state + +# # sensor: +# # platform: influxdb +# # api_version: 2 +# # organization: !secret influxDB_organization +# # token: !secret influxDB_write_token +# # queries: +# # - name: InfluxDB Database Size +# # unit_of_measurement: MB +# # value_template: "{{ (value | float(0) / 1024 /1024) | round(1) }}" +# # group_function: sum +# # measurement: '"monitor"."shard"' +# # database: _internal +# # where: '"database"=''homeassistant'' AND time > now() - 5m' +# # field: diskBytes + +# sensor: +# platform: influxdb +# host: !secret local_influxDB_host +# port: !secret local_influxDB_port +# database: !secret local_influxDB_name +# username: !secret local_influxDB_user +# password: !secret local_influxDB_password +# queries: +# - name: InfluxDB Database Size +# unit_of_measurement: MB +# value_template: "{{ (value | float(0) / 1024 /1024) | round(1) }}" +# group_function: sum +# measurement: '"monitor"."shard"' +# database: _internal +# where: '"database"=''homeassistant'' AND time > now() - 5m' +# field: diskBytes + + diff --git a/components/packages/dialogflow.yaml b/components/packages/dialogflow.yaml new file mode 100644 index 0000000..c3b0248 --- /dev/null +++ b/components/packages/dialogflow.yaml @@ -0,0 +1,41 @@ +dialogflow: + +intent_script: + Temperature: + speech: + text: The temperature at home is {{ states('sensor.thermostat_temperature') }} degrees + LocateIntent: + speech: + text: > + {%- for state in states.person -%} + {%- if state.name.lower() == User.lower() -%} + {{ state.name }} is at {{ state.state }} + {%- endif -%} + {%- else -%} + Sorry, I don't have any trackers registered. + {%- endfor %} + WhereAreWeIntent: + speech: + text: > + {%- if is_state('person.clint', 'home') and + is_state('person.kristy', 'home') -%} + You are both home, you silly + {%- else -%} + Kristy is at {{ states("person.kristy") }} + and Clint is at {{ states("person.clint") }} + {% endif %} + TurnLights: + speech: + text: Turning {{ Room }} lights {{ OnOff }} + action: + - service: notify.mobile_app_pixel_7 + data: + message: Someone asked via apiai to turn {{ Room }} lights {{ OnOff }} + - service_template: > + {%- if OnOff == "on" -%} + switch.turn_on + {%- else -%} + switch.turn_off + {%- endif -%} + data: + entity_id: "switch.light_{{ Room | replace(' ', '_') }}" diff --git a/components/packages/ecobee.yaml b/components/packages/ecobee.yaml new file mode 100644 index 0000000..dc09160 --- /dev/null +++ b/components/packages/ecobee.yaml @@ -0,0 +1,2 @@ +ecobee: + api_key: !secret ecobee_api_key \ No newline at end of file diff --git a/components/packages/fan.yaml b/components/packages/fan.yaml new file mode 100644 index 0000000..03d02b7 --- /dev/null +++ b/components/packages/fan.yaml @@ -0,0 +1 @@ +fan: !include_dir_list ../fans \ No newline at end of file diff --git a/components/packages/fan_speed_temps.yaml b/components/packages/fan_speed_temps.yaml new file mode 100644 index 0000000..f454c85 --- /dev/null +++ b/components/packages/fan_speed_temps.yaml @@ -0,0 +1,53 @@ +input_number: +# These numbers control what speed the ceiling fans should default to. +# If a room is occupied, and it is relatively warm, the fan should come on +# These numbers help ensure that when the fan turns on, it creates a noticible difference + master_bedroom_fan_min_temp: + name: Master Bedroom Fan Min Temp + min: 60 + max: 80 + step: 1 + mode: slider + master_bedroom_fan_low_temp: + name: Master Bedroom Fan Low Temp + min: 60 + max: 80 + step: 1 + mode: slider + master_bedroom_fan_medium_temp: + name: Master Bedroom Fan Medium Temp + min: 60 + max: 80 + step: 1 + mode: slider + master_bedroom_fan_high_temp: + name: Master Bedroom Fan High Temp + min: 60 + max: 80 + step: 1 + mode: slider + + nursery_fan_min_temp: + name: Nursery Fan Min Temp + min: 60 + max: 80 + step: 1 + mode: slider + nursery_fan_low_temp: + name: Nursery Fan Low Temp + min: 60 + max: 80 + step: 1 + mode: slider + nursery_fan_medium_temp: + name: Nursery Fan Medium Temp + min: 60 + max: 80 + step: 1 + mode: slider + nursery_fan_high_temp: + name: Nursery Fan High Temp + min: 60 + max: 80 + step: 1 + mode: slider diff --git a/components/packages/features.yaml b/components/packages/features.yaml new file mode 100644 index 0000000..9ca0fc4 --- /dev/null +++ b/components/packages/features.yaml @@ -0,0 +1,8 @@ +counter: +system_health: +media_extractor: +media_source: +mobile_app: +my: +# map: +energy: \ No newline at end of file diff --git a/components/packages/ffmpeg.yaml b/components/packages/ffmpeg.yaml new file mode 100644 index 0000000..0e424f3 --- /dev/null +++ b/components/packages/ffmpeg.yaml @@ -0,0 +1,2 @@ +ffmpeg: + # ffmpeg_bin: /usr/bin/ffmpeg \ No newline at end of file diff --git a/components/packages/frontend.yaml b/components/packages/frontend.yaml new file mode 100644 index 0000000..4e89d33 --- /dev/null +++ b/components/packages/frontend.yaml @@ -0,0 +1,6 @@ +frontend: + themes: !include_dir_merge_named ../../themes + # extra_module_url: + # - /local/community/custom-brand-icons/custom-brand-icons.js + #extra_html_url: + # - /local/custom_ui/state-card-floorplan.html \ No newline at end of file diff --git a/components/packages/google_assistant.yaml b/components/packages/google_assistant.yaml new file mode 100644 index 0000000..d01246e --- /dev/null +++ b/components/packages/google_assistant.yaml @@ -0,0 +1,344 @@ +google_assistant: + secure_devices_pin: !secret secure_devices_pin + project_id: !secret gAssistSvcAcct_project_id + service_account: + type: !secret gAssistSvcAcct_type + project_id: !secret gAssistSvcAcct_project_id + private_key_id: !secret gAssistSvcAcct_private_key_id + private_key: !secret gAssistSvcAcct_private_key + client_email: !secret gAssistSvcAcct_client_email + client_id: !secret gAssistSvcAcct_client_id + auth_uri: !secret gAssistSvcAcct_auth_uri + token_uri: !secret gAssistSvcAcct_token_uri + auth_provider_x509_cert_url: !secret gAssistSvcAcct_auth_provider_x509_cert_url + client_x509_cert_url: !secret gAssistSvcAcct_client_x509_cert_url + report_state: true + expose_by_default: false + exposed_domains: + # - switch + - camera + # - input_boolean + # - fan + # - cover + entity_config: + light.utility_room_vanity: + name: Vanity + expose: true + room: Utility Room + + cover.garage_door: + name: Garage Door + expose: true + room: Garage + + lock.patio_door: + name: Patio Door + expose: true + room: Dining Room + aliases: + - Sliding Glass Door + + camera.frigate_cam03: + name: Desk Camera + expose: true + aliases: + - Cam Three + - Camera Three + - Computer Desk Cam + - Computer Desk Camera + - Computer Area Cam + - Computer Area Camera + - Computer Cam + - Computer Camera + room: Computer Area + + camera.frigate_cam13: + name: Front Room Camera + expose: true + aliases: + - Front Room Cam + room: Front Room + + camera.frigate_cam08: + name: Nursery Camera + expose: true + aliases: + - Baby Cam + - Baby Monitor + - Kids Cam + - Kids Room Camera + - Nursery Cam + - Baby Monitor Cam + - Baby Monitor Camera + room: Nursery + + input_boolean.announcement_pending: + name: Announcement Pending + expose: true + room: Furnace Room + + input_boolean.announce_washing_machine_done: + name: Announce Washing Machine Done + expose: true + room: Utility Room + + input_boolean.announce_dryer_done: + name: Announce Dryer Done + expose: true + room: Utility Room + + input_boolean.announce_dishwasher_done: + name: Announce Dishwasher Done + expose: true + room: Kitchen + + input_boolean.announce_almost_bedtime: + name: Announce Almost Bedtime + expose: true + room: Nursery + + input_boolean.announce_goodnight_emmett: + name: Announce Goodnight Emmett + expose: true + room: Nursery + + input_boolean.announce_goodnight_bridget: + name: Announce Goodnight Bridget + expose: true + room: Nursery + + input_boolean.announce_goodnight_ebin: + name: Announce Goodnight Ebin + expose: true + room: Nursery + + input_boolean.announce_goodnight_emmett_bridget: + name: Announce Goodnight Emmett Bridget + expose: true + room: Nursery + + input_boolean.announce_goodnight_emmett_ebin: + name: Announce Goodnight Emmett Ebin + expose: true + room: Nursery + + input_boolean.announce_goodnight_bridget_ebin: + name: Announce Goodnight Bridget Ebin + expose: true + room: Nursery + + input_boolean.announce_goodnight_emmett_bridget_ebin: + name: Announce Goodnight Emmett Bridget Ebin + expose: true + room: Nursery + + input_boolean.kids_bedtime: + name: Kids Bedtime + expose: true + aliases: + - Emmetts bedtime + - Bridgets bedtime + - Ebins bedtime + room: Nursery + + input_boolean.clint_in_bed: + name: Clint In Bed + expose: true + room: Master Bedroom + + input_boolean.kristy_in_bed: + name: Kristy In Bed + expose: true + room: Master Bedroom + + input_boolean.marshall_in_bed: + name: Marshall In Bed + expose: true + room: Blue Room + + input_boolean.tess_in_bed: + name: Tess In Bed + expose: true + room: Mancave + + input_boolean.emmett_in_bed: + name: Emmett In Bed + expose: true + room: Nursery + + input_boolean.bridget_in_bed: + name: Bridget In Bed + expose: true + room: Nursery + + input_boolean.ebin_in_bed: + name: Ebin In Bed + expose: true + room: Nursery + + input_boolean.front_room_occupied: + name: Front Room Lights + expose: true + aliases: + - Front Room + room: Front Room + + fan.master_bedroom: + name: Master Bedroom Fan + room: Master Bedroom + expose: true + aliases: + - Fan + - Ceiling Fan + + fan.nursery: + name: Nursery Fan + room: Nursery + expose: true + aliases: + - Kids Fan + - Kids Ceiling Fan + + # light.christmas_tree_wled: + # name: Christmas Tree + # room: Front Room + # expose: true + + # switch.outdoor_plug: + # name: Christmas Lights + # room: Front Yard + # expose: true + # aliases: + # - Front Porch Outlet + # - Outdoor Plug + + switch.outdoor_power_monitor_plug: + name: Mickey Mouse + room: Front Yard + expose: true + aliases: + - Mickey Mouse + + input_boolean.clint_home_alone: + name: Clint Home Alone + room: Furnace Room + expose: true + + input_button.blue_room_chores: + name: Blue Room Chores + room: Blue Room + expose: true + + input_button.computer_area_chores: + name: Computer Area Chores + room: Computer Area + expose: true + + input_button.dining_room_chores: + name: Dining Room Chores + room: Dining Room + expose: true + + input_button.entryway_chores: + name: Entryway Chores + room: Entryway + expose: true + + input_button.front_room_chores: + name: Front Room Chores + room: Front Room + expose: true + + input_button.furnace_room_chores: + name: Furnace Room Chores + room: Furnace Room + expose: true + + input_button.garage_chores: + name: Garage Chores + room: Garage + expose: true + + input_button.kitchen_chores: + name: Kitchen Chores + room: Kitchen + expose: true + + input_button.great_room_chores: + name: Great Room Chores + room: Great Room + expose: true + + input_button.mancave_chores: + name: Mancave Chores + room: Mancave + expose: true + + input_button.master_bathroom_chores: + name: Master Bathroom Chores + room: Master Bathroom + expose: true + + input_button.master_bedroom_chores: + name: Master Bedroom Chores + room: Master Bedroom + expose: true + + input_button.nursery_chores: + name: Nursery Chores + room: Nursery + expose: true + + input_button.utility_room_chores: + name: Utility Room Chores + room: Utility Room + expose: true + + input_button.all_chores: + name: All Chores + room: Computer Area + expose: true + aliases: + - Chores + + input_button.nursery_bedtime: + name: Kids Bedtime + room: Nursery + expose: true + aliases: + - Nursery Bedtime + + input_button.nursery_awake: + name: Kids Awake + room: Nursery + expose: true + aliases: + - Nursery Awake + + input_button.master_bedroom_bedtime: + name: Adults Bedtime + room: Master Bedroom + expose: true + aliases: + - Master Bedroom Bedtime + + input_button.master_bedroom_awake: + name: Adults Awake + room: Master Bedroom + expose: true + aliases: + - Master Bedroom Awake + + input_button.blue_room_bedtime: + name: Teens Bedtime + room: Blue Room + expose: true + aliases: + - Blue Room Bedtime + + input_button.blue_room_awake: + name: Teens Awake + room: Blue Room + expose: true + aliases: + - Blue Room Awake diff --git a/components/packages/grocy/booleans.yaml b/components/packages/grocy/booleans.yaml new file mode 100644 index 0000000..f4f1252 --- /dev/null +++ b/components/packages/grocy/booleans.yaml @@ -0,0 +1,92 @@ +input_boolean: + grocy_all_chores: + name: All Chores + icon: mdi:broom + + grocy_all_tasks: + name: All Tasks + icon: mdi:checkbox-marked-circle + + daddy_chores: + name: Daddy + icon: mdi:human-male + + chickadee_chores: + name: Chickadee + icon: mdi:human-female + + marshall_chores: + name: Marshall + icon: mdi:alpha-m-circle-outline + + tess_chores: + name: Tess + icon: mdi:alpha-t-circle-outline + + emmett_chores: + name: Emmett + icon: mdi:alpha-e-circle + + bridget_chores: + name: Bridget + icon: mdi:alpha-b-circle + + ebin_chores: + name: Ebin + icon: mdi:alpha-e-circle-outline + + blue_room_chores: + name: Blue Room Chores + icon: mdi:yoga + + computer_area_chores: + name: Computer Area Chores + icon: mdi:desktop-classic + + dining_room_chores: + name: Dining Room Chores + icon: mdi:table-chair + + entryway_chores: + name: Entryway Chores + icon: mdi:ceiling-light + + front_room_chores: + name: Front Room Chores + icon: mdi:television + + furnace_room_chores: + name: Furnace Room Chores + icon: mdi:hvac + + garage_chores: + name: Garage Chores + icon: mdi:garage + + kitchen_chores: + name: Kitchen Chores + icon: mdi:fridge + + great_room_chores: + name: Great Room Chores + icon: mdi:microsoft-xbox-controller + + mancave_chores: + name: Mancave Chores + icon: mdi:human-male + + master_bathroom_chores: + name: Master Bathroom Chores + icon: mdi:shower + + master_bedroom_chores: + name: Master Bedroom Chores + icon: mdi:bed-king + + nursery_chores: + name: Nursery Chores + icon: mdi:bunk-bed + + utility_room_chores: + name: Utility Room Chores + icon: mdi:washing-machine \ No newline at end of file diff --git a/components/packages/grocy/grocy.yaml b/components/packages/grocy/grocy.yaml new file mode 100644 index 0000000..fb4490a --- /dev/null +++ b/components/packages/grocy/grocy.yaml @@ -0,0 +1,218 @@ +input_select: + grocy_users: + name: Grocy Users + icon: mdi:account-multiple + options: + - Daddy + - Chickadee + - Marshall + - Tess + - Emmett + - Bridget + - Ebin + + grocy_purchase: + name: Purchase via Grocy + icon: mdi:form-dropdown + options: + - KCups + - Dishwashing Tablets + - Diet Coke + + grocy_consume: + name: Consume via Grocy + icon: mdi:form-dropdown + options: + - KCups + - Dishwashing Tablets + - Diet Coke + +input_number: + grocy_consume_purchase: + name: Grocy Consume or Purchase + icon: mdi:tally-mark-5 + min: 0 + max: 200 + mode: box + +automation: + - id: grocy_consume_dishwasher_tablet + alias: Consume Dishwasher Tablet + + trigger: + - platform: state + entity_id: binary_sensor.dishwasher + to: 'on' + for: + minutes: 10 + + action: + - alias: "Consume 1 Dishwasher tablet" + service: grocy.consume_product_from_stock + data: + transaction_type: CONSUME + product_id: 14 + amount: 1 + + + - id: grocy_purchase_am_meds + alias: 'Purchase AM Meds' + + trigger: + - platform: state + entity_id: input_button.grocy_purchase_am_meds + + action: + alias: Add 30 AM Meds to stock + service: grocy.add_product_to_stock + data: + product_id: 17 + amount: 30 + + - id: grocy_clint_consume_am_meds + alias: Clint Consume AM Meds + + trigger: + - platform: state + entity_id: input_button.grocy_consume_am_meds + + - platform: state + entity_id: input_boolean.clint_needs_am_meds + from: 'on' + to: 'off' + + action: + - alias: "Clint consume AM meds" + service: grocy.consume_product_from_stock + data: + transaction_type: CONSUME + product_id: 17 + amount: 1 + + - id: grocy_purchase_pm_meds + alias: 'Purchase PM Meds' + + trigger: + - platform: state + entity_id: input_button.grocy_purchase_pm_meds + + action: + alias: Add 30 PM Meds to stock + service: grocy.add_product_to_stock + data: + product_id: 18 + amount: 30 + + - id: grocy_clint_consume_pm_meds + alias: 'Clint Consume PM Meds' + + trigger: + - platform: state + entity_id: input_button.grocy_consume_pm_meds + + - platform: state + entity_id: input_boolean.clint_needs_pm_meds + from: 'on' + to: 'off' + + action: + - alias: "Clint consume PM meds" + service: grocy.consume_product_from_stock + data: + transaction_type: CONSUME + product_id: 18 + amount: 1 + + - id: grocy_manage_milk + alias: 'Manage Milk' + + trigger: + - id: 'consume_milk' + platform: state + entity_id: input_button.grocy_consume_milk + + - id: 'purchase_milk' + platform: state + entity_id: input_button.grocy_purchase_milk + + action: + - choose: + - conditions: + - condition: trigger + id: consume_milk + sequence: + - alias: "Consume gallon of milk" + service: grocy.consume_product_from_stock + data: + transaction_type: CONSUME + product_id: 33 + amount: 128 + - conditions: + - condition: trigger + id: purchase_milk + sequence: + - alias: "Purchase gallon of milk" + service: grocy.add_product_to_stock + data: + product_id: 33 + amount: 128 + + - id: grocy_manage_diet_coke + alias: 'Manage Diet Coke' + + trigger: + - id: 'consume' + platform: state + entity_id: input_button.grocy_consume_diet_coke + + - id: 'purchase' + platform: state + entity_id: input_button.grocy_purchase_diet_coke_12_pack + + action: + - choose: + - conditions: + - condition: trigger + id: consume + sequence: + - alias: "Consume Diet Coke" + service: grocy.consume_product_from_stock + data: + transaction_type: CONSUME + product_id: 21 + amount: 1 + - conditions: + - condition: trigger + id: purchase + sequence: + - alias: "Purchase 12 pack of Diet Coke" + service: grocy.add_product_to_stock + data: + product_id: 21 + amount: 12 + + - id: grocy_consume_kcup + alias: 'Consume K-Cup' + + trigger: + - platform: state + entity_id: input_button.grocy_consume_kcup + + action: + - alias: "Consume KCup" + service: grocy.consume_product_from_stock + data: + transaction_type: CONSUME + product_id: 20 + amount: 1 + +# script: +# consume_kcup: +# alias: Consume K-Cup +# sequence: +# - alias: "Consume K-Cup" +# service: grocy.consume_product_from_stock +# data: +# transaction_type: CONSUME +# product_id: 20 +# amount: 1 diff --git a/components/packages/grocy/sensors.yaml b/components/packages/grocy/sensors.yaml new file mode 100644 index 0000000..ac73680 --- /dev/null +++ b/components/packages/grocy/sensors.yaml @@ -0,0 +1,814 @@ +binary_sensor: + - name: "Chore: Mow" + unique_id: rest_binary_sensor.chore_mow + platform: rest + resource: http://192.168.1.11:9192/api/chores/32 + icon: mdi:mower-bag + headers: + GROCY-API-KEY: !secret grocy_api_key + accept: "application/json" + value_template: "{{value_json.next_estimated_execution_time}}" + +sensor: + - name: "Chore: Mow" + unique_id: rest_sensor.chore_mow + platform: rest + resource: http://192.168.1.11:9192/api/chores/32 + icon: mdi:mower-bag + headers: + GROCY-API-KEY: !secret grocy_api_key + accept: "application/json" + value_template: "{{value_json.next_estimated_execution_time}}" + + +# - name: Chore One +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?order=next_estimated_execution_time&limit=1&offset=0 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Chore Two +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?order=next_estimated_execution_time&limit=1&offset=1 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Chore Three +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?order=next_estimated_execution_time&limit=1&offset=2 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Blue Room Chore One +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~blue%20room&order=next_estimated_execution_time&limit=1&offset=0 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Blue Room Chore Two +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~blue%20room&order=next_estimated_execution_time&limit=1&offset=1 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Blue Room Chore Three +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~blue%20room&order=next_estimated_execution_time&limit=1&offset=2 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Computer Area Chore One +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~computer%20area&order=next_estimated_execution_time&limit=1&offset=0 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Computer Area Chore Two +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~computer%20area&order=next_estimated_execution_time&limit=1&offset=1 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Computer Area Chore Three +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~computer%20area&order=next_estimated_execution_time&limit=1&offset=2 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Dining Room Chore One +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~dining%20room&order=next_estimated_execution_time&limit=1&offset=0 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Dining Room Chore Two +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~dining%20room&order=next_estimated_execution_time&limit=1&offset=1 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Dining Room Chore Three +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~dining%20room&order=next_estimated_execution_time&limit=1&offset=2 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Entryway Chore One +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~entryway&order=next_estimated_execution_time&limit=1&offset=0 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Entryway Chore Two +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~entryway&order=next_estimated_execution_time&limit=1&offset=1 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Entryway Chore Three +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~entryway&order=next_estimated_execution_time&limit=1&offset=2 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Front Room Chore One +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~front%20room&order=next_estimated_execution_time&limit=1&offset=0 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Front Room Chore Two +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~front%20room&order=next_estimated_execution_time&limit=1&offset=1 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Front Room Chore Three +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~front%20room&order=next_estimated_execution_time&limit=1&offset=2 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Furnace Room Chore One +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~furnace%20room&order=next_estimated_execution_time&limit=1&offset=0 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Furnace Room Chore Two +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~furnace%20room&order=next_estimated_execution_time&limit=1&offset=1 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Furnace Room Chore Three +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~furnace%20room&order=next_estimated_execution_time&limit=1&offset=2 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Garage Chore One +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~garage&order=next_estimated_execution_time&limit=1&offset=0 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Garage Chore Two +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~garage&order=next_estimated_execution_time&limit=1&offset=1 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Garage Chore Three +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~garage&order=next_estimated_execution_time&limit=1&offset=2 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Kitchen Chore One +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~kitchen&order=next_estimated_execution_time&limit=1&offset=0 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Kitchen Chore Two +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~kitchen&order=next_estimated_execution_time&limit=1&offset=1 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Kitchen Chore Three +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~kitchen&order=next_estimated_execution_time&limit=1&offset=2 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Great Room Chore One +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~great%20room&order=next_estimated_execution_time&limit=1&offset=0 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Great Room Chore Two +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~great%20room&order=next_estimated_execution_time&limit=1&offset=1 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Great Room Chore Three +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~great%20room&order=next_estimated_execution_time&limit=1&offset=2 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Mancave Chore One +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~mancave&order=next_estimated_execution_time&limit=1&offset=0 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Mancave Chore Two +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~mancave&order=next_estimated_execution_time&limit=1&offset=1 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Mancave Chore Three +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~mancave&order=next_estimated_execution_time&limit=1&offset=2 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Master Bathroom Chore One +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~master%20bathroom&order=next_estimated_execution_time&limit=1&offset=0 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Master Bathroom Chore Two +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~master%20bathroom&order=next_estimated_execution_time&limit=1&offset=1 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Master Bathroom Chore Three +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~master%20bathroom&order=next_estimated_execution_time&limit=1&offset=2 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Master Bedroom Chore One +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~master%20bedroom&order=next_estimated_execution_time&limit=1&offset=0 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Master Bedroom Chore Two +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~master%20bedroom&order=next_estimated_execution_time&limit=1&offset=1 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Master Bedroom Chore Three +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~master%20bedroom&order=next_estimated_execution_time&limit=1&offset=2 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Nursery Chore One +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~nursery&order=next_estimated_execution_time&limit=1&offset=0 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Nursery Chore Two +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~nursery&order=next_estimated_execution_time&limit=1&offset=1 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Nursery Chore Three +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~nursery&order=next_estimated_execution_time&limit=1&offset=2 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Utility Room Chore One +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~utility%20room&order=next_estimated_execution_time&limit=1&offset=0 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Utility Room Chore Two +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~utility%20room&order=next_estimated_execution_time&limit=1&offset=1 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Utility Room Chore Three +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=chore_name~utility%20room&order=next_estimated_execution_time&limit=1&offset=2 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Daddy Chore One +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=next_execution_assigned_to_user_id%3D2&order=next_estimated_execution_time&limit=1&offset=0 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Daddy Chore Two +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=next_execution_assigned_to_user_id%3D2&order=next_estimated_execution_time&limit=1&offset=1 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Daddy Chore Three +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=next_execution_assigned_to_user_id%3D2&order=next_estimated_execution_time&limit=1&offset=2 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Chickadee Chore One +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=next_execution_assigned_to_user_id%3D5&order=next_estimated_execution_time&limit=1&offset=0 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Chickadee Chore Two +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=next_execution_assigned_to_user_id%3D5&order=next_estimated_execution_time&limit=1&offset=1 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Chickadee Chore Three +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=next_execution_assigned_to_user_id%3D5&order=next_estimated_execution_time&limit=1&offset=2 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Marshall Chore One +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=next_execution_assigned_to_user_id%3D6&order=next_estimated_execution_time&limit=1&offset=0 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Marshall Chore Two +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=next_execution_assigned_to_user_id%3D6&order=next_estimated_execution_time&limit=1&offset=1 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Marshall Chore Three +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=next_execution_assigned_to_user_id%3D6&order=next_estimated_execution_time&limit=1&offset=2 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Tess Chore One +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=next_execution_assigned_to_user_id%3D7&order=next_estimated_execution_time&limit=1&offset=0 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Tess Chore Two +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=next_execution_assigned_to_user_id%3D7&order=next_estimated_execution_time&limit=1&offset=1 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Tess Chore Three +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=next_execution_assigned_to_user_id%3D7&order=next_estimated_execution_time&limit=1&offset=2 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Emmett Chore One +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=next_execution_assigned_to_user_id%3D3&order=next_estimated_execution_time&limit=1&offset=0 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Emmett Chore Two +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=next_execution_assigned_to_user_id%3D3&order=next_estimated_execution_time&limit=1&offset=1 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Emmett Chore Three +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=next_execution_assigned_to_user_id%3D3&order=next_estimated_execution_time&limit=1&offset=2 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Bridget Chore One +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=next_execution_assigned_to_user_id%3D4&order=next_estimated_execution_time&limit=1&offset=0 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Bridget Chore Two +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=next_execution_assigned_to_user_id%3D4&order=next_estimated_execution_time&limit=1&offset=1 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Bridget Chore Three +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=next_execution_assigned_to_user_id%3D4&order=next_estimated_execution_time&limit=1&offset=2 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Ebin Chore One +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=next_execution_assigned_to_user_id%3D8&order=next_estimated_execution_time&limit=1&offset=0 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Ebin Chore Two +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=next_execution_assigned_to_user_id%3D8&order=next_estimated_execution_time&limit=1&offset=1 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} + +# - name: Ebin Chore Three +# platform: rest +# resource: http://192.168.1.11:9192/api/chores?query%5B%5D=next_execution_assigned_to_user_id%3D8&order=next_estimated_execution_time&limit=1&offset=2 +# headers: +# GROCY-API-KEY: !secret grocy_api_key +# value_template: > +# {% if value_json[0] is defined %} +# {{ value_json[0].chore_name }} +# {% else %} +# {{"None"}} +# {% endif %} \ No newline at end of file diff --git a/components/packages/hacs.yaml b/components/packages/hacs.yaml new file mode 100644 index 0000000..931ce72 --- /dev/null +++ b/components/packages/hacs.yaml @@ -0,0 +1,7 @@ +template: + - binary_sensor: + - name: 'HACS Update Available' + unique_id: binary_sensor.hacs_update_available + icon: mdi:alpha-c-box + state: "{{ states('sensor.hacs') | float(default=0) > 0 }}" + availability: "{{ states('sensor.hacs') not in ['unkown', 'unavailable'] }}" diff --git a/components/packages/hass_agent/dreambox.yaml b/components/packages/hass_agent/dreambox.yaml new file mode 100644 index 0000000..00e33bb --- /dev/null +++ b/components/packages/hass_agent/dreambox.yaml @@ -0,0 +1,25 @@ +notify: + name: DreamBox + platform: hass_agent_notifier + resource: !secret dreambox_hassagent + +# media_player: +# - name: DreamBox +# platform: hass_agent_mediaplayer +# host: !secret dreambox_ip +# port: 5115 + +template: + - trigger: + - platform: homeassistant + event: start + + - platform: state + entity_id: sensor.dreambox_lastactive + + binary_sensor: + - name: DreamBox Recently Active + unique_id: templatebinarysensor.dreambox_recently_active + icon: mdi:desktop-tower-monitor + #availability: "{{ states('sensor.dreambox_lastactive') not in ['unkown', 'unavailable'] }}" + state: " {{ iif( states('sensor.dreambox_lastactive') == 'unknown' or is_state('sensor.dreambox_lastactive', 'unavailable'), false, as_timestamp(now()) - as_timestamp(states('sensor.dreambox_lastactive'),0) < 180 or is_state('sensor.dreambox_usernotification','Busy'))}}" diff --git a/components/packages/hass_agent/dreamsurface.yaml b/components/packages/hass_agent/dreamsurface.yaml new file mode 100644 index 0000000..0d8275d --- /dev/null +++ b/components/packages/hass_agent/dreamsurface.yaml @@ -0,0 +1,38 @@ +notify: + name: DreamSurface + platform: hass_agent_notifier + resource: !secret dreamsurface_hassagent + + +mqtt: + light: + - name: "DreamSurface: Screen Brightness" + unique_id: "dreamsurface_screen_brightness" + object_id: "dreamsurface_monitor_brightness" + command_topic: "homeassistant/light/DREAMSURFACE/DREAMSURFACE_screen_brightness/action" + brightness_command_topic: "homeassistant/light/HASSAGENT/dreamsurface_monitor_brightness/action" + brightness_command_template: "%PROGRAMFILES(X86)%\\Monitorian\\Monitorian.exe /set {{ value }}" + brightness_scale: 100 + on_command_type: 'brightness' + icon: mdi:monitor-shimmer + +# media_player: +# - name: Dreamsurface +# platform: hass_agent_mediaplayer +# host: !secret dreamsurface_ip +# port: 5115 + +template: + - trigger: + - platform: homeassistant + event: start + + - platform: state + entity_id: sensor.dreamsurface_lastactive + + binary_sensor: + - name: DreamSurface Recently Active + unique_id: templatebinarysensor.dreamsurface_recently_active + icon: mdi:tablet + #availability: "{{ states('sensor.dreamsurface_lastactive') not in ['unkown', 'unavailable'] }}" + state: " {{ iif( states('sensor.dreamsurface_lastactive') == 'unknown' or is_state('sensor.dreamsurface_lastactive', 'unavailable'), false, as_timestamp(now()) - as_timestamp(states('sensor.dreamsurface_lastactive'),0) < 180 or is_state('sensor.dreamsurface_usernotification','Busy'))}}" diff --git a/components/packages/hass_agent/notify_hass_agent_group.yaml b/components/packages/hass_agent/notify_hass_agent_group.yaml new file mode 100644 index 0000000..dacf60d --- /dev/null +++ b/components/packages/hass_agent/notify_hass_agent_group.yaml @@ -0,0 +1,6 @@ +notify: + - platform: group + name: "Hass Agent Group" + services: + - service: dreambox + - service: dreamsurface diff --git a/components/packages/helpers.yaml b/components/packages/helpers.yaml new file mode 100644 index 0000000..df8f536 --- /dev/null +++ b/components/packages/helpers.yaml @@ -0,0 +1,11 @@ +binary_sensor: !include_dir_list ../binary_sensors +input_boolean: !include_dir_named ../input_booleans +input_button: !include_dir_merge_named ../input_buttons +input_datetime: !include_dir_merge_named ../input_datetime +input_number: !include_dir_named ../input_numbers +input_select: !include_dir_named ../input_selects +input_text: !include_dir_named ../input_text +timer: !include_dir_merge_named ../timers +sensor: !include_dir_list ../sensors +schedule: +sun: \ No newline at end of file diff --git a/components/packages/http.yaml b/components/packages/http.yaml new file mode 100644 index 0000000..9fc1a36 --- /dev/null +++ b/components/packages/http.yaml @@ -0,0 +1,31 @@ +http: + #ssl_certificate: /ssl/origin.pem + #ssl_key: /ssl/privkey.pem + ip_ban_enabled: true + login_attempts_threshold: 5 + use_x_forwarded_for: true + trusted_proxies: + - 192.168.1.0/24 + - 127.0.0.1 + - 172.30.32.0/23 + - 172.16.0.0/12 + - 172.17.0.0/16 + - ::1 + - 172.21.0.145 + + # Add the Cloudflare IPs as trusted proxies https://www.cloudflare.com/ips-v4 + - 173.245.48.0/20 + - 103.21.244.0/22 + - 103.22.200.0/22 + - 103.31.4.0/22 + - 141.101.64.0/18 + - 108.162.192.0/18 + - 190.93.240.0/20 + - 188.114.96.0/20 + - 197.234.240.0/22 + - 198.41.128.0/17 + - 162.158.0.0/15 + - 104.16.0.0/13 + - 104.24.0.0/14 + - 172.64.0.0/13 + - 131.0.72.0/22 \ No newline at end of file diff --git a/components/packages/hue_batteries.yaml b/components/packages/hue_batteries.yaml new file mode 100644 index 0000000..ea77766 --- /dev/null +++ b/components/packages/hue_batteries.yaml @@ -0,0 +1,11 @@ +sensor: + - platform: min_max + unique_id: sensor_lowest_hue_device_battery + name: Lowest Hue Device Battery + type: min + entity_ids: + - sensor.bar_battery + - sensor.entryway_battery + - sensor.front_room_battery + - sensor.front_porch_battery + - sensor.deck_battery diff --git a/components/packages/hvac_details.yaml b/components/packages/hvac_details.yaml new file mode 100644 index 0000000..461e21d --- /dev/null +++ b/components/packages/hvac_details.yaml @@ -0,0 +1,69 @@ +template: + # - trigger: + # - platform: state + # entity_id: climate.thermostat + # not_from: + # - "unknown" + # - "unavailable" + + # - platform: event + # event_type: event_template_reloaded + # id: "reload" + + # - platform: homeassistant + # event: start + + - binary_sensor: + - name: "HVAC: Aux" + unique_id: "custom_binary_sensor.hvac_aux" + icon: mdi:fire + device_class: running + availability: "{{ states('climate.thermostat') not in ['unkown', 'unavailable'] }}" + state: > + {% if 'aux' in state_attr('climate.thermostat','equipment_running') %}{{'true'}}{% else %}{{'false'}}{% endif %} + + # - trigger: + # - platform: state + # entity_id: climate.thermostat + # not_from: + # - "unknown" + # - "unavailable" + + # - platform: event + # event_type: event_template_reloaded + # id: "reload" + + # - platform: homeassistant + # event: start + + - binary_sensor: + - name: "HVAC: Fan" + unique_id: "custom_binary_sensor.hvac_fan" + icon: mdi:fan + device_class: running + availability: "{{ states('climate.thermostat') not in ['unkown', 'unavailable'] }}" + state: > + {% if 'fan' in state_attr('climate.thermostat','equipment_running') %}{{'true'}}{% else %}{{'false'}}{% endif %} + + # - trigger: + # - platform: state + # entity_id: climate.thermostat + # not_from: + # - "unknown" + # - "unavailable" + + # - platform: event + # event_type: event_template_reloaded + # id: "reload" + + # - platform: homeassistant + # event: start + + - binary_sensor: + - name: "HVAC: Heat Pump" + unique_id: "custom_binary_sensor.hvac_heatpump" + icon: mdi:hvac + device_class: running + availability: "{{ states('climate.thermostat') not in ['unkown', 'unavailable'] }}" + state: > + {% if 'heatPump' in state_attr('climate.thermostat','equipment_running') %}{{'true'}}{% else %}{{'false'}}{% endif %} \ No newline at end of file diff --git a/components/packages/hvac_stats.yaml b/components/packages/hvac_stats.yaml new file mode 100644 index 0000000..0edb97c --- /dev/null +++ b/components/packages/hvac_stats.yaml @@ -0,0 +1,211 @@ +sensor: + - platform: min_max + name: Upstairs Max Temperature + type: max + entity_ids: + - sensor.master_bedroom_multisensor_air_temperature + - sensor.nursery_multisensor_air_temperature + - sensor.thermostat_temperature + - sensor.bar_temperature + - sensor.front_room_thermostat_temperature + - sensor.kitchen_multisensor_air_temperature + + - platform: min_max + name: Upstairs Min Temperature + type: min + entity_ids: + - sensor.master_bedroom_multisensor_air_temperature + - sensor.nursery_multisensor_air_temperature + - sensor.thermostat_temperature + - sensor.bar_temperature + - sensor.front_room_thermostat_temperature + - sensor.kitchen_multisensor_air_temperature + + - platform: min_max + name: Upstairs Mean Temperature + type: mean + entity_ids: + - sensor.master_bedroom_multisensor_air_temperature + - sensor.nursery_multisensor_air_temperature + - sensor.thermostat_temperature + - sensor.bar_temperature + - sensor.front_room_thermostat_temperature + - sensor.kitchen_multisensor_air_temperature + + - platform: min_max + name: Upstairs Max Humidity + type: max + entity_ids: + - sensor.master_bedroom_multisensor_humidity + - sensor.nursery_multisensor_humidity + - sensor.front_room_thermostat_humidity + - sensor.kitchen_multisensor_humidity + - sensor.thermostat_humidity + + - platform: min_max + name: Upstairs Min Humidity + type: min + entity_ids: + - sensor.master_bedroom_multisensor_humidity + - sensor.nursery_multisensor_humidity + - sensor.front_room_thermostat_humidity + - sensor.kitchen_multisensor_humidity + - sensor.thermostat_humidity + + - platform: min_max + name: Upstairs Mean Humidity + type: mean + entity_ids: + - sensor.master_bedroom_multisensor_humidity + - sensor.nursery_multisensor_humidity + - sensor.front_room_thermostat_humidity + - sensor.kitchen_multisensor_humidity + - sensor.thermostat_humidity + + - platform: min_max + name: Downstairs Max Temperature + type: max + entity_ids: + - sensor.computer_area_multisensor_air_temperature + - sensor.mancave_thermostat_temperature + - sensor.blue_room_thermostat_temperature + - sensor.great_room_multisensor_air_temperature + - sensor.furnace_room_temperature + + - platform: min_max + name: Downstairs Min Temperature + type: min + entity_ids: + - sensor.computer_area_multisensor_air_temperature + - sensor.mancave_thermostat_temperature + - sensor.blue_room_thermostat_temperature + - sensor.great_room_multisensor_air_temperature + + - platform: min_max + name: Downstairs Mean Temperature + type: mean + entity_ids: + - sensor.computer_area_multisensor_air_temperature + - sensor.mancave_thermostat_temperature + - sensor.blue_room_thermostat_temperature + - sensor.great_room_multisensor_air_temperature + + - platform: min_max + name: Downstairs Max Humidity + type: max + entity_ids: + - sensor.computer_area_multisensor_humidity + - sensor.great_room_multisensor_humidity + - sensor.mancave_thermostat_humidity + - sensor.blue_room_thermostat_humidity + + - platform: min_max + name: Downstairs Min Humidity + type: min + entity_ids: + - sensor.computer_area_multisensor_humidity + - sensor.great_room_multisensor_humidity + - sensor.mancave_thermostat_humidity + - sensor.blue_room_thermostat_humidity + + - platform: min_max + name: Downstairs Mean Humidity + type: mean + entity_ids: + - sensor.computer_area_multisensor_humidity + - sensor.great_room_multisensor_humidity + - sensor.mancave_thermostat_humidity + - sensor.blue_room_thermostat_humidity + + - platform: statistics + unique_id: statistics_outdoors_mean_temperature + name: Outdoors Mean Temperature + entity_id: sensor.outdoors_temp_mean + state_characteristic: mean + sampling_size: 20 + precision: 1 + max_age: + minutes: 5 + + - platform: min_max + name: Outdoors Temp Mean + type: mean + entity_ids: + - sensor.lacrosse_tx141thbv2_0_54_temperature + - sensor.front_porch_temperature + - sensor.deck_temperature + + - platform: history_stats + name: AC Cooling Time Today + entity_id: sensor.hvac_action + state: "cooling" + type: time + start: "{{ now().replace(hour=0, minute=0, second=0) }}" + end: "{{ now() }}" + + - platform: history_stats + name: AC Cooling Time Past Week + entity_id: sensor.hvac_action + state: "cooling" + type: time + start: "{{ as_timestamp( now().replace(hour=0, minute=0, second=0) ) - now().weekday() * 86400 }}" + end: "{{ now() }}" + + - platform: history_stats + name: AC Cooling Time Past Month + entity_id: sensor.hvac_action + state: "cooling" + type: time + end: "{{ now().replace(hour=0, minute=0, second=0) }}" + duration: + days: 30 + + - platform: history_stats + name: AC Fan Time Today + entity_id: sensor.hvac_action + state: "fan" + type: time + start: "{{ now().replace(hour=0, minute=0, second=0) }}" + end: "{{ now() }}" + + - platform: history_stats + name: AC Fan Time Past Week + entity_id: sensor.hvac_action + state: "fan" + type: time + start: "{{ as_timestamp( now().replace(hour=0, minute=0, second=0) ) - now().weekday() * 86400 }}" + end: "{{ now() }}" + + - platform: history_stats + name: AC Fan Time Past Month + entity_id: sensor.hvac_action + state: "fan" + type: time + end: "{{ now().replace(hour=0, minute=0, second=0) }}" + duration: + days: 30 + + - platform: history_stats + name: AC Heating Time Today + entity_id: sensor.hvac_action + state: "heating" + type: time + start: "{{ now().replace(hour=0, minute=0, second=0) }}" + end: "{{ now() }}" + + - platform: history_stats + name: AC Heating Time Past Week + entity_id: sensor.hvac_action + state: "heating" + type: time + start: "{{ as_timestamp( now().replace(hour=0, minute=0, second=0) ) - now().weekday() * 86400 }}" + end: "{{ now() }}" + + - platform: history_stats + name: AC Heating Time Past Month + entity_id: sensor.hvac_action + state: "heating" + type: time + end: "{{ now().replace(hour=0, minute=0, second=0) }}" + duration: + days: 30 diff --git a/components/packages/hygrostats.yaml b/components/packages/hygrostats.yaml new file mode 100644 index 0000000..10a2266 --- /dev/null +++ b/components/packages/hygrostats.yaml @@ -0,0 +1,24 @@ +binary_sensor: +- platform: generic_hygrostat + name: Master Bathroom Hygrostat + sensor: sensor.master_bathroom_thermostat_humidity # Source humidity sensor + #attribute: humidity # Optional use sensor attribute instead of state. + delta_trigger: 3 # Optional humidity swing to detect. Default = 3 + target_offset: 10 # Optional dehumidification target offset. Default = 3 + min_on_time: 300 # Optional min on time in seconds. Default = 0 seconds + max_on_time: 1800 # Optional safety max on time in seconds. Default = 7200 seconds + sample_interval: 60 # Optional time between taking humidity samples in seconds, default 300 seconds + min_humidity: 55 # Optional minimum humidity to enable dehumidification. Default = 0 + unique_id: master_bathroom_hygrostat # Optional ID that uniquely identifies this sensor. Set this to a unique value to allow customization through the UI. + +- platform: generic_hygrostat + name: Utility Room Hygrostat + sensor: sensor.utility_room_thermostat_humidity # Source humidity sensor + #attribute: humidity # Optional use sensor attribute instead of state. + delta_trigger: 5 # Optional humidity swing to detect. Default = 3 + target_offset: 10 # Optional dehumidification target offset. Default = 3 + min_on_time: 300 # Optional min on time in seconds. Default = 0 seconds + max_on_time: 1800 # Optional safety max on time in seconds. Default = 7200 seconds + sample_interval: 60 # Optional time between taking humidity samples in seconds, default 300 seconds + min_humidity: 55 # Optional minimum humidity to enable dehumidification. Default = 0 + unique_id: utility_room_hygrostat # Optional ID that uniquely identifies this sensor. Set this to a unique value to allow customization through the UI. \ No newline at end of file diff --git a/components/packages/imap.yaml b/components/packages/imap.yaml new file mode 100644 index 0000000..1d12027 --- /dev/null +++ b/components/packages/imap.yaml @@ -0,0 +1,18 @@ +# sensor: +# - platform: imap +# name: 'Chickadee: All' +# server: !secret imap_server +# port: 993 +# username: !secret imap_username +# password: !secret imap_password +# search: !secret imap_search_1 +# charset: US-ASCII + +# - platform: imap +# name: 'Chickadee: Unread' +# server: !secret imap_server +# port: 993 +# username: !secret imap_username +# password: !secret imap_password +# search: !secret imap_search_2 +# charset: US-ASCII diff --git a/components/packages/intent_scripts.yaml b/components/packages/intent_scripts.yaml new file mode 100644 index 0000000..1be9469 --- /dev/null +++ b/components/packages/intent_scripts.yaml @@ -0,0 +1 @@ +intent_script: !include_dir_named ../intent_scripts \ No newline at end of file diff --git a/components/packages/keurig.yaml b/components/packages/keurig.yaml new file mode 100644 index 0000000..898725f --- /dev/null +++ b/components/packages/keurig.yaml @@ -0,0 +1,92 @@ +input_number: + keurig_on: + name: Keurig On + min: 0 + max: 2000 + step: 0.1 + mode: box + + keurig_warming_water: + name: Keurig Warming Water + min: 0 + max: 2000 + step: 0.1 + mode: box + + keurig_brewing: + name: Keurig Brewing + min: 0 + max: 2000 + step: 0.1 + mode: box + + keurig_pouring: + name: Keurig Pouring + min: 0 + max: 2000 + step: 0.1 + mode: box + + keurig_carafe: + name: Keurig Carafe + min: 0 + max: 2000 + step: 0.1 + mode: box + +binary_sensor: + - platform: template + sensors: + + keurig_on: + friendly_name: 'Keurig On' + value_template: "{{ states('sensor.pm_kitchen_2_w') | float(default=0) < states('input_number.keurig_on') | float(default=0) }}" + + keurig_warming_water: + friendly_name: 'Keurig Warming Water' + value_template: "{{ states('sensor.pm_kitchen_2_w') | float(default=0) > states('input_number.keurig_warming_water') | float(default=0) }}" + delay_off: "00:00:20" + + keurig_brewing: + friendly_name: 'Keurig Brewing' + value_template: "{{ states('sensor.pm_kitchen_2_w') | float(default=0) > states('input_number.keurig_brewing') | float(default=0) }}" + + keurig_pouring: + friendly_name: 'Keurig Pouring' + value_template: "{{ states('sensor.pm_kitchen_2_w') | float(default=0) > states('input_number.keurig_pouring') | float(default=0) }}" + + keurig: #This still needs to watch the Shelly sensor, rather than the circuit, so devices plugged into other outlets don't interfere with this sensor. + unique_id: templatebinarysensor.keurig + friendly_name: Keurig + value_template: "{{ states('sensor.shelly_keurig_w') | float(default=0) > states('input_number.keurig_brewing') | float(default=0) }}" + delay_on: + seconds: 50 # If you press a button the keurig will wake up, but not actually brew. + delay_off: + seconds: 30 + icon_template: mdi:coffee-maker + + attribute_templates: + model_number: 'K-Duo Essentials' + serial_number: '5000 3100 08558 19' + power: "{{ states('sensor.shelly_keurig_w') | float(default=0)}}" + target: "{{ states('input_number.keurig_brewing') | float(default=0)}}" + + keurig_carafe: + unique_id: templatebinarysensor.keurig_carafe + friendly_name: Keurig Carafe + value_template: "{{ states('sensor.shelly_keurig_w') | float(default=0) > states('input_number.keurig_carafe') | float(default=0) }}" + # The largest cup takes just under 3 minutes to brew. If the keurig is on for over 3 minutes + # someone is brewing a pot of coffee, rather than using a k-cup + delay_on: + minutes: 4 + + # If this sensor is still on when binary_sensor.keurig turns off, a K-Cup was brewed and should + # be considered consumed. + delay_off: + seconds: 40 + icon_template: mdi:coffee-maker + attribute_templates: + model_number: 'K-Duo Essentials' + serial_number: '5000 3100 08558 19' + power: "{{ states('sensor.shelly_keurig_w') | float(default=0)}}" + target: "{{ states('input_number.keurig_carafe') | float(default=0)}}" diff --git a/components/packages/light_cycle.yaml b/components/packages/light_cycle.yaml new file mode 100644 index 0000000..103e3e8 --- /dev/null +++ b/components/packages/light_cycle.yaml @@ -0,0 +1,69 @@ +script: + light_cycle: + sequence: + - service: homeassistant.turn_on + entity_id: light.front_room_hue + data_template: + brightness: 250 + color_name: > + {% set colors = ['red', 'yellow' , 'blue', 'green' , 'purple'] %} + {{ colors|random }} + transition: 1 + # Wait until the loop_lights script has finished running + - delay: '00:00:02' + - wait_template: "{{ is_state('script.loop_lights', 'off') }}" + - service: script.loop_lights + + loop_lights: + sequence: + - delay: '00:00:02' + # Wait until the light_cycle script has finished running + - wait_template: "{{ is_state('script.light_cycle', 'off') }}" + - service: script.light_cycle + +automation: + - alias: Light Cycle Start + id: automation_light_cycle_start + trigger: + - platform: state + entity_id: input_boolean.front_room_light_cycle + to: 'on' + action: + - service: input_text.set_value + # Again, note the use of 'data_template:' rather than the normal 'data:' if you weren't using an input variable. + data_template: + entity_id: input_text.front_room_mode + value: "{{ states('input_select.front_room_mode') }}" + + - service: input_select.select_option + data: + entity_id: input_select.front_room_mode + option: 'Off' + - service: script.light_cycle + + - alias: Light Cycle Stop + id: automation_light_cycle_stop + trigger: + - platform: state + entity_id: input_boolean.front_room_light_cycle + to: 'off' + action: + - service: homeassistant.turn_off + entity_id: + - script.light_cycle + - script.loop_lights + + - service: input_select.select_option + data_template: + entity_id: input_select.front_room_mode + option: "{{ states('input_text.front_room_mode') }}" + + - service: input_boolean.toggle + data: + entity_id: input_boolean.front_room_occupied + + - delay: '00:00:01' + + - service: input_boolean.toggle + data: + entity_id: input_boolean.front_room_occupied \ No newline at end of file diff --git a/components/packages/lights.yaml b/components/packages/lights.yaml new file mode 100644 index 0000000..e990675 --- /dev/null +++ b/components/packages/lights.yaml @@ -0,0 +1 @@ +light: !include_dir_list ../lights diff --git a/components/packages/logger.yaml b/components/packages/logger.yaml new file mode 100644 index 0000000..0dd6e14 --- /dev/null +++ b/components/packages/logger.yaml @@ -0,0 +1,53 @@ +# Example configuration.yaml entry +logger: + default: warning + logs: + + # WebRTC issues + custom_components.webrtc: debug + + # Grocy issues + # pygrocy.grocy_api_client: debug + # custom_components.grocy: debug + + # log level for HA core + homeassistant.core: warning + + #homeassistant.components.websocket_api: debug + + # log level for MQTT integration + #homeassistant.components.mqtt: debug + + # log level for all python scripts + #homeassistant.components.python_script: warning + + # log level for the device_tracker component + homeassistant.components.device_tracker: warning + + # homeassistant.components.rest_command: debug + + homeassistant.components.http.ban: warning + + #homeassistant.components.http: debug + + #homeassistant.components.zwave_js: debug + + #homeassistant.components.hue: warning + + #homeassistant.components.webhook: debug + + #homeassistant.components.automation: debug + + #homeassistant.compononts.device_registry: debug + + # Home Assistant database upgrade progress messages + homeassistant.components.recorder.migration: info + + filters: + pychromecast.socket_client: + - ".*socket.*" + - ".*Failed to connect to service.*" + custom_components.grocy: + - ".*last_used.*" + homeassistant.components.roku.coordinator: + - ".*Timeout occurred.*" \ No newline at end of file diff --git a/components/packages/lovelace.yaml b/components/packages/lovelace.yaml new file mode 100644 index 0000000..dea57a0 --- /dev/null +++ b/components/packages/lovelace.yaml @@ -0,0 +1,46 @@ +lovelace: + mode: yaml + resources: !include ../../lovelace/resources.yaml + dashboards: + lovelace-yaml: + mode: yaml + title: Daddy's House + icon: mdi:home + show_in_sidebar: true + filename: ui-lovelace.yaml + data-yml: + mode: yaml + title: Data + icon: mdi:chart-line + show_in_sidebar: true + filename: ui-data.yaml + ai-yml: + mode: yaml + title: Cameras + icon: mdi:cctv + show_in_sidebar: true + filename: ui-cameras.yaml + phone-yaml: + mode: yaml + title: Phone Dashboard + icon: mdi:cellphone + show_in_sidebar: true + filename: ui-phone.yaml + cams-yml: + mode: yaml + title: Cams + icon: mdi:camcorder + show_in_sidebar: false + filename: ui-cams.yaml + camera-casting-yml: + mode: yaml + title: Camera Casting + icon: mdi:cast + show_in_sidebar: false + filename: ui-camera-cast.yaml + details-yml: + mode: yaml + title: Details + icon: mdi:magnify + show_in_sidebar: false + filename: ui-details.yaml \ No newline at end of file diff --git a/components/packages/naturally_lit_rooms.yaml b/components/packages/naturally_lit_rooms.yaml new file mode 100644 index 0000000..e8e1ab9 --- /dev/null +++ b/components/packages/naturally_lit_rooms.yaml @@ -0,0 +1,436 @@ +template: + - trigger: + - platform: homeassistant + event: start + + - platform: state + entity_id: input_number.blue_room_light_level_trigger + + - platform: state + entity_id: sensor.blue_room_multisensor_illuminance + + binary_sensor: + - name: "Blue Room Naturally Lit" + unique_id: templatebinarysensor_blueroomnaturallylit + delay_on: + seconds: 3 + delay_off: + seconds: 3 + state: > + {{ states('sensor.blue_room_multisensor_illuminance') | float(default=0) > states('input_number.blue_room_light_level_trigger') | float(default=0) }} + icon: > + {% if states('sensor.blue_room_multisensor_illuminance') | float(default=0) > states('input_number.blue_room_light_level_trigger') | float(default=0) %} + mdi:weather-sunny + {% else %} + mdi:weather-sunny-off + {% endif %} + attributes: + illuminance: "{{ states('sensor.blue_room_multisensor_illuminance') | float(default=0) }}" + trigger: "{{ states('input_number.blue_room_light_level_trigger') | float(default=0) }}" + + - trigger: + - platform: homeassistant + event: start + + - platform: state + entity_id: input_number.computer_area_light_level_trigger + + - platform: state + entity_id: sensor.computer_area_multisensor_illuminance + + binary_sensor: + - name: "Computer Area Naturally Lit" + unique_id: templatebinarysensor_computerareanaturallylit + delay_on: + seconds: 3 + delay_off: + seconds: 3 + state: > + {{ states('sensor.computer_area_multisensor_illuminance') | float(default=0) > states('input_number.computer_area_light_level_trigger') | float(default=0) }} + icon: > + {% if states('sensor.computer_area_multisensor_illuminance') | float(default=0) > states('input_number.computer_area_light_level_trigger') | float(default=0) %} + mdi:weather-sunny + {% else %} + mdi:weather-sunny-off + {% endif %} + attributes: + illuminance: "{{ states('sensor.computer_area_multisensor_illuminance') | float(default=0) }}" + trigger: "{{ states('input_number.computer_area_light_level_trigger') | float(default=0) }}" + + - trigger: + - platform: homeassistant + event: start + + - platform: state + entity_id: input_number.deck_light_level_trigger + + - platform: state + entity_id: sensor.deck_light_level + + binary_sensor: + - name: "Deck Naturally Lit" + unique_id: templatebinarysensor_decknaturallylit + delay_on: + seconds: 3 + delay_off: + seconds: 3 + state: > + {{ states('sensor.deck_light_level') | float(default=0) > states('input_number.deck_light_level_trigger') | float(default=0) }} + icon: > + {% if states('sensor.deck_light_level') | float(default=0) > states('input_number.deck_light_level_trigger') | float(default=0) %} + mdi:weather-sunny + {% else %} + mdi:weather-sunny-off + {% endif %} + attributes: + illuminance: "{{ states('sensor.deck_light_level') | float(default=0) }}" + trigger: "{{ states('input_number.deck_light_level_trigger') | float(default=0) }}" + + - trigger: + - platform: homeassistant + event: start + + - platform: state + entity_id: input_number.dining_room_light_level_trigger + + - platform: state + entity_id: sensor.dining_room_multisensor_illuminance + to: + + - platform: event + event_type: event_template_reloaded + + binary_sensor: + - name: "Dining Room Naturally Lit" + unique_id: templatebinarysensor_diningroomnaturallylit + availability: "{{ states('sensor.dining_room_multisensor_illuminance') not in ['unkown', 'unavailable'] }}" + delay_on: + seconds: 3 + delay_off: + seconds: 3 + state: > + {{ states('sensor.dining_room_multisensor_illuminance')| float(default=0) > states('input_number.dining_room_light_level_trigger')| float(default=0) }} + icon: > + {% if states('sensor.dining_room_multisensor_illuminance')| float(default=0) > states('input_number.dining_room_light_level_trigger')| float(default=0) %} + mdi:weather-sunny + {% else %} + mdi:weather-sunny-off + {% endif %} + attributes: + illuminance: "{{ states('sensor.dining_room_multisensor_illuminance') | float(default=0) }}" + trigger: "{{ states('input_number.dining_room_light_level_trigger') | float(default=0) }}" + + - trigger: + - platform: homeassistant + event: start + + - platform: state + entity_id: input_number.entryway_light_level_trigger + + - platform: state + entity_id: sensor.entryway_light_level + + binary_sensor: + - name: "Entryway Naturally Lit" + unique_id: templatebinarysensor_entrywaynaturallylit + delay_on: + seconds: 3 + delay_off: + seconds: 3 + state: > + {{ states('sensor.entryway_light_level') | float(default=0) > states('input_number.entryway_light_level_trigger') | float(default=0) }} + icon: > + {% if states('sensor.entryway_light_level') | float(default=0) > states('input_number.entryway_light_level_trigger') | float(default=0) %} + mdi:weather-sunny + {% else %} + mdi:weather-sunny-off + {% endif %} + attributes: + illuminance: "{{ states('sensor.entryway_light_level') | float(default=0) }}" + trigger: "{{ states('input_number.entryway_light_level_trigger') | float(default=0) }}" + + - trigger: + - platform: homeassistant + event: start + + - platform: state + entity_id: input_number.front_porch_light_level_trigger + + - platform: state + entity_id: sensor.front_porch_light_level + + binary_sensor: + - name: "Front Porch Naturally Lit" + unique_id: templatebinarysensor_frontporchnaturallylit + delay_on: + seconds: 3 + delay_off: + seconds: 3 + state: > + {{ states('sensor.front_porch_light_level') | float(default=0) > states('input_number.front_porch_light_level_trigger') | float(default=0) }} + icon: > + {% if states('sensor.front_porch_light_level') | float(default=0) > states('input_number.front_porch_light_level_trigger') | float(default=0) %} + mdi:weather-sunny + {% else %} + mdi:weather-sunny-off + {% endif %} + attributes: + illuminance: "{{ states('sensor.front_porch_light_level') | float(default=0) }}" + trigger: "{{ states('input_number.front_porch_light_level_trigger') | float(default=0) }}" + + - trigger: + - platform: homeassistant + event: start + + - platform: state + entity_id: input_number.front_room_light_level_trigger + + - platform: state + entity_id: sensor.front_room_light_level + + binary_sensor: + - name: "Front Room Naturally Lit" + unique_id: templatebinarysensor_frontroomnaturallylit + delay_on: + seconds: 3 + delay_off: + seconds: 3 + state: > + {{ states('sensor.front_room_light_level') | float(default=0) > states('input_number.front_room_light_level_trigger') | float(default=0) }} + icon: > + {% if states('sensor.front_room_light_level') | float(default=0) > states('input_number.front_room_light_level_trigger') | float(default=0) %} + mdi:weather-sunny + {% else %} + mdi:weather-sunny-off + {% endif %} + attributes: + illuminance: "{{ states('sensor.front_room_light_level') | float(default=0) }}" + trigger: "{{ states('input_number.front_room_light_level_trigger') | float(default=0) }}" + + - trigger: + - platform: homeassistant + event: start + + - platform: state + entity_id: input_number.garage_overhead_light_level_trigger + + - platform: state + entity_id: sensor.garage_multisensor_illuminance + + binary_sensor: + - name: "Garage Naturally Lit" + unique_id: templatebinarysensor_garagenaturallylit + delay_on: + seconds: 3 + delay_off: + seconds: 3 + state: > + {{ states('sensor.garage_multisensor_illuminance') | float(default=0) > states('input_number.garage_overhead_light_level_trigger') | float(default=0) }} + icon: > + {% if states('sensor.garage_multisensor_illuminance') | float(default=0) > states('input_number.garage_overhead_light_level_trigger') | float(default=0) %} + mdi:weather-sunny + {% else %} + mdi:weather-sunny-off + {% endif %} + attributes: + illuminance: "{{ states('sensor.garage_multisensor_illuminance') | float(default=0) }}" + trigger: "{{ states('input_number.garage_overhead_light_level_trigger') | float(default=0) }}" + + - trigger: + - platform: homeassistant + event: start + + - platform: state + entity_id: input_number.great_room_light_level_trigger + + - platform: state + entity_id: sensor.great_room_multisensor_illuminance + + binary_sensor: + - name: "Great Room Naturally Lit" + unique_id: templatebinarysensor_greatroomnaturallylit + delay_on: + seconds: 3 + delay_off: + seconds: 3 + state: > + {{ states('sensor.great_room_multisensor_illuminance') | float(default=0) > states('input_number.great_room_light_level_trigger') | float(default=0) }} + icon: > + {% if states('sensor.great_room_multisensor_illuminance') | float(default=0) > states('input_number.great_room_light_level_trigger') | float(default=0) %} + mdi:weather-sunny + {% else %} + mdi:weather-sunny-off + {% endif %} + attributes: + illuminance: "{{ states('sensor.great_room_multisensor_illuminance') | float(default=0) }}" + trigger: "{{ states('input_number.great_room_light_level_trigger') | float(default=0) }}" + + - trigger: + - platform: homeassistant + event: start + + - platform: state + entity_id: input_number.kitchen_light_level_trigger + + - platform: state + entity_id: sensor.kitchen_multisensor_illuminance + + binary_sensor: + - name: "Kitchen Naturally Lit" + unique_id: templatebinarysensor_kitchennaturallylit + delay_on: + seconds: 3 + delay_off: + seconds: 3 + state: > + {{ states('sensor.kitchen_multisensor_illuminance') | float(default=0) > states('input_number.kitchen_light_level_trigger') | float(default=0) }} + icon: > + {% if states('sensor.kitchen_multisensor_illuminance') | float(default=0) > states('input_number.kitchen_light_level_trigger') | float(default=0) %} + mdi:weather-sunny + {% else %} + mdi:weather-sunny-off + {% endif %} + attributes: + illuminance: "{{ states('sensor.kitchen_multisensor_illuminance') | float(default=0) }}" + trigger: "{{ states('input_number.kitchen_light_level_trigger') | float(default=0) }}" + + - trigger: + - platform: homeassistant + event: start + + - platform: state + entity_id: + - input_number.master_bedroom_light_level_trigger + - sensor.master_bedroom_multisensor_illuminance + + binary_sensor: + - name: "Master Bedroom Naturally Lit" + unique_id: templatebinarysensor_masterbedroomnaturallylit + delay_on: + seconds: 3 + delay_off: + seconds: 3 + state: > + {{ states('sensor.master_bedroom_multisensor_illuminance') | float(default=0) > states('input_number.master_bedroom_light_level_trigger') | float(default=0) }} + icon: > + {% if states('sensor.master_bedroom_multisensor_illuminance') | float(default=0) > states('input_number.master_bedroom_light_level_trigger') | float(default=0) %} + mdi:weather-sunny + {% else %} + mdi:weather-sunny-off + {% endif %} + attributes: + illuminance: "{{ states('sensor.master_bedroom_multisensor_illuminance') | float(default=0) }}" + trigger: "{{ states('input_number.master_bedroom_light_level_trigger') | float(default=0) }}" + + - trigger: + - platform: homeassistant + event: start + + - platform: state + entity_id: + - input_number.nursery_light_level_trigger + - sensor.nursery_multisensor_illuminance + + binary_sensor: + - name: "Nursery Naturally Lit" + unique_id: templatebinarysensor_nurserynaturallylit + delay_on: + seconds: 3 + delay_off: + seconds: 3 + state: > + {{ states('sensor.nursery_multisensor_illuminance') | float(default=0) > states('input_number.nursery_light_level_trigger') | float(default=0) }} + icon: > + {% if states('sensor.nursery_multisensor_illuminance') | float(default=0) > states('input_number.nursery_light_level_trigger') | float(default=0) %} + mdi:weather-sunny + {% else %} + mdi:weather-sunny-off + {% endif %} + attributes: + illuminance: "{{ states('sensor.nursery_multisensor_illuminance') | float(default=0) }}" + trigger: "{{ states('input_number.nursery_light_level_trigger') | float(default=0) }}" + +input_number: + blue_room_light_level_trigger: + name: Blue Room Light Level Trigger + icon: mdi:brightness-auto + min: 0 + max: 50000 + mode: box + + computer_area_light_level_trigger: + name: Computer Area Light Level Trigger + icon: mdi:brightness-auto + min: 0 + max: 50000 + mode: box + + deck_light_level_trigger: + name: Deck Light Level Trigger + icon: mdi:brightness-auto + min: 0 + max: 50000 + mode: box + + dining_room_light_level_trigger: + name: Dining Room Light Level Trigger + icon: mdi:brightness-auto + min: 0 + max: 50000 + mode: box + + entryway_light_level_trigger: + name: Entryway Light Level Trigger + icon: mdi:brightness-auto + min: 0 + max: 50000 + mode: box + + front_porch_light_level_trigger: + name: Front Porch Light Level Trigger + icon: mdi:brightness-auto + min: 0 + max: 50000 + mode: box + + front_room_light_level_trigger: + name: Front Room Light Level Trigger + icon: mdi:brightness-auto + min: 0 + max: 50000 + mode: box + + garage_overhead_light_level_trigger: + name: Garage Overhead Light Level Trigger + icon: mdi:brightness-auto + min: 0 + max: 50000 + mode: box + + great_room_light_level_trigger: + name: Great Room Light Level Trigger + icon: mdi:brightness-auto + min: 0 + max: 50000 + mode: box + + kitchen_light_level_trigger: + name: Kitchen Light Level Trigger + icon: mdi:brightness-auto + min: 0 + max: 50000 + mode: box + + master_bedroom_light_level_trigger: + name: Master Bedroom Light Level Trigger + icon: mdi:brightness-auto + min: 0 + max: 50000 + mode: box + + nursery_light_level_trigger: + name: Nursery Light Level Trigger + icon: mdi:brightness-auto + min: 0 + max: 50000 + mode: box \ No newline at end of file diff --git a/components/packages/network_equipment.yaml b/components/packages/network_equipment.yaml new file mode 100644 index 0000000..9b0d408 --- /dev/null +++ b/components/packages/network_equipment.yaml @@ -0,0 +1,25 @@ +input_button: + restart_modem: + name: Restart Modem + icon: mdi:wan + + restart_router: + name: Restart Router + icon: mdi:lan + + restart_network: + name: Restart Network + icon: mdi:web + +input_boolean: + restart_modem: + name: Restart Modem + icon: mdi:wan + + restart_router: + name: Restart Router + icon: mdi:lan + + restart_network: + name: Restart Network + icon: mdi:web \ No newline at end of file diff --git a/components/packages/notify.yaml b/components/packages/notify.yaml new file mode 100644 index 0000000..fc73fdc --- /dev/null +++ b/components/packages/notify.yaml @@ -0,0 +1 @@ +notify: !include_dir_list ../notifies diff --git a/components/packages/notify_clints_everything.yaml b/components/packages/notify_clints_everything.yaml new file mode 100644 index 0000000..21d6c72 --- /dev/null +++ b/components/packages/notify_clints_everything.yaml @@ -0,0 +1,8 @@ +notify: + - platform: group + name: "Clints Everything" + services: + - service: dreambox + - service: dreamtablet + - service: dreamtablet02 + - service: mobile_app_pixel_7 \ No newline at end of file diff --git a/components/packages/openmindsai/gpt_prompt.yaml b/components/packages/openmindsai/gpt_prompt.yaml new file mode 100644 index 0000000..b81dd41 --- /dev/null +++ b/components/packages/openmindsai/gpt_prompt.yaml @@ -0,0 +1,10 @@ +input_text: + gpt_prompt: + initial: "" + max: 255 + name: GPT Prompt + +input_button: + update_gpt_response: + name: Update GPT Response + icon: mdi:brain \ No newline at end of file diff --git a/components/packages/openmindsai/update_response_log.yaml b/components/packages/openmindsai/update_response_log.yaml new file mode 100644 index 0000000..4a53173 --- /dev/null +++ b/components/packages/openmindsai/update_response_log.yaml @@ -0,0 +1,16 @@ +automation: + description: "" + mode: single + trigger: + - platform: state + entity_id: + - sensor.hassio_mindsdb_response + attribute: response_text + condition: [] + action: + - service: notify.mindsdb_responses + data: + message: > + "input":"{{ states('input_text.gpt_prompt') }}","output":"{{ state_attr('sensor.hassio_mindsdb_response','response_text')}}" + + diff --git a/components/packages/openweathermap_templates.yaml b/components/packages/openweathermap_templates.yaml new file mode 100644 index 0000000..ff5d5d1 --- /dev/null +++ b/components/packages/openweathermap_templates.yaml @@ -0,0 +1,127 @@ +# TODO +# Update to account for new get_weather_forcats BS a + +template: + - binary_sensor: + - name: Precipitation Likely Soon + unique_id: templatebinarysensor.precipitation_likely_soon + icon: mdi:weather-rainy + availability: "{{ states('sensor.openweathermap_hourly_forecast_precipitation_probability') not in ['unkown', 'unavailable'] }}" + state: "{{ states('sensor.openweathermap_hourly_forecast_precipitation_probability')|float(default=0) >= 50.0 }}" + + - name: Precipitation Likely + unique_id: templatebinarysensor.precipitation_likely + icon: mdi:weather-rainy + availability: "{{ states('sensor.openweathermap_daily_forecast_precipitation_probability') not in ['unkown', 'unavailable'] }}" + state: "{{ states('sensor.openweathermap_daily_forecast_precipitation_probability')|float(default=0) >= 50.0 }}" + + - trigger: + + - platform: time_pattern + hours: /1 + + - platform: event + event_type: event_template_reloaded + id: "reload" + + - platform: homeassistant + event: start + + action: + - service: weather.get_forecasts + data: + type: daily + target: + entity_id: weather.openweathermap_daily + response_variable: daily + + - service: weather.get_forecasts + data: + type: hourly + target: + entity_id: weather.openweathermap_hourly + response_variable: hourly + + binary_sensor: + - name: "Impending Rain" + unique_id: templatebinarysensor.impending_rain + availability: "{{ states('weather.openweathermap_hourly') not in ['unkown', 'unavailable'] }}" + icon: mdi:weather-rainy + # This looks too far into the future. Cutting it down a bit + state: >- + {%- set totalprecipitation = 0 | float -%} + {%- set upcoming_precipitation = 0 | float -%} + {%- set ns = namespace() -%} + {%- set ns.totalprecipitation = 0 -%} + {%- for daypart in range(0, 8) -%} + {%- set precipitation = hourly['weather.openweathermap_hourly'].forecast[daypart].precipitation -%} + {%- set wind_speed = hourly['weather.openweathermap_hourly'].forecast[daypart].wind_speed -%} + {%- set precipitation_probability = hourly['weather.openweathermap_hourly'].forecast[daypart].precipitation_probability %} + + {% if precipitation_probability > 0 -%} + {% if wind_speed > states('input_number.wind_speed_blowing_rain') |float(default=0) %} + {%- set upcoming_precipitation = precipitation * precipitation_probability -%} + {%- endif -%} + {%- endif -%} + {%- set ns.totalprecipitation = ns.totalprecipitation + upcoming_precipitation -%} + {%- endfor %} + {{ ns.totalprecipitation / 100 | float | round(0) > 0.99 }} + + sensor: + - name: "Sprinkler: Total Expected Precipitation" + unique_id: "custom_sensor.sprinkler_total_expected_precipitation" + icon: mdi:weather-pouring + unit_of_measurement: mm + availability: "{{ states('weather.openweathermap_daily') not in ['unkown', 'unavailable'] }}" + state: > + {%- set totalprecipitation = 0 | float -%} + {%- set upcoming_precipitation = 0 | float -%} + {%- set ns = namespace() -%} + {%- set ns.totalprecipitation = 0 -%} + {%- for daypart in range(0, 8) -%} + {%- set precipitation = daily['weather.openweathermap_daily'].forecast[daypart].precipitation * 25.4 -%} + {%- set precipitation_probability = daily['weather.openweathermap_daily'].forecast[daypart].precipitation_probability / 100 %} + {% if precipitation_probability >0 -%} + {%- set upcoming_precipitation = precipitation * precipitation_probability -%} + {%- endif -%} + {%- set ns.totalprecipitation = ns.totalprecipitation + upcoming_precipitation -%} + {%- endfor %} + {{ ns.totalprecipitation | float | round(0) }} + + - name: "Today's Low Temperature" + unique_id: templatesensor.templow_today + unit_of_measurement: °F + availability: "{{ states('weather.openweathermap_daily') not in ['unkown', 'unavailable'] }}" + state: "{{ daily['weather.openweathermap_daily'].forecast[0].templow }}" + + - name: "Today's High Temperature" + unique_id: templatesensor.temphigh_today + unit_of_measurement: °F + availability: "{{ states('weather.openweathermap_daily') not in ['unkown', 'unavailable'] }}" + state: "{{ daily['weather.openweathermap_daily'].forecast[0].temperature}}" + + - name: "Today's Chance of Precipitation" + unique_id: templatesensor.precip_chance_today + icon: mdi:cloud-percent + unit_of_measurement: '%' + availability: "{{ states('weather.openweathermap_daily') not in ['unkown', 'unavailable'] }}" + state: "{{ daily['weather.openweathermap_daily'].forecast[0].precipitation_probability}}" + + - name: "Tomorrow's Low Temperature" + unique_id: templatesensor.templow_tomorrow + unit_of_measurement: °F + availability: "{{ states('weather.openweathermap_daily') not in ['unkown', 'unavailable'] }}" + state: "{{ daily['weather.openweathermap_daily'].forecast[1].templow}}" + + - name: "Tomorrow's High Temperature" + unique_id: templatesensor.temphigh_tomorrow + unit_of_measurement: °F + availability: "{{ states('weather.openweathermap_daily') not in ['unkown', 'unavailable'] }}" + state: "{{ daily['weather.openweathermap_daily'].forecast[1].temperature}}" + + - name: "Tomorrow's Chance of Precipitation" + unique_id: templatesensor.precip_chance_tomorrow + icon: mdi:cloud-percent + unit_of_measurement: '%' + availability: "{{ states('weather.openweathermap_daily') not in ['unkown', 'unavailable'] }}" + state: "{{ daily['weather.openweathermap_daily'].forecast[1].precipitation_probability}}" \ No newline at end of file diff --git a/components/packages/patio_door_lock.yaml b/components/packages/patio_door_lock.yaml new file mode 100644 index 0000000..fa464c3 --- /dev/null +++ b/components/packages/patio_door_lock.yaml @@ -0,0 +1,13 @@ +lock: + - platform: template + unique_id: templatelock.patio_door + name: Patio Door + value_template: "{{ is_state('switch.shelly_sliding_glass_door', 'on') }}" + lock: + service: switch.turn_on + target: + entity_id: switch.shelly_sliding_glass_door + unlock: + service: switch.turn_off + target: + entity_id: switch.shelly_sliding_glass_door \ No newline at end of file diff --git a/components/packages/pixel_7_coordinates.yaml b/components/packages/pixel_7_coordinates.yaml new file mode 100644 index 0000000..779c379 --- /dev/null +++ b/components/packages/pixel_7_coordinates.yaml @@ -0,0 +1,38 @@ +# Toggle controlling the status of coordinate logging +input_boolean: + log_pixel_7_coordinates: + name: "Log Pixel 7 Coordinates" + icon: mdi:crosshairs-gps + +# Coordinate log configuration +notify: + - name: Pixel 7 Coordinates + platform: file + filename: /config/custom_logs/pixel_7_coordinates.csv + timestamp: false + +# Automation to handle the actual logging of coordinates +automation: + - alias: "Log Pixel 7 Coordinates" + id: 7e726150-6bd7-40c8-a990-13df987d0fca + trigger: + - platform: state + entity_id: input_boolean.log_pixel_7_coordinates + from: "off" + to: "on" + + - platform: state + entity_id: device_tracker.pixel_7 + + - platform: homeassistant + event: start + + condition: + - condition: state + entity_id: input_boolean.log_pixel_7_coordinates + state: "on" + + action: + - service: notify.pixel_7_coordinates + data: + message: "{{now().strftime('%Y-%m-%d')}}T{{now().strftime('%H:%M:%S.%f')}},{{states('device_tracker.pixel_7')}},{{state_attr('device_tracker.pixel_7','latitude')}},{{state_attr('device_tracker.pixel_7','longitude')}}" \ No newline at end of file diff --git a/components/packages/plant_sensor_batteries.yaml b/components/packages/plant_sensor_batteries.yaml new file mode 100644 index 0000000..756b49c --- /dev/null +++ b/components/packages/plant_sensor_batteries.yaml @@ -0,0 +1,19 @@ +sensor: + - platform: min_max + unique_id: sensor_lowest_xiaomi_device_battery + name: Lowest Xiaomi Plant Sensor Battery + type: min + entity_ids: + - sensor.plant_sensor_3eae_battery + - sensor.plant_sensor_3eb0_battery + - sensor.plant_sensor_cea4_battery + + - platform: min_max + unique_id: sensor_lowest_ecowitt_device_battery + name: Lowest Ecowitt Battery + type: min + entity_ids: + - sensor.fineoffset_wh51_0d1e11_battery + - sensor.fineoffset_wh51_00f935_battery + - sensor.fineoffset_wh51_0ce593_battery + diff --git a/components/packages/plants.yaml b/components/packages/plants.yaml new file mode 100644 index 0000000..83a1b7a --- /dev/null +++ b/components/packages/plants.yaml @@ -0,0 +1,84 @@ +plant: + plant_sensor_cea4: + sensors: + moisture: sensor.plant_sensor_cea4_moisture + temperature: sensor.plant_sensor_cea4_temperature + conductivity: sensor.plant_sensor_cea4_conductivity + brightness: sensor.plant_sensor_cea4_illuminance + #battery: sensor.plant_sensor_cea4_battery + min_moisture: 10 + max_moisture: 65 + min_temperature: 30 + min_brightness: 200 + max_brightness: 300000 + min_conductivity: 10 + max_conductivity: 5700 + + plant_sensor_3eae: + sensors: + moisture: sensor.plant_sensor_3eae_moisture + temperature: sensor.plant_sensor_3eae_temperature + conductivity: sensor.plant_sensor_3eae_conductivity + brightness: sensor.plant_sensor_3eae_illuminance + #battery: sensor.plant_sensor_3eae_battery + min_moisture: 10 + max_moisture: 65 + min_temperature: 30 + min_brightness: 200 + max_brightness: 300000 + min_conductivity: 10 + max_conductivity: 5700 + + plant_sensor_3eb0: + sensors: + moisture: sensor.plant_sensor_3eb0_moisture + temperature: sensor.plant_sensor_3eb0_temperature + conductivity: sensor.plant_sensor_3eb0_conductivity + brightness: sensor.plant_sensor_3eb0_illuminance + #battery: sensor.plant_sensor_3eb0_battery + min_moisture: 10 + max_moisture: 65 + min_temperature: 30 + min_brightness: 200 + max_brightness: 300000 + min_conductivity: 10 + max_conductivity: 5700 + + fineoffset_wh51_00f935: + sensors: + moisture: sensor.fineoffset_wh51_00f935_moisture + temperature: sensor.outdoors_mean_temperature + battery: sensor.fineoffset_wh51_00f935_battery + brightness: sensor.outdoors_mean_illuminance + min_moisture: 15 + max_moisture: 80 + min_brightness: 200 + max_brightness: 300000 + min_temperature: -30 + max_temperature: 120 + + fineoffset_wh51_0ce593: + sensors: + moisture: sensor.fineoffset_wh51_0ce593_moisture + temperature: sensor.outdoors_mean_temperature + battery: sensor.fineoffset_wh51_0ce593_battery + brightness: sensor.outdoors_mean_illuminance + min_moisture: 15 + max_moisture: 80 + min_brightness: 200 + max_brightness: 300000 + min_temperature: -30 + max_temperature: 120 + + fineoffset_wh51_0d1e11: + sensors: + moisture: sensor.fineoffset_wh51_0d1e11_moisture + temperature: sensor.outdoors_mean_temperature + battery: sensor.fineoffset_wh51_0d1e11_battery + brightness: sensor.outdoors_mean_illuminance + min_moisture: 15 + max_moisture: 80 + min_brightness: 200 + max_brightness: 300000 + min_temperature: -30 + max_temperature: 120 diff --git a/components/packages/redirected.yaml b/components/packages/redirected.yaml new file mode 100644 index 0000000..6790f44 --- /dev/null +++ b/components/packages/redirected.yaml @@ -0,0 +1,14 @@ +cover: !include_dir_list ../covers +group: !include ../../groups.yaml +switch: !include_dir_list ../switches +remote: !include_dir_list ../remotes +rest_command: !include_dir_merge_named ../rest_commands +scene: !include ../../scenes.yaml +#scene old: !include_dir_list ../../scenes +script: !include ../../scripts.yaml +#script old: !include_dir_named ../../scripts +script old: !include_dir_named ../../scripts +shell_command: !include_dir_merge_named ../shell_commands +tts: !include_dir_list ../tts +device_tracker: !include_dir_list ../device_trackers +alert: !include_dir_named ../alerts diff --git a/components/packages/rtl_433_devices/daisy_soil_moisture.yaml b/components/packages/rtl_433_devices/daisy_soil_moisture.yaml new file mode 100644 index 0000000..aa5ba4d --- /dev/null +++ b/components/packages/rtl_433_devices/daisy_soil_moisture.yaml @@ -0,0 +1,44 @@ +# White Ziptie +mqtt: + sensor: + - name: "Timestamp" + device_class: timestamp + icon: mdi:clock-in + state_topic: "rtl_433/9b13b3f4-rtl433/devices/Fineoffset-WH51/00f935/time" + force_update: true + entity_category: diagnostic + unique_id: Fineoffset-WH51-00f935-UTC + device: + identifiers: Fineoffset-WH51-00f935 + name: Fineoffset-WH51-00f935 + model: Fineoffset-WH51 + manufacturer: rtl_433 + + - name: "Battery" + device_class: battery + unit_of_measurement: "%" + value_template: "{{ (float(value) * 99 + 1) | round(0) }}" + state_class: measurement + entity_category: diagnostic + state_topic: "rtl_433/9b13b3f4-rtl433/devices/Fineoffset-WH51/00f935/battery_ok" + force_update: true + unique_id: Fineoffset-WH51-00f935-B + device: + identifiers: Fineoffset-WH51-00f935 + name: Fineoffset-WH51-00f935 + model: Fineoffset-WH51 + manufacturer: rtl_433 + + - name: "Moisture" + device_class: moisture + unit_of_measurement: "%" + value_template: "{{ value|float }}" + state_class: measurement + state_topic: "rtl_433/9b13b3f4-rtl433/devices/Fineoffset-WH51/00f935/moisture" + force_update: true + unique_id: Fineoffset-WH51-00f935-H + device: + identifiers: Fineoffset-WH51-00f935 + name: Fineoffset-WH51-00f935 + model: Fineoffset-WH51 + manufacturer: rtl_433 diff --git a/components/packages/rtl_433_devices/deck_thermostat.yaml b/components/packages/rtl_433_devices/deck_thermostat.yaml new file mode 100644 index 0000000..3d5e1cf --- /dev/null +++ b/components/packages/rtl_433_devices/deck_thermostat.yaml @@ -0,0 +1,57 @@ +mqtt: + sensor: + - name: "Timestamp" + device_class: timestamp + icon: mdi:clock-in + state_topic: "rtl_433/9b13b3f4-rtl433/devices/Nexus-TH/1/69/time" + force_update: true + entity_category: diagnostic + unique_id: Nexus-TH-1-69-UTC + device: + identifiers: Nexus-TH-1-69 + name: Nexus-TH-1-69 + model: Nexus-TH + manufacturer: rtl_433 + + - name: "Battery" + device_class: battery + unit_of_measurement: "%" + value_template: "{{ (float(value) * 99 + 1) | round(0) }}" + state_class: measurement + entity_category: diagnostic + state_topic: "rtl_433/9b13b3f4-rtl433/devices/Nexus-TH/1/69/battery_ok" + force_update: true + unique_id: Nexus-TH-1-69-B + device: + identifiers: Nexus-TH-1-69 + name: Nexus-TH-1-69 + model: Nexus-TH + manufacturer: rtl_433 + + - name: "Temperature" + device_class: temperature + unit_of_measurement: "°C" + value_template: "{{ value|float }}" + state_class: measurement + state_topic: "rtl_433/9b13b3f4-rtl433/devices/Nexus-TH/1/69/temperature_C" + force_update: true + unique_id: Nexus-TH-1-69-T + device: + identifiers: Nexus-TH-1-69 + name: Nexus-TH-1-69 + model: Nexus-TH + manufacturer: rtl_433 + + - name: "Humidity" + device_class: humidity + unit_of_measurement: "%" + value_template: "{{ value|float }}" + state_class: measurement + state_topic: "rtl_433/9b13b3f4-rtl433/devices/Nexus-TH/1/69/humidity" + force_update: true + unique_id: Nexus-TH-1-69-H + device: + identifiers: Nexus-TH-1-69 + name: Nexus-TH-1-69 + model: Nexus-TH + manufacturer: rtl_433 \ No newline at end of file diff --git a/components/packages/rtl_433_devices/hasta_moisture.yaml b/components/packages/rtl_433_devices/hasta_moisture.yaml new file mode 100644 index 0000000..5aa829a --- /dev/null +++ b/components/packages/rtl_433_devices/hasta_moisture.yaml @@ -0,0 +1,44 @@ +# Green Ziptie +mqtt: + sensor: + - name: "Timestamp" + device_class: timestamp + icon: mdi:clock-in + state_topic: "rtl_433/9b13b3f4-rtl433/devices/Fineoffset-WH51/0ce593/time" + force_update: true + entity_category: diagnostic + unique_id: Fineoffset-WH51-0ce593-UTC + device: + identifiers: Fineoffset-WH51-0ce593 + name: Fineoffset-WH51-0ce593 + model: Fineoffset-WH51 + manufacturer: rtl_433 + + - name: "Battery" + device_class: battery + unit_of_measurement: "%" + value_template: "{{ (float(value) * 99 + 1) | round(0) }}" + state_class: measurement + entity_category: diagnostic + state_topic: "rtl_433/9b13b3f4-rtl433/devices/Fineoffset-WH51/0ce593/battery_ok" + force_update: true + unique_id: Fineoffset-WH51-0ce593-B + device: + identifiers: Fineoffset-WH51-0ce593 + name: Fineoffset-WH51-0ce593 + model: Fineoffset-WH51 + manufacturer: rtl_433 + + - name: "Moisture" + device_class: moisture + unit_of_measurement: "%" + value_template: "{{ value|float }}" + state_class: measurement + state_topic: "rtl_433/9b13b3f4-rtl433/devices/Fineoffset-WH51/0ce593/moisture" + force_update: true + unique_id: Fineoffset-WH51-0ce593-H + device: + identifiers: Fineoffset-WH51-0ce593 + name: Fineoffset-WH51-0ce593 + model: Fineoffset-WH51 + manufacturer: rtl_433 diff --git a/components/packages/rtl_433_devices/kitchen_freezer_thermostat.yaml b/components/packages/rtl_433_devices/kitchen_freezer_thermostat.yaml new file mode 100644 index 0000000..f741c22 --- /dev/null +++ b/components/packages/rtl_433_devices/kitchen_freezer_thermostat.yaml @@ -0,0 +1,43 @@ +mqtt: + sensor: + - name: "Timestamp" + device_class: timestamp + icon: mdi:clock-in + state_topic: "rtl_433/9b13b3f4-rtl433/devices/Acurite-986/2F/42383/time" + force_update: true + entity_category: diagnostic + unique_id: Acurite-986-2F-42383-UTC + device: + identifiers: Acurite-986-2F-42383 + name: Acurite-986-2F-42383 + model: Acurite-986 + manufacturer: rtl_433 + + - name: "Battery" + device_class: battery + unit_of_measurement: "%" + value_template: "{{ (float(value) * 99 + 1) | round(0) }}" + state_class: measurement + entity_category: diagnostic + state_topic: "rtl_433/9b13b3f4-rtl433/devices/Acurite-986/2F/42383/battery_ok" + force_update: true + unique_id: Acurite-986-2F-42383-B + device: + identifiers: Acurite-986-2F-42383 + name: Acurite-986-2F-42383 + model: Acurite-986 + manufacturer: rtl_433 + + - name: "Temperature" + device_class: temperature + unit_of_measurement: "°C" + value_template: "{{ value|float }}" + state_class: measurement + state_topic: "rtl_433/9b13b3f4-rtl433/devices/Acurite-986/2F/42383/temperature_C" + force_update: true + unique_id: Acurite-986-2F-42383-T + device: + identifiers: Acurite-986-2F-42383 + name: Acurite-986-2F-42383 + model: Acurite-986 + manufacturer: rtl_433 \ No newline at end of file diff --git a/components/packages/rtl_433_devices/kitchen_fridge_thermostat.yaml b/components/packages/rtl_433_devices/kitchen_fridge_thermostat.yaml new file mode 100644 index 0000000..7dbebb7 --- /dev/null +++ b/components/packages/rtl_433_devices/kitchen_fridge_thermostat.yaml @@ -0,0 +1,43 @@ +mqtt: + sensor: + - name: "Timestamp" + device_class: timestamp + icon: mdi:clock-in + state_topic: "rtl_433/9b13b3f4-rtl433/devices/Acurite-986/1R/48226/time" + force_update: true + entity_category: diagnostic + unique_id: Acurite-986-1R-48226-UTC + device: + identifiers: Acurite-986-1R-48226 + name: Acurite-986-1R-48226 + model: Acurite-986 + manufacturer: rtl_433 + + - name: "Battery" + device_class: battery + unit_of_measurement: "%" + value_template: "{{ (float(value) * 99 + 1) | round(0) }}" + state_class: measurement + entity_category: diagnostic + state_topic: "rtl_433/9b13b3f4-rtl433/devices/Acurite-986/1R/48226/battery_ok" + force_update: true + unique_id: Acurite-986-1R-48226-B + device: + identifiers: Acurite-986-1R-48226 + name: Acurite-986-1R-48226 + model: Acurite-986 + manufacturer: rtl_433 + + - name: "Temperature" + device_class: temperature + unit_of_measurement: "°C" + value_template: "{{ value|float }}" + state_class: measurement + state_topic: "rtl_433/9b13b3f4-rtl433/devices/Acurite-986/1R/48226/temperature_C" + force_update: true + unique_id: Acurite-986-1R-48226-H + device: + identifiers: Acurite-986-1R-48226 + name: Acurite-986-1R-48226 + model: Acurite-986 + manufacturer: rtl_433 \ No newline at end of file diff --git a/components/packages/rtl_433_devices/outdoor_rain_gauge_sensor.yaml b/components/packages/rtl_433_devices/outdoor_rain_gauge_sensor.yaml new file mode 100644 index 0000000..dfc83a0 --- /dev/null +++ b/components/packages/rtl_433_devices/outdoor_rain_gauge_sensor.yaml @@ -0,0 +1,73 @@ +mqtt: + sensor: + - name: "Timestamp" + device_class: timestamp + icon: mdi:clock-in + state_topic: "rtl_433/9b13b3f4-rtl433/devices/EcoWitt-WH40/21917/time" + force_update: true + entity_category: diagnostic + unique_id: EcoWitt-WH40-21917-UTC + device: + identifiers: EcoWitt-WH40-21917 + name: EcoWitt-WH40-21917 + model: EcoWitt-WH40 + manufacturer: rtl_433 + + # - name: "Data" + # value_template: "{{ value }}" + # state_class: measurement + # entity_category: diagnostic + # state_topic: "rtl_433/9b13b3f4-rtl433/devices/EcoWitt-WH40/21917/data" + # force_update: true + # unique_id: EcoWitt-WH40-21917-D + # device: + # identifiers: EcoWitt-WH40-21917 + # name: EcoWitt-WH40-21917 + # model: EcoWitt-WH40 + # manufacturer: rtl_433 + + - name: "Precipitation" + device_class: precipitation + unit_of_measurement: "mm" + value_template: "{{ value|float }}" + state_class: measurement + state_topic: "rtl_433/9b13b3f4-rtl433/devices/EcoWitt-WH40/21917/rain_mm" + force_update: true + unique_id: EcoWitt-WH40-21917-H + device: + identifiers: EcoWitt-WH40-21917 + name: EcoWitt-WH40-21917 + model: EcoWitt-WH40 + manufacturer: rtl_433 + + - name: "Battery" + device_class: battery + unit_of_measurement: "%" + value_template: "{{ (float(value) / 1.5) * 100 | round(0) }}" + state_class: measurement + entity_category: diagnostic + state_topic: "rtl_433/9b13b3f4-rtl433/devices/EcoWitt-WH40/21917/battery_V" + force_update: true + unique_id: EcoWitt-WH40-21917-V + device: + identifiers: EcoWitt-WH40-21917 + name: EcoWitt-WH40-21917 + model: EcoWitt-WH40 + manufacturer: rtl_433 + + binary_sensor: + + - name: "Battery OK" + value_template: "{{ value|int }}" + device_class: problem + entity_category: diagnostic + state_topic: "rtl_433/9b13b3f4-rtl433/devices/EcoWitt-WH40/21917/battery_ok" + payload_on: "1" + payload_off: "0" + force_update: true + unique_id: EcoWitt-WH40-21917-Battery-OK + device: + identifiers: EcoWitt-WH40-21917 + name: EcoWitt-WH40-21917 + model: EcoWitt-WH40 + manufacturer: rtl_433 \ No newline at end of file diff --git a/components/packages/rtl_433_devices/outdoor_thermostat.yaml b/components/packages/rtl_433_devices/outdoor_thermostat.yaml new file mode 100644 index 0000000..cc770e3 --- /dev/null +++ b/components/packages/rtl_433_devices/outdoor_thermostat.yaml @@ -0,0 +1,57 @@ +mqtt: + sensor: + - name: "Timestamp" + device_class: timestamp + icon: mdi:clock-in + state_topic: "rtl_433/9b13b3f4-rtl433/devices/LaCrosse-TX141THBv2/0/54/time" + force_update: true + entity_category: diagnostic + unique_id: LaCrosse-TX141THBv2-0-54-UTC + device: + identifiers: LaCrosse-TX141THBv2-0-54 + name: LaCrosse-TX141THBv2-0-54 + model: LaCrosse-TX141THBv2 + manufacturer: rtl_433 + + - name: "Battery" + device_class: battery + unit_of_measurement: "%" + value_template: "{{ (float(value) * 99 + 1) | round(0) }}" + state_class: measurement + entity_category: diagnostic + state_topic: "rtl_433/9b13b3f4-rtl433/devices/LaCrosse-TX141THBv2/0/54/battery_ok" + force_update: true + unique_id: LaCrosse-TX141THBv2-0-54-B + device: + identifiers: LaCrosse-TX141THBv2-0-54 + name: LaCrosse-TX141THBv2-0-54 + model: LaCrosse-TX141THBv2 + manufacturer: rtl_433 + + - name: "Temperature" + device_class: temperature + unit_of_measurement: "°C" + value_template: "{{ value|float }}" + state_class: measurement + state_topic: "rtl_433/9b13b3f4-rtl433/devices/LaCrosse-TX141THBv2/0/54/temperature_C" + force_update: true + unique_id: LaCrosse-TX141THBv2-0-54-T + device: + identifiers: LaCrosse-TX141THBv2-0-54 + name: LaCrosse-TX141THBv2-0-54 + model: LaCrosse-TX141THBv2 + manufacturer: rtl_433 + + - name: "Humidity" + device_class: humidity + unit_of_measurement: "%" + value_template: "{{ value|float }}" + state_class: measurement + state_topic: "rtl_433/9b13b3f4-rtl433/devices/LaCrosse-TX141THBv2/0/54/humidity" + force_update: true + unique_id: LaCrosse-TX141THBv2-0-54-H + device: + identifiers: LaCrosse-TX141THBv2-0-54 + name: LaCrosse-TX141THBv2-0-54 + model: LaCrosse-TX141THBv2 + manufacturer: rtl_433 \ No newline at end of file diff --git a/components/packages/rtl_433_devices/sunflower_box_moisture.yaml b/components/packages/rtl_433_devices/sunflower_box_moisture.yaml new file mode 100644 index 0000000..d5166c6 --- /dev/null +++ b/components/packages/rtl_433_devices/sunflower_box_moisture.yaml @@ -0,0 +1,44 @@ +# Yellow Ziptie +mqtt: + sensor: + - name: "Timestamp" + device_class: timestamp + icon: mdi:clock-in + state_topic: "rtl_433/9b13b3f4-rtl433/devices/Fineoffset-WH51/0d1e11/time" + force_update: true + entity_category: diagnostic + unique_id: Fineoffset-WH51-0d1e11-UTC + device: + identifiers: Fineoffset-WH51-0d1e11 + name: Fineoffset-WH51-0d1e11 + model: Fineoffset-WH51 + manufacturer: rtl_433 + + - name: "Battery" + device_class: battery + unit_of_measurement: "%" + value_template: "{{ (float(value) * 99 + 1) | round(0) }}" + state_class: measurement + entity_category: diagnostic + state_topic: "rtl_433/9b13b3f4-rtl433/devices/Fineoffset-WH51/0d1e11/battery_ok" + force_update: true + unique_id: Fineoffset-WH51-0d1e11-B + device: + identifiers: Fineoffset-WH51-0d1e11 + name: Fineoffset-WH51-0d1e11 + model: Fineoffset-WH51 + manufacturer: rtl_433 + + - name: "Moisture" + device_class: moisture + unit_of_measurement: "%" + value_template: "{{ value|float }}" + state_class: measurement + state_topic: "rtl_433/9b13b3f4-rtl433/devices/Fineoffset-WH51/0d1e11/moisture" + force_update: true + unique_id: Fineoffset-WH51-0d1e11-H + device: + identifiers: Fineoffset-WH51-0d1e11 + name: Fineoffset-WH51-0d1e11 + model: Fineoffset-WH51 + manufacturer: rtl_433 diff --git a/components/packages/sprinklers.yaml b/components/packages/sprinklers.yaml new file mode 100644 index 0000000..40db39e --- /dev/null +++ b/components/packages/sprinklers.yaml @@ -0,0 +1,188 @@ +switch: + - platform: template + switches: + front_yard_station: + friendly_name: Front Yard Station + unique_id: template_switch.front_yard_station + value_template: "{{ is_state('binary_sensor.front_yard_station_running', 'on') }}" + icon_template: mdi:sprinkler + turn_on: + service: opensprinkler.run + data_template: + entity_id: binary_sensor.front_yard_station_running + # Run seconds uses the input_number below. + run_seconds: "{{ ((states('input_number.front_yard_station_minutes') | float) * 60) | int }}" + turn_off: + service: opensprinkler.stop + data: + entity_id: binary_sensor.front_yard_station_running + + east_side_station: + friendly_name: East Side Station + unique_id: template_switch.east_side_station + value_template: "{{ is_state('binary_sensor.east_side_station_running', 'on') }}" + icon_template: mdi:sprinkler + turn_on: + service: opensprinkler.run + data_template: + entity_id: binary_sensor.east_side_station_running + # Run seconds uses the input_number below. + run_seconds: "{{ ((states('input_number.east_side_station_minutes') | float) * 60) | int }}" + turn_off: + service: opensprinkler.stop + data: + entity_id: binary_sensor.east_side_station_running + + back_yard_station: + friendly_name: Back Yard Station + unique_id: template_switch.back_yard_station + value_template: "{{ is_state('binary_sensor.back_yard_station_running', 'on') }}" + icon_template: mdi:sprinkler + turn_on: + service: opensprinkler.run + data_template: + entity_id: binary_sensor.back_yard_station_running + # Run seconds uses the input_number below. + run_seconds: "{{ ((states('input_number.back_yard_station_minutes') | float) * 60) | int }}" + turn_off: + service: opensprinkler.stop + data: + entity_id: binary_sensor.back_yard_station_running + + west_side_station: + friendly_name: West Side Station + unique_id: template_switch.west_side_station + value_template: "{{ is_state('binary_sensor.west_side_station_running', 'on') }}" + icon_template: mdi:sprinkler + turn_on: + service: opensprinkler.run + data_template: + entity_id: binary_sensor.west_side_station_running + # Run seconds uses the input_number below. + run_seconds: "{{ ((states('input_number.west_side_station_minutes') | float) * 60) | int }}" + turn_off: + service: opensprinkler.stop + data: + entity_id: binary_sensor.west_side_station_running + +input_number: + front_yard_station_minutes: + name: Front Yard Station Minutes + icon: mdi:sprinkler-variant + min: 0 + max: 60 + step: 1 + + east_side_station_minutes: + name: East Side Station Minutes + icon: mdi:sprinkler-variant + min: 0 + max: 60 + step: 1 + + back_yard_station_minutes: + name: Back Yard Station Minutes + icon: mdi:sprinkler-variant + min: 0 + max: 60 + step: 1 + + west_side_station_minutes: + name: West Side Station Minutes + icon: mdi:sprinkler-variant + min: 0 + max: 60 + step: 1 + +input_button: +# PTZ Controls + 5_minute_test: + name: Run 5 Minute Test + icon: mdi:sprinkler + + front_yard_fun: + name: Run Front Yard Fun + icon: mdi:sprinkler + + back_yard_fun: + name: Run Back Yard Fun + icon: mdi:sprinkler + + evening_program: + name: Run Evening Program + icon: mdi:sprinkler + + morning_program: + name: Run Morning Program + icon: mdi:sprinkler + + full_run_program: + name: Run Full run Program + icon: mdi:sprinkler + + automatic_run_program: + name: Run Automatic Run Program + icon: mdi:sprinkler + + stop_all_sprinklers: + name: Stop All Sprinklers + icon: mdi:sprinkler + + +automation: + - id: automation_opensprinkler_program_buttons + alias: OpenSprinkler Program Buttons + mode: queued + trigger: + - id: 5_minute_test_program_enabled + platform: state + entity_id: input_button.5_minute_test + + - id: front_yard_fun_program_enabled + platform: state + entity_id: input_button.front_yard_fun + + - id: back_yard_fun_program_enabled + platform: state + entity_id: input_button.back_yard_fun + + - id: evening_program_enabled + platform: state + entity_id: input_button.evening_program + + - id: morning_program_enabled + platform: state + entity_id: input_button.morning_program + + - id: full_run_program_enabled + platform: state + entity_id: input_button.full_run + + - id: automatic_run_program_enabled + platform: state + entity_id: input_button.automatic_run_program + + condition: [] + action: + - service: opensprinkler.run + data: + entity_id: "switch.{{ trigger.id }}" + + - delay: '00:00:01' + + + - id: automation_opensprinkler_stop_all_sprinklers + alias: OpenSprinkler Stop All Sprinklers + mode: queued + trigger: + - id: opensprinkler_enabled + platform: state + entity_id: input_button.stop_all_sprinklers + + condition: [] + action: + - service: opensprinkler.stop + data: + entity_id: "switch.{{ trigger.id }}" + + - delay: '00:00:01' \ No newline at end of file diff --git a/components/packages/stream.yaml b/components/packages/stream.yaml new file mode 100644 index 0000000..eb19cbe --- /dev/null +++ b/components/packages/stream.yaml @@ -0,0 +1,30 @@ +# Disabling the Stream component to see if that makes or breaks anything + +# Re-enabling this, to see if it causes a large delay + +# Disabling because it still fucking sucks +#stream: + +# Re-enabling to test with BlueIris +#stream: + +# Re-enabling to test with Frigate RTMP +# Still don't like it, and there isn't really any benefit +#stream: + +# Re-enabling it, yet again because the Synology and Amcrest components work really well with WebRTC +# Without this enabled, the videos are live but w/o audio and they don't work as media sources +# Enabling this to see if I can then leverage HA to stream them to devices +# Still doesn't do what I want it to +#stream: + +#More Frigate testing +#stream: + +# What do I want to end up with? +stream: + # ll_hls: true + # # # part_duration: 0.25 + # # # segment_duration: 3 + # part_duration: 0.76 + # segment_duration: 6 \ No newline at end of file diff --git a/components/packages/sun_offsets.yaml b/components/packages/sun_offsets.yaml new file mode 100644 index 0000000..8e44c43 --- /dev/null +++ b/components/packages/sun_offsets.yaml @@ -0,0 +1,34 @@ +template: + - trigger: + - platform: time + at: '00:00:00' + - platform: event + event_type: event_template_reloaded + - platform: homeassistant + event: start + sensor: + - name: 'Two Hours Before Sunrise' + unique_id: 'sensor_two_hours_before_sunrise' + state: "{{ state_attr('sun.sun', 'next_rising') | as_datetime - timedelta(hours = 2) }}" + device_class: timestamp + - name: Sunrise + unique_id: sensor_sunrise + state: "{{ state_attr('sun.sun', 'next_rising') }}" + device_class: timestamp + - name: 'Two Hours After Sunrise' + unique_id: 'sensor_two_hours_after_sunrise' + state: "{{ state_attr('sun.sun', 'next_rising') | as_datetime + timedelta(hours = 2) }}" + device_class: timestamp + + - name: 'Two Hours Before Sunset' + unique_id: 'sensor_two_hours_before_sunset' + state: "{{ state_attr('sun.sun', 'next_setting') | as_datetime - timedelta(hours = 2) }}" + device_class: timestamp + - name: Sunset + unique_id: sensor_sunset + state: "{{ state_attr('sun.sun', 'next_setting') }}" + device_class: timestamp + - name: 'Two Hours After Sunset' + unique_id: 'sensor_two_hours_after_sunset' + state: "{{ state_attr('sun.sun', 'next_setting') | as_datetime + timedelta(hours = 2) }}" + device_class: timestamp \ No newline at end of file diff --git a/components/packages/temperature_management.yaml b/components/packages/temperature_management.yaml new file mode 100644 index 0000000..66ac588 --- /dev/null +++ b/components/packages/temperature_management.yaml @@ -0,0 +1,257 @@ +input_number: + warmer_outside_difference_trigger: + name: Warmer Outside Difference Trigger + icon: mdi:sun-snowflake-variant + min: 0 + max: 20 + step: 1 + + cooler_outside_difference_trigger: + name: Cooler Outside Difference Trigger + icon: mdi:sun-snowflake-variant + min: 0 + max: 20 + step: 1 + +template: + - binary_sensor: + # This is ON when it is warmer outside than it is inside, as defined by input_number.warmer_outside_difference_trigger + - name: Warmer Outside + unique_id: templatebinarysensor.warmer_outside + icon: mdi:sun-snowflake-variant + device_class: heat + delay_on: + seconds: 15 + delay_off: + seconds: 15 + availability: "{{ (states('sensor.upstairs_mean_temperature') not in ['unkown', 'unavailable']) and (states('sensor.outdoors_mean_temperature') not in ['unkown', 'unavailable']) }}" + state: "{{ iif(states('sensor.outdoors_mean_temperature') | float(default=0) - states('input_number.warmer_outside_difference_trigger') | float(default=0) > states('sensor.upstairs_mean_temperature') | float(default=0) ) }}" + attributes: + indoors: "{{ states('sensor.upstairs_mean_temperature') | float(default=0) }}" + outdoors: "{{ states('sensor.outdoors_mean_temperature') | float(default=0) }}" + trigger: "{{ states('input_number.warmer_outside_difference_trigger') | float(default=0) }}" + + # This is ON when it is cooler outside than it is inside, as defined by input_number.cooler_outside_difference_trigger + - name: Cooler Outside + unique_id: templatebinarysensor.cooler_outside + icon: mdi:sun-snowflake-variant + device_class: cold + delay_on: + seconds: 15 + delay_off: + seconds: 15 + availability: "{{ (states('sensor.upstairs_mean_temperature') not in ['unkown', 'unavailable']) and (states('sensor.outdoors_mean_temperature') not in ['unkown', 'unavailable']) }}" + state: "{{ iif(states('sensor.outdoors_mean_temperature') | float(default=0) + states('input_number.cooler_outside_difference_trigger') | float(default=0) < states('sensor.upstairs_mean_temperature') | float(default=0) ) }}" + attributes: + indoors: "{{ states('sensor.upstairs_mean_temperature') | float(default=0)}}" + outdoors: "{{ states('sensor.outdoors_mean_temperature') | float(default=0)}}" + trigger: "{{ states('input_number.cooler_outside_difference_trigger') | float(default=0) }}" + + # This is ON when the temperature outside is hotter than the temp_high configured as part of the climate platform + - name: Too Hot Outside + unique_id: templatebinarysensor.too_hot_outside + icon: mdi:weather-sunny + device_class: heat + delay_on: + seconds: 15 + delay_off: + seconds: 15 + availability: "{{ (states('climate.thermostat') not in ['unkown', 'unavailable']) and (states('sensor.outdoors_mean_temperature') not in ['unkown', 'unavailable']) }}" + state: "{{states('sensor.outdoors_mean_temperature') | float(default=0) > states('sensor.hvac_target_temp_high') | float(default=0) - (states('input_number.warmer_outside_difference_trigger') | float(default=0) / 2) }}" + attributes: + outdoor_temp: "{{ states('sensor.outdoors_mean_temperature') | float(default=0)}}" + target_temp_high: "{{ state_attr('climate.thermostat','target_temp_high') | float(default=0)}}" + + # This is ON when the thermostat is hotter than the temp_high configured as part of the climate platform + - name: Too Hot Inside + unique_id: templatebinarysensor.too_hot_inside + icon: mdi:weather-sunny + device_class: heat + availability: "{{ (states('sensor.hvac_target_temp_high') not in ['unkown', 'unavailable']) and (states('sensor.upstairs_mean_temperature') not in ['unkown', 'unavailable']) }}" + state: "{{states('sensor.upstairs_mean_temperature') | float(default=0) > states('sensor.hvac_target_temp_high') | float(default=(state_attr('climate.thermostat','temperature') |float(default=0))) - 1.0 }}" + attributes: + upstairs_mean_temp: "{{ states('sensor.upstairs_mean_temperature') | float(default=0)}}" + target_temp_high: "{{ states('sensor.hvac_target_temp_high') | float(default=0)}}" + target_temperature: "{{ state_attr('climate.thermostat','temperature') |float(default=0) }}" + + # This is ON when the temperature outside is colder than the temp_low configured as part of the climate platform + - name: Too Cold Outside + unique_id: templatebinarysensor.too_cold_outside + icon: mdi:snowflake + device_class: cold + delay_on: + seconds: 15 + delay_off: + seconds: 15 + availability: "{{ (states('climate.thermostat') not in ['unkown', 'unavailable']) and (states('sensor.outdoors_mean_temperature') not in ['unkown', 'unavailable']) }}" + state: "{{states('sensor.outdoors_mean_temperature') | float(default=0) < states('sensor.hvac_target_temp_low') | float(default=0) - (states('input_number.cooler_outside_difference_trigger') | float(default=0) ) }}" + attributes: + outdoor_temp: "{{ states('sensor.outdoors_mean_temperature') | float(default=0)}}" + target_temp_low: "{{ state_attr('climate.thermostat','target_temp_low') | float(default=0)}}" + + # This is ON when the thermostat is hotter than the temp_high configured as part of the climate platform + - name: Too Cold Inside + unique_id: templatebinarysensor.too_cold_inside + icon: mdi:snowflake + device_class: cold + availability: "{{ (states('sensor.hvac_target_temp_low') not in ['unkown', 'unavailable']) and (states('sensor.upstairs_mean_temperature') not in ['unkown', 'unavailable']) }}" + state: "{{states('sensor.upstairs_mean_temperature') | float(default=0) < states('sensor.hvac_target_temp_low') | float(default=(state_attr('climate.thermostat','temperature') |float(default=0))) + 1.0 }}" + attributes: + upstairs_mean_temp: "{{ states('sensor.upstairs_mean_temperature') | float(default=0)}}" + target_temp_low: "{{ states('sensor.hvac_target_temp_low') | float(default=0)}}" + target_temperature: "{{ state_attr('climate.thermostat','temperature') |float(default=0) }}" + + # This is ON when either the garage door or the exterior garage door is open while the inner garage door is open + - name: Inner Garage Door Open to Outside + unique_id: templatebinarysensor.inner_garage_door_open_to_outside + device_class: door + availability: "{{ (states('binary_sensor.inner_garage_door') not in ['unkown', 'unavailable']) and (states('binary_sensor.garage_door') not in ['unkown', 'unavailable']) and (states('binary_sensor.outer_garage_door') not in ['unkown', 'unavailable']) }}" + state: >- + {% if is_state('binary_sensor.inner_garage_door', 'on') %} + {% if is_state('binary_sensor.garage_door', 'on') or is_state('binary_sensor.outer_garage_door', 'on') %} + {{'true'}} + {% else %} + {{'false'}} + {% endif %} + {% else %} + {{'false'}} + {% endif %} + + # This is ON when an exterior door or window has been left open for more than 10 minutes + - name: Something Open + unique_id: templatebinarysensor.something_open + icon: mdi:door-open + device_class: opening + state: "{{ iif(is_state('binary_sensor.patio_door_contact', 'on') or is_state('group.my_exterior_windows', 'on') or is_state('binary_sensor.front_door_contact', 'on') or is_state('binary_sensor.inner_garage_door_open_to_outside', 'on')) }}" + + - name: Something Open Too Warm or Cold + unique_id: templatebinarysensor.something_open_too_warm_or_cold + device_class: problem + delay_on: + minutes: 2 + state: >- + {% if is_state('binary_sensor.something_open','on') %} + {% if is_state('binary_sensor.too_cold_inside','on') and is_state('binary_sensor.cooler_outside', 'on') and is_state('binary_sensor.getting_warmer_outside', 'off') %} + {{'true'}} + {% elif is_state('binary_sensor.too_hot_inside','on') and is_state('binary_sensor.warmer_outside', 'on') and is_state('binary_sensor.getting_cooler_outside', 'off') %} + {{'true'}} + {% else %} + {{'false'}} + {% endif %} + {% else %} + {{'false'}} + {% endif %} + attributes: + outdoor_temp: "{{ states('sensor.outdoors_mean_temperature') | float(default=0)}}" + upstairs_mean_temp: "{{ states('sensor.upstairs_mean_temperature') | float(default=0)}}" + target_temp_high: "{{ state_attr('climate.thermostat','target_temp_high') | float(default=0)}}" + target_temp_low: "{{ state_attr('climate.thermostat','target_temp_low') | float(default=0)}}" + getting_warmer: "{{ states('binary_sensor.getting_warmer_outside') }}" + too_hot_inside: "{{ states('binary_sensor.too_hot_inside') }}" + warmer_outside: "{{ states('binary_sensor.warmer_outside') }}" + too_hot_outside: "{{ states('binary_sensor.too_hot_outside') }}" + getting_cooler: "{{ states('binary_sensor.getting_cooler_outside') }}" + too_cold_inside: "{{ states('binary_sensor.too_cold_inside') }}" + cooler_outside: "{{ states('binary_sensor.cooler_outside') }}" + too_cold_outside: "{{ states('binary_sensor.too_cold_outside') }}" + + - name: Need to Open Something Too Warm or Cold + unique_id: templatebinarysensor.need_to_open_something_too_warm_or_cold + device_class: problem + # delay_on: + # minutes: 5 + state: >- + {% if is_state('binary_sensor.something_open','off') %} + {% if is_state('binary_sensor.too_cold_inside','off') and is_state('binary_sensor.too_hot_inside','off') and is_state('binary_sensor.too_cold_outside','off') and is_state('binary_sensor.too_hot_outside','off') %} + {{'true'}} + {% else %} + {{'false'}} + {% endif %} + {% else %} + {{'false'}} + {% endif %} + attributes: + outdoor_temp: "{{ states('sensor.outdoors_mean_temperature') | float(default=0)}}" + upstairs_mean_temp: "{{ states('sensor.upstairs_mean_temperature') | float(default=0)}}" + target_temp_high: "{{ state_attr('climate.thermostat','target_temp_high') | float(default=0)}}" + target_temp_low: "{{ state_attr('climate.thermostat','target_temp_low') | float(default=0)}}" + getting_warmer: "{{ states('binary_sensor.getting_warmer_outside') }}" + too_hot_inside: "{{ states('binary_sensor.too_hot_inside') }}" + warmer_outside: "{{ states('binary_sensor.warmer_outside') }}" + too_hot_outside: "{{ states('binary_sensor.too_hot_outside') }}" + getting_cooler: "{{ states('binary_sensor.getting_cooler_outside') }}" + too_cold_inside: "{{ states('binary_sensor.too_cold_inside') }}" + cooler_outside: "{{ states('binary_sensor.cooler_outside') }}" + too_cold_outside: "{{ states('binary_sensor.too_cold_outside') }}" + + + - sensor: + - name: Outdoor Temperature Gradient + unique_id: templatesensor.outdoor_temperature_gradient + state: "{{ (state_attr('binary_sensor.getting_warmer_outside','gradient') | float(default=0) * 10000) | round(2)}}" + availability: "{{ (states('binary_sensor.getting_warmer_outside') not in ['unkown', 'unavailable']) }}" + icon: mdi:sun-thermometer + state_class: measurement + unit_of_measurement: p + attributes: + outdoor_temp: "{{ states('sensor.outdoors_mean_temperature') | float(default=0)}}" + target_temp_high: "{{ state_attr('climate.thermostat','target_temp_high') | float(default=0)}}" + target_temp_low: "{{ state_attr('climate.thermostat','target_temp_low') | float(default=0)}}" + getting_warmer: "{{ states('binary_sensor.getting_warmer_outside') }}" + warmer_outside: "{{ states('binary_sensor.warmer_outside') }}" + too_hot_outside: "{{ states('binary_sensor.too_hot_outside') }}" + getting_cooler: "{{ states('binary_sensor.getting_cooler_outside') }}" + cooler_outside: "{{ states('binary_sensor.cooler_outside') }}" + too_cold_outside: "{{ states('binary_sensor.too_cold_outside') }}" + + - name: HVAC Target Temp Low + unique_id: templatesensor_hvac_target_temp_low + state: "{{state_attr('climate.thermostat','target_temp_low')}}" + availability: "{{ (states('climate.thermostat') not in ['unkown', 'unavailable']) }}" + device_class: temperature + unit_of_measurement: "°F" + attributes: + hvac_action: "{{state_attr('climate.thermostat','hvac_action')}}" + preset_mode: "{{state_attr('climate.thermostat','preset_mode')}}" + climate_mode_mode: "{{state_attr('climate.thermostat','climate_mode')}}" + + - name: HVAC Target Temp High + unique_id: templatesensor_hvac_target_temp_high + state: "{{state_attr('climate.thermostat','target_temp_high')}}" + availability: "{{ (states('climate.thermostat') not in ['unkown', 'unavailable']) }}" + device_class: temperature + unit_of_measurement: "°F" + attributes: + hvac_action: "{{state_attr('climate.thermostat','hvac_action')}}" + preset_mode: "{{state_attr('climate.thermostat','preset_mode')}}" + climate_mode_mode: "{{state_attr('climate.thermostat','climate_mode')}}" + + - name: HVAC Target Temperature + unique_id: templatesensor_hvac_target_temperature + state: "{{state_attr('climate.thermostat','temperature')}}" + availability: "{{ (states('climate.thermostat') not in ['unkown', 'unavailable']) }}" + device_class: temperature + unit_of_measurement: "°F" + attributes: + hvac_action: "{{state_attr('climate.thermostat','hvac_action')}}" + preset_mode: "{{state_attr('climate.thermostat','preset_mode')}}" + climate_mode_mode: "{{state_attr('climate.thermostat','climate_mode')}}" + + - name: HVAC Current Temperature + unique_id: templatesensor_hvac_current_temperature + icon: mdi:fan-clock + state: "{{state_attr('climate.thermostat','current_temperature')}}" + availability: "{{ (states('climate.thermostat') not in ['unkown', 'unavailable']) }}" + device_class: temperature + unit_of_measurement: "°F" + attributes: + hvac_action: "{{state_attr('climate.thermostat','hvac_action')}}" + preset_mode: "{{state_attr('climate.thermostat','preset_mode')}}" + climate_mode_mode: "{{state_attr('climate.thermostat','climate_mode')}}" + + - name: HVAC Fan Min On Time + unique_id: templatesensor_hvac_fan_min_on_time + state: "{{state_attr('climate.thermostat','fan_min_on_time')}}" + availability: "{{ (states('climate.thermostat') not in ['unkown', 'unavailable']) }}" + device_class: duration + unit_of_measurement: min diff --git a/components/packages/utility_meter/total.yaml b/components/packages/utility_meter/total.yaml new file mode 100644 index 0000000..54bfeb2 --- /dev/null +++ b/components/packages/utility_meter/total.yaml @@ -0,0 +1,225 @@ +utility_meter: + hourly_energy: + unique_id: utility_meter_hourly_energy + name: Total Hourly Energy + source: sensor.pm_grid_kwh + cycle: hourly + tariffs: + - Non-Summer + - Summer Peak + - Summer Non-Peak + + daily_energy: + unique_id: utility_meter_daily_energy + name: Total Daily Energy + source: sensor.pm_grid_kwh + cycle: daily + tariffs: + - Non-Summer + - Summer Peak + - Summer Non-Peak + + weekly_energy: + unique_id: utility_meter_weekly_energy + name: Total Weekly Energy + source: sensor.pm_grid_kwh + cycle: weekly + tariffs: + - Non-Summer + - Summer Peak + - Summer Non-Peak + + monthly_energy: + unique_id: utility_meter_monthly_energy + name: Total Monthly Energy + source: sensor.pm_grid_kwh + cycle: monthly + offset: + days: 17 + tariffs: + - Non-Summer + - Summer Peak + - Summer Non-Peak + +template: + - sensor: + + - unique_id: templatebinarysensor.hourly_energy_non_summer_cost + name: Hourly Energy Non-Summer Total Cost + device_class: monetary + state_class: total + unit_of_measurement: '$' + icon: mdi:currency-usd + availability: "{{ states('sensor.hourly_energy_non_summer') not in ['unkown', 'unavailable'] and states('sensor.nonsummer_per_kwh') not in ['unkown', 'unavailable'] }}" + state: "{{ states('sensor.hourly_energy_non_summer')|float(default=0) * states('sensor.nonsummer_per_kwh')|float(default=0) }}" + + - unique_id: templatebinarysensor.hourly_energy_summer_peak_cost + name: Hourly Energy Summer Peak Total Cost + device_class: monetary + state_class: total + unit_of_measurement: '$' + icon: mdi:currency-usd + availability: "{{ states('sensor.hourly_energy_summer_peak') not in ['unkown', 'unavailable'] and states('sensor.summerpeak_per_kwh') not in ['unkown', 'unavailable'] }}" + state: "{{ states('sensor.hourly_energy_summer_peak')|float(default=0) * states('sensor.summerpeak_per_kwh')|float(default=0) }}" + + - unique_id: templatebinarysensor.hourly_energy_summer_non_peak_cost + name: Hourly Energy Summer Non-Peak Total Cost + device_class: monetary + state_class: total + unit_of_measurement: '$' + icon: mdi:currency-usd + availability: "{{ states('sensor.hourly_energy_summer_non_peak') not in ['unkown', 'unavailable'] and states('sensor.summernonpeak_per_kwh') not in ['unkown', 'unavailable'] }}" + state: "{{ states('sensor.hourly_energy_summer_non_peak')|float(default=0) * states('sensor.summernonpeak_per_kwh')|float(default=0) }}" + + - unique_id: templatebinarysensor.daily_energy_non_summer_cost + name: Daily Energy Non-Summer Total Cost + device_class: monetary + state_class: total + unit_of_measurement: '$' + icon: mdi:currency-usd + availability: "{{ states('sensor.daily_energy_non_summer') not in ['unkown', 'unavailable'] and states('sensor.nonsummer_per_kwh') not in ['unkown', 'unavailable'] }}" + state: "{{ states('sensor.daily_energy_non_summer')|float(default=0) * states('sensor.nonsummer_per_kwh')|float(default=0) }}" + + - unique_id: templatebinarysensor.daily_energy_summer_peak_cost + name: Daily Energy Summer Peak Total Cost + device_class: monetary + state_class: total + unit_of_measurement: '$' + icon: mdi:currency-usd + availability: "{{ states('sensor.daily_energy_summer_peak') not in ['unkown', 'unavailable'] and states('sensor.summerpeak_per_kwh') not in ['unkown', 'unavailable'] }}" + state: "{{ states('sensor.daily_energy_summer_peak')|float(default=0) * states('sensor.summerpeak_per_kwh')|float(default=0) }}" + + - unique_id: templatebinarysensor.daily_energy_summer_non_peak_cost + name: Daily Energy Summer Non-Peak Total Cost + device_class: monetary + state_class: total + unit_of_measurement: '$' + icon: mdi:currency-usd + availability: "{{ states('sensor.daily_energy_summer_non_peak') not in ['unkown', 'unavailable'] and states('sensor.summernonpeak_per_kwh') not in ['unkown', 'unavailable'] }}" + state: "{{ states('sensor.daily_energy_summer_non_peak')|float(default=0) * states('sensor.summernonpeak_per_kwh')|float(default=0) }}" + + - unique_id: templatebinarysensor.weekly_energy_non_summer_cost + name: Weekly Energy Non-Summer Total Cost + device_class: monetary + state_class: total + unit_of_measurement: '$' + icon: mdi:currency-usd + availability: "{{ states('sensor.weekly_energy_non_summer') not in ['unkown', 'unavailable'] and states('sensor.nonsummer_per_kwh') not in ['unkown', 'unavailable'] }}" + state: "{{ states('sensor.weekly_energy_non_summer')|float(default=0) * states('sensor.nonsummer_per_kwh')|float(default=0) }}" + + - unique_id: templatebinarysensor.weekly_energy_summer_peak_cost + name: Weekly Energy Summer Peak Total Cost + device_class: monetary + state_class: total + unit_of_measurement: '$' + icon: mdi:currency-usd + availability: "{{ states('sensor.weekly_energy_summer_peak') not in ['unkown', 'unavailable'] and states('sensor.summerpeak_per_kwh') not in ['unkown', 'unavailable'] }}" + state: "{{ states('sensor.weekly_energy_summer_peak')|float(default=0) * states('sensor.summerpeak_per_kwh')|float(default=0) }}" + + - unique_id: templatebinarysensor.weekly_energy_summer_non_peak_cost + name: Weekly Energy Summer Non-Peak Total Cost + device_class: monetary + state_class: total + unit_of_measurement: '$' + icon: mdi:currency-usd + availability: "{{ states('sensor.weekly_energy_summer_non_peak') not in ['unkown', 'unavailable'] and states('sensor.summernonpeak_per_kwh') not in ['unkown', 'unavailable'] }}" + state: "{{ states('sensor.weekly_energy_summer_non_peak')|float(default=0) * states('sensor.summernonpeak_per_kwh')|float(default=0) }}" + + - unique_id: templatebinarysensor.monthly_energy_non_summer_cost + name: Monthly Energy Non-Summer Total Cost + device_class: monetary + state_class: total + unit_of_measurement: '$' + icon: mdi:currency-usd + availability: "{{ states('sensor.monthly_energy_non_summer') not in ['unkown', 'unavailable'] and states('sensor.nonsummer_per_kwh') not in ['unkown', 'unavailable'] }}" + state: "{{ states('sensor.monthly_energy_non_summer')|float(default=0) * states('sensor.nonsummer_per_kwh')|float(default=0) }}" + + - unique_id: templatebinarysensor.monthly_energy_summer_peak_cost + name: Monthly Energy Summer Peak Total Cost + device_class: monetary + state_class: total + unit_of_measurement: '$' + icon: mdi:currency-usd + availability: "{{ states('sensor.monthly_energy_summer_peak') not in ['unkown', 'unavailable'] and states('sensor.summerpeak_per_kwh') not in ['unkown', 'unavailable'] }}" + state: "{{ states('sensor.monthly_energy_summer_peak')|float(default=0) * states('sensor.summerpeak_per_kwh')|float(default=0) }}" + + - unique_id: templatebinarysensor.monthly_energy_summer_non_peak_cost + name: Monthly Energy Summer Non-Peak Total Cost + device_class: monetary + state_class: total + unit_of_measurement: '$' + icon: mdi:currency-usd + availability: "{{ states('sensor.monthly_energy_summer_non_peak') not in ['unkown', 'unavailable'] and states('sensor.summernonpeak_per_kwh') not in ['unkown', 'unavailable'] }}" + state: "{{ states('sensor.monthly_energy_summer_non_peak')|float(default=0) * states('sensor.summernonpeak_per_kwh')|float(default=0) }}" + + - unique_id: templatebinarysensor.hourly_energy_total_cost + name: Hourly Energy Total Cost + device_class: monetary + state_class: total + unit_of_measurement: '$' + icon: mdi:currency-usd + availability: "{{ states('sensor.hourly_energy_non_summer_total_cost') not in ['unkown', 'unavailable'] and states('sensor.hourly_energy_summer_non_peak_total_cost') not in ['unkown', 'unavailable'] and states('sensor.hourly_energy_summer_peak_total_cost') not in ['unkown', 'unavailable'] }}" + state: "{{ states('sensor.hourly_energy_non_summer_total_cost')|float(default=0) + states('sensor.hourly_energy_summer_non_peak_total_cost')|float(default=0) + states('sensor.hourly_energy_summer_peak_total_cost')|float(default=0) }}" + + - unique_id: templatebinarysensor.daily_energy_total_cost + name: Daily Energy Total Cost + device_class: monetary + state_class: total + unit_of_measurement: '$' + icon: mdi:currency-usd + availability: "{{ states('sensor.daily_energy_non_summer_total_cost') not in ['unkown', 'unavailable'] and states('sensor.daily_energy_summer_non_peak_total_cost') not in ['unkown', 'unavailable'] and states('sensor.daily_energy_summer_peak_total_cost') not in ['unkown', 'unavailable'] }}" + state: "{{ states('sensor.daily_energy_non_summer_total_cost')|float(default=0) + states('sensor.daily_energy_summer_non_peak_total_cost')|float(default=0) + states('sensor.daily_energy_summer_peak_total_cost')|float(default=0) }}" + + - unique_id: templatebinarysensor.weekly_energy_total_cost + name: Weekly Energy Total Cost + device_class: monetary + state_class: total + unit_of_measurement: '$' + icon: mdi:currency-usd + availability: "{{ states('sensor.weekly_energy_non_summer_total_cost') not in ['unkown', 'unavailable'] and states('sensor.weekly_energy_summer_non_peak_total_cost') not in ['unkown', 'unavailable'] and states('sensor.weekly_energy_summer_peak_total_cost') not in ['unkown', 'unavailable'] }}" + state: "{{ states('sensor.weekly_energy_non_summer_total_cost')|float(default=0) + states('sensor.weekly_energy_summer_non_peak_total_cost')|float(default=0) + states('sensor.weekly_energy_summer_peak_total_cost')|float(default=0) }}" + + - unique_id: templatebinarysensor.monthly_energy_total_cost + name: Monthly Energy Total Cost + device_class: monetary + state_class: total + unit_of_measurement: '$' + icon: mdi:currency-usd + availability: "{{ states('sensor.monthly_energy_non_summer_total_cost') not in ['unkown', 'unavailable'] and states('sensor.monthly_energy_summer_non_peak_total_cost') not in ['unkown', 'unavailable'] and states('sensor.monthly_energy_summer_peak_total_cost') not in ['unkown', 'unavailable'] }}" + state: "{{ states('sensor.monthly_energy_non_summer_total_cost')|float(default=0) + states('sensor.monthly_energy_summer_non_peak_total_cost')|float(default=0) + states('sensor.monthly_energy_summer_peak_total_cost')|float(default=0) }}" + + - unique_id: templatebinarysensor.hourly_energy_total + name: Hourly Energy Total + device_class: energy + state_class: total + unit_of_measurement: kWh + icon: mdi:flash + availability: "{{ states('sensor.hourly_energy_non_summer') not in ['unkown', 'unavailable'] and states('sensor.hourly_energy_summer_non_peak') not in ['unkown', 'unavailable'] and states('sensor.hourly_energy_summer_peak') not in ['unkown', 'unavailable'] }}" + state: "{{ states('sensor.hourly_energy_non_summer')|float(default=0) + states('sensor.hourly_energy_summer_non_peak')|float(default=0) + states('sensor.hourly_energy_summer_peak')|float(default=0) }}" + + - unique_id: templatebinarysensor.daily_energy_total + name: Daily Energy Total + device_class: energy + state_class: total + unit_of_measurement: kWh + icon: mdi:flash + availability: "{{ states('sensor.daily_energy_non_summer') not in ['unkown', 'unavailable'] and states('sensor.daily_energy_summer_non_peak') not in ['unkown', 'unavailable'] and states('sensor.daily_energy_summer_peak') not in ['unkown', 'unavailable'] }}" + state: "{{ states('sensor.daily_energy_non_summer')|float(default=0) + states('sensor.daily_energy_summer_non_peak')|float(default=0) + states('sensor.daily_energy_summer_peak')|float(default=0) }}" + + - unique_id: templatebinarysensor.weekly_energy_total + name: Weekly Energy Total + device_class: energy + state_class: total + unit_of_measurement: kWh + icon: mdi:flash + availability: "{{ states('sensor.weekly_energy_non_summer') not in ['unkown', 'unavailable'] and states('sensor.weekly_energy_summer_non_peak') not in ['unkown', 'unavailable'] and states('sensor.weekly_energy_summer_peak') not in ['unkown', 'unavailable'] }}" + state: "{{ states('sensor.weekly_energy_non_summer')|float(default=0) + states('sensor.weekly_energy_summer_non_peak')|float(default=0) + states('sensor.weekly_energy_summer_peak')|float(default=0) }}" + + - unique_id: templatebinarysensor.monthly_energy_total + name: Monthly Energy Total + device_class: energy + state_class: total + unit_of_measurement: kWh + icon: mdi:flash + availability: "{{ states('sensor.monthly_energy_non_summer') not in ['unkown', 'unavailable'] and states('sensor.monthly_energy_summer_non_peak') not in ['unkown', 'unavailable'] and states('sensor.monthly_energy_summer_peak') not in ['unkown', 'unavailable'] }}" + state: "{{ states('sensor.monthly_energy_non_summer')|float(default=0) + states('sensor.monthly_energy_summer_non_peak')|float(default=0) + states('sensor.monthly_energy_summer_peak')|float(default=0) }}" \ No newline at end of file diff --git a/components/packages/utility_meter/update_tariff.yaml b/components/packages/utility_meter/update_tariff.yaml new file mode 100644 index 0000000..6332cb0 --- /dev/null +++ b/components/packages/utility_meter/update_tariff.yaml @@ -0,0 +1,114 @@ +automation: +- id: automation_update_energy_tariff + alias: Update Energy Tariff + # Summer rates run from June 1st through September 30 + # Summer peak rate starts at 14:00 and ends at 19:00 + trigger: + - platform: state + entity_id: sensor.energy_tariff + to: + - Non-Summer + - Summer Peak + - Summer Non-Peak + + - platform: homeassistant + event: start + + - platform: event + event_type: automation_reloaded + + action: + - service: select.select_option + target: + entity_id: + - select.hourly_energy + - select.daily_energy + - select.weekly_energy + - select.monthly_energy + # - select.basement_and_laundry_lights_and_plugs_hourly + # - select.basement_and_laundry_lights_and_plugs_daily + # - select.basement_and_laundry_lights_and_plugs_weekly + # - select.basement_and_laundry_lights_and_plugs_monthly + # - select.basement_bedroom_and_furnace_room_lights_hourly + # - select.basement_bedroom_and_furnace_room_lights_daily + # - select.basement_bedroom_and_furnace_room_lights_weekly + # - select.basement_bedroom_and_furnace_room_lights_monthly + # - select.basement_plugs_hourly + # - select.basement_plugs_daily + # - select.basement_plugs_weekly + # - select.basement_plugs_monthly + # - select.basement_stairs_and_lights_hourly + # - select.basement_stairs_and_lights_daily + # - select.basement_stairs_and_lights_weekly + # - select.basement_stairs_and_lights_monthly + # - select.bathroom_plug_hourly + # - select.bathroom_plug_daily + # - select.bathroom_plug_weekly + # - select.bathroom_plug_monthly + # - select.dishwasher_hourly + # - select.dishwasher_daily + # - select.dishwasher_weekly + # - select.dishwasher_monthly + # - select.dryer_hourly + # - select.dryer_daily + # - select.dryer_weekly + # - select.dryer_monthly + # - select.front_room_plugs_hourly + # - select.front_room_plugs_daily + # - select.front_room_plugs_weekly + # - select.front_room_plugs_monthly + # - select.furnace_hourly + # - select.furnace_daily + # - select.furnace_weekly + # - select.furnace_monthly + # - select.garage_and_outside_plugs_hourly + # - select.garage_and_outside_plugs_daily + # - select.garage_and_outside_plugs_weekly + # - select.garage_and_outside_plugs_monthly + # - select.garage_outside_and_front_garage_lights_hourly + # - select.garage_outside_and_front_garage_lights_daily + # - select.garage_outside_and_front_garage_lights_weekly + # - select.garage_outside_and_front_garage_lights_monthly + # - select.heat_pump_hourly + # - select.heat_pump_daily + # - select.heat_pump_weekly + # - select.heat_pump_monthly + # - select.kitchen_1_hourly + # - select.kitchen_1_daily + # - select.kitchen_1_weekly + # - select.kitchen_1_monthly + # - select.kitchen_2_hourly + # - select.kitchen_2_daily + # - select.kitchen_2_weekly + # - select.kitchen_2_monthly + # - select.laundry_plug_hourly + # - select.laundry_plug_daily + # - select.laundry_plug_weekly + # - select.laundry_plug_monthly + # - select.master_suite_hourly + # - select.master_suite_daily + # - select.master_suite_weekly + # - select.master_suite_monthly + # - select.microwave_plug_hourly + # - select.microwave_plug_daily + # - select.microwave_plug_weekly + # - select.microwave_plug_monthly + # - select.nursery_dining_kitchen_lights_hourly + # - select.nursery_dining_kitchen_lights_daily + # - select.nursery_dining_kitchen_lights_weekly + # - select.nursery_dining_kitchen_lights_monthly + # - select.stove_hourly + # - select.stove_daily + # - select.stove_weekly + # - select.stove_monthly + # - select.sump_pump_plug_hourly + # - select.sump_pump_plug_daily + # - select.sump_pump_plug_weekly + # - select.sump_pump_plug_monthly + # - select.well_hourly + # - select.well_daily + # - select.well_weekly + # - select.well_monthly + + data: + option: "{{ states('sensor.energy_tariff') }}" \ No newline at end of file diff --git a/components/packages/ytmusic.yaml b/components/packages/ytmusic.yaml new file mode 100644 index 0000000..6e8cf86 --- /dev/null +++ b/components/packages/ytmusic.yaml @@ -0,0 +1,50 @@ +input_select: + ytube_music_player_source: + name: Source + icon: mdi:music-box-multiple + options: # don't change + - "Playlist Radio" + - "Playlist" + + ytube_music_player_speakers: + name: Speakers + icon: mdi:speaker + options: # don't change + - "loading" + + ytube_music_player_playlist: + name: Playlist + icon: mdi:playlist-music + options: # don't change + - "loading" + + ytube_music_player_playmode: + name: Playmode + icon: mdi:playlist-music + options: ## don't change + - "Shuffle" + - "Random" + - "Shuffle Random" + - "Direct" + +# Optional, defaults to true +input_boolean: + ytube_music_player_playcontinuous: + initial: true + name: "Countinuous playback" + + ytube_music_player_show_playlist: + icon: mdi:playlist-music + name: "Show Playlist" + + ytube_music_player_show_lyrics: + icon: mdi:card-text + name: "Show Lyrics" + + ytube_music_player_show_speakers: + icon: mdi:speaker-multiple + name: "Show Speakers" + + ytube_music_player_show_details: + icon: mdi:card-account-details + name: "Show Details" \ No newline at end of file diff --git a/components/packages/zigbee_batteries.yaml b/components/packages/zigbee_batteries.yaml new file mode 100644 index 0000000..3922077 --- /dev/null +++ b/components/packages/zigbee_batteries.yaml @@ -0,0 +1,53 @@ +sensor: + - platform: min_max + unique_id: sensor_lowest_window_device_battery + name: Lowest Window Battery + type: min + entity_ids: + - sensor.nursery_window_battery + - sensor.computer_area_window_battery + - sensor.entryway_window_battery + - sensor.front_room_window_battery + - sensor.master_bedroom_window_battery + + - platform: min_max + unique_id: sensor_lowest_thermostat_device_battery + name: Lowest Thermostat Battery + type: min + entity_ids: + - sensor.blue_room_thermostat_battery + - sensor.front_room_thermostat_battery + - sensor.furnace_room_thermostat_battery + - sensor.mancave_thermostat_battery + - sensor.master_bathroom_thermostat_battery + - sensor.utility_room_thermostat_battery + + - platform: min_max + unique_id: sensor_lowest_door_device_battery + name: Lowest Door Battery + type: min + entity_ids: + - sensor.basement_door_battery + - sensor.blue_room_door_battery + - sensor.mancave_door_battery + - sensor.utility_room_door_battery + - sensor.front_door_battery + - sensor.master_bathroom_door_battery + - sensor.master_bedroom_closet_door_battery + - sensor.master_bedroom_door_battery + - sensor.master_suite_door_battery + - sensor.nursery_closet_door_battery + - sensor.patio_door_battery + - sensor.storage_room_door_battery + - sensor.pantry_door_battery + + - platform: min_max + unique_id: sensor_lowest_zigbee_device_battery + name: Lowest Zigbee Device Battery + type: min + entity_ids: + # - sensor.cube_two_battery + # - sensor.first_cube_battery + - sensor.dishwasher_door_battery + - sensor.tumble_dryer_door_battery + - sensor.washing_machine_door_battery diff --git a/components/packages/zone.yaml b/components/packages/zone.yaml new file mode 100644 index 0000000..86d05f6 --- /dev/null +++ b/components/packages/zone.yaml @@ -0,0 +1,6 @@ +zone: + name: Home + latitude: !secret home_lat + longitude: !secret home_long + radius: 40 + icon: mdi:account-multiple \ No newline at end of file diff --git a/components/packages/zwave_batteries.yaml b/components/packages/zwave_batteries.yaml new file mode 100644 index 0000000..1b897be --- /dev/null +++ b/components/packages/zwave_batteries.yaml @@ -0,0 +1,14 @@ +sensor: + - platform: min_max + unique_id: sensor_lowest_zwave_device_battery + name: Lowest ZWave Device Battery + type: min + entity_ids: + - sensor.front_room_motion_sensor_battery_level + - sensor.kitchen_motion_sensor_battery_level + - sensor.master_bedroom_multisensor_battery_level + - sensor.nursery_multisensor_battery_level + - sensor.computer_area_multisensor_battery_level + - sensor.great_room_multisensor_battery_level + - sensor.garage_multisensor_battery_level + - sensor.kitchen_multisensor_battery_level diff --git a/components/packages/zwave_nodes.yaml b/components/packages/zwave_nodes.yaml new file mode 100644 index 0000000..12bc4a1 --- /dev/null +++ b/components/packages/zwave_nodes.yaml @@ -0,0 +1,53 @@ +template: + - sensor: + - name: "Alive ZWave Devices" + unique_id: template_sensor_alive_zwave + state: >- + {{ expand(integration_entities('Z-Wave JS') )| selectattr("entity_id", "search", "node_status") | + selectattr('state', 'in', 'alive') | + map(attribute='entity_id')| list | count | int(default=0)}} + + - name: "Dead ZWave Devices" + unique_id: template_sensor_failed_zwave + state: >- + {% if states('sensor.alive_zwave_devices')|int(default=0) > 0 %} + {{ expand(integration_entities('Z-Wave JS') )| selectattr("entity_id", "search", "node_status") | + selectattr('state', 'in', 'dead') | + map(attribute='entity_id')| list | count | int(default=0)}} + {% else %} + 0 + {% endif %} + +automation: +- id: automation_alert_failed_zwave_nodes + alias: Ping Dead Zwave Nodes + description: 'Iterates through a list of dead ZWave Nodes and calls a service to press the Ping button' + mode: single + max_exceeded: silent + trigger: + - platform: state + entity_id: sensor.dead_zwave_devices + condition: + - condition: template + value_template: '{{ states("sensor.dead_zwave_devices")|int(default=0) >0 }}' + action: + - repeat: + while: '{{ states("sensor.dead_zwave_devices")|int(default=0) > 0 }}' + sequence: + - service: button.press + target: + entity_id: >- + {% set list = + expand(integration_entities('Z-Wave JS') )| selectattr('entity_id', 'search', 'node_status') | + selectattr('state', 'in', ['dead', 'unavailable', 'unknown']) | + map(attribute='entity_id')| list %} + + {% set ns = namespace(buttons=[]) %} + {% for d in list %} + {% set ns.buttons = ns.buttons + + ['button.' ~ (states[d].object_id.split('_node')[0]) ~ '_ping'] %} + + {% endfor %} + {{ns.buttons}} + - delay: + seconds: 1 \ No newline at end of file diff --git a/components/proximity/clint_agh.yaml b/components/proximity/clint_agh.yaml new file mode 100644 index 0000000..618aed3 --- /dev/null +++ b/components/proximity/clint_agh.yaml @@ -0,0 +1,5 @@ +clint_agh: + zone: agh + devices: + - device_tracker.pixel_7 + unit_of_measurement: mi diff --git a/components/proximity/clint_home.yaml b/components/proximity/clint_home.yaml new file mode 100644 index 0000000..7a0dd8a --- /dev/null +++ b/components/proximity/clint_home.yaml @@ -0,0 +1,5 @@ +clint_home: + zone: home + devices: + - device_tracker.pixel_7 + unit_of_measurement: mi diff --git a/components/remotes/hueremote.yaml b/components/remotes/hueremote.yaml new file mode 100644 index 0000000..0175af3 --- /dev/null +++ b/components/remotes/hueremote.yaml @@ -0,0 +1 @@ +#platform: hueremote \ No newline at end of file diff --git a/components/rest_commands/bridget_wled_presets.yaml b/components/rest_commands/bridget_wled_presets.yaml new file mode 100644 index 0000000..cedd32a --- /dev/null +++ b/components/rest_commands/bridget_wled_presets.yaml @@ -0,0 +1,59 @@ +bridget_clear: + url: "http://192.168.1.235/json/state" + method: POST + content_type: 'application/json; charset=utf-8' + payload: '{ "on": true, "bri": 255, "seg": [ { "id": 0, "start": 2, "stop": 1}]}' + +bridget_on: + url: "http://192.168.1.235/json/state" + method: POST + content_type: 'application/json; charset=utf-8' + payload: '{ "on": true, "bri": 255, "seg": [ { "id": 0, "start": 1, "stop": 276, "grp": 1, "spc": 0, "on": true, "bri": 255, "col": [ [ 0, 0, 0, 255 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ] ], "fx": 0, "sx": 128, "ix": 128, "pal": 0, "sel": true, "rev": false, "mi": false } ] }' + +bridget_ceiling_on: + url: "http://192.168.1.235/json/state" + method: POST + content_type: 'application/json; charset=utf-8' + payload: '{ "on": true, "bri": 255, "seg": [ { "id": 0, "start": 142, "stop": 276, "grp": 1, "spc": 0, "on": true, "bri": 255, "col": [ [ 0, 0, 0, 255 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ] ], "fx": 0, "sx": 128, "ix": 128, "pal": 0, "sel": true, "rev": false, "mi": false } ] }' + +bridget_dim_read: + url: "http://192.168.1.235/json/state" + method: POST + content_type: 'application/json; charset=utf-8' + payload: '{ "on": true, "bri": 20, "seg": [ { "id": 0, "start": 15, "stop": 142, "grp": 1, "spc": 0, "on": true, "bri": 255, "col": [ [ 0, 0, 0, 255 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ] ], "fx": 0, "sx": 128, "ix": 128, "pal": 0, "sel": true, "rev": false, "mi": false } ] }' + +bridget_bedtime: + url: "http://192.168.1.235/json/state" + method: POST + content_type: 'application/json; charset=utf-8' + payload: '{ "on": true, "bri": 1, "seg": [ { "id": 0, "start": 1, "stop": 276, "grp": 1, "spc": 0, "on": true, "bri": 255, "col": [ [ 255, 160, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ], "fx": 115, "sx": 55, "ix": 206, "pal": 13, "sel": true, "rev": false, "mi": false } ] }' + +bridget_bouncing_balls: + url: "http://192.168.1.235/json/state" + method: POST + content_type: 'application/json; charset=utf-8' + payload: '{ "on": true, "bri": 115, "seg": [ { "id": 0, "start": 1, "stop": 276, "grp": 1, "spc": 0, "on": true, "bri": 255, "col": [ [ 255, 160, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ], "fx": 91, "sx": 128, "ix": 128, "pal": 0, "sel": true, "rev": false, "mi": false } ] }' + +bridget_fireworks: + url: "http://192.168.1.235/json/state" + method: POST + content_type: 'application/json; charset=utf-8' + payload: '{ "on": true, "bri": 2, "seg": [ { "id": 0, "start": 1, "stop": 276, "grp": 1, "spc": 0, "on": true, "bri": 255, "col": [ [ 255, 160, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ] ], "fx": 90, "sx": 128, "ix": 1, "pal": 6, "sel": true, "rev": false, "mi": false } ] }' + +bridget_meteor: + url: "http://192.168.1.235/json/state" + method: POST + content_type: 'application/json; charset=utf-8' + payload: '{ "on": true, "bri": 21, "seg": [ { "id": 0, "start": 1, "stop": 276, "grp": 1, "spc": 0, "on": true, "bri": 255, "col": [ [ 255, 160, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ], "fx": 77, "sx": 32, "ix": 0, "pal": 0, "sel": true, "rev": false, "mi": false } ] }' + +bridget_twinkle: + url: "http://192.168.1.235/json/state" + method: POST + content_type: 'application/json; charset=utf-8' + payload: '{ "on": true, "bri": 68, "seg": [ { "id": 0, "start": 1, "stop": 276, "grp": 1, "spc": 0, "on": true, "bri": 255, "col": [ [ 255, 160, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ], "fx": 81, "sx": 42, "ix": 197, "pal": 0, "sel": true, "rev": false, "mi": false } ] }' + +bridget_off: + url: "http://192.168.1.235/json/state" + method: POST + content_type: 'application/json; charset=utf-8' + payload: '{ "on": false, "bri": 0, "seg": [ { "id": 0, "start": 1, "stop": 276, "grp": 1, "spc": 0, "on": false, "bri": 0, "col": [ [ 0, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ], "fx": 0, "sx": 0, "ix": 0, "pal": 0, "sel": true, "rev": false, "mi": false } ] }' \ No newline at end of file diff --git a/components/rest_commands/emmett_wled_presets.yaml b/components/rest_commands/emmett_wled_presets.yaml new file mode 100644 index 0000000..654f097 --- /dev/null +++ b/components/rest_commands/emmett_wled_presets.yaml @@ -0,0 +1,59 @@ +emmett_clear: + url: "http://192.168.1.236/json/state" + method: POST + content_type: 'application/json; charset=utf-8' + payload: '{ "on": true, "bri": 255, "seg": [ { "id": 0, "start": 2, "stop": 1}]}' + +emmett_on: + url: "http://192.168.1.236/json/state" + method: POST + content_type: 'application/json; charset=utf-8' + payload: '{ "on": true, "bri": 255, "seg": [ { "id": 0, "start": 1, "stop": 273, "grp": 1, "spc": 0, "on": true, "bri": 255, "col": [ [ 0, 0, 0, 255 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ] ], "fx": 0, "sx": 128, "ix": 128, "pal": 0, "sel": true, "rev": false, "mi": false } ] }' + +emmett_ceiling_on: + url: "http://192.168.1.236/json/state" + method: POST + content_type: 'application/json; charset=utf-8' + payload: '{ "on": true, "bri": 255, "seg": [ { "id": 0, "start": 142, "stop": 273, "grp": 1, "spc": 0, "on": true, "bri": 255, "col": [ [ 0, 0, 0, 255 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ] ], "fx": 0, "sx": 128, "ix": 128, "pal": 0, "sel": true, "rev": false, "mi": false } ] }' + +emmett_dim_read: + url: "http://192.168.1.236/json/state" + method: POST + content_type: 'application/json; charset=utf-8' + payload: '{ "on": true, "bri": 20, "seg": [ { "id": 0, "start": 42, "stop": 141, "grp": 1, "spc": 0, "on": true, "bri": 255, "col": [ [ 0, 0, 0, 255 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ] ], "fx": 0, "sx": 128, "ix": 128, "pal": 0, "sel": true, "rev": false, "mi": false } ] }' + +emmett_bedtime: + url: "http://192.168.1.236/json/state" + method: POST + content_type: 'application/json; charset=utf-8' + payload: '{ "on": true, "bri": 1, "seg": [ { "id": 0, "start": 1, "stop": 273, "grp": 1, "spc": 0, "on": true, "bri": 255, "col": [ [ 255, 160, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ] ], "fx": 115, "sx": 55, "ix": 206, "pal": 13, "sel": true, "rev": false, "mi": false } ] }' + +emmett_bouncing_balls: + url: "http://192.168.1.236/json/state" + method: POST + content_type: 'application/json; charset=utf-8' + payload: '{ "on": true, "bri": 126, "seg": [ { "id": 0, "start": 1, "stop": 273, "grp": 1, "spc": 0, "on": true, "bri": 255, "col": [ [ 255, 160, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ] ], "fx": 91, "sx": 128, "ix": 128, "pal": 0, "sel": true, "rev": false, "mi": false } ] }' + +emmett_fireworks: + url: "http://192.168.1.236/json/state" + method: POST + content_type: 'application/json; charset=utf-8' + payload: '{ "on": true, "bri": 2, "seg": [ { "id": 0, "start": 1, "stop": 273, "grp": 1, "spc": 0, "on": true, "bri": 255, "col": [ [ 255, 160, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ] ], "fx": 90, "sx": 128, "ix": 1, "pal": 6, "sel": true, "rev": false, "mi": false } ] }' + +emmett_meteor: + url: "http://192.168.1.236/json/state" + method: POST + content_type: 'application/json; charset=utf-8' + payload: '{ "on": true, "bri": 21, "seg": [ { "id": 0, "start": 1, "stop": 273, "grp": 1, "spc": 0, "on": true, "bri": 255, "col": [ [ 255, 160, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ], "fx": 77, "sx": 32, "ix": 0, "pal": 0, "sel": true, "rev": false, "mi": false } ] }' + +emmett_twinkle: + url: "http://192.168.1.236/json/state" + method: POST + content_type: 'application/json; charset=utf-8' + payload: '{ "on": true, "bri": 39, "seg": [ { "id": 0, "start": 1, "stop": 273, "grp": 1, "spc": 0, "on": true, "bri": 255, "col": [ [ 255, 160, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ], "fx": 81, "sx": 55, "ix": 206, "pal": 0, "sel": true, "rev": false, "mi": false } ] }' + +emmett_off: + url: "http://192.168.1.236/json/state" + method: POST + content_type: 'application/json; charset=utf-8' + payload: '{ "on": false, "bri": 0, "seg": [ { "id": 0, "start": 1, "stop": 273, "grp": 1, "spc": 0, "on": false, "bri": 0, "col": [ [ 0, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ], "fx": 0, "sx": 0, "ix": 0, "pal": 0, "sel": true, "rev": false, "mi": false } ] }' \ No newline at end of file diff --git a/components/rest_commands/roku_commands.yaml b/components/rest_commands/roku_commands.yaml new file mode 100644 index 0000000..274a9de --- /dev/null +++ b/components/rest_commands/roku_commands.yaml @@ -0,0 +1,854 @@ +nursery_on_roku_1: + url: !secret nursery_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +front_room_on_roku_1: + url: !secret front_room_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +great_room_on_roku_1: + url: !secret great_room_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +computer_area_on_roku_1: + url: !secret computer_area_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +kitchen_on_roku_1: + url: !secret kitchen_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +garage_on_roku_1: + url: !secret garage_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +back_yard_on_roku_1: + url: !secret back_yard_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +front_door_on_roku_1: + url: !secret front_door_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +nursery_on_roku_2: + url: !secret nursery_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +front_room_on_roku_2: + url: !secret front_room_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +great_room_on_roku_2: + url: !secret great_room_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +computer_area_on_roku_2: + url: !secret computer_area_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +kitchen_on_roku_2: + url: !secret kitchen_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +garage_on_roku_2: + url: !secret garage_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +back_yard_on_roku_2: + url: !secret back_yard_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +front_door_on_roku_2: + url: !secret front_door_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +numeric_1_on_roku_1: + url: !secret numeric_1_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +numeric_2_on_roku_1: + url: !secret numeric_2_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +numeric_3_on_roku_1: + url: !secret numeric_3_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +numeric_4_on_roku_1: + url: !secret numeric_4_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +numeric_5_on_roku_1: + url: !secret numeric_5_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +numeric_6_on_roku_1: + url: !secret numeric_6_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +numeric_7_on_roku_1: + url: !secret numeric_7_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +numeric_8_on_roku_1: + url: !secret numeric_8_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +numeric_9_on_roku_1: + url: !secret numeric_9_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +numeric_0_on_roku_1: + url: !secret numeric_0_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_a_on_roku_1: + url: !secret lowercase_a_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_a_on_roku_1: + url: !secret uppercase_a_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_b_on_roku_1: + url: !secret lowercase_b_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_b_on_roku_1: + url: !secret uppercase_b_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_c_on_roku_1: + url: !secret lowercase_c_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_c_on_roku_1: + url: !secret uppercase_c_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_d_on_roku_1: + url: !secret lowercase_d_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_d_on_roku_1: + url: !secret uppercase_d_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_e_on_roku_1: + url: !secret lowercase_e_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_e_on_roku_1: + url: !secret uppercase_e_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_f_on_roku_1: + url: !secret lowercase_f_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_f_on_roku_1: + url: !secret uppercase_f_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_g_on_roku_1: + url: !secret lowercase_g_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_g_on_roku_1: + url: !secret uppercase_g_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_h_on_roku_1: + url: !secret lowercase_h_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_h_on_roku_1: + url: !secret uppercase_h_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_i_on_roku_1: + url: !secret lowercase_i_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_i_on_roku_1: + url: !secret uppercase_i_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_j_on_roku_1: + url: !secret lowercase_j_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_j_on_roku_1: + url: !secret uppercase_j_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_k_on_roku_1: + url: !secret lowercase_k_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_k_on_roku_1: + url: !secret uppercase_k_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_l_on_roku_1: + url: !secret lowercase_l_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_l_on_roku_1: + url: !secret uppercase_l_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_m_on_roku_1: + url: !secret lowercase_m_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_m_on_roku_1: + url: !secret uppercase_m_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_n_on_roku_1: + url: !secret lowercase_n_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_n_on_roku_1: + url: !secret uppercase_n_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_o_on_roku_1: + url: !secret lowercase_o_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_o_on_roku_1: + url: !secret uppercase_o_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_p_on_roku_1: + url: !secret lowercase_p_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_p_on_roku_1: + url: !secret uppercase_p_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_q_on_roku_1: + url: !secret lowercase_q_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_q_on_roku_1: + url: !secret uppercase_q_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_r_on_roku_1: + url: !secret lowercase_r_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_r_on_roku_1: + url: !secret uppercase_r_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_s_on_roku_1: + url: !secret lowercase_s_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_s_on_roku_1: + url: !secret uppercase_s_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_t_on_roku_1: + url: !secret lowercase_t_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_t_on_roku_1: + url: !secret uppercase_t_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_u_on_roku_1: + url: !secret lowercase_u_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_u_on_roku_1: + url: !secret uppercase_u_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_v_on_roku_1: + url: !secret lowercase_v_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_v_on_roku_1: + url: !secret uppercase_v_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_w_on_roku_1: + url: !secret lowercase_w_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_w_on_roku_1: + url: !secret uppercase_w_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_x_on_roku_1: + url: !secret lowercase_x_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_x_on_roku_1: + url: !secret uppercase_x_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_y_on_roku_1: + url: !secret lowercase_y_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_y_on_roku_1: + url: !secret uppercase_y_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_z_on_roku_1: + url: !secret lowercase_z_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_z_on_roku_1: + url: !secret uppercase_z_on_roku_1 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +numeric_1_on_roku_2: + url: !secret numeric_1_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +numeric_2_on_roku_2: + url: !secret numeric_2_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +numeric_3_on_roku_2: + url: !secret numeric_3_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +numeric_4_on_roku_2: + url: !secret numeric_4_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +numeric_5_on_roku_2: + url: !secret numeric_5_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +numeric_6_on_roku_2: + url: !secret numeric_6_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +numeric_7_on_roku_2: + url: !secret numeric_7_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +numeric_8_on_roku_2: + url: !secret numeric_8_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +numeric_9_on_roku_2: + url: !secret numeric_9_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +numeric_0_on_roku_2: + url: !secret numeric_0_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_a_on_roku_2: + url: !secret lowercase_a_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_a_on_roku_2: + url: !secret uppercase_a_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_b_on_roku_2: + url: !secret lowercase_b_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_b_on_roku_2: + url: !secret uppercase_b_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_c_on_roku_2: + url: !secret lowercase_c_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_c_on_roku_2: + url: !secret uppercase_c_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_d_on_roku_2: + url: !secret lowercase_d_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_d_on_roku_2: + url: !secret uppercase_d_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_e_on_roku_2: + url: !secret lowercase_e_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_e_on_roku_2: + url: !secret uppercase_e_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_f_on_roku_2: + url: !secret lowercase_f_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_f_on_roku_2: + url: !secret uppercase_f_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_g_on_roku_2: + url: !secret lowercase_g_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_g_on_roku_2: + url: !secret uppercase_g_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_h_on_roku_2: + url: !secret lowercase_h_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_h_on_roku_2: + url: !secret uppercase_h_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_i_on_roku_2: + url: !secret lowercase_i_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_i_on_roku_2: + url: !secret uppercase_i_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_j_on_roku_2: + url: !secret lowercase_j_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_j_on_roku_2: + url: !secret uppercase_j_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_k_on_roku_2: + url: !secret lowercase_k_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_k_on_roku_2: + url: !secret uppercase_k_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_l_on_roku_2: + url: !secret lowercase_l_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_l_on_roku_2: + url: !secret uppercase_l_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_m_on_roku_2: + url: !secret lowercase_m_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_m_on_roku_2: + url: !secret uppercase_m_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_n_on_roku_2: + url: !secret lowercase_n_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_n_on_roku_2: + url: !secret uppercase_n_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_o_on_roku_2: + url: !secret lowercase_o_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_o_on_roku_2: + url: !secret uppercase_o_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_p_on_roku_2: + url: !secret lowercase_p_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_p_on_roku_2: + url: !secret uppercase_p_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_q_on_roku_2: + url: !secret lowercase_q_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_q_on_roku_2: + url: !secret uppercase_q_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_r_on_roku_2: + url: !secret lowercase_r_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_r_on_roku_2: + url: !secret uppercase_r_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_s_on_roku_2: + url: !secret lowercase_s_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_s_on_roku_2: + url: !secret uppercase_s_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_t_on_roku_2: + url: !secret lowercase_t_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_t_on_roku_2: + url: !secret uppercase_t_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_u_on_roku_2: + url: !secret lowercase_u_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_u_on_roku_2: + url: !secret uppercase_u_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_v_on_roku_2: + url: !secret lowercase_v_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_v_on_roku_2: + url: !secret uppercase_v_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_w_on_roku_2: + url: !secret lowercase_w_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_w_on_roku_2: + url: !secret uppercase_w_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_x_on_roku_2: + url: !secret lowercase_x_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_x_on_roku_2: + url: !secret uppercase_x_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_y_on_roku_2: + url: !secret lowercase_y_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_y_on_roku_2: + url: !secret uppercase_y_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +lowercase_z_on_roku_2: + url: !secret lowercase_z_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + +uppercase_z_on_roku_2: + url: !secret uppercase_z_on_roku_2 + method: POST + content_type: 'application/json; charset=utf-8' + payload: '' + + + + #https://www.youtube.com/watch?v=BHM-m9bnjew +# shell_command: +# office_roku_on: "curl -X POST http://192.168.1.140:8060/keypress/home" +# office_youtube: "curl -X POST http://192.168.1.140:8060/launch/837?contentId=BHM-m9bnjew&mediaType=live" + +# http://192.168.1.140:8060/query/icon/143683 + + +# curl -d '' "http://$ROKU_DEV_TARGET:8060/keypress/Lit_r" +# curl -d '' "http://$ROKU_DEV_TARGET:8060/keypress/Lit_o" +# curl -d '' "http://$ROKU_DEV_TARGET:8060/keypress/Lit_k" +# curl -d '' "http://$ROKU_DEV_TARGET:8060/keypress/Lit_u" \ No newline at end of file diff --git a/components/sensors/authenticated.yaml b/components/sensors/authenticated.yaml new file mode 100644 index 0000000..4792095 --- /dev/null +++ b/components/sensors/authenticated.yaml @@ -0,0 +1,7 @@ +# platform: authenticated +# exclude: +# - fd00::/8 +# - 2001:4860:4000::/36 +# - 108.177.8.0/17 +# - 66.102.0.0/20 +# - 66.249.80.0/20 \ No newline at end of file diff --git a/components/sensors/hassio_version.yaml b/components/sensors/hassio_version.yaml new file mode 100644 index 0000000..7d2c4d0 --- /dev/null +++ b/components/sensors/hassio_version.yaml @@ -0,0 +1,3 @@ +# platform: version +# name: Hassio Version +# source: hassio \ No newline at end of file diff --git a/components/sensors/mail_and_packages.yaml b/components/sensors/mail_and_packages.yaml new file mode 100644 index 0000000..3f70c17 --- /dev/null +++ b/components/sensors/mail_and_packages.yaml @@ -0,0 +1,33 @@ +platform: template +sensors: + mail_deliveries_message: + friendly_name: "Deliveries Summary" + value_template: > + {# Deliveries Sentence #} + {% macro deliveries_sentence() -%} + {%- if states("sensor.mail_usps_mail")|int(0) == 0 -%} + No + {%- else -%} + {{states("sensor.mail_usps_mail")|int(0)}} + {%- endif -%} + {{' '}} + {%- if states("sensor.mail_usps_mail")|int(0) <= 1 -%} + mail + {%- else -%} + pieces of mail + {%- endif -%} + {{' '}}will be delivered.{{' '}} + {%- if states("sensor.mail_packages_in_transit")|int(0) == 0 -%} + No + {%- else -%} + {{states("sensor.mail_packages_in_transit")|int(0)}} + {%- endif -%} + {{' '}} + {%- if states("sensor.mail_packages_in_transit")|int(0) == 1 -%} + package is + {%- else -%} + packages are + {%- endif -%} + {{' '}}in transit.{{' '}} + {%- endmacro %} + {{deliveries_sentence()}} \ No newline at end of file diff --git a/components/sensors/season.yaml b/components/sensors/season.yaml new file mode 100644 index 0000000..ef3990f --- /dev/null +++ b/components/sensors/season.yaml @@ -0,0 +1,2 @@ +# platform: season +# type: meteorological \ No newline at end of file diff --git a/components/sensors/sun_elevation.yaml b/components/sensors/sun_elevation.yaml new file mode 100644 index 0000000..bbb949f --- /dev/null +++ b/components/sensors/sun_elevation.yaml @@ -0,0 +1,27 @@ +platform: template +sensors: + sun_elevation: + unique_id: templatesensor.sun_elevation + value_template: "{{ state_attr('sun.sun', 'elevation') }}" + unit_of_measurement: "degrees" + icon_template: > + {% set elevation = state_attr('sun.sun', 'elevation')|default(0) %} + {% if elevation > 0 %} + mdi:weather-sunny + {% else %} + mdi:weather-night + {% endif %} + + period_of_day: + unique_id: templatesensor.period_of_day + friendly_name: Period of the Day + value_template: >- + {% if (as_timestamp(states.sun.sun.attributes.next_dusk)) - (as_timestamp(states.sun.sun.attributes.next_setting)) < 0 %} + Dusk + {% elif (as_timestamp(states.sun.sun.attributes.next_rising)) - (as_timestamp(states.sun.sun.attributes.next_dawn)) < 0 %} + Dawn + {% elif (states.sun.sun.attributes.elevation) < -4 %} + Night + {% else %} + Day + {% endif %} \ No newline at end of file diff --git a/components/sensors/system_monitor.yaml b/components/sensors/system_monitor.yaml new file mode 100644 index 0000000..fd544c3 --- /dev/null +++ b/components/sensors/system_monitor.yaml @@ -0,0 +1,26 @@ +# platform: systemmonitor +# resources: +# - type: disk_use_percent +# arg: /home +# - type: disk_use +# - type: disk_free +# - type: memory_use_percent +# - type: memory_use +# - type: memory_free +# - type: swap_use +# - type: swap_free +# - type: load_1m +# - type: load_5m +# - type: load_15m +# - type: last_boot +# - type: network_in +# arg: eno2 +# - type: network_out +# arg: eno2 +# - type: ipv4_address +# arg: eno2 +# - type: throughput_network_in +# arg: eno2 +# - type: throughput_network_out +# arg: eno2 +# - type: processor_use \ No newline at end of file diff --git a/components/sensors/template.yaml b/components/sensors/template.yaml new file mode 100644 index 0000000..f73b6b6 --- /dev/null +++ b/components/sensors/template.yaml @@ -0,0 +1,261 @@ +platform: template +sensors: + hvac_filter_next_change: + unique_id: templatesensor.hvac_filter_next_change + friendly_name: "HVAC Filter Next Change" + value_template: "{{ strptime(states('input_datetime.filter_last_changed'), '%Y-%m-%d %H:%M:%S') + timedelta(days=90) }}" + + hvac_mode: + unique_id: templatesensor.hvac_mode + value_template: '{{states("climate.thermostat")}}' + friendly_name: HVAC Mode + + hvac_equipment_running: + unique_id: templatesensor.hvac_equipment_running + value_template: '{{state_attr("climate.thermostat", "equipment_running")|default("none", true)}}' + friendly_name: HVAC Equipment Running + + hvac_action: + unique_id: templatesensor.hvac_action + value_template: '{{state_attr("climate.thermostat", "hvac_action")}}' + friendly_name: HVAC Action + + clint_status: + unique_id: templatesensor.clint_status + value_template: '{{ states.input_select.clint_status_dropdown.state }}' + friendly_name: 'Clint' + + emmett_status: + unique_id: templatesensor.emmett_status + value_template: '{{ states.input_select.emmett_status_dropdown.state }}' + friendly_name: 'Emmett' + + bridget_status: + unique_id: templatesensor.bridget_status + value_template: '{{ states.input_select.bridget_status_dropdown.state }}' + friendly_name: 'Bridget' + + kristy_status: + unique_id: templatesensor.kristy_status + value_template: '{{ states.input_select.kristy_status_dropdown.state }}' + friendly_name: 'Kristy' + + marshall_status: + unique_id: templatesensor.marshall_status + value_template: '{{ states.input_select.marshall_status_dropdown.state }}' + friendly_name: 'Marshall' + + tess_status: + unique_id: templatesensor.tess_status + value_template: '{{ states.input_select.tess_status_dropdown.state }}' + friendly_name: 'Tess' + + ebin_status: + unique_id: templatesensor.ebin_status + value_template: '{{ states.input_select.ebin_status_dropdown.state }}' + friendly_name: 'Ebin' + + people_count: + unique_id: templatesensor.people_count + friendly_name: 'People Count' + value_template: > + {{[ states.input_boolean.clint_home, + states.input_boolean.emmett_home, + states.input_boolean.bridget_home, + states.input_boolean.kristy_home, + states.input_boolean.marshall_home, + states.input_boolean.tess_home, + states.input_boolean.ebin_home, + states.input_boolean.guest_home ] + | selectattr('state', 'eq', 'on') | list | count}} + + count_automations: + unique_id: templatesensor.count_automations + value_template: "{{ states.automation | list | length }}" + + count_scripts: + unique_id: templatesensor.count_scripts + value_template: "{{ states.script | list | length }}" + + count_device_trackers: + unique_id: templatesensor.count_device_trackers + value_template: "{{ states.device_tracker | list | length }}" + + count_binary_sensors: + unique_id: templatesensor.count_binary_sensors + value_template: "{{ states.binary_sensor | list | length }}" + + count_sensors: + unique_id: templatesensor.count_sensors + value_template: "{{ states.sensor | list | length }}" + + count_switches: + unique_id: templatesensor.count_switches + value_template: "{{ states.switch | list | length }}" + + count_zones: + unique_id: templatesensor.count_zones + value_template: "{{ states.zone | list | length }}" + + count_input_booleans: + unique_id: templatesensor.count_input_booleans + value_template: "{{ states.input_boolean | list | length }}" + + count_input_numbers: + unique_id: templatesensor.count_input_numbers + value_template: "{{ states.input_number | list | length }}" + + count_input_texts: + unique_id: templatesensor.count_input_texts + value_template: "{{ states.input_text | list | length }}" + + count_input_selects: + unique_id: templatesensor.count_input_selects + value_template: "{{ states.input_select | list | length }}" + + count_input_datetimes: + unique_id: templatesensor.count_input_datetimes + value_template: "{{ states.input_datetime | list | length }}" + + steam1_game: + unique_id: templatesensor.steam1_game + value_template: >- + {% if state_attr('sensor.steam_76561197960668089', 'game') is not none%} + {{ state_attr('sensor.steam_76561197960668089', 'game') }} + {% else %} + {{ states('sensor.steam_76561197960668089') }} + {% endif %} + + nonsummer_per_kwh: + friendly_name: 'Non-Summer Rate' + unique_id: templatesensor.non_summer_per_kwh + value_template: 0.100496 + icon_template: mdi:currency-usd + unit_of_measurement: '$/kWh' + + summernonpeak_per_kwh: + friendly_name: 'Summer Non-Peak Rate' + unique_id: templatesensor.summer_nonpeak_per_kwh + value_template: 0.100649 + icon_template: mdi:currency-usd + unit_of_measurement: '$/kWh' + + summerpeak_per_kwh: + friendly_name: 'Summer Peak Rate' + unique_id: templatesensor.summerpeak_per_kwh + value_template: 0.149656 + icon_template: mdi:currency-usd + unit_of_measurement: '$/kWh' + + energy_cost: + unique_id: templatesensor.energy_cost + friendly_name: 'Energy Cost' + value_template: >- + {% if now().month > 9 or now().month < 6 -%} + 0.100496 + {%- else -%} + {%- if now().weekday() < 5 and now().hour >= 14 and now().hour <= 19 -%} + 0.149656 + {%- else -%} + 0.100649 + {%- endif -%} + {% endif %} + icon_template: mdi:currency-usd + unit_of_measurement: '$/kWh' + + energy_tariff: + unique_id: templatesensor.energy_tariff + friendly_name: 'Energy Tariff' + value_template: >- + {% if now().month > 9 or now().month < 6 -%} + Non-Summer + {%- else -%} + {%- if now().weekday() < 5 and now().hour >= 14 and now().hour <= 19 -%} + Summer Peak + {%- else -%} + Summer Non-Peak + {%- endif -%} + {% endif %} + + general_waste: + unique_id: templatesensor.general_waste + friendly_name: 'General Waste' + icon_template: mdi:trash-can + value_template: >- + {% if is_state('calendar.trash_schedule','on') %} + today + {% elif state_attr('calendar.trash_schedule','offset_reached') %} + tomorrow + {% else %} + future + {% endif %} + + # monitored_daily_kwh: + # unique_id: templatesensor.monitored_daily_kwh + # friendly_name: 'Monitored Daily [kWh]' + # icon_template: mdi:flash + # unit_of_measurement: kWh + # value_template: "{{ states('sensor.basement_and_laundry_lights_and_plugs_kwh')|float(default=0) + }}" + +#my_room_status + occupied_room_count: + unique_id: temlatesensor.occupied_room_count + friendly_name: Rooms Occupied + value_template: "{{ (expand('group.my_room_status') | selectattr('state', 'eq', 'on')) | list | count |int(default=0) }}" + icon_template: "{{ iif(is_state('group.my_room_status', 'on'), 'mdi:floor-plan','mdi:floor-plan') }}" + + speakers_on_count: + unique_id: temlatesensor.speakers_on_count + friendly_name: Speakers On + value_template: "{{ (expand('group.all_my_speakers') | selectattr('state', 'eq', 'playing')) | list | count |int(default=0) }}" + icon_template: "{{ iif(is_state('group.all_my_speakers', 'on'), 'mdi:speaker-multiple','mdi:speaker-off') }}" + + lights_on_count: + unique_id: temlatesensor.lights_on_count + friendly_name: Lights On + value_template: "{{ (expand('group.my_lights') | selectattr('state', 'eq', 'on')) | list | count |int(default=0) }}" + icon_template: "{{ iif(is_state('group.my_lights', 'on'), 'mdi:lightbulb-group','mdi:lightbulb-group-off') }}" + + open_windows_count: + unique_id: temlatesensor.open_windows_count + friendly_name: Open Windows + value_template: "{{ (expand('group.my_exterior_windows') | selectattr('state', 'eq', 'on')) | list | count |int(default=0) }}" + icon_template: "{{ iif(is_state('group.my_exterior_windows', 'on'), 'mdi:window-open-variant','mdi:window-closed-variant') }}" + + lights_left_on_count: + unique_id: temlatesensor.lights_left_on_count + friendly_name: Lights Left On + value_template: "{{ (expand('group.lights_left_on') | selectattr('state', 'eq', 'on')) | list | count |int(default=0) }}" + icon_template: "{{ iif(is_state('group.lights_left_on', 'on'), 'mdi:lightbulb-multiple','mdi:lightbulb-multiple-off') }}" + + open_external_doors_count: + unique_id: temlatesensor.open_external_doors_count + friendly_name: Open External Doors + value_template: "{{ (expand('group.my_exterior_doors') | selectattr('state', 'eq', 'on')) | list | count |int(default=0) }}" + icon_template: "{{ iif(is_state('group.my_exterior_windows', 'on'), 'mdi:door-open','mdi:door') }}" + + frigate_person_count: + unique_id: temlatesensor.frigate_person_count + friendly_name: Frigate Person Count + value_template: "{{ + states('sensor.black_bed_person_count')|int(default=0) + + states('sensor.blue_room_person_count')|int(default=0) + + states('sensor.computer_area_person_count')|int(default=0) + + states('sensor.dining_room_person_count')|int(default=0) + + states('sensor.entryway_person_count')|int(default=0) + + states('sensor.front_porch_person_count')|int(default=0) + + states('sensor.front_room_person_count')|int(default=0) + + states('sensor.furnace_room_person_count')|int(default=0) + + states('sensor.great_room_person_count')|int(default=0) + + states('sensor.kitchen_person_count')|int(default=0) + + states('sensor.master_bedroom_person_count')|int(default=0) + + states('sensor.master_bed_person_count')|int(default=0) + + states('sensor.nursery_person_count')|int(default=0) + + states('sensor.nursery_door_person_count')|int(default=0) + + states('sensor.utility_room_person_count')|int(default=0) + + states('sensor.white_bed_person_count')|int(default=0) + + states('sensor.walkway_person_count')|int(default=0) + + states('sensor.workshop_person_count')|int(default=0) + }}" + + icon_template: mdi:human-queue \ No newline at end of file diff --git a/components/sensors/time_date.yaml b/components/sensors/time_date.yaml new file mode 100644 index 0000000..cfdf031 --- /dev/null +++ b/components/sensors/time_date.yaml @@ -0,0 +1,9 @@ +platform: time_date +display_options: + - 'time' + - 'date' + - 'date_time' + - 'date_time_utc' + - 'date_time_iso' + - 'time_date' + - 'time_utc' diff --git a/components/sensors/uptime.yaml b/components/sensors/uptime.yaml new file mode 100644 index 0000000..5e5090c --- /dev/null +++ b/components/sensors/uptime.yaml @@ -0,0 +1,2 @@ +# platform: uptime +# name: Last System Boot \ No newline at end of file diff --git a/components/shell_commands/mount_smb_folders.yaml b/components/shell_commands/mount_smb_folders.yaml new file mode 100644 index 0000000..a3d27bf --- /dev/null +++ b/components/shell_commands/mount_smb_folders.yaml @@ -0,0 +1,5 @@ +mount_music: !secret shell_mount_music +mount_video: !secret shell_mount_video +mount_sound: !secret shell_mount_sound +mount_photo: !secret shell_mount_photo +mount_sound_again: !secret shell_mount_sound_again \ No newline at end of file diff --git a/components/switches/template.yaml b/components/switches/template.yaml new file mode 100644 index 0000000..f466034 --- /dev/null +++ b/components/switches/template.yaml @@ -0,0 +1,194 @@ +platform: template +switches: + thermostat_fan_mode: + unique_id: templateswitch.thermostat_fan_mode + friendly_name: "Thermostat Fan Mode" + value_template: >- + {% if state_attr('climate.thermostat', 'fan_min_on_time') | int(default=0) < 5 %} + {{'false'}} + {% else %} + {{ 'true' }} + {% endif %} + turn_on: + - service: ecobee.set_fan_min_on_time + data: + fan_min_on_time: 60 + turn_off: + - service: ecobee.set_fan_min_on_time + data: + fan_min_on_time: 0 + + master_bedroom_light_cycle: + unique_id: templateswitch.master_bedroom_light_cycle + friendly_name: "Master Bedroom Light Cycle" + value_template: "{{ is_state('input_boolean.master_bedroom_light_cycle', 'on') }}" + turn_on: + service: input_boolean.turn_on + data: + entity_id: input_boolean.master_bedroom_light_cycle + turn_off: + service: input_boolean.turn_off + data: + entity_id: input_boolean.master_bedroom_light_cycle + icon_template: >- + {% if is_state('input_boolean.master_bedroom_light_cycle', 'on') %} + mdi:party-popper + {% else %} + mdi:party-popper + {% endif %} + + nursery_light_cycle: + unique_id: templateswitch.nursery_light_cycle + friendly_name: "Nursery Light Cycle" + value_template: "{{ is_state('input_boolean.nursery_light_cycle', 'on') }}" + turn_on: + service: input_boolean.turn_on + data: + entity_id: input_boolean.nursery_light_cycle + turn_off: + service: input_boolean.turn_off + data: + entity_id: input_boolean.nursery_light_cycle + icon_template: >- + {% if is_state('input_boolean.nursery_light_cycle', 'on') %} + mdi:party-popper + {% else %} + mdi:party-popper + {% endif %} + + front_room_light_cycle: + unique_id: templateswitch.front_room_light_cycle + friendly_name: "Front Room Light Cycle" + value_template: "{{ is_state('input_boolean.front_room_light_cycle', 'on') }}" + turn_on: + service: input_boolean.turn_on + data: + entity_id: input_boolean.front_room_light_cycle + turn_off: + service: input_boolean.turn_off + data: + entity_id: input_boolean.front_room_light_cycle + icon_template: >- + {% if is_state('input_boolean.front_room_light_cycle', 'on') %} + mdi:party-popper + {% else %} + mdi:party-popper + {% endif %} + + great_room_light_cycle: + unique_id: templateswitch.great_room_light_cycle + friendly_name: "Great Room Light Cycle" + value_template: "{{ is_state('input_boolean.great_room_light_cycle', 'on') }}" + turn_on: + service: input_boolean.turn_on + data: + entity_id: input_boolean.great_room_light_cycle + turn_off: + service: input_boolean.turn_off + data: + entity_id: input_boolean.great_room_light_cycle + icon_template: >- + {% if is_state('input_boolean.great_room_light_cycle', 'on') %} + mdi:party-popper + {% else %} + mdi:party-popper + {% endif %} + + computer_area_light_cycle: + unique_id: templateswitch.computer_area_light_cycle + friendly_name: "Computer Area Light Cycle" + value_template: "{{ is_state('input_boolean.computer_area_light_cycle', 'on') }}" + turn_on: + service: input_boolean.turn_on + data: + entity_id: input_boolean.computer_area_light_cycle + turn_off: + service: input_boolean.turn_off + data: + entity_id: input_boolean.computer_area_light_cycle + icon_template: >- + {% if is_state('input_boolean.computer_area_light_cycle', 'on') %} + mdi:party-popper + {% else %} + mdi:party-popper + {% endif %} + + nursery_bed_lights: + unique_id: templateswitch.nursery_bed_lights + value_template: "{{ is_state('light.black_bed_wled', 'on') or is_state('light.white_bed_wled', 'on') }}" + turn_on: + service: select.select_option + target: + entity_id: + - select.black_bed_wled_preset + - select.white_bed_wled_preset + data: + option: Bouncing Balls + turn_off: + service: select.select_option + target: + entity_id: + - select.black_bed_wled_preset + - select.white_bed_wled_preset + data: + option: "Off" + icon_template: >- + mdi:led-strip-variant + + virtual_reality: + unique_id: templateswitch.virtual_reality + value_template: "{{ is_state('switch.vr_headset_plug', 'on') }}" + turn_on: + service: homeassistant.turn_on + data: + entity_id: + - switch.vr_headset_plug + turn_off: + service: homeassistant.turn_off + data: + entity_id: + - switch.vr_headset_plug + icon_template: >- + mdi:virtual-reality + + # all_chores: + # unique_id: templateswitch.all_chores + # value_template: "{{ is_state('input_boolean.grocy_next_chores', 'on')}}" + # turn_on: + # service: homeassistant.turn_on + # data: + # entity_id: + # - input_boolean.grocy_next_chores + # turn_off: + # service: homeassistant.turn_off + # data: + # entity_id: + # - input_boolean.grocy_next_chores + + # blue_room_chores: + # unique_id: templateswitch.blue_room_chores + # value_template: "{{ is_state('input_boolean.blue_room_next_chores', 'on')}}" + # turn_on: + # service: homeassistant.turn_on + # data: + # entity_id: + # - input_boolean.blue_room_next_chores + # turn_off: + # service: homeassistant.turn_off + # data: + # entity_id: + # - input_boolean.blue_room_next_chores + + # computer_area_chores: + # unique_id: templateswitch.computer_area_chores + # value_template: "{{ is_state('input_boolean.computer_area_next_chores', 'on')}}" + # turn_on: + # service: homeassistant.turn_on + # data: + # entity_id: + # - input_boolean.computer_area_next_chores + # turn_off: + # service: homeassistant.turn_off + # data: + # entity_id: + # - input_boolean.computer_area_next_chores \ No newline at end of file diff --git a/components/timers/lights.yaml b/components/timers/lights.yaml new file mode 100644 index 0000000..d1a1166 --- /dev/null +++ b/components/timers/lights.yaml @@ -0,0 +1,53 @@ +# front_room_lights: +# duration: '00:05:00' + +# kitchen_lights: +# duration: '00:05:00' + +# dining_room_lights: +# duration: '00:05:00' + +# entryway_lights: +# duration: '00:05:00' + +# nursery_lights: +# duration: '00:05:00' + +# nursery_closet_lights: +# duration: '00:05:00' + +# master_bathroom_lights: +# duration: '00:05:00' + +# master_bedroom_lights: +# duration: '00:05:00' + +# master_bedroom_closet_lights: +# duration: '00:05:00' + +# garage_lights: +# duration: '00:05:00' + +# computer_area_lights: +# duration: '00:05:00' + +# great_room_lights: +# duration: '00:05:00' + +# storage_room_lights: +# duration: '00:05:00' + +# utility_room_lights: +# duration: '00:05:00' + +# mancave_lights: +# duration: '00:05:00' + +# blue_room_lights: +# duration: '00:05:00' + +# blue_room_closet_lights: +# duration: '00:05:00' + +# furnace_room_lights: +# duration: '00:05:00' \ No newline at end of file diff --git a/components/timers/nursery_camera.yaml b/components/timers/nursery_camera.yaml new file mode 100644 index 0000000..3baf6be --- /dev/null +++ b/components/timers/nursery_camera.yaml @@ -0,0 +1,5 @@ +# nursery_camera_on_hub: +# duration: '00:10:00' + +# nursery_camera_on_tv: +# duration: '00:10:00' \ No newline at end of file diff --git a/components/tts/google.yaml b/components/tts/google.yaml new file mode 100644 index 0000000..d567b39 --- /dev/null +++ b/components/tts/google.yaml @@ -0,0 +1,5 @@ +platform: google_translate +cache: true +cache_dir: /tmp/tts +time_memory: 57600 +service_name: google_translate_say diff --git a/components/zwave/zwave_device_config.yaml b/components/zwave/zwave_device_config.yaml new file mode 100644 index 0000000..e69de29 diff --git a/configuration.yaml b/configuration.yaml new file mode 100644 index 0000000..904428a --- /dev/null +++ b/configuration.yaml @@ -0,0 +1,46 @@ +homeassistant: + external_url: !secret public_url + internal_url: !secret private_url + latitude: !secret home_lat + longitude: !secret home_long + elevation: 655 + unit_system: imperial + time_zone: !secret home_time_zone + name: Daddy's House + currency: USD + country: !secret home_country + + # whitelist_external_dirs: + # - /config/snapshots/ + # - /config/www/audio/ + + media_dirs: + local: /media/ + mnt: /mnt + #audio: /config/www/audio/ + #alarms: /config/www/audio/alarms + #lullabies: /config/www/audio/media/lullabies + #relaxing: /config/www/audio/media/relaxing + #tts: /config/www/audio/media/tts + #snapshots: /config/snapshots/ + + allowlist_external_dirs: + #- /config/image/ + - /config/tmp/ + - /config/tmp/snapshots/ + #- /config/www/audio/ + + customize: !include_dir_merge_named customizations/entities + #customize_domain: !include_dir_merge_named customizations/domains + #customize_glob: !include_dir_merge_named customizations/globs + packages: !include_dir_named components/packages + + auth_providers: + - type: homeassistant + - type: trusted_networks + trusted_networks: + - 192.168.0.0/23 + - fd00::/8 + - 127.0.0.1 + - ::1 + - 172.21.0.0/24 diff --git a/customizations/entities/beds.yaml b/customizations/entities/beds.yaml new file mode 100644 index 0000000..f0cd781 --- /dev/null +++ b/customizations/entities/beds.yaml @@ -0,0 +1,8 @@ +binary_sensor.black_bed_occupied: + icon: mdi:bed + +binary_sensor.white_bed_occupied: + icon: mdi:bed + +binary_sensor.master_bed_occupied: + icon: mdi:bed-king diff --git a/customizations/entities/binary_sensor.clint.yaml b/customizations/entities/binary_sensor.clint.yaml new file mode 100644 index 0000000..342f1cd --- /dev/null +++ b/customizations/entities/binary_sensor.clint.yaml @@ -0,0 +1,2 @@ +binary_sensor.clint: + entity_picture: "/local/Clint.jpg" \ No newline at end of file diff --git a/customizations/entities/doors.yaml b/customizations/entities/doors.yaml new file mode 100644 index 0000000..4427882 --- /dev/null +++ b/customizations/entities/doors.yaml @@ -0,0 +1,11 @@ +group.nursery_doors: + icon: mdi:door + +group.master_bedroom_doors: + icon: mdi:door + +group.master_bathroom_doors: + icon: mdi:door + +binary_sensory.patio_door_contact: + icon: mdi:door-sliding \ No newline at end of file diff --git a/customizations/entities/fansandvents.yaml b/customizations/entities/fansandvents.yaml new file mode 100644 index 0000000..0d374c2 --- /dev/null +++ b/customizations/entities/fansandvents.yaml @@ -0,0 +1,11 @@ +switch.bathroom_vent_switch: + icon: mdi:fan + +switch.utility_room_vent_switch: + icon: mdi:fan + +fan.nursery: + icon: mdi:ceiling-fan + +fan.master_bedroom: + icon: mdi:ceiling-fan \ No newline at end of file diff --git a/customizations/entities/lights.yaml b/customizations/entities/lights.yaml new file mode 100644 index 0000000..0e6b221 --- /dev/null +++ b/customizations/entities/lights.yaml @@ -0,0 +1,79 @@ +light.driveway: + icon: mdi:coach-lamp + +light.deck: + icon: mdi:coach-lamp + +light.kitchen_hue: + icon: mdi:ceiling-light-multiple + +# light.dining_room_hue: +# icon: mdi:chandelier +light.dining_room_switch: + icon: mdi:chandelier + +light.dining_room_1: + icon: mdi:lightbulb-variant-outline + +light.dining_room_2: + icon: mdi:lightbulb-variant-outline + +light.dining_room_3: + icon: mdi:lightbulb-variant-outline + +light.entryway_hue: + icon: mdi:ceiling-light + +light.nursery_ceiling_hue: + icon: mdi:ceiling-fan-light + +light.master_bedroom_ceiling_hue: + icon: mdi:ceiling-fan-light + +light.front_room_hue: + icon: mdi:wall-sconce-flat + +light.front_room_splash_left: + icon: mdi:wall-sconce-flat + +light.front_room_splash_right: + icon: mdi:wall-sconce-flat + +light.kitchen_overhead: + icon: mdi:light-recessed + +light.bar: + icon: mdi:ceiling-light + +light.master_bathroom_hue: + icon: mdi:vanity-light + +light.master_bathroom_vanity_hue: + icon: mdi:vanity-light + +light.front_porch_overhead: + icon: mdi:light-recessed + +light.computer_area_hue: + icon: mdi:light-recessed + +light.great_room_hue: + icon: mdi:light-recessed + +light.mancave: + icon: mdi:dome-light + +light.blue_room_hue: + icon: mdi:dome-light + +light.blue_room_closet: + icon: mdi:dome-light + +light.furnace_room: + icon: mdi:lightbulb-variant + +light.garage_overhead: + icon: mdi:lightbulb-multiple + +light.utility_room_vanity: + icon: mdi:vanity-light \ No newline at end of file diff --git a/customizations/entities/media_players.yaml b/customizations/entities/media_players.yaml new file mode 100644 index 0000000..1f3eade --- /dev/null +++ b/customizations/entities/media_players.yaml @@ -0,0 +1,69 @@ +media_player.all_downstairs_speakers: + icon: mdi:speaker-multiple + +media_player.all_public_speakers: + icon: mdi:speaker-multiple + +media_player.all_speakers: + icon: mdi:speaker-multiple + +media_player.all_upstairs_speakers: + icon: mdi:speaker-multiple + +media_player.announcements: + icon: mdi:speaker-multiple + +media_player.bathroom_mini: + icon: mdi:cast-audio + +media_player.utility_room_clock: + icon: mdi:cast-audio + +media_player.deck: + icon: mdi:cast-audio + +media_player.downstairs_public: + icon: mdi:speaker-multiple + +media_player.front_room_hub: + icon: mdi:cast-variant + +media_player.computer_area_hub: + icon: mdi:cast-variant + +media_player.front_yard: + icon: mdi:speaker-multiple + +media_player.garage: + icon: mdi:cast-audio + +media_player.great_room: + icon: mdi:cast-audio + +media_player.inside_and_outside: + icon: mdi:speaker-multiple + +media_player.kitchen: + icon: mdi:cast-audio + +media_player.master_bedroom_clock: + icon: mdi:cast-audio + +media_player.master_bedroom_tv: + icon: mdi:cast-variant + +media_player.nursery_hub: + icon: mdi:cast-variant + +media_player.outside: + icon: mdi:speaker-multiple + +media_player.upstairs_public: + icon: mdi:speaker-multiple + +media_player.downstairs_roku: + icon: mdi:remote-tv + +media_player.front_room_tv: + icon: mdi:remote-tv + diff --git a/customizations/entities/people_groups.yaml b/customizations/entities/people_groups.yaml new file mode 100644 index 0000000..3466711 --- /dev/null +++ b/customizations/entities/people_groups.yaml @@ -0,0 +1,21 @@ +group.person_clint: + icon: mdi:cellphone + +group.person_emmett: + icon: mdi:tablet + +group.person_bridget: + icon: mdi:tablet + +group.person_kristy: + icon: mdi:cellphone + +group.person_marshall: + icon: mdi:cellphone + +group.person_tess: + icon: mdi:tablet + +group.person_ebin: + icon: mdi:tablet + diff --git a/customizations/entities/people_pictures.yaml b/customizations/entities/people_pictures.yaml new file mode 100644 index 0000000..007a231 --- /dev/null +++ b/customizations/entities/people_pictures.yaml @@ -0,0 +1,41 @@ +input_text.person_emmett: + entity_picture: /local/image/4b8a4e30436d64121be7b0b59f857877/512x512 + +input_text.person_bridget: + entity_picture: /local/image/4ce4447957c07525227b0574cbb1e40b/512x512 + +input_text.person_clint: + entity_picture: /local/image/ca19fa93140bf891d9a871858d910c69/512x512 + +input_text.person_ebin: + entity_picture: /local/image/80720d36ba13e7993b992ee2c8c76144/512x512 + +input_text.person_kristy: + entity_picture: /local/image/7dde65b227b3d96cb4546c9c2447db5d/512x512 + +input_text.person_tess: + entity_picture: /local/image/929bf1b71232216f9ed31d8dbdbd7a54/512x512 + +input_text.person_marshall: + entity_picture: /local/image/29196e13641d83e1c54656d88b272c7c/512x512 + +input_boolean.emmett_home: + entity_picture: /local/image/4b8a4e30436d64121be7b0b59f857877/512x512 + +input_boolean.bridget_home: + entity_picture: /local/image/4ce4447957c07525227b0574cbb1e40b/512x512 + +input_boolean.clint_home: + entity_picture: /local/image/ca19fa93140bf891d9a871858d910c69/512x512 + +input_boolean.ebin_home: + entity_picture: /local/image/80720d36ba13e7993b992ee2c8c76144/512x512 + +input_boolean.kristy_home: + entity_picture: /local/image/7dde65b227b3d96cb4546c9c2447db5d/512x512 + +input_boolean.tess_home: + entity_picture: /local/image/752c040d8d4b5678f355755f9445256c/512x512 + +input_boolean.marshall_home: + entity_picture: /local/image/29196e13641d83e1c54656d88b272c7c/512x512 \ No newline at end of file diff --git a/customizations/entities/pixel_7.yaml b/customizations/entities/pixel_7.yaml new file mode 100644 index 0000000..b69e963 --- /dev/null +++ b/customizations/entities/pixel_7.yaml @@ -0,0 +1,2 @@ +device_tracker.pixel_7: + icon: mdi:cellphone diff --git a/customizations/entities/plants.yaml b/customizations/entities/plants.yaml new file mode 100644 index 0000000..5758c6f --- /dev/null +++ b/customizations/entities/plants.yaml @@ -0,0 +1,53 @@ +# plant.evening_star: +# entity_picture: /local/image/evening_star.jpg +# friendly_name: Evening Star + +plant.plant_sensor_cea4: + entity_picture: /local/image/pepper_planter.jpg + friendly_name: Pepper Planter (CE:A4) + +# plant.plant_sensor_3eae: +# entity_picture: /local/image/golden_deck_box.jpg +# friendly_name: Golden Deck Box (3E:AE) + +plant.plant_sensor_3eae: + entity_picture: /local/image/lavender_planter.jpg + friendly_name: Lavender Planter (3E:AE) + +plant.plant_sensor_3eb0: + entity_picture: /local/image/manly_deck_box.jpg + friendly_name: Manly Deck Box (3E:B0) + +# plant.pansy: +# entity_picture: /local/image/pansy.jpg +# friendly_name: Pansy + +plant.fineoffset_wh51_00f935: + entity_picture: /local/image/daisy.jpg + friendly_name: Daisies (F935) + +plant.fineoffset_wh51_0ce593: + entity_picture: /local/image/hosta.jpg + friendly_name: Hostas (E593) + +plant.fineoffset_wh51_0d1e11: + entity_picture: /local/image/cacti_planter.jpg + friendly_name: Cacti Planter (1E11) + +## Groups + +group.front_yard_plants: + entity_picture: /local/image/hosta.jpg + friendly_name: Front Yard Plants + +group.back_yard_plants: + entity_picture: /local/image/daisy.jpg + friendly_name: Back Yard Plants + +group.indoor_plants: + entity_picture: /local/image/cacti_planter.jpg + friendly_name: Indoor Plants + +group.outdoor_plants: + entity_picture: /local/image/daisy.jpg + friendly_name: Outdoor Plants diff --git a/customizations/entities/random_binary_sensors.yaml b/customizations/entities/random_binary_sensors.yaml new file mode 100644 index 0000000..7fab28a --- /dev/null +++ b/customizations/entities/random_binary_sensors.yaml @@ -0,0 +1,14 @@ +binary_sensor.computer_chair_contact_occupied: + icon: mdi:chair-rolling + +# binary_sensor.octoprint_printing: +# icon: mdi:printer-3d-nozzle + +binary_sensor.garage_door: + device_class: garage_door + +binary_sensor.last_chance_to_mow: + icon: mdi:weather-sunset-down + +binary_sensor.too_late_to_mow: + icon: mdi:weather-sunset \ No newline at end of file diff --git a/customizations/entities/random_sensors.yaml b/customizations/entities/random_sensors.yaml new file mode 100644 index 0000000..0b6b019 --- /dev/null +++ b/customizations/entities/random_sensors.yaml @@ -0,0 +1,2 @@ +# input_number.last_mowed: +# icon: mdi:mower-bag diff --git a/customizations/entities/script_ambientsounds.yaml b/customizations/entities/script_ambientsounds.yaml new file mode 100644 index 0000000..410aa2d --- /dev/null +++ b/customizations/entities/script_ambientsounds.yaml @@ -0,0 +1,3 @@ +script.ambientsounds: + icon: mdi:play + friendly_name: Start Playing \ No newline at end of file diff --git a/esphome/.gitignore b/esphome/.gitignore new file mode 100644 index 0000000..0bbf89c --- /dev/null +++ b/esphome/.gitignore @@ -0,0 +1,10 @@ +# Gitignore settings for ESPHome +# This is an example and may include too much for your use-case. +# You can modify this file to suit your needs. +/.esphome/ +**/.pioenvs/ +**/.piolibdeps/ +**/lib/ +**/src/ +**/platformio.ini +/secrets.yaml diff --git a/esphome/CascadiaMonoPL.ttf b/esphome/CascadiaMonoPL.ttf new file mode 100644 index 0000000..acab3f3 Binary files /dev/null and b/esphome/CascadiaMonoPL.ttf differ diff --git a/esphome/black-bed.yaml b/esphome/black-bed.yaml new file mode 100644 index 0000000..e51008c --- /dev/null +++ b/esphome/black-bed.yaml @@ -0,0 +1,24 @@ +substitutions: + devicename: black-bed + friendly_name: Black Bed + entity_name: black_bed + platform: ESP8266 + board: nodemcuv2 + static_ip: !secret black-bed-ip + dout_pin: !secret black-bed-dout + clk_pin: !secret black-bed-clk + loadcell_zero: !secret black-bed-zero + loadcell_load: !secret black-bed-load + loadcell_weight: !secret black-bed-weight + +# Enable logging +logger: + level: DEBUG + logs: + sensor: INFO + hx711: INFO + +packages: + wifi: !include common/wifi.yaml + device_base: !include common/device_base.yaml + hx711: !include common/hx711_single_verbose.yaml \ No newline at end of file diff --git a/esphome/common/binary_sensor/status_sensor.config.yaml b/esphome/common/binary_sensor/status_sensor.config.yaml new file mode 100644 index 0000000..69d3b74 --- /dev/null +++ b/esphome/common/binary_sensor/status_sensor.config.yaml @@ -0,0 +1,3 @@ +platform: status +name: "${friendly_name} Status" +id: ${entity_name}_status \ No newline at end of file diff --git a/esphome/common/ble_beacon.yaml b/esphome/common/ble_beacon.yaml new file mode 100644 index 0000000..cbd5382 --- /dev/null +++ b/esphome/common/ble_beacon.yaml @@ -0,0 +1,3 @@ +esp32_ble_beacon: + type: iBeacon + uuid: ${uuid} \ No newline at end of file diff --git a/esphome/common/ble_proxy.yaml b/esphome/common/ble_proxy.yaml new file mode 100644 index 0000000..e8cd27e --- /dev/null +++ b/esphome/common/ble_proxy.yaml @@ -0,0 +1,8 @@ +esp32_ble_tracker: + scan_parameters: + interval: 1100ms + window: 1100ms + active: true + +bluetooth_proxy: + active: true \ No newline at end of file diff --git a/esphome/common/ble_tracker.yaml b/esphome/common/ble_tracker.yaml new file mode 100644 index 0000000..5dca16b --- /dev/null +++ b/esphome/common/ble_tracker.yaml @@ -0,0 +1,8 @@ +esp32_ble_tracker: + +binary_sensor: + - platform: ble_presence + ibeacon_uuid: '601c742f-2b19-ed3c-f5fc-0bb31d6c2eac' + ibeacon_major: 100 + ibeacon_minor: 1 + name: "${friendly_name} Pixel 4" \ No newline at end of file diff --git a/esphome/common/board/nodemcu-32s.yaml b/esphome/common/board/nodemcu-32s.yaml new file mode 100644 index 0000000..a2591c7 --- /dev/null +++ b/esphome/common/board/nodemcu-32s.yaml @@ -0,0 +1,5 @@ +esp32_ble_tracker: + +esp32_ble_beacon: + type: iBeacon + uuid: ${uuid} \ No newline at end of file diff --git a/esphome/common/button/restart_button.config.yaml b/esphome/common/button/restart_button.config.yaml new file mode 100644 index 0000000..ab3c90f --- /dev/null +++ b/esphome/common/button/restart_button.config.yaml @@ -0,0 +1,4 @@ +platform: restart +name: "${friendly_name} Restart" +id: ${entity_name}_restart +disabled_by_default: false \ No newline at end of file diff --git a/esphome/common/complex_esp32_base.yaml b/esphome/common/complex_esp32_base.yaml new file mode 100644 index 0000000..e9cfdf6 --- /dev/null +++ b/esphome/common/complex_esp32_base.yaml @@ -0,0 +1,38 @@ +esp32: + board: nodemcu-32s + variant: esp32 + framework: + type: arduino + version: 2.0.2 + source: https://github.com/espressif/arduino-esp32.git#2.0.2 + platform_version: https://github.com/platformio/platform-espressif32.git#feature/arduino-upstream + + +esphome: + platformio_options: + build_flags: + - -DCONFIG_ARDUINO_LOOP_STACK_SIZE=32768 + name: ${devicename} + +# Enable logging +logger: + +# Time is managed via SNTP + +# Enable Home Assistant API +api: + reboot_timeout: 15min + +ota: + +binary_sensor: + - <<: !include binary_sensor/status_sensor.config.yaml + +button: + - <<: !include button/restart_button.config.yaml + +sensor: + - <<: !include sensor/uptime_sensor.config.yaml + +#text_sensor: +# - <<: !include text_sensor/version_sensor.config.yaml \ No newline at end of file diff --git a/esphome/common/device_base.yaml b/esphome/common/device_base.yaml new file mode 100644 index 0000000..4b71e1e --- /dev/null +++ b/esphome/common/device_base.yaml @@ -0,0 +1,30 @@ +esphome: + name: ${devicename} + platform: ${platform} + board: ${board} + +# Enable logging +logger: + +# Sync time with Home Assistant. +time: + - platform: homeassistant + id: homeassistant_time + +# Enable Home Assistant API +api: + reboot_timeout: 15min + +ota: + +binary_sensor: + - <<: !include binary_sensor/status_sensor.config.yaml + +button: + - <<: !include button/restart_button.config.yaml + +sensor: + - <<: !include sensor/uptime_sensor.config.yaml + +#text_sensor: +# - <<: !include text_sensor/version_sensor.config.yaml diff --git a/esphome/common/ethernet.yaml b/esphome/common/ethernet.yaml new file mode 100644 index 0000000..1f8654b --- /dev/null +++ b/esphome/common/ethernet.yaml @@ -0,0 +1,18 @@ +ethernet: + id: eth + type: LAN8720 + mdc_pin: GPIO23 + mdio_pin: GPIO18 + clk_mode: GPIO17_OUT + phy_addr: 0 + power_pin: GPIO5 + + manual_ip: + static_ip: ${static_ip} + gateway: !secret iot_default_gateway + subnet: !secret iot_subnet_mask + dns1: !secret iot_default_dns1 + +#text_sensor: + #- <<: !include text_sensor/ethernet_ip_address.config.yaml + #- <<: !include text_sensor/ethernet_mac_address.config.yaml \ No newline at end of file diff --git a/esphome/common/hx711_double.yaml b/esphome/common/hx711_double.yaml new file mode 100644 index 0000000..d2f0021 --- /dev/null +++ b/esphome/common/hx711_double.yaml @@ -0,0 +1,371 @@ +globals: + - id: left_initial_zero + type: float + restore_value: yes + # NOTE: make sure to align this value to the one used in "calibrate_linear" below! + initial_value: ${left_loadcell_zero} + + - id: right_initial_zero + type: float + restore_value: yes + # NOTE: make sure to align this value to the one used in "calibrate_linear" below! + initial_value: ${right_loadcell_zero} + + - id: left_auto_tare_difference + type: float + restore_value: yes + initial_value: '0' + + - id: right_auto_tare_difference + type: float + restore_value: yes + initial_value: '0' + + - id: left_manual_tare_flag + type: bool + restore_value: no + initial_value: 'false' + + - id: right_manual_tare_flag + type: bool + restore_value: no + initial_value: 'false' + + - id: auto_tare_enabled + type: bool + restore_value: yes + initial_value: 'true' + + - id: occupancy_forced + type: bool + restore_value: yes + initial_value: 'false' + +sensor: + - platform: homeassistant + entity_id: input_number.${entity_name}_left_occupied + internal: true + id: left_occupied + + - platform: homeassistant + entity_id: input_number.${entity_name}_right_occupied + internal: true + id: right_occupied + + - platform: template + name: "${friendly_name} Left Raw Value" + lambda: |- + return id(hx711_left_value_raw).raw_state; + unit_of_measurement: w + update_interval: 1s + state_class: measurement + disabled_by_default: true + + - platform: template + name: "${friendly_name} Right Raw Value" + lambda: |- + return id(hx711_right_value_raw).raw_state; + unit_of_measurement: w + update_interval: 1s + state_class: measurement + disabled_by_default: true + + - platform: template + name: "${friendly_name} Left Auto Tare" + lambda: |- + return id(left_auto_tare_difference); + unit_of_measurement: w + update_interval: 1s + state_class: measurement + disabled_by_default: true + + - platform: template + name: "${friendly_name} Right Auto Tare" + lambda: |- + return id(right_auto_tare_difference); + unit_of_measurement: w + update_interval: 1s + state_class: measurement + disabled_by_default: true + + - platform: template + name: "${friendly_name} Left Initial Zero" + lambda: |- + return id(left_initial_zero); + unit_of_measurement: w + state_class: measurement + update_interval: 60s + disabled_by_default: true + + - platform: template + name: "${friendly_name} Right Initial Zero" + lambda: |- + return id(right_initial_zero); + unit_of_measurement: w + state_class: measurement + update_interval: 60s + disabled_by_default: true + + # Left RAW Scale input + - platform: hx711 + id: hx711_left_value_raw + internal: True + dout_pin: ${left_dout_pin} + clk_pin: ${left_clk_pin} + gain: 128 + accuracy_decimals: 3 + update_interval: 0.2s + filters: + - lambda: !lambda |- + if (x > 8388000.0) return {}; + if (x < -8388000.0) return {}; + return x; + - sliding_window_moving_average: + window_size: 3 + send_every: 1 + on_value: + then: + - sensor.template.publish: + id: hx711_left_value + state: !lambda 'return id(hx711_left_value_raw).state;' + - if: + condition: + and: + - lambda: 'return id(auto_tare_enabled);' + # current smart scale value is below approx. 10KG (raw value -375000 aka nobody is standing on the scale + - lambda: 'return id(hx711_left_value).state < 10.0;' + then: + - if: + condition: + # current raw scale value is below expected zero value + - lambda: 'return id(hx711_left_value_raw).state < (id(left_initial_zero) - id(left_auto_tare_difference));' + then: + # INcrease Auto-Tare offset to slowly align real zero value with expected zero value + - lambda: |- + id(left_auto_tare_difference) += 10; + else: + # DEcrease Auto-Tare offset to slowly align real zero value with expected zero value + - lambda: |- + id(left_auto_tare_difference) -= 10; + + # Right RAW Scale input + - platform: hx711 + id: hx711_right_value_raw + internal: True + dout_pin: ${right_dout_pin} + clk_pin: ${right_clk_pin} + gain: 128 + accuracy_decimals: 3 + update_interval: 0.2s + filters: + - lambda: !lambda |- + if (x > 8388000.0) return {}; + if (x < -8388000.0) return {}; + return x; + - sliding_window_moving_average: + window_size: 3 + send_every: 1 + on_value: + then: + - sensor.template.publish: + id: hx711_right_value + state: !lambda 'return id(hx711_right_value_raw).state;' + - if: + condition: + and: + - lambda: 'return id(auto_tare_enabled);' + # current smart scale value is below approx. 10KG (raw value -375000 aka nobody is standing on the scale + - lambda: 'return id(hx711_right_value).state < 10.0;' + then: + - if: + condition: + # current raw scale value is below expected zero value + - lambda: 'return id(hx711_right_value_raw).state < (id(right_initial_zero) - id(right_auto_tare_difference));' + then: + # INcrease Auto-Tare offset to slowly align real zero value with expected zero value + - lambda: |- + id(right_auto_tare_difference) += 10; + else: + # DEcrease Auto-Tare offset to slowly align real zero value with expected zero value + - lambda: |- + id(right_auto_tare_difference) -= 10; + + # Left Mapped value to lbs + - platform: template + id: hx711_left_value + name: "${friendly_name} Left Weight" + internal: False + filters: + # apply auto_tare difference + - lambda: 'return x + id(left_auto_tare_difference);' + # apply rough calibration + - calibrate_linear: + # retrieve these values by evaluating the raw values with loads of known mass. + # note that a bigger difference between measurements usually results in higher resolution, + # so measure 0 Kg and the highest known mass you have (like f.ex. your own weight, measured by a normal scale with good accuracy) + # 1221300 difference between the two + # was at -23800 for the longest time + - ${left_loadcell_zero} -> 0 + - ${left_loadcell_load} -> ${left_loadcell_weight} + # map values below 0.1 to 0 (to decrease value changes due to random fluctuation) + - lambda: |- + if (x <= 0.1 || id(hx711_left_error).state) { + return 0.0; + } else { + return x; + } + unit_of_measurement: lbs + accuracy_decimals: 0 + update_interval: 0.5s + state_class: measurement + + # Right Mapped value to lbs + - platform: template + id: hx711_right_value + name: "${friendly_name} Right Weight" + internal: False + filters: + # apply auto_tare difference + - lambda: 'return x + id(right_auto_tare_difference);' + # apply rough calibration + - calibrate_linear: + # retrieve these values by evaluating the raw values with loads of known mass. + # note that a bigger difference between measurements usually results in higher resolution, + # so measure 0 Kg and the highest known mass you have (like f.ex. your own weight, measured by a normal scale with good accuracy) + # 1221300 difference between the two + # was at -23800 for the longest time + - ${right_loadcell_zero} -> 0 + - ${right_loadcell_load} -> ${right_loadcell_weight} + # map values below 0.1 to 0 (to decrease value changes due to random fluctuation) + - lambda: |- + if (x <= 0.1 || id(hx711_right_error).state) { + return 0.0; + } else { + return x; + } + unit_of_measurement: lbs + accuracy_decimals: 0 + update_interval: 0.5s + state_class: measurement + + - platform: template + name: "${friendly_name} Combined" + id: combined_weight + update_interval: 1s + unit_of_measurement: lbs + state_class: measurement + lambda: |- + return id(hx711_left_value).state + id(hx711_right_value).state; + +binary_sensor: + - platform: template + name: "${friendly_name} Left Occupied" + id: is_left_occupied + lambda: |- + if ( + id(hx711_left_value).state >= id(left_occupied).state + ) { + return true; + } else { + return false; + } + + - platform: template + name: "${friendly_name} Right Occupied" + id: is_right_occupied + lambda: |- + if ( + id(hx711_right_value).state >= id(right_occupied).state + ) { + return true; + } else { + return false; + } + + - platform: template + name: "${friendly_name} Occupied" + lambda: |- + if ( id(is_left_occupied).state || id(is_right_occupied).state ) + { + return true; + } else { + return false; + } + + - platform: template + name: "${friendly_name} Left HX711 Error" + id: hx711_left_error + device_class: problem + lambda: |- + if ( + id(hx711_left_value_raw).raw_state > 8388000.0 || id(hx711_left_value_raw).raw_state < -8388000.0 + ) { + return true; + } else { + return false; + } + + - platform: template + name: "${friendly_name} Right HX711 Error" + id: hx711_right_error + device_class: problem + lambda: |- + if ( + id(hx711_right_value_raw).raw_state > 8388000.0 || id(hx711_right_value_raw).raw_state < -8388000.0 + ) { + return true; + } else { + return false; + } + + - platform: template + name: "${friendly_name} HX711 Error" + id: hx711_error + device_class: problem + lambda: |- + if ( + id(hx711_left_error).state || id(hx711_right_error).state + ) { + return true; + } else { + return false; + } + +switch: + - platform: template + id: auto_tare + name: "${friendly_name} Auto Tare" + lambda: |- + return id(auto_tare_enabled); + turn_on_action: + - lambda: |- + id(auto_tare_enabled) = true; + turn_off_action: + - lambda: |- + id(auto_tare_enabled) = false; + + - platform: template + id: left_manual_tare + name: "${friendly_name} Left Manual Tare" + lambda: |- + return id(left_manual_tare_flag); + turn_on_action: + - lambda: |- + id(left_auto_tare_difference) = id(left_initial_zero) - id(hx711_left_value_raw).state; + - switch.turn_off: left_manual_tare + turn_off_action: + - lambda: |- + id(left_manual_tare_flag) = false; + + - platform: template + id: right_manual_tare + name: "${friendly_name} Right Manual Tare" + lambda: |- + return id(right_manual_tare_flag); + turn_on_action: + - lambda: |- + id(right_auto_tare_difference) = id(right_initial_zero) - id(hx711_right_value_raw).state; + - switch.turn_off: right_manual_tare + turn_off_action: + - lambda: |- + id(right_manual_tare_flag) = false; \ No newline at end of file diff --git a/esphome/common/hx711_single.yaml b/esphome/common/hx711_single.yaml new file mode 100644 index 0000000..c2dc581 --- /dev/null +++ b/esphome/common/hx711_single.yaml @@ -0,0 +1,205 @@ +globals: + - id: initial_zero + type: float + restore_value: yes + # NOTE: make sure to align this value to the one used in "calibrate_linear" below! + initial_value: ${loadcell_zero} + + - id: auto_tare_enabled + type: bool + restore_value: yes + initial_value: 'true' + + - id: auto_tare_difference + type: float + restore_value: yes + initial_value: '0' + + - id: occupancy_forced + type: bool + restore_value: no + initial_value: 'false' + +sensor: + - platform: homeassistant + entity_id: input_number.${entity_name}_occupied + internal: true + id: occupied + + - platform: template + internal: false + name: "${friendly_name} Raw Value" + lambda: |- + return id(hx711_value_raw).raw_state; + filters: + - filter_out: nan + - throttle_average: 30s + - heartbeat: 60s + - delta: 1000 + unit_of_measurement: w + update_interval: 1s + state_class: measurement + disabled_by_default: true + icon: mdi:scale-unbalanced + + - platform: template + internal: false + name: "${friendly_name} Auto Tare" + lambda: |- + return id(auto_tare_difference); + unit_of_measurement: w + update_interval: 1s + state_class: measurement + disabled_by_default: true + icon: mdi:scale-balance + + - platform: template + internal: true + name: "${friendly_name} Initial Zero" + lambda: |- + return id(initial_zero); + unit_of_measurement: w + state_class: measurement + update_interval: 60s + disabled_by_default: true + + # RAW Scale input + - platform: hx711 + id: hx711_value_raw + internal: true + dout_pin: ${dout_pin} + clk_pin: ${clk_pin} + gain: 128 + accuracy_decimals: 3 + update_interval: 0.2s + filters: + - lambda: !lambda |- + if (x > 8388000.0) return {}; + if (x < -8388000.0) return {}; + return x; + - sliding_window_moving_average: + window_size: 3 + send_every: 1 + on_value: + then: + - sensor.template.publish: + id: hx711_value + state: !lambda 'return id(hx711_value_raw).state;' + - if: + condition: + and: + - lambda: 'return id(auto_tare_enabled);' + # current smart scale value is below approx. 10KG (raw value -375000 aka nobody is standing on the scale + - lambda: 'return id(hx711_value).state < 10.0;' + then: + - if: + condition: + # current raw scale value is below expected zero value + - lambda: 'return id(hx711_value_raw).state < (id(initial_zero) - id(auto_tare_difference));' + then: + # INcrease Auto-Tare offset to slowly align real zero value with expected zero value + - lambda: |- + id(auto_tare_difference) += 10; + else: + # DEcrease Auto-Tare offset to slowly align real zero value with expected zero value + - lambda: |- + id(auto_tare_difference) -= 10; + + # Mapped value to lbs + - platform: template + id: hx711_value + name: "${friendly_name} Weight" + internal: False + icon: mdi:weight-pound + unit_of_measurement: lbs + accuracy_decimals: 0 + update_interval: 0.5s + state_class: measurement + filters: + # apply auto_tare difference + - lambda: 'return x + id(auto_tare_difference);' + # apply rough calibration + - calibrate_linear: + # retrieve these values by evaluating the raw values with loads of known mass. + # note that a bigger difference between measurements usually results in higher resolution, + # so measure 0 Kg and the highest known mass you have (like f.ex. your own weight, measured by a normal scale with good accuracy) + # 1221300 difference between the two + # was at -23800 for the longest time + - ${loadcell_zero} -> 0 + - ${loadcell_load} -> ${loadcell_weight} + # map values below 0.1 to 0 (to decrease value changes due to random fluctuation) + - lambda: |- + if (x <= 0.1 || id(hx711_error).state) { + return 0.0; + } else { + return x; + } + +binary_sensor: + - platform: template + device_class: occupancy + name: "${friendly_name} Occupied" + icon: mdi:bed + lambda: |- + if ( + id(hx711_value).state >= id(occupied).state || id(occupancy_forced) + ) { + return true; + } else { + return false; + } + + - platform: template + name: "${friendly_name} HX711 Error" + id: hx711_error + device_class: problem + lambda: |- + if ( + id(hx711_value_raw).raw_state > 8388000.0 || id(hx711_value_raw).raw_state < -8388000.0 + ) { + return true; + } else { + return false; + } + +switch: + - platform: template + id: force_occupancy + name: "${friendly_name} Force Occupancy" + lambda: |- + return id(occupancy_forced); + turn_on_action: + - lambda: |- + id(occupancy_forced) = true; + turn_off_action: + - lambda: |- + id(occupancy_forced) = false; + + - platform: template + id: auto_tare + # optimistic: true + # assumed_state: true + name: "${friendly_name} Auto Tare" + lambda: |- + return id(auto_tare_enabled); + turn_on_action: + - lambda: |- + id(auto_tare_enabled) = true; + turn_off_action: + - lambda: |- + id(auto_tare_enabled) = false; + +button: + - platform: template + id: manual_tare + name: "${friendly_name} Manual Tare" + on_press: + - lambda: |- + id(auto_tare_difference) = id(initial_zero) - id(hx711_value_raw).state; + + - platform: template + id: reset_tare + name: "${friendly_name} Reset Tare" + on_press: + - lambda: |- + id(auto_tare_difference) = 0; \ No newline at end of file diff --git a/esphome/common/hx711_single_verbose.yaml b/esphome/common/hx711_single_verbose.yaml new file mode 100644 index 0000000..3f9c407 --- /dev/null +++ b/esphome/common/hx711_single_verbose.yaml @@ -0,0 +1,192 @@ +globals: + - id: initial_zero + type: float + restore_value: yes + # NOTE: make sure to align this value to the one used in "calibrate_linear" below! + initial_value: ${loadcell_zero} + + - id: auto_tare_enabled + type: bool + restore_value: yes + initial_value: 'true' + + - id: auto_tare_difference + type: float + restore_value: yes + initial_value: '0' + + - id: occupancy_forced + type: bool + restore_value: no + initial_value: 'false' + +sensor: + - platform: homeassistant + entity_id: input_number.${entity_name}_occupied + internal: true + id: occupied + + - platform: template + name: "${friendly_name} Raw Value" + lambda: |- + return id(hx711_value_raw).raw_state; + unit_of_measurement: w + update_interval: 1s + state_class: measurement + + - platform: template + name: "${friendly_name} Auto Tare" + lambda: |- + return id(auto_tare_difference); + unit_of_measurement: w + update_interval: 1s + state_class: measurement + + - platform: template + name: "${friendly_name} Initial Zero" + lambda: |- + return id(initial_zero); + unit_of_measurement: w + state_class: measurement + update_interval: 60s + + # RAW Scale input + - platform: hx711 + id: hx711_value_raw + internal: True + dout_pin: ${dout_pin} + clk_pin: ${clk_pin} + gain: 128 + accuracy_decimals: 3 + update_interval: 0.2s + filters: + - lambda: !lambda |- + if (x > 8388000.0) return {}; + if (x < -8388000.0) return {}; + return x; + - sliding_window_moving_average: + window_size: 15 + send_every: 15 + on_value: + then: + - sensor.template.publish: + id: hx711_value + state: !lambda 'return id(hx711_value_raw).state;' + - if: + condition: + and: + - lambda: 'return id(auto_tare_enabled);' + # current smart scale value is below approx. 10KG (raw value -375000 aka nobody is standing on the scale + - lambda: 'return id(hx711_value).state < 10.0;' + then: + - if: + condition: + # current raw scale value is below expected zero value + - lambda: 'return id(hx711_value_raw).state < (id(initial_zero) - id(auto_tare_difference));' + then: + # INcrease Auto-Tare offset to slowly align real zero value with expected zero value + - lambda: |- + id(auto_tare_difference) += 10; + else: + # DEcrease Auto-Tare offset to slowly align real zero value with expected zero value + - lambda: |- + id(auto_tare_difference) -= 10; + + # Mapped value to lbs + - platform: template + id: hx711_value + name: "${friendly_name} Weight" + internal: False + filters: + # apply auto_tare difference + - lambda: 'return x + id(auto_tare_difference);' + # apply rough calibration + - calibrate_linear: + # retrieve these values by evaluating the raw values with loads of known mass. + # note that a bigger difference between measurements usually results in higher resolution, + # so measure 0 Kg and the highest known mass you have (like f.ex. your own weight, measured by a normal scale with good accuracy) + # 1221300 difference between the two + # was at -23800 for the longest time + - ${loadcell_zero} -> 0 + - ${loadcell_load} -> ${loadcell_weight} + # map values below 0.1 to 0 (to decrease value changes due to random fluctuation) + - lambda: |- + if (x <= 0.1 || id(hx711_error).state) { + return 0.0; + } else { + return x; + } + + unit_of_measurement: lbs + accuracy_decimals: 0 + update_interval: 0.5s + state_class: measurement + +binary_sensor: + - platform: template + device_class: occupancy + name: "${friendly_name} Occupied" + icon: mdi:bed + lambda: |- + if ( + id(hx711_value).state >= id(occupied).state || id(occupancy_forced) + ) { + return true; + } else { + return false; + } + + - platform: template + name: "${friendly_name} HX711 Error" + id: hx711_error + device_class: problem + lambda: |- + if ( + id(hx711_value_raw).raw_state > 8388000.0 || id(hx711_value_raw).raw_state < -8388000.0 + ) { + return true; + } else { + return false; + } + +switch: + - platform: template + id: force_occupancy + name: "${friendly_name} Force Occupancy" + lambda: |- + return id(occupancy_forced); + turn_on_action: + - lambda: |- + id(occupancy_forced) = true; + turn_off_action: + - lambda: |- + id(occupancy_forced) = false; + + - platform: template + id: auto_tare + # optimistic: true + # assumed_state: true + name: "${friendly_name} Auto Tare" + lambda: |- + return id(auto_tare_enabled); + turn_on_action: + - lambda: |- + id(auto_tare_enabled) = true; + turn_off_action: + - lambda: |- + id(auto_tare_enabled) = false; + +button: + - platform: template + id: manual_tare + name: "${friendly_name} Manual Tare" + on_press: + - lambda: |- + id(auto_tare_difference) = id(initial_zero) - id(hx711_value_raw).state; + + - platform: template + id: reset_tare + name: "${friendly_name} Reset Tare" + on_press: + - lambda: |- + id(auto_tare_difference) = 0; \ No newline at end of file diff --git a/esphome/common/olimex-evb.yaml b/esphome/common/olimex-evb.yaml new file mode 100644 index 0000000..9538845 --- /dev/null +++ b/esphome/common/olimex-evb.yaml @@ -0,0 +1,16 @@ +ethernet: + id: eth + type: LAN8720 + mdc_pin: GPIO23 + mdio_pin: GPIO18 + clk_mode: GPIO0_IN + phy_addr: 0 + + manual_ip: + static_ip: ${static_ip} + gateway: !secret iot_default_gateway + subnet: !secret iot_subnet_mask + +#text_sensor: + #- <<: !include text_sensor/ethernet_ip_address.config.yaml + #- <<: !include text_sensor/ethernet_mac_address.config.yaml \ No newline at end of file diff --git a/esphome/common/olimex-poe.yaml b/esphome/common/olimex-poe.yaml new file mode 100644 index 0000000..711fd8c --- /dev/null +++ b/esphome/common/olimex-poe.yaml @@ -0,0 +1,18 @@ +ethernet: + id: eth + type: LAN8720 + mdc_pin: GPIO23 + mdio_pin: GPIO18 + clk_mode: GPIO17_OUT + phy_addr: 0 + power_pin: GPIO12 + + manual_ip: + static_ip: ${static_ip} + gateway: !secret iot_default_gateway + subnet: !secret iot_subnet_mask + dns1: !secret iot_default_dns1 + +#text_sensor: + #- <<: !include text_sensor/ethernet_ip_address.config.yaml + #- <<: !include text_sensor/ethernet_mac_address.config.yaml \ No newline at end of file diff --git a/esphome/common/sensor-test.yaml b/esphome/common/sensor-test.yaml new file mode 100644 index 0000000..31fc271 --- /dev/null +++ b/esphome/common/sensor-test.yaml @@ -0,0 +1,9 @@ +filters: + - median: + window_size: 5 + send_every: 2 + send_first_at: 1 + - or: + - throttle: 5min + - delta: 1.0 + - delta: .1 \ No newline at end of file diff --git a/esphome/common/sensor/rssi_sensor.config.yaml b/esphome/common/sensor/rssi_sensor.config.yaml new file mode 100644 index 0000000..56cd4a4 --- /dev/null +++ b/esphome/common/sensor/rssi_sensor.config.yaml @@ -0,0 +1,4 @@ +platform: wifi_signal +name: ${friendly_name} RSSI +id: ${entity_name}_rssi +update_interval: 60s \ No newline at end of file diff --git a/esphome/common/sensor/uptime_sensor.config.yaml b/esphome/common/sensor/uptime_sensor.config.yaml new file mode 100644 index 0000000..c9beebd --- /dev/null +++ b/esphome/common/sensor/uptime_sensor.config.yaml @@ -0,0 +1,4 @@ +platform: uptime +name: ${friendly_name} Uptime +id: ${entity_name}_uptime +disabled_by_default: true \ No newline at end of file diff --git a/esphome/common/text_sensor/ethernet_ip_address.config.yaml b/esphome/common/text_sensor/ethernet_ip_address.config.yaml new file mode 100644 index 0000000..b81d803 --- /dev/null +++ b/esphome/common/text_sensor/ethernet_ip_address.config.yaml @@ -0,0 +1,10 @@ +# Text sensors with general information. +platform: template +#ip_address: +name: ${friendly_name} IP +id: ${entity_name}_ip +icon: mdi:ip-network +entity_category: diagnostic +disabled_by_default: true +lambda: return {id(eth).get_ip_address().str() }; +update_interval: 60s diff --git a/esphome/common/text_sensor/ethernet_mac_address.config.yaml b/esphome/common/text_sensor/ethernet_mac_address.config.yaml new file mode 100644 index 0000000..cd6a59d --- /dev/null +++ b/esphome/common/text_sensor/ethernet_mac_address.config.yaml @@ -0,0 +1,10 @@ +# Text sensors with general information. +platform: template +#mac_address: +name: ${friendly_name} Ethernet MAC Address +id: ${entity_name}_ethernet_mac_address +disabled_by_default: true +icon: mdi:network +entity_category: diagnostic +lambda: return {esp_eth_get_mac.str() }; +update_interval: 60s \ No newline at end of file diff --git a/esphome/common/text_sensor/version_sensor.config.yaml b/esphome/common/text_sensor/version_sensor.config.yaml new file mode 100644 index 0000000..e9e3544 --- /dev/null +++ b/esphome/common/text_sensor/version_sensor.config.yaml @@ -0,0 +1,5 @@ +# platform: version +# name: ${friendly_name} ESPHome Version +# id: ${entity_name}_version +# hide_timestamp: true +# disabled_by_default: true diff --git a/esphome/common/text_sensor/wifi_sensor.config.yaml b/esphome/common/text_sensor/wifi_sensor.config.yaml new file mode 100644 index 0000000..5ce2659 --- /dev/null +++ b/esphome/common/text_sensor/wifi_sensor.config.yaml @@ -0,0 +1,22 @@ +# Text sensors with general information. +platform: wifi_info +ip_address: + name: ${friendly_name} IP + id: ${entity_name}_ip + icon: mdi:ip + disabled_by_default: true +ssid: + name: ${friendly_name} SSID + id: ${entity_name}_ssid + icon: mdi:lan + disabled_by_default: true +bssid: + name: ${friendly_name} BSSID + id: ${entity_name}_bssid + disabled_by_default: true + icon: mdi:router-network +mac_address: + name: ${friendly_name} Wifi MAC Address + id: ${entity_name}_wifi_mac_address + disabled_by_default: true + icon: mdi:wifi-cog \ No newline at end of file diff --git a/esphome/common/touch_sensor_bed_single.yaml b/esphome/common/touch_sensor_bed_single.yaml new file mode 100644 index 0000000..80c5c2f --- /dev/null +++ b/esphome/common/touch_sensor_bed_single.yaml @@ -0,0 +1,13 @@ +esp32_touch: + setup_mode: ${setup_mode} + +binary_sensor: + - platform: esp32_touch + name: "${friendly_name} Occupied" + pin: ${touch_pin} + device_class: occupancy + icon: mdi:bed + threshold: ${threshold} + filters: + - delayed_on: 5s + - delayed_off: 10s diff --git a/esphome/common/wifi.yaml b/esphome/common/wifi.yaml new file mode 100644 index 0000000..657e356 --- /dev/null +++ b/esphome/common/wifi.yaml @@ -0,0 +1,28 @@ +captive_portal: + +wifi: + power_save_mode: none + networks: + - ssid: !secret Wifi_SSID + password: !secret Wifi_PWD + + #- ssid: !secret IoT_Wifi_SSID + # password: !secret IoT_Wifi_PWD + + manual_ip: + static_ip: ${static_ip} + gateway: !secret iot_default_gateway + subnet: !secret iot_subnet_mask + + # Enable fallback hotspot (captive portal) in case wifi connection fails + ap: + password: !secret EspHome_AP_PWD + + # Enable fast connect + fast_connect: true + +sensor: + - <<: !include sensor/rssi_sensor.config.yaml + +text_sensor: + - <<: !include text_sensor/wifi_sensor.config.yaml \ No newline at end of file diff --git a/esphome/common/wifi_dhcp.yaml b/esphome/common/wifi_dhcp.yaml new file mode 100644 index 0000000..b169877 --- /dev/null +++ b/esphome/common/wifi_dhcp.yaml @@ -0,0 +1,20 @@ +captive_portal: + +wifi: + power_save_mode: none + networks: + - ssid: !secret Wifi_SSID + password: !secret Wifi_PWD + + - ssid: !secret IoT_Wifi_SSID + password: !secret IoT_Wifi_PWD + + # Enable fallback hotspot (captive portal) in case wifi connection fails + ap: + password: !secret EspHome_AP_PWD + +sensor: + - <<: !include sensor/rssi_sensor.config.yaml + +text_sensor: + - <<: !include text_sensor/wifi_sensor.config.yaml \ No newline at end of file diff --git a/esphome/common/wifi_no_power_save.yaml b/esphome/common/wifi_no_power_save.yaml new file mode 100644 index 0000000..03ae6b1 --- /dev/null +++ b/esphome/common/wifi_no_power_save.yaml @@ -0,0 +1,27 @@ +captive_portal: + +wifi: + networks: + - ssid: !secret Wifi_SSID + password: !secret Wifi_PWD + + #- ssid: !secret IoT_Wifi_SSID + # password: !secret IoT_Wifi_PWD + + manual_ip: + static_ip: ${static_ip} + gateway: !secret iot_default_gateway + subnet: !secret iot_subnet_mask + + # Enable fallback hotspot (captive portal) in case wifi connection fails + ap: + password: !secret EspHome_AP_PWD + + # Enable fast connect + fast_connect: true + +sensor: + - <<: !include sensor/rssi_sensor.config.yaml + +text_sensor: + - <<: !include text_sensor/wifi_sensor.config.yaml \ No newline at end of file diff --git a/esphome/front-yard-plant-monitor.yaml b/esphome/front-yard-plant-monitor.yaml new file mode 100644 index 0000000..c75c342 --- /dev/null +++ b/esphome/front-yard-plant-monitor.yaml @@ -0,0 +1,121 @@ +substitutions: + devicename: front-yard-plant-monitor + entity_name: front_yard_plant_monitor + friendly_name: Front Yard Plant Monitor + platform: ESP32 + board: esp32-poe-iso #nodemcu-32s + static_ip: !secret front-yard-plant-monitor-ip + +packages: + #wifi: !include common/wifi_no_power_save.yaml + ethernet: !include common/olimex-poe.yaml + device_base: !include common/device_base.yaml + ble_proxy: !include common/ble_proxy.yaml + + +logger: + level: DEBUG + logs: + ultrasonic.sensor: WARN + #hx711: INFO + + +#esp32_ble_tracker: + +# xiaomi_ble: + + + # id: eth + # type: LAN8720 + # mdc_pin: GPIO23 + # mdio_pin: GPIO18 + # clk_mode: GPIO17_OUT + # phy_addr: 0 + # power_pin: GPIO5 + + #C4:7C:8D:6D:3E:AE + +sensor: + # - platform: xiaomi_hhccjcy01 + # mac_address: 'C4:7C:8D:6D:CE:A4' + # temperature: + # name: 'Plant Sensor 1: Temperature' + # moisture: + # name: 'Plant Sensor 1: Moisture' + # illuminance: + # name: 'Plant Sensor 1: Illuminance' + # conductivity: + # name: 'Plant Sensor 1: Soil Conductivity' + # battery_level: + # name: 'Plant Sensor 1: Battery Level' + + # - platform: xiaomi_hhccjcy01 + # mac_address: 'C4:7C:8D:6D:3E:AE' + # temperature: + # name: 'Plant Sensor 2: Temperature' + # moisture: + # name: 'Plant Sensor 2: Moisture' + # illuminance: + # name: 'Plant Sensor 2: Illuminance' + # conductivity: + # name: 'Plant Sensor 2: Soil Conductivity' + # battery_level: + # name: 'Plant Sensor 2: Battery Level' + + # - platform: xiaomi_hhccjcy01 + # mac_address: 'C4:7C:8D:6D:3E:B0' + # temperature: + # name: 'Plant Sensor 3: Temperature' + # moisture: + # name: 'Plant Sensor 3: Moisture' + # illuminance: + # name: 'Plant Sensor 3: Illuminance' + # conductivity: + # name: 'Plant Sensor 3: Soil Conductivity' + # battery_level: + # name: 'Plant Sensor 3: Battery Level' + + - platform: ultrasonic + trigger_pin: GPIO13 + echo_pin: GPIO14 + name: "Car Sensor East Side" + timeout: 4.0m + update_interval: 0.5s + filters: + - or: + - throttle_average: 30s + - delta: 0.5 + - sliding_window_moving_average: + window_size: 5 + send_every: 5 + - delta: 0.0254 + + - platform: ultrasonic + trigger_pin: GPIO15 + echo_pin: GPIO16 + name: "Car Sensor West Side" + timeout: 4.0m + update_interval: 0.5s + filters: + - or: + - throttle_average: 30s + - delta: 0.5 + - sliding_window_moving_average: + window_size: 5 + send_every: 5 + - delta: 0.0254 + +binary_sensor: + - platform: gpio + name: Outer Garage Door + device_class: door + pin: + mode: INPUT_PULLUP + number: GPIO5 + + - platform: gpio + name: Inner Garage Door + device_class: door + pin: + mode: INPUT_PULLUP + number: GPIO4 \ No newline at end of file diff --git a/esphome/furnace-room-multisensor.yaml b/esphome/furnace-room-multisensor.yaml new file mode 100644 index 0000000..135697c --- /dev/null +++ b/esphome/furnace-room-multisensor.yaml @@ -0,0 +1,221 @@ +substitutions: + devicename: furnace-room-multisensor + entity_name: furnace_room_multisensor + friendly_name: Furnace Room MultiSensor + platform: ESP32 + board: nodemcu-32s + static_ip: !secret furnace-room-multisensor-ip + +packages: + #wifi: !include common/wifi.yaml + ethernet: !include common/olimex-poe.yaml + device_base: !include common/device_base.yaml + ble_proxy: !include common/ble_proxy.yaml + +logger: + level: DEBUG + logs: + dallas.sensor: NONE + sensor: NONE + +globals: + - id: screen_power + type: bool + restore_value: yes + initial_value: 'true' + +font: + - file: 'CascadiaMonoPL.ttf' + id: font1 + size: 17 + +dallas: + - pin: + number: GPIO5 #D4 + update_interval: 10s + +i2c: + sda: GPIO13 #D1 + scl: GPIO15 #D2 + frequency: 800kHz + +display: + - platform: ssd1306_i2c + id: oled + model: "SSD1306 128x64" + #reset_pin: GPIO14 #D0 + address: 0x3C + lambda: |- + it.print(0, 0, id(font1), "Delt:"); + it.printf(128, 0, id(font1), TextAlign::TOP_RIGHT, "%.1f°F", id(hvac_delta).state); + it.print(0, 16, id(font1), "HVAC:"); + it.printf(128, 16, id(font1), TextAlign::TOP_RIGHT, "%.1f°F", id(hvac).state); + it.print(0, 32, id(font1), "Retn:"); + it.printf(128, 32, id(font1), TextAlign::TOP_RIGHT, "%.1f°F", id(hvac_return).state); + it.print(0, 48, id(font1), "Ambt:"); + it.printf(128, 48, id(font1), TextAlign::TOP_RIGHT, "%.1f°F", id(ambient).state); + +sensor: + - platform: dallas + address: 0xB33C01B607798528 + name: "Return Temperature" + id: hvac_return + filters: + - lambda: return x * (9.0/5.0) + 32.0; + unit_of_measurement: "°F" + state_class: measurement + + - platform: dallas + address: 0x0F3C01B6070C1328 + name: "HVAC Temperature" + id: hvac + filters: + - lambda: return x * (9.0/5.0) + 32.0; + unit_of_measurement: "°F" + state_class: measurement + + - platform: dallas + address: 0xFA3C01B607005B28 + name: "Furnace Room Temperature" + id: ambient + filters: + - lambda: return x * (9.0/5.0) + 32.0; + unit_of_measurement: "°F" + state_class: measurement + + - platform: template + name: "HVAC Delta" + id: hvac_delta + lambda: |- + return (id(hvac).state - id(hvac_return).state); + update_interval: 10s + unit_of_measurement: "°F" + state_class: measurement + filters: + - or: + - throttle: 60s + - delta: 1.0 + + # - platform: ultrasonic + # trigger_pin: GPIO1 #D7 + # echo_pin: GPIO5 #D8 + # name: "Salt Level in percent" + # update_interval: 1s + # #update_interval: 10s + # filters: + # - lambda: return (0.86-x)*(100/0.86); + # unit_of_measurement: "%" + + # - platform: ultrasonic + # trigger_pin: GPIO33 #D7 + # echo_pin: GPIO35 #D8 + # unit_of_measurement: "cm" + # id: distance_from_bottom + # name: "Salt Level in CM" + # # pulse_time: 10us + # #update_interval: 3h + # #update_interval: 5s + # #timeout: 4.0m + # update_interval: 5s + # filters: + # - lambda: return ( 0.86 - x * 100; + # - sliding_window_moving_average: + # window_size: 5 + # send_every: 5 + # send_first_at: 1 + + - platform: ultrasonic + trigger_pin: GPIO33 #D7 + echo_pin: GPIO35 #D8 + id: ultrasonic_source + #update_interval: 5s + internal: True + filters: + - sliding_window_moving_average: + window_size: 5 + send_every: 5 + send_first_at: 1 + on_value: + then: + - sensor.template.publish: + id: distance_from_bottom + state: !lambda 'return id(ultrasonic_source).state;' + + - sensor.template.publish: + id: distance_from_top + state: !lambda 'return id(ultrasonic_source).state;' + + - platform: template + unit_of_measurement: "cm" + state_class: measurement + id: distance_from_bottom + name: "Salt Level in CM" + #update_interval: 5s + filters: + - lambda: 'return (0.94 - (id(ultrasonic_source).state)) * 100;' + on_value: + then: + - sensor.template.publish: + id: level_in_bags + state: !lambda 'return id(distance_from_bottom).state;' + + - platform: template + unit_of_measurement: "cm" + state_class: measurement + id: distance_from_top + name: "Salt Level From Top in CM" + #update_interval: 5s + filters: + - lambda: 'return (id(ultrasonic_source).state) * 100;' + + - platform: template + unit_of_measurement: "bags" + state_class: measurement + id: level_in_bags + name: "Salt Level in Bags" + #update_interval: 5s + filters: + - lambda: 'return (id(distance_from_bottom).state) / 17.5;' + +binary_sensor: + - platform: gpio + name: "Furnace Room Door" + device_class: door + pin: + number: GPIO3 #D5 + mode: INPUT_PULLUP + + - platform: homeassistant + internal: true + id: light_state + entity_id: light.furnace_room + on_state: + then: + - if: + condition: + lambda: 'return id(light_state).state;' + then: + - logger.log: "The light is on" + else: + - logger.log: "The is off. Turning off display" + - switch.turn_off: display_switch + +switch: + - platform: template + id: display_switch + name: "HVAC Display Switch" + lambda: |- + if (id(screen_power)) { + id(oled).turn_on(); + } else { + id(oled).turn_off(); + } + return id(screen_power); + turn_on_action: + - lambda: |- + id(screen_power) = true; + // id(oled).turn_on(); + turn_off_action: + - lambda: |- + id(screen_power) = false; + // id(oled).turn_off(); diff --git a/esphome/kitchen-appliance-temps.yaml b/esphome/kitchen-appliance-temps.yaml new file mode 100644 index 0000000..d6f3707 --- /dev/null +++ b/esphome/kitchen-appliance-temps.yaml @@ -0,0 +1,106 @@ +substitutions: + devicename: kitchen-appliance-temps + entity_name: kitchen_appliance_temps + friendly_name: Kitchen Appliance Temps + platform: ESP32 + board: esp32dev + static_ip: !secret kitchen-appliance-temps-ip + +# Enable logging +logger: + level: DEBUG + +packages: + wifi: !include common/wifi.yaml + device_base: !include common/device_base.yaml + +i2c: + sda: GPIO21 + scl: GPIO22 + scan: true + id: i2c_bus_a + +spi: + clk_pin: GPIO18 + miso_pin: GPIO19 + mosi_pin: GPIO23 + id: spi_bus_a + +mcp23017: + - id: 'mcp23017_hub_a' + address: 0x20 + +sensor: + - platform: max31855 + #- platform: max6675 + name: "Oven Temperature" + cs_pin: GPIO25 + #update_interval: 5s + update_interval: 1s + unit_of_measurement: "°C" + device_class: temperature + state_class: measurement + accuracy_decimals: 0 + filters: + - or: + - heartbeat: 60s + - delta: 18.0 + - lambda: !lambda |- + if (x > 320) return {}; + if (x < -10) return {}; + return x; + + - platform: max31855 + name: "Fridge Temperature" + cs_pin: GPIO32 + update_interval: 5s + unit_of_measurement: "°C" + device_class: temperature + state_class: measurement + accuracy_decimals: 0 + filters: + - or: + - heartbeat: 60s + - delta: 1.8 + - lambda: !lambda |- + if (x > 320) return {}; + if (x < -10) return {}; + return x; + + - platform: max31855 + name: "Freezer Temperature" + cs_pin: GPIO33 + update_interval: 5s + unit_of_measurement: "°C" + device_class: temperature + state_class: measurement + accuracy_decimals: 0 + filters: + - or: + - heartbeat: 60s + - delta: 1.8 + - lambda: !lambda |- + if (x > 320) return {}; + if (x < -10) return {}; + return x; + +binary_sensor: + - platform: gpio + name: "Fridge Door" + pin: + mcp23xxx: mcp23017_hub_a + number: 0 + mode: + input: true + pullup: true + inverted: false + + - platform: gpio + name: "Freezer Door" + pin: + mcp23xxx: mcp23017_hub_a + number: 1 + mode: + input: true + pullup: true + inverted: false \ No newline at end of file diff --git a/esphome/master-bed.yaml b/esphome/master-bed.yaml new file mode 100644 index 0000000..253dd5b --- /dev/null +++ b/esphome/master-bed.yaml @@ -0,0 +1,25 @@ +substitutions: + devicename: master-bed + entity_name: master_bed + friendly_name: Master Bed + platform: ESP32 + board: wemos_d1_mini32 + static_ip: !secret master-bed-ip + dout_pin: !secret master-bed-dout + clk_pin: !secret master-bed-clk + loadcell_zero: !secret master-bed-zero + loadcell_load: !secret master-bed-load + loadcell_weight: !secret master-bed-weight + +# Enable logging +logger: + level: DEBUG + logs: + sensor: INFO + hx711: DEBUG + +packages: + wifi: !include common/ethernet.yaml + device_base: !include common/device_base.yaml + hx711: !include common/hx711_single_verbose.yaml + ble_proxy: !include common/ble_proxy.yaml diff --git a/esphome/nursery-tagreader.yaml b/esphome/nursery-tagreader.yaml new file mode 100644 index 0000000..21a5b55 --- /dev/null +++ b/esphome/nursery-tagreader.yaml @@ -0,0 +1,369 @@ +substitutions: + devicename: nursery-tagreader + entity_name: nursery_tagreader + friendly_name: Nursery Tagreader + platform: ESP8266 + board: d1_mini + static_ip: !secret nursery-tagreader-ip + +packages: + wifi: !include common/wifi.yaml + device_base: !include common/device_base.yaml + +esphome: +# If buzzer is enabled, notify on api connection success + on_boot: + priority: -10 + then: + - wait_until: + api.connected: + - logger.log: API is connected! + - rtttl.play: "success:d=24,o=5,b=100:c,g,b" + - light.turn_on: + id: activity_led + brightness: 100% + red: 0% + green: 0% + blue: 100% + flash_length: 500ms + - switch.turn_on: buzzer_enabled + - switch.turn_on: led_enabled + +# Define switches to control LED and buzzer from HA +switch: +- platform: template + name: "${friendly_name} Buzzer Enabled" + id: buzzer_enabled + icon: mdi:volume-high + optimistic: true + restore_mode: restore_default_on + entity_category: config +- platform: template + name: "${friendly_name} LED enabled" + id: led_enabled + icon: mdi:alarm-light-outline + optimistic: true + restore_mode: restore_default_on + entity_category: config + +# Define buttons for writing tags via HA +button: + - platform: template + name: Write Tag Random + id: write_tag_random + # Optional variables: + icon: "mdi:pencil-box" + on_press: + then: + - light.turn_on: + id: activity_led + brightness: 100% + red: 100% + green: 0% + blue: 100% + - lambda: |- + static const char alphanum[] = "0123456789abcdef"; + std::string uri = "https://www.home-assistant.io/tag/"; + for (int i = 0; i < 8; i++) + uri += alphanum[random_uint32() % (sizeof(alphanum) - 1)]; + uri += "-"; + for (int j = 0; j < 3; j++) { + for (int i = 0; i < 4; i++) + uri += alphanum[random_uint32() % (sizeof(alphanum) - 1)]; + uri += "-"; + } + for (int i = 0; i < 12; i++) + uri += alphanum[random_uint32() % (sizeof(alphanum) - 1)]; + auto message = new nfc::NdefMessage(); + message->add_uri_record(uri); + ESP_LOGD("tagreader", "Writing payload: %s", uri.c_str()); + id(pn532_board).write_mode(message); + - rtttl.play: "write:d=24,o=5,b=100:b" + - wait_until: + not: + pn532.is_writing: + - light.turn_off: + id: activity_led + - rtttl.play: "write:d=24,o=5,b=100:b,b" + - platform: template + name: Clean Tag + id: clean_tag + icon: "mdi:nfc-variant-off" + on_press: + then: + - light.turn_on: + id: activity_led + brightness: 100% + red: 100% + green: 64.7% + blue: 0% + - lambda: 'id(pn532_board).clean_mode();' + - rtttl.play: "write:d=24,o=5,b=100:b" + - wait_until: + not: + pn532.is_writing: + - light.turn_off: + id: activity_led + - rtttl.play: "write:d=24,o=5,b=100:b,b" + - platform: template + name: Cancel writing + id: cancel_writing + icon: "mdi:pencil-off" + on_press: + then: + - lambda: 'id(pn532_board).read_mode();' + - light.turn_off: + id: activity_led + - rtttl.play: "write:d=24,o=5,b=100:b,b" + + +# Enable logging +logger: + # level: VERY_VERBOSE + level: INFO + +# Enable Home Assistant API +api: + services: + - service: rfidreader_tag_ok + then: + - rtttl.play: "beep:d=16,o=5,b=100:b" + + - service: rfidreader_tag_ko + then: + - rtttl.play: "beep:d=8,o=5,b=100:b" + + - service: play_rtttl + variables: + song_str: string + then: + - rtttl.play: !lambda 'return song_str;' + + - service: write_tag_id + variables: + tag_id: string + then: + - light.turn_on: + id: activity_led + brightness: 100% + red: 100% + green: 0% + blue: 0% + - lambda: |- + auto message = new nfc::NdefMessage(); + std::string uri = "https://www.home-assistant.io/tag/"; + uri += tag_id; + message->add_uri_record(uri); + id(pn532_board).write_mode(message); + - rtttl.play: "write:d=24,o=5,b=100:b" + - wait_until: + not: + pn532.is_writing: + - light.turn_off: + id: activity_led + - rtttl.play: "write:d=24,o=5,b=100:b,b" + + - service: write_music_tag + variables: + music_url: string + music_info: string + then: + - light.turn_on: + id: activity_led + brightness: 100% + red: 100% + green: 0% + blue: 0% + - lambda: |- + auto message = new nfc::NdefMessage(); + std::string uri = ""; + std::string text = ""; + uri += music_url; + text += music_info; + if ( music_url != "" ) { + message->add_uri_record(uri); + } + if ( music_info != "" ) { + message->add_text_record(text); + } + id(pn532_board).write_mode(message); + - rtttl.play: "write:d=24,o=5,b=100:b" + - wait_until: + not: + pn532.is_writing: + - light.turn_off: + id: activity_led + - rtttl.play: "write:d=24,o=5,b=100:b,b" + +# Enable OTA upgrade +ota: + +i2c: + scan: False + frequency: 400kHz + +globals: + - id: source + type: std::string + - id: url + type: std::string + - id: info + type: std::string + +pn532_i2c: + id: pn532_board + on_tag: + then: + - if: + condition: + switch.is_on: led_enabled + then: + - light.turn_on: + id: activity_led + brightness: 100% + red: 0% + green: 100% + blue: 0% + flash_length: 500ms + + - delay: 0.15s #to fix slow component + + - lambda: |- + id(source)=""; + id(url)=""; + id(info)=""; + if (tag.has_ndef_message()) { + auto message = tag.get_ndef_message(); + auto records = message->get_records(); + for (auto &record : records) { + std::string payload = record->get_payload(); + std::string type = record->get_type(); + size_t hass = payload.find("https://www.home-assistant.io/tag/"); + size_t applemusic = payload.find("https://music.apple.com"); + size_t spotify = payload.find("https://open.spotify.com"); + size_t sonos = payload.find("sonos-2://"); + + if (type == "U" and hass != std::string::npos ) { + ESP_LOGD("tagreader", "Found Home Assistant tag NDEF"); + id(source)="hass"; + id(url)=payload; + id(info)=payload.substr(hass + 34); + } + else if (type == "U" and applemusic != std::string::npos ) { + ESP_LOGD("tagreader", "Found Apple Music tag NDEF"); + id(source)="amusic"; + id(url)=payload; + } + else if (type == "U" and spotify != std::string::npos ) { + ESP_LOGD("tagreader", "Found Spotify tag NDEF"); + id(source)="spotify"; + id(url)=payload; + } + else if (type == "U" and sonos != std::string::npos ) { + ESP_LOGD("tagreader", "Found Sonos app tag NDEF"); + id(source)="sonos"; + id(url)=payload; + } + else if (type == "T" ) { + ESP_LOGD("tagreader", "Found music info tag NDEF"); + id(info)=payload; + } + else if ( id(source)=="" ) { + id(source)="uid"; + } + } + } + else { + id(source)="uid"; + } + + - if: + condition: + lambda: 'return ( id(source)=="uid" );' + then: + - homeassistant.tag_scanned: !lambda |- + ESP_LOGD("tagreader", "No HA NDEF, using UID"); + return x; + else: + - if: + condition: + lambda: 'return ( id(source)=="hass" );' + then: + - homeassistant.tag_scanned: !lambda 'return id(info);' + else: + - homeassistant.event: + event: esphome.music_tag + data: + reader: !lambda |- + return App.get_name().c_str(); + source: !lambda |- + return id(source); + url: !lambda |- + return id(url); + info: !lambda |- + return id(info); + + - if: + condition: + switch.is_on: buzzer_enabled + then: + - rtttl.play: "success:d=24,o=5,b=100:c,g,b" + +# Define the buzzer output +output: +- platform: esp8266_pwm + pin: D7 + id: buzzer + +binary_sensor: + - platform: gpio + name: Nursery Door + device_class: door + pin: + mode: INPUT_PULLUP + number: D5 + +# # - platform: gpio +# # name: "Nursery Closet" +# # device_class: door +# # pin: +# # number: D6 +# # mode: INPUT_PULLUP + + # - platform: status + # name: "${friendly_name} Status" + # entity_category: diagnostic + +# text_sensor: +# - platform: version +# hide_timestamp: true +# name: "${friendly_name} ESPHome Version" +# entity_category: diagnostic +# - platform: wifi_info +# ip_address: +# name: "${friendly_name} IP Address" +# icon: mdi:wifi +# entity_category: diagnostic +# ssid: +# name: "${friendly_name} Connected SSID" +# icon: mdi:wifi-strength-2 +# entity_category: diagnostic + +# Define buzzer as output for RTTTL +rtttl: + output: buzzer + +# Configure LED +light: +- platform: neopixelbus + variant: WS2812 + pin: D8 + num_leds: 1 + flash_transition_length: 500ms + type: GRB + id: activity_led + name: "${friendly_name} LED" + restore_mode: ALWAYS_OFF + + + diff --git a/esphome/power-monitor.yaml b/esphome/power-monitor.yaml new file mode 100644 index 0000000..0724f0e --- /dev/null +++ b/esphome/power-monitor.yaml @@ -0,0 +1,803 @@ +# CT01 - A - Grid Phase A +# CT02 - G - Dryer +# CT03 - D - Furnace +# CT04 - B - Grid Phase B +# CT05 - E - Basement Plugs (Computer is on this circuit) +# CT06 - F - Nursery, Kitchen, and Dining Room Lights +# CT07 - C - Sump Pump Plug +# CT08 - H - Microwave Plug +# CT09 - I - Stove/Oven +# CT10 - J - Front Room Plugs +# CT11 - M - Heat Pump +# CT12 - L - Kitchen Circuit 1 (Fridge is on this circuit) + +substitutions: + devicename: power-monitor + friendly_name: 'PM:' + entity_name: power_monitor + static_ip: !secret power-monitor-ip + platform: ESP32 + board: nodemcu-32s + update_time: 500ms + kwh_report_interval: 60s + watt_heartbeat: 60s + throttle_time: 60s + watt_delta: "50.0" + #watt_delta: "5.0" + #grid_watt_delta: "10.0" + grid_watt_delta: "200.0" + #fast_update_time: 10s + #medium_update_time: 30s + #slow_update_time: 60s + + ct01Name: 'Grid Phase A' + ct04Name: 'Grid Phase B' + + ct22Name: 'Well' # 1, 3 # sct010 - O + ct12Name: 'Kitchen 1' # 5 # sct006 - L + ct16Name: 'Kitchen 2' # 7 # sct006 - S + ct18Name: 'Laundry Plug' # 9 # sct006 - N + ct08Name: 'Microwave Plug' # 11 # sct006 - H + ct17Name: 'Bathroom Plug' # 13 # sct006 - R + ct11Name: 'Heat Pump' # 15, 17 - M + ct24Name: 'Basement Bedroom and Furnace Room Lights' # 19 # sct006 - K + ct05Name: 'Basement Plugs' # 21a # sct006 - E + ct23Name: 'Basement and Laundry Lights and Plugs' # 21b # sct006 - W + ct07Name: 'Sump Pump Plug' # 23 # sct006 - C + + ct06Name: 'Nursery, Dining, Kitchen Lights' # 2 # sct006 - F + ct20Name: 'Master Suite' # 4 # sct006 - T + ct03Name: 'Furnace' # 6 # sct006 - D + ct15Name: 'Basement Stairs and Lights' # 8 # sct006 - P + ct21Name: 'Dishwasher' # 10 # sct006 - V + ct13Name: 'Garage Outside and Front Garage Lights' # 12 # sct006 - U + ct10Name: 'Front Room Plugs' # 14 # sct006 - J + ct14Name: 'Garage and Outside Plugs' # 16 # sct006 - Q + ct09Name: 'Stove' # 18, 20 # sct016 - I + ct02Name: 'Dryer' # 22, 24 # sct010 - G + + ct19Name: 'Unused' + + +# Current Transformers: +# 20A/25mA SCT-006: 11143 + sct006: '11143' +# 30A/1V SCT-013-030: 8650 +# 50A/1V SCT-013-050: 15420 +# 80A/26.6mA SCT-010: 41660 + sct010: '41660' +# 100A/50ma SCT-013-000: 27518 + sct013: '27518' +# 120A/40mA: SCT-016: 41787 + sct016: '41787' +# 200A/100mA SCT-024: 27518 + #current_cal: '27518' +# Jameco 9VAC Transformer: +# For meter versions: +# >= v1.3: 7305 + voltage_cal: '7305' + +packages: + wifi: !include common/wifi.yaml + # device_base: !include common/complex_esp32_base.yaml + device_base: !include common/device_base.yaml + +# web_server: +# port: 80 + +time: + - platform: sntp + id: sntp_time + +logger: + level: DEBUG + logs: + sensor: DEBUG + +spi: + clk_pin: 18 + miso_pin: 19 + mosi_pin: 23 + +sensor: +#IC1 Main + - platform: atm90e32 + cs_pin: 5 + phase_a: + voltage: + name: ${friendly_name} [V] + id: ic1Volts + filters: + - throttle_average: 60s + accuracy_decimals: 1 + current: + name: ${friendly_name} ${ct01Name} [A] + id: ct1Amps + filters: + - or: + - delta: 2 + - throttle_average: ${throttle_time} + # - heartbeat: ${watt_heartbeat} + power: + name: ${friendly_name} ${ct01Name} [W] + id: ct1Watts + filters: + - or: + - delta: ${grid_watt_delta} + - throttle_average: ${throttle_time} + # - heartbeat: ${watt_heartbeat} + accuracy_decimals: 1 + gain_voltage: ${voltage_cal} + gain_ct: ${sct016} + phase_b: + power: + name: ${friendly_name} ${ct02Name} [W] + id: ct2Watts + filters: + - or: + - delta: ${watt_delta} + - throttle_average: ${throttle_time} + # - heartbeat: ${watt_heartbeat} + accuracy_decimals: 1 + gain_voltage: ${voltage_cal} + gain_ct: ${sct010} + phase_c: + power: + name: ${friendly_name} ${ct03Name} [W] + id: ct3Watts + filters: + - or: + - delta: ${watt_delta} + - throttle_average: ${throttle_time} + # - heartbeat: ${watt_heartbeat} + accuracy_decimals: 1 + gain_voltage: ${voltage_cal} + gain_ct: ${sct006} + frequency: + name: ${friendly_name} Freq A + filters: + - or: + - delta: 0.05 + - throttle_average: ${throttle_time} + # - heartbeat: ${watt_heartbeat} + line_frequency: 60Hz + gain_pga: 1X + update_interval: ${update_time} + +#IC2 Main + - platform: atm90e32 + cs_pin: 4 + phase_a: + current: + name: ${friendly_name} ${ct04Name} [A] + id: ct4Amps + filters: + - or: + - delta: ${grid_watt_delta} + - throttle_average: ${throttle_time} + # - heartbeat: ${watt_heartbeat} + accuracy_decimals: 1 + power: + name: ${friendly_name} ${ct04Name} [W] + id: ct4Watts + filters: + - or: + - delta: ${watt_delta} + - throttle_average: ${throttle_time} + # - heartbeat: ${watt_heartbeat} + gain_voltage: ${voltage_cal} + gain_ct: ${sct016} + phase_b: + power: + name: ${friendly_name} ${ct05Name} [W] + id: ct5Watts + filters: + - or: + - delta: ${watt_delta} + - throttle_average: ${throttle_time} + # - heartbeat: ${watt_heartbeat} + accuracy_decimals: 1 + gain_voltage: ${voltage_cal} + gain_ct: ${sct006} + phase_c: + power: + name: ${friendly_name} ${ct06Name} [W] + id: ct6Watts + filters: + - or: + - delta: ${watt_delta} + - throttle_average: ${throttle_time} + # - heartbeat: ${watt_heartbeat} + accuracy_decimals: 1 + gain_voltage: ${voltage_cal} + gain_ct: ${sct006} + frequency: + name: ${friendly_name} Freq B + filters: + - or: + - delta: 0.05 + - throttle_average: ${throttle_time} + # - heartbeat: ${watt_heartbeat} + line_frequency: 60Hz + gain_pga: 1X + update_interval: ${update_time} + + +#IC1 AddOn 1 + - platform: atm90e32 + cs_pin: 0 + phase_a: + power: + name: ${friendly_name} ${ct07Name} [W] + id: ct7Watts + filters: + - or: + - delta: ${watt_delta} + - throttle_average: ${throttle_time} + # - heartbeat: ${watt_heartbeat} + accuracy_decimals: 1 + gain_voltage: ${voltage_cal} + gain_ct: ${sct006} + phase_b: + power: + name: ${friendly_name} ${ct08Name} [W] + id: ct8Watts + filters: + - or: + - delta: ${watt_delta} + - throttle_average: ${throttle_time} + # - heartbeat: ${watt_heartbeat} + - multiply: -1 + accuracy_decimals: 1 + gain_voltage: ${voltage_cal} + gain_ct: ${sct006} + phase_c: + power: + name: ${friendly_name} ${ct09Name} [W] + id: ct9Watts + filters: + - or: + - delta: ${watt_delta} + - throttle_average: ${throttle_time} + # - heartbeat: ${watt_heartbeat} + accuracy_decimals: 1 + gain_voltage: ${voltage_cal} + gain_ct: ${sct013} + line_frequency: 60Hz + gain_pga: 1X + update_interval: ${update_time} +#IC2 AddOn 1 + - platform: atm90e32 + cs_pin: 16 + phase_a: + power: + name: ${friendly_name} ${ct10Name} [W] + id: ct10Watts + filters: + - or: + - delta: ${watt_delta} + - throttle_average: ${throttle_time} + # - heartbeat: ${watt_heartbeat} + accuracy_decimals: 1 + gain_voltage: ${voltage_cal} + gain_ct: ${sct006} + phase_b: + power: + name: ${friendly_name} ${ct11Name} [W] + id: ct11Watts + filters: + - or: + - delta: ${watt_delta} + - throttle_average: ${throttle_time} + # - heartbeat: ${watt_heartbeat} + - multiply: -1 + accuracy_decimals: 1 + gain_voltage: ${voltage_cal} + gain_ct: ${sct010} + phase_c: + power: + name: ${friendly_name} ${ct12Name} [W] + id: ct12Watts + filters: + - or: + - delta: ${watt_delta} + - throttle_average: ${throttle_time} + # - heartbeat: ${watt_heartbeat} + - multiply: -1 + accuracy_decimals: 1 + gain_voltage: ${voltage_cal} + gain_ct: ${sct006} + line_frequency: 60Hz + gain_pga: 1X + update_interval: ${update_time} + +#IC1 AddOn 2 + - platform: atm90e32 + cs_pin: 27 + phase_a: + power: + name: ${friendly_name} ${ct13Name} [W] + id: ct13Watts + filters: + - or: + - delta: ${watt_delta} + - throttle_average: ${throttle_time} + # - heartbeat: ${watt_heartbeat} + - multiply: -1 + accuracy_decimals: 1 + gain_voltage: ${voltage_cal} + gain_ct: ${sct006} + phase_b: + power: + name: ${friendly_name} ${ct14Name} [W] + id: ct14Watts + filters: + - or: + - delta: ${watt_delta} + - throttle_average: ${throttle_time} + # - heartbeat: ${watt_heartbeat} + - multiply: -1 + accuracy_decimals: 1 + gain_voltage: ${voltage_cal} + gain_ct: ${sct006} + phase_c: + power: + name: ${friendly_name} ${ct15Name} [W] + id: ct15Watts + filters: + - or: + - delta: ${watt_delta} + - throttle_average: ${throttle_time} + # - heartbeat: ${watt_heartbeat} + - multiply: -1 + accuracy_decimals: 1 + gain_voltage: ${voltage_cal} + gain_ct: ${sct006} + line_frequency: 60Hz + gain_pga: 1X + update_interval: ${update_time} +#IC2 AddOn 2 + - platform: atm90e32 + cs_pin: 17 + phase_a: + power: + name: ${friendly_name} ${ct16Name} [W] + id: ct16Watts + filters: + - or: + - delta: ${watt_delta} + - throttle_average: ${throttle_time} + # - heartbeat: ${watt_heartbeat} + accuracy_decimals: 1 + gain_voltage: ${voltage_cal} + gain_ct: ${sct006} + phase_b: + power: + name: ${friendly_name} ${ct17Name} [W] + id: ct17Watts + filters: + - or: + - delta: ${watt_delta} + - throttle_average: ${throttle_time} + # - heartbeat: ${watt_heartbeat} + - multiply: -1 + accuracy_decimals: 1 + gain_voltage: ${voltage_cal} + gain_ct: ${sct006} + phase_c: + power: + name: ${friendly_name} ${ct18Name} [W] + id: ct18Watts + filters: + - or: + - delta: ${watt_delta} + - throttle_average: ${throttle_time} + # - heartbeat: ${watt_heartbeat} + - multiply: -1 + accuracy_decimals: 1 + gain_voltage: ${voltage_cal} + gain_ct: ${sct006} + line_frequency: 60Hz + gain_pga: 1X + update_interval: ${update_time} +#IC1 AddOn 3 + - platform: atm90e32 +#do not use GPIO2 if ESP32 has an on-board LED assigned to it + cs_pin: 2 + phase_a: + power: + name: ${friendly_name} ${ct19Name} [W] + id: ct19Watts + filters: + - or: + - delta: ${watt_delta} + - throttle_average: ${throttle_time} + # - heartbeat: ${watt_heartbeat} + accuracy_decimals: 1 + gain_voltage: ${voltage_cal} + gain_ct: ${sct006} + phase_b: + power: + name: ${friendly_name} ${ct20Name} [W] + id: ct20Watts + filters: + - or: + - delta: ${watt_delta} + - throttle_average: ${throttle_time} + # - heartbeat: ${watt_heartbeat} + gain_voltage: ${voltage_cal} + gain_ct: ${sct006} + phase_c: + power: + name: ${friendly_name} ${ct21Name} [W] + id: ct21Watts + filters: + - or: + - delta: ${watt_delta} + - throttle_average: ${throttle_time} + # - heartbeat: ${watt_heartbeat} + accuracy_decimals: 1 + gain_voltage: ${voltage_cal} + gain_ct: ${sct006} + line_frequency: 60Hz + gain_pga: 1X + update_interval: ${update_time} +#IC2 AddOn 3 + - platform: atm90e32 + cs_pin: 21 + phase_a: + power: + #name: ${friendly_name} ${ct22Name} [W] + internal: true + id: ct22Watts + filters: + - or: + - delta: ${watt_delta} + - throttle_average: ${throttle_time} + # - heartbeat: ${watt_heartbeat} + accuracy_decimals: 1 + gain_voltage: ${voltage_cal} + gain_ct: ${sct010} + phase_b: + power: + name: ${friendly_name} ${ct23Name} [W] + id: ct23Watts + filters: + - or: + - delta: ${watt_delta} + - throttle_average: ${throttle_time} + # - heartbeat: ${watt_heartbeat} + - multiply: -1 + accuracy_decimals: 1 + gain_voltage: ${voltage_cal} + gain_ct: ${sct006} + phase_c: + power: + name: ${friendly_name} ${ct24Name} [W] + id: ct24Watts + filters: + - or: + - delta: ${watt_delta} + - throttle_average: ${throttle_time} + # - heartbeat: ${watt_heartbeat} + - multiply: -1 + accuracy_decimals: 1 + gain_voltage: ${voltage_cal} + gain_ct: ${sct006} + line_frequency: 60Hz + gain_pga: 1X + update_interval: ${update_time} + +#Total Amps From Grid + - platform: template + name: ${friendly_name} Grid Total [A] + id: totalAmpsFromGrid + lambda: return id(ct1Amps).state + id(ct4Amps).state ; + accuracy_decimals: 1 + unit_of_measurement: A + device_class: current + state_class: measurement + update_interval: ${update_time} + filters: + - or: + - delta: 2.0 + - throttle_average: ${throttle_time} + # - heartbeat: ${watt_heartbeat} + +#Total Watts From Grid + - platform: template + name: ${friendly_name} Grid Total [W] + id: totalWattsFromGrid + lambda: return id(ct1Watts).state + id(ct4Watts).state ; + accuracy_decimals: 1 + unit_of_measurement: W + device_class: power + state_class: measurement + update_interval: ${update_time} + filters: + - or: + - delta: 5.0 + - throttle_average: ${throttle_time} + # - heartbeat: ${watt_heartbeat} + +#kWh From Grid + - platform: total_daily_energy + name: ${friendly_name} Grid [kWh] + power_id: totalWattsFromGrid + filters: + - multiply: 0.001 + # - heartbeat: ${kwh_report_interval} + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + # min_save_interval: ${update_time} + +# The CT for the Well needs to be calibrated. +# In the interim, I'm using this lambda + - platform: template + name: ${friendly_name} ${ct22Name} [W] + id: ct22WattsPositive + state_class: measurement + lambda: |- + if (id(ct22Watts).state < 0){ + return 0; + } else { + return id(ct22Watts).state ; + } + accuracy_decimals: 1 + unit_of_measurement: W + icon: mdi:lightning-bolt-circle + update_interval: ${update_time} + filters: + - delta: 5.0 + # - heartbeat: ${watt_heartbeat} + +# kWh from CT1 +# This is included in the grid calculation + +# kWh from CT2 (the dryer) + - platform: total_daily_energy + name: ${friendly_name} ${ct02Name} [kWh] + power_id: ct2Watts + filters: + - multiply: 0.001 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + # min_save_interval: ${update_time} + +#kWh From CT 3 + - platform: total_daily_energy + name: ${friendly_name} ${ct03Name} [kWh] + power_id: ct3Watts + filters: + - multiply: 0.001 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + # min_save_interval: ${update_time} + +# kWh From CT 4 +# This is included in the Grid calculation area + +#kWh From CT 5 + - platform: total_daily_energy + name: ${friendly_name} ${ct05Name} [kWh] + power_id: ct5Watts + filters: + - multiply: 0.001 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + # min_save_interval: ${update_time} + +#kWh From CT 6 + - platform: total_daily_energy + name: ${friendly_name} ${ct06Name} [kWh] + power_id: ct6Watts + filters: + - multiply: 0.001 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + # min_save_interval: ${update_time} + +#kWh From CT 7 + - platform: total_daily_energy + name: ${friendly_name} ${ct07Name} [kWh] + power_id: ct7Watts + filters: + - multiply: 0.001 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + # min_save_interval: ${update_time} + +#kWh From CT 8 + - platform: total_daily_energy + name: ${friendly_name} ${ct08Name} [kWh] + power_id: ct8Watts + filters: + - multiply: 0.001 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + # min_save_interval: ${update_time} + +#kWh From CT 9 + - platform: total_daily_energy + name: ${friendly_name} ${ct09Name} [kWh] + power_id: ct9Watts + filters: + - multiply: 0.001 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + # min_save_interval: ${update_time} + +#kWh From CT 10 + - platform: total_daily_energy + name: ${friendly_name} ${ct10Name} [kWh] + power_id: ct10Watts + filters: + - multiply: 0.001 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + # min_save_interval: ${update_time} + +#kWh From CT 11 (Heat Pump) + - platform: total_daily_energy + name: ${friendly_name} ${ct11Name} [kWh] + power_id: ct11Watts + filters: + - multiply: 0.001 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + # min_save_interval: ${update_time} + +#kWh From CT 12 + - platform: total_daily_energy + name: ${friendly_name} ${ct12Name} [kWh] + power_id: ct12Watts + filters: + - multiply: 0.001 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + # min_save_interval: ${update_time} + +#kWh From CT 13 + - platform: total_daily_energy + name: ${friendly_name} ${ct13Name} [kWh] + power_id: ct13Watts + filters: + - multiply: 0.001 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + # min_save_interval: ${update_time} + +#kWh From CT 14 + - platform: total_daily_energy + name: ${friendly_name} ${ct14Name} [kWh] + power_id: ct14Watts + filters: + - multiply: 0.001 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + # min_save_interval: ${update_time} + +#kWh From CT 15 + - platform: total_daily_energy + name: ${friendly_name} ${ct15Name} [kWh] + power_id: ct15Watts + filters: + - multiply: 0.001 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + # min_save_interval: ${update_time} + +#kWh From CT 16 + - platform: total_daily_energy + name: ${friendly_name} ${ct16Name} [kWh] + power_id: ct16Watts + filters: + - multiply: 0.001 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + # min_save_interval: ${update_time} + +#kWh From CT 17 + - platform: total_daily_energy + name: ${friendly_name} ${ct17Name} [kWh] + power_id: ct17Watts + filters: + - multiply: 0.001 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + # min_save_interval: ${update_time} + +#kWh From CT 18 + - platform: total_daily_energy + name: ${friendly_name} ${ct18Name} [kWh] + power_id: ct18Watts + filters: + - multiply: 0.001 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + # min_save_interval: ${update_time} + +#kWh From CT 19 +# this is not used + # - platform: total_daily_energy + # name: ${friendly_name} ${ct19Name} [kWh] + # power_id: ct19Watts + # filters: + # - multiply: 0.001 + # - throttle_average: ${kwh_report_interval} + # unit_of_measurement: kWh + # device_class: energy + # state_class: total_increasing + # # min_save_interval: ${update_time} + +#kWh From CT 20 + - platform: total_daily_energy + name: ${friendly_name} ${ct20Name} [kWh] + power_id: ct20Watts + filters: + - multiply: 0.001 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + # min_save_interval: ${update_time} + +#kWh From CT 21 + - platform: total_daily_energy + name: ${friendly_name} ${ct21Name} [kWh] + power_id: ct21Watts + filters: + - multiply: 0.001 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + # min_save_interval: ${update_time} + +#kWh From CT 22 + - platform: total_daily_energy + name: ${friendly_name} ${ct22Name} [kWh] + power_id: ct22WattsPositive + filters: + - multiply: 0.001 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + # min_save_interval: ${update_time} + +#kWh From CT 23 + - platform: total_daily_energy + name: ${friendly_name} ${ct23Name} [kWh] + power_id: ct23Watts + filters: + - multiply: 0.001 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + # min_save_interval: ${update_time} + +#kWh From CT 24 + - platform: total_daily_energy + name: ${friendly_name} ${ct24Name} [kWh] + power_id: ct24Watts + filters: + - multiply: 0.001 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + # min_save_interval: ${update_time} diff --git a/esphome/white-bed.yaml b/esphome/white-bed.yaml new file mode 100644 index 0000000..90bd901 --- /dev/null +++ b/esphome/white-bed.yaml @@ -0,0 +1,24 @@ +substitutions: + devicename: white-bed + entity_name: white_bed + friendly_name: White Bed + platform: ESP32 + board: nodemcu-32s + static_ip: !secret white-bed-ip + dout_pin: !secret white-bed-dout + clk_pin: !secret white-bed-clk + loadcell_zero: !secret white-bed-zero + loadcell_load: !secret white-bed-load + loadcell_weight: !secret white-bed-weight + +# Enable logging +logger: + level: DEBUG + logs: + sensor: INFO + hx711: DEBUG + +packages: + wifi: !include common/wifi.yaml + device_base: !include common/device_base.yaml + hx711: !include common/hx711_single_verbose.yaml diff --git a/get-colorxy.ps1 b/get-colorxy.ps1 new file mode 100644 index 0000000..8b35a27 --- /dev/null +++ b/get-colorxy.ps1 @@ -0,0 +1,46 @@ +function Get-ColorXY ([int]$Red=0, [int]$Green=0, [int]$Blue=0, [int]$Decimals=4) +{ + $redC = ($red / 255) + $greenC = ($green / 255) + $blueC = ($blue / 255) + + if ($redC -gt 0.04045) { + $redN = [math]::pow(($redC + .055) / (1 + .055),2.4) + } else { + $redN = $redC / 12.92 + } + + if ($greenC -gt 0.04045) { + $greenN = [math]::pow(($greenC + .055) / (1 + .055),2.4) + } else { + $greenN = $greenC / 12.92 + } + + if ($blueC -gt 0.04045) { + $blueN = [math]::pow(($blueC + .055) / (1 + .055),2.4) + } else { + $blueN = $blueC / 12.92 + } + + $X = $redN * 0.664511 + $greenN * 0.154324 + $blueN * 0.162028; + + $Y = $redN * 0.283881 + $greenN * 0.668433 + $blueN * 0.047685; + + $Z = $redN * 0.000088 + $greenN * 0.072310 + $blueN * 0.986039; + + if (($X+$Y+$Z) -gt 0) { + $x2 = $X / ($X + $Y + $Z) + $y2 = $Y / ($X + $Y + $Z) + } else { + $x2 = 0 + $y2 = 0 + } + + [pscustomobject]@{ + color_x = [math]::Round($x2,$Decimals) + color_y = [math]::Round($y2,$Decimals) + } + + #$x2, $y2 + +} \ No newline at end of file diff --git a/glances/glances.conf b/glances/glances.conf new file mode 100644 index 0000000..64c3dd1 --- /dev/null +++ b/glances/glances.conf @@ -0,0 +1,321 @@ +############################################################################## +# Globals Glances parameters +############################################################################## + +[global] +# Does Glances should check if a newer version is available on PyPI ? +check_update=false +# History size (maximum number of values) +# Default glances history size to 0 +# https://github.com/hassio-addons/addon-glances/issues/61 +# https://github.com/nicolargo/glances/issues/1341 +history_size=0 + +############################################################################## +# User interface +############################################################################## + +[outputs] +# Theme name for the Curses interface: black or white +curse_theme=black +# Limit the number of processes to display in the WebUI +max_processes_display=30 + +############################################################################## +# plugins +############################################################################## + +[quicklook] +# Define CPU, MEM and SWAP thresholds in % +cpu_careful=50 +cpu_warning=70 +cpu_critical=90 +mem_careful=50 +mem_warning=70 +mem_critical=90 +swap_careful=50 +swap_warning=70 +swap_critical=90 + +[cpu] +# Default values if not defined: 50/70/90 (except for iowait) +user_careful=50 +user_warning=70 +user_critical=90 +#user_log=False +#user_critical_action=echo {{user}} {{value}} {{max}} > /tmp/cpu.alert +system_careful=50 +system_warning=70 +system_critical=90 +steal_careful=50 +steal_warning=70 +steal_critical=90 +#steal_log=True +# I/O wait percentage should be lower than 1/# (Logical CPU cores) +# Leave commented to just use the default config (1/#-20% / 1/#-10% / 1/#) +#iowait_careful=30 +#iowait_warning=40 +#iowait_critical=50 +# Context switch limit (core / second) +# Leave commented to just use the default config (critical is 50000*# (Logical CPU cores) +#ctx_switches_careful=10000 +#ctx_switches_warning=12000 +#ctx_switches_critical=14000 + +[percpu] +# Define CPU thresholds in % +# Default values if not defined: 50/70/90 +user_careful=50 +user_warning=70 +user_critical=90 +iowait_careful=50 +iowait_warning=70 +iowait_critical=90 +system_careful=50 +system_warning=70 +system_critical=90 + +[gpu] +# Default processor values if not defined: 50/70/90 +proc_careful=50 +proc_warning=70 +proc_critical=90 +# Default memory values if not defined: 50/70/90 +mem_careful=50 +mem_warning=70 +mem_critical=90 + +[mem] +# Define RAM thresholds in % +# Default values if not defined: 50/70/90 +careful=50 +#careful_action_repeat=echo {{percent}} >> /tmp/memory.alert +warning=70 +critical=90 + +[memswap] +# Define SWAP thresholds in % +# Default values if not defined: 50/70/90 +careful=50 +warning=70 +critical=90 + +[load] +# Define LOAD thresholds +# Value * number of cores +# Default values if not defined: 0.7/1.0/5.0 per number of cores +# Source: http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages +# http://www.linuxjournal.com/article/9001 +careful=0.7 +warning=1.0 +critical=5.0 +#log=False + +[network] +# Default bitrate thresholds in % of the network interface speed +# Default values if not defined: 70/80/90 +rx_careful=70 +rx_warning=80 +rx_critical=90 +tx_careful=70 +tx_warning=80 +tx_critical=90 +# Define the list of hidden network interfaces (comma-separated regexp) +#hide=docker.*,lo +# WLAN 0 alias +#wlan0_alias=Wireless IF +# It is possible to overwrite the bitrate thresholds per interface +# WLAN 0 Default limits (in bits per second aka bps) for interface bitrate +#wlan0_rx_careful=4000000 +#wlan0_rx_warning=5000000 +#wlan0_rx_critical=6000000 +#wlan0_rx_log=True +#wlan0_tx_careful=700000 +#wlan0_tx_warning=900000 +#wlan0_tx_critical=1000000 +#wlan0_tx_log=True + +[wifi] +# Define the list of hidden wireless network interfaces (comma-separated regexp) +hide=lo,docker.* +# Define SIGNAL thresholds in db (lower is better...) +# Based on: http://serverfault.com/questions/501025/industry-standard-for-minimum-wifi-signal-strength +careful=-65 +warning=-75 +critical=-85 + +[diskio] +# Define the list of hidden disks (comma-separated regexp) +#hide=sda2,sda5,loop.* +hide=loop.* +# Alias for sda1 +#sda1_alias=IntDisk + +[fs] +# Define the list of hidden file system (comma-separated regexp) +#hide=/boot.* +# Define filesystem space thresholds in % +# Default values if not defined: 50/70/90 +# It is also possible to define per mount point value +# Example: /_careful=40 +careful=50 +warning=70 +critical=90 +# Allow additional file system types (comma-separated FS type) +#allow=zfs + +[folders] +# Define a folder list to monitor +# The list is composed of items (list_#nb <= 10) +# An item is defined by: +# * path: absolute path +# * careful: optional careful threshold (in MB) +# * warning: optional warning threshold (in MB) +# * critical: optional critical threshold (in MB) +folder_1_path=/config +folder_1_careful=4096 +folder_1_warning=8196 +folder_1_critical=12228 +folder_2_path=/share +folder_2_careful=4096 +folder_2_warning=8196 +folder_2_critical=12228 +folder_3_path=/backup +folder_3_careful=4096 +folder_3_warning=8196 +folder_3_critical=12228 +folder_4_path=/media +folder_4_careful=4096 +folder_4_warning=8196 +folder_4_critical=12228 + +[sensors] +# Sensors core thresholds (in Celsius...) +# Default values if not defined: 60/70/80 +temperature_core_careful=60 +temperature_core_warning=70 +temperature_core_critical=80 +# Temperatures threshold in °C for hddtemp +# Default values if not defined: 45/52/60 +temperature_hdd_careful=45 +temperature_hdd_warning=52 +temperature_hdd_critical=60 +# Battery threshold in % +battery_careful=80 +battery_warning=90 +battery_critical=95 +# Sensors alias +#temp1_alias=Motherboard 0 +#temp2_alias=Motherboard 1 +#core 0_alias=CPU Core 0 +#core 1_alias=CPU Core 1 + +[processlist] +# Define CPU/MEM (per process) thresholds in % +# Default values if not defined: 50/70/90 +cpu_careful=50 +cpu_warning=70 +cpu_critical=90 +mem_careful=50 +mem_warning=70 +mem_critical=90 +# +# Nice priorities range from -20 to 19. +# Configure nice levels using a comma separated list. +# +# Nice: Example 1, non-zero is warning (default behavior) +nice_warning=-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 +# +# Nice: Example 2, low priority processes escalate from careful to critical +#nice_careful=1,2,3,4,5,6,7,8,9 +#nice_warning=10,11,12,13,14 +#nice_critical=15,16,17,18,19 + +[ports] +# Ports scanner plugin configuration +# Interval in second between two scans +refresh=30 +# Set the default timeout (in second) for a scan (can be overwritten in the scan list) +timeout=3 +# If port_default_gateway is True, add the default gateway on top of the scan list +port_default_gateway=True +# +# Define the scan list (1 < x < 255) +# port_x_host (name or IP) is mandatory +# port_x_port (TCP port number) is optional (if not set, use ICMP) +# port_x_description is optional (if not set, define to host:port) +# port_x_timeout is optional and overwrite the default timeout value +# port_x_rtt_warning is optional and defines the warning threshold in ms +# +#port_1_host=192.168.0.1 +#port_1_port=80 +#port_1_description=Home Box +#port_1_timeout=1 +#port_2_host=www.free.fr +#port_2_description=My ISP +#port_3_host=www.google.com +#port_3_description=Internet ICMP +#port_3_rtt_warning=1000 +#port_4_description=Internet Web +#port_4_host=www.google.com +#port_4_port=80 +#port_4_rtt_warning=1000 +# +# Define Web (URL) monitoring list (1 < x < 255) +# web_x_url is the URL to monitor (example: http://my.site.com/folder) +# web_x_description is optional (if not set, define to URL) +# web_x_timeout is optional and overwrite the default timeout value +# web_x_rtt_warning is optional and defines the warning respond time in ms (approximatively) +# +#web_1_url=https://blog.nicolargo.com +#web_1_description=My Blog +#web_1_rtt_warning=3000 +#web_2_url=https://github.com +#web_3_url=http://www.google.fr +#web_3_description=Google Fr +#web_4_url=https://blog.nicolargo.com/nonexist +#web_4_description=Intranet + +[docker] +# Thresholds for CPU and MEM (in %) +cpu_careful=50 +cpu_warning=70 +cpu_critical=90 +mem_careful=20 +mem_warning=50 +mem_critical=70 +# +# Per container thresholds +#containername_cpu_careful=10 +#containername_cpu_warning=20 +#containername_cpu_critical=30 +# +# By default, Glances only display running containers +# Set the following key to True to display all containers +all=False + +############################################################################## +# Client/server +############################################################################## + +[serverlist] +# Define the static servers list +#server_1_name=localhost +#server_1_alias=My local PC +#server_1_port=61209 +#server_2_name=localhost +#server_2_port=61235 +#server_3_name=192.168.0.17 +#server_3_alias=Another PC on my network +#server_3_port=61209 +#server_4_name=pasbon +#server_4_port=61237 + +[passwords] +# Define the passwords list +# Syntax: host=password +# Where: host is the hostname +# password is the clear password +# Additionally (and optionally) a default password could be defined +#localhost=abc +#default=defaultpassword diff --git a/google_cloud.yaml b/google_cloud.yaml new file mode 100644 index 0000000..c469573 --- /dev/null +++ b/google_cloud.yaml @@ -0,0 +1,12 @@ +platform: google_cloud +key_file: .tts.token +#language: en-US +#gender: female +voice: en-US-Standard-E +encoding: mp3 +#speed: 1.0 +#pitch: 0.0 +#gain: 0.0 +text_type: ssml +profiles: + - large-home-entertainment-class-device \ No newline at end of file diff --git a/groups.yaml b/groups.yaml new file mode 100644 index 0000000..2cef26a --- /dev/null +++ b/groups.yaml @@ -0,0 +1,441 @@ +front_yard_plants: + #- plant.pansy + # - plant.evening_star + # does this work? + # back to working here? + - plant.plant_sensor_cea4 #Pepper + - plant.fineoffset_wh51_0ce593 #Hostas + +back_yard_plants: + - plant.plant_sensor_3eb0 #Manly Deck Box + - plant.fineoffset_wh51_00f935 #Daisies + - plant.plant_sensor_3eae #Golden Deck Box + +indoor_plants: + - plant.fineoffset_wh51_0d1e11 #Cactus Planter + +outdoor_plants: + - plant.fineoffset_wh51_0ce593 #Hostas + - plant.fineoffset_wh51_00f935 #Daisies + +ceiling_fans: + - fan.master_bedroom + - fan.nursery + +my_room_status: + - input_boolean.front_room_occupied + - input_boolean.kitchen_occupied + - input_boolean.dining_room_occupied + - input_boolean.great_room_occupied + - input_boolean.utility_room_occupied + - input_boolean.master_bedroom_occupied + - input_boolean.nursery_occupied + - input_boolean.master_bathroom_occupied + - input_boolean.blue_room_occupied + - input_boolean.mancave_occupied + - input_boolean.computer_area_occupied + - input_boolean.entryway_occupied + - input_boolean.garage_occupied + +mancave_motion: + name: Mancave Motion + icon: mdi:motion-sensor + entities: + - binary_sensor.mancave_motion_switch_home_security_motion_detection + +furnace_room_motion: + name: Furnace Room Motion + icon: mdi:motion-sensor + entities: + - binary_sensor.furnace_room_motion_switch_home_security_motion_detection + +blue_room_motion: + name: Blue Room Motion + icon: mdi:motion-sensor + entities: + - binary_sensor.blue_room_motion_switch_home_security_motion_detection + - binary_sensor.blue_room_multisensor_motion_detection + +front_room_motion: + name: Front Room Motion + icon: mdi:motion-sensor + entities: + - binary_sensor.front_room_motion_sensor_home_security_motion_detection + - binary_sensor.front_room_motion + +dining_room_motion: + name: Dining Room Motion + icon: mdi:motion-sensor + entities: + - binary_sensor.dining_room_motion_switch_home_security_motion_detection + - binary_sensor.dining_room_multisensor_motion_detection + - binary_sensor.bar_motion + +master_bedroom_doors: + name: Master Bedroom Doors + icon: hass:door + entities: + - binary_sensor.master_bedroom_closet_door_contact + - binary_sensor.master_bedroom_door_contact + - binary_sensor.master_suite_door_contact + +master_bathroom_doors: + icon: hass:door + name: Master Bathroom Doors + entities: + - binary_sensor.master_suite_door_contact + - binary_sensor.master_bathroom_door_contact + +master_bathroom_motion: + icon: mdi:motion-sensor + name: Master Bathroom Motion + entities: + - binary_sensor.master_bathroom_motion_switch_home_security_motion_detection + +computer_area_motion: + icon: mdi:motion-sensor + name: Computer Area Motion + entities: + - binary_sensor.computer_area_multisensor_home_security_motion_detection + - binary_sensor.great_room_motion_switch_home_security_motion_detection + +utility_room_motion: + icon: mdi:motion-sensor + name: Utility Room Motion + entities: + - binary_sensor.utility_room_motion_switch_home_security_motion_detection + +kitchen_motion: + icon: mdi:motion-sensor + name: Kitchen Motion + entities: + - binary_sensor.kitchen_motion_sensor_home_security_motion_detection + - binary_sensor.kitchen_multisensor_home_security_motion_detection + +great_room_motion: + icon: mdi:motion-sensor + name: Great Room Motion + entities: + - binary_sensor.great_room_multisensor_home_security_motion_detection + +nursery_doors: + icon: hass:door + name: Nursery Doors + entities: + - binary_sensor.nursery_door + - binary_sensor.nursery_closet_door_contact + +nursery_motion: + icon: mdi:motion-sensor + name: Nursery Motion + entities: + - binary_sensor.nursery_multisensor_home_security_motion_detection # The Aeotech + - binary_sensor.nursery_closet_motion_switch_home_security_motion_detection + +master_bedroom_motion: + icon: mdi:motion-sensor + name: Master Bedroom Motion + entities: + - binary_sensor.master_bedroom_multisensor_home_security_motion_detection + - binary_sensor.master_bedroom_closet_motion_switch_home_security_motion_detection + +entryway_motion: + icon: mdi:motion-sensor + name: Entryway Motion + entities: + - binary_sensor.entryway_motion_switch_home_security_motion_detection + - binary_sensor.great_room_motion_switch_home_security_motion_detection + - binary_sensor.entryway_motion + +garage_motion: + icon: mdi:motion-sensor + name: Garage Motion + entities: + - binary_sensor.garage_motion_switch_home_security_motion_detection + - binary_sensor.garage_multisensor_home_security_motion_detection + +workshop_motion: + icon: mdi:motion-sensor + name: Workshop Motion + entities: + - binary_sensor.workshop_person_occupancy + - binary_sensor.garage_multisensor_home_security_motion_detection + +front_porch_motion: + icon: mdi:motion-sensor + name: Front Porch Motion + entities: + - binary_sensor.front_porch_motion + +back_yard_motion: + icon: mdi:motion-sensor + name: Back Yard Motion + entities: + - binary_sensor.frigate_cam14_person_occupancy + +front_yard_motion: + icon: mdi:motion-sensor + name: Front Yard Motion + entities: + - binary_sensor.frigate_cam19_person_occupancy + - binary_sensor.front_porch_motion + +person_clint: + name: Clint + entities: + - device_tracker.pixel_7_wifi + - device_tracker.pixel_7 + +phone_clint: + name: Clints Phone + entities: + - device_tracker.pixel_7_wifi + - device_tracker.pixel_7 + +person_kristy: + name: Kristy + entities: + - device_tracker.kristy_s_phone + - device_tracker.pixel_4_wifi + +person_marshall: + name: Marshall + entities: + - device_tracker.nmap_tracker_fe_cf_82_b2_22_e0 + +person_emmett: + name: Emmett + entities: + - device_tracker.emmett_s_fire_wifi + +person_bridget: + name: Bridget + entities: + - device_tracker.bridget_s_fire_wifi + +saturn: + name: Saturn + icon: mdi:car-side + entities: + - binary_sensor.green_car_east_side + - binary_sensor.green_car_west_side + #- binary_sensor.frigate_cam04_vehicle_occupancy + +traverse: + name: Traverse + icon: mdi:car-estate + entities: + - binary_sensor.gray_suv_east_side + - binary_sensor.gray_suv_west_side + #- binary_sensor.frigate_cam04_vehicle_occupancy + +person_tess: + name: Tess + entities: [] + +person_ebin: + name: Ebin + entities: [] + +person_household: + name: Household + icon: hass:account-multiple + entities: + - input_boolean.bridget_home + - input_boolean.clint_home + - input_boolean.emmett_home + - input_boolean.kristy_home + - input_boolean.marshall_home + - input_boolean.tess_home + - input_boolean.ebin_home + - input_boolean.guest_home + +my_exterior_doors: + name: My Exterior Doors + icon: hass:door + entities: + - binary_sensor.front_door_contact + - binary_sensor.garage_door + - binary_sensor.outer_garage_door + - binary_sensor.patio_door_contact + - binary_sensor.inner_garage_door + +my_hvac_affecting_openings: + name: My HVAC Affecting Openings + icon: mdi:hvac + entities: + - binary_sensor.front_door_contact + - binary_sensor.patio_door_contact + - binary_sensor.inner_garage_door_open_to_outside + - binary_sensor.front_room_window_contact + - binary_sensor.nursery_window_contact + - binary_sensor.master_bedroom_window_contact + - binary_sensor.computer_area_window_contact + - binary_sensor.blue_room_window_contact + - binary_sensor.entryway_window_contact + +my_garage_doors: + name: My Garage Doors + icon: hass:door + entities: + - binary_sensor.garage_door + - binary_sensor.outer_garage_door + - binary_sensor.inner_garage_door + +my_exterior_windows: + name: My Exterior Windows + icon: hass:window-closed + entities: + - binary_sensor.front_room_window_contact + - binary_sensor.nursery_window_contact + - binary_sensor.master_bedroom_window_contact + - binary_sensor.computer_area_window_contact + - binary_sensor.blue_room_window_contact + - binary_sensor.entryway_window_contact + +my_lights: + name: My Lights + icon: hass:lightbuilb + entities: + - light.accent + - light.bar + - light.computer_area_hue + - light.great_room_hue + # - light.dining_room_hue + - light.dining_room_switch + - light.entryway_hue + - light.front_room_hue + - light.kitchen_hue + - light.master_bathroom_hue + - light.master_bedroom_accent + - light.nursery_hue + - light.black_bed_wled + - light.white_bed_wled + - light.garage_overhead + - light.driveway + - light.laundry + - light.utility_room_hue + +my_fans: + name: My Fans + icon: hass:fan + entities: + - fan.master_bedroom + - fan.nursery + +weavers_at_home: + name: Weavers At Home + entities: + - input_boolean.clint_home + - input_boolean.emmett_home + - input_boolean.bridget_home + +podeins_at_home: + name: Podeins At Home + entities: + - input_boolean.kristy_home + - input_boolean.marshall_home + - input_boolean.tess_home + - input_boolean.ebin_home + +adults_at_home: + name: Adults At Home + entities: + - input_boolean.clint_home + - input_boolean.kristy_home + +adults_awake: + name: Adults Awake + entities: + - input_boolean.clint_is_awake + - input_boolean.kristy_is_awake + +adults_in_bed: + name: Adults In Bed + entities: + - input_boolean.clint_in_bed + - input_boolean.kristy_in_bed + +teens_awake: + name: Teens Awake + entities: + - input_boolean.marshall_is_awake + - input_boolean.tess_is_awake + +teens_in_bed: + name: Teens In Bed + entities: + - input_boolean.marshall_in_bed + - input_boolean.tess_in_bed + +teens_at_home: + name: Teens At Home + entities: + - input_boolean.marshall_home + - input_boolean.tess_home + +kids_awake: + name: Kids Awake + entities: + - input_boolean.emmett_is_awake + - input_boolean.bridget_is_awake + - input_boolean.ebin_is_awake + +kids_in_bed: + name: Kids In Bed + entities: + - input_boolean.emmett_in_bed + - input_boolean.bridget_in_bed + - input_boolean.ebin_in_bed + +kids_at_home: + name: Kids At Home + entities: + - input_boolean.emmett_home + - input_boolean.bridget_home + - input_boolean.ebin_home + +downstairs_speakers: + name: Downstairs Speakers + icon: hass:music + entities: + - media_player.computer_area_hub + - media_player.great_room + - media_player.utility_room_clock + +all_my_speakers: + name: All My Speakers + icon: hass:music + entities: + - media_player.front_room_hub + - media_player.kitchen + - media_player.nursery_hub + - media_player.master_bedroom_clock + - media_player.bathroom_mini + - media_player.great_room + - media_player.computer_area_hub + - media_player.deck + - media_player.garage + - media_player.utility_room_clock + +lights_left_on: + name: Lights Left On + icon: mdi:lightbulb-multiple + entities: + - binary_sensor.front_room_light_left_on + - binary_sensor.computer_area_light_left_on + - binary_sensor.nursery_light_left_on + - binary_sensor.kitchen_light_left_on + - binary_sensor.master_bathroom_light_left_on + - binary_sensor.dining_room_light_left_on + - binary_sensor.entryway_light_left_on + - binary_sensor.great_room_light_left_on + - binary_sensor.utility_room_light_left_on + - binary_sensor.master_bedroom_light_left_on + - binary_sensor.garage_light_left_on + - binary_sensor.front_yard_light_left_on + - binary_sensor.mancave_light_left_on + - binary_sensor.blue_room_light_left_on + - binary_sensor.furnace_room_light_left_on + - binary_sensor.storage_room_light_left_on + - binary_sensor.back_yard_light_left_on diff --git a/lightcolors.txt b/lightcolors.txt new file mode 100644 index 0000000..fb201eb --- /dev/null +++ b/lightcolors.txt @@ -0,0 +1,572 @@ +FF,FF,FF,FFFFFF,White +00,00,00,000000,Black +FF,00,00,FF0000,Red +FF,7F,00,FF7F00,Orange +FF,FF,00,FFFF00,Yellow +00,FF,00,00FF00,Green +00,00,FF,0000FF,Blue +80,00,80,800080,Purple +FF,C0,CB,FFC0CB,Pink +A5,2A,2A,A52A2A,Brown +80,80,80,808080,Gray +FF,00,00,FF0000,Red +FF,7F,00,FF7F00,Orange +FF,FF,00,FFFF00,Yellow +7F,FF,00,7FFF00,Chartreuse +00,FF,00,00FF00,Green +00,FF,7F,00FF7F,Spring Green +00,FF,FF,00FFFF,Cyan +00,7F,FF,007FFF,Azure +00,00,FF,0000FF,Blue +7F,00,FF,7F00FF,Violet +FF,00,FF,FF00FF,Magenta +FF,00,7F,FF007F,Rose +F0,F8,FF,F0F8FF,Alice Blue +FA,EB,D7,FAEBD7,Antique White +00,FF,FF,00FFFF,Aqua +7F,FF,D4,7FFFD4,Aquamarine +F0,FF,FF,F0FFFF,Azure +F5,F5,DC,F5F5DC,Beige +00,00,00,000000,Black +00,00,FF,0000FF,Blue +8A,2B,E2,8A2BE2,Blue Violet +A5,2A,2A,A52A2A,Brown +5F,9E,A0,5F9EA0,Cadet Blue +7F,FF,00,7FFF00,Chartreuse +D2,69,1E,D2691E,Chocolate +FF,7F,50,FF7F50,Coral +64,95,ED,6495ED,Cornflower Blue +DC,14,3C,DC143C,Crimson +00,FF,FF,00FFFF,Cyan +00,00,8B,00008B,Dark Blue +00,8B,8B,008B8B,Dark Cyan +B8,86,0B,B8860B,Dark Goldenrod +A9,A9,A9,A9A9A9,Dark Gray +00,64,00,006400,Dark Green +BD,B7,6B,BDB76B,Dark Khaki +8B,00,8B,8B008B,Dark Magenta +55,6B,2F,556B2F,Dark Olive Green +FF,8C,00,FF8C00,Dark Orange +99,32,CC,9932CC,Dark Orchid +8B,00,00,8B0000,Dark Red +E9,96,7A,E9967A,Dark Salmon +2F,4F,4F,2F4F4F,Dark Slate Gray +00,CE,D1,00CED1,Dark Turquoise +94,00,D3,9400D3,Dark Violet +FF,14,93,FF1493,Deep Pink +00,BF,FF,00BFFF,Deep Sky Blue +69,69,69,696969,Dim Gray +1E,90,FF,1E90FF,Dodger Blue +B2,22,22,B22222,Fire Brick +FF,AF,0 , FFAF0,Floral White +22,8B,22,228B22,Forest Green +FF,00,FF,FF00FF,Fuschia +F8,F8,FF,F8F8FF,Ghost White +FF,D7,00,FFD700,Gold +DA,A5,20,DAA520,Goldenrod +80,80,80,808080,Gray +00,80,00,008000,Green +AD,FF,2F,ADFF2F,Green Yellow +F0,FF,F0,F0FFF0,Honeydew +FF,69,B4,FF69B4,Hot Pink +CD,5C,5C,CD5C5C,Indian Red +4B,00,82,4B0082,Indigo +FF,FF,F0,FFFFF0,Ivory +F0,E6,8C,F0E68C,Khaki +E6,E6,FA,E6E6FA,Lavender +FF,F0,F5,FFF0F5,Lavender Blush +7C,FC,00,7CFC00,Lawn Green +FF,FA,CD,FFFACD,Lemon Chiffon +AD,D8,E6,ADD8E6,Light Blue +F0,80,80,F08080,Light Coral +E0,FF,FF,E0FFFF,Light Cyan +FA,FA,D2,FAFAD2,Light Goldenrod Yellow +D3,D3,D3,D3D3D3,Light Gray +90,EE,90,90EE90,Light Green +FF,B6,C1,FFB6C1,Light Pink +FF,A0,7A,FFA07A,Light Salmon +20,B2,AA,20B2AA,Light Sea Green +87,CE,FA,87CEFA,Light Sky Blue +77,88,99,778899,Light Slate Gray +B0,C4,DE,B0C4DE,Light Steel Blue +FF,FF,E0,FFFFE0,Light Yellow +00,FF,00,00FF00,Lime +32,CD,32,32CD32,Lime Green +FA,F0,E6,FAF0E6,Linen +FF,00,FF,FF00FF,Magenta +80,00,00,800000,Maroon +66,CD,AA,66CDAA,Medium Aquamarine +00,00,CD,0000CD,Medium Blue +93,70,DB,9370DB,Medium Purple +3C,B3,71,3CB371,Medium Sea Green +00,FA,9A,00FA9A,Medium Spring Green +48,D1,CC,48D1CC,Medium Turquoise +19,19,70,191970,Midnight Blue +F5,FF,FA,F5FFFA,Mint Cream +FF,E4,E1,FFE4E1,Misty Rose +FF,DE,AD,FFDEAD,Navajo White +00,00,80,000080,Navy +FD,F5,E6,FDF5E6,Old Lace +80,80,00,808000,Olive +6B,8E,23,6B8E23,Olive Drab +FF,A5,00,FFA500,Orange +FF,45,00,FF4500,Orange Red +DA,70,D6,DA70D6,Orchid +FF,EF,D5,FFEFD5,Papaya Whip +FF,DA,B9,FFDAB9,Peach Puff +CD,85,3F,CD853F,Peru +FF,C0,CB,FFC0CB,Pink +DD,A0,DD,DDA0DD,Plum +B0,E0,E6,B0E0E6,Powder Blue +80,00,80,800080,Purple +FF,00,00,FF0000,Red +41,69,E1,4169E1,Royal Blue +FA,80,72,FA8072,Salmon +F4,A4,60,F4A460,Sandy Brown +2E,8B,57,2E8B57,Sea Green +FF,F5,EE,FFF5EE,Seashell +A0,52,2D,A0522D,Sienna +C0,C0,C0,C0C0C0,Silver +87,CE,EB,87CEEB,Sky Blue +6A,5A,CD,6A5ACD,Slate Blue +70,80,90,708090,Slate Gray +FF,FA,FA,FFFAFA,Snow +00,FF,7F,00FF7F,Spring Green +46,82,B4,4682B4,Steel Blue +D2,B4,8C,D2B48C,Tan +00,80,80,008080,Teal +D8,BF,D8,D8BFD8,Thistle +FF,63,47,FF6347,Tomato +40,E0,D0,40E0D0,Turquoise +EE,82,EE,EE82EE,Violet +F5,DE,B3,F5DEB3,Wheat +FF,FF,FF,FFFFFF,White +F5,F5,F5,F5F5F5,White Smoke +FF,FF,00,FFFF00,Yellow +9A,CD,32,9ACD32,Yellow Green +FF,00,00,FF0000,Red +FF,A5,00,FFA500,Orange +FF,CC,00,FFCC00,Amber +FF,FF,00,FFFF00,Yellow +7F,FF,00,7FFF00,Chartreuse +00,80,00,008000,Green +00,80,80,008080,Teal +00,00,FF,0000FF,Blue +7F,00,FF,7F00FF,Violet +80,00,80,800080,Purple +FF,00,FF,FF00FF,Magenta +FF,00,00,FF0000,Red +FF,A5,00,FFA500,Orange +FF,FF,00,FFFF00,Yellow +00,FF,00,00FF00,Green +00,00,FF,0000FF,Blue +4B,00,82,4B0082,Indigo +7F,00,FF,7F00FF,Violet +9E,1B,32,9E1B32,Alabama Crimson +1E,4D,2B,1E4D2B,Cal Poly Pomona Green +00,56,3B,00563B,Castleton Green +B3,1B,1B,B31B1B,Cornell Red +00,69,3E,00693E,Dartmouth Green +FE,5A,1D,FE5A1D,Giants Orange +A5,1C,30,A51C30,Harvard Crimson +7D,11,0C,7D110C,IU Crimson (Indiana University) +51,28,88,512888,KSU Purple (Kansas State University) +00,49,53,004953,MSU Green (Michigan State University) +84,16,17,841617,Oklahoma Crimson +EE,7F,2D,EE7F2D,Princeton Orange +76,FF,7A,76FF7A,Sacramento State Green +CC,00,00,CC0000,Utah Crimson +FF,82,00,FF8200,UT Orange (University of Tennessee) +A4,C6,39,A4C639,Android Green +DA,18,84,DA1884,Barbie Pink +00,AB,66,00AB66,GO Green (GO Transit, Toronto) +81,D8,D0,81D8D0,Tiffany Blue +FD,D5,B1,FDD5B1,Apricot +85,E0,E8,85E0E8,Aquamarine +7B,A0,5B,7BA05B,Asparagus +92,6F,5B,926F5B,Beaver +FE,6F,5E,FE6F5E,Bittersweet +00,00,00,000000,Black +00,66,FF,0066FF,Blue +99,99,CC,9999CC,Blue Bell +C8,C8,CD,C8C8CD,Blue-Gray +99,85,B7,9985B7,Blue-Green +64,56,B7,6456B7,Blue-Violet +DB,50,79,DB5079,Blush +C6,2D,42,C62D42,Brick Red +E6,67,CE,E667CE,Brilliant Rose +AF,59,3E,AF593E,Brown +FF,7F,49,FF7F49,Burnt Orange +E9,74,51,E97451,Burnt Sienna +80,55,33,805533,Burnt Umber +A9,B2,C3,A9B2C3,Cadet Blue +00,CC,99,00CC99,Caribbean Green +E6,2E,6B,E62E6B,Carmine +FF,A6,C9,FFA6C9,Carnation Pink +70,70,CC,7070CC,Celestial Blue +DA,32,87,DA3287,Cerise +02,A4,D3,02A4D3,Cerulean +33,9A,CC,339ACC,Cerulean Blue +73,6A,62,736A62,Charcoal Gray +8C,90,C8,8C90C8,Cobalt Blue +DA,8A,67,DA8A67,Copper +93,CC,EA,93CCEA,Cornflower +FF,B7,D5,FFB7D5,Cotton Canddy +FE,D8,5D,FED85D,Dandelion +B3,3B,24,B33B24,Dark Venetian Red +15,60,BD,1560BD,Denim +ED,C9,AF,EDC9AF,Desert Sand +61,40,51,614051,Eggplant +CC,47,4B,CC474B,English Vermilion +63,B7,6C,63B76C,Fern +5F,A7,77,5FA777,Forest Green +C1,54,C1,C154C1,Fuschia +87,42,1F,87421F,Fuzzy Wuzzy +E6,BE,8A,E6BE8A,Gold +FC,D6,67,FCD667,Goldenrod +9D,E0,93,9DE093,Granny Smith Apple +8B,86,80,8B8680,Gray +3A,A6,55,3AA655,Green +28,87,C8,2887C8,Green-Blue +F1,E7,88,F1E788,Green-Yellow +B9,FE,48,B9FE48,Indian Red +4F,69,C6,4F69C6,Indigo +A5,0B,5E,A50B5E,Jazzberry Jam +29,AB,87,29AB87,Jungle Green +FB,AE,D2,FBAED2,Lavender +FF,FF,9F,FFFF9F,Lemon Yellow +8F,D8,D8,8FD8D8,Light Blue +BE,E6,4B,BEE64B,Light Chrome Green +E6,73,5C,E6735C,Light Venetian Red +FF,B9,7B,FFB97B,Macaroni and Cheese +CC,33,36,CC3336,Madder Lake +F6,53,A6,F653A6,Magenta +CA,34,35,CA3435,Mahogany +F2,C6,49,F2C649,Maize +8D,90,A1,8D90A1,Manatee +E7,72,00,E77200,Mango Tango +C3,21,48,C32148,Maroon +F0,91,A9,F091A9,Mauvelous +6C,A6,7C,6CA67C,Medium Chrome Green +D9,6C,BE,D96CBE,Medium Rose +8F,47,B3,8F47B3,Medium Violet +FE,BA,AD,FEBAAD,Melon +00,46,8C,00468C,Midnight Blue +1A,B3,85,1AB385,Mountain Meadow +C8,50,9B,C8509B,Mulberry +00,66,CC,0066CC,Navy Blue +B5,B3,5C,B5B35C,Olive Green +FF,88,33,FF8833,Orange +FF,53,49,FF5349,Orange-Red +F8,D5,68,F8D568,Orange-Yellow +E2,9C,D2,E29CD2,Orchid +2D,38,3A,2D383A,Outer Space +00,9D,C4,009DC4,Pacific Blue +FF,CB,A4,FFCBA4,Peach +C3,CD,E6,C3CDE6,Periwinkle +E1,2C,2C,E12C2C,Permanent Geranium Lake +FD,D7,E4,FDD7E4,Pig Pink +01,78,6F,01786F,Pine Green +FC,74,FD,FC74FD,Pink Flamingo +F7,A3,8E,F7A38E,Pink Sherbert +8E,31,79,8E3179,Plum +65,2D,C1,652DC1,Purple Heart +D6,AE,DD,D6AEDD,Purple Mountain Majesty +D2,7D,46,D27D46,Raw Sienna +66,52,33,665233,Raw Umber +E3,0B,5C,E30B5C,Razzmatazz +ED,0A,3F,ED0A3F,Red +FF,68,1F,FF681F,Red-Orange +BB,33,85,BB3385,Red-Violet +00,CC,CC,00CCCC,Robin Egg Blue +6B,3F,A0,6B3FA0,Royal Purple +FF,91,A4,FF91A4,Salmon +93,DF,B8,93DFB8,Sea Green +9E,5B,40,9E5B40,Sepia +83,70,50,837050,Shadow +33,CC,99,33CC99,Shamrock +C9,C0,BB,C9C0BB,Silver +76,D7,EA,76D7EA,Sky Blue +EC,EB,BD,ECEBBD,Spring Green +FE,4C,40,FE4C40,Sunset Orange +D9,9A,6C,D99A6C,Tan +00,80,80,008080,Teal Blue +EB,B0,D7,EBB0D7,Thistle +FC,80,A5,FC80A5,Tickle Me Pink +D9,D6,CF,D9D6CF,Timberwolf +00,75,5E,00755E,Tropical Rain Forest +DE,A6,81,DEA681,Tumbleweed +6C,DA,E7,6CDAE7,Turquoise Blue +3F,26,BF,3F26BF,Ultramarine Blue +66,42,28,664228,Van Dyke Brown +CC,55,3D,CC553D,Venetian Red +83,59,A3,8359A3,Violet (Purple) +76,6E,C8,766EC8,Violet-Blue +F7,46,8A,F7468A,Violet-Red +FF,99,80,FF9980,Vivid Tangerine +80,37,90,803790,Vivid Violet +FF,FF,FF,FFFFFF,White +7A,89,B8,7A89B8,Wild Blue Yonder +FF,33,99,FF3399,Wild Strawberry +C9,A0,DC,C9A0DC,Wisteria +FB,E8,70,FBE870,Yellow +C5,E1,7A,C5E17A,Yellow-Green +FF,AE,42,FFAE42,Yellow-Orange +FF,35,5E,FF355E,Radical Red +FD,5B,78,FD5B78,Wild Watermelon +FF,60,37,FF6037,Outrageous Orange +FF,99,66,FF9966,Atomic Tangerine +FF,99,33,FF9933,Neon Carrot +FF,CC,33,FFCC33,Sunglow +FF,FF,66,FFFF66,Laser Lemon +FF,FF,66,FFFF66,Unmellow Yellow +CC,FF,00,CCFF00,Electric Lime +66,FF,66,66FF66,Screamin' Green +AA,F0,D1,AAF0D1,Magic Mint +50,BF,E6,50BFE6,Blizzard Blue +FF,6E,FF,FF6EFF,Shocking Pink +EE,34,D2,EE34D2,Razzle Dazzle Rose +FF,00,CC,FF00CC,Hot Magenta +FF,00,CC,FF00CC,Purple Pizzazz +C3,99,53,C39953,Aztec Gold +A1,7A,74,A17A74,Burnished Brown +6D,9B,C3,6D9BC3,Cerulean Frost +CD,60,7E,CD607E,Cinnamon Satin +AD,6F,69,AD6F69,Copper Penny +2E,2D,88,2E2D88,Cosmic Cobalt +AB,92,B3,AB92B3,Glossy Grape +67,67,67,676767,Granite Gray +6E,AE,A1,6EAEA1,Green Sheen +AE,98,AA,AE98AA,Lilac Luster +BB,B4,77,BBB477,Misty Moss +AD,43,79,AD4379,Mystic Maroon +B7,68,A2,B768A2,Pearly Purple +8B,A8,B7,8BA8B7,Pewter Blue +5D,A4,93,5DA493,Polished Pine +A6,A6,A6,A6A6A6,Quick Silver +9E,5E,6F,9E5E6F,Rose Dust +DA,2C,43,DA2C43,Rusty Red +77,8B,A5,778BA5,Shadow Blue +5F,A7,78,5FA778,Shiny Shamrock +5F,8A,8B,5F8A8B,Steel Teal +91,4E,75,914E75,Sugar Plum +8A,49,6B,8A496B,Twilight Lavender +56,88,7D,56887D,Wintergreen Dream +64,60,9A,64609A,Amethyst +93,37,09,933709,Citrine +14,A9,89,14A989,Emerald +46,9A,84,469A84,Jade +43,6C,B9,436CB9,Lapis Lazuli +46,94,96,469496,Malachite +35,38,39,353839,Onyx +BD,55,9C,BD559C,Rose Quartz +AA,40,69,AA4069,Ruby +2D,5D,A1,2D5DA1,Sapphire +83,2A,0D,832A0D,Smokey Topaz +A5,2A,2A,A52A2A,Auburn +F4,C2,C2,F4C2C2,Baby Pink +7C,0A,02,7C0A02,Barn Red +00,00,20,000020,Burgundy +8A,33,24,8A3324,Burnt Umber +E3,00,22,E30022,Cadmium Red +CE,20,29,CE2029,Cardinal +95,45,35,954535,Chesnut +E2,3D,28,E23D28,Chili Red +F8,83,79,F88379,Congo Pink +F8,83,79,F88379,Coral Pink +EA,3C,53,EA3C53,Desire +CE,20,29,CE2029,Fire Engine Red +ED,29,39,ED2939,Imperial Red +D7,83,7F,D7837F,New York Pink +E6,3E,62,E63E62,Paradise Pink +DE,A5,A4,DEA5A4,Pastel Pink +ED,1C,24,ED1C24,Pigment Red +B7,41,0E,B7410E,Rust +FF,91,A4,FF91A4,Salmon Pink +E4,71,7A,E4717A,Tango Pink +A9,11,01,A91101,Turkey Red +F3,D9,DF,F3D9DF,Vanilla Ice +72,2F,37,722F37,Wine +9F,81,70,9F8170,Beaver +ED,87,2D,ED872D,Cadmium Orange +ED,91,21,ED9121,Carrot Orange +F7,E7,CE,F7E7CE,Champagne +7B,3F,00,7B3F00,Chocolate +D2,69,1E,D2691E,Cocoa Brown +ED,C9,AF,EDC9AF,Desert Sand +E2,58,22,E25822,Flame +E4,9B,0F,E49B0F,Gamboge +FF,4F,00,FF4F00,International Orange +6B,44,23,6B4423,Kobicha +C1,9A,6B,C19A6B,Lion +EA,A2,21,EAA221,Marigold +FF,9F,00,FF9F00,Orange Peel +D9,90,58,D99058,Persian Orange +EC,58,00,EC5800,Persimmon +CD,85,3F,CD853F,Peru +FF,5A,36,FF5A36,Portland Orange +FF,75,18,FF7518,Pumpkin +80,46,1B,80461B,Russet +FF,79,00,FF7900,Safety Orange +F4,A4,60,F4A460,Sandy Brown +D2,B4,8C,D2B48C,Tan +48,3C,32,483C32,Taupe +CD,57,00,CD5700,Tawny +F8,83,79,F88379,Tea Rose +C1,9A,6B,C19A6B,Wood Brown +FF,BF,00,FFBF00,Amber +F5,F5,DC,F5F5DC,Beige +F0,DC,82,F0DC82,Buff +E4,D0,0A,E4D00A,Citrine +FF,FD,D0,FFFDD0,Cream +FF,D3,00,FFD300,Cyber Yellow +C2,B2,80,C2B280,Ecru +E6,A8,17,E6A817,Harvest Gold +F8,DE,7E,F8DE7E,Jasmine +F4,CA,16,F4CA16,Jonquil +C3,B0,91,C3B091,Khaki +FF,F4,4F,FFF44F,Lemon +F8,DE,7E,F8DE7E,Mellow Yellow +FF,C4,0C,FFC40C,Mikado Yellow +FF,DB,58,FFDB58,Mustard +FA,DA,5E,FADA5E,Naples Yellow +CF,B5,3B,CFB53B,Old Gold +FF,EF,00,FFEF00,Process Yellow +FA,DA,5E,FADA5E,Royal Yellow +EE,D2,02,EED202,Safety Yellow +F4,C4,30,F4C430,Saffron +FF,D8,00,FFD800,School Bus Yellow +E4,D9,6F,E4D96F,Straw +F3,E5,AB,F3E5AB,Vanilla +4B,53,20,4B5320,Army Green +8F,97,79,8F9779,Artichoke +87,A9,6B,87A96B,Asparagus +56,82,03,568203,Avacado +00,6A,4E,006A4E,Bottle Green +4F,FF,B0,4FFFB0,Bright Mint +AC,E1,AF,ACE1AF,Celadon +50,C8,78,50C878,Emerald +4F,79,42,4F7942,Fern Green +22,8B,22,228B22,Forest Green +3F,FF,00,3FFF00,Harlequin +35,5E,3B,355E3B,Hunter Green +13,88,08,138808,India Green +00,90,00,009000,Islamic Green +00,A8,6B,00A86B,Jade +4C,BB,17,4CBB17,Kelly Green +A9,BA,9D,A9BA9D,Laurel Green +0B,DA,51,0BDA51,Malachite +74,C3,65,74C365,Mantis +98,FB,98,98FB98,Mint Green +8A,9A,5B,8A9A5B,Moss Green +39,FF,14,39FF14,Neon Green +80,80,00,808000,Olive +00,66,00,006600,Pakistan Green +50,C8,78,50C878,Paris Green +44,4C,38,444C38,Rifle Green +67,92,67,679267,Russian Green +2E,8B,57,2E8B57,Sea Green +00,9E,60,009E60,Shamrock Green +00,80,00,008000,Slytherin Green +00,FF,FF,00FFFF,Aqua +7F,FF,D4,7FFFD4,Aquamarine +1B,4D,3E,1B4D3E,Brunswick Green +2F,84,7C,2F847C,Celadon Green +B2,FF,FF,B2FFFF,Celeste +00,7B,A7,007BA7,Cerulean +23,2B,2B,232B2B,Charleston Green +00,8B,8B,008B8B,Dark Cyan +7D,F9,FF,7DF9FF,Electric Blue +4D,5D,53,4D5D53,Feldgrau +5E,71,6A,5E716A,Gray Green +00,49,53,004953,Midnight Green +8D,A3,99,8DA399,Morning Blue +31,78,73,317873,Myrtle Green +00,A6,93,00A693,Persian Green +00,CC,CC,00CCCC,Robin Egg Blue +80,DA,EB,80DAEB,Sky Blue +00,80,80,008080,Teal +36,75,88,367588,Teal Blue +40,E0,D0,40E0D0,Turquoise +43,B3,AE,43B3AE,Verdigris +40,82,6D,40826D,Viridian +00,7F,FF,007FFF,Azure +89,CF,F0,89CFF0,Baby Blue +66,99,CC,6699CC,Blue Gray +00,BF,FF,00BFFF,Capri +64,95,ED,6495ED,Cornflower +10,34,A6,1034A6,Egyptian Blue +60,82,B6,6082B6,Glaucous +4C,51,6D,4C516D,Independence +4B,00,82,4B0082,Indigo +00,41,6A,00416A,Indigo Dye +54,5A,A7,545AA7,Liberty +AD,D8,E6,ADD8E6,Light Blue +19,19,70,191970,Midnight Blue +00,00,80,000080,Navy (Blue) +CC,CC,FF,CCCCFF,Periwinkle +B0,E0,E6,B0E0E6,Powder Blue +00,23,87,002387,Resolution Blue +08,25,67,082567,Sapphire +1D,29,51,1D2951,Space Cadet +46,82,B4,4682B4,Steel Blue +3F,00,FF,3F00FF,Ultramarine +70,29,63,702963,Byzantium +30,19,34,301934,Dark Purple +6F,00,FF,6F00FF,Electric Indigo +6C,30,82,6C3082,Eminence +DF,73,FF,DF73FF,Heliotrope +4B,00,82,4B0082,Indigo +00,41,6A,00416A,Indigo Dye +88,00,85,880085,Mardi Gras +E0,B0,FF,E0B0FF,Mauve +93,70,DB,9370DB,Medium Purple +DA,70,D6,DA70D6,Orchid +78,18,4A,78184A,Pansy Purple +DF,00,FF,DF00FF,Phlox +9A,4E,AE,9A4EAE,Purpureus +D8,BF,D8,D8BFD8,Thistle +96,83,EC,9683EC,Tropical Indigo +66,02,3C,66023C,Tyrian Purple +78,51,A9,7851A9,Royal Purple +AB,27,4F,AB274F,Amaranth +91,5C,83,915C83,Antique Fuchsia +F4,C2,C2,F4C2C2,Baby Pink +EF,BB,CC,EFBBCC,Cameo Pink +FF,A6,C9,FFA6C9,Carnation Pink +E6,8F,AC,E68FAC,Charm Pink +DE,6F,A1,DE6FA1,China Pink +FF,BC,D9,FFBCD9,Cotton Candy +8B,00,8B,8B008B,Dark Magenta +B5,33,89,B53389,Fandango +FD,3F,92,FD3F92,French Fuchsia +FD,6C,9E,FD6C9E,French Pink +C7,45,75,C74575,Fuchsia Rose +9F,45,76,9F4576,Magenta Haze +FF,DA,E9,FFDAE9,Mimi Pink +F7,7F,BE,F77FBE,Persian Pink +FD,DD,E6,FDDDE6,Piggy Pink +FF,C0,CB,FFC0CB,Pink +FF,DD,F4,FFDDF4,Pink Lace +DB,B2,D1,DBB2D1,Pink Lavender +8E,45,85,8E4585,Plum +E8,CC,D7,E8CCD7,Queen Pink +FF,00,7F,FF007F,Rose +AA,98,A9,AA98A9,Rose Quartz +FC,0F,C0,FC0FC0,Shocking Pink +C4,AE,AD,C4AEAD,Silver Pink +CF,71,AF,CF71AF,Sky Magenta +CF,6B,A9,CF6BA9,Super Pink +B2,BE,B5,B2BEB5,Ash Gray +84,84,82,848482,Battleship Gray +91,A3,B0,91A3B0,Cadet Gray +36,45,4F,36454F,Charcoal +69,69,69,696969,Dim Gray +72,74,72,727472,Gunmetal +34,34,34,343434,Jet +4C,58,66,4C5866,Marengo +72,74,72,727472,Nickel +E5,E4,E2,E5E4E2,Platinum +8A,7F,8D,8A7F8D,Rocket Metallic +C0,C0,C0,C0C0C0,Silver +70,80,90,708090,Slate Gray \ No newline at end of file diff --git a/lovelace/README.md b/lovelace/README.md new file mode 100644 index 0000000..61a073f --- /dev/null +++ b/lovelace/README.md @@ -0,0 +1,5 @@ +# The wonderful world of Lovelace + +Yes, I'm still using YAML. Yes, my YAML file was over 1.5K lines long. So, time for includes. + +And also checking that vscode remoting is working and pushing to GitHub just fine \ No newline at end of file diff --git a/lovelace/appliances/dishwasher.yaml b/lovelace/appliances/dishwasher.yaml new file mode 100644 index 0000000..0ccd36e --- /dev/null +++ b/lovelace/appliances/dishwasher.yaml @@ -0,0 +1,84 @@ +theme: Mushroom +title: Dishwasher +path: dishwasher +icon: mdi:dishwasher +subview: true +type: sidebar +badges: [] +cards: + - type: vertical-stack + cards: + - type: history-graph + entities: + - entity: sensor.pm_dishwasher_w + - entity: sensor.shelly_dishwasher_w + hours_to_show: 2 + + - type: vertical-stack + view_layout: + position: sidebar + cards: + - type: grid + cards: + - type: tile + entity: sensor.dishwasher + icon_tap_action: + action: navigate + navigation_path: /phone-yaml/dishwasher + tap_action: + action: navigate + navigation_path: /phone-yaml/dishwasher + show_entity_picture: true + vertical: true + - type: tile + entity: binary_sensor.keurig + icon_tap_action: + action: navigate + navigation_path: /phone-yaml/keurig + tap_action: + action: navigate + navigation_path: /phone-yaml/keurig + show_entity_picture: true + vertical: true + - type: tile + entity: binary_sensor.stove + icon_tap_action: + action: navigate + navigation_path: /phone-yaml/stove + tap_action: + action: navigate + navigation_path: /phone-yaml/stove + show_entity_picture: true + vertical: true + - type: tile + entity: sensor.tumble_dryer + icon_tap_action: + action: navigate + navigation_path: /phone-yaml/tumble-dryer + tap_action: + action: navigate + navigation_path: /phone-yaml/tumble-dryer + show_entity_picture: true + vertical: true + - type: tile + entity: sensor.washing_machine + icon_tap_action: + action: navigate + navigation_path: /phone-yaml/washing-machine + tap_action: + action: navigate + navigation_path: /phone-yaml/washing-machine + show_entity_picture: true + vertical: true + - type: glance + entities: + - entity: input_boolean.empty_dishwasher + - entity: sensor.pm_dishwasher_w + - entity: input_number.dishwasher_delay_on + - entity: input_number.dishwasher_on + - entity: input_number.dishwasher_delay_off + - entity: sensor.dishwasher + - entity: binary_sensor.dishwasher + - entity: binary_sensor.dishwasher_door_contact + - entity: sensor.dishwasher_door_device_temperature + - entity: sensor.shelly_dishwasher_w \ No newline at end of file diff --git a/lovelace/appliances/keurig.yaml b/lovelace/appliances/keurig.yaml new file mode 100644 index 0000000..9cafd86 --- /dev/null +++ b/lovelace/appliances/keurig.yaml @@ -0,0 +1,84 @@ +theme: Mushroom +title: Keurig +path: keurig +icon: mdi:coffee-maker +subview: true +type: sidebar +badges: [] +cards: + - type: vertical-stack + cards: + - type: history-graph + entities: + - entity: sensor.pm_dishwasher_w + - entity: sensor.shelly_dishwasher_w + hours_to_show: 2 + + - type: vertical-stack + view_layout: + position: sidebar + cards: + - type: grid + cards: + - type: tile + entity: sensor.dishwasher + icon_tap_action: + action: navigate + navigation_path: /phone-yaml/dishwasher + tap_action: + action: navigate + navigation_path: /phone-yaml/dishwasher + show_entity_picture: true + vertical: true + - type: tile + entity: binary_sensor.keurig + icon_tap_action: + action: navigate + navigation_path: /phone-yaml/keurig + tap_action: + action: navigate + navigation_path: /phone-yaml/keurig + show_entity_picture: true + vertical: true + - type: tile + entity: binary_sensor.stove + icon_tap_action: + action: navigate + navigation_path: /phone-yaml/stove + tap_action: + action: navigate + navigation_path: /phone-yaml/stove + show_entity_picture: true + vertical: true + - type: tile + entity: sensor.tumble_dryer + icon_tap_action: + action: navigate + navigation_path: /phone-yaml/tumble-dryer + tap_action: + action: navigate + navigation_path: /phone-yaml/tumble-dryer + show_entity_picture: true + vertical: true + - type: tile + entity: sensor.washing_machine + icon_tap_action: + action: navigate + navigation_path: /phone-yaml/washing-machine + tap_action: + action: navigate + navigation_path: /phone-yaml/washing-machine + show_entity_picture: true + vertical: true + - type: glance + entities: + - entity: input_boolean.empty_dishwasher + - entity: sensor.pm_dishwasher_w + - entity: input_number.dishwasher_delay_on + - entity: input_number.dishwasher_on + - entity: input_number.dishwasher_delay_off + - entity: sensor.dishwasher + - entity: binary_sensor.dishwasher + - entity: binary_sensor.dishwasher_door_contact + - entity: sensor.dishwasher_door_device_temperature + - entity: sensor.shelly_dishwasher_w \ No newline at end of file diff --git a/lovelace/appliances/stove.yaml b/lovelace/appliances/stove.yaml new file mode 100644 index 0000000..82421ca --- /dev/null +++ b/lovelace/appliances/stove.yaml @@ -0,0 +1,76 @@ +theme: Mushroom +title: Stove +path: stove +icon: mdi:stove +subview: true +type: sidebar +badges: [] +cards: + - type: vertical-stack + cards: + - type: history-graph + entities: + - entity: sensor.pm_stove_w + hours_to_show: 2 + + - type: vertical-stack + view_layout: + position: sidebar + cards: + - type: grid + cards: + - type: tile + entity: sensor.dishwasher + icon_tap_action: + action: navigate + navigation_path: /phone-yaml/dishwasher + tap_action: + action: navigate + navigation_path: /phone-yaml/dishwasher + show_entity_picture: true + vertical: true + - type: tile + entity: binary_sensor.keurig + icon_tap_action: + action: navigate + navigation_path: /phone-yaml/keurig + tap_action: + action: navigate + navigation_path: /phone-yaml/keurig + show_entity_picture: true + vertical: true + - type: tile + entity: binary_sensor.stove + icon_tap_action: + action: navigate + navigation_path: /phone-yaml/stove + tap_action: + action: navigate + navigation_path: /phone-yaml/stove + show_entity_picture: true + vertical: true + - type: tile + entity: sensor.tumble_dryer + icon_tap_action: + action: navigate + navigation_path: /phone-yaml/tumble-dryer + tap_action: + action: navigate + navigation_path: /phone-yaml/tumble-dryer + show_entity_picture: true + vertical: true + - type: tile + entity: sensor.washing_machine + icon_tap_action: + action: navigate + navigation_path: /phone-yaml/washing-machine + tap_action: + action: navigate + navigation_path: /phone-yaml/washing-machine + show_entity_picture: true + vertical: true + - type: glance + entities: + - entity: sensor.pm_stove_w + - entity: input_number.stove_on + diff --git a/lovelace/appliances/tumble-dryer.yaml b/lovelace/appliances/tumble-dryer.yaml new file mode 100644 index 0000000..67a8231 --- /dev/null +++ b/lovelace/appliances/tumble-dryer.yaml @@ -0,0 +1,82 @@ +theme: Mushroom +title: Tumble Dryer +path: tumble-dryer +icon: mdi:tumble-dryer +subview: true +type: sidebar +badges: [] +cards: + - type: vertical-stack + cards: + - type: history-graph + entities: + - entity: sensor.pm_dryer_w + hours_to_show: 2 + + - type: vertical-stack + view_layout: + position: sidebar + cards: + - type: grid + cards: + - type: tile + entity: sensor.dishwasher + icon_tap_action: + action: navigate + navigation_path: /phone-yaml/dishwasher + tap_action: + action: navigate + navigation_path: /phone-yaml/dishwasher + show_entity_picture: true + vertical: true + - type: tile + entity: binary_sensor.keurig + icon_tap_action: + action: navigate + navigation_path: /phone-yaml/keurig + tap_action: + action: navigate + navigation_path: /phone-yaml/keurig + show_entity_picture: true + vertical: true + - type: tile + entity: binary_sensor.stove + icon_tap_action: + action: navigate + navigation_path: /phone-yaml/stove + tap_action: + action: navigate + navigation_path: /phone-yaml/stove + show_entity_picture: true + vertical: true + - type: tile + entity: sensor.tumble_dryer + icon_tap_action: + action: navigate + navigation_path: /phone-yaml/tumble-dryer + tap_action: + action: navigate + navigation_path: /phone-yaml/tumble-dryer + show_entity_picture: true + vertical: true + - type: tile + entity: sensor.washing_machine + icon_tap_action: + action: navigate + navigation_path: /phone-yaml/washing-machine + tap_action: + action: navigate + navigation_path: /phone-yaml/washing-machine + show_entity_picture: true + vertical: true + - type: glance + entities: + - entity: input_boolean.fold_clothes + - entity: sensor.pm_dryer_w + - entity: input_number.tumble_dryer_delay_on + - entity: input_number.tumble_dryer_on + - entity: input_number.tumble_dryer_delay_off + - entity: sensor.tumble_dryer + - entity: binary_sensor.tumble_dryer + - entity: binary_sensor.tumble_dryer_door_contact + - entity: sensor.tumble_dryer_door_device_temperature diff --git a/lovelace/appliances/washing-machine.yaml b/lovelace/appliances/washing-machine.yaml new file mode 100644 index 0000000..4c8173d --- /dev/null +++ b/lovelace/appliances/washing-machine.yaml @@ -0,0 +1,84 @@ +theme: Mushroom +title: Washing Machine +path: washing-machine +icon: mdi:washing-machine +subview: true +type: sidebar +badges: [] +cards: + - type: vertical-stack + cards: + - type: history-graph + entities: + - entity: sensor.pm_laundry_plug_w + - entity: sensor.shelly_washing_machine_w + hours_to_show: 2 + + - type: vertical-stack + view_layout: + position: sidebar + cards: + - type: grid + cards: + - type: tile + entity: sensor.dishwasher + icon_tap_action: + action: navigate + navigation_path: /phone-yaml/dishwasher + tap_action: + action: navigate + navigation_path: /phone-yaml/dishwasher + show_entity_picture: true + vertical: true + - type: tile + entity: binary_sensor.keurig + icon_tap_action: + action: navigate + navigation_path: /phone-yaml/keurig + tap_action: + action: navigate + navigation_path: /phone-yaml/keurig + show_entity_picture: true + vertical: true + - type: tile + entity: binary_sensor.stove + icon_tap_action: + action: navigate + navigation_path: /phone-yaml/stove + tap_action: + action: navigate + navigation_path: /phone-yaml/stove + show_entity_picture: true + vertical: true + - type: tile + entity: sensor.tumble_dryer + icon_tap_action: + action: navigate + navigation_path: /phone-yaml/tumble-dryer + tap_action: + action: navigate + navigation_path: /phone-yaml/tumble-dryer + show_entity_picture: true + vertical: true + - type: tile + entity: sensor.washing_machine + icon_tap_action: + action: navigate + navigation_path: /phone-yaml/washing-machine + tap_action: + action: navigate + navigation_path: /phone-yaml/washing-machine + show_entity_picture: true + vertical: true + - type: glance + entities: + - entity: input_boolean.swap_laundry + - entity: sensor.pm_laundry_plug_w + - entity: input_number.washing_machine_delay_on + - entity: input_number.washing_machine_on + - entity: input_number.washing_machine_delay_off + - entity: sensor.washing_machine + - entity: binary_sensor.washing_machine + - entity: binary_sensor.washing_machine_door_contact + - entity: sensor.washing_machine_door_device_temperature + - entity: sensor.shelly_washing_machine_w diff --git a/lovelace/cameras/view-camera-01.yaml b/lovelace/cameras/view-camera-01.yaml new file mode 100644 index 0000000..f6893d2 --- /dev/null +++ b/lovelace/cameras/view-camera-01.yaml @@ -0,0 +1,151 @@ +type: vertical-stack +cards: + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam01 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam01_sub + icon: mdi:yoga + title: Blue Room + id: blue_room + live: + auto_mute: all + layout: + fit: fill + preload: true + draggable: true + show_image_during_load: false + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none + menu: + buttons: + frigate: + enabled: false + style: none + media_viewer: + draggable: false + lazy_load: false + dimensions: + aspect_ratio_mode: static + aspect_ratio: '16:9' + elements: + - type: image + image: /local/title-dark-double.png + style: + transform: initial + top: 90% + left: 0px + width: 100% + height: 10% + opacity: 70% + - type: image + entity: camera.frigate_cam01 + image: /local/title-dark-double.png + aspect_ratio: 100% + tap_action: + action: navigate + navigation_path: /ai-yml/ai-cam01 + style: + transform: initial + top: 0px + left: 0px + width: 100% + height: 100% + opacity: 0% + + - type: state-icon + entity: group.blue_room_motion + style: + left: 8% + top: 95% + - type: state-icon + entity: binary_sensor.frigate_cam01_speech_sound + style: + left: 30% + top: 95% + - type: state-icon + entity: sensor.furnace_room_person_count + style: + left: 50% + top: 95% + - type: state-icon + entity: input_boolean.blue_room_occupied + tap_action: + action: toggle + style: + left: 70% + top: 95% + - type: state-icon + entity: binary_sensor.blue_room_occupied + style: + top: 95% + left: 92% + + - type: conditional + conditions: + - entity: binary_sensor.blue_room_person_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.blue_room_person_occupancy + style: + top: 65% + left: 45% + - type: conditional + conditions: + - entity: binary_sensor.furnace_room_person_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.furnace_room_person_occupancy + style: + top: 22% + left: 83% + + - type: conditional + conditions: + - entity: light.blue_room_closet + state: "on" + elements: + - type: state-icon + entity: light.blue_room_closet + style: + top: 7% + left: 60% + tap_action: + action: toggle + + - type: conditional + conditions: + - entity: light.blue_room_hue + state: "on" + elements: + - type: state-icon + entity: light.blue_room_hue + style: + top: 7% + left: 50% + tap_action: + action: toggle + + - type: conditional + conditions: + - entity: light.furnace_room + state: "on" + elements: + - type: state-icon + entity: light.furnace_room + style: + top: 7% + left: 82% + tap_action: + action: toggle \ No newline at end of file diff --git a/lovelace/cameras/view-camera-03.yaml b/lovelace/cameras/view-camera-03.yaml new file mode 100644 index 0000000..56773cd --- /dev/null +++ b/lovelace/cameras/view-camera-03.yaml @@ -0,0 +1,145 @@ +type: vertical-stack +cards: + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam03 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam03_sub + icon: mdi:desktop-classic + title: Computer Area + id: computer_area + live: + auto_mute: all + layout: + fit: fill + preload: true + draggable: true + show_image_during_load: false + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none + menu: + buttons: + frigate: + enabled: false + style: none + media_viewer: + draggable: false + lazy_load: false + dimensions: + aspect_ratio_mode: static + aspect_ratio: '16:9' + elements: + - type: image + image: /local/title-dark-double.png + style: + transform: initial + top: 90% + left: 0px + width: 100% + height: 10% + opacity: 70% + - type: image + entity: camera.frigate_cam03 + image: /local/title-dark-double.png + aspect_ratio: 100% + tap_action: + action: navigate + navigation_path: /ai-yml/ai-cam03 + style: + transform: initial + top: 0px + left: 0px + width: 100% + height: 100% + opacity: 0% + - type: state-icon + entity: group.computer_area_motion + style: + left: 8% + top: 95% + - type: state-icon + entity: binary_sensor.frigate_cam03_speech_sound + style: + left: 30% + top: 95% + - type: state-icon + entity: sensor.great_room_person_count + style: + left: 50% + top: 95% + - type: state-icon + entity: input_boolean.computer_area_occupied + tap_action: + action: toggle + style: + left: 70% + top: 95% + - type: state-icon + entity: binary_sensor.computer_area_occupied + style: + top: 95% + left: 92% + + - type: conditional + conditions: + - entity: binary_sensor.great_room_person_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.great_room_person_occupancy + style: + top: 20% + left: 25% + + - type: conditional + conditions: + - entity: binary_sensor.utility_room_person_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.utility_room_person_occupancy + style: + top: 17% + left: 57% + + - type: conditional + conditions: + - entity: binary_sensor.entryway_person_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.entryway_person_occupancy + style: + top: 25% + left: 97% + + - type: conditional + conditions: + - entity: binary_sensor.computer_area_person_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.computer_area_person_occupancy + style: + top: 87% + left: 80% + + - type: conditional + conditions: + - entity: binary_sensor.computer_chair_contact_occupied + state: "on" + elements: + - type: state-icon + entity: binary_sensor.computer_chair_contact_occupied + style: + top: 87% + left: 75% diff --git a/lovelace/cameras/view-camera-04.yaml b/lovelace/cameras/view-camera-04.yaml new file mode 100644 index 0000000..92e682e --- /dev/null +++ b/lovelace/cameras/view-camera-04.yaml @@ -0,0 +1,223 @@ +type: vertical-stack +cards: + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam04 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam04_sub + live: + auto_mute: all + layout: + fit: fill + preload: true + draggable: true + show_image_during_load: false + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none + menu: + buttons: + frigate: + enabled: false + style: none + media_viewer: + draggable: false + lazy_load: false + dimensions: + aspect_ratio_mode: static + aspect_ratio: '16:9' + elements: + - type: image + image: /local/title-dark-double.png + style: + transform: initial + top: 90% + left: 0px + width: 100% + height: 10% + opacity: 70% + - type: image + entity: camera.frigate_cam04 + image: /local/title-dark-double.png + aspect_ratio: 100% + tap_action: + action: navigate + navigation_path: /ai-yml/ai-cam04 + style: + transform: initial + top: 0px + left: 0px + width: 100% + height: 100% + opacity: 0% + + - type: state-icon + entity: group.garage_motion + style: + left: 8% + top: 95% + - type: state-icon + entity: binary_sensor.frigate_cam04_speech_sound + style: + left: 22% + top: 95% + - type: state-icon + entity: sensor.east_side_vehicle_count + style: + left: 36% + top: 95% + - type: state-icon + entity: sensor.workshop_person_count + style: + left: 50% + top: 95% + - type: state-icon + entity: sensor.west_side_vehicle_count + style: + left: 64% + top: 95% + - type: state-icon + entity: input_boolean.garage_occupied + tap_action: + action: toggle + style: + left: 78% + top: 95% + - type: state-icon + entity: binary_sensor.garage_occupied + style: + top: 95% + left: 92% + + - type: state-icon + entity: light.garage_overhead + tap_action: + action: toggle + style: + top: 5% + left: 50% + + - type: state-icon + entity: cover.garage_door + tap_action: + action: toggle + style: + top: 40% + left: 83% + + - type: conditional + conditions: + - entity: binary_sensor.parking_spot_vehicle_occupancy + state: "on" + - entity: binary_sensor.garage_door + state: "on" + elements: + - type: state-icon + entity: binary_sensor.parking_spot_vehicle_occupancy + style: + top: 43% + left: 40% + + - type: conditional + conditions: + - entity: binary_sensor.from_street_vehicle_occupancy + state: "on" + - entity: binary_sensor.garage_door + state: "on" + elements: + - type: state-icon + entity: binary_sensor.from_street_vehicle_occupancy + style: + top: 40% + left: 60% + + - type: conditional + conditions: + - entity: binary_sensor.driveway_east_side_vehicle_occupancy + state: "on" + - entity: binary_sensor.garage_door + state: "on" + elements: + - type: state-icon + entity: binary_sensor.driveway_east_side_vehicle_occupancy + style: + top: 50% + left: 63% + + - type: conditional + conditions: + - entity: binary_sensor.driveway_center_vehicle_occupancy + state: "on" + - entity: binary_sensor.garage_door + state: "on" + elements: + - type: state-icon + entity: binary_sensor.driveway_center_vehicle_occupancy + style: + top: 50% + left: 55% + + - type: conditional + conditions: + - entity: binary_sensor.driveway_west_side_vehicle_occupancy + state: "on" + - entity: binary_sensor.garage_door + state: "on" + elements: + - type: state-icon + entity: binary_sensor.driveway_west_side_vehicle_occupancy + style: + top: 50% + left: 47% + + - type: conditional + conditions: + - entity: binary_sensor.walkway_person_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.walkway_person_occupancy + style: + top: 26% + left: 72% + + - type: conditional + conditions: + - entity: binary_sensor.workshop_person_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.workshop_person_occupancy + style: + top: 50% + left: 85% + + - type: conditional + conditions: + - entity: binary_sensor.east_side_vehicle_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.east_side_vehicle_occupancy + style: + top: 80% + left: 63% + + - type: conditional + conditions: + - entity: binary_sensor.west_side_vehicle_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.west_side_vehicle_occupancy + style: + top: 80% + left: 30% diff --git a/lovelace/cameras/view-camera-06.yaml b/lovelace/cameras/view-camera-06.yaml new file mode 100644 index 0000000..6e0f952 --- /dev/null +++ b/lovelace/cameras/view-camera-06.yaml @@ -0,0 +1,109 @@ +type: vertical-stack +cards: + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam06 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam06_sub + live: + auto_mute: all + layout: + fit: fill + preload: true + draggable: true + show_image_during_load: false + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none + menu: + buttons: + frigate: + enabled: false + style: none + media_viewer: + draggable: false + lazy_load: false + dimensions: + aspect_ratio_mode: static + aspect_ratio: '16:9' + elements: + - type: image + image: /local/title-dark-double.png + style: + transform: initial + top: 90% + left: 0px + width: 100% + height: 10% + opacity: 70% + - type: image + entity: camera.frigate_cam06 + image: /local/title-dark-double.png + aspect_ratio: 100% + tap_action: + action: navigate + navigation_path: /ai-yml/ai-cam06 + style: + transform: initial + top: 0px + left: 0px + width: 100% + height: 100% + opacity: 0% + + - type: state-icon + entity: group.master_bedroom_motion + style: + left: 8% + top: 95% + - type: state-icon + entity: binary_sensor.frigate_cam06_speech_sound + style: + left: 30% + top: 95% + - type: state-icon + entity: sensor.master_bed_person_count + style: + left: 50% + top: 95% + - type: state-icon + entity: input_boolean.master_bedroom_occupied + tap_action: + action: toggle + style: + left: 70% + top: 95% + - type: state-icon + entity: binary_sensor.master_bedroom_occupied + style: + top: 95% + left: 92% + + - type: conditional + conditions: + - entity: binary_sensor.master_bedroom_person_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.master_bedroom_person_occupancy + style: + top: 50% + left: 10% + - type: conditional + conditions: + - entity: binary_sensor.master_bed_person_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.master_bed_person_occupancy + style: + top: 50% + left: 70% diff --git a/lovelace/cameras/view-camera-07.yaml b/lovelace/cameras/view-camera-07.yaml new file mode 100644 index 0000000..21a1cb9 --- /dev/null +++ b/lovelace/cameras/view-camera-07.yaml @@ -0,0 +1,109 @@ +type: vertical-stack +cards: + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam07 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam07_sub + live: + auto_mute: all + layout: + fit: fill + preload: true + draggable: true + show_image_during_load: false + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none + menu: + buttons: + frigate: + enabled: false + style: none + media_viewer: + draggable: false + lazy_load: false + dimensions: + aspect_ratio_mode: static + aspect_ratio: '16:9' + elements: + - type: image + image: /local/title-dark-double.png + style: + transform: initial + top: 90% + left: 0px + width: 100% + height: 10% + opacity: 70% + - type: image + entity: camera.frigate_cam07 + image: /local/title-dark-double.png + aspect_ratio: 100% + tap_action: + action: navigate + navigation_path: /ai-yml/ai-cam07 + style: + transform: initial + top: 0px + left: 0px + width: 100% + height: 100% + opacity: 0% + + - type: state-icon + entity: group.master_bedroom_motion + style: + left: 8% + top: 95% + - type: state-icon + entity: binary_sensor.frigate_cam07_speech_sound + style: + left: 30% + top: 95% + - type: state-icon + entity: sensor.master_bed_person_count + style: + left: 50% + top: 95% + - type: state-icon + entity: input_boolean.master_bedroom_occupied + tap_action: + action: toggle + style: + left: 70% + top: 95% + - type: state-icon + entity: binary_sensor.master_bedroom_occupied + style: + top: 95% + left: 92% + + - type: conditional + conditions: + - entity: binary_sensor.master_bedroom_person_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.master_bedroom_person_occupancy + style: + top: 22% + left: 90% + - type: conditional + conditions: + - entity: binary_sensor.master_bed_person_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.master_bed_person_occupancy + style: + top: 50% + left: 30% diff --git a/lovelace/cameras/view-camera-08.yaml b/lovelace/cameras/view-camera-08.yaml new file mode 100644 index 0000000..7268180 --- /dev/null +++ b/lovelace/cameras/view-camera-08.yaml @@ -0,0 +1,200 @@ +type: vertical-stack +cards: + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam08 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam08_sub + live: + auto_mute: all + layout: + fit: fill + preload: true + draggable: true + show_image_during_load: false + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none + menu: + buttons: + frigate: + enabled: false + style: none + media_viewer: + draggable: false + lazy_load: false + dimensions: + aspect_ratio_mode: static + aspect_ratio: '16:9' + elements: + - type: image + image: /local/title-dark-double.png + style: + transform: initial + top: 90% + left: 0px + width: 100% + height: 10% + opacity: 70% + - type: image + entity: camera.frigate_cam08 + image: /local/title-dark-double.png + aspect_ratio: 100% + # tap_action: + # action: navigate + # navigation_path: /ai-yml/ai-cam08 + style: + transform: initial + top: 0px + left: 0px + width: 100% + height: 100% + opacity: 0% + + - type: state-icon + entity: group.nursery_motion + style: + left: 8% + top: 95% + - type: state-icon + entity: binary_sensor.frigate_cam08_speech_sound + style: + left: 24% + top: 95% + - type: state-icon + entity: binary_sensor.black_bed_occupied + style: + left: 40% + top: 95% + - type: state-icon + entity: binary_sensor.white_bed_occupied + style: + left: 60% + top: 95% + transform: scaleX(-1) translate(50%, -50%) + - type: state-icon + entity: input_boolean.nursery_occupied + tap_action: + action: toggle + style: + left: 76% + top: 95% + - type: state-icon + entity: binary_sensor.nursery_occupied + style: + top: 95% + left: 92% + + - type: conditional + conditions: + - entity: binary_sensor.black_bed_person_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.black_bed_person_occupancy + style: + top: 30% + left: 23% + - type: conditional + conditions: + - entity: binary_sensor.black_bed_occupied + state: "on" + elements: + - type: state-icon + entity: binary_sensor.black_bed_occupied + style: + top: 30% + left: 18% + - type: conditional + conditions: + - entity: binary_sensor.white_bed_person_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.white_bed_person_occupancy + style: + top: 65% + left: 85% + - type: conditional + conditions: + - entity: binary_sensor.white_bed_occupied + state: "on" + elements: + - type: state-icon + entity: binary_sensor.white_bed_occupied + style: + top: 65% + left: 80% + - type: conditional + conditions: + - entity: binary_sensor.nursery_person_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.nursery_person_occupancy + style: + top: 50% + left: 50% + + - type: state-icon + entity: media_player.nursery_hub + style: + left: 45% + top: 16% + + - type: state-icon + entity: light.nursery_ceiling_hue + style: + left: 50% + top: 3% + tap_action: + action: toggle + hold_action: + action: more-info + + - type: state-icon + entity: light.nursery_closet + style: + left: 80% + top: 7% + tap_action: + action: toggle + hold_action: + action: more-info + + - type: state-icon + entity: light.black_bed_wled + style: + left: 8% + top: 7% + + - type: state-icon + entity: select.black_bed_wled_preset + style: + left: 8% + top: 12% + + - type: state-icon + entity: light.white_bed_wled + style: + left: 98% + top: 65% + - type: state-icon + entity: select.white_bed_wled_preset + style: + left: 98% + top: 70% + + - type: state-icon + entity: binary_sensor.nursery_closet_motion_switch_home_security_motion_detection + style: + left: 84% + top: 22% diff --git a/lovelace/cameras/view-camera-12.yaml b/lovelace/cameras/view-camera-12.yaml new file mode 100644 index 0000000..2551457 --- /dev/null +++ b/lovelace/cameras/view-camera-12.yaml @@ -0,0 +1,119 @@ +type: vertical-stack +cards: + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam12 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam12_sub + live: + auto_mute: all + layout: + fit: fill + preload: true + draggable: true + show_image_during_load: false + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none + menu: + buttons: + frigate: + enabled: false + style: none + media_viewer: + draggable: false + lazy_load: false + dimensions: + aspect_ratio_mode: static + aspect_ratio: '16:9' + elements: + - type: image + image: /local/title-dark-double.png + style: + transform: initial + top: 90% + left: 0px + width: 100% + height: 10% + opacity: 70% + - type: image + entity: camera.frigate_cam12 + image: /local/title-dark-double.png + aspect_ratio: 100% + tap_action: + action: navigate + navigation_path: /ai-yml/ai-cam12 + style: + transform: initial + top: 0px + left: 0px + width: 100% + height: 100% + opacity: 0% + + - type: state-icon + entity: group.kitchen_motion + style: + left: 8% + top: 95% + - type: state-icon + entity: binary_sensor.frigate_cam12_speech_sound + style: + left: 30% + top: 95% + - type: state-icon + entity: input_boolean.kitchen_occupied + tap_action: + action: toggle + style: + left: 70% + top: 95% + - type: state-icon + entity: binary_sensor.kitchen_occupied + style: + top: 95% + left: 92% + + - type: state-icon + entity: binary_sensor.pantry_door_contact + style: + top: 29% + left: 4% + + - type: conditional + conditions: + - entity: binary_sensor.dishwasher + state: "on" + elements: + - type: state-icon + entity: binary_sensor.dishwasher + style: + top: 47% + left: 41% + + - type: conditional + conditions: + - entity: binary_sensor.kitchen_person_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.kitchen_person_occupancy + style: + top: 70% + left: 41% + + - type: state-icon + entity: switch.shelly_sliding_glass_door + style: + top: 3% + left: 55% + tap_action: + action: toggle diff --git a/lovelace/cameras/view-camera-13.yaml b/lovelace/cameras/view-camera-13.yaml new file mode 100644 index 0000000..0aaf07a --- /dev/null +++ b/lovelace/cameras/view-camera-13.yaml @@ -0,0 +1,122 @@ +type: vertical-stack +cards: + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam13 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam13_sub + live: + auto_mute: all + layout: + fit: fill + preload: true + draggable: true + show_image_during_load: false + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none + menu: + buttons: + frigate: + enabled: false + style: none + media_viewer: + draggable: false + lazy_load: false + dimensions: + aspect_ratio_mode: static + aspect_ratio: '16:9' + elements: + - type: image + image: /local/title-dark-double.png + style: + transform: initial + top: 90% + left: 0px + width: 100% + height: 10% + opacity: 70% + - type: image + entity: camera.frigate_cam13 + image: /local/title-dark-double.png + aspect_ratio: 100% + tap_action: + action: navigate + navigation_path: /ai-yml/ai-cam13 + style: + transform: initial + top: 0px + left: 0px + width: 100% + height: 100% + opacity: 0% + + - type: state-icon + entity: group.front_room_motion + style: + left: 8% + top: 95% + - type: state-icon + entity: binary_sensor.frigate_cam13_speech_sound + style: + left: 30% + top: 95% + - type: state-icon + entity: sensor.dining_room_person_count + style: + left: 50% + top: 95% + - type: state-icon + entity: input_boolean.front_room_occupied + tap_action: + action: toggle + style: + left: 70% + top: 95% + - type: state-icon + entity: binary_sensor.front_room_occupied + style: + top: 95% + left: 92% + + - type: state-icon + entity: binary_sensor.patio_door_contact + style: + top: 29% + left: 4% + + - type: state-icon + entity: switch.shelly_sliding_glass_door + style: + top: 34% + left: 4% + + - type: conditional + conditions: + - entity: binary_sensor.front_room_person_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.front_room_person_occupancy + style: + top: 55% + left: 55% + + - type: conditional + conditions: + - entity: binary_sensor.dining_room_person_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.dining_room_person_occupancy + style: + top: 33% + left: 20% diff --git a/lovelace/cameras/view-camera-14.yaml b/lovelace/cameras/view-camera-14.yaml new file mode 100644 index 0000000..81e5473 --- /dev/null +++ b/lovelace/cameras/view-camera-14.yaml @@ -0,0 +1,109 @@ +type: vertical-stack +cards: + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam14 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam14_sub + live: + auto_mute: all + layout: + fit: fill + preload: true + draggable: true + show_image_during_load: false + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none + menu: + buttons: + frigate: + enabled: false + style: none + media_viewer: + draggable: false + lazy_load: false + dimensions: + aspect_ratio_mode: static + aspect_ratio: '16:9' + elements: + - type: image + image: /local/title-dark-double.png + style: + transform: initial + top: 90% + left: 0px + width: 100% + height: 10% + opacity: 70% + - type: image + entity: camera.frigate_cam14 + image: /local/title-dark-double.png + aspect_ratio: 100% + tap_action: + action: navigate + navigation_path: /ai-yml/ai-cam14 + style: + transform: initial + top: 0px + left: 0px + width: 100% + height: 100% + opacity: 0% + + - type: state-icon + entity: group.back_yard_motion + style: + left: 8% + top: 95% + - type: state-icon + entity: binary_sensor.frigate_cam14_speech_sound + style: + left: 30% + top: 95% + - type: state-icon + entity: sensor.back_yard_animal_count + style: + left: 50% + top: 95% + - type: state-icon + entity: input_boolean.back_yard_occupied + tap_action: + action: toggle + style: + left: 70% + top: 95% + - type: state-icon + entity: binary_sensor.back_yard_occupied + style: + top: 95% + left: 92% + + - type: conditional + conditions: + - entity: binary_sensor.back_yard_person_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.back_yard_person_occupancy + style: + top: 45% + left: 45% + - type: conditional + conditions: + - entity: binary_sensor.back_yard_animal_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.back_yard_animal_occupancy + style: + top: 45% + left: 55% diff --git a/lovelace/cameras/view-camera-18.yaml b/lovelace/cameras/view-camera-18.yaml new file mode 100644 index 0000000..778e51e --- /dev/null +++ b/lovelace/cameras/view-camera-18.yaml @@ -0,0 +1,204 @@ +type: vertical-stack +cards: + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam18 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam18_sub + live: + auto_mute: all + layout: + fit: fill + preload: true + draggable: true + show_image_during_load: true + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none + menu: + buttons: + frigate: + enabled: false + style: none + media_viewer: + draggable: false + lazy_load: false + dimensions: + aspect_ratio_mode: static + aspect_ratio: '16:9' + elements: + - type: image + image: /local/title-dark-double.png + style: + transform: initial + top: 90% + left: 0px + width: 100% + height: 10% + opacity: 70% + - type: image + entity: camera.frigate_cam18 + image: /local/title-dark-double.png + aspect_ratio: 100% + tap_action: + action: navigate + navigation_path: /ai-yml/ai-cam18 + style: + transform: initial + top: 0px + left: 0px + width: 100% + height: 100% + opacity: 0% + + - type: state-icon + entity: binary_sensor.front_yard_person_occupancy + style: + left: 8% + top: 95% + - type: state-icon + entity: binary_sensor.frigate_cam18_speech_sound + style: + left: 30% + top: 95% + + - type: state-icon + entity: binary_sensor.frigate_cam18_vehicle_occupancy + style: + left: 50% + top: 95% + - type: state-icon + entity: input_boolean.front_yard_occupied + tap_action: + action: toggle + style: + left: 70% + top: 95% + - type: state-icon + entity: cover.garage_door + style: + top: 95% + left: 92% + + - type: conditional + conditions: + - entity: binary_sensor.driveway_east_side_vehicle_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.driveway_east_side_vehicle_occupancy + style: + top: 35% + left: 65% + + - type: conditional + conditions: + - entity: binary_sensor.driveway_center_vehicle_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.driveway_center_vehicle_occupancy + style: + top: 45% + left: 55% + + - type: conditional + conditions: + - entity: binary_sensor.driveway_west_side_vehicle_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.driveway_west_side_vehicle_occupancy + style: + top: 55% + left: 45% + + - type: conditional + conditions: + - entity: binary_sensor.parking_spot_vehicle_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.parking_spot_vehicle_occupancy + style: + top: 35% + left: 2% + + - type: conditional + conditions: + - entity: binary_sensor.from_street_vehicle_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.from_street_vehicle_occupancy + style: + top: 17% + left: 12% + + - type: conditional + conditions: + - entity: binary_sensor.from_street_person_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.from_street_person_occupancy + style: + top: 17% + left: 17% + + - type: conditional + conditions: + - entity: binary_sensor.front_porch_person_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.front_porch_person_occupancy + style: + top: 32% + left: 97% + + - type: conditional + conditions: + - entity: binary_sensor.front_yard_person_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.front_yard_person_occupancy + style: + top: 12% + left: 76% + + - type: conditional + conditions: + - entity: binary_sensor.front_yard_animal_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.front_yard_animal_occupancy + style: + top: 12% + left: 71% + + - type: state-icon + entity: light.front_porch_overhead + style: + top: 12% + left: 98% + tap_action: + action: toggle + + - type: state-icon + entity: light.driveway + style: + top: 80% + left: 98% + tap_action: + action: toggle \ No newline at end of file diff --git a/lovelace/cameras/view-camera-19.yaml b/lovelace/cameras/view-camera-19.yaml new file mode 100644 index 0000000..8bcd254 --- /dev/null +++ b/lovelace/cameras/view-camera-19.yaml @@ -0,0 +1,185 @@ +type: vertical-stack +cards: + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam19 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam19_sub + live: + auto_mute: all + layout: + fit: fill + preload: true + draggable: true + show_image_during_load: true + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none + menu: + buttons: + frigate: + enabled: false + style: none + media_viewer: + draggable: false + lazy_load: false + dimensions: + aspect_ratio_mode: static + aspect_ratio: '16:9' + elements: + - type: image + image: /local/title-dark-double.png + style: + transform: initial + top: 90% + left: 0px + width: 100% + height: 10% + opacity: 70% + - type: image + entity: camera.frigate_cam19 + image: /local/title-dark-double.png + aspect_ratio: 100% + tap_action: + action: navigate + navigation_path: /ai-yml/ai-cam19 + style: + transform: initial + top: 0px + left: 0px + width: 100% + height: 100% + opacity: 0% + + - type: state-icon + entity: binary_sensor.front_porch_person_occupancy + style: + left: 8% + top: 95% + - type: state-icon + entity: binary_sensor.frigate_cam19_speech_sound + style: + left: 30% + top: 95% + - type: state-icon + entity: binary_sensor.frigate_cam19_vehicle_occupancy + style: + left: 50% + top: 95% + - type: state-icon + entity: input_boolean.front_porch_occupied + tap_action: + action: toggle + style: + left: 70% + top: 95% + - type: state-icon + entity: input_boolean.doorbell + style: + top: 95% + left: 92% + + + - type: conditional + conditions: + - entity: binary_sensor.driveway_center_vehicle_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.driveway_center_vehicle_occupancy + style: + top: 60% + left: 14% + + - type: conditional + conditions: + - entity: binary_sensor.driveway_east_side_vehicle_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.driveway_east_side_vehicle_occupancy + style: + top: 60% + left: 20% + + - type: conditional + conditions: + - entity: binary_sensor.parking_spot_vehicle_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.parking_spot_vehicle_occupancy + style: + top: 52% + left: 15% + + - type: conditional + conditions: + - entity: binary_sensor.from_street_vehicle_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.from_street_vehicle_occupancy + style: + top: 50% + left: 40% + + - type: conditional + conditions: + - entity: binary_sensor.from_street_person_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.from_street_person_occupancy + style: + top: 53% + left: 37% + + - type: conditional + conditions: + - entity: binary_sensor.front_porch_person_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.front_porch_person_occupancy + style: + top: 88% + left: 37% + + - type: conditional + conditions: + - entity: binary_sensor.front_yard_person_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.front_yard_person_occupancy + style: + top: 60% + left: 65% + + - type: conditional + conditions: + - entity: binary_sensor.front_yard_animal_occupancy + state: "on" + elements: + - type: state-icon + entity: binary_sensor.front_yard_animal_occupancy + style: + top: 60% + left: 70% + + - type: state-icon + entity: light.front_porch_overhead + style: + top: 3% + left: 50% + tap_action: + action: toggle \ No newline at end of file diff --git a/lovelace/details/view-batteries.yaml b/lovelace/details/view-batteries.yaml new file mode 100644 index 0000000..d67125f --- /dev/null +++ b/lovelace/details/view-batteries.yaml @@ -0,0 +1,95 @@ +title: Batteries +path: batteries +icon: mdi:battery +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 +cards: + - type: entities + title: Smart Devices + entities: + - entity: sensor.pixel_7_battery_level + name: Clint's Phone + - entity: sensor.ticwatch_pro_3_gps_battery_level + name: Clint's Watch + - type: entities + title: Ecowitt Batteries + entities: + - entity: sensor.fineoffset_wh51_0d1e11_battery + name: Computer Area - 1e11 + - entity: sensor.fineoffset_wh51_00f935_battery + name: Daisies - f935 + - entity: sensor.fineoffset_wh51_0ce593_battery + name: Hostas - e593 + - type: entities + title: BLE Batteries + entities: + - entity: sensor.plant_sensor_3eae_battery + name: Blue Room - 3eae + - entity: sensor.plant_sensor_3eb0_battery + name: Master Bedroom - 3eb0 + - entity: sensor.plant_sensor_cea4_battery + name: Computer Area - cea4 + - type: entities + title: Hue Batteries + entities: + - entity: sensor.bar_battery + name: Bar Motion Sensor + - entity: sensor.entryway_battery + name: Entryway Motion Sensor + - entity: sensor.front_room_battery + name: Front Room Motion Sensor + - entity: sensor.front_porch_battery + name: Front Porch Motion Sensor + - entity: sensor.deck_battery + name: Deck Motion Sensor + - type: entities + title: Window Batteries + entities: + - sensor.nursery_window_battery + - sensor.computer_area_window_battery + - sensor.entryway_window_battery + - sensor.front_room_window_battery + - sensor.master_bedroom_window_battery + - type: entities + title: Thermostat Batteries + entities: + - sensor.blue_room_thermostat_battery + - sensor.front_room_thermostat_battery + - sensor.furnace_room_thermostat_battery + - sensor.mancave_thermostat_battery + - sensor.master_bathroom_thermostat_battery + - sensor.utility_room_thermostat_battery + - type: entities + title: Door Batteries + entities: + - sensor.basement_door_battery + - sensor.blue_room_door_battery + - sensor.mancave_door_battery + - sensor.utility_room_door_battery + - sensor.front_door_battery + - sensor.master_bathroom_door_battery + - sensor.master_bedroom_closet_door_battery + - sensor.master_bedroom_door_battery + - sensor.master_suite_door_battery + - sensor.nursery_closet_door_battery + - sensor.patio_door_battery + - sensor.storage_room_door_battery + - sensor.pantry_door_battery + - type: entities + title: Zigbee Batteries + entities: + - sensor.dishwasher_door_battery + - sensor.tumble_dryer_door_battery + - sensor.washing_machine_door_battery + - type: entities + title: ZWave Batteries + entities: + - sensor.front_room_motion_sensor_battery_level + - sensor.kitchen_motion_sensor_battery_level + - sensor.master_bedroom_multisensor_battery_level + - sensor.nursery_multisensor_battery_level + - sensor.computer_area_multisensor_battery_level + - sensor.great_room_multisensor_battery_level + - sensor.garage_multisensor_battery_level + - sensor.kitchen_multisensor_battery_level \ No newline at end of file diff --git a/lovelace/details/view-chores.yaml b/lovelace/details/view-chores.yaml new file mode 100644 index 0000000..ba472a6 --- /dev/null +++ b/lovelace/details/view-chores.yaml @@ -0,0 +1,520 @@ +title: Chores +path: chores +icon: mdi:broom +type: sidebar +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 +cards: + - type: horizontal-stack + cards: + # - type: custom:mushroom-title-card + # title: "{{states('sensor.energy_tariff')}}" + # subtitle: "{{states('sensor.energy_cost')}} $/kWh" + - type: custom:mushroom-chips-card + chips: + - type: back + - type: custom:mushroom-title-card + title: Chores + - type: conditional + conditions: + - entity: input_boolean.grocy_all_chores + state: 'on' + card: + type: custom:grocy-chores-card + columns: 2 + title: All Rooms + user_id: + default: 2 + show_days: 2 + show_create_task: false + show_assigned: true + entity: + - sensor.grocy_chores + + - type: conditional + conditions: + - entity: input_boolean.grocy_all_tasks + state: 'on' + card: + type: custom:grocy-chores-card + columns: 2 + title: All Tasks + user_id: + default: 2 + show_create_task: true + show_assigned: true + entity: + - sensor.grocy_tasks + + - type: conditional + conditions: + - entity: input_boolean.blue_room_chores + state: 'on' + card: + type: custom:grocy-chores-card + title: Blue Room + user_id: + default: 2 + filter: "blue room" + show_quantity: 5 + show_days: 2 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_chores + + - type: conditional + conditions: + - entity: input_boolean.computer_area_chores + state: 'on' + card: + type: custom:grocy-chores-card + title: Computer Area + user_id: + default: 2 + filter: "computer area" + show_quantity: 5 + show_days: 2 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_chores + + - type: conditional + conditions: + - entity: input_boolean.dining_room_chores + state: 'on' + card: + type: custom:grocy-chores-card + title: Dining Room + user_id: + default: 2 + filter: "dining room" + show_quantity: 5 + show_days: 2 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_chores + + - type: conditional + conditions: + - entity: input_boolean.entryway_chores + state: 'on' + card: + type: custom:grocy-chores-card + title: Entryway + user_id: 2 + filter: "entryway" + show_quantity: 5 + show_days: 2 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_chores + + - type: conditional + conditions: + - entity: input_boolean.front_room_chores + state: 'on' + card: + type: custom:grocy-chores-card + title: Front Room + user_id: 2 + filter: "front room" + show_quantity: 5 + show_days: 2 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_chores + + - type: conditional + conditions: + - entity: input_boolean.furnace_room_chores + state: 'on' + card: + type: custom:grocy-chores-card + title: Furnace Room + user_id: 2 + filter: "furnace room" + show_quantity: 5 + show_days: 2 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_chores + + - type: conditional + conditions: + - entity: input_boolean.garage_chores + state: 'on' + card: + type: custom:grocy-chores-card + title: Garage + user_id: 2 + filter: "garage" + show_quantity: 5 + show_days: 2 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_chores + + - type: conditional + conditions: + - entity: input_boolean.kitchen_chores + state: 'on' + card: + type: custom:grocy-chores-card + title: Kitchen + user_id: 2 + filter: "kitchen" + show_quantity: 5 + show_days: 2 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_chores + + - type: conditional + conditions: + - entity: input_boolean.great_room_chores + state: 'on' + card: + type: custom:grocy-chores-card + title: Great Room + user_id: 2 + filter: "great room" + show_quantity: 5 + show_days: 2 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_chores + + - type: conditional + conditions: + - entity: input_boolean.mancave_chores + state: 'on' + card: + type: custom:grocy-chores-card + title: Mancave + user_id: 2 + filter: "mancave" + show_quantity: 5 + show_days: 2 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_chores + + - type: conditional + conditions: + - entity: input_boolean.master_bathroom_chores + state: 'on' + card: + type: custom:grocy-chores-card + title: Master Bathroom + user_id: 2 + filter: "master bathroom" + show_quantity: 5 + show_days: 2 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_chores + + - type: conditional + conditions: + - entity: input_boolean.master_bedroom_chores + state: 'on' + card: + type: custom:grocy-chores-card + title: Master Bedroom + user_id: 2 + filter: "master bedroom" + show_quantity: 5 + show_days: 2 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_chores + + - type: conditional + conditions: + - entity: input_boolean.nursery_chores + state: 'on' + card: + type: custom:grocy-chores-card + title: Nursery + user_id: 2 + filter: "nursery" + show_quantity: 5 + show_days: 2 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_chores + + - type: conditional + conditions: + - entity: input_boolean.utility_room_chores + state: 'on' + card: + type: custom:grocy-chores-card + title: Utility Room + user_id: 2 + filter: "utility room" + show_quantity: 5 + show_days: 2 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_chores + + - type: conditional + conditions: + - entity: input_boolean.daddy_chores + state: 'on' + card: + type: custom:grocy-chores-card + title: Daddy + user_id: 2 + filter_user: 2 + show_quantity: 5 + show_days: 2 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_chores + + - type: conditional + conditions: + - entity: input_boolean.chickadee_chores + state: 'on' + card: + type: custom:grocy-chores-card + title: Chickadee + user_id: 5 + filter_user: 5 + show_quantity: 5 + show_days: 2 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_chores + + - type: conditional + conditions: + - entity: input_boolean.marshall_chores + state: 'on' + card: + type: custom:grocy-chores-card + title: Marshall + user_id: 6 + filter_user: 6 + show_quantity: 5 + show_days: 2 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_chores + + - type: conditional + conditions: + - entity: input_boolean.tess_chores + state: 'on' + card: + type: custom:grocy-chores-card + title: Tess + user_id: 7 + filter_user: 7 + show_quantity: 5 + show_days: 2 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_chores + + - type: conditional + conditions: + - entity: input_boolean.emmett_chores + state: 'on' + card: + type: custom:grocy-chores-card + title: Emmett + user_id: 3 + filter_user: 3 + show_quantity: 5 + show_days: 2 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_chores + + - type: conditional + conditions: + - entity: input_boolean.bridget_chores + state: 'on' + card: + type: custom:grocy-chores-card + title: Bridget + user_id: 4 + filter_user: 4 + show_quantity: 5 + show_days: 2 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_chores + + - type: conditional + conditions: + - entity: input_boolean.ebin_chores + state: 'on' + card: + type: custom:grocy-chores-card + title: Ebin + user_id: 8 + filter_user: 8 + show_quantity: 5 + show_days: 2 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_chores + + - type: vertical-stack + view_layout: + position: sidebar + cards: + - type: horizontal-stack + view_layout: + position: sidebar + cards: + - type: glance + columns: 2 + show_state: false + title: Room + entities: + - name: All Rooms + entity: input_boolean.grocy_all_chores + tap_action: + action: toggle + + - name: All Tasks + entity: input_boolean.grocy_all_tasks + tap_action: + action: toggle + + - name: Blue Room + entity: input_boolean.blue_room_chores + tap_action: + action: toggle + + - name: Computer Area + entity: input_boolean.computer_area_chores + tap_action: + action: toggle + + - name: Dining Room + entity: input_boolean.dining_room_chores + tap_action: + action: toggle + + - name: Entryway + entity: input_boolean.entryway_chores + tap_action: + action: toggle + + - name: Front Room + entity: input_boolean.front_room_chores + tap_action: + action: toggle + + - name: Furnace Room + entity: input_boolean.furnace_room_chores + tap_action: + action: toggle + + - name: Garage + entity: input_boolean.garage_chores + tap_action: + action: toggle + + - name: Kitchen + entity: input_boolean.kitchen_chores + tap_action: + action: toggle + + - name: Great Room + entity: input_boolean.great_room_chores + tap_action: + action: toggle + + - name: Mancave + entity: input_boolean.mancave_chores + tap_action: + action: toggle + + - name: Master Bathroom + entity: input_boolean.master_bathroom_chores + tap_action: + action: toggle + + - name: Master Bedroom + entity: input_boolean.master_bedroom_chores + tap_action: + action: toggle + + - name: Nursery + entity: input_boolean.nursery_chores + tap_action: + action: toggle + + - name: Utility Room + entity: input_boolean.utility_room_chores + tap_action: + action: toggle + + - type: glance + columns: 2 + show_state: false + title: Person + entities: + - name: Daddy + entity: input_boolean.daddy_chores + tap_action: + action: toggle + + - name: Chickadee + entity: input_boolean.chickadee_chores + tap_action: + action: toggle + + - name: Marshall + entity: input_boolean.marshall_chores + tap_action: + action: toggle + + - name: Tess + entity: input_boolean.tess_chores + tap_action: + action: toggle + + - name: Emmett + entity: input_boolean.emmett_chores + tap_action: + action: toggle + + - name: Bridget + entity: input_boolean.bridget_chores + tap_action: + action: toggle + + - name: Ebin + entity: input_boolean.ebin_chores + tap_action: + action: toggle diff --git a/lovelace/details/view-hvac.yaml b/lovelace/details/view-hvac.yaml new file mode 100644 index 0000000..ddcd7b6 --- /dev/null +++ b/lovelace/details/view-hvac.yaml @@ -0,0 +1,299 @@ +title: HVAC +path: hvac +icon: mdi:thermometer-water +type: panel +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 +cards: + - type: vertical-stack + cards: + # - type: horizontal-stack + # cards: + # # - type: custom:mushroom-title-card + # # title: "{{states('sensor.energy_tariff')}}" + # # subtitle: "{{states('sensor.energy_cost')}} $/kWh" + # - type: custom:mushroom-chips-card + # chips: + # - type: back + # - type: custom:mushroom-title-card + # title: HVAC + - type: horizontal-stack + cards: + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + title: Outside + alignment: center + - type: custom:mushroom-entity-card + entity: sensor.thermal_comfort_dew_point_perception + name: Dew Point Perception + - type: custom:mushroom-entity-card + entity: sensor.thermal_comfort_frost_risk + name: Frost Risk + - type: custom:mushroom-entity-card + entity: sensor.thermal_comfort_humidex_perception + name: Humidex Perception + - type: custom:mushroom-entity-card + entity: sensor.thermal_comfort_summer_scharlau_perception + name: Summer Scharlau Perception + - type: custom:mushroom-entity-card + entity: sensor.thermal_comfort_summer_simmer_perception + name: Summer Simmer Perception + - type: custom:mushroom-entity-card + entity: sensor.thermal_comfort_thoms_discomfort_perception + name: Thoms Discomfort Perception + - type: custom:mushroom-entity-card + entity: sensor.thermal_comfort_winter_scharlau_perception + name: Winter Scharlau Perception + + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + title: Front Room + alignment: center + - type: custom:mushroom-entity-card + entity: sensor.front_room_thermal_comfort_dew_point_perception + name: Dew Point Perception + - type: custom:mushroom-entity-card + entity: sensor.front_room_thermal_comfort_humidex_perception + name: Humidex Perception + - type: custom:mushroom-entity-card + entity: sensor.front_room_thermal_comfort_summer_simmer_perception + name: Summer Simmer Perception + + - type: custom:mushroom-title-card + title: Computer Area + alignment: center + - type: custom:mushroom-entity-card + entity: sensor.computer_area_thermal_comfort_dew_point_perception + name: Dew Point Perception + - type: custom:mushroom-entity-card + entity: sensor.computer_area_thermal_comfort_humidex_perception + name: Humidex Perception + - type: custom:mushroom-entity-card + entity: sensor.computer_area_thermal_comfort_summer_simmer_perception + name: Summer Simmer Perception + + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + title: Nursery + alignment: center + - type: custom:mushroom-entity-card + entity: sensor.nursery_thermal_comfort_dew_point_perception + name: Dew Point Perception + - type: custom:mushroom-entity-card + entity: sensor.nursery_thermal_comfort_humidex_perception + name: Humidex Perception + - type: custom:mushroom-entity-card + entity: sensor.nursery_thermal_comfort_summer_simmer_perception + name: Summer Simmer Perception + + - type: custom:mushroom-title-card + title: Great Room + alignment: center + - type: custom:mushroom-entity-card + entity: sensor.great_room_thermal_comfort_dew_point_perception + name: Dew Point Perception + - type: custom:mushroom-entity-card + entity: sensor.great_room_thermal_comfort_humidex_perception + name: Humidex Perception + - type: custom:mushroom-entity-card + entity: sensor.great_room_thermal_comfort_summer_simmer_perception + name: Summer Simmer Perception + + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + title: Master Bedroom + alignment: center + - type: custom:mushroom-entity-card + entity: sensor.master_bedroom_thermal_comfort_dew_point_perception + name: Dew Point Perception + - type: custom:mushroom-entity-card + entity: sensor.master_bedroom_thermal_comfort_humidex_perception + name: Humidex Perception + - type: custom:mushroom-entity-card + entity: sensor.master_bedroom_thermal_comfort_summer_simmer_perception + name: Summer Simmer Perception + + - type: custom:mushroom-title-card + title: Blue Room + alignment: center + - type: custom:mushroom-entity-card + entity: sensor.blue_room_thermal_comfort_dew_point_perception + name: Dew Point Perception + - type: custom:mushroom-entity-card + entity: sensor.blue_room_thermal_comfort_humidex_perception + name: Humidex Perception + - type: custom:mushroom-entity-card + entity: sensor.blue_room_thermal_comfort_summer_simmer_perception + name: Summer Simmer Perception + + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + title: Master Bathroom + alignment: center + - type: custom:mushroom-entity-card + entity: sensor.master_bathroom_thermal_comfort_dew_point_perception + name: Dew Point Perception + - type: custom:mushroom-entity-card + entity: sensor.master_bathroom_thermal_comfort_humidex_perception + name: Humidex Perception + - type: custom:mushroom-entity-card + entity: sensor.master_bathroom_thermal_comfort_summer_simmer_perception + name: Summer Simmer Perception + + - type: custom:mushroom-title-card + title: Utility Room + alignment: center + - type: custom:mushroom-entity-card + entity: sensor.utility_room_thermal_comfort_dew_point_perception + name: Dew Point Perception + - type: custom:mushroom-entity-card + entity: sensor.utility_room_thermal_comfort_humidex_perception + name: Humidex Perception + - type: custom:mushroom-entity-card + entity: sensor.utility_room_thermal_comfort_summer_simmer_perception + name: Summer Simmer Perception + + - type: custom:mini-graph-card + name: Temperature + state_map: + - value: 'on' + label: Day + - value: 'off' + label: Night + - value: above_horizon + label: Day + - value: below_horizon + label: Night + entities: + - entity: sensor.front_room_thermostat_temperature + name: Front Room + - entity: sensor.master_bedroom_multisensor_air_temperature + name: Bedroom + - entity: sensor.garage_multisensor_air_temperature + name: Garage + - entity: sensor.nursery_multisensor_air_temperature + name: Nursery + - entity: sensor.kitchen_multisensor_air_temperature + name: Kitchen + - entity: sensor.computer_area_multisensor_air_temperature + name: Computer Area + - entity: sensor.great_room_multisensor_air_temperature + name: Great Room + - color: white + entity: sensor.outdoors_mean_temperature + name: Outside + show_line: false + show_points: false + show_legend: false + - color: black + entity: sensor.sun_elevation + name: Night + show_line: false + show_points: false + show_legend: false + y_axis: secondary + lower_bound: 60 + line_width: 1 + hour24: true + hours_to_show: 24 + points_per_hour: 4 + color_thresholds: + - value: 58 + color: '#260d8f' + - value: 60 + color: '#251ab9' + - value: 62 + color: '#0f28e5' + - value: 64 + color: '#007eff' + - value: 66 + color: '#00aaf9' + - value: 68 + color: '#00cc9e' + - value: 70 + color: '#59E442' + - value: 72 + color: '#59E442' + - value: 74 + color: '#7fd206' + - value: 76 + color: '#97bf00' + - value: 78 + color: '#aaac00' + - value: 80 + color: '#b89700' + - value: 82 + color: '#c18200' + - value: 84 + color: '#c86c00' + - value: 86 + color: '#ca5400' + - value: 88 + color: '#c93905' + - value: 90 + color: '#c4161e' + + - type: markdown + content: |- + # Sensors: + +
+
Absolute Humidity absolute_humidity
+
+ Absolute humidity is a measure of the actual amount of water vapor + (moisture) in the air. +
+
Heat Index heat_index
+
+ The heat index combines air temperature and relative humidity to posit a + human-perceived equivalent temperature. +
+
Humidex + Perception humidex humidex_perception
+
+ The humidex (humidity index) describes how hot the weather feels to an average person as a result of the combined effect of heat and humidity. It is calculated from the dew point. +
+
Dew Point + Perception dew_point dew_point_perception
+
+ The dew point is the temperature to which air must be cooled to become + saturated with water vapor and dew forms on surfaces. +
+
Frost Point frost_point
+
+ Frost point, temperature, below 0° C (32° F), at which moisture in the air + will condense as a layer of frost on any exposed surface. +
+
Frost Risk frost_risk
+
+ Risk of Frost based on current temperature, frost point and absolute humidity. +
+
Relative Strain Perception relative_strain_perception
+
+ A measure of discomfort resulting from the combined effect of temperature and humidity. It assumes a person dressed in a light business suit, walking at a moderate pace in a very light air motion. It is applicable to assess heat stress of manual workers under shelter at various metabolic rates. Valid for temperatures between 26 and 35°C (79 to 95°F). +
+
Summer Simmer Index + Perception summer_simmer_index summer_simmer_perception
+
+ Provides a proven indicator of heat stress concerns and discomfort using meaningful equivalent temperature values for general public acceptance and awareness. +
+
Moist Air Enthalpy moist_air_enthalpy
+
+ The enthalpy of moist air is the sum of the enthalpy of the dry air and the enthalpy of the water vapour. Enthalpy is the total energy of a thermodynamic system. +
+
Summer Scharlau Perception summer_scharlau_perception
+
+ The summer Scharlau index describes a bioclimatic thermal comfort when temperature values are higher than 0°C. Valid for temperatures 17° to 39°C (63° to 102°F) and humidity >= 30%. +
+
Winter Scharlau Perception winter_scharlau_perception
+
+ Reflects the level of human discomfort caused by cooling. Valid for: temperatures -5 to +6°C (23 to 43°F) and humidity >= 40%. +
+
Thoms discomfort Perception thoms_discomfort_perception
+
+ Indicates the level of discomfort as a result of high temperature and the combined effect with relative humidity. +
+
\ No newline at end of file diff --git a/lovelace/details/view-mobile-app.yaml b/lovelace/details/view-mobile-app.yaml new file mode 100644 index 0000000..e8c430b --- /dev/null +++ b/lovelace/details/view-mobile-app.yaml @@ -0,0 +1,44 @@ +title: Mobile App +path: mobile-app +icon: mdi:cellphone +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f +cards: + - type: vertical-stack + cards: + - type: custom:mushroom-chips-card + chips: + - type: back + + + - type: entities + entities: + - entity: sensor.pixel_7_battery_health + - entity: sensor.pixel_7_battery_level + - entity: sensor.pixel_7_battery_state + - entity: sensor.pixel_7_battery_temperature + - entity: binary_sensor.pixel_7_headphones + - entity: binary_sensor.pixel_7_is_charging + - entity: binary_sensor.pixel_7_work_profile + - entity: sensor.pixel_7_audio_mode + - entity: binary_sensor.pixel_7_mic_muted + - entity: binary_sensor.pixel_7_music_active + - entity: sensor.pixel_7_charger_type + - entity: binary_sensor.pixel_7_android_auto + title: Phone + + - type: entities + entities: + - entity: sensor.ticwatch_pro_3_gps_battery_state + - entity: sensor.ticwatch_pro_3_gps_battery_level + - entity: sensor.ticwatch_pro_3_gps_charger_type + - entity: binary_sensor.ticwatch_pro_3_gps_theater_mode + - entity: device_tracker.ticwatch_pro_3_gps + - entity: sensor.ticwatch_pro_3_gps_daily_floors + - entity: binary_sensor.ticwatch_pro_3_gps_wifi_state + - entity: sensor.ticwatch_pro_3_gps_wifi_connection + - entity: binary_sensor.ticwatch_pro_3_gps_wet_mode + - entity: sensor.ticwatch_pro_3_gps_steps_sensor + - entity: sensor.ticwatch_pro_3_gps_daily_steps + - entity: sensor.ticwatch_pro_3_gps_heart_rate + title: Watch diff --git a/lovelace/details/view-nws-alerts.yaml b/lovelace/details/view-nws-alerts.yaml new file mode 100644 index 0000000..8360abb --- /dev/null +++ b/lovelace/details/view-nws-alerts.yaml @@ -0,0 +1,125 @@ +title: NWS Alerts +path: nws-alerts +icon: mdi:cloud-alert +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f +cards: + - type: entities + title: Severe Weather Alerts + show_header_toggle: false + entities: + - sensor.nws_alerts + - type: conditional + conditions: + - entity: sensor.nws_alerts + state_not: '0' + card: + type: markdown + content: | + --- + # NWS First Active Alert + {% if state_attr('sensor.nws_alerts', 'title') != None and state_attr('sensor.nws_alerts', 'title').split(' - ')[0] is defined %} + + ## {{ states.sensor.nws_alerts.attributes.title.split(' - ')[0] }} + + {{ state_attr('sensor.nws_alerts', 'display_desc').split('\n\n-\n\n')[0] }} + + {% else %} + none + {% endif %} + - type: conditional + conditions: + - entity: sensor.nws_alerts + state_not: '0' + - entity: sensor.nws_alerts + state_not: '1' + card: + type: markdown + content: > + --- + + # NWS Second Active Alert {% if state_attr('sensor.nws_alerts', + 'title').split(' - ')[1] is defined %} + + ## {{ states.sensor.nws_alerts.attributes.title.split(' - ')[1] }} + + {{ state_attr('sensor.nws_alerts', 'display_desc').split('\n\n-\n\n')[1] }} + + {% else %} + none + {% endif %} + - type: conditional + conditions: + - entity: sensor.nws_alerts + state_not: '0' + - entity: sensor.nws_alerts + state_not: '1' + - entity: sensor.nws_alerts + state_not: '2' + card: + type: markdown + content: > + --- + + # NWS Third Active Alert {% if state_attr('sensor.nws_alerts', + 'title').split(' - ')[2] is defined %} + + ## {{ states.sensor.nws_alerts.attributes.title.split(' - ')[2] }} + + {{ state_attr('sensor.nws_alerts', 'display_desc').split('\n\n-\n\n')[2] }} + + {% else %} + none + {% endif %} + - type: conditional + conditions: + - entity: sensor.nws_alerts + state_not: '0' + - entity: sensor.nws_alerts + state_not: '1' + - entity: sensor.nws_alerts + state_not: '2' + - entity: sensor.nws_alerts + state_not: '3' + card: + type: markdown + content: > + --- + + # NWS Fourth Active Alert {% if state_attr('sensor.nws_alerts', + 'title').split(' - ')[3] is defined %} + + ## {{ states.sensor.nws_alerts.attributes.title.split(' - ')[3] }} + + {{ state_attr('sensor.nws_alerts', 'display_desc').split('\n\n-\n\n')[3] }} + + {% else %} + none + {% endif %} + - type: conditional + conditions: + - entity: sensor.nws_alerts + state_not: '0' + - entity: sensor.nws_alerts + state_not: '1' + - entity: sensor.nws_alerts + state_not: '2' + - entity: sensor.nws_alerts + state_not: '3' + - entity: sensor.nws_alerts + state_not: '4' + card: + type: markdown + content: > + --- + + # NWS Fifth Active Alert {% if state_attr('sensor.nws_alerts', + 'title').split(' - ')[4] is defined %} + + ## {{ states.sensor.nws_alerts.attributes.title.split(' - ')[4] }} + + {{ state_attr('sensor.nws_alerts', 'display_desc').split('\n\n-\n\n')[4] }} + + {% else %} + none + {% endif %} \ No newline at end of file diff --git a/lovelace/details/view-openminds.yaml b/lovelace/details/view-openminds.yaml new file mode 100644 index 0000000..35b27b4 --- /dev/null +++ b/lovelace/details/view-openminds.yaml @@ -0,0 +1,16 @@ +title: OpenMinds AI +path: openminds-ai +icon: mdi:brain +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f +cards: + - type: grid + square: false + columns: 1 + cards: + - type: entities + entities: + - entity: input_text.gpt_prompt + - type: markdown + content: '{{ state_attr(''sensor.hassio_mindsdb_response'', ''response_text'') }}' + title: OpenAI Response \ No newline at end of file diff --git a/lovelace/details/view-people-frigate.yaml b/lovelace/details/view-people-frigate.yaml new file mode 100644 index 0000000..204ba26 --- /dev/null +++ b/lovelace/details/view-people-frigate.yaml @@ -0,0 +1,42 @@ +title: People Frigate +path: people-frigate +icon: mdi:account-multiple +#type: sidebar +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f +cards: + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam03 + live_provider: webrtc-card + webrtc_card: + url: rtsp://192.168.1.7:8554/rtsp_cam03_sub + - frigate: + camera_name: frigate_cam03 + label: person + zone: computer_area + live: + webrtc_card: + ui: true + + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam12 + live_provider: frigate-jsmpeg + dependencies: + all_cameras: false + frigate: + label: person + zone: dining_room + image: {} + + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam13 + live_provider: frigate-jsmpeg + dependencies: + all_cameras: false + frigate: + label: person + zone: front_room + image: {} \ No newline at end of file diff --git a/lovelace/details/view-people.yaml b/lovelace/details/view-people.yaml new file mode 100644 index 0000000..3e1a030 --- /dev/null +++ b/lovelace/details/view-people.yaml @@ -0,0 +1,573 @@ +title: People +path: people +icon: mdi:account-multiple +#type: sidebar +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f +cards: + - type: entity-filter + entities: + - binary_sensor.frigate_cam01_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: horizontal-stack + cards: + - type: entity-filter + entities: + - binary_sensor.blue_room_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: picture-glance + title: Blue Room + camera_view: auto + entities: [] + image_entity: image.frigate_cam01_person + entity: binary_sensor.blue_room_person_occupancy + + - type: entity-filter + entities: + - binary_sensor.furnace_room_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: picture-glance + title: Furnace Room + camera_view: auto + entities: [] + image_entity: image.frigate_cam01_person + entity: binary_sensor.furnace_room_person_occupancy + + - type: entity-filter + entities: + - binary_sensor.frigate_cam03_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: horizontal-stack + cards: + - type: entity-filter + entities: + - binary_sensor.computer_area_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: picture-glance + title: Computer Area + camera_view: auto + entities: [] + image_entity: image.frigate_cam03_person + entity: binary_sensor.computer_area_person_occupancy + + - type: entity-filter + entities: + - binary_sensor.entryway_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: picture-glance + title: Entryway + camera_view: auto + entities: [] + image_entity: image.frigate_cam03_person + entity: binary_sensor.entryway_person_occupancy + + - type: entity-filter + entities: + - binary_sensor.great_room_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: picture-glance + title: Great Room + camera_view: auto + entities: [] + image_entity: image.frigate_cam03_person + entity: binary_sensor.great_room_person_occupancy + + - type: entity-filter + entities: + - binary_sensor.utility_room_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: picture-glance + title: Utility Room + camera_view: auto + entities: [] + image_entity: image.frigate_cam03_person + entity: binary_sensor.utility_room_person_occupancy + + - type: entity-filter + entities: + - binary_sensor.frigate_cam04_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: horizontal-stack + cards: + - type: entity-filter + entities: + - binary_sensor.walkway_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: picture-glance + title: Walkway + camera_view: auto + entities: [] + image_entity: image.frigate_cam04_person + entity: binary_sensor.walkway_person_occupancy + + - type: entity-filter + entities: + - binary_sensor.workshop_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: picture-glance + title: Workshop + camera_view: auto + entities: [] + image_entity: image.frigate_cam04_person + entity: binary_sensor.walkway_person_occupancy + + - type: entity-filter + entities: + - binary_sensor.frigate_cam06_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: horizontal-stack + cards: + - type: entity-filter + entities: + - binary_sensor.master_bed_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: picture-glance + title: Master Bed + camera_view: auto + entities: [] + image_entity: image.frigate_cam06_person + entity: binary_sensor.master_bed_person_occupancy + + - type: entity-filter + entities: + - binary_sensor.master_bedroom_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: picture-glance + title: Master Bedroom + camera_view: auto + entities: [] + image_entity: image.frigate_cam06_person + entity: binary_sensor.master_bedroom_person_occupancy + + - type: entity-filter + entities: + - binary_sensor.frigate_cam07_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: horizontal-stack + cards: + - type: entity-filter + entities: + - binary_sensor.master_bed_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: picture-glance + title: Master Bed + camera_view: auto + entities: [] + image_entity: image.frigate_cam07_person + entity: binary_sensor.master_bed_person_occupancy + + - type: entity-filter + entities: + - binary_sensor.master_bedroom_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: picture-glance + title: Master Bedroom + camera_view: auto + entities: [] + image_entity: image.frigate_cam07_person + entity: binary_sensor.master_bedroom_person_occupancy + + - type: entity-filter + entities: + - binary_sensor.frigate_cam08_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: horizontal-stack + cards: + - type: entity-filter + entities: + - binary_sensor.black_bed_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: picture-glance + title: Black Bed + camera_view: auto + entities: [] + image_entity: image.frigate_cam08_person + entity: binary_sensor.black_bed_person_occupancy + + - type: entity-filter + entities: + - binary_sensor.white_bed_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: picture-glance + title: White Bed + camera_view: auto + entities: [] + image_entity: image.frigate_cam08_person + entity: binary_sensor.white_bed_person_occupancy + + - type: entity-filter + entities: + - binary_sensor.nursery_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: picture-glance + title: Nursery + camera_view: auto + entities: [] + image_entity: image.frigate_cam08_person + entity: binary_sensor.nursery_person_occupancy + + - type: entity-filter + entities: + - binary_sensor.frigate_cam12_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: horizontal-stack + cards: + - type: entity-filter + entities: + - binary_sensor.kitchen_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: picture-glance + title: Kitchen + camera_view: auto + entities: [] + image_entity: image.frigate_cam12_person + entity: binary_sensor.kitchen_person_occupancy + + - type: entity-filter + entities: + - binary_sensor.dining_room_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: picture-glance + title: Dining Room + camera_view: auto + entities: [] + image_entity: image.frigate_cam12_person + entity: binary_sensor.dining_room_person_occupancy + + - type: entity-filter + entities: + - binary_sensor.entryway_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: picture-glance + title: Entryway + camera_view: auto + entities: [] + image_entity: image.frigate_cam12_person + entity: binary_sensor.entryway_person_occupancy + + - type: entity-filter + entities: + - binary_sensor.front_room_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: picture-glance + title: Front Room + camera_view: auto + entities: [] + image_entity: image.frigate_cam12_person + entity: binary_sensor.front_room_person_occupancy + + - type: entity-filter + entities: + - binary_sensor.frigate_cam13_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: horizontal-stack + cards: + - type: entity-filter + entities: + - binary_sensor.kitchen_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: picture-glance + title: Kitchen + camera_view: auto + entities: [] + image_entity: image.frigate_cam13_person + entity: binary_sensor.kitchen_person_occupancy + + - type: entity-filter + entities: + - binary_sensor.dining_room_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: picture-glance + title: Dining Room + camera_view: auto + entities: [] + image_entity: image.frigate_cam13_person + entity: binary_sensor.dining_room_person_occupancy + + - type: entity-filter + entities: + - binary_sensor.front_room_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: picture-glance + title: Front Room + camera_view: auto + entities: [] + image_entity: image.frigate_cam13_person + entity: binary_sensor.front_room_person_occupancy + + - type: entity-filter + entities: + - binary_sensor.frigate_cam14_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: horizontal-stack + cards: + - type: entity-filter + entities: + - binary_sensor.back_yard_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: picture-glance + title: Back Yard + camera_view: auto + entities: [] + image_entity: image.frigate_cam14_person + entity: binary_sensor.back_yard_person_occupancy + + - type: entity-filter + entities: + - binary_sensor.frigate_cam18_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: horizontal-stack + cards: + - type: entity-filter + entities: + - binary_sensor.driveway_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: picture-glance + title: Driveway + camera_view: auto + entities: [] + image_entity: image.frigate_cam18_person + entity: binary_sensor.driveway_person_occupancy + + - type: entity-filter + entities: + - binary_sensor.from_street_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: picture-glance + title: From Street + camera_view: auto + entities: [] + image_entity: image.frigate_cam18_person + entity: binary_sensor.from_street_person_occupancy + + - type: entity-filter + entities: + - binary_sensor.front_yard_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: picture-glance + title: Front Yard + camera_view: auto + entities: [] + image_entity: image.frigate_cam18_person + entity: binary_sensor.front_yard_person_occupancy + + - type: entity-filter + entities: + - binary_sensor.frigate_cam19_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: horizontal-stack + cards: + - type: entity-filter + entities: + - binary_sensor.driveway_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: picture-glance + title: Driveway + camera_view: auto + entities: [] + image_entity: image.frigate_cam19_person + entity: binary_sensor.driveway_person_occupancy + + - type: entity-filter + entities: + - binary_sensor.from_street_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: picture-glance + title: From Street + camera_view: auto + entities: [] + image_entity: image.frigate_cam19_person + entity: binary_sensor.from_street_person_occupancy + + - type: entity-filter + entities: + - binary_sensor.front_yard_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: picture-glance + title: Front Yard + camera_view: auto + entities: [] + image_entity: image.frigate_cam19_person + entity: binary_sensor.front_yard_person_occupancy + + - type: entity-filter + entities: + - binary_sensor.front_porch_person_occupancy + show_empty: false + state_filter: + - 'on' + card: + type: picture-glance + title: Front Porch + camera_view: auto + entities: [] + image_entity: image.frigate_cam19_person + entity: binary_sensor.front_porch_person_occupancy + + # - type: entity-filter + # entities: + # - binary_sensor.frigate_cam03_person_occupancy + # show_empty: true + # state_filter: + # - 'on' + # card: + # type: entity-filter + # entities: + # - binary_sensor.great_room_person_occupancy + # show_empty: true + # state_filter: + # - 'on' + # card: + # type: picture-entity + # entity: binary_sensor.frigate_cam03_person_occupancy + # name: Great Room + # show_state: true + # show_name: true + # camera_view: auto + # type: picture-entity + # entity: binary_sensor.great_room_person_occupancy + # camera_image: image.frigate_cam03_person + + # - type: entity-filter + # entities: + # - binary_sensor.master_bedroom_person_occupancy + # show_empty: true + # state_filter: + # - 'on' + # card: + # type: picture-entity + # entity: binary_sensor.master_bedroom_person_occupancy + # name: Master Bedroom + # show_state: true + # show_name: true + # camera_view: auto + + # - type: vertical-stack + # view_layout: + # position: sidebar + # cards: + # - type: entities + # entities: + # - entity: binary_sensor.frigate_cam03_person_occupancy + # - entity: binary_sensor.computer_area_person_occupancy + # - entity: binary_sensor.great_room_person_occupancy \ No newline at end of file diff --git a/lovelace/details/view-power-breaker.yaml b/lovelace/details/view-power-breaker.yaml new file mode 100644 index 0000000..de90609 --- /dev/null +++ b/lovelace/details/view-power-breaker.yaml @@ -0,0 +1,476 @@ +title: Power Breaker +path: power-breaker +icon: mdi:electric-switch +panel: true + +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 +cards: + - type: vertical-stack + cards: + - type: horizontal-stack + cards: + # - type: custom:mushroom-title-card + # title: "{{states('sensor.energy_tariff')}}" + # subtitle: "{{states('sensor.energy_cost')}} $/kWh" + - type: custom:mushroom-chips-card + chips: + - type: back + - type: custom:mushroom-title-card + title: Current Live Totals + - type: custom:mushroom-title-card + title: "{{states('sensor.pm_grid_total_a')}} A" + - type: custom:mushroom-title-card + title: "{{states('sensor.pm_grid_total_w')}} W" + - type: custom:mushroom-title-card + title: "{{states('sensor.pm_grid_kwh')}} kWh" + - type: horizontal-stack + cards: + - type: vertical-stack + cards: + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: Well + icon: mdi:water-well + fill_container: true + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_well_kwh''))|float(default=0)|round(2) }} kWh' + icon: mdi:flash + entity: sensor.pm_well_kwh + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_well_w''))|float(default=0)|round(2) }} W' + icon: mdi:flash + entity: sensor.pm_well_w + fill_container: true + tap_action: + action: more-info + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: Kitchen 1 + icon: mdi:fridge + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_kitchen_1_kwh''))|float(default=0)|round(2) }} kWh' + icon: mdi:flash + entity: sensor.pm_kitchen_1_kwh + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_kitchen_1_w''))|float(default=0)|round(2) }} W' + icon: mdi:flash + entity: sensor.pm_kitchen_1_w + fill_container: true + tap_action: + action: more-info + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: Kitchen 2 + icon: mdi:coffee-maker + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_kitchen_2_kwh''))|float(default=0)|round(2) }} kWh' + icon: mdi:flash + entity: sensor.pm_kitchen_2_kwh + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_kitchen_2_w''))|float(default=0)|round(2) }} W' + icon: mdi:flash + entity: sensor.pm_kitchen_2_w + fill_container: true + tap_action: + action: more-info + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: Laundry Plug + icon: mdi:washing-machine + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_laundry_plug_kwh''))|float(default=0)|round(2) }} kWh' + icon: mdi:flash + entity: sensor.pm_laundry_plug_kwh + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_laundry_plug_w''))|float(default=0)|round(2) }} W' + icon: mdi:flash + entity: sensor.pm_laundry_plug_w + fill_container: true + tap_action: + action: more-info + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: Microwave Plug + icon: mdi:microwave + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_microwave_plug_kwh''))|float(default=0)|round(2) }} kWh' + icon: mdi:flash + entity: sensor.pm_microwave_plug_kwh + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_microwave_plug_w''))|float(default=0)|round(2) }} W' + icon: mdi:flash + entity: sensor.pm_microwave_plug_w + fill_container: true + tap_action: + action: more-info + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: Bathroom Plug + icon: mdi:hair-dryer + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_bathroom_plug_kwh''))|float(default=0)|round(2) }} kWh' + icon: mdi:flash + entity: sensor.pm_bathroom_plug_kwh + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_bathroom_plug_w''))|float(default=0)|round(2) }} W' + icon: mdi:flash + entity: sensor.pm_bathroom_plug_w + fill_container: true + tap_action: + action: more-info + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: Heat Pump + icon: mdi:air-conditioner + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_heat_pump_kwh''))|float(default=0)|round(2) }} kWh' + icon: mdi:flash + entity: sensor.pm_heat_pump_kwh + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_heat_pump_w''))|float(default=0)|round(2) }} W' + icon: mdi:flash + entity: sensor.pm_heat_pump_w + fill_container: true + tap_action: + action: more-info + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: Basement Bedroom and Furnace Room Lights + icon: mdi:yoga + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_basement_bedroom_and_furnace_room_lights_kwh''))|float(default=0)|round(2) }} kWh' + icon: mdi:flash + entity: sensor.pm_basement_bedroom_and_furnace_room_lights_kwh + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_basement_bedroom_and_furnace_room_lights_w''))|float(default=0)|round(2) }} W' + icon: mdi:flash + entity: sensor.pm_basement_bedroom_and_furnace_room_lights_w + fill_container: true + tap_action: + action: more-info + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: Basement Plugs + icon: mdi:microsoft-xbox-controller + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_basement_plugs_kwh''))|float(default=0)|round(2) }} kWh' + icon: mdi:flash + entity: sensor.pm_basement_plugs_kwh + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_basement_plugs_w''))|float(default=0)|round(2) }} W' + icon: mdi:flash + entity: sensor.pm_basement_plugs_w + fill_container: true + tap_action: + action: more-info + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: Basement and Laundry Lights and Plugs + icon: mdi:vanity-light + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_basement_and_laundry_lights_and_plugs_kwh''))|float(default=0)|round(2) }} kWh' + icon: mdi:flash + entity: sensor.pm_basement_and_laundry_lights_and_plugs_kwh + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_basement_and_laundry_lights_and_plugs_w''))|float(default=0)|round(2) }} W' + icon: mdi:flash + entity: sensor.pm_basement_and_laundry_lights_and_plugs_w + fill_container: true + tap_action: + action: more-info + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: Sump Pump Plug + icon: mdi:pump + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_sump_pump_plug_kwh''))|float(default=0)|round(2) }} kWh' + icon: mdi:flash + entity: sensor.pm_sump_pump_plug_kwh + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_sump_pump_plug_w''))|float(default=0)|round(2) }} W' + icon: mdi:flash + entity: sensor.pm_sump_pump_plug_w + fill_container: true + tap_action: + action: more-info + + - type: vertical-stack + cards: + - type: horizontal-stack + cards: + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_nursery_dining_kitchen_lights_kwh''))|float(default=0)|round(2) }} kWh' + icon: mdi:flash + entity: sensor.pm_nursery_dining_kitchen_lights_kwh + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_nursery_dining_kitchen_lights_w''))|float(default=0)|round(2) }} W' + icon: mdi:flash + entity: sensor.pm_nursery_dining_kitchen_lights_w + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: Nursery, Dining, Kitchen Lights + icon: mdi:bunk-bed + - type: horizontal-stack + cards: + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_master_suite_kwh''))|float(default=0)|round(2) }} kWh' + icon: mdi:flash + entity: sensor.pm_master_suite_kwh + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_master_suite_w''))|float(default=0)|round(2) }} W' + icon: mdi:flash + entity: sensor.pm_master_suite_w + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: Master Suite + icon: mdi:bed-king + - type: horizontal-stack + cards: + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_furnace_kwh''))|float(default=0)|round(2) }} kWh' + icon: mdi:flash + entity: sensor.pm_furnace_kwh + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_furnace_w''))|float(default=0)|round(2) }} W' + icon: mdi:flash + entity: sensor.pm_furnace_w + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: Furnace + icon: mdi:hvac + - type: horizontal-stack + cards: + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_basement_stairs_and_lights_kwh''))|float(default=0)|round(2) }} kWh' + icon: mdi:flash + entity: sensor.pm_basement_stairs_and_lights_kwh + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_basement_stairs_and_lights_w''))|float(default=0)|round(2) }} W' + icon: mdi:flash + entity: sensor.pm_basement_stairs_and_lights_w + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: Basement Stairs and Lights + icon: mdi:stairs + - type: horizontal-stack + cards: + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_dishwasher_kwh''))|float(default=0)|round(2) }} kWh' + icon: mdi:flash + entity: sensor.pm_dishwasher_kwh + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_dishwasher_w''))|float(default=0)|round(2) }} W' + icon: mdi:flash + entity: sensor.pm_dishwasher_w + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: Dishwasher + icon: mdi:dishwasher + - type: horizontal-stack + cards: + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_garage_outside_and_front_garage_lights_kwh''))|float(default=0)|round(2) }} kWh' + icon: mdi:flash + entity: sensor.pm_garage_outside_and_front_garage_lights_kwh + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_garage_outside_and_front_garage_lights_w''))|float(default=0)|round(2) }} W' + icon: mdi:flash + entity: sensor.pm_garage_outside_and_front_garage_lights_w + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: Garage, Outside, and Front Garage Lights + icon: mdi:garage + - type: horizontal-stack + cards: + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_front_room_plugs_kwh''))|float(default=0)|round(2) }} kWh' + icon: mdi:flash + entity: sensor.pm_front_room_plugs_kwh + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_front_room_plugs_w''))|float(default=0)|round(2) }} W' + icon: mdi:flash + entity: sensor.pm_front_room_plugs_w + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: Front Room Plugs + icon: mdi:television + - type: horizontal-stack + cards: + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_garage_and_outside_plugs_kwh''))|float(default=0)|round(2) }} kWh' + icon: mdi:flash + entity: sensor.pm_garage_and_outside_plugs_kwh + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_garage_and_outside_plugs_w''))|float(default=0)|round(2) }} W' + icon: mdi:flash + entity: sensor.pm_garage_and_outside_plugs_w + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: Garage and Outside Plugs + icon: mdi:grass + - type: horizontal-stack + cards: + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_stove_kwh''))|float(default=0)|round(2) }} kWh' + icon: mdi:flash + entity: sensor.pm_stove_kwh + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_stove_w''))|float(default=0)|round(2) }} W' + icon: mdi:flash + entity: sensor.pm_stove_w + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: Stove + icon: mdi:stove + - type: horizontal-stack + cards: + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_dryer_kwh''))|float(default=0)|round(2) }} kWh' + icon: mdi:flash + entity: sensor.pm_dryer_kwh + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: '{{(states(''sensor.pm_dryer_w''))|float(default=0)|round(2) }} W' + icon: mdi:flash + entity: sensor.pm_dryer_w + fill_container: true + tap_action: + action: more-info + - type: custom:mushroom-template-card + primary: Dryer + icon: mdi:tumble-dryer diff --git a/lovelace/details/view-stock.yaml b/lovelace/details/view-stock.yaml new file mode 100644 index 0000000..f78e0c6 --- /dev/null +++ b/lovelace/details/view-stock.yaml @@ -0,0 +1,118 @@ +title: Stock +path: stock +icon: mdi:fridge-variant +type: panel +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 +cards: + - type: horizontal-stack + cards: + - type: vertical-stack + cards: + - type: horizontal-stack + cards: + # - type: custom:mushroom-title-card + # title: "{{states('sensor.energy_tariff')}}" + # subtitle: "{{states('sensor.energy_cost')}} $/kWh" + - type: custom:mushroom-chips-card + chips: + - type: back + - type: custom:mushroom-title-card + title: Shopping + - type: markdown + content: |- + {% if state_attr('binary_sensor.grocy_missing_products','count')|int(default=0) > 0 %} + ## Missing ## + |Name|Missing|Available| + |:---|:---:|---:| + {%- for i in range(0,(state_attr('binary_sensor.grocy_missing_products','count')|int(default=0) )) %} + |{{ (state_attr("binary_sensor.grocy_missing_products", "missing_products")[i]).name }} | {{ + (state_attr("binary_sensor.grocy_missing_products", "missing_products")[i]).amount_missing }} | {{ + (state_attr("binary_sensor.grocy_missing_products", "missing_products")[i]).available_amount }} | {%- endfor %} + {% endif %} + + {% if state_attr('binary_sensor.grocy_expiring_products','count')|int(default=0) > 0 %} + *** + + ## Expiring ## + {% for i in range(0,(state_attr('binary_sensor.grocy_expiring_products','count')|int(default=0) )) %} + + {{ (state_attr("binary_sensor.grocy_expiring_products", "expiring_products")[i]).name }} {%- + endfor %} + + {% endif %} + + {% if state_attr('binary_sensor.grocy_expired_products','count')|int(default=0) > 0 %} + *** + + ## Expired ## + {% for i in range(0,(state_attr('binary_sensor.grocy_expired_products','count')|int(default=0) )) %} + + {{ (state_attr("binary_sensor.grocy_expired_products", "expired_products")[i]).name }} {%- + endfor %} + + {% endif %} + + {% if state_attr('binary_sensor.grocy_overdue_products','count')|int(default=0) > 0 %} + *** + + ## Overdue ## + | Product | Best Before | + |:---|---:| + {%- for i in range(0,(state_attr('binary_sensor.grocy_overdue_products','count')|int(default=0) )) %} + | {{ (state_attr("binary_sensor.grocy_overdue_products", "overdue_products")[i]).name }} | {{ + (state_attr("binary_sensor.grocy_overdue_products", "overdue_products")[i]).best_before_date }} | + {%- endfor %} + {% endif %} + + {% if states('sensor.grocy_stock')|int(default=0) > 0 %} + *** + + ## Stock ## + |Product|Available| + |:---|---:| + {%- for i in range(0,(state_attr('sensor.grocy_stock','count')|int(default=0) )) %} + |{{ (state_attr("sensor.grocy_stock", "products")[i]).name }} | {{ + (state_attr("sensor.grocy_stock", "products")[i]).available_amount }} | {%- endfor %} + + {% else %}### No stock on hand ###{% endif %} + + - type: glance + entities: + - entity: input_button.grocy_purchase_am_meds + name: AM Meds + tap_action: + action: toggle + - entity: input_button.grocy_purchase_pm_meds + name: PM Meds + tap_action: + action: toggle + - entity: input_button.grocy_purchase_milk + name: Milk + tap_action: + action: toggle + - entity: input_button.grocy_purchase_diet_coke_12_pack + name: Diet Coke (12) + tap_action: + action: toggle + show_state: false + columns: 4 + title: Purchase + + - type: glance + entities: + - entity: input_button.grocy_consume_am_meds + name: AM Meds + - entity: input_button.grocy_consume_pm_meds + name: PM Meds + - entity: input_button.grocy_consume_milk + name: Milk + - entity: input_button.grocy_consume_diet_coke + name: Diet Coke + tap_action: + action: call-service + service: input_button.press + show_state: false + title: Consume + columns: 4 diff --git a/lovelace/details/view-watchman.yaml b/lovelace/details/view-watchman.yaml new file mode 100644 index 0000000..66f1202 --- /dev/null +++ b/lovelace/details/view-watchman.yaml @@ -0,0 +1,40 @@ +title: Watchman +path: watchman +icon: mdi:sunglasses +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f +cards: + - type: vertical-stack + cards: + - type: custom:mushroom-chips-card + chips: + - type: back + - type: button + entity: sensor.watchman_last_updated + name: Update + show_name: true + show_icon: true + tap_action: + action: call-service + service: watchman.report + service_data: + parse_config: true + target: {} + + + - type: markdown + content: >- +

Watchman Report

+

Missing Entities: {{ states.sensor.watchman_missing_entities.state }}

+ {%- for item in state_attr("sensor.watchman_missing_entities","entities") %} +
{{ + item.id }} [{{item.state}}] + {{item.occurrences.split('/')[-1].split(':')[0]}}
+ {%- endfor %} +

Missing Services: {{ states.sensor.watchman_missing_services.state }}

+ {%- for item in state_attr("sensor.watchman_missing_services", "entities") %} +
{{ item.id }} {{item.occurrences.split('/')[-1].split(':')[0]}} +
+ {%- endfor %} \ No newline at end of file diff --git a/lovelace/details/view-weather.yaml b/lovelace/details/view-weather.yaml new file mode 100644 index 0000000..1817487 --- /dev/null +++ b/lovelace/details/view-weather.yaml @@ -0,0 +1,64 @@ +title: Weather +path: weather +icon: mdi:weather-sunny +type: sidebar +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f +cards: + - type: iframe + url: >- + https://embed.windy.com/embed2.html?lat=42.534&lon=-85.842&detailLat=42.439&detailLon=-85.838&width=650&height=450&zoom=9&level=surface&overlay=radar&product=radar&menu=&message=&marker=&calendar=now&pressure=&type=map&location=coordinates&detail=&metricWind=default&metricTemp=default&radarRange=-1 + + - type: vertical-stack + view_layout: + position: sidebar + cards: + - type: custom:horizon-card + moon: true + refresh_period: 60 + fields: + sunrise: true + sunset: true + dawn: true + noon: true + dusk: true + # azimuth: true + # sun_azimuth: true + # moon_azimuth: true + # elevation: true + # sun_elevation: true + # moon_elevation: true + moonrise: true + moonset: true + moon_phase: true + + + - type: weather-forecast + entity: weather.openweathermap_hourly + name: Next 5 Hours + show_current: true + show_forecast: true + forecast_type: hourly + + - type: weather-forecast + entity: weather.openweathermap_daily + name: Next 5 Days + show_current: true + show_forecast: true + forecast_type: daily + + # - type: custom:hourly-weather + # entity: weather.openweathermap_hourly + # icons: true + # name: "" + # hide_hours: false + + # - type: markdown + # content: >- + #

Weather Forecast

+ #

Now: {{ states('weather.openweathermap_hourly') }}

+ #

Next 12 Hours:

+ # {% for forecast in state_attr("weather.openweathermap_hourly","forecast") -%} + # {{ forecast.condition }} - {{ forecast.precipitation_probability }}% chance of precipitation + + # {% endfor %} diff --git a/lovelace/frigate/view-ai-cam01.yaml b/lovelace/frigate/view-ai-cam01.yaml new file mode 100644 index 0000000..d6f58fa --- /dev/null +++ b/lovelace/frigate/view-ai-cam01.yaml @@ -0,0 +1,121 @@ +title: AI Cam01 +path: ai-cam01 +icon: mdi:yoga +type: sidebar +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 +cards: + - !include /config/lovelace/cameras/view-camera-01.yaml + + - type: vertical-stack + view_layout: + position: sidebar + cards: + - type: glance + title: Blue Room + entities: [] + - type: glance + show_state: false + columns: 4 + entities: + - name: Contrast + entity: switch.frigate_cam01_improve_contrast + tap_action: + action: toggle + - name: Snapshots + entity: switch.frigate_cam01_snapshots + tap_action: + action: toggle + - name: Detect + entity: switch.frigate_cam01_detect + tap_action: + action: toggle + - name: Occupancy + entity: binary_sensor.frigate_cam01_all_occupancy + - type: entities + title: Blue Room + show_header_toggle: false + entities: + - name: Blue Room + entity: sensor.frigate_cam01_person_count + - name: Blue Room + entity: binary_sensor.frigate_cam01_person_occupancy + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam01 + title: Blue Room + icon: mdi:yoga + live_provider: ha + frigate: + camera_name: frigate_cam01 + zone: blue_room + label: person + url: http://192.168.1.11:5000 + view: + default: snapshots + event_gallery: + controls: + thumbnails: + size: 75 + menu: + style: overlay + position: top + buttons: + clips: + enabled: false + download: + enabled: false + frigate_ui: + enabled: false + frigate: + enabled: false + live: + enabled: false + media_viewer: + controls: + next_previous: + style: chevrons + - type: entities + title: Furnace Room + show_header_toggle: false + entities: + - name: Furnace Room + entity: sensor.furnace_room_person_count + - name: Furnace Room + entity: binary_sensor.furnace_room_person_occupancy + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam01 + title: Furnace Room + icon: mdi:hvac + live_provider: ha + frigate: + camera_name: frigate_cam01 + zone: furnace_room + label: person + url: http://192.168.1.11:5000 + view: + default: snapshots + event_gallery: + controls: + thumbnails: + size: 75 + menu: + style: overlay + position: top + buttons: + clips: + enabled: false + download: + enabled: false + frigate_ui: + enabled: false + frigate: + enabled: false + live: + enabled: false + media_viewer: + controls: + next_previous: + style: chevrons diff --git a/lovelace/frigate/view-ai-cam03.yaml b/lovelace/frigate/view-ai-cam03.yaml new file mode 100644 index 0000000..5f76f9d --- /dev/null +++ b/lovelace/frigate/view-ai-cam03.yaml @@ -0,0 +1,125 @@ +title: AI Cam03 +path: ai-cam03 +icon: mdi:desktop-classic +type: sidebar +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 +cards: + - !include /config/lovelace/cameras/view-camera-03.yaml + # - type: horizontal-stack + # cards: + #- !include /config/lovelace/cameras/view-camera-03.yaml + #- !include /config/lovelace/raw-cameras/computer-area-card.yaml + + - type: vertical-stack + view_layout: + position: sidebar + cards: + - type: glance + title: Computer Area + entities: [] + - type: glance + show_state: false + columns: 4 + entities: + - name: Contrast + entity: switch.frigate_cam03_improve_contrast + tap_action: + action: toggle + - name: Snapshots + entity: switch.frigate_cam03_snapshots + tap_action: + action: toggle + - name: Detect + entity: switch.frigate_cam03_detect + tap_action: + action: toggle + - name: Occupancy + entity: binary_sensor.frigate_cam03_all_occupancy + - type: entities + title: Computer Area + show_header_toggle: false + entities: + - name: Computer Area + entity: sensor.frigate_cam03_person_count + - name: Computer Area + entity: binary_sensor.frigate_cam03_person_occupancy + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam03 + title: Computer Area + icon: mdi:desktop-classic + live_provider: ha + frigate: + camera_name: frigate_cam03 + zone: computer_area + label: person + url: http://192.168.1.11:5000 + view: + default: snapshots + event_gallery: + controls: + thumbnails: + size: 75 + menu: + style: overlay + position: top + buttons: + clips: + enabled: false + download: + enabled: false + frigate_ui: + enabled: false + frigate: + enabled: false + live: + enabled: false + media_viewer: + controls: + next_previous: + style: chevrons + - type: entities + title: Great Room + show_header_toggle: false + entities: + - name: Great Room + entity: sensor.great_room_person_count + - name: Great Room + entity: binary_sensor.great_room_person_occupancy + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam03 + title: Great Room + icon: mdi:microsoft-xbox-controller + live_provider: ha + frigate: + camera_name: frigate_cam03 + zone: great_room + label: person + url: http://192.168.1.11:5000 + view: + default: snapshots + event_gallery: + controls: + thumbnails: + size: 75 + menu: + style: overlay + position: top + buttons: + clips: + enabled: false + download: + enabled: false + frigate_ui: + enabled: false + frigate: + enabled: false + live: + enabled: false + media_viewer: + controls: + next_previous: + style: chevrons diff --git a/lovelace/frigate/view-ai-cam04.yaml b/lovelace/frigate/view-ai-cam04.yaml new file mode 100644 index 0000000..586d30b --- /dev/null +++ b/lovelace/frigate/view-ai-cam04.yaml @@ -0,0 +1,192 @@ +title: AI Cam04 +path: ai-cam04 +icon: mdi:garage +type: sidebar +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 +cards: + - type: horizontal-stack + cards: + - !include /config/lovelace/cameras/view-camera-04.yaml + - type: vertical-stack + view_layout: + position: sidebar + cards: + - type: glance + title: Garage + entities: [] + - type: glance + show_state: false + columns: 4 + entities: + - name: Contrast + entity: switch.frigate_cam04_improve_contrast + tap_action: + action: toggle + - name: Snapshots + entity: switch.frigate_cam04_snapshots + tap_action: + action: toggle + - name: Detect + entity: switch.frigate_cam04_detect + tap_action: + action: toggle + - name: Occupancy + entity: binary_sensor.frigate_cam04_all_occupancy + - type: entities + title: Garage Person + show_header_toggle: false + entities: + - name: Garage + entity: sensor.frigate_cam04_person_count + - name: Garage + entity: binary_sensor.frigate_cam04_person_occupancy + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam04 + title: Walkway + icon: mdi:garage + live_provider: ha + frigate: + camera_name: frigate_cam04 + zone: walkway + label: person + url: http://192.168.1.11:5000 + view: + default: snapshots + event_gallery: + controls: + thumbnails: + size: 75 + menu: + style: overlay + position: top + buttons: + clips: + enabled: false + download: + enabled: false + frigate_ui: + enabled: false + frigate: + enabled: false + live: + enabled: false + media_viewer: + controls: + next_previous: + style: chevrons + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam04 + title: Workshop + icon: mdi:garage + live_provider: ha + frigate: + camera_name: frigate_cam04 + zone: workshop + label: person + url: http://192.168.1.11:5000 + view: + default: snapshots + event_gallery: + controls: + thumbnails: + size: 75 + menu: + style: overlay + position: top + buttons: + clips: + enabled: false + download: + enabled: false + frigate_ui: + enabled: false + frigate: + enabled: false + live: + enabled: false + media_viewer: + controls: + next_previous: + style: chevrons + - type: entities + title: Garage Vehicle + show_header_toggle: false + entities: + - name: Garage + entity: sensor.frigate_cam04_vehicle_count + - name: Garage + entity: binary_sensor.frigate_cam04_vehicle_occupancy + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam04 + title: East Side + icon: mdi:garage + live_provider: ha + frigate: + camera_name: frigate_cam04 + zone: east_side + label: vehicle + url: http://192.168.1.11:5000 + view: + default: snapshots + event_gallery: + controls: + thumbnails: + size: 75 + menu: + style: overlay + position: top + buttons: + clips: + enabled: false + download: + enabled: false + frigate_ui: + enabled: false + frigate: + enabled: false + live: + enabled: false + media_viewer: + controls: + next_previous: + style: chevrons + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam04 + title: West Side + icon: mdi:garage + live_provider: ha + frigate: + camera_name: frigate_cam04 + zone: west_side + label: vehicle + url: http://192.168.1.11:5000 + view: + default: snapshots + event_gallery: + controls: + thumbnails: + size: 75 + menu: + style: overlay + position: top + buttons: + clips: + enabled: false + download: + enabled: false + frigate_ui: + enabled: false + frigate: + enabled: false + live: + enabled: false + media_viewer: + controls: + next_previous: + style: chevrons diff --git a/lovelace/frigate/view-ai-cam06.yaml b/lovelace/frigate/view-ai-cam06.yaml new file mode 100644 index 0000000..f6e0d42 --- /dev/null +++ b/lovelace/frigate/view-ai-cam06.yaml @@ -0,0 +1,113 @@ +title: AI Cam06 +path: ai-cam06 +icon: mdi:bed-king +type: sidebar +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 +cards: + - type: horizontal-stack + cards: + - !include /config/lovelace/cameras/view-camera-06.yaml + - type: vertical-stack + view_layout: + position: sidebar + cards: + - type: glance + title: Bedroom Left + entities: [] + - type: glance + show_state: false + columns: 4 + entities: + - name: Contrast + entity: switch.frigate_cam06_improve_contrast + tap_action: + action: toggle + - name: Snapshots + entity: switch.frigate_cam06_snapshots + tap_action: + action: toggle + - name: Detect + entity: switch.frigate_cam06_detect + tap_action: + action: toggle + - name: Occupancy + entity: binary_sensor.frigate_cam06_all_occupancy + - type: entities + title: Master Bedroom + show_header_toggle: false + show_name: false + entities: + - entity: sensor.master_bedroom_person_count + - entity: binary_sensor.master_bedroom_person_occupancy + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam06 + title: Master Bedroom Left + icon: mdi:bed-king + live_provider: ha + frigate: + camera_name: frigate_cam06 + zone: master_bedroom + label: person + url: http://192.168.1.11:5000 + view: + default: snapshots + event_gallery: + controls: + thumbnails: + size: 75 + menu: + style: overlay + position: top + buttons: + clips: + enabled: false + download: + enabled: false + frigate_ui: + enabled: false + frigate: + enabled: false + live: + enabled: false + media_viewer: + controls: + next_previous: + style: chevrons + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam06 + title: Master Bed + icon: mdi:bed-king + live_provider: ha + frigate: + camera_name: frigate_cam06 + zone: master_bed + label: person + url: http://192.168.1.11:5000 + view: + default: snapshots + event_gallery: + controls: + thumbnails: + size: 75 + menu: + style: overlay + position: top + buttons: + clips: + enabled: false + download: + enabled: false + frigate_ui: + enabled: false + frigate: + enabled: false + live: + enabled: false + media_viewer: + controls: + next_previous: + style: chevrons diff --git a/lovelace/frigate/view-ai-cam07.yaml b/lovelace/frigate/view-ai-cam07.yaml new file mode 100644 index 0000000..801983c --- /dev/null +++ b/lovelace/frigate/view-ai-cam07.yaml @@ -0,0 +1,113 @@ +title: AI Cam07 +path: ai-cam07 +icon: mdi:bed-king +type: sidebar +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 +cards: + - type: horizontal-stack + cards: + - !include /config/lovelace/cameras/view-camera-07.yaml + - type: vertical-stack + view_layout: + position: sidebar + cards: + - type: glance + title: Bedroom Right + entities: [] + - type: glance + show_state: false + columns: 4 + entities: + - name: Contrast + entity: switch.frigate_cam07_improve_contrast + tap_action: + action: toggle + - name: Snapshots + entity: switch.frigate_cam07_snapshots + tap_action: + action: toggle + - name: Detect + entity: switch.frigate_cam07_detect + tap_action: + action: toggle + - name: Occupancy + entity: binary_sensor.frigate_cam07_all_occupancy + - type: entities + title: Master Bedroom + show_header_toggle: false + show_name: false + entities: + - entity: sensor.master_bedroom_person_count + - entity: binary_sensor.master_bedroom_person_occupancy + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam07 + title: Master Bedroom Right + icon: mdi:bed-king + live_provider: ha + frigate: + camera_name: frigate_cam07 + zone: master_bedroom + label: person + url: http://192.168.1.11:5000 + view: + default: snapshots + event_gallery: + controls: + thumbnails: + size: 75 + menu: + style: overlay + position: top + buttons: + clips: + enabled: false + download: + enabled: false + frigate_ui: + enabled: false + frigate: + enabled: false + live: + enabled: false + media_viewer: + controls: + next_previous: + style: chevrons + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam07 + title: Master Bed + icon: mdi:bed-king + live_provider: ha + frigate: + camera_name: frigate_cam07 + zone: master_bed + label: person + url: http://192.168.1.11:5000 + view: + default: snapshots + event_gallery: + controls: + thumbnails: + size: 75 + menu: + style: overlay + position: top + buttons: + clips: + enabled: false + download: + enabled: false + frigate_ui: + enabled: false + frigate: + enabled: false + live: + enabled: false + media_viewer: + controls: + next_previous: + style: chevrons diff --git a/lovelace/frigate/view-ai-cam08.yaml b/lovelace/frigate/view-ai-cam08.yaml new file mode 100644 index 0000000..dcd5554 --- /dev/null +++ b/lovelace/frigate/view-ai-cam08.yaml @@ -0,0 +1,79 @@ +title: AI Cam08 +path: ai-cam08 +icon: mdi:bunk-bed +type: sidebar +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 +cards: + - type: horizontal-stack + cards: + - !include /config/lovelace/cameras/view-camera-08.yaml + - type: vertical-stack + view_layout: + position: sidebar + cards: + - type: glance + title: Nursery + entities: [] + - type: glance + show_state: false + columns: 4 + entities: + - name: Contrast + entity: switch.frigate_cam08_improve_contrast + tap_action: + action: toggle + - name: Snapshots + entity: switch.frigate_cam08_snapshots + tap_action: + action: toggle + - name: Detect + entity: switch.frigate_cam08_detect + tap_action: + action: toggle + - name: Occupancy + entity: binary_sensor.frigate_cam08_all_occupancy + - type: entities + title: Person + show_header_toggle: false + entities: + - name: Person + entity: sensor.frigate_cam08_person_count + - name: Person + entity: binary_sensor.frigate_cam08_person_occupancy + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam08 + title: Person + icon: mdi:bunk-bed + live_provider: ha + frigate: + camera_name: frigate_cam08 + zone: nursery + label: person + url: http://192.168.1.11:5000 + view: + default: snapshots + event_gallery: + controls: + thumbnails: + size: 75 + menu: + style: overlay + position: top + buttons: + clips: + enabled: false + download: + enabled: false + frigate_ui: + enabled: false + frigate: + enabled: false + live: + enabled: false + media_viewer: + controls: + next_previous: + style: chevrons diff --git a/lovelace/frigate/view-ai-cam12.yaml b/lovelace/frigate/view-ai-cam12.yaml new file mode 100644 index 0000000..0bcd8f0 --- /dev/null +++ b/lovelace/frigate/view-ai-cam12.yaml @@ -0,0 +1,165 @@ +title: AI Cam12 +path: ai-cam12 +icon: mdi:fridge +type: sidebar +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 +cards: + - type: horizontal-stack + cards: + - !include /config/lovelace/cameras/view-camera-12.yaml + - type: vertical-stack + view_layout: + position: sidebar + cards: + - type: glance + title: Kitchen + entities: [] + - type: glance + show_state: false + columns: 4 + entities: + - name: Contrast + entity: switch.frigate_cam12_improve_contrast + tap_action: + action: toggle + - name: Snapshots + entity: switch.frigate_cam12_snapshots + tap_action: + action: toggle + - name: Detect + entity: switch.frigate_cam12_detect + tap_action: + action: toggle + - name: Occupancy + entity: binary_sensor.frigate_cam12_all_occupancy + - type: entities + title: Kitchen + show_header_toggle: false + entities: + - name: Kitchen + entity: sensor.kitchen_person_count + - name: Kitchen + entity: binary_sensor.kitchen_person_occupancy + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam12 + title: Kitchen + icon: mdi:fridge + live_provider: ha + frigate: + camera_name: frigate_cam12 + zone: kitchen + label: person + url: http://192.168.1.11:5000 + view: + default: snapshots + event_gallery: + controls: + thumbnails: + size: 75 + menu: + style: overlay + position: top + buttons: + clips: + enabled: false + download: + enabled: false + frigate_ui: + enabled: false + frigate: + enabled: false + live: + enabled: false + media_viewer: + controls: + next_previous: + style: chevrons + - type: entities + title: Dining Room + show_header_toggle: false + entities: + - name: Dining Room + entity: sensor.dining_room_person_count + - name: Dining Room + entity: binary_sensor.dining_room_person_occupancy + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam12 + title: Dining Room + icon: mdi:table-chair + live_provider: ha + frigate: + camera_name: frigate_cam12 + zone: dining_room + label: person + url: http://192.168.1.11:5000 + view: + default: snapshots + event_gallery: + controls: + thumbnails: + size: 75 + menu: + style: overlay + position: top + buttons: + clips: + enabled: false + download: + enabled: false + frigate_ui: + enabled: false + frigate: + enabled: false + live: + enabled: false + media_viewer: + controls: + next_previous: + style: chevrons + - type: entities + title: Front Room + show_header_toggle: false + entities: + - name: Front Room + entity: sensor.front_room_person_count + - name: Front Room + entity: binary_sensor.front_room_person_occupancy + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam12 + title: Front Room + icon: mdi:television + live_provider: ha + frigate: + camera_name: frigate_cam12 + zone: front_room + label: person + url: http://192.168.1.11:5000 + view: + default: snapshots + event_gallery: + controls: + thumbnails: + size: 75 + menu: + style: overlay + position: top + buttons: + clips: + enabled: false + download: + enabled: false + frigate_ui: + enabled: false + frigate: + enabled: false + live: + enabled: false + media_viewer: + controls: + next_previous: + style: chevrons diff --git a/lovelace/frigate/view-ai-cam13.yaml b/lovelace/frigate/view-ai-cam13.yaml new file mode 100644 index 0000000..b6f9362 --- /dev/null +++ b/lovelace/frigate/view-ai-cam13.yaml @@ -0,0 +1,165 @@ +title: AI Cam13 +path: ai-cam13 +icon: mdi:television +type: sidebar +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 +cards: + - type: horizontal-stack + cards: + - !include /config/lovelace/cameras/view-camera-13.yaml + - type: vertical-stack + view_layout: + position: sidebar + cards: + - type: glance + title: Front Room + entities: [] + - type: glance + show_state: false + columns: 4 + entities: + - name: Contrast + entity: switch.frigate_cam13_improve_contrast + tap_action: + action: toggle + - name: Snapshots + entity: switch.frigate_cam13_snapshots + tap_action: + action: toggle + - name: Detect + entity: switch.frigate_cam13_detect + tap_action: + action: toggle + - name: Occupancy + entity: binary_sensor.frigate_cam13_all_occupancy + - type: entities + title: Kitchen + show_header_toggle: false + entities: + - name: Kitchen + entity: sensor.kitchen_person_count + - name: Kitchen + entity: binary_sensor.kitchen_person_occupancy + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam12 + title: Kitchen + icon: mdi:fridge + live_provider: ha + frigate: + camera_name: frigate_cam13 + zone: kitchen + label: person + url: http://192.168.1.11:5000 + view: + default: snapshots + event_gallery: + controls: + thumbnails: + size: 75 + menu: + style: overlay + position: top + buttons: + clips: + enabled: false + download: + enabled: false + frigate_ui: + enabled: false + frigate: + enabled: false + live: + enabled: false + media_viewer: + controls: + next_previous: + style: chevrons + - type: entities + title: Dining Room + show_header_toggle: false + entities: + - name: Dining Room + entity: sensor.dining_room_person_count + - name: Dining Room + entity: binary_sensor.dining_room_person_occupancy + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam12 + title: Dining Room + icon: mdi:table-chair + live_provider: ha + frigate: + camera_name: frigate_cam13 + zone: dining_room + label: person + url: http://192.168.1.11:5000 + view: + default: snapshots + event_gallery: + controls: + thumbnails: + size: 75 + menu: + style: overlay + position: top + buttons: + clips: + enabled: false + download: + enabled: false + frigate_ui: + enabled: false + frigate: + enabled: false + live: + enabled: false + media_viewer: + controls: + next_previous: + style: chevrons + - type: entities + title: Front Room + show_header_toggle: false + entities: + - name: Front Room + entity: sensor.front_room_person_count + - name: Front Room + entity: binary_sensor.front_room_person_occupancy + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam12 + title: Front Room + icon: mdi:television + live_provider: ha + frigate: + camera_name: frigate_cam13 + zone: front_room + label: person + url: http://192.168.1.11:5000 + view: + default: snapshots + event_gallery: + controls: + thumbnails: + size: 75 + menu: + style: overlay + position: top + buttons: + clips: + enabled: false + download: + enabled: false + frigate_ui: + enabled: false + frigate: + enabled: false + live: + enabled: false + media_viewer: + controls: + next_previous: + style: chevrons diff --git a/lovelace/frigate/view-ai-cam14.yaml b/lovelace/frigate/view-ai-cam14.yaml new file mode 100644 index 0000000..0909834 --- /dev/null +++ b/lovelace/frigate/view-ai-cam14.yaml @@ -0,0 +1,129 @@ +title: AI Cam14 +path: ai-cam14 +icon: mdi:slide +type: sidebar +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 +cards: + - type: horizontal-stack + cards: + - !include /config/lovelace/cameras/view-camera-14.yaml + - type: vertical-stack + view_layout: + position: sidebar + cards: + - type: glance + title: Back Yard + entities: [] + - !include /config/lovelace/templates/back-yard-camera-presets-grid.yaml + - type: glance + show_state: true + columns: 5 + entities: + - name: Status + entity: input_text.camera14_status + - name: Contrast + entity: switch.frigate_cam14_improve_contrast + tap_action: + action: toggle + - name: Snapshots + entity: switch.frigate_cam14_snapshots + tap_action: + action: toggle + - name: Detect + entity: switch.frigate_cam14_detect + tap_action: + action: toggle + - name: Occupancy + entity: binary_sensor.frigate_cam14_all_occupancy + - type: horizontal-stack + cards: + - type: glance + title: People + show_icon: false + columns: 1 + entities: + - name: Count + entity: sensor.frigate_cam14_person_count + - name: Occupancy + entity: binary_sensor.frigate_cam14_person_occupancy + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam14 + title: Person + icon: mdi:slide + live_provider: ha + frigate: + camera_name: frigate_cam14 + label: person + url: http://192.168.1.11:5000 + view: + default: snapshots + event_gallery: + controls: + thumbnails: + size: 100 + menu: + style: overlay + position: top + buttons: + clips: + enabled: false + download: + enabled: false + frigate_ui: + enabled: false + frigate: + enabled: false + live: + enabled: false + media_viewer: + controls: + next_previous: + style: chevrons + - type: horizontal-stack + cards: + - type: glance + title: Animals + show_icon: false + columns: 1 + entities: + - name: Count + entity: sensor.frigate_cam14_animal_count + - name: Occupancy + entity: binary_sensor.frigate_cam14_animal_occupancy + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam14 + title: Back Yard + icon: mdi:bird + live_provider: ha + frigate: + camera_name: frigate_cam14 + label: animal + url: http://192.168.1.11:5000 + view: + default: snapshots + event_gallery: + controls: + thumbnails: + size: 100 + menu: + style: overlay + position: top + buttons: + clips: + enabled: false + download: + enabled: false + frigate_ui: + enabled: false + frigate: + enabled: false + live: + enabled: false + media_viewer: + controls: + next_previous: + style: chevrons diff --git a/lovelace/frigate/view-ai-cam18.yaml b/lovelace/frigate/view-ai-cam18.yaml new file mode 100644 index 0000000..4d6a86d --- /dev/null +++ b/lovelace/frigate/view-ai-cam18.yaml @@ -0,0 +1,173 @@ +title: AI Cam18 +path: ai-cam18 +icon: mdi:grass +type: sidebar +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 +cards: + - type: horizontal-stack + cards: + - type: vertical-stack + cards: + - !include /config/lovelace/cameras/view-camera-18.yaml + - type: vertical-stack + view_layout: + position: sidebar + cards: + - type: glance + title: Front Porch + entities: [] + - type: glance + show_state: false + columns: 4 + entities: + - name: Contrast + entity: switch.frigate_cam18_improve_contrast + tap_action: + action: toggle + - name: Snapshots + entity: switch.frigate_cam18_snapshots + tap_action: + action: toggle + - name: Detect + entity: switch.frigate_cam18_detect + tap_action: + action: toggle + - name: Occupancy + entity: binary_sensor.frigate_cam18_all_occupancy + - type: horizontal-stack + cards: + - type: glance + title: People + show_icon: false + columns: 1 + entities: + - name: Count + entity: sensor.frigate_cam18_person_count + - name: Occupancy + entity: binary_sensor.frigate_cam18_person_occupancy + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam18 + title: Person + icon: mdi:door + live_provider: ha + frigate: + camera_name: frigate_cam18 + label: person + url: http://192.168.1.11:5000 + view: + default: snapshots + event_gallery: + controls: + thumbnails: + size: 100 + menu: + style: overlay + position: top + buttons: + clips: + enabled: false + download: + enabled: false + frigate_ui: + enabled: false + frigate: + enabled: false + live: + enabled: false + media_viewer: + controls: + next_previous: + style: chevrons + - type: horizontal-stack + cards: + - type: glance + title: Vehicles + show_icon: false + columns: 1 + entities: + - name: Count + entity: sensor.frigate_cam18_vehicle_count + - name: Occupancy + entity: binary_sensor.frigate_cam18_vehicle_occupancy + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam18 + title: Vehicle + icon: mdi:door + live_provider: ha + frigate: + camera_name: frigate_cam18 + label: vehicle + url: http://192.168.1.11:5000 + view: + default: snapshots + event_gallery: + controls: + thumbnails: + size: 100 + menu: + style: overlay + position: top + buttons: + clips: + enabled: false + download: + enabled: false + frigate_ui: + enabled: false + frigate: + enabled: false + live: + enabled: false + media_viewer: + controls: + next_previous: + style: chevrons + - type: horizontal-stack + cards: + - type: glance + title: Animals + show_icon: false + columns: 1 + entities: + - name: Count + entity: sensor.frigate_cam18_animal_count + - name: Occupancy + entity: binary_sensor.frigate_cam18_animal_occupancy + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam18 + title: Front Porch + icon: mdi:bird + live_provider: ha + frigate: + camera_name: frigate_cam18 + label: animal + url: http://192.168.1.11:5000 + view: + default: snapshots + event_gallery: + controls: + thumbnails: + size: 100 + menu: + style: overlay + position: top + buttons: + clips: + enabled: false + download: + enabled: false + frigate_ui: + enabled: false + frigate: + enabled: false + live: + enabled: false + media_viewer: + controls: + next_previous: + style: chevrons diff --git a/lovelace/frigate/view-ai-cam19.yaml b/lovelace/frigate/view-ai-cam19.yaml new file mode 100644 index 0000000..782fadc --- /dev/null +++ b/lovelace/frigate/view-ai-cam19.yaml @@ -0,0 +1,173 @@ +title: AI Cam19 +path: ai-cam19 +icon: mdi:door +type: sidebar +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 +cards: + - type: horizontal-stack + cards: + - type: vertical-stack + cards: + - !include /config/lovelace/cameras/view-camera-19.yaml + - type: vertical-stack + view_layout: + position: sidebar + cards: + - type: glance + title: Front Porch + entities: [] + - type: glance + show_state: false + columns: 4 + entities: + - name: Contrast + entity: switch.frigate_cam19_improve_contrast + tap_action: + action: toggle + - name: Snapshots + entity: switch.frigate_cam19_snapshots + tap_action: + action: toggle + - name: Detect + entity: switch.frigate_cam19_detect + tap_action: + action: toggle + - name: Occupancy + entity: binary_sensor.frigate_cam19_all_occupancy + - type: horizontal-stack + cards: + - type: glance + title: People + show_icon: false + columns: 1 + entities: + - name: Count + entity: sensor.frigate_cam19_person_count + - name: Occupancy + entity: binary_sensor.frigate_cam19_person_occupancy + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam19 + title: Person + icon: mdi:door + live_provider: ha + frigate: + camera_name: frigate_cam19 + label: person + url: http://192.168.1.11:5000 + view: + default: snapshots + event_gallery: + controls: + thumbnails: + size: 100 + menu: + style: overlay + position: top + buttons: + clips: + enabled: false + download: + enabled: false + frigate_ui: + enabled: false + frigate: + enabled: false + live: + enabled: false + media_viewer: + controls: + next_previous: + style: chevrons + - type: horizontal-stack + cards: + - type: glance + title: Vehicles + show_icon: false + columns: 1 + entities: + - name: Count + entity: sensor.frigate_cam19_vehicle_count + - name: Occupancy + entity: binary_sensor.frigate_cam19_vehicle_occupancy + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam19 + title: Vehicle + icon: mdi:door + live_provider: ha + frigate: + camera_name: frigate_cam19 + label: vehicle + url: http://192.168.1.11:5000 + view: + default: snapshots + event_gallery: + controls: + thumbnails: + size: 100 + menu: + style: overlay + position: top + buttons: + clips: + enabled: false + download: + enabled: false + frigate_ui: + enabled: false + frigate: + enabled: false + live: + enabled: false + media_viewer: + controls: + next_previous: + style: chevrons + - type: horizontal-stack + cards: + - type: glance + title: Animals + show_icon: false + columns: 1 + entities: + - name: Count + entity: sensor.frigate_cam19_animal_count + - name: Occupancy + entity: binary_sensor.frigate_cam19_animal_occupancy + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam19 + title: Front Porch + icon: mdi:bird + live_provider: ha + frigate: + camera_name: frigate_cam19 + label: animal + url: http://192.168.1.11:5000 + view: + default: snapshots + event_gallery: + controls: + thumbnails: + size: 100 + menu: + style: overlay + position: top + buttons: + clips: + enabled: false + download: + enabled: false + frigate_ui: + enabled: false + frigate: + enabled: false + live: + enabled: false + media_viewer: + controls: + next_previous: + style: chevrons diff --git a/lovelace/phone/back-yard.yaml b/lovelace/phone/back-yard.yaml new file mode 100644 index 0000000..929e71d --- /dev/null +++ b/lovelace/phone/back-yard.yaml @@ -0,0 +1,93 @@ +theme: Mushroom +subview: true +title: Back Yard +path: back-yard +icon: mdi:slide +badges: [] +cards: + - type: vertical-stack + cards: + - type: custom:mushroom-chips-card + chips: + - type: back + - type: horizontal-stack + cards: + - hours_to_show: 24 + graph: line + type: sensor + entity: sensor.deck_temperature + detail: 1 + name: Temperature + - hours_to_show: 24 + graph: line + type: sensor + detail: 1 + entity: sensor.garage_multisensor_humidity + name: Humidity + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Lights + - type: horizontal-stack + cards: + - type: custom:mushroom-light-card + entity: light.deck + name: Deck + tap_action: + action: toggle + use_light_color: false + show_brightness_control: false + layout: vertical + hide_state: true + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + layout: vertical + entity: sensor.deck_light_level + name: Deck + - type: custom:mushroom-entity-card + entity: input_number.deck_light_level_trigger + layout: vertical + name: Trigger + - type: custom:mushroom-entity-card + entity: binary_sensor.deck_naturally_lit + name: Naturally Lit + layout: vertical + secondary_info: none + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Devices + - type: horizontal-stack + cards: + - type: custom:mini-media-player + entity: media_player.deck + artwork: cover-fit + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Sensors + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: group.back_yard_motion + name: Motion + layout: vertical + secondary_info: none + - type: custom:mushroom-entity-card + entity: binary_sensor.back_yard_person_occupancy + name: Person + layout: vertical + secondary_info: none + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: binary_sensor.patio_door_contact + name: Patio Door + layout: vertical + secondary_info: none + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Cameras + - !include /config/lovelace/cameras/view-camera-14.yaml \ No newline at end of file diff --git a/lovelace/phone/blue-room.yaml b/lovelace/phone/blue-room.yaml new file mode 100644 index 0000000..c3ec9eb --- /dev/null +++ b/lovelace/phone/blue-room.yaml @@ -0,0 +1,96 @@ +theme: Mushroom +subview: true +title: Blue Room +path: blue-room +icon: mdi:yoga +badges: [] +cards: + - type: vertical-stack + cards: + - type: custom:mushroom-chips-card + chips: + - type: back + - type: horizontal-stack + cards: + - hours_to_show: 24 + graph: line + type: sensor + entity: sensor.blue_room_multisensor_air_temperature + detail: 1 + name: Temperature + - hours_to_show: 24 + graph: line + type: sensor + detail: 1 + entity: sensor.blue_room_multisensor_humidity + name: Humidity + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Lights + - type: horizontal-stack + cards: + - type: custom:mushroom-light-card + entity: light.blue_room_hue + name: Main + icon: mdi:dome-light + tap_action: + action: toggle + hide_state: true + layout: vertical + - type: custom:mushroom-light-card + entity: light.blue_room_closet + name: Closet + icon: '' + tap_action: + action: toggle + hide_state: true + layout: vertical + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + layout: vertical + entity: sensor.blue_room_multisensor_illuminance + name: Light Level + - type: custom:mushroom-entity-card + entity: input_number.blue_room_light_level_trigger + layout: vertical + name: Trigger + - type: custom:mushroom-entity-card + entity: binary_sensor.blue_room_naturally_lit + name: Naturally Lit + layout: vertical + secondary_info: none + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Sensors + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: binary_sensor.blue_room_door_contact + name: Door + layout: vertical + secondary_info: none + - type: custom:mushroom-entity-card + entity: binary_sensor.furnace_room_door + name: Furnace + layout: vertical + secondary_info: none + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: group.blue_room_motion + name: Motion + layout: vertical + secondary_info: none + - type: custom:mushroom-entity-card + entity: binary_sensor.blue_room_window_contact + name: Window + layout: vertical + secondary_info: none + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Cameras + - !include /config/lovelace/cameras/view-camera-01.yaml \ No newline at end of file diff --git a/lovelace/phone/cctv.yaml b/lovelace/phone/cctv.yaml new file mode 100644 index 0000000..6948ed0 --- /dev/null +++ b/lovelace/phone/cctv.yaml @@ -0,0 +1,36 @@ +theme: Mushroom +title: CCTV +path: cctv +icon: mdi:cctv +type: panel +subview: true +badges: [] +cards: + - type: vertical-stack + cards: + - type: grid + square: false + columns: 1 + cards: + - !include /config/lovelace/cameras/view-camera-08.yaml + + - !include /config/lovelace/cameras/view-camera-12.yaml + + - !include /config/lovelace/cameras/view-camera-13.yaml + + - !include /config/lovelace/cameras/view-camera-03.yaml + + # - !include /config/lovelace/cameras/view-camera-06.yaml + - !include /config/lovelace/stretch-cameras/master-bedroom-card.yaml + # - !include /config/lovelace/cameras/view-camera-07.yaml + + - !include /config/lovelace/cameras/view-camera-01.yaml + + - !include /config/lovelace/cameras/view-camera-04.yaml + + - !include /config/lovelace/cameras/view-camera-18.yaml + + - !include /config/lovelace/cameras/view-camera-14.yaml + + - !include /config/lovelace/cameras/view-camera-19.yaml + diff --git a/lovelace/phone/computer-area.yaml b/lovelace/phone/computer-area.yaml new file mode 100644 index 0000000..bdc090c --- /dev/null +++ b/lovelace/phone/computer-area.yaml @@ -0,0 +1,113 @@ +theme: Mushroom +subview: true +title: Computer Area +path: computer-area +icon: mdi:desktop-classic +badges: [] +cards: + - type: custom:mushroom-chips-card + chips: + - type: back + - type: horizontal-stack + cards: + - hours_to_show: 24 + graph: line + type: sensor + entity: sensor.computer_area_multisensor_air_temperature + detail: 1 + name: Temperature + - hours_to_show: 24 + graph: line + type: sensor + detail: 1 + entity: sensor.computer_area_multisensor_humidity + name: Humidity + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Lights + - type: horizontal-stack + cards: + - type: custom:mushroom-light-card + entity: light.computer_area_hue + name: Main Light + tap_action: + action: toggle + use_light_color: false + show_brightness_control: false + layout: vertical + hide_state: true + - type: custom:mushroom-entity-card + entity: input_select.computer_area_mode + name: Mode + layout: vertical + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + layout: vertical + entity: sensor.computer_area_multisensor_illuminance + name: Computer Area + - type: custom:mushroom-entity-card + entity: input_number.computer_area_light_level_trigger + layout: vertical + name: Trigger + - type: custom:mushroom-entity-card + entity: binary_sensor.computer_area_naturally_lit + name: Naturally Lit + layout: vertical + secondary_info: none + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Devices + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: VR + entity: switch.virtual_reality + icon: mdi:virtual-reality + icon_color: "{{ iif(is_state('switch.virtual_reality','on'),'yellow')}}" + layout: vertical + - type: horizontal-stack + cards: + - type: custom:mini-media-player + entity: media_player.computer_area_hub + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Sensors + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: >- + binary_sensor.computer_area_multisensor_home_security_motion_detection + name: Motion + layout: vertical + secondary_info: none + - type: custom:mushroom-entity-card + entity: binary_sensor.computer_area_person_occupancy + name: Person + layout: vertical + secondary_info: none + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: sensor.steam_76561197960668089 + use_entity_picture: true + layout: vertical + secondary_info: none + - type: custom:mushroom-entity-card + entity: binary_sensor.computer_chair_contact_occupied + name: Chair + layout: vertical + secondary_info: none + - type: custom:mushroom-entity-card + entity: binary_sensor.computer_area_window_contact + name: Window + layout: vertical + secondary_info: none + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Cameras + - !include /config/lovelace/cameras/view-camera-03.yaml diff --git a/lovelace/phone/dining-room.yaml b/lovelace/phone/dining-room.yaml new file mode 100644 index 0000000..b48b386 --- /dev/null +++ b/lovelace/phone/dining-room.yaml @@ -0,0 +1,92 @@ +theme: Mushroom +subview: true +title: Dining Room +path: dining-room +icon: mdi:table-chair +badges: [] +cards: + - type: vertical-stack + cards: + - type: custom:mushroom-chips-card + chips: + - type: back + - type: horizontal-stack + cards: + - hours_to_show: 24 + graph: line + type: sensor + entity: sensor.dining_room_multisensor_air_temperature + detail: 1 + name: Temperature + - hours_to_show: 24 + graph: line + type: sensor + detail: 1 + entity: sensor.dining_room_multisensor_humidity + name: Humidity + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Lights + - type: horizontal-stack + cards: + - type: custom:mushroom-light-card + entity: light.dining_room_switch + name: Main Light + tap_action: + action: toggle + use_light_color: false + show_brightness_control: false + hide_state: true + layout: vertical + - type: custom:mushroom-entity-card + entity: input_select.dining_room_mode + layout: vertical + name: Mode + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + layout: vertical + entity: sensor.dining_room_multisensor_illuminance + name: Light Level + - type: custom:mushroom-entity-card + entity: input_number.dining_room_light_level_trigger + layout: vertical + name: Trigger + - type: custom:mushroom-entity-card + entity: binary_sensor.dining_room_naturally_lit + name: Naturally Lit + layout: vertical + secondary_info: none + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Devices + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Sensors + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: group.dining_room_motion + name: Motion + layout: vertical + secondary_info: none + - type: custom:mushroom-entity-card + entity: binary_sensor.dining_room_person_occupancy + name: Person + layout: vertical + secondary_info: none + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: binary_sensor.patio_door_contact + name: Door + layout: vertical + secondary_info: none + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Cameras + - !include /config/lovelace/cameras/view-camera-13.yaml \ No newline at end of file diff --git a/lovelace/phone/entryway.yaml b/lovelace/phone/entryway.yaml new file mode 100644 index 0000000..d86a3f6 --- /dev/null +++ b/lovelace/phone/entryway.yaml @@ -0,0 +1,93 @@ +theme: Mushroom +subview: true +title: Entryway +path: entryway +icon: mdi:ceiling-light +badges: [] +cards: + - type: vertical-stack + cards: + - type: custom:mushroom-chips-card + chips: + - type: back + - type: horizontal-stack + cards: + - hours_to_show: 24 + graph: line + type: sensor + entity: sensor.entryway_temperature + detail: 1 + name: Temperature + - hours_to_show: 24 + graph: line + type: sensor + detail: 1 + entity: sensor.thermostat_humidity + name: Humidity + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Lights + - type: horizontal-stack + cards: + - type: custom:mushroom-light-card + entity: light.entryway_hue + name: Main Light + tap_action: + action: toggle + use_light_color: false + show_brightness_control: false + hide_state: true + layout: vertical + - type: custom:mushroom-entity-card + entity: input_select.nursery_mode + name: Mode + layout: vertical + - type: horizontal-stack + cards: + - type: custom:mushroom-light-card + entity: light.driveway + name: Driveway + tap_action: + action: toggle + use_light_color: false + show_brightness_control: false + layout: vertical + hide_state: true + - type: custom:mushroom-light-card + entity: light.front_porch_overhead + name: Porch + tap_action: + action: toggle + use_light_color: false + show_brightness_control: false + layout: vertical + hide_state: true + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Sensors + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: group.entryway_motion + name: Motion + layout: vertical + secondary_info: none + - type: custom:mushroom-entity-card + entity: binary_sensor.entryway_window_contact + name: Window + layout: vertical + secondary_info: none + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: binary_sensor.inner_garage_door + name: Garage + layout: vertical + secondary_info: none + - type: custom:mushroom-entity-card + entity: binary_sensor.front_door_contact + name: Porch + layout: vertical + secondary_info: none \ No newline at end of file diff --git a/lovelace/phone/front-room.yaml b/lovelace/phone/front-room.yaml new file mode 100644 index 0000000..b7f5ae4 --- /dev/null +++ b/lovelace/phone/front-room.yaml @@ -0,0 +1,139 @@ +theme: Mushroom +subview: true +title: Front Room +path: front-room +icon: mdi:television +badges: [] +cards: + - type: vertical-stack + cards: + - type: custom:mushroom-chips-card + chips: + - type: back + - type: horizontal-stack + cards: + - hours_to_show: 24 + graph: line + type: sensor + entity: sensor.front_room_thermostat_temperature + detail: 1 + name: Temperature + - hours_to_show: 24 + graph: line + type: sensor + detail: 1 + entity: sensor.front_room_thermostat_humidity + name: Humidity + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Lights + - type: horizontal-stack + cards: + - type: custom:mushroom-light-card + entity: light.front_room_hue + name: Main Light + tap_action: + action: toggle + use_light_color: false + show_brightness_control: false + layout: vertical + hide_state: false + - type: custom:mushroom-entity-card + entity: input_select.front_room_mode + name: Mode + layout: vertical + - type: custom:mushroom-template-card + primary: Naturally Lit + secondary: >- + Trigger: {{states('input_number.front_room_light_level_trigger')|int}} + Lux: {{states('sensor.front_room_light_level')}} + icon: > + {{iif(is_state('binary_sensor.front_room_naturally_lit','on'),'mdi:brightness-auto','mdi:weather-sunny-off')}} + entity: input_number.front_room_light_level_trigger + layout: vertical + icon_color: > + {{iif(is_state('binary_sensor.front_room_naturally_lit','on'),'blue','disabled')}} + tap_action: + action: more-info + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + entity: input_boolean.front_room_light_cycle + primary: Cycle + secondary: '{{states(''input_boolean.front_room_light_cycle'') | title}}' + layout: vertical + tap_action: + action: call-service + service: homeassistant.toggle + service_data: {} + target: + entity_id: input_boolean.front_room_light_cycle + icon: > + {{iif(is_state('binary_sensor.front_room_naturally_lit','on'),'mdi:party-popper','mdi:track-light-off')}} + icon_color: > + {{iif(is_state('binary_sensor.front_room_naturally_lit','on'),'blue','disabled')}} + - type: custom:mushroom-entity-card + entity: input_number.front_room_light_cycle_brightness + name: Brightness + layout: vertical + - type: custom:mushroom-entity-card + entity: input_number.front_room_light_cycle_transition + name: Transition + layout: vertical + - type: custom:mushroom-entity-card + entity: input_boolean.front_room_cycle_same + name: Same + layout: vertical + - type: custom:mushroom-entity-card + entity: input_select.front_room_color_set + name: Color + layout: vertical + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Devices + - type: custom:mini-media-player + entity: media_player.front_room_tv + artwork: cover-fit + - type: custom:mini-media-player + entity: media_player.front_room_hub + artwork: cover-fit + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Sensors + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: group.front_room_motion + name: Motion + layout: vertical + secondary_info: none + - type: custom:mushroom-entity-card + entity: binary_sensor.front_room_person_occupancy + name: Person + layout: vertical + secondary_info: none + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: binary_sensor.pantry_door_contact + name: Pantry + layout: vertical + secondary_info: none + - type: custom:mushroom-entity-card + entity: binary_sensor.front_room_window_contact + name: Window + layout: vertical + secondary_info: none + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Cameras + - !include /config/lovelace/cameras/view-camera-13.yaml + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: TV + - !include /config/lovelace/templates/front-room-roku-card.yaml \ No newline at end of file diff --git a/lovelace/phone/front-yard.yaml b/lovelace/phone/front-yard.yaml new file mode 100644 index 0000000..1ae2b6f --- /dev/null +++ b/lovelace/phone/front-yard.yaml @@ -0,0 +1,129 @@ +theme: Mushroom +subview: true +title: Front Yard +path: front-yard +icon: mdi:grass +badges: [] +cards: + - type: vertical-stack + cards: + - type: custom:mushroom-chips-card + chips: + - type: back + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: '{{states(''sensor.lacrosse_tx141thbv2_0_54_temperature'')}}°F' + secondary: '' + icon: mdi:thermometer + entity: sensor.lacrosse_tx141thbv2_0_54_temperature + icon_color: >- + {% if states('sensor.lacrosse_tx141thbv2_0_54_temperature')|float(default=0) < 30.0 %} + white + {%elif states('sensor.lacrosse_tx141thbv2_0_54_temperature')|float(default=0) < 60.0 %} + blue + {%elif states('sensor.lacrosse_tx141thbv2_0_54_temperature')|float(default=0) < 85.0 %} + green + {%elif states('sensor.lacrosse_tx141thbv2_0_54_temperature')|float(default=0) < 100.0 %} + orange + {%else%} + red + {%endif%} + layout: vertical + - type: custom:mushroom-template-card + primary: '{{states(''sensor.lacrosse_tx141thbv2_0_54_humidity'')}}%' + secondary: '' + icon: mdi:water-percent + entity: sensor.lacrosse_tx141thbv2_0_54_humidity + icon_color: >- + {% if states('sensor.lacrosse_tx141thbv2_0_54_humidity')|float(default=0) < 20.0 %} + white + {%elif states('sensor.lacrosse_tx141thbv2_0_54_humidity')|float(default=0) < 40.0 %} + grey + {%elif states('sensor.lacrosse_tx141thbv2_0_54_humidity')|float(default=0) < 60.0 %} + green + {%elif states('sensor.lacrosse_tx141thbv2_0_54_humidity')|float(default=0) < 80.0 %} + cyan + {%else%} + blue + {%endif%} + layout: vertical + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Lights + - type: horizontal-stack + cards: + - type: custom:mushroom-light-card + entity: light.front_porch_overhead + name: Porch + tap_action: + action: toggle + use_light_color: false + show_brightness_control: false + layout: vertical + hide_state: true + - type: custom:mushroom-light-card + entity: light.driveway + name: Driveway + tap_action: + action: toggle + use_light_color: false + show_brightness_control: false + layout: vertical + hide_state: true + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + layout: vertical + entity: sensor.front_porch_light_level + name: Porch + - type: custom:mushroom-entity-card + entity: input_number.front_porch_light_level_trigger + layout: vertical + name: Trigger + - type: custom:mushroom-entity-card + entity: binary_sensor.front_porch_naturally_lit + name: Naturally Lit + layout: vertical + secondary_info: none + # - type: vertical-stack + # cards: + # - type: custom:mushroom-title-card + # subtitle: Devices + # - type: horizontal-stack + # cards: + # - type: custom:mushroom-entity-card + # entity: switch.outdoor_plug + # name: Plug + # icon: mdi:toggle-switch-variant + # layout: vertical + # secondary_info: none + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Sensors + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: group.front_porch_motion + name: Motion + layout: vertical + secondary_info: none + - type: custom:mushroom-entity-card + entity: binary_sensor.frigate_cam18_person_occupancy + name: Person + layout: vertical + secondary_info: none + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: binary_sensor.entryway_window_contact + name: Window + layout: vertical + secondary_info: none + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Cameras + - !include /config/lovelace/cameras/view-camera-18.yaml \ No newline at end of file diff --git a/lovelace/phone/furnace-room.yaml b/lovelace/phone/furnace-room.yaml new file mode 100644 index 0000000..61e1157 --- /dev/null +++ b/lovelace/phone/furnace-room.yaml @@ -0,0 +1,93 @@ +theme: Mushroom +subview: true +title: Furnace Room +path: furnace-room +icon: mdi:hvac +badges: [] +cards: + - type: vertical-stack + cards: + - type: custom:mushroom-chips-card + chips: + - type: back + - type: horizontal-stack + cards: + - hours_to_show: 24 + graph: line + type: sensor + entity: sensor.furnace_room_thermostat_temperature + detail: 1 + name: Temperature + - hours_to_show: 24 + graph: line + type: sensor + detail: 1 + entity: sensor.furnace_room_thermostat_humidity + name: Humidity + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Lights + - type: horizontal-stack + cards: + - type: custom:mushroom-light-card + entity: light.furnace_room + name: Main + tap_action: + action: toggle + hide_state: true + layout: vertical + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Devices + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: switch.hvac_display_switch + name: HVAC Display + icon: mdi:monitor + layout: vertical + secondary_info: none + tap_action: + action: toggle + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Sensors + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: binary_sensor.heat_pump + secondary_info: none + layout: vertical + - type: custom:mushroom-entity-card + entity: binary_sensor.furnace + layout: vertical + secondary_info: none + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: group.furnace_room_motion + name: Motion + layout: vertical + secondary_info: none + - type: horizontal-stack + cards: + - hours_to_show: 24 + graph: line + type: sensor + entity: sensor.return_temperature + detail: 1 + name: Return + - hours_to_show: 24 + graph: line + type: sensor + entity: sensor.hvac_temperature + detail: 1 + name: Supply + # - type: vertical-stack + # cards: + # - type: custom:mushroom-title-card + # subtitle: Cameras + # - !include /config/lovelace/cameras/view-camera-10.yaml \ No newline at end of file diff --git a/lovelace/phone/garage.yaml b/lovelace/phone/garage.yaml new file mode 100644 index 0000000..0449a80 --- /dev/null +++ b/lovelace/phone/garage.yaml @@ -0,0 +1,115 @@ +theme: Mushroom +subview: true +title: Garage +path: garage +icon: mdi:garage +badges: [] +cards: + - type: vertical-stack + cards: + - type: custom:mushroom-chips-card + chips: + - type: back + - type: horizontal-stack + cards: + - hours_to_show: 24 + graph: line + type: sensor + entity: sensor.garage_multisensor_air_temperature + detail: 1 + name: Temperature + - hours_to_show: 24 + graph: line + type: sensor + detail: 1 + entity: sensor.garage_multisensor_humidity + name: Humidity + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Lights + - type: horizontal-stack + cards: + - type: custom:mushroom-light-card + entity: light.garage_overhead + name: Garage + icon: '' + tap_action: + action: toggle + hide_state: true + layout: vertical + - type: custom:mushroom-light-card + entity: light.driveway + name: Driveway + icon: '' + tap_action: + action: toggle + layout: vertical + hide_state: true + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + layout: vertical + entity: sensor.garage_multisensor_illuminance + name: Garage + - type: custom:mushroom-entity-card + entity: input_number.garage_overhead_light_level_trigger + layout: vertical + name: Trigger + - type: custom:mushroom-entity-card + entity: binary_sensor.garage_naturally_lit + name: Naturally Lit + layout: vertical + secondary_info: none + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Devices + - type: custom:mushroom-cover-card + entity: cover.garage_door + show_buttons_control: false + layout: vertical + hide_state: true + - type: horizontal-stack + cards: + - type: custom:mini-media-player + entity: media_player.garage + artwork: cover-fit + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Sensors + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: group.garage_motion + name: Motion + layout: vertical + secondary_info: none + - type: custom:mushroom-entity-card + entity: binary_sensor.walkway_person_occupancy + name: Walkway + layout: vertical + secondary_info: none + - type: custom:mushroom-entity-card + entity: binary_sensor.workshop_person_occupancy + name: Workshop + layout: vertical + secondary_info: none + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: binary_sensor.inner_garage_door + name: Entryway + layout: vertical + secondary_info: none + - type: custom:mushroom-entity-card + entity: binary_sensor.outer_garage_door + name: Porch + layout: vertical + secondary_info: none + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Cameras + - !include /config/lovelace/cameras/view-camera-04.yaml \ No newline at end of file diff --git a/lovelace/phone/great-room.yaml b/lovelace/phone/great-room.yaml new file mode 100644 index 0000000..79e6279 --- /dev/null +++ b/lovelace/phone/great-room.yaml @@ -0,0 +1,98 @@ +theme: Mushroom +subview: true +title: Great Room +path: great-room +icon: mdi:microsoft-xbox-controller +badges: [] +cards: + - type: vertical-stack + cards: + - type: custom:mushroom-chips-card + chips: + - type: back + - type: horizontal-stack + cards: + - hours_to_show: 24 + graph: line + type: sensor + entity: sensor.great_room_multisensor_air_temperature + detail: 1 + name: Temperature + - hours_to_show: 24 + graph: line + type: sensor + detail: 1 + entity: sensor.great_room_multisensor_humidity + name: Humidity + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Lights + - type: horizontal-stack + cards: + - type: custom:mushroom-light-card + entity: light.great_room_hue + name: Main Light + tap_action: + action: toggle + use_light_color: false + show_brightness_control: false + layout: vertical + hide_state: true + - type: custom:mushroom-entity-card + entity: input_select.great_room_mode + name: Mode + layout: vertical + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + layout: vertical + entity: sensor.great_room_multisensor_illuminance + name: Light Level + - type: custom:mushroom-entity-card + entity: input_number.great_room_light_level_trigger + layout: vertical + name: Trigger + - type: custom:mushroom-entity-card + entity: binary_sensor.great_room_naturally_lit + name: Naturally Lit + layout: vertical + secondary_info: none + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Devices + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: switch.shelly_projector + name: Projector + layout: vertical + hide_icon: false + secondary_info: none + - type: horizontal-stack + cards: + - type: custom:mini-media-player + entity: media_player.great_room + artwork: cover-fit + - type: horizontal-stack + cards: + - type: custom:mini-media-player + entity: media_player.downstairs_roku + artwork: cover-fit + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Sensors + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: group.great_room_motion + name: Motion + layout: vertical + secondary_info: none + - type: custom:mushroom-entity-card + entity: binary_sensor.great_room_person_occupancy + name: Person + layout: vertical + secondary_info: none diff --git a/lovelace/phone/home.yaml b/lovelace/phone/home.yaml new file mode 100644 index 0000000..a125d9f --- /dev/null +++ b/lovelace/phone/home.yaml @@ -0,0 +1,564 @@ +theme: Mushroom +title: Home +icon: mdi:home +path: home +badges: [] +cards: + - type: custom:mushroom-chips-card + chips: + # - type: weather + # entity: weather.openweathermap_hourly + # show_conditions: true + # show_temperature: true + # tap_action: + # action: navigate + # navigation_path: /details-yml/weather + + - type: conditional + conditions: + - entity: switch.opensprinkler_enabled + state: 'on' + - entity: input_boolean.sprinkler_is_winterized + state: 'off' + chip: + type: entity + entity: sensor.sprinkler_current_status + tap_action: + action: navigate + navigation_path: /phone-yaml/plants + + - type: template + entity: group.lights_left_on + icon: > + {% if states('sensor.lights_left_on_count') | int(default=0) > 0 -%} + mdi:lightbulb-on + {% else -%} + mdi:lightbulb + {%- endif %} + tap_action: + action: more-info + content: "{{states('sensor.lights_left_on_count')}}" + + - type: template + entity: group.my_exterior_windows + icon: > + {% if states('sensor.open_windows_count') | int(default=0) > 0 -%} + mdi:window-open-variant + {% else -%} + mdi:window-closed-variant + {%- endif %} + content: "{{states('sensor.open_windows_count')}}" + tap_action: + action: more-info + + - type: template + entity: group.my_exterior_doors + icon: > + {% if states('sensor.open_external_doors_count') | int(default=0) > 0 -%} + {% if is_state('binary_sensor.patio_door_contact','on')-%} + mdi:door-sliding-open + {% elif is_state('binary_sensor.garage_door','on')-%} + mdi:garage-open + {% else -%} + mdi:door-open + {%- endif %} + {% else -%} + mdi:door + {%- endif %} + content: "{{states('sensor.open_external_doors_count')}}" + tap_action: + action: more-info + + - type: conditional + conditions: + - entity: input_boolean.clint_needs_am_meds + state: 'on' + chip: + type: entity + entity: input_boolean.clint_needs_am_meds + content_info: name + name: AM + tap_action: + action: toggle + + - type: conditional + conditions: + - entity: input_boolean.clint_needs_pm_meds + state: 'on' + chip: + type: entity + entity: input_boolean.clint_needs_pm_meds + content_info: name + name: PM + tap_action: + action: toggle + + - type: conditional + conditions: + - entity: sensor.dishwasher + state_not: 'idle' + chip: + type: template + entity: input_boolean.empty_dishwasher + icon: > + {% if is_state('sensor.dishwasher','running')-%} + mdi:dishwasher + {% elif is_state('sensor.dishwasher','pending')-%} + mdi:dishwasher-alert + {%- endif %} + icon_color: > + {% if is_state('sensor.dishwasher','running')-%} + amber + {% elif is_state('sensor.dishwasher','pending')-%} + blue + {% else -%} + red + {%- endif %} + tap_action: + action: navigate + navigation_path: /phone-yaml/dishwasher + + - type: conditional + conditions: + - entity: sensor.washing_machine + state_not: 'idle' + chip: + type: template + entity: input_boolean.swap_laundry + icon: > + {% if is_state('sensor.washing_machine','running')-%} + mdi:washing-machine + {% elif is_state('sensor.washing_machine','pending')-%} + mdi:washing-machine-alert + {%- endif %} + icon_color: > + {% if is_state('sensor.washing_machine','running')-%} + amber + {% elif is_state('sensor.washing_machine','pending')-%} + blue + {% else -%} + red + {%- endif %} + tap_action: + action: navigate + navigation_path: /phone-yaml/washing-machine + + - type: conditional + conditions: + - entity: sensor.tumble_dryer + state_not: 'idle' + chip: + type: template + entity: input_boolean.fold_clothes + icon: > + {% if is_state('sensor.tumble_dryer','running')-%} + mdi:tumble-dryer + {% elif is_state('sensor.tumble_dryer','pending')-%} + mdi:tumble-dryer-alert + {%- endif %} + icon_color: > + {% if is_state('sensor.tumble_dryer','running')-%} + amber + {% elif is_state('sensor.tumble_dryer','pending')-%} + blue + {% else -%} + red + {%- endif %} + tap_action: + action: navigate + navigation_path: /phone-yaml/tumble-dryer + + - type: conditional + conditions: + - entity: alert.garage_door + state: 'on' + chip: + type: entity + entity: alert.garage_door + content_info: name + name: Garage + tap_action: + action: more-info + + alignment: center + # - type: conditional + # conditions: + # - entity: sensor.chickadee_unread + # state_not: '0' + # card: + # type: custom:mushroom-title-card + # title: >- + # Chickadee is waiting to hear back on {{states('sensor.chickadee_unread')}} + # message(s)! + - type: custom:mushroom-template-card + primary: |- + {% set time = now().hour %} + {% if (time >= 18) %} + Good evening, {{user}}! + {% elif (time >=12) %} + Good afternoon, {{user}}! + {% else %} + Good morning, {{user}}! + {%endif%} + secondary: |- + Today should be {{states('sensor.openweathermap_daily_forecast_condition')}}, with a high of {{states('sensor.openweathermap_daily_forecast_temperature')|float(0)|round(0)}} and a low of {{states('sensor.openweathermap_daily_forecast_temperature_low')|float(0)|round(0)}}. + - type: vertical-stack + cards: + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: House + icon: mdi:home + icon_color: blue + layout: vertical + tap_action: + action: navigate + navigation_path: house + - type: custom:mushroom-template-card + icon: mdi:lightbulb + icon_color: yellow + primary: Lights + layout: vertical + tap_action: + action: navigate + navigation_path: lights + - type: custom:mushroom-template-card + icon: mdi:music + icon_color: red + primary: Media + layout: vertical + tap_action: + action: navigate + navigation_path: media + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + icon: mdi:cctv + icon_color: orange + primary: CCTV + layout: vertical + tap_action: + action: navigate + navigation_path: cctv + - type: custom:mushroom-template-card + primary: Lab + icon: mdi:flask + icon_color: purple + layout: vertical + tap_action: + action: navigate + navigation_path: /config/dashboard + - type: custom:mushroom-template-card + primary: Plants + icon: mdi:flower + icon_color: green + layout: vertical + tap_action: + action: navigate + navigation_path: plants + # - type: custom:mushroom-template-card + # primary: Net + # icon: mdi:network + # icon_color: red + # layout: vertical + # tap_action: + # action: navigate + # navigation_path: net + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + title: People + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: input_select.weaver_kids + hide_icon: true + layout: vertical + - type: custom:mushroom-entity-card + entity: input_select.podein_kids + hide_icon: true + layout: vertical + - type: entity-filter + entities: + - input_text.person_clint + - input_text.person_kristy + - input_text.person_emmett + - input_text.person_bridget + - input_text.person_marshall + - input_text.person_tess + - input_text.person_ebin + - input_text.person_guest + state_filter: + - Home + - Off week + card: + type: glance + show_name: false + show_state: true + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + title: Rooms + subtitle: Upstairs + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: Nursery + icon: mdi:bunk-bed + entity: light.nursery_hue + tap_action: + action: navigate + navigation_path: nursery + hold_action: + action: toggle + secondary: |- + {{states('sensor.nursery_multisensor_air_temperature')}}°F + {{states('sensor.nursery_multisensor_humidity')}}% + icon_color: '{{iif(is_state(''light.nursery_hue'',''on''),''yellow'')}}' + multiline_secondary: true + layout: vertical + - type: custom:mushroom-template-card + primary: Master Bedroom + icon: mdi:bed-king + entity: light.master_bedroom_hue + tap_action: + action: navigate + navigation_path: master-bedroom + hold_action: + action: toggle + secondary: >- + {{states('sensor.master_bedroom_multisensor_air_temperature')}}°F + + {{states('sensor.master_bedroom_multisensor_humidity')}}% + icon_color: '{{iif(is_state(''light.master_bedroom_hue'',''on''),''yellow'')}}' + multiline_secondary: true + layout: vertical + - type: custom:mushroom-template-card + primary: Master Bathroom + icon: mdi:shower + entity: light.master_bathroom_hue + tap_action: + action: navigate + navigation_path: master-bathroom + hold_action: + action: toggle + secondary: |- + {{states('sensor.master_bathroom_thermostat_temperature')}}°F + {{states('sensor.master_bathroom_thermostat_humidity')}}% + icon_color: '{{iif(is_state(''light.master_bathroom_hue'',''on''),''yellow'')}}' + multiline_secondary: true + layout: vertical + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: Front Room + icon: mdi:television + entity: light.front_room_hue + tap_action: + action: navigate + navigation_path: front-room + hold_action: + action: toggle + secondary: |- + {{states('sensor.front_room_thermostat_temperature')}}°F + {{states('sensor.front_room_thermostat_humidity')}}% + icon_color: '{{iif(is_state(''light.front_room_hue'',''on''),''yellow'')}}' + multiline_secondary: true + layout: vertical + - type: custom:mushroom-template-card + primary: Kitchen + icon: mdi:fridge + entity: light.kitchen_hue + tap_action: + action: navigate + navigation_path: kitchen + hold_action: + action: toggle + secondary: |- + {{states('sensor.kitchen_multisensor_air_temperature')}}°F + {{states('sensor.kitchen_multisensor_humidity')}}% + icon_color: '{{iif(is_state(''light.kitchen_hue'',''on''),''yellow'')}}' + multiline_secondary: true + layout: vertical + - type: custom:mushroom-template-card + primary: Dining Room + icon: mdi:table-chair + entity: light.dining_room_switch + tap_action: + action: navigate + navigation_path: dining-room + hold_action: + action: toggle + secondary: |- + {{states('sensor.dining_room_multisensor_air_temperature')}}°F + {{states('sensor.dining_room_multisensor_humidity')}}% + icon_color: '{{iif(is_state(''light.dining_room_switch'',''on''),''yellow'')}}' + multiline_secondary: true + layout: vertical + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Ground Level + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: Entryway + icon: mdi:ceiling-light + entity: light.entryway_hue + tap_action: + action: navigate + navigation_path: entryway + hold_action: + action: toggle + secondary: |- + {{states('sensor.entryway_temperature')}}°F + {{states('sensor.thermostat_humidity')}}% + icon_color: '{{iif(is_state(''light.entryway_hue'',''on''),''yellow'')}}' + multiline_secondary: true + layout: vertical + - type: custom:mushroom-template-card + primary: Garage + icon: mdi:garage + entity: light.garage_overhead + tap_action: + action: navigate + navigation_path: garage + hold_action: + action: toggle + secondary: |- + {{states('sensor.garage_multisensor_air_temperature')}}°F + {{states('sensor.garage_multisensor_humidity')}}% + icon_color: '{{iif(is_state(''light.garage_overhead'',''on''),''yellow'')}}' + multiline_secondary: true + layout: vertical + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: Front Yard + icon: mdi:grass + entity: light.front_porch_overhead + tap_action: + action: navigate + navigation_path: front-yard + hold_action: + action: toggle + secondary: |- + {{states('sensor.front_porch_temperature')}}°F + {{states('sensor.garage_multisensor_humidity')}}% + icon_color: '{{iif(is_state(''light.front_porch_overhead'',''on''),''yellow'')}}' + multiline_secondary: true + layout: vertical + - type: custom:mushroom-template-card + primary: Back Yard + icon: mdi:slide + entity: light.deck + tap_action: + action: navigate + navigation_path: back-yard + hold_action: + action: toggle + secondary: |- + {{states('sensor.deck_temperature')}}°F + {{states('sensor.garage_multisensor_humidity')}}% + icon_color: '{{iif(is_state(''light.deck'',''on''),''yellow'')}}' + multiline_secondary: true + layout: vertical + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Downstairs + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: Computer Area + icon: mdi:desktop-classic + entity: light.computer_area_hue + tap_action: + action: navigate + navigation_path: computer-area + hold_action: + action: toggle + secondary: >- + {{states('sensor.computer_area_multisensor_air_temperature')}}°F + + {{states('sensor.computer_area_multisensor_humidity')}}% + icon_color: '{{iif(is_state(''light.computer_area_hue'',''on''),''yellow'')}}' + multiline_secondary: true + layout: vertical + - type: custom:mushroom-template-card + primary: Great Room + icon: mdi:microsoft-xbox-controller + entity: light.great_room_hue + tap_action: + action: navigate + navigation_path: great-room + hold_action: + action: toggle + secondary: |- + {{states('sensor.great_room_multisensor_air_temperature')}}°F + {{states('sensor.great_room_multisensor_humidity')}}% + icon_color: '{{iif(is_state(''light.great_room_hue'',''on''),''yellow'')}}' + multiline_secondary: true + layout: vertical + - type: custom:mushroom-template-card + primary: Utility Room + icon: mdi:washing-machine + entity: light.utility_room_vanity + tap_action: + action: navigate + navigation_path: utility-room + hold_action: + action: toggle + secondary: |- + {{states('sensor.utility_room_thermostat_temperature')}}°F + {{states('sensor.utility_room_thermostat_humidity')}}% + icon_color: '{{iif(is_state(''light.utility_room_vanity'',''on''),''yellow'')}}' + multiline_secondary: true + layout: vertical + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: Blue Room + icon: mdi:yoga + entity: light.blue_room_hue + tap_action: + action: navigate + navigation_path: blue-room + hold_action: + action: toggle + secondary: |- + {{states('sensor.blue_room_multisensor_air_temperature')}}°F + {{states('sensor.blue_room_multisensor_humidity')}}% + icon_color: '{{iif(is_state(''light.blue_room_hue'',''on''),''yellow'')}}' + multiline_secondary: true + layout: vertical + - type: custom:mushroom-template-card + primary: Mancave + icon: mdi:human-male + entity: light.mancave + tap_action: + action: navigate + navigation_path: mancave + hold_action: + action: toggle + secondary: |- + {{states('sensor.mancave_thermostat_temperature')}}°F + {{states('sensor.mancave_thermostat_humidity')}}% + icon_color: '{{iif(is_state(''light.mancave'',''on''),''yellow'')}}' + multiline_secondary: true + layout: vertical + - type: custom:mushroom-template-card + primary: Furnace Room + icon: mdi:hvac + entity: light.furnace_room + tap_action: + action: navigate + navigation_path: furnace-room + hold_action: + action: toggle + secondary: |- + {{states('sensor.furnace_room_thermostat_temperature')}}°F + {{states('sensor.furnace_room_thermostat_humidity')}}% + icon_color: '{{iif(is_state(''light.furnace_room'',''on''),''yellow'')}}' + multiline_secondary: true + layout: vertical \ No newline at end of file diff --git a/lovelace/phone/kitchen.yaml b/lovelace/phone/kitchen.yaml new file mode 100644 index 0000000..33c5e5f --- /dev/null +++ b/lovelace/phone/kitchen.yaml @@ -0,0 +1,134 @@ +theme: Mushroom +subview: true +title: Kitchen +path: kitchen +icon: mdi:fridge +badges: [] +cards: + - type: vertical-stack + cards: + - type: custom:mushroom-chips-card + chips: + - type: back + - type: horizontal-stack + cards: + - hours_to_show: 24 + graph: line + type: sensor + entity: sensor.kitchen_multisensor_air_temperature + detail: 1 + name: Temperature + - hours_to_show: 24 + graph: line + type: sensor + detail: 1 + entity: sensor.kitchen_multisensor_humidity + name: Humidity + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Lights + - type: horizontal-stack + cards: + - type: custom:mushroom-light-card + entity: light.kitchen_hue + name: Main Light + tap_action: + action: toggle + use_light_color: false + show_brightness_control: false + hide_state: true + layout: vertical + - type: custom:mushroom-entity-card + entity: input_select.kitchen_mode + name: Mode + layout: vertical + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + layout: vertical + entity: sensor.bar_light_level + name: Bar + - type: custom:mushroom-entity-card + entity: input_number.kitchen_light_level_trigger + layout: vertical + name: Trigger + - type: custom:mushroom-entity-card + entity: binary_sensor.kitchen_naturally_lit + name: Naturally Lit + layout: vertical + secondary_info: none + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Devices + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: binary_sensor.keurig + layout: vertical + primary_info: none + secondary_info: none + - type: custom:mushroom-entity-card + entity: binary_sensor.microwave + layout: vertical + primary_info: none + secondary_info: none + - type: custom:mushroom-entity-card + entity: binary_sensor.stove + layout: vertical + primary_info: none + secondary_info: none + icon_tap_action: + action: navigate + navigation_path: /phone-yaml/stove + tap_action: + action: navigate + navigation_path: /phone-yaml/stove + - type: custom:mushroom-entity-card + entity: binary_sensor.dishwasher + layout: vertical + primary_info: none + secondary_info: none + icon_tap_action: + action: navigate + navigation_path: /phone-yaml/dishwasher + tap_action: + action: navigate + navigation_path: /phone-yaml/dishwasher + - type: horizontal-stack + cards: + - type: custom:mini-media-player + entity: media_player.kitchen + artwork: cover-fit + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Sensors + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: group.kitchen_motion + name: Motion + layout: vertical + secondary_info: none + - type: custom:mushroom-entity-card + entity: binary_sensor.kitchen_person_occupancy + name: Person + layout: vertical + secondary_info: none + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: sensor.acurite_986_2f_42383_temperature + name: Freezer + layout: vertical + - type: custom:mushroom-entity-card + entity: sensor.acurite_986_1r_48226_temperature + name: Fridge + layout: vertical + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Cameras + - !include /config/lovelace/cameras/view-camera-12.yaml diff --git a/lovelace/phone/lights.yaml b/lovelace/phone/lights.yaml new file mode 100644 index 0000000..116cd45 --- /dev/null +++ b/lovelace/phone/lights.yaml @@ -0,0 +1,247 @@ +theme: Mushroom +title: Lights +path: lights +icon: mdi:lightbulb-group +badges: [] +subview: true +cards: + - type: custom:mushroom-title-card + title: Upstairs Lights + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Nursery + - type: horizontal-stack + cards: + - type: custom:mushroom-light-card + entity: light.nursery_hue + name: Lights + use_light_color: false + tap_action: + action: call-service + service: homeassistant.toggle + service_data: {} + target: + entity_id: input_boolean.nursery_occupied + - type: custom:mushroom-light-card + entity: light.nursery_closet + name: Closet + use_light_color: false + tap_action: + action: toggle + icon: mdi:dome-light + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: input_select.nursery_mode + name: Mode + - type: custom:mushroom-template-card + secondary: '{{states(''input_select.nursery_color_set'')}}' + entity: input_select.nursery_color_set + icon: mdi:party-popper + icon_color: >- + {{ iif(is_state('input_boolean.nursery_light_cycle', 'on'), + 'yellow') }} + tap_action: + action: call-service + service: homeassistant.toggle + service_data: {} + target: + entity_id: input_boolean.nursery_light_cycle + primary: Cycle + hold_action: + action: more-info + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: Emmett + secondary: '{{states(''select.black_bed_wled_preset'')}}' + entity: select.black_bed_wled_preset + icon: mdi:led-strip-variant + icon_color: '{{ iif(is_state(''light.black_bed_wled'', ''on''), ''yellow'') }}' + tap_action: + action: more-info + hold_action: + action: call-service + service: homeassistant.toggle + service_data: {} + target: + entity_id: light.black_bed_wled + double_tap_action: + action: url + url_path: http://192.168.1.181 + - type: custom:mushroom-template-card + primary: Bridget + secondary: '{{states(''select.white_bed_wled_preset'')}}' + entity: select.white_bed_wled_preset + icon: mdi:led-strip-variant + icon_color: '{{ iif(is_state(''light.white_bed_wled'', ''on''), ''yellow'') }}' + tap_action: + action: more-info + hold_action: + action: call-service + service: homeassistant.toggle + service_data: {} + target: + entity_id: light.white_bed_wled + double_tap_action: + action: url + url_path: http://192.168.1.182 + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Front Room + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: Front Room + secondary: '{{states(''input_select.front_room_mode'')}}' + entity: input_boolean.front_room_occupied + icon: mdi:lightbulb + icon_color: '{{ iif(is_state(''light.front_room_hue'', ''on''), ''yellow'') }}' + tap_action: + action: toggle + - type: custom:mushroom-template-card + secondary: '{{states(''input_select.front_room_color_set'')}}' + entity: input_select.front_room_color_set + icon: mdi:lightbulb + icon_color: >- + {{ iif(is_state('input_boolean.front_room_light_cycle', 'on'), + 'yellow') }} + tap_action: + action: call-service + service: homeassistant.toggle + service_data: {} + target: + entity_id: input_boolean.front_room_light_cycle + primary: Cycle + hold_action: + action: more-info + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Dining Room + - type: custom:mushroom-template-card + primary: Dining Room + secondary: '{{states(''input_select.dining_room_mode'')}}' + entity: input_boolean.dining_room_occupied + icon: mdi:lightbulb + icon_color: '{{ iif(is_state(''light.dining_room_switch'', ''on''), ''yellow'') }}' + tap_action: + action: toggle + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Kitchen + - type: custom:mushroom-template-card + primary: Kitchen + secondary: '{{states(''input_select.kitchen_mode'')}}' + entity: input_boolean.kitchen_occupied + icon: mdi:lightbulb + icon_color: '{{ iif(is_state(''light.kitchen_hue'', ''on''), ''yellow'') }}' + tap_action: + action: toggle + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Master Bedroom + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: Ceiling + secondary: '{{states(''input_select.master_bedroom_mode'')}}' + entity: input_boolean.master_bedroom_occupied + icon: mdi:lightbulb + icon_color: >- + {{ iif(is_state('light.master_bedroom_hue', 'on'), 'yellow') + }} + tap_action: + action: toggle + - type: custom:mushroom-template-card + primary: Closet + secondary: '{{states(''light.master_bedroom_closet'')}}' + entity: light.master_bedroom_closet + icon: mdi:lightbulb + icon_color: >- + {{ iif(is_state('light.master_bedroom_closet', 'on'), + 'yellow') }} + tap_action: + action: toggle + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Master Bathroom + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: Master Bathroom + secondary: '{{states(''input_select.master_bathroom_mode'')}}' + entity: input_boolean.master_bathroom_occupied + icon: mdi:lightbulb + icon_color: >- + {{ iif(is_state('light.master_bathroom_hue', 'on'), 'yellow') + }} + tap_action: + action: toggle + - type: custom:mushroom-title-card + title: Downstairs Lights + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Computer Area + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: Mode + secondary: '{{states(''input_select.computer_area_mode'')}}' + entity: input_boolean.computer_area_occupied + icon: mdi:lightbulb + icon_color: '{{ iif(is_state(''light.computer_area_hue'', ''on''), ''yellow'') }}' + tap_action: + action: toggle + - type: custom:mushroom-template-card + secondary: '{{states(''input_select.computer_area_color_set'')}}' + entity: input_select.computer_area_color_set + icon: mdi:lightbulb + icon_color: >- + {{ iif(is_state('input_boolean.computer_area_light_cycle', + 'on'), 'yellow') }} + tap_action: + action: call-service + service: homeassistant.toggle + service_data: {} + target: + entity_id: input_boolean.computer_area_light_cycle + primary: Cycle + hold_action: + action: more-info + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Great Room + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: Mode + secondary: '{{states(''input_select.great_room_mode'')}}' + entity: input_boolean.great_room_occupied + icon: mdi:lightbulb + icon_color: '{{ iif(is_state(''light.great_room_hue'', ''on''), ''yellow'') }}' + tap_action: + action: toggle + - type: custom:mushroom-template-card + secondary: '{{states(''input_select.great_room_color_set'')}}' + entity: input_select.great_room_color_set + icon: mdi:lightbulb + icon_color: >- + {{ iif(is_state('input_boolean.great_room_light_cycle', 'on'), + 'yellow') }} + tap_action: + action: call-service + service: homeassistant.toggle + service_data: {} + target: + entity_id: input_boolean.great_room_light_cycle + primary: Cycle + hold_action: + action: more-info \ No newline at end of file diff --git a/lovelace/phone/lyrics.yaml b/lovelace/phone/lyrics.yaml new file mode 100644 index 0000000..01d2afb --- /dev/null +++ b/lovelace/phone/lyrics.yaml @@ -0,0 +1,31 @@ +theme: Mushroom +title: Lyrics +path: lyrics +icon: mdi:book-music +badges: [] +subview: true +cards: + - type: vertical-stack + cards: + - type: markdown + content: >- + {% if is_state('media_player.ytube_music_player','playing') %}{{ + state_attr("sensor.ytube_music_player_extra", "lyrics") }}{% else + %}Player off{% endif %} + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Details + - type: custom:mushroom-template-card + primary: '{{state_attr("media_player.ytube_music_player","media_artist")}}' + secondary: Artist + - type: custom:mushroom-template-card + primary: '{{state_attr("media_player.ytube_music_player","media_title")}}' + secondary: Track + - type: custom:mushroom-template-card + primary: >- + {{state_attr(state_attr("media_player.ytube_music_player","remote_player_id"),"friendly_name")}} + secondary: Speaker(s) + - type: custom:mushroom-template-card + primary: '{{state_attr("media_player.ytube_music_player", "videoId")}}' + secondary: VideoId \ No newline at end of file diff --git a/lovelace/phone/mancave.yaml b/lovelace/phone/mancave.yaml new file mode 100644 index 0000000..e1d5be9 --- /dev/null +++ b/lovelace/phone/mancave.yaml @@ -0,0 +1,56 @@ +theme: Mushroom +subview: true +title: Mancave +path: mancave +icon: mdi:human-male +badges: [] +cards: + - type: vertical-stack + cards: + - type: custom:mushroom-chips-card + chips: + - type: back + - type: horizontal-stack + cards: + - hours_to_show: 24 + graph: line + type: sensor + entity: sensor.mancave_thermostat_temperature + detail: 1 + name: Temperature + - hours_to_show: 24 + graph: line + type: sensor + detail: 1 + entity: sensor.mancave_thermostat_humidity + name: Humidity + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Lights + - type: horizontal-stack + cards: + - type: custom:mushroom-light-card + entity: light.mancave + name: Main + icon: mdi:dome-light + tap_action: + action: toggle + layout: vertical + hide_state: true + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Sensors + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: binary_sensor.mancave_door_contact + name: Door + secondary_info: none + layout: vertical + - type: custom:mushroom-entity-card + entity: group.mancave_motion + name: Motion + secondary_info: none + layout: vertical \ No newline at end of file diff --git a/lovelace/phone/master-bathroom.yaml b/lovelace/phone/master-bathroom.yaml new file mode 100644 index 0000000..ecdfb8e --- /dev/null +++ b/lovelace/phone/master-bathroom.yaml @@ -0,0 +1,73 @@ +theme: Mushroom +subview: true +title: Master Bathroom +path: master-bathroom +icon: mdi:shower +badges: [] +cards: + - type: vertical-stack + cards: + - type: custom:mushroom-chips-card + chips: + - type: back + - type: horizontal-stack + cards: + - hours_to_show: 24 + graph: line + type: sensor + entity: sensor.master_bathroom_thermostat_temperature + detail: 1 + name: Temperature + - hours_to_show: 24 + graph: line + type: sensor + detail: 1 + entity: sensor.master_bathroom_thermostat_humidity + name: Humidity + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Lights + - type: horizontal-stack + cards: + - type: custom:mushroom-light-card + entity: light.master_bathroom_hue + name: Main Light + tap_action: + action: toggle + use_light_color: false + show_brightness_control: false + hide_state: true + layout: vertical + - type: custom:mushroom-entity-card + entity: input_select.master_bathroom_mode + name: Mode + layout: vertical + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Devices + - type: custom:mushroom-fan-card + entity: fan.bathroom_vent + name: Vent + icon_animation: false + tap_action: + action: toggle + show_percentage_control: false + hide_state: true + - type: horizontal-stack + cards: + - type: custom:mini-media-player + entity: media_player.bathroom_mini + artwork: cover-fit + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Sensors + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: group.master_bathroom_motion + name: Motion + layout: vertical + secondary_info: none \ No newline at end of file diff --git a/lovelace/phone/master-bedroom.yaml b/lovelace/phone/master-bedroom.yaml new file mode 100644 index 0000000..7a89a73 --- /dev/null +++ b/lovelace/phone/master-bedroom.yaml @@ -0,0 +1,144 @@ +theme: Mushroom +subview: true +title: Master Bedroom +path: master-bedroom +icon: mdi:bed-king +badges: [] +cards: + - type: vertical-stack + cards: + - type: custom:mushroom-chips-card + chips: + - type: back + - type: horizontal-stack + cards: + - hours_to_show: 24 + graph: line + type: sensor + entity: sensor.master_bedroom_multisensor_air_temperature + detail: 1 + name: Temperature + - hours_to_show: 24 + graph: line + type: sensor + detail: 1 + entity: sensor.master_bedroom_multisensor_humidity + name: Humidity + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Lights + - type: horizontal-stack + cards: + - type: custom:mushroom-light-card + entity: light.master_bedroom_hue + name: Main Light + tap_action: + action: toggle + use_light_color: false + show_brightness_control: false + hide_state: true + layout: vertical + - type: custom:mushroom-entity-card + entity: input_select.master_bedroom_mode + name: Mode + layout: vertical + - type: horizontal-stack + cards: + - type: custom:mushroom-light-card + entity: light.master_bedroom_closet + name: Closet + icon: mdi:dome-light + hide_state: true + tap_action: + action: toggle + layout: vertical + - type: custom:mushroom-light-card + entity: light.master_bedroom_strips_hue + name: Strips + icon: mdi:led-strip-variant + hide_state: true + tap_action: + action: toggle + layout: vertical + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + layout: vertical + entity: sensor.master_bedroom_multisensor_illuminance + name: Bedroom + - type: custom:mushroom-entity-card + entity: input_number.master_bedroom_light_level_trigger + layout: vertical + name: Trigger + - type: custom:mushroom-entity-card + entity: binary_sensor.master_bedroom_naturally_lit + name: Naturally Lit + layout: vertical + secondary_info: none + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Devices + - type: custom:mushroom-fan-card + entity: fan.master_bedroom + name: Fan + icon_animation: false + tap_action: + action: toggle + show_percentage_control: true + hide_state: true + - type: horizontal-stack + cards: + - type: custom:mini-media-player + entity: media_player.master_bedroom_clock + artwork: cover-fit + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Sensors + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: group.master_bedroom_motion + name: Motion + layout: vertical + secondary_info: none + - type: custom:mushroom-entity-card + entity: binary_sensor.master_bedroom_person_occupancy + name: Person + layout: vertical + secondary_info: none + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + entity: binary_sensor.master_bed_occupied + icon: mdi:bed-king + icon_color: >- + {{ + iif(is_state('binary_sensor.master_bed_occupied','on'),'yellow')}} + primary: Bed + double_tap_action: + action: call-service + service: homeassistant.toggle + service_data: {} + target: + entity_id: switch.master_bed_force_occupancy + hold_action: + action: call-service + service: button.press + service_data: {} + target: + entity_id: button.master_bed_manual_tare + layout: vertical + - type: custom:mushroom-entity-card + entity: binary_sensor.master_bedroom_window_contact + name: Window + layout: vertical + secondary_info: none + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Cameras + - !include /config/lovelace/cameras/view-camera-06.yaml + - !include /config/lovelace/cameras/view-camera-07.yaml \ No newline at end of file diff --git a/lovelace/phone/media.yaml b/lovelace/phone/media.yaml new file mode 100644 index 0000000..e0b3156 --- /dev/null +++ b/lovelace/phone/media.yaml @@ -0,0 +1,292 @@ +theme: Mushroom +title: Media +path: media +icon: mdi:music +badges: [] +subview: true +cards: + # Back button and title + - !include /config/lovelace/templates/front-room-roku-card.yaml + - !include /config/lovelace/templates/great-room-roku-card.yaml + - type: vertical-stack + cards: + # Primary YouTube Music Player card + - type: vertical-stack + cards: + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: input_select.ytube_music_player_playlist + name: Playlist + layout: vertical + hide_icon: true + primary_info: state + secondary_info: name + - type: custom:mushroom-entity-card + entity: input_select.ytube_music_player_speakers + name: Speakers + hide_icon: true + layout: vertical + primary_info: state + secondary_info: name + - type: horizontal-stack + cards: + - type: custom:mushroom-media-player-card + entity: media_player.ytube_music_player + name: YouTube Music Player + volume_controls: + - volume_mute + - volume_set + use_media_info: true + use_media_artwork: true + media_controls: + - on_off + - previous + - next + - play_pause_stop + - type: vertical-stack + cards: + - !include /config/lovelace/templates/card-mini-media-player.yaml + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: input_boolean.ytube_music_player_playcontinuous + layout: vertical + hide_icon: true + name: Continuous? + - type: custom:mushroom-entity-card + entity: input_select.ytube_music_player_playmode + layout: vertical + hide_icon: true + - type: custom:mushroom-entity-card + entity: input_select.ytube_music_player_source + layout: vertical + hide_icon: true + - type: custom:button-card + styles: + card: + - height: 64px + state: + - operator: template + value: > + [[[ return states['media_player.ytube_music_player'].attributes.likeStatus + == "LIKE"]]] + icon: mdi:thumb-up + - operator: template + value: > + [[[ return states['media_player.ytube_music_player'].attributes.likeStatus + == "INDIFFERENT"]]] + icon: mdi:thumb-up-outline + - operator: default + icon: mdi:power-off + value: false + tap_action: + action: call-service + service: ytube_music_player.call_method + service_data: + entity_id: media_player.ytube_music_player + command: rate_track + parameters: thumb_toggle_up_middle + + # Lyrics + - type: conditional + conditions: + - entity: media_player.ytube_music_player + state: playing + card: + type: vertical-stack + cards: + - type: custom:mushroom-entity-card + entity: input_boolean.ytube_music_player_show_lyrics + name: Lyrics + secondary_info: none + tap_action: + action: toggle + - type: conditional + conditions: + - entity: input_boolean.ytube_music_player_show_lyrics + state: "on" + card: + type: markdown + content: >- + {% if is_state('media_player.ytube_music_player','playing') %}{{ + state_attr("sensor.ytube_music_player_extra", "lyrics") }}{% else + %}Player off{% endif %} + + # Speaker list + - type: conditional + conditions: + - entity: media_player.ytube_music_player + state: playing + card: + type: vertical-stack + cards: + - type: custom:mushroom-entity-card + entity: input_boolean.ytube_music_player_show_speakers + name: Speakers + secondary_info: none + tap_action: + action: toggle + - type: conditional + conditions: + - entity: input_boolean.ytube_music_player_show_speakers + state: "on" + card: + type: vertical-stack + cards: + - type: conditional + conditions: + - entity: media_player.front_room_hub + state_not: "off" + card: + entity: media_player.front_room_hub + name: Front Room Hub + type: custom:mini-media-player + group: true + hide_when_off: true + - type: conditional + conditions: + - entity: media_player.kitchen + state_not: "off" + card: + entity: media_player.kitchen + name: Kitchen + type: custom:mini-media-player + group: true + hide_when_off: true + - type: conditional + conditions: + - entity: media_player.bathroom_mini + state_not: "off" + card: + entity: media_player.bathroom_mini + name: Bathroom Mini + type: custom:mini-media-player + group: true + - type: conditional + conditions: + - entity: media_player.nursery_hub + state_not: "off" + card: + entity: media_player.nursery_hub + name: Nursery Hub + type: custom:mini-media-player + group: true + - type: conditional + conditions: + - entity: media_player.master_bedroom_clock + state_not: "off" + card: + entity: media_player.master_bedroom_clock + name: Master Bedroom Clock + type: custom:mini-media-player + group: true + - type: conditional + conditions: + - entity: media_player.computer_area_hub + state_not: "off" + card: + entity: media_player.computer_area_hub + name: Computer Area Clock + type: custom:mini-media-player + group: true + - type: conditional + conditions: + - entity: media_player.garage + state_not: "off" + card: + entity: media_player.garage + name: Garage + type: custom:mini-media-player + group: true + - type: conditional + conditions: + - entity: media_player.deck + state_not: "off" + card: + entity: media_player.deck + name: Deck + type: custom:mini-media-player + group: true + - type: conditional + conditions: + - entity: media_player.great_room + state_not: "off" + card: + entity: media_player.great_room + name: Great Room + type: custom:mini-media-player + group: true + + # Playlist + - type: conditional + conditions: + - entity: media_player.ytube_music_player + state: playing + card: + type: vertical-stack + cards: + - type: custom:mushroom-entity-card + entity: input_boolean.ytube_music_player_show_playlist + name: Playlist + secondary_info: none + tap_action: + action: toggle + - type: conditional + conditions: + - entity: input_boolean.ytube_music_player_show_playlist + state: "on" + card: + type: markdown + content: >- + {% if is_state('media_player.ytube_music_player','playing') %} + {% for i in + range(0,state_attr("sensor.ytube_music_player_extra","total_tracks")) + %} + {% if i == state_attr("media_player.ytube_music_player","current_track") %}Track {{i+1}} of {{state_attr('sensor.ytube_music_player_extra','total_tracks')}}{% endif %} + {%- endfor %}{% else %}Player off{% endif %} + + {% if is_state('media_player.ytube_music_player','playing') %}{% + for i in range(0,state_attr("sensor.ytube_music_player_extra", + "total_tracks")) %} + {% if i == state_attr("media_player.ytube_music_player", + "current_track") %}**{% endif %}\[{{i+1}}] {{ + state_attr("sensor.ytube_music_player_extra", "tracks")[i] }}{% + if i == state_attr("media_player.ytube_music_player", + "current_track") %}**{% endif %} {%- endfor %}{% else %}Player + off{% endif %} + + # Song Details + - type: conditional + conditions: + - entity: media_player.ytube_music_player + state: playing + card: + type: vertical-stack + cards: + - type: custom:mushroom-entity-card + entity: input_boolean.ytube_music_player_show_details + name: Details + secondary_info: none + tap_action: + action: toggle + - type: conditional + conditions: + - entity: input_boolean.ytube_music_player_show_details + state: "on" + card: + type: vertical-stack + cards: + - type: custom:mushroom-template-card + primary: '{{state_attr("media_player.ytube_music_player","media_artist")}}' + secondary: Artist + - type: custom:mushroom-template-card + primary: '{{state_attr("media_player.ytube_music_player","media_title")}}' + secondary: Track + - type: custom:mushroom-template-card + primary: >- + {{state_attr(state_attr("media_player.ytube_music_player","remote_player_id"),"friendly_name")}} + secondary: Speaker(s) + - type: custom:mushroom-template-card + primary: '{{state_attr("media_player.ytube_music_player", "videoId")}}' + secondary: VideoId diff --git a/lovelace/phone/nursery.yaml b/lovelace/phone/nursery.yaml new file mode 100644 index 0000000..5c384ac --- /dev/null +++ b/lovelace/phone/nursery.yaml @@ -0,0 +1,287 @@ +theme: Mushroom +subview: true +title: Nursery +path: nursery +icon: mdi:bunk-bed +badges: [] +cards: + # Header and HVAC + - type: vertical-stack + cards: + - type: custom:mushroom-chips-card + chips: + - type: back + - type: horizontal-stack + cards: + - hours_to_show: 24 + graph: line + type: sensor + entity: sensor.nursery_multisensor_air_temperature + detail: 1 + name: Temperature + - hours_to_show: 24 + graph: line + type: sensor + detail: 1 + entity: sensor.nursery_multisensor_humidity + name: Humidity + + # Lights + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Lights + - type: horizontal-stack + cards: + - type: custom:mushroom-light-card + entity: light.nursery_hue + name: Main Light + tap_action: + action: toggle + use_light_color: false + show_brightness_control: false + layout: vertical + hide_state: true + - type: custom:mushroom-entity-card + entity: input_select.nursery_mode + name: Mode + layout: vertical + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + primary: Emmett + secondary: '{{states(''select.black_bed_wled_preset'')}}' + entity: select.black_bed_wled_preset + icon: mdi:led-strip-variant + icon_color: '{{ iif(is_state(''light.black_bed_wled'', ''on''), ''yellow'') }}' + tap_action: + action: more-info + hold_action: + action: call-service + service: homeassistant.toggle + service_data: {} + target: + entity_id: light.black_bed_wled + double_tap_action: + action: url + url_path: http://192.168.1.181 + layout: vertical + - type: custom:mushroom-template-card + primary: Bridget + secondary: '{{states(''select.white_bed_wled_preset'')}}' + entity: select.white_bed_wled_preset + icon: mdi:led-strip-variant + icon_color: '{{ iif(is_state(''light.white_bed_wled'', ''on''), ''yellow'') }}' + tap_action: + action: more-info + hold_action: + action: call-service + service: homeassistant.toggle + service_data: {} + target: + entity_id: light.white_bed_wled + double_tap_action: + action: url + url_path: http://192.168.1.182 + layout: vertical + - type: horizontal-stack + cards: + - type: custom:mushroom-light-card + entity: light.nursery_closet + name: Closet + icon: mdi:dome-light + tap_action: + action: toggle + layout: vertical + hide_state: true + - type: custom:mushroom-light-card + entity: light.nursery_tagreader_led + name: Tagreader + icon: mdi:led-variant-outline + tap_action: + action: toggle + layout: vertical + hide_state: true + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + layout: vertical + entity: sensor.nursery_multisensor_illuminance + name: Nursery + - type: custom:mushroom-entity-card + entity: input_number.nursery_light_level_trigger + layout: vertical + name: Trigger + - type: custom:mushroom-entity-card + entity: binary_sensor.nursery_naturally_lit + name: Naturally Lit + layout: vertical + secondary_info: none + + # Devices + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Devices + - type: custom:mushroom-fan-card + entity: fan.nursery + name: Fan + icon_animation: false + tap_action: + action: toggle + show_percentage_control: true + hide_state: true + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: script.all_kids_youtube_music + name: All Songs + tap_action: + action: call-service + service: script.all_kids_youtube_music + service_data: {} + target: {} + primary_info: name + layout: vertical + secondary_info: none + icon: mdi:music + - type: custom:mushroom-entity-card + entity: script.goodnight_kids_youtube_music + name: Goodnight Songs + tap_action: + action: call-service + service: script.goodnight_kids_youtube_music + service_data: {} + target: {} + primary_info: name + layout: vertical + secondary_info: none + icon: mdi:sleep + - type: custom:mushroom-entity-card + entity: media_player.ytube_music_player + name: 'Off' + tap_action: + action: call-service + service: homeassistant.turn_off + service_data: {} + target: + entity_id: media_player.ytube_music_player + primary_info: name + layout: vertical + secondary_info: none + icon: mdi:speaker-off + - type: horizontal-stack + cards: + - type: custom:mini-media-player + entity: media_player.nursery_hub + artwork: cover-fit + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Sensors + - type: horizontal-stack + cards: + - type: custom:mushroom-template-card + entity: binary_sensor.black_bed_occupied + icon: mdi:bed + icon_color: >- + {% if(is_state('binary_sensor.black_bed_occupied','on')) %} + yellow + {% elif(is_state('binary_sensor.black_bed_hx711_error','on')) %} + red + {% endif %} + primary: Black Bed + double_tap_action: + action: call-service + service: homeassistant.toggle + service_data: {} + target: + entity_id: switch.black_bed_force_occupancy + hold_action: + action: call-service + service: button.press + service_data: {} + target: + entity_id: button.black_bed_manual_tare + layout: vertical + - type: custom:mushroom-template-card + entity: binary_sensor.white_bed_occupied + icon: mdi:bed + icon_color: >- + {% if(is_state('binary_sensor.white_bed_occupied','on')) %} + yellow + {% elif(is_state('binary_sensor.white_bed_hx711_error','on')) %} + red + {% endif %} + primary: White Bed + double_tap_action: + action: call-service + service: homeassistant.toggle + service_data: {} + target: + entity_id: switch.white_bed_force_occupancy + hold_action: + action: call-service + service: button.press + service_data: {} + target: + entity_id: button.white_bed_manual_tare + layout: vertical + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: group.nursery_motion + name: Motion + secondary_info: none + layout: vertical + - type: custom:mushroom-entity-card + entity: binary_sensor.nursery_person_occupancy + name: Person + secondary_info: none + layout: vertical + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: binary_sensor.nursery_door + name: Door + secondary_info: none + layout: vertical + - type: custom:mushroom-entity-card + entity: binary_sensor.nursery_closet_door_contact + name: Closet + secondary_info: none + layout: vertical + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: binary_sensor.nursery_window_contact + name: Window + secondary_info: none + layout: vertical + + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Bedtime + - type: horizontal-stack + cards: + - show_name: true + show_icon: true + type: button + tap_action: + action: toggle + entity: input_button.nursery_bedtime + name: Bedtime + - show_name: true + show_icon: true + type: button + tap_action: + action: toggle + entity: input_button.nursery_awake + name: Awake + + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Cameras + - !include /config/lovelace/cameras/view-camera-08.yaml \ No newline at end of file diff --git a/lovelace/phone/plants.yaml b/lovelace/phone/plants.yaml new file mode 100644 index 0000000..45bb8b4 --- /dev/null +++ b/lovelace/phone/plants.yaml @@ -0,0 +1,210 @@ +theme: Mushroom +title: Plants +path: plants +icon: mdi:flower +type: sidebar +badges: [] +subview: true +cards: + - type: vertical-stack + cards: + - type: grid + square: false + columns: 3 + cards: #colors = ['#4dab6d', "#72c66e", "#c1da64", "#f6ee54", "#fabd57", "#f36d54", "#ee4d55"] + - type: gauge + entity: sensor.sprinkler_total_rain_fallen_plus_expected + needle: true + min: 5 + max: 25 + segments: + - from: 5 + color: '#4dab6d' + - from: 10 + color: '#c1da64' + - from: 15 + color: '#fabd57' + - from: 20.6 + color: '#ee4d55' + name: Recent Precipitation + - type: gauge + entity: input_number.sprinkler_maximum_temperature_measured + needle: true + min: 61 + max: 97 + segments: + - from: 61 + color: var(--info-color) + - from: 70 + color: '#4dab6d' + - from: 79 + color: '#c1da64' + - from: 88 + color: '#fabd57' + name: Recent High Temp + - type: gauge + entity: sensor.sprinkler_days_since_last_watering + needle: true + min: 0 + max: 4 + segments: + - from: 0 + color: '#ee4d55' + - from: 1 + color: '#fabd57' + - from: 2 + color: '#c1da64' + - from: 3 + color: '#4dab6d' + name: Expected Days Between Watering + - !include /config/lovelace/plant-cards/plant_sensor_cea4.yaml + - !include /config/lovelace/plant-cards/plant_sensor_3eae.yaml + - !include /config/lovelace/plant-cards/plant_sensor_3eb0.yaml + - !include /config/lovelace/plant-cards/fineoffset_wh51_0ce593.yaml + - !include /config/lovelace/plant-cards/fineoffset_wh51_00f935.yaml + - !include /config/lovelace/plant-cards/fineoffset_wh51_0d1e11.yaml + + - type: vertical-stack + view_layout: + position: sidebar + cards: + - type: custom:mushroom-entity-card + entity: input_boolean.lovelace_show_sprinklers + name: Sprinklers + secondary_info: none + tap_action: + action: toggle + - type: conditional + conditions: + - entity: input_boolean.lovelace_show_sprinklers + state: "on" + card: + type: vertical-stack + cards: + - type: custom:mushroom-entity-card + entity: input_boolean.sprinkler_is_winterized + name: Winterized + secondary_info: none + tap_action: + action: toggle + - type: glance + show_name: true + show_icon: true + show_state: true + entities: + - entity: binary_sensor.sprinkler_should_winterize + - entity: binary_sensor.sprinkler_should_dewinterize + - type: markdown + content: >- + + {%- if is_state('switch.opensprinkler_enabled','on') %} + {%- if states('input_number.sprinkler_maximum_temperature_measured') | + int(default=0) > states('input_number.sprinkler_temp_above_low_run') | + int(default=0) %} + {%- if states('input_number.sprinkler_maximum_temperature_measured') | int(default=0) > states('input_number.sprinkler_temp_above_medium_run') | int(default=0) %} + {%- if states('input_number.sprinkler_maximum_temperature_measured') | int(default=0) > states('input_number.sprinkler_temp_above_high_run') | int(default=0) %} + It got hot enough to run the sprinklers at the high water level ({{ states('input_number.sprinkler_temp_above_high_run') | int(default=0) }}°F) + {%- if states('sensor.sprinkler_total_expected_precipitation') | float(default=0) < 20.1 -%} + There isn't enough recent and/or expected rain to cancel watering the lawn + {%- else %} + Too much precipitation has fallen or is expected + {% endif %} + {%- if states('sensor.sprinkler_days_since_last_watering') | float(default=0) > 1.0 -%} + It got so hot that the lawn will be watered again, even though it was just watered + {%- else %} + This should never show up + {% endif %} + {%- else %} + It got hot enough to run the sprinklers at the medium water level ({{ states('input_number.sprinkler_temp_above_medium_run') | int(default=0) }}°F) + {%- if states('sensor.sprinkler_total_expected_precipitation') | float(default=0) < 15.1 %} + There isn't enough recent and/or expected rain to cancel watering the lawn + {%- else %} + Too much precipitation has fallen or is expected + {% endif %} + {%- if states('sensor.sprinkler_days_since_last_watering') | float(default=0) > 2.0 %} + The lawn wasn't watered this morning + {%- else %} + The lawn was just watered and it didn't get warm enough to water it again + {% endif %} + {% endif %} + {%- else %} + It got hot enough to run the sprinklers at the low water level ({{ states('input_number.sprinkler_temp_above_low_run') | int(default=0) }}°F) + {%- if states('sensor.sprinkler_total_expected_precipitation') | float(default=0) < 10.1 %} + There isn't enough recent and/or expected rain to cancel watering the lawn + {%- else %} + Too much precipitation has fallen or is expected + {% endif %} + {%- if states('sensor.sprinkler_days_since_last_watering') | float(default=0) > 3.0 %} + The lawn wasn't watered this morning + {%- else %} + The lawn was just watered and it didn't get warm enough to water it again + {% endif %} + {% endif %} + {%- else %} + It did not get hot enough to run the sprinklers at the low water level ({{ states('input_number.sprinkler_temp_above_low_run') | int(default=0) }}°F) + {% endif %} + {%- else %} + The sprinkler is turned off + {% endif %} + + # - type: custom:opensprinkler-card + # device: 0b73d5253a9215f27de1b87258e49bc2 + # name: Sprinklers + - type: glance + show_name: true + show_icon: true + show_state: true + entities: + - entity: switch.front_yard_station + tap_action: + action: toggle + - entity: input_number.front_yard_station_minutes + - entity: switch.east_side_station + tap_action: + action: toggle + - entity: input_number.east_side_station_minutes + - entity: switch.back_yard_station + tap_action: + action: toggle + - entity: input_number.back_yard_station_minutes + - entity: switch.west_side_station + tap_action: + action: toggle + - entity: input_number.west_side_station_minutes + - entity: binary_sensor.5_minute_test_program_running + name: 5 Minute Test + tap_action: + action: call-service + service: opensprinkler.run + data: + entity_id: switch.5_minute_test_program_enabled + - entity: binary_sensor.full_run_program_running + name: Full Run + tap_action: + action: call-service + service: opensprinkler.run + data: + entity_id: switch.full_run_program_enabled + - entity: switch.morning_program_enabled + name: Morning Schedule + tap_action: + action: toggle + - entity: switch.evening_program_enabled + name: Evening Schedule + tap_action: + action: toggle + - entity: binary_sensor.front_yard_fun_program_running + name: Front Yard Fun + tap_action: + action: call-service + service: opensprinkler.run + data: + entity_id: switch.front_yard_fun_program_enabled + - entity: binary_sensor.back_yard_fun_program_running + name: Back Yard Fun + tap_action: + action: call-service + service: opensprinkler.run + data: + entity_id: switch.back_yard_fun_program_enabled + columns: 2 diff --git a/lovelace/phone/utility-room.yaml b/lovelace/phone/utility-room.yaml new file mode 100644 index 0000000..6832893 --- /dev/null +++ b/lovelace/phone/utility-room.yaml @@ -0,0 +1,102 @@ +theme: Mushroom +subview: true +title: Utility Room +path: utility-room +icon: mdi:washing-machine +badges: [] +cards: + - type: vertical-stack + cards: + - type: custom:mushroom-chips-card + chips: + - type: back + - type: horizontal-stack + cards: + - hours_to_show: 24 + graph: line + type: sensor + entity: sensor.utility_room_thermostat_temperature + detail: 1 + name: Temperature + - hours_to_show: 24 + graph: line + type: sensor + detail: 1 + entity: sensor.utility_room_thermostat_humidity + name: Humidity + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Lights + - type: horizontal-stack + cards: + - type: custom:mushroom-light-card + entity: light.utility_room_vanity + name: Vanity + tap_action: + action: toggle + use_light_color: false + show_brightness_control: false + layout: vertical + hide_state: true + - type: custom:mushroom-entity-card + entity: input_select.nursery_mode + name: Mode + layout: vertical + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Devices + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: binary_sensor.washing_machine + layout: vertical + primary_info: none + secondary_info: none + icon_tap_action: + action: navigate + navigation_path: /phone-yaml/washing-machine + tap_action: + action: navigate + navigation_path: /phone-yaml/washing-machine + - type: custom:mushroom-entity-card + entity: binary_sensor.tumble_dryer + layout: vertical + primary_info: none + secondary_info: none + icon_tap_action: + action: navigate + navigation_path: /phone-yaml/tumble-dryer + tap_action: + action: navigate + navigation_path: /phone-yaml/tumble-dryer + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: fan.utility_room_vent + tap_action: + action: toggle + primary_info: none + secondary_info: none + - type: horizontal-stack + cards: + - type: custom:mini-media-player + entity: media_player.utility_room_clock + artwork: cover-fit + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + subtitle: Sensors + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: binary_sensor.utility_room_door_contact + name: Door + layout: vertical + secondary_info: none + - type: custom:mushroom-entity-card + entity: group.utility_room_motion + name: Motion + layout: vertical + secondary_info: none \ No newline at end of file diff --git a/lovelace/plant-cards/fineoffset_wh51_00f935.yaml b/lovelace/plant-cards/fineoffset_wh51_00f935.yaml new file mode 100644 index 0000000..fe5b137 --- /dev/null +++ b/lovelace/plant-cards/fineoffset_wh51_00f935.yaml @@ -0,0 +1,4 @@ +type: vertical-stack +cards: + - type: plant-status + entity: plant.fineoffset_wh51_00f935 diff --git a/lovelace/plant-cards/fineoffset_wh51_0ce593.yaml b/lovelace/plant-cards/fineoffset_wh51_0ce593.yaml new file mode 100644 index 0000000..c9c97cb --- /dev/null +++ b/lovelace/plant-cards/fineoffset_wh51_0ce593.yaml @@ -0,0 +1,4 @@ +type: vertical-stack +cards: + - type: plant-status + entity: plant.fineoffset_wh51_0ce593 diff --git a/lovelace/plant-cards/fineoffset_wh51_0d1e11.yaml b/lovelace/plant-cards/fineoffset_wh51_0d1e11.yaml new file mode 100644 index 0000000..74c227b --- /dev/null +++ b/lovelace/plant-cards/fineoffset_wh51_0d1e11.yaml @@ -0,0 +1,4 @@ +type: vertical-stack +cards: + - type: plant-status + entity: plant.fineoffset_wh51_0d1e11 diff --git a/lovelace/plant-cards/plant_sensor_3eae.yaml b/lovelace/plant-cards/plant_sensor_3eae.yaml new file mode 100644 index 0000000..c584abe --- /dev/null +++ b/lovelace/plant-cards/plant_sensor_3eae.yaml @@ -0,0 +1,4 @@ +type: vertical-stack +cards: + - type: plant-status + entity: plant.plant_sensor_3eae diff --git a/lovelace/plant-cards/plant_sensor_3eb0.yaml b/lovelace/plant-cards/plant_sensor_3eb0.yaml new file mode 100644 index 0000000..e427553 --- /dev/null +++ b/lovelace/plant-cards/plant_sensor_3eb0.yaml @@ -0,0 +1,4 @@ +type: vertical-stack +cards: + - type: plant-status + entity: plant.plant_sensor_3eb0 diff --git a/lovelace/plant-cards/plant_sensor_cea4.yaml b/lovelace/plant-cards/plant_sensor_cea4.yaml new file mode 100644 index 0000000..aa3a8db --- /dev/null +++ b/lovelace/plant-cards/plant_sensor_cea4.yaml @@ -0,0 +1,4 @@ +type: vertical-stack +cards: + - type: plant-status + entity: plant.plant_sensor_cea4 diff --git a/lovelace/raw-cameras/back-yard-card.yaml b/lovelace/raw-cameras/back-yard-card.yaml new file mode 100644 index 0000000..4d5bd77 --- /dev/null +++ b/lovelace/raw-cameras/back-yard-card.yaml @@ -0,0 +1,27 @@ +type: custom:frigate-card +cameras: + - camera_entity: camera.frigate_cam14 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam14_sub +live: + auto_mute: all + preload: true + draggable: false + show_image_during_load: true + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none +menu: + buttons: + frigate: + enabled: false +performance: + profile: low diff --git a/lovelace/raw-cameras/back-yard-view.yaml b/lovelace/raw-cameras/back-yard-view.yaml new file mode 100644 index 0000000..4360c03 --- /dev/null +++ b/lovelace/raw-cameras/back-yard-view.yaml @@ -0,0 +1,8 @@ +title: Back Yard Camera +path: back-yard-camera +icon: mdi:slide +type: panel +cards: + - type: horizontal-stack + cards: + - !include /config/lovelace/raw-cameras/back-yard-card.yaml diff --git a/lovelace/raw-cameras/blue-room-card.yaml b/lovelace/raw-cameras/blue-room-card.yaml new file mode 100644 index 0000000..30dfac6 --- /dev/null +++ b/lovelace/raw-cameras/blue-room-card.yaml @@ -0,0 +1,27 @@ +type: custom:frigate-card +cameras: + - camera_entity: camera.frigate_cam01 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam01_sub +live: + auto_mute: all + preload: true + draggable: false + show_image_during_load: true + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none +menu: + buttons: + frigate: + enabled: false +performance: + profile: low \ No newline at end of file diff --git a/lovelace/raw-cameras/blue-room-view.yaml b/lovelace/raw-cameras/blue-room-view.yaml new file mode 100644 index 0000000..2d63057 --- /dev/null +++ b/lovelace/raw-cameras/blue-room-view.yaml @@ -0,0 +1,6 @@ +title: Blue Room Camera +path: blue-room-camera +icon: mdi:yoga +type: panel +cards: + - !include /config/lovelace/raw-cameras/blue-room-card.yaml \ No newline at end of file diff --git a/lovelace/raw-cameras/computer-area-card.yaml b/lovelace/raw-cameras/computer-area-card.yaml new file mode 100644 index 0000000..8d5dd73 --- /dev/null +++ b/lovelace/raw-cameras/computer-area-card.yaml @@ -0,0 +1,27 @@ +type: custom:frigate-card +cameras: + - camera_entity: camera.frigate_cam03 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam03_sub +live: + auto_mute: all + preload: true + draggable: false + show_image_during_load: true + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none +menu: + buttons: + frigate: + enabled: false +performance: + profile: low \ No newline at end of file diff --git a/lovelace/raw-cameras/computer-area-view.yaml b/lovelace/raw-cameras/computer-area-view.yaml new file mode 100644 index 0000000..0aaa363 --- /dev/null +++ b/lovelace/raw-cameras/computer-area-view.yaml @@ -0,0 +1,6 @@ +title: Computer Area Camera +path: computer-area-camera +icon: mdi:desktop-classic +type: panel +cards: + - !include /config/lovelace/raw-cameras/computer-area-card.yaml \ No newline at end of file diff --git a/lovelace/raw-cameras/dual-camera-view.yaml b/lovelace/raw-cameras/dual-camera-view.yaml new file mode 100644 index 0000000..a99675f --- /dev/null +++ b/lovelace/raw-cameras/dual-camera-view.yaml @@ -0,0 +1,10 @@ +title: Dual Cameras +path: dual-cameras +icon: mdi:home-switch +#panel: true +type: panel +cards: + - type: horizontal-stack + cards: + - !include /config/lovelace/templates/indoor-camera-cycler.yaml + - !include /config/lovelace/templates/outdoor-camera-cycler.yaml \ No newline at end of file diff --git a/lovelace/raw-cameras/front-porch-card.yaml b/lovelace/raw-cameras/front-porch-card.yaml new file mode 100644 index 0000000..366cf1e --- /dev/null +++ b/lovelace/raw-cameras/front-porch-card.yaml @@ -0,0 +1,27 @@ +type: custom:frigate-card +cameras: + - camera_entity: camera.frigate_cam19 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam19_sub +live: + auto_mute: all + preload: true + draggable: false + show_image_during_load: true + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none +menu: + buttons: + frigate: + enabled: false +performance: + profile: low \ No newline at end of file diff --git a/lovelace/raw-cameras/front-porch-view.yaml b/lovelace/raw-cameras/front-porch-view.yaml new file mode 100644 index 0000000..1ae4cb0 --- /dev/null +++ b/lovelace/raw-cameras/front-porch-view.yaml @@ -0,0 +1,6 @@ +title: Front Porch Camera +path: front-porch-camera +icon: mdi:doorbell +type: panel +cards: + - !include /config/lovelace/raw-cameras/front-porch-card.yaml \ No newline at end of file diff --git a/lovelace/raw-cameras/front-room-card.yaml b/lovelace/raw-cameras/front-room-card.yaml new file mode 100644 index 0000000..1baed71 --- /dev/null +++ b/lovelace/raw-cameras/front-room-card.yaml @@ -0,0 +1,27 @@ +type: custom:frigate-card +cameras: + - camera_entity: camera.frigate_cam13 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam13_sub +live: + auto_mute: all + preload: true + draggable: false + show_image_during_load: true + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none +menu: + buttons: + frigate: + enabled: false +performance: + profile: low \ No newline at end of file diff --git a/lovelace/raw-cameras/front-room-view.yaml b/lovelace/raw-cameras/front-room-view.yaml new file mode 100644 index 0000000..c46cd4c --- /dev/null +++ b/lovelace/raw-cameras/front-room-view.yaml @@ -0,0 +1,6 @@ +title: Front Room Camera +path: front-room-camera +icon: mdi:television +type: panel +cards: + - !include /config/lovelace/raw-cameras/front-room-card.yaml \ No newline at end of file diff --git a/lovelace/raw-cameras/front-yard-card.yaml b/lovelace/raw-cameras/front-yard-card.yaml new file mode 100644 index 0000000..6950e05 --- /dev/null +++ b/lovelace/raw-cameras/front-yard-card.yaml @@ -0,0 +1,27 @@ +type: custom:frigate-card +cameras: + - camera_entity: camera.frigate_cam18 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam18_sub +live: + auto_mute: all + preload: true + draggable: false + show_image_during_load: true + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none +menu: + buttons: + frigate: + enabled: false +performance: + profile: low \ No newline at end of file diff --git a/lovelace/raw-cameras/front-yard-view.yaml b/lovelace/raw-cameras/front-yard-view.yaml new file mode 100644 index 0000000..234e90f --- /dev/null +++ b/lovelace/raw-cameras/front-yard-view.yaml @@ -0,0 +1,6 @@ +title: Front Yard Camera +path: front-yard-camera +icon: mdi:grass +type: panel +cards: + - !include /config/lovelace/raw-cameras/front-yard-card.yaml \ No newline at end of file diff --git a/lovelace/raw-cameras/garage-card.yaml b/lovelace/raw-cameras/garage-card.yaml new file mode 100644 index 0000000..da42bf8 --- /dev/null +++ b/lovelace/raw-cameras/garage-card.yaml @@ -0,0 +1,27 @@ +type: custom:frigate-card +cameras: + - camera_entity: camera.frigate_cam04 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam04_sub +live: + auto_mute: all + preload: true + draggable: false + show_image_during_load: true + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none +menu: + buttons: + frigate: + enabled: false +performance: + profile: low \ No newline at end of file diff --git a/lovelace/raw-cameras/garage-view.yaml b/lovelace/raw-cameras/garage-view.yaml new file mode 100644 index 0000000..c1f7de4 --- /dev/null +++ b/lovelace/raw-cameras/garage-view.yaml @@ -0,0 +1,6 @@ +title: Garage Camera +path: garage-camera +icon: mdi:garage +type: panel +cards: + - !include /config/lovelace/raw-cameras/garage-card.yaml \ No newline at end of file diff --git a/lovelace/raw-cameras/indoor-camera-card.yaml b/lovelace/raw-cameras/indoor-camera-card.yaml new file mode 100644 index 0000000..a73eee7 --- /dev/null +++ b/lovelace/raw-cameras/indoor-camera-card.yaml @@ -0,0 +1,106 @@ +type: custom:frigate-card +cameras: + - camera_entity: camera.frigate_cam08 + title: Nursery + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam08_sub + triggers: + occupancy: false + motion: false + entities: + - group.nursery_motion + - binary_sensor.emmetts_bed + - binary_sensor.bridgets_bed + - camera_entity: camera.frigate_cam13 + title: Front Room + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam12_sub + triggers: + occupancy: false + motion: false + entities: + - group.front_room_motion + - group.dining_room_motion + - camera_entity: camera.frigate_cam12 + title: Kitchen + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam13_sub + triggers: + occupancy: false + motion: false + entities: + - group.kitchen_motion + - camera_entity: camera.frigate_cam03 + title: Computer Desk + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam03_sub + triggers: + occupancy: false + motion: false + entities: + - binary_sensor.computer_chair_contact_occupied + - group.computer_area_motion + - group.great_room_motion + - camera_entity: camera.frigate_cam06 + title: MBR Left + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam06_sub + triggers: + occupancy: false + motion: false + entities: + - group.master_bedroom_motion + - camera_entity: camera.frigate_cam07 + title: MBR Right + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam07_sub + triggers: + occupancy: false + motion: false + entities: + - binary_sensor.master_bed_occupied +timeline: + media: snapshots + show_recordings: false +view: + scan: + enabled: true + untrigger_seconds: 10 + untrigger_reset: true + default: live + camera_select: live + dark_mode: 'on' + update_cycle_camera: true + update_seconds: 10 +menu: + buttons: + clips: + enabled: false + timeline: + enabled: false + snapshots: + enabled: false + media_player: + enabled: false +live: + lazy_load: true + preload: true + lazy_unload: hidden diff --git a/lovelace/raw-cameras/indoor-camera-view.yaml b/lovelace/raw-cameras/indoor-camera-view.yaml new file mode 100644 index 0000000..6d178d6 --- /dev/null +++ b/lovelace/raw-cameras/indoor-camera-view.yaml @@ -0,0 +1,6 @@ +title: Indoor Cameras +path: indoor-cameras +icon: mdi:home +panel: true +cards: + - !include /config/lovelace/raw-cameras/indoor-camera-card.yaml \ No newline at end of file diff --git a/lovelace/raw-cameras/kitchen-card.yaml b/lovelace/raw-cameras/kitchen-card.yaml new file mode 100644 index 0000000..eff12a9 --- /dev/null +++ b/lovelace/raw-cameras/kitchen-card.yaml @@ -0,0 +1,27 @@ +type: custom:frigate-card +cameras: + - camera_entity: camera.frigate_cam12 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam12_sub +live: + auto_mute: all + preload: true + draggable: false + show_image_during_load: true + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none +menu: + buttons: + frigate: + enabled: false +performance: + profile: low \ No newline at end of file diff --git a/lovelace/raw-cameras/kitchen-view.yaml b/lovelace/raw-cameras/kitchen-view.yaml new file mode 100644 index 0000000..2c42e47 --- /dev/null +++ b/lovelace/raw-cameras/kitchen-view.yaml @@ -0,0 +1,6 @@ +title: Kitchen Camera +path: kitchen-camera +icon: mdi:fridge +type: panel +cards: + - !include /config/lovelace/raw-cameras/kitchen-card.yaml \ No newline at end of file diff --git a/lovelace/raw-cameras/master-bedroom-card.yaml b/lovelace/raw-cameras/master-bedroom-card.yaml new file mode 100644 index 0000000..f827a49 --- /dev/null +++ b/lovelace/raw-cameras/master-bedroom-card.yaml @@ -0,0 +1,14 @@ +type: vertical-stack +cards: + - type: conditional + conditions: + - entity: input_select.master_bedroom_camera + state: Left + card: + !include /config/lovelace/raw-cameras/master-bedroom-left-card.yaml + - type: conditional + conditions: + - entity: input_select.master_bedroom_camera + state: Right + card: + !include /config/lovelace/raw-cameras/master-bedroom-right-card.yaml diff --git a/lovelace/raw-cameras/master-bedroom-left-card.yaml b/lovelace/raw-cameras/master-bedroom-left-card.yaml new file mode 100644 index 0000000..d7fd6ba --- /dev/null +++ b/lovelace/raw-cameras/master-bedroom-left-card.yaml @@ -0,0 +1,27 @@ +type: custom:frigate-card +cameras: + - camera_entity: camera.frigate_cam06 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam06_sub +live: + auto_mute: all + preload: true + draggable: false + show_image_during_load: true + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none +menu: + buttons: + frigate: + enabled: false +performance: + profile: low \ No newline at end of file diff --git a/lovelace/raw-cameras/master-bedroom-left-view.yaml b/lovelace/raw-cameras/master-bedroom-left-view.yaml new file mode 100644 index 0000000..780aaae --- /dev/null +++ b/lovelace/raw-cameras/master-bedroom-left-view.yaml @@ -0,0 +1,6 @@ +title: Master Bedroom Left +path: mbr-camera-left +icon: mdi:bed-king +panel: true +cards: + - !include /config/lovelace/raw-cameras/master-bedroom-left-card.yaml \ No newline at end of file diff --git a/lovelace/raw-cameras/master-bedroom-right-card.yaml b/lovelace/raw-cameras/master-bedroom-right-card.yaml new file mode 100644 index 0000000..836e796 --- /dev/null +++ b/lovelace/raw-cameras/master-bedroom-right-card.yaml @@ -0,0 +1,27 @@ +type: custom:frigate-card +cameras: + - camera_entity: camera.frigate_cam07 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam07_sub +live: + auto_mute: all + preload: true + draggable: false + show_image_during_load: true + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none +menu: + buttons: + frigate: + enabled: false +performance: + profile: low \ No newline at end of file diff --git a/lovelace/raw-cameras/master-bedroom-right-view.yaml b/lovelace/raw-cameras/master-bedroom-right-view.yaml new file mode 100644 index 0000000..07d5456 --- /dev/null +++ b/lovelace/raw-cameras/master-bedroom-right-view.yaml @@ -0,0 +1,6 @@ +title: Master Bedroom Right +path: mbr-camera-right +icon: mdi:bed-king +panel: true +cards: + - !include /config/lovelace/raw-cameras/master-bedroom-right-card.yaml \ No newline at end of file diff --git a/lovelace/raw-cameras/master-bedroom-view.yaml b/lovelace/raw-cameras/master-bedroom-view.yaml new file mode 100644 index 0000000..b28b0be --- /dev/null +++ b/lovelace/raw-cameras/master-bedroom-view.yaml @@ -0,0 +1,6 @@ +title: Master Bedroom Cameras +path: mbr-camera +icon: mdi:bed-king +panel: true +cards: + - !include /config/lovelace/raw-cameras/master-bedroom-card.yaml \ No newline at end of file diff --git a/lovelace/raw-cameras/nursery-card.yaml b/lovelace/raw-cameras/nursery-card.yaml new file mode 100644 index 0000000..d039774 --- /dev/null +++ b/lovelace/raw-cameras/nursery-card.yaml @@ -0,0 +1,27 @@ +type: custom:frigate-card +cameras: + - camera_entity: camera.frigate_cam08 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam08_sub +live: + auto_mute: all + preload: true + draggable: false + show_image_during_load: true + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none +menu: + buttons: + frigate: + enabled: false +performance: + profile: low \ No newline at end of file diff --git a/lovelace/raw-cameras/nursery-view.yaml b/lovelace/raw-cameras/nursery-view.yaml new file mode 100644 index 0000000..da231c7 --- /dev/null +++ b/lovelace/raw-cameras/nursery-view.yaml @@ -0,0 +1,6 @@ +title: Nursery Camera +path: nursery-camera +icon: mdi:bunk-bed +type: panel +cards: + - !include /config/lovelace/raw-cameras/nursery-card.yaml \ No newline at end of file diff --git a/lovelace/raw-cameras/outdoor-camera-card.yaml b/lovelace/raw-cameras/outdoor-camera-card.yaml new file mode 100644 index 0000000..54e1448 --- /dev/null +++ b/lovelace/raw-cameras/outdoor-camera-card.yaml @@ -0,0 +1,57 @@ +type: custom:frigate-card +cameras: + - camera_entity: camera.frigate_cam04 + title: Garage + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam04_sub + - camera_entity: camera.frigate_cam14 + title: Back Yard + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam14_sub + - camera_entity: camera.frigate_cam18 + title: Front Yard + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam18_sub + - camera_entity: camera.frigate_cam19 + title: Front Porch + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam19_sub +timeline: + media: snapshots + show_recordings: false +view: + scan: + enabled: true + untrigger_seconds: 10 + untrigger_reset: true + default: live + camera_select: live + dark_mode: "on" + update_cycle_camera: true + update_seconds: 10 +menu: + buttons: + clips: + enabled: false + timeline: + enabled: false + snapshots: + enabled: false + media_player: + enabled: false +live: + lazy_load: false + preload: true + lazy_unload: hidden diff --git a/lovelace/raw-cameras/outdoor-camera-view.yaml b/lovelace/raw-cameras/outdoor-camera-view.yaml new file mode 100644 index 0000000..11d28a3 --- /dev/null +++ b/lovelace/raw-cameras/outdoor-camera-view.yaml @@ -0,0 +1,6 @@ +title: Outdoor Cameras +path: outdoor-cameras +icon: mdi:home-outline +panel: true +cards: + - !include /config/lovelace/raw-cameras/outdoor-camera-card.yaml \ No newline at end of file diff --git a/lovelace/resources.yaml b/lovelace/resources.yaml new file mode 100644 index 0000000..5ecd669 --- /dev/null +++ b/lovelace/resources.yaml @@ -0,0 +1,81 @@ +# trying to figure out where the webrtc bullshit should go... +- url: /webrtc/webrtc-camera.js + type: module + +# - url: /hacsfiles/webrtc/webrtc-camera.js +# type: module + +# - type: module +# url: /hacsfiles/webrtc-custom/webrtc-camera.js + +# - type: module +# url: /hacsfiles/webrtc-community/webrtc-camera.js + +# - type: module +# url: /hacsfiles/webrtc-full-community/webrtc-camera.js + +# https://github.com/kalkih/mini-media-player +- url: /hacsfiles/mini-media-player/mini-media-player-bundle.js + type: module + + # https://github.com/pkozul/lovelace-floorplan +- type: module + url: /local/floorplan/floorplan-card.js + +- url: /hacsfiles/power-flow-card-plus/power-flow-card-plus.js + type: module + +# - type: module +# url: /local/webrtc/webrtc-camera.js + + # HACS mini graph card +- url: /hacsfiles/mini-graph-card/mini-graph-card-bundle.js + type: module + +- url: /hacsfiles/DailyGrapher/dailygrapher-card.js + type: module + +- url: /hacsfiles/roku-card/roku-card.js + type: module + + # Button Card +- url: /hacsfiles/button-card/button-card.js + type: module + +- url: /hacsfiles/battery-state-card/battery-state-card.js + type: module + +- url: /hacsfiles/lovelace-horizon-card/lovelace-horizon-card.js + type: module + +- url: /hacsfiles/frigate-hass-card/frigate-hass-card.js + type: module + +- url: /hacsfiles/Home-Assistant-Mail-And-Packages-Custom-Card/Home-Assistant-Mail-And-Packages-Custom-Card.js + type: module + +- url: /hacsfiles/lovelace-grocy-chores-card/grocy-chores-card.js + type: module + +- url: /hacsfiles/lovelace-mushroom/mushroom.js + type: module + +- url: /hacsfiles/surveillance-card/surveillance-card.js + type: module + +- url: /hacsfiles/lovelace-hourly-weather/hourly-weather.js + type: module + +- url: /hacsfiles/opensprinkler-card/opensprinkler-card.js + type: module + +- url: /hacsfiles/clock-weather-card/clock-weather-card.js + type: module + +- url: /hacsfiles/thermal_comfort_icons/thermal_comfort_icons.js + type: module + +- url: /hacsfiles/weather-card/weather-card.js + type: module + +- url: /local \ No newline at end of file diff --git a/lovelace/room_cards/back_yard.yaml b/lovelace/room_cards/back_yard.yaml new file mode 100644 index 0000000..9fcf613 --- /dev/null +++ b/lovelace/room_cards/back_yard.yaml @@ -0,0 +1,132 @@ +type: picture-elements +#background image +image: /local/bg500x225.png +elements: + - type: custom:mushroom-template-card + primary: "{{ states('group.back_yard_plants') }}" + entity: group.back_yard_plants + tap_action: + action: navigate + navigation_path: /phone-yaml/plants + style: + left: 50% + top: 88% + text-transform: capitalize + + - type: custom:mushroom-template-card + primary: "{{ states('input_select.camera14_preset') }}" + entity: input_select.camera14_preset + tap_action: + action: more-info + style: + font-style: italic + left: 75% + top: 88% + text-transform: capitalize + + - type: state-label + entity: sensor.deck_temperature + style: + left: 15% + top: 35% + font-size: 180% + - type: state-label + entity: sensor.lacrosse_tx141thbv2_0_54_temperature + style: + left: 85% + top: 35% + font-size: 180% + text-align: right + #Card title + - type: custom:mushroom-title-card + title: "Back Yard" + style: + font-size: 130% + left: -2% + top: -10% + transform: initial + #top left icon spot + - type: state-icon + entity: binary_sensor.back_yard_occupied + style: + left: 76% + top: 9% + # - type: state-icon + # entity: group.back_yard_motion + # style: + # left: 76% + # top: 9% + - type: state-icon + entity: binary_sensor.patio_door_contact + style: + left: 84% + top: 9% + #top icon spot #4 + - type: state-icon + entity: input_boolean.back_yard_occupied + style: + left: 92% + top: 9% + tap_action: + action: toggle + hold_action: + action: more-info + + - type: "custom:button-card" + color: auto + entity: light.deck + show_name: false + show_entity_picture: true + style: + left: 25% + top: 65% + styles: + card: + - border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 30px + - height: 30px + tap_action: + action: toggle + hold_action: + action: more-info + + - type: state-icon + entity: group.back_yard_plants + style: + left: 50% + top: + 65% + #- width: 50px + #- height: 50px + tap_action: + action: navigate + navigation_path: /phone-yaml/plants + + - type: "custom:button-card" + color: auto + entity: camera.frigate_cam14 + show_name: false + show_entity_picture: true + style: + left: 75% + top: 65% + styles: + card: + #- border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 45px + - height: 45px + tap_action: + action: navigate + navigation_path: /ai-yml/ai-cam14 + +# 12,31,50,69,88 +# 14,38,62,86 +# 25,50,75 +# 33,66 +# 50 \ No newline at end of file diff --git a/lovelace/room_cards/blue_room.yaml b/lovelace/room_cards/blue_room.yaml new file mode 100644 index 0000000..6b2ac5a --- /dev/null +++ b/lovelace/room_cards/blue_room.yaml @@ -0,0 +1,151 @@ +type: picture-elements +#background image +image: /local/bg500x225.png +elements: + - type: custom:mushroom-template-card + primary: "{{states('input_select.blue_room_mode')}}" + entity: input_select.blue_room_mode + tap_action: + action: more-info + style: + font-style: italic + left: 25% + top: 88% + - type: custom:mushroom-template-card + primary: Closet + entity: light.blue_room_closet + tap_action: + action: toggle + style: + left: 75% + top: 88% + + - type: state-label + entity: sensor.blue_room_multisensor_air_temperature + style: + left: 15% + top: 35% + font-size: 180% + - type: state-label + entity: sensor.blue_room_multisensor_humidity + style: + left: 85% + top: 35% + font-size: 180% + text-align: right + #Card title + - type: custom:mushroom-title-card + title: "Blue Room" + style: + font-size: 130% + left: -2% + top: -10% + transform: initial + #top left icon spot + - type: state-icon + entity: binary_sensor.blue_room_occupied + style: + left: 60% + top: 9% + # - type: state-icon + # entity: group.blue_room_motion + # style: + # left: 60% + # top: 9% + - type: state-icon + entity: binary_sensor.blue_room_window_contact + style: + left: 68% + top: 9% + #top icon spot #1 + - type: state-icon + entity: binary_sensor.furnace_room_door + style: + left: 76% + top: 9% + tap_action: + action: more-info + - type: state-icon + entity: binary_sensor.blue_room_door_contact + style: + left: 84% + top: 9% + #top icon spot #4 + - type: state-icon + entity: input_boolean.blue_room_occupied + style: + left: 92% + top: 9% + tap_action: + action: toggle + hold_action: + action: more-info + + - type: "custom:button-card" + color: auto + entity: light.blue_room_hue + show_name: false + show_entity_picture: true + style: + left: 25% + top: 65% + styles: + card: + - border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 30px + - height: 30px + tap_action: + action: toggle + hold_action: + action: more-info + + #button #3 + - type: "custom:button-card" + color: auto + entity: camera.frigate_cam01 + show_name: false + show_entity_picture: true + style: + left: 50% + top: 65% + styles: + card: + #- border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 45px + - height: 45px + tap_action: + action: navigate + navigation_path: /ai-yml/ai-cam01 + + - type: "custom:button-card" + color: auto + entity: light.blue_room_closet + show_name: false + show_entity_picture: true + style: + left: 75% + top: 65% + styles: + card: + - border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 30px + - height: 30px + tap_action: + action: toggle + hold_action: + action: more-info + +# 12,31,50,69,88 +# 14,38,62,86 +# 25,50,75 +# 33,66 +# 50 \ No newline at end of file diff --git a/lovelace/room_cards/computer_area.yaml b/lovelace/room_cards/computer_area.yaml new file mode 100644 index 0000000..34d9b8f --- /dev/null +++ b/lovelace/room_cards/computer_area.yaml @@ -0,0 +1,206 @@ +type: picture-elements +#background image for header +image: /local/bg500x225.png +elements: + - type: custom:mushroom-template-card + primary: "{{states('input_select.computer_area_mode')}}" + entity: input_select.computer_area_mode + tap_action: + action: more-info + style: + font-style: italic + left: 12% + top: 88% + + - type: custom:mushroom-template-card + primary: "{{ states('sensor.steam1_game') }}" + entity: sensor.steam_76561197960668089 + tap_action: + action: more-info + style: + font-style: italic + left: 50% + top: 88% + text-transform: capitalize + + - type: state-label + entity: sensor.computer_area_multisensor_air_temperature + style: + left: 15% + top: 35% + font-size: 180% + - type: state-label + entity: sensor.computer_area_multisensor_humidity + style: + left: 85% + top: 35% + font-size: 180% + text-align: right + #Card title + - type: custom:mushroom-title-card + title: "Computer Area" + style: + font-size: 130% + left: -2% + top: -10% + transform: initial + #top left icon spot #1 + - type: state-icon + entity: binary_sensor.computer_area_occupied + style: + left: 68% + top: 9% + #top left icon #2 spot + # - type: state-icon + # entity: group.computer_area_motion + # style: + # left: 68% + # top: 9% + #top icon spot #1 + - type: state-icon + entity: binary_sensor.computer_area_window_contact + style: + left: 76% + top: 9% + #top icon spot #3 + - type: state-icon + entity: switch.computer_area_light_cycle + style: + left: 84% + top: 9% + tap_action: + action: toggle + hold_action: + action: more-info + #top icon spot #4 + - type: state-icon + entity: input_boolean.computer_area_occupied + style: + left: 92% + top: 9% + tap_action: + action: toggle + hold_action: + action: more-info + + #button #1 + - type: "custom:button-card" + color: auto + entity: light.computer_area_hue + show_name: false + show_entity_picture: true + style: + left: 12% + top: 65% + styles: + card: + - border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 30px + - height: 30px + tap_action: + action: toggle + hold_action: + action: more-info + #button #2 + - type: "custom:button-card" + color: auto + entity: switch.virtual_reality + show_name: false + show_entity_picture: true + style: + left: 31% + top: 65% + styles: + card: + #- border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 45px + - height: 45px + tap_action: + action: toggle + # - type: 'custom:button-card' + # color: auto + # entity: sensor.steam_76561197960668089 + # show_name: false + # show_entity_picture: true + # style: + # left: 38% + # top: 65% + # styles: + # card: + # #- border-radius: 50px + # - width: 50px + # - height: 50px + # icon: + # - width: 45px + # - height: 45px + # tap_action: + # action: more-info + #button #2 + - type: "custom:button-card" + color: auto + entity: sensor.steam_76561197960668089 + show_name: false + show_entity_picture: true + style: + left: 50% + top: 65% + styles: + card: + #- border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 45px + - height: 45px + + + - type: "custom:button-card" + color: auto + entity: camera.frigate_cam03 + show_name: false + show_entity_picture: true + style: + left: 69% + top: 65% + styles: + card: + #- border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 45px + - height: 45px + tap_action: + action: navigate + navigation_path: /ai-yml/ai-cam03 + + - type: "custom:button-card" + color: auto + entity: media_player.computer_area_hub + show_name: false + show_entity_picture: true + style: + left: 88% + top: 65% + styles: + card: + #- border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 45px + - height: 45px + tap_action: + action: more-info + +# 12,31,50,69,88 +# 14,38,62,86 +# 25,50,75 +# 33,66 +# 50 \ No newline at end of file diff --git a/lovelace/room_cards/dining_room.yaml b/lovelace/room_cards/dining_room.yaml new file mode 100644 index 0000000..6c41fa2 --- /dev/null +++ b/lovelace/room_cards/dining_room.yaml @@ -0,0 +1,191 @@ +type: picture-elements +#background image +image: /local/bg500x225.png +elements: + - type: custom:mushroom-template-card + primary: "{{states('input_select.dining_room_mode')}}" + entity: input_select.dining_room_mode + tap_action: + action: more-info + style: + font-style: italic + left: 25% + top: 88% + + - type: custom:mushroom-template-card + primary: '{{states(''sensor.dining_room_multisensor_air_temperature'')}} °F' + secondary: '' + icon: '' + entity: sensor.dining_room_multisensor_air_temperature + tap_action: + action: more-info + style: + left: 15% + top: 35% + font-size: 60px + # - type: state-label + # entity: sensor.dining_room_multisensor_air_temperature + # style: + # left: 15% + # top: 35% + # font-size: 180% + - type: custom:mushroom-template-card + primary: '{{states(''sensor.dining_room_multisensor_humidity'')}}%' + secondary: '' + icon: '' + entity: sensor.dining_room_multisensor_humidity + tap_action: + action: more-info + style: + left: 85% + top: 35% + font-size: 180% + text-align: right + # - type: state-label + # entity: sensor.dining_room_multisensor_humidity + # style: + # left: 85% + # top: 35% + # font-size: 180% + # text-align: right + #Card title + - type: custom:mushroom-title-card + title: "Dining Room" + style: + font-size: 130% + left: -2% + top: -10% + transform: initial + #top left icon spot + - type: state-icon + entity: binary_sensor.dining_room_occupied + style: + left: 68% + top: 9% + #top left icon #2 spot + # - type: state-icon + # entity: group.dining_room_motion + # style: + # left: 68% + # top: 9% + #top icon spot #3 + - type: state-icon + entity: switch.shelly_sliding_glass_door + style: + left: 76% + top: 9% + tap_action: + action: toggle + #top icon spot #3 + - type: state-icon + entity: binary_sensor.patio_door_contact + style: + left: 84% + top: 9% + tap_action: + action: more-info + #top icon spot #4 + - type: state-icon + entity: input_boolean.dining_room_occupied + style: + left: 92% + top: 9% + tap_action: + action: toggle + hold_action: + action: more-info + + #button #2 + - type: "custom:button-card" + color: auto + entity: light.dining_room_switch + show_name: false + style: + left: 25% + top: 65% + styles: + card: + - border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 30px + - height: 30px + tap_action: + action: toggle + hold_action: + action: more-info + + # - type: conditional + # conditions: + # - entity: binary_sensor.patio_door_contact + # state: 'off' + # elements: + # type: 'custom:button-card' + # color: auto + # entity: switch.shelly_sliding_glass_door + # show_name: false + # style: + # left: 50% + # top: 65% + # styles: + # card: + # - border-radius: 50px + # - width: 50px + # - height: 50px + # icon: + # - width: 30px + # - height: 30px + # tap_action: + # action: toggle + # hold_action: + # action: more-info + + # - type: conditional + # conditions: + # - entity: binary_sensor.patio_door_contact + # state: 'on' + # elements: + # type: 'custom:button-card' + # color: auto + # entity: binary_sensor.patio_door_contact + # show_name: false + # style: + # left: 50% + # top: 65% + # styles: + # card: + # - border-radius: 50px + # - width: 50px + # - height: 50px + # icon: + # - width: 30px + # - height: 30px + # tap_action: + # action: more-info + + #button #4 + - type: "custom:button-card" + color: auto + entity: camera.frigate_cam13 + show_name: false + show_entity_picture: true + style: + left: 75% + top: 65% + styles: + card: + - width: 50px + - height: 50px + icon: + - width: 45px + - height: 45px + tap_action: + action: navigate + navigation_path: /ai-yml/ai-cam13 + +# 12,31,50,69,88 +# 14,38,62,86 +# 25,50,75 +# 33,66 +# 50 \ No newline at end of file diff --git a/lovelace/room_cards/entryway.yaml b/lovelace/room_cards/entryway.yaml new file mode 100644 index 0000000..4df20da --- /dev/null +++ b/lovelace/room_cards/entryway.yaml @@ -0,0 +1,180 @@ +type: picture-elements +#background image +image: /local/bg500x225.png +elements: + - type: custom:mushroom-template-card + primary: '{{states(''input_select.entryway_mode'')}}' + entity: input_select.entryway_mode + tap_action: + action: more-info + style: + font-style: italic + left: 14% + top: 88% + - type: custom:mushroom-template-card + primary: Driveway + entity: light.driveway + tap_action: + action: toggle + style: + left: 62% + top: 88% + - type: custom:mushroom-template-card + primary: Porch + entity: light.front_porch_overhead + tap_action: + action: toggle + style: + left: 86% + top: 88% + + - type: state-label + entity: sensor.entryway_temperature + style: + left: 15% + top: 35% + font-size: 180% + - type: state-label + entity: sensor.thermostat_humidity + style: + left: 85% + top: 35% + font-size: 180% + text-align: right + #Card title + - type: custom:mushroom-title-card + title: 'Entryway' + style: + font-size: 130% + left: -2% + top: -10% + transform: initial + #top left icon spot + - type: state-icon + entity: binary_sensor.entryway_occupied + style: + left: 60% + top: 9% + + - type: state-icon + entity: binary_sensor.entryway_window_contact + style: + left: 68% + top: 9% + + #top icon spot #2 + - type: state-icon + entity: binary_sensor.inner_garage_door + style: + left: 76% + top: 9% + #top icon spot #3 + - type: state-icon + entity: binary_sensor.front_door_contact + style: + left: 84% + top: 9% + tap_action: + action: more-info + #top icon spot #4 + - type: state-icon + entity: input_boolean.entryway_occupied + style: + left: 92% + top: 9% + tap_action: + action: toggle + hold_action: + action: more-info + + #button #4 + - type: 'custom:button-card' + color: auto + entity: light.entryway_hue + show_name: false + style: + left: 14% + top: 65% + styles: + card: + - border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 30px + - height: 30px + tap_action: + action: toggle + hold_action: + action: more-info + + #button #2 + - type: "custom:button-card" + color: auto + entity: camera.frigate_cam19 + show_name: false + show_entity_picture: true + style: + left: 38% + top: 65% + styles: + card: + #- border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 45px + - height: 45px + tap_action: + action: navigate + navigation_path: /ai-yml/ai-cam19 + + + + #button #4 + - type: 'custom:button-card' + color: auto + entity: light.driveway + show_name: false + style: + left: 62% + top: 65% + styles: + card: + - border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 30px + - height: 30px + tap_action: + action: toggle + hold_action: + action: more-info + + #button #4 + - type: 'custom:button-card' + color: auto + entity: light.front_porch_overhead + show_name: false + style: + left: 86% + top: 65% + styles: + card: + - border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 30px + - height: 30px + tap_action: + action: toggle + hold_action: + action: more-info + +# 12,31,50,69,88 +# 14,38,62,86 +# 25,50,75 +# 33,66 +# 50 \ No newline at end of file diff --git a/lovelace/room_cards/front_room.yaml b/lovelace/room_cards/front_room.yaml new file mode 100644 index 0000000..679602f --- /dev/null +++ b/lovelace/room_cards/front_room.yaml @@ -0,0 +1,146 @@ +type: picture-elements +#background image +image: /local/bg500x225.png +elements: + - type: custom:mushroom-template-card + primary: "{{states('input_select.front_room_mode')}}" + entity: input_select.front_room_mode + tap_action: + action: more-info + style: + font-style: italic + left: 14% + top: 88% + + - type: state-label + entity: sensor.front_room_thermostat_temperature + style: + left: 15% + top: 35% + font-size: 180% + - type: state-label + entity: sensor.front_room_thermostat_humidity + style: + left: 85% + top: 35% + font-size: 180% + text-align: right + - type: custom:mushroom-title-card + title: "Front Room" + style: + font-size: 130% + left: -2% + top: -10% + transform: initial + - type: state-icon + entity: binary_sensor.front_room_occupied + style: + left: 68% + top: 9% + # - type: state-icon + # entity: group.front_room_motion + # style: + # left: 68% + # top: 9% + - type: state-icon + entity: binary_sensor.front_room_window_contact + style: + left: 76% + top: 9% + - type: state-icon + entity: switch.front_room_light_cycle + style: + left: 84% + top: 9% + tap_action: + action: toggle + hold_action: + action: more-info + - type: state-icon + entity: input_boolean.front_room_occupied + style: + left: 92% + top: 9% + tap_action: + action: toggle + hold_action: + action: more-info + + - color: auto + entity: light.front_room_hue + show_name: false + style: + left: 14% + top: 65% + styles: + card: + - border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 30px + - height: 30px + tap_action: + action: toggle + hold_action: + action: more-info + type: "custom:button-card" + - type: "custom:button-card" + color: auto + entity: camera.frigate_cam13 + show_name: false + show_entity_picture: true + style: + left: 38% + top: 65% + styles: + card: + #- border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 45px + - height: 45px + tap_action: + action: navigate + navigation_path: /ai-yml/ai-cam13 + - type: "custom:button-card" + color: auto + entity: media_player.front_room_tv + show_name: false + show_entity_picture: true + style: + left: 62% + top: 65% + styles: + card: + - width: 50px + - height: 50px + icon: + - width: 45px + - height: 45px + tap_action: + action: more-info + - type: "custom:button-card" + color: auto + entity: media_player.front_room_hub + show_name: false + show_entity_picture: true + style: + left: 86% + top: 65% + styles: + card: + - width: 50px + - height: 50px + icon: + - width: 45px + - height: 45px + tap_action: + action: more-info + +# 12,31,50,69,8 +# 14,38,62,86 +# 25,50,75 +# 33,66 +# 50 \ No newline at end of file diff --git a/lovelace/room_cards/front_yard.yaml b/lovelace/room_cards/front_yard.yaml new file mode 100644 index 0000000..705ce7c --- /dev/null +++ b/lovelace/room_cards/front_yard.yaml @@ -0,0 +1,174 @@ +type: picture-elements +#background image +image: /local/bg500x225.png +elements: + - type: custom:mushroom-template-card + primary: Driveway + entity: light.driveway + tap_action: + action: toggle + style: + left: 14% + top: 88% + - type: custom:mushroom-template-card + primary: Porch + entity: light.front_porch_overhead + tap_action: + action: toggle + style: + left: 38% + top: 88% + - type: custom:mushroom-template-card + primary: "{{ states('group.front_yard_plants') }}" + entity: group.front_yard_plants + tap_action: + action: navigate + navigation_path: /phone-yaml/plants + style: + left: 86% + top: 88% + text-transform: capitalize + + - type: state-label + entity: sensor.front_porch_temperature + style: + left: 15% + top: 35% + font-size: 180% + - type: state-label + entity: sensor.lacrosse_tx141thbv2_0_54_temperature + style: + left: 85% + top: 35% + font-size: 180% + text-align: right + + #Card title + - type: custom:mushroom-title-card + title: "Front Yard" + style: + font-size: 130% + left: -2% + top: -10% + transform: initial + #top left icon spot + - type: state-icon + entity: binary_sensor.front_yard_occupied + style: + left: 60% + top: 9% + # - type: state-icon + # entity: group.front_yard_motion + # style: + # left: 60% + # top: 9% + - type: state-icon + entity: binary_sensor.frigate_cam18_vehicle_occupancy + style: + left: 68% + top: 9% + #top icon spot #1 + - type: state-icon + entity: binary_sensor.front_porch_person_occupancy + style: + left: 76% + top: 9% + tap_action: + action: more-info + - type: state-icon + entity: binary_sensor.front_door_contact + style: + left: 84% + top: 9% + #top icon spot #4 + - type: state-icon + entity: input_boolean.front_yard_occupied + style: + left: 92% + top: 9% + tap_action: + action: toggle + hold_action: + action: more-info + + - type: "custom:button-card" + color: auto + entity: light.driveway + show_name: false + show_entity_picture: true + style: + left: 14% + top: 65% + styles: + card: + - border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 30px + - height: 30px + tap_action: + action: toggle + hold_action: + action: more-info + + - type: "custom:button-card" + color: auto + entity: light.front_porch_overhead + show_name: false + show_entity_picture: true + style: + left: 38% + top: 65% + styles: + card: + - border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 30px + - height: 30px + tap_action: + action: toggle + hold_action: + action: more-info + + #button #1 label + + #button #2 + - type: "custom:button-card" + color: auto + entity: camera.frigate_cam18 + show_name: false + show_entity_picture: true + style: + left: 62% + top: 65% + styles: + card: + #- border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 45px + - height: 45px + tap_action: + action: navigate + navigation_path: /ai-yml/ai-cam18 + + - type: state-icon + entity: group.front_yard_plants + style: + left: 86% + top: + 65% + #- width: 50px + #- height: 50px + tap_action: + action: navigate + navigation_path: /phone-yaml/plants +# 12,31,50,69,88 +# 14,38,62,86 +# 25,50,75 +# 33,66 +# 50 diff --git a/lovelace/room_cards/furnace_room.yaml b/lovelace/room_cards/furnace_room.yaml new file mode 100644 index 0000000..9b4777d --- /dev/null +++ b/lovelace/room_cards/furnace_room.yaml @@ -0,0 +1,150 @@ +type: picture-elements +#background image +image: /local/bg500x225.png +elements: + - type: state-label + entity: sensor.furnace_room_thermostat_temperature + style: + left: 15% + top: 35% + font-size: 180% + - type: state-label + entity: sensor.furnace_room_thermostat_humidity + style: + left: 85% + top: 35% + font-size: 180% + text-align: right + #Card title + - type: custom:mushroom-title-card + title: 'Furnace Room' + style: + font-size: 130% + left: -2% + top: -10% + transform: initial + #top left icon spot + - type: state-icon + entity: binary_sensor.furnace_room_occupied + style: + left: 76% + top: 9% + # - type: state-icon + # entity: group.furnace_room_motion + # style: + # left: 76% + # top: 9% + - type: state-icon + entity: binary_sensor.furnace_room_door + style: + left: 84% + top: 9% + tap_action: + action: more-info + #top icon spot #4 + - type: state-icon + entity: input_boolean.furnace_room_occupied + style: + left: 92% + top: 9% + tap_action: + action: toggle + hold_action: + action: more-info + + - type: 'custom:button-card' + color: auto + entity: light.furnace_room + show_name: false + show_entity_picture: true + style: + left: 14% + top: 65% + styles: + card: + - border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 30px + - height: 30px + tap_action: + action: toggle + hold_action: + action: more-info + + #button #3 + - type: 'custom:button-card' + color: auto + entity: binary_sensor.heat_pump + show_name: false + show_entity_picture: true + style: + left: 36% + top: 65% + styles: + card: + - border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 30px + - height: 30px + tap_action: + action: more-info + + - type: custom:mushroom-template-card + primary: "{{ states('sensor.hvac_delta') }}" + entity: sensor.hvac_delta + tap_action: + action: more-info + style: + left: 36% + top: 88% + + + #button #3 + - type: 'custom:button-card' + color: auto + entity: binary_sensor.furnace + show_name: false + show_entity_picture: true + style: + left: 68% + top: 65% + styles: + card: + - border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 30px + - height: 30px + tap_action: + action: more-info + + #button #3 + - type: 'custom:button-card' + color: auto + entity: binary_sensor.furnace_room_water_sensor_water_alarm_water_leak_detected + show_name: false + show_entity_picture: true + style: + left: 86% + top: 65% + styles: + card: + - border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 30px + - height: 30px + tap_action: + action: more-info + +# 12,31,50,69,88 +# 14,38,62,86 +# 25,50,75 +# 33,66 +# 50 \ No newline at end of file diff --git a/lovelace/room_cards/garage.yaml b/lovelace/room_cards/garage.yaml new file mode 100644 index 0000000..9d873fc --- /dev/null +++ b/lovelace/room_cards/garage.yaml @@ -0,0 +1,131 @@ +type: picture-elements +#background image +image: /local/bg500x225.png +elements: + - type: state-label + entity: sensor.garage_multisensor_air_temperature + style: + left: 15% + top: 35% + font-size: 180% + - type: state-label + entity: sensor.garage_multisensor_humidity + style: + left: 85% + top: 35% + font-size: 180% + text-align: right + #Card title + - type: custom:mushroom-title-card + title: "Garage" + style: + font-size: 130% + left: -2% + top: -10% + transform: initial + #top left icon spot + - type: state-icon + entity: binary_sensor.garage_occupied + style: + left: 60% + top: 9% + # - type: state-icon + # entity: group.garage_motion + # style: + # left: 60% + # top: 9% + - type: state-icon + entity: group.traverse + style: + left: 68% + top: 9% + #top icon spot #1 + - type: state-icon + entity: binary_sensor.outer_garage_door + style: + left: 76% + top: 9% + #top icon spot #2 + - type: state-icon + entity: binary_sensor.inner_garage_door + style: + left: 84% + top: 9% + #top icon spot #4 + - type: state-icon + entity: input_boolean.garage_occupied + style: + left: 92% + top: 9% + tap_action: + action: toggle + hold_action: + action: more-info + + - type: "custom:button-card" + color: auto + entity: light.garage_overhead + show_name: false + show_entity_picture: true + style: + left: 25% + top: 65% + styles: + card: + - border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 30px + - height: 30px + tap_action: + action: toggle + hold_action: + action: more-info + + #button #2 + - type: "custom:button-card" + color: auto + entity: camera.frigate_cam04 + show_name: false + show_entity_picture: true + style: + left: 50% + top: 65% + styles: + card: + #- border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 45px + - height: 45px + tap_action: + action: navigate + navigation_path: /ai-yml/ai-cam04 + #button #5 + - type: "custom:button-card" + color: auto + entity: cover.garage_door + show_name: false + style: + left: 75% + top: 65% + styles: + card: + - border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 30px + - height: 30px + tap_action: + action: toggle + hold_action: + action: more-info + +# 12,31,50,69,88 +# 14,38,62,86 +# 25,50,75 +# 33,66 +# 50 \ No newline at end of file diff --git a/lovelace/room_cards/great_room.yaml b/lovelace/room_cards/great_room.yaml new file mode 100644 index 0000000..08d6988 --- /dev/null +++ b/lovelace/room_cards/great_room.yaml @@ -0,0 +1,148 @@ +type: picture-elements +#background image +image: /local/bg500x225.png +elements: + - type: custom:mushroom-template-card + primary: '{{states(''input_select.great_room_mode'')}}' + entity: input_select.great_room_mode + tap_action: + action: more-info + style: + font-style: italic + left: 25% + top: 88% + - type: state-label + entity: sensor.great_room_multisensor_air_temperature + style: + left: 15% + top: 35% + font-size: 180% + - type: state-label + entity: sensor.great_room_multisensor_humidity + style: + left: 85% + top: 35% + font-size: 180% + text-align: right + #Card title + - type: custom:mushroom-title-card + title: 'Great Room' + style: + font-size: 130% + left: -2% + top: -10% + transform: initial + #top left icon spot + - type: state-icon + entity: binary_sensor.great_room_occupied + style: + left: 60% + top: 9% + # - type: state-icon + # entity: group.great_room_motion + # style: + # left: 60% + # top: 9% + - type: state-icon + entity: binary_sensor.storage_room_door_contact + style: + left: 68% + top: 9% + #top icon spot #2 + - type: state-icon + entity: switch.shelly_projector + style: + left: 76% + top: 9% + tap_action: + action: toggle + hold_action: + action: more-info + #top icon spot #3 + - type: state-icon + entity: switch.great_room_light_cycle + style: + left: 84% + top: 9% + tap_action: + action: toggle + hold_action: + action: more-info + #top icon spot #4 + - type: state-icon + entity: input_boolean.great_room_occupied + style: + left: 92% + top: 9% + tap_action: + action: toggle + hold_action: + action: more-info + + #button #2 + - type: 'custom:button-card' + color: auto + entity: light.great_room_hue + show_name: false + show_entity_picture: true + style: + left: 25% + top: 65% + styles: + card: + - border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 30px + - height: 30px + tap_action: + action: toggle + hold_action: + action: more-info + + #button #4 + - type: 'custom:button-card' + color: auto + entity: media_player.downstairs_roku + show_name: false + show_entity_picture: true + style: + left: 50% + top: 65% + styles: + card: + #- border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 45px + - height: 45px + tap_action: + action: more-info + #button #5 + - type: 'custom:button-card' + color: auto + entity: media_player.great_room + show_name: false + show_entity_picture: true + style: + left: 75% + top: 65% + styles: + card: + #- border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 45px + - height: 45px + tap_action: + action: more-info + + +# 12,31,50,69,88 +# 14,38,62,86 +# 25,50,75 +# 33,66 +# 50 \ No newline at end of file diff --git a/lovelace/room_cards/kitchen.yaml b/lovelace/room_cards/kitchen.yaml new file mode 100644 index 0000000..41df3c2 --- /dev/null +++ b/lovelace/room_cards/kitchen.yaml @@ -0,0 +1,131 @@ +type: picture-elements +#background image +image: /local/bg500x225.png +elements: + - type: custom:mushroom-template-card + primary: "{{states('input_select.kitchen_mode')}}" + entity: input_select.kitchen_mode + tap_action: + action: more-info + style: + font-style: italic + left: 25% + top: 88% + + - type: state-label + entity: sensor.kitchen_multisensor_air_temperature + style: + left: 15% + top: 35% + font-size: 180% + - type: state-label + entity: sensor.kitchen_multisensor_humidity + style: + left: 85% + top: 35% + font-size: 180% + text-align: right + #Card title + - type: custom:mushroom-title-card + title: "Kitchen" + style: + font-size: 130% + left: -2% + top: -10% + transform: initial + #top left icon spot + - type: state-icon + entity: binary_sensor.kitchen_occupied + style: + left: 44% + top: 9% + #top left icon #2 spot + # - type: state-icon + # entity: group.kitchen_motion + # style: + # left: 44% + # top: 9% + - type: state-icon + entity: binary_sensor.kitchen_fridge_or_freezer_too_warm + style: + left: 52% + top: 9% + - type: state-icon + entity: binary_sensor.keurig + style: + left: 60% + top: 9% + - type: state-icon + entity: binary_sensor.microwave + style: + left: 68% + top: 9% + - type: state-icon + entity: binary_sensor.stove + style: + left: 76% + top: 9% + #top icon spot #1 + - type: state-icon + entity: binary_sensor.dishwasher + style: + left: 84% + top: 9% + #top icon spot #4 + - type: state-icon + entity: input_boolean.kitchen_occupied + style: + left: 92% + top: 9% + tap_action: + action: toggle + hold_action: + action: more-info + + #button #2 + - type: "custom:button-card" + color: auto + entity: light.kitchen_hue + show_name: false + style: + left: 25% + top: 65% + styles: + card: + - border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 30px + - height: 30px + tap_action: + action: toggle + hold_action: + action: more-info + + #button #4 + - type: "custom:button-card" + color: auto + entity: camera.frigate_cam12 + show_name: false + show_entity_picture: true + style: + left: 75% + top: 65% + styles: + card: + #- border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 45px + - height: 45px + tap_action: + action: navigate + navigation_path: /ai-yml/ai-cam12 + +# 12,31,50,69,88 +# 14,38,62,86 +# 25,50,75 +# 33,66 +# 50 \ No newline at end of file diff --git a/lovelace/room_cards/mancave.yaml b/lovelace/room_cards/mancave.yaml new file mode 100644 index 0000000..f8830a6 --- /dev/null +++ b/lovelace/room_cards/mancave.yaml @@ -0,0 +1,89 @@ +type: picture-elements +#background image +image: /local/bg500x225.png +elements: + - type: custom:mushroom-template-card + primary: '{{states(''input_select.mancave_mode'')}}' + entity: input_select.mancave_mode + tap_action: + action: more-info + style: + font-style: italic + left: 50% + top: 88% + + - type: state-label + entity: sensor.mancave_thermostat_temperature + style: + left: 15% + top: 35% + font-size: 180% + - type: state-label + entity: sensor.mancave_thermostat_humidity + style: + left: 85% + top: 35% + font-size: 180% + text-align: right + #Card title + - type: custom:mushroom-title-card + title: 'Mancave' + style: + font-size: 130% + left: -2% + top: -10% + transform: initial + #top left icon spot + - type: state-icon + entity: binary_sensor.mancave_occupied + style: + left: 76% + top: 9% + # - type: state-icon + # entity: group.mancave_motion + # style: + # left: 76% + # top: 9% + + - type: state-icon + entity: binary_sensor.mancave_door_contact + style: + left: 84% + top: 9% + #top icon spot #4 + - type: state-icon + entity: input_boolean.mancave_occupied + style: + left: 92% + top: 9% + tap_action: + action: toggle + hold_action: + action: more-info + + - type: 'custom:button-card' + color: auto + entity: light.mancave + show_name: false + show_entity_picture: true + style: + left: 50% + top: 65% + styles: + card: + - border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 30px + - height: 30px + tap_action: + action: toggle + hold_action: + action: more-info + +# 12,31,50,69,88 +# 14,38,62,86 +# 25,50,75 +# 33,66 +# 50 \ No newline at end of file diff --git a/lovelace/room_cards/master_bathroom.yaml b/lovelace/room_cards/master_bathroom.yaml new file mode 100644 index 0000000..5370bea --- /dev/null +++ b/lovelace/room_cards/master_bathroom.yaml @@ -0,0 +1,122 @@ +type: picture-elements +#background image for header +image: /local/bg500x225.png +elements: + - type: custom:mushroom-template-card + primary: '{{states(''input_select.master_bathroom_mode'')}}' + entity: input_select.master_bathroom_mode + tap_action: + action: more-info + style: + font-style: italic + left: 25% + top: 88% + + - type: state-label + entity: sensor.master_bathroom_thermostat_temperature + style: + left: 15% + top: 35% + font-size: 180% + - type: state-label + entity: sensor.master_bathroom_thermostat_humidity + style: + left: 85% + top: 35% + font-size: 180% + text-align: right + #Card title + - type: custom:mushroom-title-card + title: 'Master Bathroom' + style: + font-size: 130% + left: -2% + top: -10% + transform: initial + #top left icon spot + - type: state-icon + entity: binary_sensor.master_bathroom_occupied + style: + left: 68% + top: 9% + # - type: state-icon + # entity: group.master_bathroom_motion + # style: + # left: 68% + # top: 9% + # - type: state-icon + # entity: binary_sensor.bathroom_getting_humid + # style: + # left: 76% + # top: 9% + - type: state-icon + entity: binary_sensor.master_bathroom_hygrostat + style: + left: 76% + top: 9% + - type: state-icon + entity: switch.bathroom_vent_switch + style: + left: 84% + top: 9% + tap_action: + action: toggle + hold_action: + action: more-info + #top icon spot #3 + - type: state-icon + entity: input_boolean.master_bathroom_occupied + style: + left: 92% + top: 9% + tap_action: + action: toggle + hold_action: + action: more-info + + #button #4 + - type: 'custom:button-card' + color: auto + entity: light.master_bathroom_hue + show_name: false + style: + left: 25% + top: 65% + styles: + card: + - border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 30px + - height: 30px + tap_action: + action: toggle + hold_action: + action: more-info + + #button #5 + - type: 'custom:button-card' + color: auto + entity: media_player.bathroom_mini + show_name: false + show_entity_picture: true + style: + left: 75% + top: 65% + styles: + card: + #- border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 45px + - height: 45px + tap_action: + action: more-info + +# 12,31,50,69,88 +# 14,38,62,86 +# 25,50,75 +# 33,66 +# 50 \ No newline at end of file diff --git a/lovelace/room_cards/master_bedroom.yaml b/lovelace/room_cards/master_bedroom.yaml new file mode 100644 index 0000000..a269f8c --- /dev/null +++ b/lovelace/room_cards/master_bedroom.yaml @@ -0,0 +1,187 @@ +type: picture-elements +#background image +image: /local/bg500x225.png +elements: + - type: custom:mushroom-template-card + primary: "{{states('input_select.master_bedroom_mode')}}" + entity: input_select.master_bedroom_mode + tap_action: + action: more-info + style: + font-style: italic + left: 12% + top: 88% + + - type: state-label + entity: sensor.master_bedroom_multisensor_air_temperature + style: + left: 15% + top: 35% + font-size: 180% + - type: state-label + entity: sensor.master_bedroom_multisensor_humidity + style: + left: 85% + top: 35% + font-size: 180% + text-align: right + #Card title + - type: custom:mushroom-title-card + title: "Master Bedroom" + style: + font-size: 130% + left: -2% + top: -10% + transform: initial + #top left icon spot + - type: state-icon + entity: binary_sensor.master_bedroom_occupied + style: + left: 60% + top: 9% + #top left icon #2 spot + # - type: state-icon + # entity: group.master_bedroom_motion + # style: + # left: 60% + # top: 9% + + - type: state-icon + entity: binary_sensor.master_bedroom_window_contact + style: + left: 68% + top: 9% + #top icon spot #2 + - type: state-icon + entity: fan.master_bedroom + style: + left: 76% + top: 9% + tap_action: + action: more-info + hold_action: + action: toggle + #top icon spot #3 + - type: state-icon + entity: switch.master_bedroom_light_cycle + style: + left: 84% + top: 9% + tap_action: + action: toggle + hold_action: + action: more-info + #top icon spot #4 + - type: state-icon + entity: input_boolean.master_bedroom_occupied + style: + left: 92% + top: 9% + tap_action: + action: toggle + hold_action: + action: more-info + + #button #1 + - type: "custom:button-card" + color: auto + entity: light.master_bedroom_ceiling_hue + show_name: false + style: + left: 12% + top: 65% + styles: + card: + - border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 30px + - height: 30px + tap_action: + action: toggle + hold_action: + action: more-info + #button #2 + - type: "custom:button-card" + color: auto + entity: camera.frigate_cam06 + show_name: false + show_entity_picture: true + style: + left: 31% + top: 65% + styles: + card: + #- border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 45px + - height: 45px + tap_action: + action: navigate + navigation_path: /ai-yml/ai-cam06 + #button #3 + - type: "custom:button-card" + color: auto + entity: binary_sensor.master_bed_occupied + show_name: false + style: + left: 50% + top: 65% + styles: + card: + - border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 30px + - height: 30px + tap_action: + action: more-info + #button #4 + - type: "custom:button-card" + color: auto + entity: camera.frigate_cam07 + show_name: false + show_entity_picture: true + style: + left: 69% + top: 65% + styles: + card: + #- border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 45px + - height: 45px + tap_action: + action: navigate + navigation_path: /ai-yml/ai-cam07 + #button #5 + - type: "custom:button-card" + color: auto + entity: media_player.master_bedroom_clock + show_name: false + show_entity_picture: true + style: + left: 88% + top: 65% + styles: + card: + #- border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 45px + - height: 45px + tap_action: + action: more-info + +# 12,31,50,69,88 +# 14,38,62,86 +# 25,50,75 +# 33,66 +# 50 \ No newline at end of file diff --git a/lovelace/room_cards/nursery.yaml b/lovelace/room_cards/nursery.yaml new file mode 100644 index 0000000..5931514 --- /dev/null +++ b/lovelace/room_cards/nursery.yaml @@ -0,0 +1,215 @@ +type: picture-elements +#background image +image: /local/bg500x225.png +elements: + - type: custom:mushroom-template-card + primary: "{{states('input_select.nursery_mode')}}" + entity: input_select.nursery_mode + tap_action: + action: more-info + style: + font-style: italic + left: 12% + top: 88% + + - type: custom:mushroom-template-card + primary: "{{states('select.black_bed_wled_preset')}}" + entity: select.black_bed_wled_preset + tap_action: + action: more-info + style: + font-style: italic + left: 31% + top: 88% + + - type: custom:mushroom-template-card + primary: "{{states('select.white_bed_wled_preset')}}" + entity: select.white_bed_wled_preset + tap_action: + action: more-info + style: + font-style: italic + left: 69% + top: 88% + + - type: state-label + entity: sensor.nursery_multisensor_air_temperature + style: + left: 15% + top: 35% + font-size: 180% + - type: state-label + entity: sensor.nursery_multisensor_humidity + style: + left: 85% + top: 35% + font-size: 180% + text-align: right + #Card title + - type: custom:mushroom-title-card + title: "Nursery" + style: + font-size: 130% + left: -2% + top: -10% + transform: initial + #top left icon spot + - type: state-icon + entity: binary_sensor.nursery_occupied + style: + left: 52% + top: 9% + #top left icon #2 spot + # - type: state-icon + # entity: group.nursery_motion + # style: + # left: 52% + # top: 9% + #top icon spot #1 + - type: state-icon + entity: binary_sensor.nursery_window_contact + style: + left: 60% + top: 9% + - type: state-icon + entity: fan.nursery + style: + left: 68% + top: 9% + tap_action: + action: more-info + hold_action: + action: toggle + #top icon spot #4 + - type: state-icon + entity: switch.nursery_bed_lights + style: + left: 76% + top: 9% + tap_action: + action: toggle + hold_action: + action: more-info + #top icon spot #3 + - type: state-icon + entity: switch.nursery_light_cycle + style: + left: 84% + top: 9% + tap_action: + action: toggle + hold_action: + action: more-info + #top icon spot #4 + - type: state-icon + entity: input_boolean.nursery_occupied + style: + left: 92% + top: 9% + tap_action: + action: toggle + hold_action: + action: more-info + + #button #1 + - type: "custom:button-card" + color: auto + entity: light.nursery_hue + show_name: false + style: + left: 12% + top: 65% + styles: + card: + - border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 30px + - height: 30px + tap_action: + action: toggle + hold_action: + action: more-info + #button #2 + - color: auto + entity: binary_sensor.emmetts_bed + show_name: false + style: + left: 31% + top: 65% + styles: + card: + - border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 30px + - height: 30px + tap_action: + action: more-info + type: "custom:button-card" + #button #3 + - type: "custom:button-card" + color: auto + entity: camera.frigate_cam08 + show_name: false + show_entity_picture: true + style: + left: 50% + top: 65% + styles: + card: + #- border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 45px + - height: 45px + tap_action: + action: navigate + navigation_path: /ai-yml/ai-cam08 + #button #4 + - type: "custom:button-card" + color: auto + entity: binary_sensor.bridgets_bed + show_name: false + style: + left: 69% + top: 65% + transform: scaleX(-1) translate(50%, -50%) + styles: + card: + - border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 30px + - height: 30px + tap_action: + action: more-info + #button #5 + - type: "custom:button-card" + color: auto + entity: media_player.nursery_hub + show_name: false + show_entity_picture: true + style: + left: 88% + top: 65% + styles: + card: + #- border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 45px + - height: 45px + tap_action: + action: more-info + +# 12,31,50,69,88 +# 14,38,62,86 +# 25,50,75 +# 33,66 +# 50 \ No newline at end of file diff --git a/lovelace/room_cards/utility_room.yaml b/lovelace/room_cards/utility_room.yaml new file mode 100644 index 0000000..5a85695 --- /dev/null +++ b/lovelace/room_cards/utility_room.yaml @@ -0,0 +1,143 @@ +type: picture-elements +#background image +image: /local/bg500x225.png +elements: + - type: custom:mushroom-template-card + primary: '{{states(''input_select.utility_room_mode'')}}' + entity: input_select.utility_room_mode + tap_action: + action: more-info + style: + font-style: italic + left: 25% + top: 88% + + - type: state-label + entity: sensor.utility_room_thermostat_temperature + style: + left: 15% + top: 35% + font-size: 180% + - type: state-label + entity: sensor.utility_room_thermostat_humidity + style: + left: 85% + top: 35% + font-size: 180% + text-align: right + #Card title + - type: custom:mushroom-title-card + title: 'Utility Room' + style: + font-size: 130% + left: -2% + top: -10% + transform: initial + #top left icon spot + - type: state-icon + entity: binary_sensor.utility_room_occupied + style: + left: 68% + top: 9% + #top left icon #2 spot + # - type: state-icon + # entity: group.utility_room_motion + # style: + # left: 68% + # top: 9% + # - type: state-icon + # entity: binary_sensor.utility_room_getting_humid + # style: + # left: 76% + # top: 9% + - type: state-icon + entity: binary_sensor.utility_room_hygrostat + style: + left: 76% + top: 9% + - type: state-icon + entity: switch.utility_room_vent_switch + style: + left: 84% + top: 9% + tap_action: + action: toggle + hold_action: + action: more-info + #top icon spot #3 + - type: state-icon + entity: input_boolean.utility_room_occupied + style: + left: 92% + top: 9% + tap_action: + action: toggle + hold_action: + action: more-info + + #button #1 + - type: 'custom:button-card' + color: auto + entity: light.utility_room_vanity + show_name: false + show_entity_picture: true + style: + left: 25% + top: 65% + styles: + card: + - border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 30px + - height: 30px + tap_action: + action: toggle + hold_action: + action: more-info + #button #2 + - type: 'custom:button-card' + color: auto + entity: binary_sensor.washing_machine + show_name: false + show_entity_picture: true + style: + left: 50% + top: 65% + styles: + card: + - border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 30px + - height: 30px + tap_action: + action: more-info + #button #3 + - type: 'custom:button-card' + color: auto + entity: binary_sensor.tumble_dryer + show_name: false + show_entity_picture: true + style: + left: 75% + top: 65% + styles: + card: + - border-radius: 50px + - width: 50px + - height: 50px + icon: + - width: 30px + - height: 30px + tap_action: + action: more-info + + +# 12,31,50,69,88 +# 14,38,62,86 +# 25,50,75 +# 33,66 +# 50 \ No newline at end of file diff --git a/lovelace/stretch-cameras/back-yard-card.yaml b/lovelace/stretch-cameras/back-yard-card.yaml new file mode 100644 index 0000000..22afc21 --- /dev/null +++ b/lovelace/stretch-cameras/back-yard-card.yaml @@ -0,0 +1,41 @@ +type: custom:frigate-card +cameras: + - camera_entity: camera.frigate_cam14 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam14_sub + icon: mdi:grass + title: Back Yard + id: back_yard +live: + auto_mute: all + layout: + fit: fill + preload: true + draggable: true + show_image_during_load: false + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none +menu: + buttons: + frigate: + enabled: false + style: none +media_viewer: + draggable: false + lazy_load: false +dimensions: + aspect_ratio_mode: static + aspect_ratio: '16:9' +view: + actions: + tap_action: + action: more-info \ No newline at end of file diff --git a/lovelace/stretch-cameras/back-yard-view.yaml b/lovelace/stretch-cameras/back-yard-view.yaml new file mode 100644 index 0000000..2f75986 --- /dev/null +++ b/lovelace/stretch-cameras/back-yard-view.yaml @@ -0,0 +1,8 @@ +title: Back Yard Camera +path: back-yard-camera +icon: mdi:slide +type: panel +cards: + - type: horizontal-stack + cards: + - !include /config/lovelace/stretch-cameras/back-yard-card.yaml diff --git a/lovelace/stretch-cameras/blue-room-card.yaml b/lovelace/stretch-cameras/blue-room-card.yaml new file mode 100644 index 0000000..62fba03 --- /dev/null +++ b/lovelace/stretch-cameras/blue-room-card.yaml @@ -0,0 +1,41 @@ +type: custom:frigate-card +cameras: + - camera_entity: camera.frigate_cam01 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam01_sub + icon: mdi:yoga + title: Blue Room + id: blue_room +live: + auto_mute: all + layout: + fit: fill + preload: true + draggable: true + show_image_during_load: false + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none +menu: + buttons: + frigate: + enabled: false + style: none +media_viewer: + draggable: false + lazy_load: false +dimensions: + aspect_ratio_mode: static + aspect_ratio: '16:9' +view: + actions: + tap_action: + action: more-info \ No newline at end of file diff --git a/lovelace/stretch-cameras/blue-room-view.yaml b/lovelace/stretch-cameras/blue-room-view.yaml new file mode 100644 index 0000000..83d62f3 --- /dev/null +++ b/lovelace/stretch-cameras/blue-room-view.yaml @@ -0,0 +1,6 @@ +title: Blue Room Camera +path: blue-room-camera +icon: mdi:yoga +type: panel +cards: + - !include /config/lovelace/stretch-cameras/blue-room-card.yaml \ No newline at end of file diff --git a/lovelace/stretch-cameras/computer-area-card.yaml b/lovelace/stretch-cameras/computer-area-card.yaml new file mode 100644 index 0000000..1cfca3c --- /dev/null +++ b/lovelace/stretch-cameras/computer-area-card.yaml @@ -0,0 +1,54 @@ +# type: custom:webrtc-camera +# url: rtsp://192.168.1.7:8554/rtsp_cam03_sub +# #ui: true # custom video controls, default false +# title: Computer Area # optional card title +# # poster: https://home-assistant.io/images/cast/splash.png # still image when stream is loading +# muted: true # disable sound, default false +# # intersection: 0.75 # auto stop stream when less than 75% of video element is in the screen, 50% by default +# # background: true # run stream when not displayed (ex. for quick video loading), default false + + +# mode: webrtc #,mse,mp4,mjpeg + + +type: custom:frigate-card +cameras: + - camera_entity: camera.frigate_cam03 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam03_sub + icon: mdi:desktop-classic + title: Computer Area + id: computer_area +live: + auto_mute: all + layout: + fit: fill + preload: true + draggable: false + show_image_during_load: true + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none +menu: + buttons: + frigate: + enabled: false + style: none +media_viewer: + draggable: false + lazy_load: false +dimensions: + aspect_ratio_mode: static + aspect_ratio: '16:9' +view: + actions: + tap_action: + action: more-info \ No newline at end of file diff --git a/lovelace/stretch-cameras/computer-area-view.yaml b/lovelace/stretch-cameras/computer-area-view.yaml new file mode 100644 index 0000000..93b1ac6 --- /dev/null +++ b/lovelace/stretch-cameras/computer-area-view.yaml @@ -0,0 +1,6 @@ +title: Computer Area Camera +path: computer-area-camera +icon: mdi:desktop-classic +type: panel +cards: + - !include /config/lovelace/stretch-cameras/computer-area-card.yaml \ No newline at end of file diff --git a/lovelace/stretch-cameras/dual-camera-view.yaml b/lovelace/stretch-cameras/dual-camera-view.yaml new file mode 100644 index 0000000..3b271c5 --- /dev/null +++ b/lovelace/stretch-cameras/dual-camera-view.yaml @@ -0,0 +1,10 @@ +title: Dual Cameras +path: dual-cameras +icon: mdi:home-switch +#panel: true +type: panel +cards: + - type: horizontal-stack + cards: + - !include /config/lovelace/stretch-cameras/indoor-camera-cycler.yaml + - !include /config/lovelace/stretch-cameras/outdoor-camera-cycler.yaml \ No newline at end of file diff --git a/lovelace/stretch-cameras/front-porch-card.yaml b/lovelace/stretch-cameras/front-porch-card.yaml new file mode 100644 index 0000000..82a773b --- /dev/null +++ b/lovelace/stretch-cameras/front-porch-card.yaml @@ -0,0 +1,41 @@ +type: custom:frigate-card +cameras: + - camera_entity: camera.frigate_cam19 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam19_sub + icon: mdi:doorbell-video + title: Front Porch + id: front_porch +live: + auto_mute: all + layout: + fit: fill + preload: true + draggable: true + show_image_during_load: false + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none +menu: + buttons: + frigate: + enabled: false + style: none +media_viewer: + draggable: false + lazy_load: false +dimensions: + aspect_ratio_mode: static + aspect_ratio: '16:9' +view: + actions: + tap_action: + action: more-info \ No newline at end of file diff --git a/lovelace/stretch-cameras/front-porch-view.yaml b/lovelace/stretch-cameras/front-porch-view.yaml new file mode 100644 index 0000000..55e8be6 --- /dev/null +++ b/lovelace/stretch-cameras/front-porch-view.yaml @@ -0,0 +1,6 @@ +title: Front Porch Camera +path: front-porch-camera +icon: mdi:doorbell +type: panel +cards: + - !include /config/lovelace/stretch-cameras/front-porch-card.yaml \ No newline at end of file diff --git a/lovelace/stretch-cameras/front-room-card.yaml b/lovelace/stretch-cameras/front-room-card.yaml new file mode 100644 index 0000000..062304d --- /dev/null +++ b/lovelace/stretch-cameras/front-room-card.yaml @@ -0,0 +1,41 @@ +type: custom:frigate-card +cameras: + - camera_entity: camera.frigate_cam13 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam13_sub + icon: mdi:television + title: Front Room + id: front_room +live: + auto_mute: all + layout: + fit: fill + preload: true + draggable: true + show_image_during_load: false + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none +menu: + buttons: + frigate: + enabled: false + style: none +media_viewer: + draggable: false + lazy_load: false +dimensions: + aspect_ratio_mode: static + aspect_ratio: '16:9' +view: + actions: + tap_action: + action: more-info \ No newline at end of file diff --git a/lovelace/stretch-cameras/front-room-view.yaml b/lovelace/stretch-cameras/front-room-view.yaml new file mode 100644 index 0000000..b25d174 --- /dev/null +++ b/lovelace/stretch-cameras/front-room-view.yaml @@ -0,0 +1,6 @@ +title: Front Room Camera +path: front-room-camera +icon: mdi:television +type: panel +cards: + - !include /config/lovelace/stretch-cameras/front-room-card.yaml \ No newline at end of file diff --git a/lovelace/stretch-cameras/front-yard-card.yaml b/lovelace/stretch-cameras/front-yard-card.yaml new file mode 100644 index 0000000..fe16a78 --- /dev/null +++ b/lovelace/stretch-cameras/front-yard-card.yaml @@ -0,0 +1,41 @@ +type: custom:frigate-card +cameras: + - camera_entity: camera.frigate_cam18 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam18_sub + icon: mdi:grass + title: Front Yard + id: front_yard +live: + auto_mute: all + layout: + fit: fill + preload: true + draggable: true + show_image_during_load: false + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none +menu: + buttons: + frigate: + enabled: false + style: none +media_viewer: + draggable: false + lazy_load: false +dimensions: + aspect_ratio_mode: static + aspect_ratio: '16:9' +view: + actions: + tap_action: + action: more-info \ No newline at end of file diff --git a/lovelace/stretch-cameras/front-yard-view.yaml b/lovelace/stretch-cameras/front-yard-view.yaml new file mode 100644 index 0000000..5544bac --- /dev/null +++ b/lovelace/stretch-cameras/front-yard-view.yaml @@ -0,0 +1,6 @@ +title: Front Yard Camera +path: front-yard-camera +icon: mdi:grass +type: panel +cards: + - !include /config/lovelace/stretch-cameras/front-yard-card.yaml \ No newline at end of file diff --git a/lovelace/stretch-cameras/garage-card.yaml b/lovelace/stretch-cameras/garage-card.yaml new file mode 100644 index 0000000..79c4f21 --- /dev/null +++ b/lovelace/stretch-cameras/garage-card.yaml @@ -0,0 +1,41 @@ +type: custom:frigate-card +cameras: + - camera_entity: camera.frigate_cam04 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam04_sub + icon: mdi:garage + title: Garage + id: garage +live: + auto_mute: all + layout: + fit: fill + preload: true + draggable: true + show_image_during_load: false + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none +menu: + buttons: + frigate: + enabled: false + style: none +media_viewer: + draggable: false + lazy_load: false +dimensions: + aspect_ratio_mode: static + aspect_ratio: '16:9' +view: + actions: + tap_action: + action: more-info \ No newline at end of file diff --git a/lovelace/stretch-cameras/garage-view.yaml b/lovelace/stretch-cameras/garage-view.yaml new file mode 100644 index 0000000..dcfb882 --- /dev/null +++ b/lovelace/stretch-cameras/garage-view.yaml @@ -0,0 +1,6 @@ +title: Garage Camera +path: garage-camera +icon: mdi:garage +type: panel +cards: + - !include /config/lovelace/stretch-cameras/garage-card.yaml \ No newline at end of file diff --git a/lovelace/stretch-cameras/indoor-camera-cycler.yaml b/lovelace/stretch-cameras/indoor-camera-cycler.yaml new file mode 100644 index 0000000..810794b --- /dev/null +++ b/lovelace/stretch-cameras/indoor-camera-cycler.yaml @@ -0,0 +1,44 @@ +type: vertical-stack +cards: + - type: conditional + conditions: + - entity: input_select.indoor_camera_cycle + state: Blue Room + card: + !include /config/lovelace/stretch-cameras/blue-room-card.yaml + - type: conditional + conditions: + - entity: input_select.indoor_camera_cycle + state: Computer Area + card: + !include /config/lovelace/stretch-cameras/computer-area-card.yaml + - type: conditional + conditions: + - entity: input_select.indoor_camera_cycle + state: Bedroom Left + card: + !include /config/lovelace/stretch-cameras/master-bedroom-left-card.yaml + - type: conditional + conditions: + - entity: input_select.indoor_camera_cycle + state: Bedroom Right + card: + !include /config/lovelace/stretch-cameras/master-bedroom-right-card.yaml + - type: conditional + conditions: + - entity: input_select.indoor_camera_cycle + state: Nursery + card: + !include /config/lovelace/stretch-cameras/nursery-card.yaml + - type: conditional + conditions: + - entity: input_select.indoor_camera_cycle + state: Kitchen + card: + !include /config/lovelace/stretch-cameras/kitchen-card.yaml + - type: conditional + conditions: + - entity: input_select.indoor_camera_cycle + state: Front Room + card: + !include /config/lovelace/stretch-cameras/front-room-card.yaml diff --git a/lovelace/stretch-cameras/indoor-camera-view.yaml b/lovelace/stretch-cameras/indoor-camera-view.yaml new file mode 100644 index 0000000..c2ecec7 --- /dev/null +++ b/lovelace/stretch-cameras/indoor-camera-view.yaml @@ -0,0 +1,6 @@ +title: Indoor Cameras +path: indoor-cameras +icon: mdi:home +panel: true +cards: + - !include /config/lovelace/stretch-cameras/indoor-camera-cycler.yaml \ No newline at end of file diff --git a/lovelace/stretch-cameras/kitchen-card.yaml b/lovelace/stretch-cameras/kitchen-card.yaml new file mode 100644 index 0000000..afce10a --- /dev/null +++ b/lovelace/stretch-cameras/kitchen-card.yaml @@ -0,0 +1,41 @@ +type: custom:frigate-card +cameras: + - camera_entity: camera.frigate_cam12 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam12_sub + icon: mdi:fridge + title: Kitchen + id: kitchen +live: + auto_mute: all + layout: + fit: fill + preload: true + draggable: true + show_image_during_load: false + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none +menu: + buttons: + frigate: + enabled: false + style: none +media_viewer: + draggable: false + lazy_load: false +dimensions: + aspect_ratio_mode: static + aspect_ratio: '16:9' +view: + actions: + tap_action: + action: more-info \ No newline at end of file diff --git a/lovelace/stretch-cameras/kitchen-view.yaml b/lovelace/stretch-cameras/kitchen-view.yaml new file mode 100644 index 0000000..7f9835b --- /dev/null +++ b/lovelace/stretch-cameras/kitchen-view.yaml @@ -0,0 +1,6 @@ +title: Kitchen Camera +path: kitchen-camera +icon: mdi:fridge +type: panel +cards: + - !include /config/lovelace/stretch-cameras/kitchen-card.yaml \ No newline at end of file diff --git a/lovelace/stretch-cameras/master-bedroom-card.yaml b/lovelace/stretch-cameras/master-bedroom-card.yaml new file mode 100644 index 0000000..b69b208 --- /dev/null +++ b/lovelace/stretch-cameras/master-bedroom-card.yaml @@ -0,0 +1,14 @@ +type: vertical-stack +cards: + - type: conditional + conditions: + - entity: input_select.master_bedroom_camera + state: Left + card: + !include /config/lovelace/stretch-cameras/master-bedroom-left-card.yaml + - type: conditional + conditions: + - entity: input_select.master_bedroom_camera + state: Right + card: + !include /config/lovelace/stretch-cameras/master-bedroom-right-card.yaml diff --git a/lovelace/stretch-cameras/master-bedroom-left-card.yaml b/lovelace/stretch-cameras/master-bedroom-left-card.yaml new file mode 100644 index 0000000..f09076e --- /dev/null +++ b/lovelace/stretch-cameras/master-bedroom-left-card.yaml @@ -0,0 +1,41 @@ +type: custom:frigate-card +cameras: + - camera_entity: camera.frigate_cam06 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam06_sub + icon: mdi:bed-queen + title: MBR Left + id: mbr_left +live: + auto_mute: all + layout: + fit: fill + preload: true + draggable: true + show_image_during_load: false + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none +menu: + buttons: + frigate: + enabled: false + style: none +media_viewer: + draggable: false + lazy_load: false +dimensions: + aspect_ratio_mode: static + aspect_ratio: '16:9' +view: + actions: + tap_action: + action: more-info \ No newline at end of file diff --git a/lovelace/stretch-cameras/master-bedroom-left-view.yaml b/lovelace/stretch-cameras/master-bedroom-left-view.yaml new file mode 100644 index 0000000..7c17794 --- /dev/null +++ b/lovelace/stretch-cameras/master-bedroom-left-view.yaml @@ -0,0 +1,6 @@ +title: Master Bedroom Left +path: mbr-camera-left +icon: mdi:bed-king +panel: true +cards: + - !include /config/lovelace/stretch-cameras/master-bedroom-left-card.yaml \ No newline at end of file diff --git a/lovelace/stretch-cameras/master-bedroom-right-card.yaml b/lovelace/stretch-cameras/master-bedroom-right-card.yaml new file mode 100644 index 0000000..b196c1b --- /dev/null +++ b/lovelace/stretch-cameras/master-bedroom-right-card.yaml @@ -0,0 +1,41 @@ +type: custom:frigate-card +cameras: + - camera_entity: camera.frigate_cam07 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam07_sub + icon: mdi:bed-queen + title: MBR Right + id: mbr_right +live: + auto_mute: all + layout: + fit: fill + preload: true + draggable: true + show_image_during_load: false + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none +menu: + buttons: + frigate: + enabled: false + style: none +media_viewer: + draggable: false + lazy_load: false +dimensions: + aspect_ratio_mode: static + aspect_ratio: '16:9' +view: + actions: + tap_action: + action: more-info \ No newline at end of file diff --git a/lovelace/stretch-cameras/master-bedroom-right-view.yaml b/lovelace/stretch-cameras/master-bedroom-right-view.yaml new file mode 100644 index 0000000..093dcab --- /dev/null +++ b/lovelace/stretch-cameras/master-bedroom-right-view.yaml @@ -0,0 +1,6 @@ +title: Master Bedroom Right +path: mbr-camera-right +icon: mdi:bed-king +panel: true +cards: + - !include /config/lovelace/stretch-cameras/master-bedroom-right-card.yaml \ No newline at end of file diff --git a/lovelace/stretch-cameras/master-bedroom-view.yaml b/lovelace/stretch-cameras/master-bedroom-view.yaml new file mode 100644 index 0000000..addcae3 --- /dev/null +++ b/lovelace/stretch-cameras/master-bedroom-view.yaml @@ -0,0 +1,6 @@ +title: Master Bedroom Cameras +path: mbr-camera +icon: mdi:bed-king +panel: true +cards: + - !include /config/lovelace/stretch-cameras/master-bedroom-card.yaml \ No newline at end of file diff --git a/lovelace/stretch-cameras/nursery-card.yaml b/lovelace/stretch-cameras/nursery-card.yaml new file mode 100644 index 0000000..6de9d59 --- /dev/null +++ b/lovelace/stretch-cameras/nursery-card.yaml @@ -0,0 +1,41 @@ +type: custom:frigate-card +cameras: + - camera_entity: camera.frigate_cam08 + live_provider: go2rtc + go2rtc: + modes: + - webrtc + stream: rtsp_cam08_sub + icon: mdi:bunk-bed + title: Nursery + id: nursery +live: + auto_mute: all + layout: + fit: fill + preload: true + draggable: true + show_image_during_load: false + lazy_load: false + controls: + title: + mode: none + timeline: + mode: none + thumbnails: + mode: none +menu: + buttons: + frigate: + enabled: false + style: none +media_viewer: + draggable: false + lazy_load: false +dimensions: + aspect_ratio_mode: static + aspect_ratio: '16:9' +view: + actions: + tap_action: + action: more-info \ No newline at end of file diff --git a/lovelace/stretch-cameras/nursery-view.yaml b/lovelace/stretch-cameras/nursery-view.yaml new file mode 100644 index 0000000..5be7b34 --- /dev/null +++ b/lovelace/stretch-cameras/nursery-view.yaml @@ -0,0 +1,6 @@ +title: Nursery Camera +path: nursery-camera +icon: mdi:bunk-bed +type: panel +cards: + - !include /config/lovelace/stretch-cameras/nursery-card.yaml \ No newline at end of file diff --git a/lovelace/stretch-cameras/outdoor-camera-cycler.yaml b/lovelace/stretch-cameras/outdoor-camera-cycler.yaml new file mode 100644 index 0000000..3ee1969 --- /dev/null +++ b/lovelace/stretch-cameras/outdoor-camera-cycler.yaml @@ -0,0 +1,26 @@ +type: vertical-stack +cards: + - type: conditional + conditions: + - entity: input_select.outdoor_camera_cycle + state: Garage + card: + !include /config/lovelace/stretch-cameras/garage-card.yaml + - type: conditional + conditions: + - entity: input_select.outdoor_camera_cycle + state: Back Yard + card: + !include /config/lovelace/stretch-cameras/back-yard-card.yaml + - type: conditional + conditions: + - entity: input_select.outdoor_camera_cycle + state: Front Porch + card: + !include /config/lovelace/stretch-cameras/front-porch-card.yaml + - type: conditional + conditions: + - entity: input_select.outdoor_camera_cycle + state: Front Yard + card: + !include /config/lovelace/stretch-cameras/front-yard-card.yaml \ No newline at end of file diff --git a/lovelace/stretch-cameras/outdoor-camera-view.yaml b/lovelace/stretch-cameras/outdoor-camera-view.yaml new file mode 100644 index 0000000..74d67ec --- /dev/null +++ b/lovelace/stretch-cameras/outdoor-camera-view.yaml @@ -0,0 +1,6 @@ +title: Outdoor Cameras +path: outdoor-cameras +icon: mdi:home-outline +panel: true +cards: + - !include /config/lovelace/stretch-cameras/outdoor-camera-cycler.yaml \ No newline at end of file diff --git a/lovelace/templates/back-yard-camera-presets-grid.yaml b/lovelace/templates/back-yard-camera-presets-grid.yaml new file mode 100644 index 0000000..2f15a7b --- /dev/null +++ b/lovelace/templates/back-yard-camera-presets-grid.yaml @@ -0,0 +1,90 @@ +square: false +columns: 2 +type: grid +cards: + # - Deck + # - Sandbox + # - Grove + # - Grass + # - Yard + # - Stairs + # - BesideStairs + - show_name: true + show_icon: false + show_state: true + type: button + entity: input_select.camera14_preset + name: Presets + icon_height: 25px + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: toggle + entity: switch.deck_power_plug + name: Power + - show_name: true + show_icon: true + type: button + tap_action: + action: toggle + entity: input_button.cam14_ptz_preset_1 + name: Deck + icon_height: 25px + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: toggle + entity: input_button.cam14_ptz_preset_2 + name: Sandbox + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: toggle + entity: input_button.cam14_ptz_preset_4 + name: Grove + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: toggle + entity: input_button.cam14_ptz_preset_7 + name: Grass + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: toggle + entity: input_button.cam14_ptz_preset_3 + name: Yard + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: toggle + entity: input_button.cam14_ptz_preset_5 + name: Stairs + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: toggle + entity: input_button.cam14_ptz_preset_6 + name: BesideStairs + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: toggle + entity: input_boolean.cycle_cam14 + name: Cycle \ No newline at end of file diff --git a/lovelace/templates/back-yard-camera-presets.yaml b/lovelace/templates/back-yard-camera-presets.yaml new file mode 100644 index 0000000..0dbe3fb --- /dev/null +++ b/lovelace/templates/back-yard-camera-presets.yaml @@ -0,0 +1,66 @@ +type: vertical-stack +cards: + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: toggle + entity: input_button.cam14_ptz_preset_1 + name: Deck + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: toggle + entity: input_button.cam14_ptz_preset_2 + name: Sandbox + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: toggle + entity: input_button.cam14_ptz_preset_3 + name: Yard + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: toggle + entity: input_button.cam14_ptz_preset_4 + name: Grove + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: toggle + entity: input_button.cam14_ptz_preset_5 + name: Stairs + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: toggle + entity: input_button.cam14_ptz_preset_6 + name: BesideStairs + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: toggle + entity: input_button.cam14_ptz_preset_5 + name: Grass + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: toggle + entity: input_boolean.cycle_cam14 + name: Cycle diff --git a/lovelace/templates/card-mini-media-player.yaml b/lovelace/templates/card-mini-media-player.yaml new file mode 100644 index 0000000..d9ba305 --- /dev/null +++ b/lovelace/templates/card-mini-media-player.yaml @@ -0,0 +1,76 @@ +type: custom:mini-media-player +entity: media_player.ytube_music_player +artwork: cover +hide: + shuffle: false + icon_state: false + repeat: false + name: true + icon: true + power: true +shortcuts: + columns: 3 + hide_when_off: false + buttons: + - name: Inside + type: source + id: all_speakers + icon: mdi:rug + - name: Outside + type: source + id: media_player.outside + icon: mdi:grass + - name: Everywhere + type: source + id: inside_and_outside + - name: Upstairs + type: source + id: all_upstairs_speakers + icon: mdi:home-floor-1 + - name: Downstairs + type: source + id: all_downstairs_speakers + icon: mdi:home-floor-b + - name: Nursery + type: source + id: nursery_hub + icon: mdi:bunk-bed + - name: Timeless + type: playlist + id: RDCLAK5uy_mH5mS2pbI9c743F2Xoi7WxRVBbw7k3hPE + icon: mdi:clock + - name: Goodnight + type: playlist + id: PLtfKVM9o2_5ag5qC9nHxl7tKBvGRnh2HM + icon: mdi:sleep + - name: Dance Games + type: playlist + id: PLtfKVM9o2_5YBQCwU-6NeAAuonxHfZ7ff + icon: mdi:dance-ballroom + - name: Country + type: playlist + id: PLtfKVM9o2_5YBQCwU-6NeAAuonxHfZ7ff + icon: mdi:cow + - name: Exercise + type: playlist + id: PLtfKVM9o2_5YBQCwU-6NeAAuonxHfZ7ff + icon: mdi:weight-lifter + - name: Disney + type: playlist + id: RDCLAK5uy_nwGVTzraBvAR-wPGHBPeqp4Qb139ns16Y + icon: mdi:castle + - name: My Likes + type: channel + id: Your Likes + icon: mdi:thumb-up + - name: Classic Rock + type: playlist + id: RDCLAK5uy_nZiG9ehz_MQoWQxY5yElsLHCcG0tv9PRg + icon: mdi:guitar-acoustic + - name: Concentrate + type: playlist + id: PLtfKVM9o2_5ZnAHaOSKRoN1bU3QIMxqvR + icon: mdi:brain +icon: mdi:music +volume_stateless: false +toggle_power: true diff --git a/lovelace/templates/computer-area-frigate-camera.yaml b/lovelace/templates/computer-area-frigate-camera.yaml new file mode 100644 index 0000000..d469fea --- /dev/null +++ b/lovelace/templates/computer-area-frigate-camera.yaml @@ -0,0 +1,46 @@ +title: Computer Area Camera +path: computer-area-camera +icon: mdi:desktop-classic +panel: true +cards: + - type: vertical-stack + cards: + - type: vertical-stack + cards: + - type: custom:frigate-card + cameras: + - camera_entity: camera.frigate_cam03 + camera_name: frigate_cam03 + zone: computer_area + label: person + frigate_url: http://192.168.1.7:5000 + title: Computer Area + icon: mdi:desktop-classic + live_provider: ha + view: + default: live + event_gallery: + min_columns: 2 + menu: + mode: above + buttons: + clips: false + download: false + frigate_ui: false + live: + controls: + next_previous: + style: chevrons + thumbnails: + mode: below + media: snapshots + draggable: false + lazy_load: false + preload: false + lazy_unload: false + event_viewer: + controls: + next_previous: + style: chevrons + + - !include /config/lovelace/templates/room-selector.yaml diff --git a/lovelace/templates/front-room-roku-card.yaml b/lovelace/templates/front-room-roku-card.yaml new file mode 100644 index 0000000..826119f --- /dev/null +++ b/lovelace/templates/front-room-roku-card.yaml @@ -0,0 +1,369 @@ +type: vertical-stack +cards: + - type: custom:roku-card + entity: media_player.front_room_tv + tv: true + name: Front Room + apps: + - image: /local/netflix-icon.png + app: Netflix + tap_action: + action: call-service + service: media_player.select_source + service_data: + entity_id: media_player.front_room_tv + source: Netflix + - image: /local/youtube-icon.png + app: YouTube + tap_action: + action: call-service + service: media_player.select_source + service_data: + source: YouTube + entity_id: media_player.front_room_tv + # - image: /local/baby-yoda.png + # app: Disney Plus + # tap_action: + # action: call-service + # service: media_player.select_source + # service_data: + # source: Disney Plus + # entity_id: media_player.front_room_tv + - image: /local/primevideo-icon.png + app: Prime Video + tap_action: + action: call-service + service: media_player.select_source + service_data: + source: Prime Video + entity_id: media_player.front_room_tv + - icon: mdi:light-flood-down + tap_action: + action: call-service + service: input_boolean.toggle + service_data: + entity_id: input_boolean.front_room_light_cycle + volume_up: + tap_action: + action: call-service + service: remote.send_command + service_data: + entity_id: remote.front_room_tv + command: volume_up + volume_down: + tap_action: + action: call-service + service: remote.send_command + service_data: + entity_id: remote.front_room_tv + command: volume_down + + - type: vertical-stack + cards: + - type: custom:mushroom-entity-card + entity: input_boolean.lovelace_front_room_roku_keyboard + name: Keyboard + secondary_info: none + primary_info: none + tap_action: + action: toggle + layout: horizontal + - type: conditional + conditions: + - entity: input_boolean.lovelace_front_room_roku_keyboard + state: 'on' + card: + type: vertical-stack + cards: + - type: custom:mushroom-chips-card + alignment: center + chips: + - type: action + icon: mdi:numeric-1-box + tap_action: + action: call-service + service: rest_command.numeric_1_on_roku_1 + data: {} + target: {} + - type: action + icon: mdi:numeric-2-box + tap_action: + action: call-service + service: rest_command.numeric_2_on_roku_1 + data: {} + target: {} + - type: action + icon: mdi:numeric-3-box + tap_action: + action: call-service + service: rest_command.numeric_3_on_roku_1 + data: {} + target: {} + - type: action + icon: mdi:numeric-4-box + tap_action: + action: call-service + service: rest_command.numeric_4_on_roku_1 + data: {} + target: {} + - type: action + icon: mdi:numeric-5-box + tap_action: + action: call-service + service: rest_command.numeric_5_on_roku_1 + data: {} + target: {} + - type: action + icon: mdi:numeric-6-box + tap_action: + action: call-service + service: rest_command.numeric_6_on_roku_1 + data: {} + target: {} + - type: action + icon: mdi:numeric-7-box + tap_action: + action: call-service + service: rest_command.numeric_7_on_roku_1 + data: {} + target: {} + - type: action + icon: mdi:numeric-8-box + tap_action: + action: call-service + service: rest_command.numeric_8_on_roku_1 + data: {} + target: {} + - type: action + icon: mdi:numeric-9-box + tap_action: + action: call-service + service: rest_command.numeric_9_on_roku_1 + data: {} + target: {} + - type: action + icon: mdi:numeric-0-box + tap_action: + action: call-service + service: rest_command.numeric_0_on_roku_1 + data: {} + target: {} + - type: custom:mushroom-chips-card + alignment: center + chips: + - type: action + icon: 'mdi:alpha-q-box' + tap_action: + action: call-service + service: rest_command.lowercase_q_on_roku_1 + hold_action: + action: call-service + service: rest_command.uppercase_q_on_roku_1 + - type: action + icon: 'mdi:alpha-w-box' + tap_action: + action: call-service + service: rest_command.lowercase_w_on_roku_1 + hold_action: + action: call-service + service: rest_command.uppercase_w_on_roku_1 + - type: action + icon: 'mdi:alpha-e-box' + tap_action: + action: call-service + service: rest_command.lowercase_e_on_roku_1 + hold_action: + action: call-service + service: rest_command.uppercase_e_on_roku_1 + - type: action + icon: 'mdi:alpha-r-box' + tap_action: + action: call-service + service: rest_command.lowercase_r_on_roku_1 + hold_action: + action: call-service + service: rest_command.uppercase_r_on_roku_1 + - type: action + icon: 'mdi:alpha-t-box' + tap_action: + action: call-service + service: rest_command.lowercase_t_on_roku_1 + hold_action: + action: call-service + service: rest_command.uppercase_t_on_roku_1 + - type: action + icon: 'mdi:alpha-y-box' + tap_action: + action: call-service + service: rest_command.lowercase_y_on_roku_1 + hold_action: + action: call-service + service: rest_command.uppercase_y_on_roku_1 + - type: action + icon: 'mdi:alpha-u-box' + tap_action: + action: call-service + service: rest_command.lowercase_u_on_roku_1 + hold_action: + action: call-service + service: rest_command.uppercase_u_on_roku_1 + - type: action + icon: 'mdi:alpha-i-box' + tap_action: + action: call-service + service: rest_command.lowercase_i_on_roku_1 + hold_action: + action: call-service + service: rest_command.uppercase_i_on_roku_1 + - type: action + icon: 'mdi:alpha-o-box' + tap_action: + action: call-service + service: rest_command.lowercase_o_on_roku_1 + hold_action: + action: call-service + service: rest_command.uppercase_o_on_roku_1 + - type: action + icon: 'mdi:alpha-p-box' + tap_action: + action: call-service + service: rest_command.lowercase_p_on_roku_1 + hold_action: + action: call-service + service: rest_command.uppercase_p_on_roku_1 + + - type: custom:mushroom-chips-card + alignment: center + chips: + - type: action + icon: 'mdi:alpha-a-box' + tap_action: + action: call-service + service: rest_command.lowercase_a_on_roku_1 + hold_action: + action: call-service + service: rest_command.uppercase_a_on_roku_1 + - type: action + icon: 'mdi:alpha-s-box' + tap_action: + action: call-service + service: rest_command.lowercase_s_on_roku_1 + hold_action: + action: call-service + service: rest_command.uppercase_s_on_roku_1 + - type: action + icon: 'mdi:alpha-d-box' + tap_action: + action: call-service + service: rest_command.lowercase_d_on_roku_1 + hold_action: + action: call-service + service: rest_command.uppercase_d_on_roku_1 + - type: action + icon: 'mdi:alpha-f-box' + tap_action: + action: call-service + service: rest_command.lowercase_f_on_roku_1 + hold_action: + action: call-service + service: rest_command.uppercase_f_on_roku_1 + - type: action + icon: 'mdi:alpha-g-box' + tap_action: + action: call-service + service: rest_command.lowercase_g_on_roku_1 + hold_action: + action: call-service + service: rest_command.uppercase_g_on_roku_1 + - type: action + icon: 'mdi:alpha-h-box' + tap_action: + action: call-service + service: rest_command.lowercase_h_on_roku_1 + hold_action: + action: call-service + service: rest_command.uppercase_h_on_roku_1 + - type: action + icon: 'mdi:alpha-j-box' + tap_action: + action: call-service + service: rest_command.lowercase_j_on_roku_1 + hold_action: + action: call-service + service: rest_command.uppercase_j_on_roku_1 + - type: action + icon: 'mdi:alpha-k-box' + tap_action: + action: call-service + service: rest_command.lowercase_k_on_roku_1 + hold_action: + action: call-service + service: rest_command.uppercase_k_on_roku_1 + - type: action + icon: 'mdi:alpha-l-box' + tap_action: + action: call-service + service: rest_command.lowercase_l_on_roku_1 + hold_action: + action: call-service + service: rest_command.uppercase_l_on_roku_1 + + - type: custom:mushroom-chips-card + alignment: center + chips: + - type: action + icon: 'mdi:alpha-z-box' + tap_action: + action: call-service + service: rest_command.lowercase_z_on_roku_1 + hold_action: + action: call-service + service: rest_command.uppercase_z_on_roku_1 + - type: action + icon: 'mdi:alpha-x-box' + tap_action: + action: call-service + service: rest_command.lowercase_x_on_roku_1 + hold_action: + action: call-service + service: rest_command.uppercase_x_on_roku_1 + - type: action + icon: 'mdi:alpha-c-box' + tap_action: + action: call-service + service: rest_command.lowercase_c_on_roku_1 + hold_action: + action: call-service + service: rest_command.uppercase_c_on_roku_1 + - type: action + icon: 'mdi:alpha-v-box' + tap_action: + action: call-service + service: rest_command.lowercase_v_on_roku_1 + hold_action: + action: call-service + service: rest_command.uppercase_v_on_roku_1 + - type: action + icon: 'mdi:alpha-b-box' + tap_action: + action: call-service + service: rest_command.lowercase_b_on_roku_1 + hold_action: + action: call-service + service: rest_command.uppercase_b_on_roku_1 + - type: action + icon: 'mdi:alpha-n-box' + tap_action: + action: call-service + service: rest_command.lowercase_n_on_roku_1 + hold_action: + action: call-service + service: rest_command.uppercase_n_on_roku_1 + - type: action + icon: 'mdi:alpha-m-box' + tap_action: + action: call-service + service: rest_command.lowercase_m_on_roku_1 + hold_action: + action: call-service + service: rest_command.uppercase_m_on_roku_1 diff --git a/lovelace/templates/great-room-roku-card.yaml b/lovelace/templates/great-room-roku-card.yaml new file mode 100644 index 0000000..40ac1fd --- /dev/null +++ b/lovelace/templates/great-room-roku-card.yaml @@ -0,0 +1,387 @@ +type: vertical-stack +cards: + - type: 'custom:roku-card' + entity: media_player.downstairs_roku + tv: true + name: Great Room + apps: + - image: /local/netflix-icon.png + app: Netflix + hold_action: + action: call-service + service: media_player.select_source + service_data: + entity_id: media_player.downstairs_roku + source: Netflix + + - image: /local/youtube-icon.png + app: YouTube + hold_action: + action: call-service + service: media_player.select_source + service_data: + source: "YouTube" + entity_id: media_player.downstairs_roku + + # - image: /local/baby-yoda.png + # app: Disney Plus + # hold_action: + # action: call-service + # service: media_player.select_source + # service_data: + # source: "Disney Plus" + # entity_id: media_player.downstairs_roku + + - image: /local/primevideo-icon.png + app: Prime Video + hold_action: + action: call-service + service: media_player.select_source + service_data: + source: "Prime Video" + entity_id: media_player.downstairs_roku + + - icon: mdi:light-flood-down + tap_action: + action: call-service + service: input_boolean.toggle + service_data: + entity_id: input_boolean.great_room_light_cycle + + power: + tap_action: + action: call-service + service: switch.toggle + service_data: + entity_id: switch.shelly_projector + + hold_action: + action: call-service + service: switch.toggle + service_data: + entity_id: switch.shelly_projector + + volume_up: + tap_action: + action: call-service + service: remote.send_command + service_data: + entity_id: remote.downstairs_roku + command: volume_up + volume_down: + tap_action: + action: call-service + service: remote.send_command + service_data: + entity_id: remote.downstairs_roku + command: volume_down + + - type: vertical-stack + cards: + - type: custom:mushroom-entity-card + entity: input_boolean.lovelace_great_room_roku_keyboard + name: Keyboard + secondary_info: none + primary_info: none + tap_action: + action: toggle + layout: horizontal + - type: conditional + conditions: + - entity: input_boolean.lovelace_great_room_roku_keyboard + state: 'on' + card: + type: vertical-stack + cards: + - type: custom:mushroom-chips-card + alignment: center + chips: + - type: action + icon: mdi:numeric-1-box + tap_action: + action: call-service + service: rest_command.numeric_1_on_roku_2 + data: {} + target: {} + - type: action + icon: mdi:numeric-2-box + tap_action: + action: call-service + service: rest_command.numeric_2_on_roku_2 + data: {} + target: {} + - type: action + icon: mdi:numeric-3-box + tap_action: + action: call-service + service: rest_command.numeric_3_on_roku_2 + data: {} + target: {} + - type: action + icon: mdi:numeric-4-box + tap_action: + action: call-service + service: rest_command.numeric_4_on_roku_2 + data: {} + target: {} + - type: action + icon: mdi:numeric-5-box + tap_action: + action: call-service + service: rest_command.numeric_5_on_roku_2 + data: {} + target: {} + - type: action + icon: mdi:numeric-6-box + tap_action: + action: call-service + service: rest_command.numeric_6_on_roku_2 + data: {} + target: {} + - type: action + icon: mdi:numeric-7-box + tap_action: + action: call-service + service: rest_command.numeric_7_on_roku_2 + data: {} + target: {} + - type: action + icon: mdi:numeric-8-box + tap_action: + action: call-service + service: rest_command.numeric_8_on_roku_2 + data: {} + target: {} + - type: action + icon: mdi:numeric-9-box + tap_action: + action: call-service + service: rest_command.numeric_9_on_roku_2 + data: {} + target: {} + - type: action + icon: mdi:numeric-0-box + tap_action: + action: call-service + service: rest_command.numeric_0_on_roku_2 + data: {} + target: {} + - type: custom:mushroom-chips-card + alignment: center + chips: + - type: action + icon: 'mdi:alpha-q-box' + tap_action: + action: call-service + service: rest_command.lowercase_q_on_roku_2 + hold_action: + action: call-service + service: rest_command.uppercase_q_on_roku_2 + - type: action + icon: 'mdi:alpha-w-box' + tap_action: + action: call-service + service: rest_command.lowercase_w_on_roku_2 + hold_action: + action: call-service + service: rest_command.uppercase_w_on_roku_2 + - type: action + icon: 'mdi:alpha-e-box' + tap_action: + action: call-service + service: rest_command.lowercase_e_on_roku_2 + hold_action: + action: call-service + service: rest_command.uppercase_e_on_roku_2 + - type: action + icon: 'mdi:alpha-r-box' + tap_action: + action: call-service + service: rest_command.lowercase_r_on_roku_2 + hold_action: + action: call-service + service: rest_command.uppercase_r_on_roku_2 + - type: action + icon: 'mdi:alpha-t-box' + tap_action: + action: call-service + service: rest_command.lowercase_t_on_roku_2 + hold_action: + action: call-service + service: rest_command.uppercase_t_on_roku_2 + - type: action + icon: 'mdi:alpha-y-box' + tap_action: + action: call-service + service: rest_command.lowercase_y_on_roku_2 + hold_action: + action: call-service + service: rest_command.uppercase_y_on_roku_2 + - type: action + icon: 'mdi:alpha-u-box' + tap_action: + action: call-service + service: rest_command.lowercase_u_on_roku_2 + hold_action: + action: call-service + service: rest_command.uppercase_u_on_roku_2 + - type: action + icon: 'mdi:alpha-i-box' + tap_action: + action: call-service + service: rest_command.lowercase_i_on_roku_2 + hold_action: + action: call-service + service: rest_command.uppercase_i_on_roku_2 + - type: action + icon: 'mdi:alpha-o-box' + tap_action: + action: call-service + service: rest_command.lowercase_o_on_roku_2 + hold_action: + action: call-service + service: rest_command.uppercase_o_on_roku_2 + - type: action + icon: 'mdi:alpha-p-box' + tap_action: + action: call-service + service: rest_command.lowercase_p_on_roku_2 + hold_action: + action: call-service + service: rest_command.uppercase_p_on_roku_2 + + - type: custom:mushroom-chips-card + alignment: center + chips: + - type: action + icon: 'mdi:alpha-a-box' + tap_action: + action: call-service + service: rest_command.lowercase_a_on_roku_2 + hold_action: + action: call-service + service: rest_command.uppercase_a_on_roku_2 + - type: action + icon: 'mdi:alpha-s-box' + tap_action: + action: call-service + service: rest_command.lowercase_s_on_roku_2 + hold_action: + action: call-service + service: rest_command.uppercase_s_on_roku_2 + - type: action + icon: 'mdi:alpha-d-box' + tap_action: + action: call-service + service: rest_command.lowercase_d_on_roku_2 + hold_action: + action: call-service + service: rest_command.uppercase_d_on_roku_2 + - type: action + icon: 'mdi:alpha-f-box' + tap_action: + action: call-service + service: rest_command.lowercase_f_on_roku_2 + hold_action: + action: call-service + service: rest_command.uppercase_f_on_roku_2 + - type: action + icon: 'mdi:alpha-g-box' + tap_action: + action: call-service + service: rest_command.lowercase_g_on_roku_2 + hold_action: + action: call-service + service: rest_command.uppercase_g_on_roku_2 + - type: action + icon: 'mdi:alpha-h-box' + tap_action: + action: call-service + service: rest_command.lowercase_h_on_roku_2 + hold_action: + action: call-service + service: rest_command.uppercase_h_on_roku_2 + - type: action + icon: 'mdi:alpha-j-box' + tap_action: + action: call-service + service: rest_command.lowercase_j_on_roku_2 + hold_action: + action: call-service + service: rest_command.uppercase_j_on_roku_2 + - type: action + icon: 'mdi:alpha-k-box' + tap_action: + action: call-service + service: rest_command.lowercase_k_on_roku_2 + hold_action: + action: call-service + service: rest_command.uppercase_k_on_roku_2 + - type: action + icon: 'mdi:alpha-l-box' + tap_action: + action: call-service + service: rest_command.lowercase_l_on_roku_2 + hold_action: + action: call-service + service: rest_command.uppercase_l_on_roku_2 + + - type: custom:mushroom-chips-card + alignment: center + chips: + - type: action + icon: 'mdi:alpha-z-box' + tap_action: + action: call-service + service: rest_command.lowercase_z_on_roku_2 + hold_action: + action: call-service + service: rest_command.uppercase_z_on_roku_2 + - type: action + icon: 'mdi:alpha-x-box' + tap_action: + action: call-service + service: rest_command.lowercase_x_on_roku_2 + hold_action: + action: call-service + service: rest_command.uppercase_x_on_roku_2 + - type: action + icon: 'mdi:alpha-c-box' + tap_action: + action: call-service + service: rest_command.lowercase_c_on_roku_2 + hold_action: + action: call-service + service: rest_command.uppercase_c_on_roku_2 + - type: action + icon: 'mdi:alpha-v-box' + tap_action: + action: call-service + service: rest_command.lowercase_v_on_roku_2 + hold_action: + action: call-service + service: rest_command.uppercase_v_on_roku_2 + - type: action + icon: 'mdi:alpha-b-box' + tap_action: + action: call-service + service: rest_command.lowercase_b_on_roku_2 + hold_action: + action: call-service + service: rest_command.uppercase_b_on_roku_2 + - type: action + icon: 'mdi:alpha-n-box' + tap_action: + action: call-service + service: rest_command.lowercase_n_on_roku_2 + hold_action: + action: call-service + service: rest_command.uppercase_n_on_roku_2 + - type: action + icon: 'mdi:alpha-m-box' + tap_action: + action: call-service + service: rest_command.lowercase_m_on_roku_2 + hold_action: + action: call-service + service: rest_command.uppercase_m_on_roku_2 diff --git a/lovelace/templates/indoor-camera-cycler.yaml b/lovelace/templates/indoor-camera-cycler.yaml new file mode 100644 index 0000000..8528a0e --- /dev/null +++ b/lovelace/templates/indoor-camera-cycler.yaml @@ -0,0 +1,37 @@ +type: vertical-stack +cards: + - type: conditional + conditions: + - entity: input_select.indoor_camera_cycle + state: Blue Room + card: !include /config/lovelace/raw-cameras/blue-room-card.yaml + - type: conditional + conditions: + - entity: input_select.indoor_camera_cycle + state: Computer Area + card: !include /config/lovelace/raw-cameras/computer-area-card.yaml + - type: conditional + conditions: + - entity: input_select.indoor_camera_cycle + state: Bedroom Left + card: !include /config/lovelace/raw-cameras/master-bedroom-left-card.yaml + - type: conditional + conditions: + - entity: input_select.indoor_camera_cycle + state: Bedroom Right + card: !include /config/lovelace/raw-cameras/master-bedroom-right-card.yaml + - type: conditional + conditions: + - entity: input_select.indoor_camera_cycle + state: Nursery + card: !include /config/lovelace/raw-cameras/nursery-card.yaml + - type: conditional + conditions: + - entity: input_select.indoor_camera_cycle + state: Kitchen + card: !include /config/lovelace/raw-cameras/kitchen-card.yaml + - type: conditional + conditions: + - entity: input_select.indoor_camera_cycle + state: Front Room + card: !include /config/lovelace/raw-cameras/front-room-card.yaml diff --git a/lovelace/templates/nws_alerts_tab.yaml b/lovelace/templates/nws_alerts_tab.yaml new file mode 100644 index 0000000..b0f7ae1 --- /dev/null +++ b/lovelace/templates/nws_alerts_tab.yaml @@ -0,0 +1,151 @@ +######################################################################################### +title: "Alerts" + +type: custom:vertical-layout +layout: + max_cols: 4 +cards: + - type: custom:stack-in-card + cards: + - type: entities + title: Severe Weather Alerts + show_header_toggle: false + entities: sensor.nws_alerts + - type: conditional + conditions: + - entity: sensor.nws_alerts + state_not: '0' + card: + type: markdown + content: > + --- + + # NWS First Active Alert + {% if state_attr('sensor.nws_alerts', 'title') != None and state_attr('sensor.nws_alerts', 'title').split(' - ')[0] is defined %} + + ## {{ states.sensor.nws_alerts.attributes.title.split(' - ')[0] }} + + {{ state_attr('sensor.nws_alerts', 'display_desc').split('\n\n-\n\n')[0] }} + + {% else %} + none + {% endif %} + - type: conditional + conditions: + - entity: sensor.nws_alerts + state_not: "0" + - entity: sensor.nws_alerts + state_not: "1" + card: + type: markdown + content: > + --- + + # NWS Second Active Alert + {% if state_attr('sensor.nws_alerts', 'title').split(' - ')[1] is defined %} + + ## {{ states.sensor.nws_alerts.attributes.title.split(' - ')[1] }} + + {{ state_attr('sensor.nws_alerts', 'display_desc').split('\n\n-\n\n')[1] }} + + {% else %} + none + {% endif %} + - type: conditional + conditions: + - entity: sensor.nws_alerts + state_not: "0" + - entity: sensor.nws_alerts + state_not: "1" + - entity: sensor.nws_alerts + state_not: "2" + card: + type: markdown + content: > + --- + + # NWS Third Active Alert + {% if state_attr('sensor.nws_alerts', 'title').split(' - ')[2] is defined %} + + ## {{ states.sensor.nws_alerts.attributes.title.split(' - ')[2] }} + + {{ state_attr('sensor.nws_alerts', 'display_desc').split('\n\n-\n\n')[2] }} + + {% else %} + none + {% endif %} + - type: conditional + conditions: + - entity: sensor.nws_alerts + state_not: "0" + - entity: sensor.nws_alerts + state_not: "1" + - entity: sensor.nws_alerts + state_not: "2" + - entity: sensor.nws_alerts + state_not: "3" + card: + type: markdown + content: > + --- + + # NWS Fourth Active Alert + {% if state_attr('sensor.nws_alerts', 'title').split(' - ')[3] is defined %} + + ## {{ states.sensor.nws_alerts.attributes.title.split(' - ')[3] }} + + {{ state_attr('sensor.nws_alerts', 'display_desc').split('\n\n-\n\n')[3] }} + + {% else %} + none + {% endif %} + - type: conditional + conditions: + - entity: sensor.nws_alerts + state_not: "0" + - entity: sensor.nws_alerts + state_not: "1" + - entity: sensor.nws_alerts + state_not: "2" + - entity: sensor.nws_alerts + state_not: "3" + - entity: sensor.nws_alerts + state_not: "4" + card: + type: markdown + content: > + --- + + # NWS Fifth Active Alert + {% if state_attr('sensor.nws_alerts', 'title').split(' - ')[4] is defined %} + + ## {{ states.sensor.nws_alerts.attributes.title.split(' - ')[4] }} + + {{ state_attr('sensor.nws_alerts', 'display_desc').split('\n\n-\n\n')[4] }} + + {% else %} + none + {% endif %} + + - type: entities + title: NWS Alerts History + show_header_toggle: false + state_color: true + entities: + - variable.nws_alerts_event_ids + - type: custom:entity-attributes-card + heading_name: Name + heading_state: State + entity: variable.nws_alerts_event_ids + filter: + include: + - variable.nws_alerts_event_ids.history_1 + - variable.nws_alerts_event_ids.history_2 + - variable.nws_alerts_event_ids.history_3 + - variable.nws_alerts_event_ids.history_4 + - variable.nws_alerts_event_ids.history_5 + - variable.nws_alerts_event_ids.history_6 + - variable.nws_alerts_event_ids.history_7 + - variable.nws_alerts_event_ids.history_8 + - variable.nws_alerts_event_ids.history_9 + - variable.nws_alerts_event_ids.history_10 \ No newline at end of file diff --git a/lovelace/templates/outdoor-camera-cycler.yaml b/lovelace/templates/outdoor-camera-cycler.yaml new file mode 100644 index 0000000..b179494 --- /dev/null +++ b/lovelace/templates/outdoor-camera-cycler.yaml @@ -0,0 +1,26 @@ +type: vertical-stack +cards: + - type: conditional + conditions: + - entity: input_select.outdoor_camera_cycle + state: Garage + card: + !include /config/lovelace/raw-cameras/garage-card.yaml + - type: conditional + conditions: + - entity: input_select.outdoor_camera_cycle + state: Back Yard + card: + !include /config/lovelace/raw-cameras/back-yard-card.yaml + - type: conditional + conditions: + - entity: input_select.outdoor_camera_cycle + state: Front Yard + card: + !include /config/lovelace/raw-cameras/front-yard-card.yaml + - type: conditional + conditions: + - entity: input_select.outdoor_camera_cycle + state: Front Porch + card: + !include /config/lovelace/raw-cameras/front-porch-card.yaml diff --git a/lovelace/templates/radar-camera.yaml b/lovelace/templates/radar-camera.yaml new file mode 100644 index 0000000..fdb8695 --- /dev/null +++ b/lovelace/templates/radar-camera.yaml @@ -0,0 +1,17 @@ +type: vertical-stack +cards: + - type: conditional + conditions: + - entity: binary_sensor.precipitation_likely + state: 'on' + card: + type: iframe + url: >- + https://embed.windy.com/embed2.html?lat=42.534&lon=-85.842&detailLat=42.439&detailLon=-85.838&width=650&height=450&zoom=9&level=surface&overlay=radar&product=radar&menu=&message=&marker=&calendar=now&pressure=&type=map&location=coordinates&detail=&metricWind=default&metricTemp=default&radarRange=-1 + aspect_ratio: 75% + # show_state: false + # show_name: false + # camera_view: live + # type: picture-entity + # entity: camera.wunderground_radar + # camera_image: camera.wunderground_radar diff --git a/lovelace/templates/room-selector-vertical.yaml b/lovelace/templates/room-selector-vertical.yaml new file mode 100644 index 0000000..d12bd9a --- /dev/null +++ b/lovelace/templates/room-selector-vertical.yaml @@ -0,0 +1,79 @@ +type: horizontal-stack +cards: + - type: vertical-stack + cards: + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: navigate + navigation_path: /cams-yml/nursery-camera + entity: input_boolean.nursery_occupied + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: navigate + navigation_path: /cams-yml/front-room-camera + entity: input_boolean.front_room_occupied + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: navigate + navigation_path: /cams-yml/kitchen-camera + entity: input_boolean.kitchen_occupied + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: navigate + navigation_path: /cams-yml/computer-area-camera + entity: input_boolean.computer_area_occupied + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: navigate + navigation_path: /cams-yml/great-room-camera + entity: input_boolean.great_room_occupied + + - type: vertical-stack + cards: + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: navigate + navigation_path: /cams-yml/garage-camera + entity: input_boolean.garage_occupied + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: navigate + navigation_path: /cams-yml/front-porch-camera + entity: input_boolean.front_porch_occupied + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: navigate + navigation_path: /cams-yml/back-yard-camera + entity: input_boolean.back_yard_occupied + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: navigate + navigation_path: /cams-yml/mbr-camera + entity: input_boolean.master_bedroom_occupied \ No newline at end of file diff --git a/lovelace/templates/room-selector.yaml b/lovelace/templates/room-selector.yaml new file mode 100644 index 0000000..06d9521 --- /dev/null +++ b/lovelace/templates/room-selector.yaml @@ -0,0 +1,74 @@ +type: horizontal-stack +cards: + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: navigate + navigation_path: /cams-yml/computer-area-camera + entity: input_boolean.computer_area_occupied + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: navigate + navigation_path: /cams-yml/great-room-camera + entity: input_boolean.great_room_occupied + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: navigate + navigation_path: /cams-yml/nursery-camera + entity: input_boolean.nursery_occupied + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: navigate + navigation_path: /cams-yml/mbr-camera + entity: input_boolean.master_bedroom_occupied + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: navigate + navigation_path: /cams-yml/kitchen-camera + entity: input_boolean.kitchen_occupied + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: navigate + navigation_path: /cams-yml/back-yard-camera + entity: input_boolean.back_yard_occupied + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: navigate + navigation_path: /cams-yml/garage-camera + entity: input_boolean.garage_occupied + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: navigate + navigation_path: /cams-yml/front-room-camera + entity: input_boolean.front_room_occupied + - show_name: true + show_icon: true + type: button + icon_height: 25px + tap_action: + action: navigate + navigation_path: /cams-yml/front-porch-camera + entity: input_boolean.front_porch_occupied \ No newline at end of file diff --git a/lovelace/templates/view-ytube-media-player.yaml b/lovelace/templates/view-ytube-media-player.yaml new file mode 100644 index 0000000..a30b238 --- /dev/null +++ b/lovelace/templates/view-ytube-media-player.yaml @@ -0,0 +1,151 @@ +type: vertical-stack +cards: + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: input_select.ytube_music_player_playlist + name: Playlist + layout: vertical + hide_icon: true + primary_info: state + secondary_info: name + - type: custom:mushroom-entity-card + entity: input_select.ytube_music_player_speakers + name: Speakers + hide_icon: true + layout: vertical + primary_info: state + secondary_info: name + - type: horizontal-stack + cards: + - type: custom:mushroom-media-player-card + entity: media_player.ytube_music_player + name: YouTube Music Player + volume_controls: + - volume_mute + - volume_set + use_media_info: true + use_media_artwork: true + media_controls: + - on_off + - previous + - next + - play_pause_stop + - type: vertical-stack + cards: + - type: custom:mini-media-player + entity: media_player.ytube_music_player + artwork: cover + hide: + shuffle: false + icon_state: false + repeat: false + name: true + icon: true + power: true + shortcuts: + columns: 3 + hide_when_off: false + buttons: + - name: Inside + type: source + id: all_speakers + icon: mdi:rug + - name: Outside + type: source + id: media_player.outside + icon: mdi:grass + - name: Everywhere + type: source + id: inside_and_outside + - name: Upstairs + type: source + id: all_upstairs_speakers + icon: mdi:home-floor-1 + - name: Downstairs + type: source + id: all_downstairs_speakers + icon: mdi:home-floor-b + - name: Nursery + type: source + id: nursery_hub + icon: mdi:bunk-bed + - name: Timeless + type: playlist + id: RDCLAK5uy_mH5mS2pbI9c743F2Xoi7WxRVBbw7k3hPE + icon: mdi:clock + - name: Goodnight + type: playlist + id: PLtfKVM9o2_5ag5qC9nHxl7tKBvGRnh2HM + icon: mdi:sleep + - name: Dance Games + type: playlist + id: PLtfKVM9o2_5YBQCwU-6NeAAuonxHfZ7ff + icon: mdi:dance-ballroom + - name: Country + type: playlist + id: PLtfKVM9o2_5YBQCwU-6NeAAuonxHfZ7ff + icon: mdi:cow + - name: Exercise + type: playlist + id: PLtfKVM9o2_5YBQCwU-6NeAAuonxHfZ7ff + icon: mdi:weight-lifter + - name: Disney + type: playlist + id: RDCLAK5uy_nwGVTzraBvAR-wPGHBPeqp4Qb139ns16Y + icon: mdi:castle + - name: My Likes + type: channel + id: Your Likes + icon: mdi:thumb-up + - name: Classic Rock + type: playlist + id: RDCLAK5uy_nZiG9ehz_MQoWQxY5yElsLHCcG0tv9PRg + icon: mdi:guitar-acoustic + - name: Concentrate + type: playlist + id: PLtfKVM9o2_5ZnAHaOSKRoN1bU3QIMxqvR + icon: mdi:brain + icon: mdi:music + volume_stateless: false + toggle_power: true + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: input_boolean.ytube_music_player_playcontinuous + layout: vertical + hide_icon: true + name: Continuous? + - type: custom:mushroom-entity-card + entity: input_select.ytube_music_player_playmode + layout: vertical + hide_icon: true + - type: custom:mushroom-entity-card + entity: input_select.ytube_music_player_source + layout: vertical + hide_icon: true + - type: custom:button-card + styles: + card: + - height: 64px + state: + - operator: template + value: > + [[[ return states['media_player.ytube_music_player'].attributes.likeStatus + == "LIKE"]]] + icon: mdi:thumb-up + - operator: template + value: > + [[[ return states['media_player.ytube_music_player'].attributes.likeStatus + == "INDIFFERENT"]]] + icon: mdi:thumb-up-outline + - operator: default + icon: mdi:power-off + value: false + tap_action: + action: call-service + service: ytube_music_player.call_method + service_data: + entity_id: media_player.ytube_music_player + command: rate_track + parameters: thumb_toggle_up_middle \ No newline at end of file diff --git a/lovelace/view-ai-overview.yaml b/lovelace/view-ai-overview.yaml new file mode 100644 index 0000000..31573a4 --- /dev/null +++ b/lovelace/view-ai-overview.yaml @@ -0,0 +1,105 @@ +title: AI Overview +path: ai-overview +icon: mdi:eye +#type: sidebar +panel: true +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 + +cards: + - type: horizontal-stack + cards: + - type: vertical-stack + cards: + - type: grid + square: false + columns: 4 + cards: + - show_name: true + show_icon: true + type: button + tap_action: + action: call-service + service: input_select.select_previous + service_data: {} + target: + entity_id: input_select.indoor_camera_cycle + entity: '' + icon: mdi:arrow-left + icon_height: 25px + - show_name: false + show_icon: false + type: button + tap_action: + action: more-info + entity: input_select.indoor_camera_cycle + show_state: true + - show_name: false + show_icon: true + type: button + tap_action: + action: toggle + entity: input_boolean.indoor_camera_lock + show_state: true + icon_height: 25px + - show_name: true + show_icon: true + type: button + tap_action: + action: call-service + service: input_select.select_next + service_data: {} + target: + entity_id: input_select.indoor_camera_cycle + entity: '' + icon: mdi:arrow-right + icon_height: 25px + - !include /config/lovelace/templates/indoor-camera-cycler.yaml + + - type: vertical-stack + cards: + - type: grid + square: false + columns: 4 + cards: + - show_name: true + show_icon: true + type: button + tap_action: + action: call-service + service: input_select.select_previous + service_data: {} + target: + entity_id: input_select.outdoor_camera_cycle + entity: '' + icon: mdi:arrow-left + icon_height: 25px + - show_name: false + show_icon: false + type: button + tap_action: + action: more-info + entity: input_select.outdoor_camera_cycle + show_state: true + - show_name: false + show_icon: true + type: button + tap_action: + action: toggle + entity: input_boolean.outdoor_camera_lock + show_state: true + icon_height: 25px + - show_name: true + show_icon: true + type: button + tap_action: + action: call-service + service: input_select.select_next + service_data: {} + target: + entity_id: input_select.outdoor_camera_cycle + entity: '' + icon: mdi:arrow-right + icon_height: 25px + - !include /config/lovelace/templates/outdoor-camera-cycler.yaml diff --git a/lovelace/view-automatic_lights.yaml b/lovelace/view-automatic_lights.yaml new file mode 100644 index 0000000..d56d0cc --- /dev/null +++ b/lovelace/view-automatic_lights.yaml @@ -0,0 +1,86 @@ +title: Automatic Lights +path: automatic-lights +icon: mdi:light-switch +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 +cards: +- type: grid + cards: + - type: button + tap_action: + action: toggle + hold_action: + action: more-info + entity: input_boolean.front_room_automatic_lights + name: Front Room + - type: button + tap_action: + action: toggle + hold_action: + action: more-info + entity: input_boolean.kitchen_automatic_lights + name: Kitchen + - type: button + tap_action: + action: toggle + hold_action: + action: more-info + entity: input_boolean.dining_room_automatic_lights + name: Dining Room + - type: button + tap_action: + action: toggle + hold_action: + action: more-info + entity: input_boolean.master_bathroom_automatic_lights + name: Bathroom + - type: button + tap_action: + action: toggle + hold_action: + action: more-info + entity: input_boolean.nursery_automatic_lights + name: Nursery + - type: button + tap_action: + action: toggle + hold_action: + action: more-info + entity: input_boolean.master_bedroom_automatic_lights + name: Master Bedroom + - type: button + tap_action: + action: toggle + hold_action: + action: more-info + entity: input_boolean.entryway_automatic_lights + name: Entryway + - type: button + tap_action: + action: toggle + hold_action: + action: more-info + entity: input_boolean.computer_area_automatic_lights + name: Computer Area + - type: button + tap_action: + action: toggle + hold_action: + action: more-info + entity: input_boolean.great_room_automatic_lights + name: Great Room + - type: button + tap_action: + action: toggle + hold_action: + action: more-info + entity: input_boolean.utility_room_automatic_lights + name: Utility Room + - type: button + tap_action: + action: toggle + hold_action: + action: more-info + entity: input_boolean.blue_room_automatic_lights + name: Blue Room \ No newline at end of file diff --git a/lovelace/view-automations.yaml b/lovelace/view-automations.yaml new file mode 100644 index 0000000..8f324b3 --- /dev/null +++ b/lovelace/view-automations.yaml @@ -0,0 +1,68 @@ +title: Automations +path: automations +icon: mdi:home-variant +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 +cards: +- type: entities + title: People Automations at Startup + show_header_toggle: false + entities: + - entity: automation.clint_status_at_startup + secondary_info: last-triggered + - entity: automation.emmett_status_at_startup + secondary_info: last-triggered + - entity: automation.bridget_status_at_startup + secondary_info: last-triggered + - entity: automation.kristy_status_at_startup + secondary_info: last-triggered + - entity: automation.marshall_status_at_startup + secondary_info: last-triggered + - entity: automation.tess_status_at_startup + secondary_info: last-triggered + - entity: automation.ebin_status_at_startup + secondary_info: last-triggered + + +- type: entities + title: Misc automations + show_header_toggle: false + entities: + - entity: automation.adults_awake + secondary_info: last-triggered + - entity: automation.kids_awake + secondary_info: last-triggered + +- type: entities + title: Car related automations + show_header_toggle: false + entities: + - entity: automation.car_home + secondary_info: last-triggered + - entity: automation.car_away + secondary_info: last-triggered + +- type: entities + title: Seasonal automations + show_header_toggle: false + entities: + - entity: automation.season_is_christmas + secondary_info: last-triggered + - entity: automation.season_is_easter + secondary_info: last-triggered + - entity: automation.season_is_winter + secondary_info: last-triggered + - entity: automation.season_is_spring + secondary_info: last-triggered + - entity: automation.season_is_summer + secondary_info: last-triggered + - entity: automation.season_is_autumn + secondary_info: last-triggered + +- type: entities + show_header_toggle: false + title: Other bits + entities: + - entity: automation.nearly_home + secondary_info: last-triggered diff --git a/lovelace/view-automations_clint.yaml b/lovelace/view-automations_clint.yaml new file mode 100644 index 0000000..210912f --- /dev/null +++ b/lovelace/view-automations_clint.yaml @@ -0,0 +1,52 @@ +title: Automations Clint +path: automations_clint +icon: mdi:account-star +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 +cards: +- type: vertical-stack + cards: + - type: picture-glance + entities: + - input_boolean.clint_home + camera_image: camera.google_photos_clint_media + - type: entities + title: Automations for Clint + show_header_toggle: false + entities: + - entity: automation.clint_asleep + secondary_info: last-triggered + - entity: automation.clint_in_bed + secondary_info: last-triggered + - entity: automation.clint_at_work + secondary_info: last-triggered + - entity: automation.clint_away + secondary_info: last-triggered + - entity: automation.clint_home + secondary_info: last-triggered + - entity: automation.clint_home_after_work + secondary_info: last-triggered + - entity: automation.clint_up + secondary_info: last-triggered + - entity: automation.clint_awake + secondary_info: last-triggered + +- type: entities + title: Clint Travelling Automations + show_header_toggle: false + entities: + - entity: automation.clint_travelling + secondary_info: last-triggered + - entity: automation.clint_location_update + secondary_info: last-triggered + - entity: automation.clint_changing_zones + secondary_info: last-triggered + +- type: entities + title: Clint Work Automations + show_header_toggle: false + entities: + - entity: automation.set_clint_next_alarm + secondary_info: last-triggered + diff --git a/lovelace/view-automations_group.yaml b/lovelace/view-automations_group.yaml new file mode 100644 index 0000000..0da09d3 --- /dev/null +++ b/lovelace/view-automations_group.yaml @@ -0,0 +1,62 @@ +title: Automations +path: automations_group +icon: mdi:account-group +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 +cards: +- type: entities + title: Automations for Groups of People + show_header_toggle: false + entities: + - entity: automation.bedtime + secondary_info: last-triggered + - entity: automation.master_bedroom_status + secondary_info: last-triggered + - entity: automation.adults_away + secondary_info: last-triggered + - entity: automation.adults_returned + secondary_info: last-triggered + - entity: automation.all_away + secondary_info: last-triggered + - entity: automation.all_returned + secondary_info: last-triggered + - type: divider + - entity: automation.home_occupied + secondary_info: last-triggered + - entity: automation.home_not_occupied + secondary_info: last-triggered + - type: divider + - entity: automation.person_arrived + secondary_info: last-triggered + - entity: automation.person_away + secondary_info: last-triggered + - entity: automation.person_home + secondary_info: last-triggered + - entity: automation.person_left + secondary_info: last-triggered + - type: divider + - entity: automation.bedtime_something_open + secondary_info: last-triggered + - entity: automation.adults_away_something_open + secondary_info: last-triggered +- type: entities + title: Guest and visitor related automations + show_header_toggle: false + entities: + - entity: automation.guest_mode_off_nobody_home + secondary_info: last-triggered +- type: entities + title: Automations for travel + show_header_toggle: false + entities: + - entity: automation.vacation + secondary_info: last-triggered + - entity: automation.vacation_over + secondary_info: last-triggered +- type: entities + title: Automations for work + show_header_toggle: false + entities: + - entity: automation.clint_at_work + secondary_info: last-triggered \ No newline at end of file diff --git a/lovelace/view-automations_kristy.yaml b/lovelace/view-automations_kristy.yaml new file mode 100644 index 0000000..0c212ad --- /dev/null +++ b/lovelace/view-automations_kristy.yaml @@ -0,0 +1,26 @@ +title: Automations Kristy +path: automations_kristy +icon: mdi:account-heart +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 +cards: +- type: vertical-stack + cards: + - type: picture-glance + entities: + - input_boolean.kristy_home + camera_image: camera.google_photos_kristy_media + - type: entities + title: Automations for Kristy + show_header_toggle: false + entities: + - entity: automation.kristy_away + secondary_info: last-triggered + - entity: automation.kristy_home + secondary_info: last-triggered + - entity: input_boolean.kristy_at_work + - entity: input_boolean.kristy_home + - entity: input_boolean.kristy_in_bed + - entity: input_boolean.kristy_is_awake + - entity: input_boolean.kristy_travelling diff --git a/lovelace/view-big_kids.yaml b/lovelace/view-big_kids.yaml new file mode 100644 index 0000000..9c37962 --- /dev/null +++ b/lovelace/view-big_kids.yaml @@ -0,0 +1,46 @@ +title: Big Kids +path: big_kids +icon: mdi:account-multiple +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f +cards: +- type: vertical-stack + cards: + - type: picture-glance + entities: + - input_boolean.marshall_home + camera_image: camera.google_photos_marshall_media + + - type: entities + title: Marshall + show_header_toggle: false + entities: + - entity: automation.marshall_away + secondary_info: last-triggered + - entity: automation.marshall_home + secondary_info: last-triggered + - entity: input_boolean.marshall_at_work + - entity: input_boolean.marshall_home + - entity: input_boolean.marshall_in_bed + - entity: input_boolean.marshall_is_awake + - entity: input_boolean.marshall_travelling + +- type: vertical-stack + cards: + - type: picture-glance + entities: + - input_boolean.tess_home + camera_image: camera.google_photos_tess_media + - type: entities + title: Tess + show_header_toggle: false + entities: + - entity: automation.tess_away + secondary_info: last-triggered + - entity: automation.tess_home + secondary_info: last-triggered + - entity: input_boolean.tess_at_work + - entity: input_boolean.tess_home + - entity: input_boolean.tess_in_bed + - entity: input_boolean.tess_is_awake + - entity: input_boolean.tess_travelling diff --git a/lovelace/view-camera-overview.yaml b/lovelace/view-camera-overview.yaml new file mode 100644 index 0000000..49ec46e --- /dev/null +++ b/lovelace/view-camera-overview.yaml @@ -0,0 +1,88 @@ +title: Cameras +path: camera-overview +icon: mdi:cctv +visible: + - user: 0e789cd7ce194a799def1abc4dd02191 +panel: true +cards: + - type: grid + square: false + columns: 2 + cards: + - type: picture-entity + entity: camera.frigate_cam08 + camera_image: camera.frigate_cam08 + camera_view: live + + - type: picture-entity + entity: camera.frigate_cam12 + camera_image: camera.frigate_cam12 + camera_view: live + + # - type: picture-entity + # entity: camera.amcrest_amcrest_cam02 + # camera_image: camera.amcrest_amcrest_cam02 + # camera_view: live + + # - type: picture-entity + # entity: camera.amcrest_amcrest_cam05 + # camera_image: camera.amcrest_amcrest_cam05 + # camera_view: live + # + + # - type: picture-entity + # entity: camera.amcrest_amcrest_cam09 + # camera_image: camera.amcrest_amcrest_cam09 + # camera_view: live + # + + - type: picture-entity + entity: camera.frigate_cam06 + camera_image: camera.frigate_cam06 + camera_view: live + + - type: picture-entity + entity: camera.frigate_cam07 + camera_image: camera.frigate_cam07 + camera_view: live + + - type: picture-entity + entity: camera.frigate_cam01 + camera_image: camera.frigate_cam01 + camera_view: live + + - type: picture-entity + entity: camera.frigate_cam03 + camera_image: camera.frigate_cam03 + camera_view: live + + - type: picture-entity + entity: camera.frigate_cam04 + camera_image: camera.frigate_cam04 + camera_view: live + + # - type: picture-entity + # entity: camera.amcrest_amcrest_cam10 + # camera_image: camera.amcrest_amcrest_cam10 + # camera_view: live + # + + # - type: picture-entity + # entity: camera.amcrest_amcrest_cam11 + # camera_image: camera.amcrest_amcrest_cam11 + # camera_view: live + + - type: picture-entity + entity: camera.frigate_cam14 + camera_image: camera.frigate_cam14 + camera_view: live + + - type: picture-entity + entity: camera.frigate_cam18 + camera_image: camera.frigate_cam18 + camera_view: live + + - type: picture-entity + entity: camera.frigate_cam19 + camera_image: camera.frigate_cam19 + camera_view: live diff --git a/lovelace/view-cameras.yaml b/lovelace/view-cameras.yaml new file mode 100644 index 0000000..1608650 --- /dev/null +++ b/lovelace/view-cameras.yaml @@ -0,0 +1,28 @@ +title: Surveillence +path: cams +icon: mdi:cctv +visible: + - user: cad46dedf86f454ebbd7f697a58730f2 + - user: 24a4bd075e7f41a497dd0390a1dd4a9f +panel: true +cards: + - type: grid + square: false + columns: 2 + cards: + # 8 and 12 + - !include /config/lovelace/cameras/view-camera-08.yaml + + - !include /config/lovelace/cameras/view-camera-12.yaml + + # 6 and 7 + - !include /config/lovelace/cameras/view-camera-06.yaml + + - !include /config/lovelace/cameras/view-camera-07.yaml + + # 3 and 1 + - !include /config/lovelace/cameras/view-camera-03.yaml + + - !include /config/lovelace/cameras/view-camera-01.yaml + + - !include /config/lovelace/cameras/view-camera-04.yaml diff --git a/lovelace/view-charts.yaml b/lovelace/view-charts.yaml new file mode 100644 index 0000000..4483247 --- /dev/null +++ b/lovelace/view-charts.yaml @@ -0,0 +1,417 @@ +path: charts +title: Charts +icon: mdi:chart-line +cards: + - type: vertical-stack + cards: + - type: vertical-stack + cards: + - type: glance + entities: + - entity: sensor.last_system_boot + name: Last System Boot + - entity: sensor.hassio_version + name: Hassio Version + - entity: update.home_assistant_supervisor_update + name: Supervisor + icon: mdi:home-assistant + + - type: grid + columns: 3 + square: false + cards: + - type: custom:mini-graph-card + align_icon: left + align_state: center + entities: + - sensor.processor_use + font_size: 50 + icon: mdi:chip + name: HA CPU + hours_to_show: 4 + points_per_hour: 3 + show: + fill: false + - type: custom:mini-graph-card + align_icon: left + align_state: center + entities: + - sensor.memory_use_percent + font_size: 50 + name: HA Mem + hours_to_show: 4 + points_per_hour: 3 + show: + fill: false + - type: custom:mini-graph-card + align_icon: left + align_state: center + entities: + - sensor.disk_use_percent_home + font_size: 50 + name: HA Disk + hours_to_show: 96 + points_per_hour: 3 + show: + fill: false + + - type: custom:mini-graph-card + align_icon: left + align_state: center + entities: + - sensor.dream_nas_cpu_utilization_total + font_size: 50 + name: NAS CPU + hours_to_show: 4 + points_per_hour: 3 + show: + fill: false + - type: custom:mini-graph-card + align_icon: left + align_state: center + entities: + - sensor.dream_nas_memory_usage_real + font_size: 50 + name: NAS Mem + hours_to_show: 4 + points_per_hour: 3 + show: + fill: false + - type: custom:mini-graph-card + align_icon: left + align_state: center + entities: + - sensor.dream_nas_volume_1_volume_used + font_size: 50 + name: NAS Disk + hours_to_show: 4 + points_per_hour: 3 + show: + fill: false + + - type: custom:mini-graph-card + align_icon: left + align_state: center + entities: + - sensor.local_mariadb_database_size + font_size: 50 + icon: mdi:database + name: Database + hours_to_show: 96 + points_per_hour: 3 + show: + fill: false + - type: glance + show_icon: false + columns: 3 + entities: + - entity: sensor.count_binary_sensors + name: Binary Sensors + - entity: sensor.count_sensors + name: Sensors + - entity: sensor.count_switches + name: Switches + - entity: sensor.count_device_trackers + name: Device Trackers + - entity: sensor.count_automations + name: Automations + - entity: sensor.count_scripts + name: Scripts + - entity: sensor.count_input_booleans + name: Bools + - entity: sensor.count_input_numbers + name: Numbers + - entity: sensor.count_input_datetimes + name: DateTimes + - entity: sensor.count_input_selects + name: Selects + - entity: sensor.count_zones + name: Zones + - entity: sensor.count_input_texts + name: Texts + + # - type: glance + # show_header_toggle: false + # show_state: false + # title: false + # entities: + # - entity: zone.home + # icon: mdi:home-assistant + # name: Hassio + # tap_action: + # action: call-service + # service: homeassistant.restart + # - entity: zone.home + # icon: mdi:cogs + # name: Automation + # tap_action: + # action: call-service + # service: automation.reload + # - entity: zone.home + # icon: mdi:script-text + # name: Script + # tap_action: + # action: call-service + # service: script.reload + # - entity: zone.home + # icon: mdi:group + # name: Groups + # tap_action: + # action: call-service + # service: group.reload + + # - type: vertical-stack + # cards: + # - type: glance + # entities: + # - entity: sensor.coral_inference_speed + # name: Inference + # - entity: sensor.detection_fps + # name: Detection + + # - entities: + # - entity: sensor.coral_inference_speed + # hours_to_show: 12 + # refresh_interval: 60 + # title: Inference Speed + # type: history-graph + + - type: vertical-stack + cards: + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + layout: vertical + entity: sensor.master_bedroom_multisensor_illuminance + name: Master Bedroom + icon_type: none + - type: custom:mushroom-entity-card + entity: input_number.master_bedroom_light_level_trigger + layout: vertical + name: Master Bedroom + icon_type: none + - type: custom:mushroom-entity-card + entity: binary_sensor.master_bedroom_naturally_lit + name: Naturally Lit + layout: vertical + secondary_info: state + icon_type: none + + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + layout: vertical + entity: sensor.nursery_multisensor_illuminance + name: Nursery + icon_type: none + - type: custom:mushroom-entity-card + entity: input_number.nursery_light_level_trigger + layout: vertical + name: Nursery + icon_type: none + - type: custom:mushroom-entity-card + entity: binary_sensor.nursery_naturally_lit + name: Naturally Lit + layout: vertical + secondary_info: state + icon_type: none + + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + layout: vertical + entity: sensor.kitchen_multisensor_illuminance + name: Kitchen + icon_type: none + - type: custom:mushroom-entity-card + entity: input_number.kitchen_light_level_trigger + layout: vertical + name: Kitchen + icon_type: none + - type: custom:mushroom-entity-card + entity: binary_sensor.kitchen_naturally_lit + name: Naturally Lit + layout: vertical + secondary_info: state + icon_type: none + + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + layout: vertical + entity: sensor.dining_room_multisensor_illuminance + name: Dining Room + icon_type: none + - type: custom:mushroom-entity-card + entity: input_number.dining_room_light_level_trigger + layout: vertical + name: Dining Room + icon_type: none + - type: custom:mushroom-entity-card + entity: binary_sensor.dining_room_naturally_lit + name: Naturally Lit + layout: vertical + secondary_info: state + icon_type: none + + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + layout: vertical + entity: sensor.front_room_light_level + name: Front Room + icon_type: none + - type: custom:mushroom-entity-card + entity: input_number.front_room_light_level_trigger + layout: vertical + name: Front Room + icon_type: none + - type: custom:mushroom-entity-card + entity: binary_sensor.front_room_naturally_lit + name: Naturally Lit + layout: vertical + secondary_info: state + icon_type: none + + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + layout: vertical + entity: sensor.entryway_light_level + name: Entryway + icon_type: none + - type: custom:mushroom-entity-card + entity: input_number.entryway_light_level_trigger + layout: vertical + name: Entryway + icon_type: none + - type: custom:mushroom-entity-card + entity: binary_sensor.entryway_naturally_lit + name: Naturally Lit + layout: vertical + secondary_info: state + icon_type: none + + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + layout: vertical + entity: sensor.computer_area_multisensor_illuminance + name: Computer Area + icon_type: none + - type: custom:mushroom-entity-card + entity: input_number.computer_area_light_level_trigger + layout: vertical + name: Computer Area + icon_type: none + - type: custom:mushroom-entity-card + entity: binary_sensor.computer_area_naturally_lit + name: Naturally Lit + layout: vertical + secondary_info: state + icon_type: none + + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + layout: vertical + entity: sensor.great_room_multisensor_illuminance + name: Great Room + icon_type: none + - type: custom:mushroom-entity-card + entity: input_number.great_room_light_level_trigger + layout: vertical + name: Great Room + icon_type: none + - type: custom:mushroom-entity-card + entity: binary_sensor.great_room_naturally_lit + name: Naturally Lit + layout: vertical + secondary_info: state + icon_type: none + + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + layout: vertical + entity: sensor.blue_room_multisensor_illuminance + name: Blue Room + icon_type: none + - type: custom:mushroom-entity-card + entity: input_number.blue_room_light_level_trigger + layout: vertical + name: Blue Room + icon_type: none + - type: custom:mushroom-entity-card + entity: binary_sensor.blue_room_naturally_lit + name: Naturally Lit + layout: vertical + secondary_info: state + icon_type: none + + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + layout: vertical + entity: sensor.front_porch_light_level + name: Front Porch + icon_type: none + - type: custom:mushroom-entity-card + entity: input_number.garage_overhead_light_level_trigger + layout: vertical + name: Garage Overhead + icon_type: none + - type: custom:mushroom-entity-card + entity: binary_sensor.garage_naturally_lit + name: Naturally Lit + layout: vertical + secondary_info: state + icon_type: none + + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + layout: vertical + entity: sensor.front_porch_light_level + name: Front Porch + icon_type: none + - type: custom:mushroom-entity-card + entity: input_number.front_porch_light_level_trigger + layout: vertical + name: Front Porch + icon_type: none + - type: custom:mushroom-entity-card + entity: binary_sensor.front_porch_naturally_lit + name: Naturally Lit + layout: vertical + secondary_info: state + icon_type: none + + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + layout: vertical + entity: sensor.deck_light_level + name: Deck + icon_type: none + - type: custom:mushroom-entity-card + entity: input_number.deck_light_level_trigger + layout: vertical + name: Deck + icon_type: none + - type: custom:mushroom-entity-card + entity: binary_sensor.deck_naturally_lit + name: Naturally Lit + layout: vertical + secondary_info: state + icon_type: none + + + - type: glance + entities: + - entity: input_number.is_dark + name: Dark + - entity: input_number.is_dim + name: Dim + - entity: input_number.is_daylight + name: Daylight \ No newline at end of file diff --git a/lovelace/view-chores-all.yaml b/lovelace/view-chores-all.yaml new file mode 100644 index 0000000..158f433 --- /dev/null +++ b/lovelace/view-chores-all.yaml @@ -0,0 +1,83 @@ +title: All Chores +path: chores-all +icon: mdi:broom +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f +cards: + +- type: custom:grocy-chores-card + title: Daddy's Chores + user_id: 2 + filter_user: 2 + show_quantity: 5 + show_days: 5 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_chores + +- type: custom:grocy-chores-card + title: Chickadee's Chores + user_id: 5 + filter_user: 5 + show_quantity: 5 + show_days: 5 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_chores + +- type: custom:grocy-chores-card + title: Marshall's Chores + user_id: 6 + filter_user: 6 + show_quantity: 5 + show_days: 5 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_chores + +- type: custom:grocy-chores-card + title: Tess' Chores + user_id: 7 + filter_user: 7 + show_quantity: 5 + show_days: 5 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_chores + +- type: custom:grocy-chores-card + title: Emmett's Chores + user_id: 3 + filter_user: 3 + show_quantity: 5 + show_days: 5 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_chores + +- type: custom:grocy-chores-card + title: Bridget's Chores + user_id: 4 + filter_user: 4 + show_quantity: 5 + show_days: 5 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_chores + +- type: custom:grocy-chores-card + title: Ebin's Chores + user_id: 8 + filter_user: 8 + show_quantity: 5 + show_days: 5 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_chores \ No newline at end of file diff --git a/lovelace/view-devices.yaml b/lovelace/view-devices.yaml new file mode 100644 index 0000000..66d9074 --- /dev/null +++ b/lovelace/view-devices.yaml @@ -0,0 +1,35 @@ +title: Devices +path: devices +icon: mdi:engine +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f +cards: + - type: entities + title: Pixel 4 + show_header_toggle: false + entities: + - entity: device_tracker.pixel_7 + + - type: entities + title: Traverse + show_header_toggle: false + entities: + - entity: device_tracker.chevrolet_mylink + + - type: entities + title: Bridget's Tablet + show_header_toggle: false + entities: + - entity: device_tracker.bridget_s_fire_wifi + + - type: entities + title: Emmett's Tablet + show_header_toggle: false + entities: + - entity: device_tracker.emmett_s_fire_wifi + + - type: entities + title: Podein Devices + show_header_toggle: false + entities: + - entity: device_tracker.kristy_s_phone diff --git a/lovelace/view-floor-all.yaml b/lovelace/view-floor-all.yaml new file mode 100644 index 0000000..b070630 --- /dev/null +++ b/lovelace/view-floor-all.yaml @@ -0,0 +1,37 @@ +title: All Floors +path: all-floors +icon: mdi:alpha-a-box +theme: Mushroom Shadow +cards: + + - !include /config/lovelace/room_cards/front_room.yaml + + - !include /config/lovelace/room_cards/nursery.yaml + + - !include /config/lovelace/room_cards/kitchen.yaml + + - !include /config/lovelace/room_cards/master_bedroom.yaml + + - !include /config/lovelace/room_cards/dining_room.yaml + + - !include /config/lovelace/room_cards/master_bathroom.yaml + + - !include /config/lovelace/room_cards/entryway.yaml + + - !include /config/lovelace/room_cards/garage.yaml + + - !include /config/lovelace/room_cards/computer_area.yaml + + - !include /config/lovelace/room_cards/great_room.yaml + + - !include /config/lovelace/room_cards/utility_room.yaml + + - !include /config/lovelace/room_cards/front_yard.yaml + + - !include /config/lovelace/room_cards/mancave.yaml + + - !include /config/lovelace/room_cards/blue_room.yaml + + - !include /config/lovelace/room_cards/furnace_room.yaml + + - !include /config/lovelace/room_cards/back_yard.yaml \ No newline at end of file diff --git a/lovelace/view-ha-floorplan.yaml b/lovelace/view-ha-floorplan.yaml new file mode 100644 index 0000000..0befe5e --- /dev/null +++ b/lovelace/view-ha-floorplan.yaml @@ -0,0 +1,784 @@ +title: HA Floorplan +path: ha-floorplan +icon: mdi:floor-plan +panel: true +cards: + - type: vertical-stack + cards: + - type: horizontal-stack + cards: + - type: custom:floorplan-card + config: + image: /local/floorplan/fullsized_floorplan.svg + stylesheet: /local/floorplan/floorplan.css + #log_level: debug + console_log_level: debug + defaults: + hover_action: hover-info + #tap_action: more-info + rules: + - entities: + - fan.master_bedroom + - fan.nursery + states: + - state: "on" + class: spinning-fan + + - entities: + - sensor.hvac_action + states: + - state: heating + class: hvac-heating + - state: cooling + class: hvac-cooling + - state: fan + class: hvac-fan + - state: idle + class: hvac-idle + + # - entities: + # - input_boolean.clint_in_bed + # - input_boolean.emmett_in_bed + # - input_boolean.bridget_in_bed + # - input_boolean.kristy_in_bed + # - input_boolean.marshall_in_bed + # - input_boolean.tess_in_bed + # - input_boolean.ebin_in_bed + # - input_boolean.guest_in_bed + # states: + # - state: 'on' + # class: in-bed + # - state: 'off' + # class: out-of-bed + + # - entities: + # - input_boolean.clint_is_awake + # - input_boolean.emmett_is_awake + # - input_boolean.bridget_is_awake + # - input_boolean.kristy_is_awake + # - input_boolean.marshall_is_awake + # - input_boolean.tess_is_awake + # - input_boolean.ebin_is_awake + # - input_boolean.guest_is_awake + # states: + # - state: 'on' + # class: awake + # - state: 'off' + # class: sleeping + + - entities: + - input_boolean.entryway_occupied + - input_boolean.front_room_occupied + - input_boolean.dining_room_occupied + - input_boolean.kitchen_occupied + - input_boolean.nursery_occupied + - input_boolean.nursery_closet_occupied + - input_boolean.master_bedroom_occupied + - input_boolean.master_bathroom_occupied + - input_boolean.master_bedroom_closet_occupied + - input_boolean.garage_occupied + - input_boolean.computer_area_occupied + - input_boolean.great_room_occupied + - input_boolean.blue_room_occupied + - input_boolean.mancave_occupied + - input_boolean.utility_room_occupied + - input_boolean.deck_occupied + - input_boolean.front_porch_occupied + - input_boolean.furnace_room_occupied + + states: + - state: "on" + class: room-occupied + - state: "off" + class: room-empty + action: + domain: homeassistant + service: homeassistant.toggle + + - entities: + - sensor.general_waste + states: + - state: "today" + class: bin-today + - state: "tomorrow" + class: bin-tomorrow + # - state: 'future' + # class: bin-future + # - state: 'false' + # class: bin-false + + - entities: + - binary_sensor.furnace_room_water_sensor_water_alarm_water_leak_detected + states: + - state: "on" + class: water-wet + - state: "off" + class: water-dry + + - entities: + - binary_sensor.gray_suv_east_side + - binary_sensor.gray_suv_west_side + states: + - state: "on" + class: "suv-home" + - state: "off" + class: "hidden-entity" + + # - entities: + # - input_select.camera14_preset + # states: + # - state: 'Deck' + # class: 'cam14-preset-1' + # - state: 'Sandbox' + # class: 'cam14-preset-2' + # - state: 'Yard' + # class: 'cam14-preset-3' + # - state: 'Grove' + # class: 'cam14-preset-4' + # - state: 'Stairs' + # class: 'cam14-preset-5' + # - state: 'BesideStairs' + # class: 'cam14-preset-6' + # - state: 'Grass' + # class: 'cam14-preset-7' + + - entities: + - plant.plant_sensor_cea4 + - plant.plant_sensor_3eae + - plant.fineoffset_wh51_00f935 + - plant.fineoffset_wh51_0ce593 + - plant.plant_sensor_3eb0 + - plant.fineoffset_wh51_0d1e11 + states: + - state: "problem" + class: "health-warning" + - state: "ok" + class: "health-good" + tap_action: + action: navigate + navigation_path: /phone-yaml/plants + + - entities: + - binary_sensor.black_bed_occupied + - binary_sensor.white_bed_occupied + - binary_sensor.master_bed_left_occupied + - binary_sensor.master_bed_right_occupied + - binary_sensor.computer_area_person_occupancy + - binary_sensor.dining_room_person_occupancy + - binary_sensor.entryway_person_occupancy + - binary_sensor.front_porch_person_occupancy + - binary_sensor.front_room_person_occupancy + - binary_sensor.walkway_person_occupancy + - binary_sensor.workshop_person_occupancy + - binary_sensor.great_room_person_occupancy + - binary_sensor.kitchen_person_occupancy + - binary_sensor.master_bedroom_person_occupancy + - binary_sensor.nursery_person_occupancy + - binary_sensor.utility_room_person_occupancy + - binary_sensor.utility_room_person_occupancy + - binary_sensor.blue_room_person_occupancy + - binary_sensor.furnace_room_person_occupancy + - binary_sensor.driveway_center_vehicle_occupancy + - binary_sensor.driveway_east_side_vehicle_occupancy + - binary_sensor.driveway_west_side_vehicle_occupancy + states: + - state: "on" + class: "visible-entity" + - state: "off" + class: "hidden-entity" + - state: "unavailable" + class: "transparent" + + - entities: + - input_boolean.clint_home + - group.phone_clint + - input_boolean.emmett_home + - input_boolean.emmett_tablet_home + - device_tracker.emmett_s_fire_wifi + - group.person_emmett + - input_boolean.bridget_home + - input_boolean.bridget_tablet_home + - device_tracker.bridget_s_fire_wifi + - group.person_bridget + #- input_boolean.kristy_home + #- input_boolean.marshall_home + #- group.work_laptop + #- group.person_kristy_work + states: + - state: "on" + class: "tracker-home" + - state: "off" + class: "tracker-away" + - state: "home" + class: "tracker-home" + - state: "not_home" + class: "tracker-away" + - state: "Work" + class: "tracker-work" + - state: "other" + class: "tracker-work" + - state: "London" + class: "tracker-work" + - state: "London 2" + class: "tracker-work" + - state: "At work" + class: "tracker-other" + + # - entities: + # - input_boolean.guest_mode + # states: + # - state: 'on' + # class: 'tracker-home' + # - state: 'off' + # class: 'tracker-away' + # + + - entities: + # Google Homes, Minis, and Lenovo Clocks + - media_player.bathroom_mini + - media_player.computer_area_hub + - media_player.deck + - media_player.garage + - media_player.great_room + - media_player.kitchen + - media_player.master_bedroom_clock + - media_player.front_room_hub + - media_player.nursery_hub + states: + - state: "playing" + class: "squeezebox-on" + - state: "paused" + class: "squeezebox-paused" + - state: "off" + class: "squeezebox-off" + - state: "idle" + class: "squeezebox-idle" + + # - entities: + # # Chromecast + # - media_player.master_bedroom_tv + # states: + # - state: 'on' + # class: 'tv-on' + # - state: 'playing' + # class: 'tv-on' + # - state: 'off' + # class: 'tv-off' + # + + - entities: + # Rokus + - media_player.front_room_tv + - media_player.downstairs_roku + states: + - state: "on" + class: "squeezebox-on" + - state: "playing" + class: "squeezebox-on" + - state: "home" + class: "squeezebox-on" + - state: "Online" + class: "squeezebox-on" + - state: "off" + class: "squeezebox-off" + - state: "not home" + class: "squeezebox-off" + - state: "not_home" + class: "squeezebox-off" + - state: "Offline" + class: "squeezebox-off" + - state: "unknown" + class: "squeezebox-unknown" + + # - entities: + # - sensor.printer + # class_template: ' + # var health = parseFloat(entity.state.replace("°", "")); + # if (health < 50) + # return "health-critical"; + # else if (health < 100) + # return "health-warning"; + # else if (health < 250) + # return "health-info"; + # else if (health >= 25) + # return "health-good"; + # else + # return "health-unknown"; + # ' + # + + # Indoors should be moderate + - entities: + - sensor.front_room_thermostat_temperature + - sensor.front_room_ecobee_temperature + - sensor.bar_temperature + - sensor.entryway_temperature + - sensor.nursery_multisensor_air_temperature + - sensor.master_bedroom_multisensor_air_temperature + - sensor.thermostat_temperature + - sensor.utility_room_thermostat_temperature + - sensor.master_bathroom_thermostat_temperature + - sensor.downstairs_temperature + - sensor.computer_area_multisensor_air_temperature + - sensor.mancave_thermostat_temperature + - sensor.blue_room_thermostat_temperature + - sensor.blue_room_multisensor_air_temperature + - sensor.kitchen_multisensor_air_temperature + - sensor.great_room_multisensor_air_temperature + - sensor.dining_room_multisensor_air_temperature + - sensor.furnace_room_thermostat_temperature + - sensor.front_room_hue_temperature + - sensor.upstairs_mean_temperature + - sensor.downstairs_mean_temperature + # text_template: '${entity.state ? entity.state : "unknown"} F' + # An example of rounding up a number, i.e. a temperature of 90.1 becomes 91 + text_template: '${entity.state ? Math.ceil(entity.state) : "undefined"} F' + class_template: ' + var temp = parseFloat(entity.state.replace("°", "")); + if (temp < 58) + return "temp-freeze"; + else if (temp < 64) + return "temp-low"; + else if (temp < 75) + return "temp-medium"; + else if (temp < 85) + return "temp-high"; + else if (temp >= 85) + return "temp-hot"; + else + return "temp-unknown"; + ' + + # Outside is expected to be colder/hotter + - entities: + - sensor.lacrosse_tx141thbv2_0_54_temperature + - sensor.front_porch_temperature + - sensor.deck_temperature + - sensor.garage_multisensor_air_temperature + #- sensor.hvac_temperature + #- sensor.return_temperature + - sensor.hvac_delta + - sensor.outdoors_mean_temperature + # text_template: '${entity.state ? entity.state : "unknown"} F' + # An example of rounding up a number, i.e. a temperature of 90.1 becomes 91 + text_template: '${entity.state ? Math.ceil(entity.state) : "undefined"} F' + class_template: ' + var temp = parseFloat(entity.state.replace("°", "")); + if (temp < 30) + return "temp-freeze"; + else if (temp < 60) + return "temp-low"; + else if (temp < 85) + return "temp-medium"; + else if (temp < 100) + return "temp-high"; + else if (temp >= 100) + return "temp-hot"; + else + return "temp-unknown"; + ' + + - entities: + - sensor.acurite_986_1r_48226_temperature + text_template: '${entity.state ? Math.floor(entity.state) : "unknown"}' + class_template: ' + var temp = parseFloat(entity.state.replace("°", "")); + if (temp < 32) + return "fridge-low"; + else if (temp < 40) + return "fridge-medium"; + else if (temp >= 41) + return "fridge-high"; + else + return "temp-unknown"; + ' + + - entities: + - sensor.acurite_986_2f_42383_temperature + text_template: '${entity.state ? Math.floor(entity.state) : "unknown"}' + class_template: ' + var temp = parseFloat(entity.state.replace("°", "")); + if (temp < 4) + return "fridge-medium"; + else if (temp >= 5) + return "fridge-high"; + else + return "temp-unknown"; + ' + + # Bathrooms are expected to be a bit more humid + - entities: + - sensor.master_bathroom_thermostat_humidity + - sensor.utility_room_thermostat_humidity + text_template: '${entity.state ? Math.ceil(entity.state) : "unknown"} %' + class_template: ' + var humid = parseFloat(entity.state.replace("%", "")); + if (humid < 30) + return "humid-low"; + else if (humid < 45) + return "humid-med-low"; + else if (humid < 60) + return "humid-medium"; + else if (humid < 70) + return "humid-med-high"; + else + return "humid-high"; + ' + + - entities: + - sensor.nursery_multisensor_humidity + - sensor.master_bedroom_multisensor_humidity + - sensor.thermostat_humidity + - sensor.computer_area_multisensor_humidity + - sensor.great_room_multisensor_humidity + - sensor.mancave_thermostat_humidity + - sensor.blue_room_thermostat_humidity + - sensor.front_room_thermostat_humidity + - sensor.kitchen_multisensor_humidity + - sensor.furnace_room_thermostat_humidity + - sensor.blue_room_multisensor_humidity + - sensor.dining_room_multisensor_humidity + text_template: '${entity.state ? Math.ceil(entity.state) : "unknown"} %' + class_template: ' + var humid = parseFloat(entity.state.replace("%", "")); + if (humid < 40) + return "humid-low"; + else if (humid < 50) + return "humid-med-low"; + else if (humid < 60) + return "humid-medium"; + else if (humid < 70) + return "humid-med-high"; + else + return "humid-high"; + ' + + - entities: + - sensor.lacrosse_tx141thbv2_0_54_humidity + - sensor.garage_multisensor_humidity + text_template: '${entity.state ? Math.ceil(entity.state) : "unknown"} %' + class_template: ' + var humid = parseFloat(entity.state.replace("%", "")); + if (humid < 30) + return "humid-low"; + else if (humid < 45) + return "humid-med-low"; + else if (humid < 55) + return "humid-medium"; + else if (humid < 65) + return "humid-med-high"; + else + return "humid-high"; + ' + + - entities: + - sensor.bar_light_level + - sensor.entryway_light_level + - sensor.front_porch_light_level + - sensor.deck_light_level + - sensor.nursery_multisensor_illuminance + - sensor.master_bedroom_multisensor_illuminance + - sensor.computer_area_multisensor_illuminance + - sensor.great_room_multisensor_illuminance + - sensor.garage_multisensor_illuminance + - sensor.front_room_light_level + - sensor.kitchen_multisensor_illuminance + - sensor.blue_room_multisensor_illuminance + - sensor.dining_room_multisensor_illuminance + text_template: '${entity.state ? Math.ceil(entity.state) : "unknown"} lx' + class_template: ' + var light = parseFloat(entity.state.replace("°", "")); + if (light < 10) + return "light-low"; + else if (light < 100) + return "light-medium-low"; + else if (light < 400) + return "light-medium"; + else + return "light-high"; + ' + + - entities: + - sensor.salt_level_in_bags + class_template: ' + var bags = parseFloat(entity.state); + if (bags > 4) + return "bags-five"; + else if (bags > 3) + return "bags-four"; + else if (bags > 2) + return "bags-three"; + else if (bags > 1) + return "bags-two"; + else if (bags > 0) + return "bags-one"; + else + return "bags-zero"; + ' + + - entities: + - input_text.person_clint + - input_text.person_emmett + - input_text.person_bridget + # - input_text.person_marshall + # - input_text.person_kristy + # - input_text.person_tess + # - input_text.person_ebin + # - input_text.person_guest + text_template: '${entity.state ? entity.state : "unknown"}' + class_template: ' + return "info-text"; + ' + + - entities: + - switch.shelly_sliding_glass_door + states: + - state: "on" + class: "light-on" + - state: "off" + class: "camera-streaming" + - state: "unavailable" + class: "light-unavailable" + action: + domain: homeassistant + service: homeassistant.toggle + + - entities: + - light.front_room_splash_left + - light.front_room_splash_right + - light.black_bed_wled + - light.white_bed_wled + - light.dining_room_switch + - light.master_bedroom_hue + - light.computer_area_hue + - light.great_room_hue + - light.bar + - light.kitchen_overhead + - light.nursery_hue + - light.entry + - light.shower + - light.master_bathroom_vanity_hue + - light.master_bedroom_closet + - light.nursery_closet + - light.garage_overhead + - light.driveway + - light.front_porch_overhead + - light.utility_room_vanity + - light.utility_room_hue + - light.mancave + - light.deck + - light.blue_room_hue + - light.blue_room_closet + - light.furnace_room + - light.storage_room + - switch.utility_room_vent_switch + - switch.bathroom_vent_switch + states: + - state: "on" + class: "light-on" + - state: "off" + class: "light-off" + - state: "unavailable" + class: "light-unavailable" + action: + domain: homeassistant + service: homeassistant.toggle + + - entities: + - binary_sensor.blue_room_naturally_lit + - binary_sensor.computer_area_naturally_lit + - binary_sensor.deck_naturally_lit + - binary_sensor.dining_room_naturally_lit + - binary_sensor.entryway_naturally_lit + - binary_sensor.front_porch_naturally_lit + - binary_sensor.front_room_naturally_lit + - binary_sensor.garage_naturally_lit + - binary_sensor.great_room_naturally_lit + - binary_sensor.kitchen_naturally_lit + - binary_sensor.master_bedroom_naturally_lit + - binary_sensor.nursery_naturally_lit + states: + - state: "on" + class: "sun-on" + - state: "off" + class: "light-off" + - state: "unavailable" + class: "light-unavailable" + - state: "unknown" + class: "light-unavailable" + + - entities: + - light.accent + - light.master_bedroom_accent + states: + - state: "on" + class: "light-strip-on" + - state: "off" + class: "light-off" + - state: "unavailable" + class: "light-unavailable" + + - entities: + - switch.shelly_projector + - binary_sensor.computer_chair_contact_occupied + # - switch.computer_area_pi_plug + # - switch.computer_area_lighouse + # - switch.front_room_pi_plug + # - switch.shelly1pm_f4cfa2748094 + states: + - state: "on" + class: "doorbell-on" + - state: "off" + class: "doorbell-off" + + - entities: + - binary_sensor.kitchen_motion_sensor_home_security_motion_detection + - binary_sensor.kitchen_multisensor_home_security_motion_detection + - binary_sensor.nursery_multisensor_home_security_motion_detection + - binary_sensor.master_bedroom_multisensor_home_security_motion_detection + - binary_sensor.master_bathroom_motion_switch_home_security_motion_detection + - binary_sensor.computer_area_multisensor_home_security_motion_detection + - binary_sensor.front_room_motion_sensor_home_security_motion_detection + - binary_sensor.dining_room_multisensor_motion_detection + - binary_sensor.front_porch_motion + - binary_sensor.deck_motion + - binary_sensor.entryway_motion + - binary_sensor.frigate_cam01_motion + #- binary_sensor.frigate_cam02_person_occupancy + - binary_sensor.frigate_cam03_motion + - binary_sensor.frigate_cam04_motion + #- binary_sensor.frigate_cam05_person_occupancy + - binary_sensor.frigate_cam06_motion + - binary_sensor.frigate_cam07_motion + - binary_sensor.frigate_cam08_motion + #- binary_sensor.frigate_cam09_person_occupancy + #- binary_sensor.frigate_cam10_person_occupancy + #- binary_sensor.frigate_cam11_person_occupancy + - binary_sensor.frigate_cam12_motion + - binary_sensor.frigate_cam13_motion + #- binary_sensor.frigate_cam14_motion + - binary_sensor.frigate_cam14_all_occupancy + - binary_sensor.frigate_cam18_motion + #- binary_sensor.frigate_cam19_motion + - binary_sensor.frigate_cam19_person_occupancy + - binary_sensor.bar_motion + - binary_sensor.great_room_multisensor_home_security_motion_detection + - binary_sensor.garage_multisensor_home_security_motion_detection + - binary_sensor.master_bedroom_closet_motion_switch_home_security_motion_detection + - binary_sensor.nursery_closet_motion_switch_home_security_motion_detection + - binary_sensor.great_room_motion_switch_home_security_motion_detection + - binary_sensor.entryway_motion_switch_home_security_motion_detection + - binary_sensor.garage_motion_switch_home_security_motion_detection + - binary_sensor.front_room_motion_switch_home_security_motion_detection + - binary_sensor.utility_room_motion_switch_home_security_motion_detection + - binary_sensor.mancave_motion_switch_home_security_motion_detection + - binary_sensor.dining_room_motion_switch_home_security_motion_detection + - binary_sensor.blue_room_motion_switch_home_security_motion_detection + - binary_sensor.furnace_room_motion_switch_home_security_motion_detection + - binary_sensor.front_room_motion + + states: + - state: "off" + class: "motion-background" + - state: "on" + class: "warning-background" + - state: "unavailable" + class: "motion-unavailable" + + - entities: + - binary_sensor.inner_garage_door + - binary_sensor.garage_door + - binary_sensor.patio_door_contact + - binary_sensor.master_bedroom_door_contact + - binary_sensor.front_door_contact + - binary_sensor.outer_garage_door + - binary_sensor.nursery_door + - binary_sensor.master_suite_door_contact + - binary_sensor.master_bathroom_door_contact + - binary_sensor.basement_door_contact + - binary_sensor.master_bedroom_closet_door_contact + - binary_sensor.nursery_closet_door_contact + - binary_sensor.pantry_door_contact + - binary_sensor.storage_room_door_contact + - binary_sensor.mancave_door_contact + - binary_sensor.blue_room_door_contact + - binary_sensor.furnace_room_door + - binary_sensor.utility_room_door_contact + states: + - state: "off" + class: "door-closed" + - state: "on" + class: "door-open" + + - entities: + - sensor.washing_machine + - sensor.tumble_dryer + - sensor.dishwasher + - binary_sensor.keurig + - binary_sensor.microwave + - binary_sensor.stove + - binary_sensor.furnace + - binary_sensor.heat_pump + - binary_sensor.sump_pump + states: + - state: "off" + class: "appliance-off" + - state: "on" + class: "appliance-on" + - state: "running" + class: "appliance-on" + - state: "pending" + class: "appliance-pending" + - state: "idle" + class: "appliance-off" + + - entities: + - binary_sensor.front_room_window_contact + - binary_sensor.nursery_window_contact + - binary_sensor.master_bedroom_window_contact + - binary_sensor.computer_area_window_contact + - binary_sensor.blue_room_window_contact + - binary_sensor.entryway_window_contact + states: + - state: "off" + class: "window-closed" + - state: "on" + class: "window-open" + - state: "unavailable" + class: "window-unavailable" + + - entities: + - camera.frigate_cam01 + - camera.frigate_cam03 + - camera.frigate_cam04 + - camera.frigate_cam06 + - camera.frigate_cam07 + - camera.frigate_cam08 + - camera.frigate_cam12 + - camera.frigate_cam13 + - camera.frigate_cam14 + - camera.frigate_cam18 + - camera.frigate_cam19 + states: + - state: "idle" + class: "camera-idle" + - state: "unavailable" + class: "camera-unavailable" + - state: "streaming" + class: "camera-streaming" + + - name: thermostat_temp + entities: + - climate.thermostat + text_template: '${entity.attributes.current_temperature ? entity.attributes.current_temperature : "undefined"}' + # + # The above text_template uses extended attributes from the climate.* objects to get current temperature. + + #- name: text_states + # entities: + # - sensor.downstairs_thermostat_humidity + # - sensor.dark_sky_temperature + # - sensor.last_message + # text_template: '${entity.state ? entity.state.replace(/\s{2,}/g,"") : "undefined"}' + # + # The above text_template uses jQuery syntax to search and replace any instance of 2 consecutive (or more) spaces in a string of text. diff --git a/lovelace/view-information.yaml b/lovelace/view-information.yaml new file mode 100644 index 0000000..c9b495e --- /dev/null +++ b/lovelace/view-information.yaml @@ -0,0 +1,148 @@ +title: Information +path: info +icon: mdi:home-outline +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 +cards: +- type: glance + title: Public + columns: 2 + show_icon: true + entities: + - entity: input_select.front_room_mode + name: Front Room + - entity: input_boolean.front_room_occupied + name: Occupied + tap_action: + action: toggle + - entity: input_select.kitchen_mode + name: Kitchen + - entity: input_boolean.kitchen_occupied + name: Occupied + tap_action: + action: toggle + - entity: input_select.dining_room_mode + name: Dining Room + - entity: input_boolean.dining_room_occupied + name: Occupied + tap_action: + action: toggle + - entity: input_select.great_room_mode + name: Great Room + - entity: input_boolean.great_room_occupied + name: Occupied + tap_action: + action: toggle + - entity: input_select.utility_room_mode + name: Utility Room + - entity: input_boolean.utility_room_occupied + name: Occupied + tap_action: + action: toggle + +- type: glance + title: Private + columns: 2 + show_icon: true + entities: + - entity: input_select.master_bedroom_mode + name: Master Bedroom + - entity: input_boolean.master_bedroom_occupied + name: Occupied + tap_action: + action: toggle + - entity: input_select.nursery_mode + name: Nursery + - entity: input_boolean.nursery_occupied + name: Occupied + tap_action: + action: toggle + - entity: input_select.master_bathroom_mode + name: Master Bathroom + - entity: input_boolean.master_bathroom_occupied + name: Occupied + tap_action: + action: toggle + - entity: input_select.blue_room_mode + name: Blue Room + - entity: input_boolean.blue_room_occupied + name: Occupied + tap_action: + action: toggle + - entity: input_select.mancave_mode + name: Mancave + - entity: input_boolean.mancave_occupied + name: Occupied + tap_action: + action: toggle + +- type: glance + title: House + columns: 2 + show_icon: true + entities: + - entity: input_select.house + name: House + - entity: input_boolean.home_occupied + name: Occupied + tap_action: + action: toggle + - entity: input_select.computer_area_mode + name: Computer Area + - entity: input_boolean.computer_area_occupied + name: Occupied + tap_action: + action: toggle + - entity: input_select.entryway_mode + name: Entryway + - entity: input_boolean.entryway_occupied + name: Occupied + tap_action: + action: toggle + +- type: glance + columns: 2 + show_icon: false + title: Time of Day + entities: + - entity: input_select.time_of_day + name: Time of Day + - entity: input_select.automatic_light_profile + name: Automatic Light Profile + - entity: input_select.early_morning_mode + name: "4-6 Early AM" + - entity: input_select.early_morning_kids_mode + name: "4-6 Early AM Kids" + - entity: input_select.morning_mode + name: "6-9 AM" + - entity: input_select.morning_kids_mode + name: "6-9 AM Kids" + - entity: input_select.late_morning_mode + name: "9-12 Late AM" + - entity: input_select.late_morning_kids_mode + name: "9-12 Late AM Kids" + - entity: input_select.early_afternoon_mode + name: "12-15 Early Day" + - entity: input_select.early_afternoon_kids_mode + name: "12-15 Early Day Kids" + - entity: input_select.late_afternoon_mode + name: "15-17 Late Day" + - entity: input_select.late_afternoon_kids_mode + name: "15-17 Late Day Kids" + - entity: input_select.early_evening_mode + name: "17-19 Early PM" + - entity: input_select.early_evening_kids_mode + name: "17-19 Early PM Kids" + - entity: input_select.evening_mode + name: "19-22 PM" + - entity: input_select.evening_kids_mode + name: "19-22 PM Kids" + - entity: input_select.late_evening_mode + name: "22-00 Late PM" + - entity: input_select.late_evening_kids_mode + name: "22-00 Late PM Kids" + - entity: input_select.night_mode + name: "00-4 Night" + - entity: input_select.night_kids_mode + name: "00-4 Night Kids" diff --git a/lovelace/view-inputs.yaml b/lovelace/view-inputs.yaml new file mode 100644 index 0000000..2307843 --- /dev/null +++ b/lovelace/view-inputs.yaml @@ -0,0 +1,167 @@ +title: Inputs +path: inputs +icon: mdi:toggle-switch +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 +cards: + +- type: entities + title: Toggles for Automations + show_header_toggle: false + entities: + - input_boolean.bedtime + - input_boolean.teens_bedtime + - input_boolean.kids_bedtime + - input_boolean.asleep + - input_boolean.teens_asleep + - input_boolean.kids_asleep + - input_boolean.adults_away + - input_boolean.kids_away + - input_boolean.all_away + - input_boolean.home_occupied + - input_boolean.vacation_mode + - input_boolean.clint_home_alone + - input_select.weaver_kids + - input_select.podein_kids + - type: divider + #style: + # height: 3px + # width: 100% + # margin-left: auto + # margin-right: auto + # background: "var(--divider-color)" + - input_boolean.lighting_automations + - input_boolean.brightness_automations + - input_boolean.lights_off_manually + - type: divider + - input_boolean.guest_mode + - input_boolean.alarm_mode + +- type: glance + title: Toggles for People Automations + columns: 3 + entities: + - entity: input_boolean.clint_home + tap_action: + action: toggle + - entity: input_boolean.clint_in_bed + tap_action: + action: toggle + - entity: input_boolean.clint_is_awake + tap_action: + action: toggle + - entity: input_boolean.emmett_home + tap_action: + action: toggle + - entity: input_boolean.emmett_in_bed + tap_action: + action: toggle + - entity: input_boolean.emmett_is_awake + tap_action: + action: toggle + - entity: input_boolean.bridget_home + tap_action: + action: toggle + - entity: input_boolean.bridget_in_bed + tap_action: + action: toggle + - entity: input_boolean.bridget_is_awake + tap_action: + action: toggle + - entity: input_boolean.kristy_home + tap_action: + action: toggle + - entity: input_boolean.kristy_in_bed + tap_action: + action: toggle + - entity: input_boolean.kristy_is_awake + tap_action: + action: toggle + - entity: input_boolean.marshall_home + tap_action: + action: toggle + - entity: input_boolean.marshall_in_bed + tap_action: + action: toggle + - entity: input_boolean.marshall_is_awake + tap_action: + action: toggle + - entity: input_boolean.tess_home + tap_action: + action: toggle + - entity: input_boolean.tess_in_bed + tap_action: + action: toggle + - entity: input_boolean.tess_is_awake + tap_action: + action: toggle + - entity: input_boolean.ebin_home + tap_action: + action: toggle + - entity: input_boolean.ebin_in_bed + tap_action: + action: toggle + - entity: input_boolean.ebin_is_awake + tap_action: + action: toggle + - entity: input_boolean.guest_home + tap_action: + action: toggle + - entity: input_boolean.guest_in_bed + tap_action: + action: toggle + - entity: input_boolean.guest_is_awake + tap_action: + action: toggle + +- type: entities + title: People + show_header_toggle: false + entities: + - input_select.clint_status_dropdown + - input_select.emmett_status_dropdown + - input_select.bridget_status_dropdown + - input_select.kristy_status_dropdown + - input_select.marshall_status_dropdown + - input_select.tess_status_dropdown + - input_select.ebin_status_dropdown + - input_select.guest_status_dropdown + + +- type: entities + title: Selections for Automations + show_header_toggle: false + entities: + - input_select.season + - sensor.season + +- type: entities + title: Light Levels + show_header_toggle: false + entities: + - binary_sensor.is_dark + - binary_sensor.is_dim + - binary_sensor.is_daylight + - sensor.front_porch_light_level + +- type: glance + title: White Noise + entities: + - entity: input_boolean.master_bedroom_asleep + tap_action: + action: toggle + - entity: input_boolean.nursery_asleep + tap_action: + action: toggle + +- type: entities + title: Misc + show_header_toggle: false + entities: + - input_boolean.allow_announcements + - input_boolean.out_of_bed_alert + - input_boolean.announce_bedtime + - input_boolean.guest_mode + - input_boolean.guest_home + - input_boolean.debug_snapshots \ No newline at end of file diff --git a/lovelace/view-little_kids.yaml b/lovelace/view-little_kids.yaml new file mode 100644 index 0000000..fa64b94 --- /dev/null +++ b/lovelace/view-little_kids.yaml @@ -0,0 +1,76 @@ +title: Little Kids +path: little_kids +icon: mdi:account-multiple-outline +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f +cards: + +- type: vertical-stack + cards: + - type: entities + entities: + - entity: binary_sensor.have_custody + secondary_info: last-triggered + - entity: input_select.weaver_kids + - entity: input_select.podein_kids + +- type: vertical-stack + cards: + - type: picture-glance + entities: + - input_boolean.emmett_home + camera_image: camera.google_photos_emmett_media + + - type: entities + title: Emmett + show_header_toggle: false + entities: + - entity: automation.emmett_away + secondary_info: last-triggered + - entity: automation.emmett_home + secondary_info: last-triggered + - entity: input_boolean.emmett_at_work + - entity: input_boolean.emmett_home + - entity: input_boolean.emmett_in_bed + - entity: input_boolean.emmett_is_awake + - entity: input_boolean.emmett_travelling + +- type: vertical-stack + cards: + - type: picture-glance + entities: + - input_boolean.bridget_home + camera_image: camera.google_photos_bridget_media + - type: entities + title: Bridget + show_header_toggle: false + entities: + - entity: automation.bridget_away + secondary_info: last-triggered + - entity: automation.bridget_home + secondary_info: last-triggered + - entity: input_boolean.bridget_at_work + - entity: input_boolean.bridget_home + - entity: input_boolean.bridget_in_bed + - entity: input_boolean.bridget_is_awake + - entity: input_boolean.bridget_travelling + +- type: vertical-stack + cards: + - type: picture-glance + entities: + - input_boolean.ebin_home + camera_image: camera.google_photos_ebin_media + - type: entities + title: Ebin + show_header_toggle: false + entities: + - entity: automation.ebin_away + secondary_info: last-triggered + - entity: automation.ebin_home + secondary_info: last-triggered + - entity: input_boolean.ebin_at_work + - entity: input_boolean.ebin_home + - entity: input_boolean.ebin_in_bed + - entity: input_boolean.ebin_is_awake + - entity: input_boolean.ebin_travelling diff --git a/lovelace/view-media.yaml b/lovelace/view-media.yaml new file mode 100644 index 0000000..2b73beb --- /dev/null +++ b/lovelace/view-media.yaml @@ -0,0 +1,348 @@ +title: Media players +path: media +icon: mdi:volume-high +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 +cards: + - type: vertical-stack + cards: + - type: entities + entities: + - entity: input_select.camera_dropdown + - entity: input_select.cast_to_screen_dropdown + - entity: script.execute_cast_dropdown + - type: entities + entities: + - group.ambient_sounds + - type: vertical-stack + cards: + - entity: media_player.front_room_tv + name: Front Room Roku + #type: media-control + type: custom:mini-media-player + group: true + icon: mdi:television + - entity: media_player.downstairs_roku + name: Downstairs Roku + #type: media-control + type: custom:mini-media-player + group: true + icon: mdi:projector + #type: media_control + - type: vertical-stack + cards: + - entity: media_player.front_room_hub + name: Front Room + #type: media-control + type: custom:mini-media-player + group: true + artwork: cover + tts: + platform: google_translate + - entity: media_player.kitchen + name: Kitchen + #type: media-control + type: custom:mini-media-player + group: true + artwork: cover + show_source: true + tts: + platform: google_translate + - entity: media_player.bathroom_mini + name: Bathroom + #type: media-control + type: custom:mini-media-player + group: true + artwork: cover + show_source: true + tts: + platform: google_translate + - entity: media_player.nursery_hub + name: Nursery + #type: media-control + type: custom:mini-media-player + group: true + artwork: cover + show_source: true + tts: + platform: google_translate + - entity: media_player.master_bedroom_clock + name: Master Bedroom + #type: media-control + type: custom:mini-media-player + group: true + artwork: cover + show_source: true + tts: + platform: google_translate + - entity: media_player.computer_area_hub + name: Computer Area + #type: media-control + type: custom:mini-media-player + group: true + artwork: cover + show_source: true + tts: + platform: google_translate + - entity: media_player.garage + name: Garage + #type: media-control + type: custom:mini-media-player + group: true + artwork: cover + show_source: true + tts: + platform: google_translate + - entity: media_player.deck + name: Deck + #type: media-control + type: custom:mini-media-player + group: true + artwork: cover + show_source: true + tts: + platform: google_translate + - entity: media_player.great_room + name: Great Room + #type: media-control + type: custom:mini-media-player + group: true + artwork: cover + show_source: true + tts: + platform: google_translate + - entity: media_player.utility_room_clock + name: Utility Room + #type: media-control + type: custom:mini-media-player + group: true + artwork: cover + show_source: true + tts: + platform: google_translate + + - type: vertical-stack + cards: + - entity: media_player.all_speakers + name: All Speakers # Only upstairs and downstairs, not outside + #type: media-control + type: custom:mini-media-player + group: true + artwork: material + show_source: true + hide: + controls: false + - entity: media_player.all_downstairs_speakers + name: All Downstairs Speakers #The speaker in the great room and at the computer desk + #type: media-control + type: custom:mini-media-player + group: true + artwork: material + show_source: true + tts: + platform: google_translate + entity_id: media_player.all_downstairs_speakers + hide: + controls: false + - entity: media_player.all_public_speakers + name: All Public Speakers #Indoor speakers that are not in a bedroom or used for annoucements + #type: media-control + type: custom:mini-media-player + group: true + artwork: material + show_source: true + tts: + platform: google_translate + entity_id: media_player.all_public_speakers + hide: + controls: false + - entity: media_player.all_upstairs_speakers + name: All Upstairs Speakers + #type: media-control + type: custom:mini-media-player + group: true + artwork: material + show_source: true + tts: + platform: google_translate + entity_id: media_player.all_upstairs_speakers + hide: + controls: false + - entity: media_player.downstairs_public + name: Downstairs Public + #type: media-control + type: custom:mini-media-player + group: true + artwork: material + show_source: true + tts: + platform: google_translate + entity_id: media_player.downstairs_public + hide: + controls: false + - entity: media_player.front_yard + name: Front Yard + #type: media-control + type: custom:mini-media-player + group: true + artwork: material + show_source: true + tts: + platform: google_translate + entity_id: media_player.front_yard + hide: + controls: false + - entity: media_player.inside_and_outside #All indoors and outdoor speakers + name: Inside and Outside + #type: media-control + type: custom:mini-media-player + group: true + artwork: material + show_source: true + tts: + platform: google_translate + entity_id: media_player.inside_and_outside + hide: + controls: false + - entity: media_player.outside + name: Outside + #type: media-control + type: custom:mini-media-player + group: true + artwork: material + show_source: true + tts: + platform: google_translate + entity_id: media_player.outside + hide: + controls: false + - entity: media_player.upstairs_public + name: Upstairs Public + #type: media-control + type: custom:mini-media-player + group: true + artwork: material + show_source: true + tts: + platform: google_translate + entity_id: media_player.upstairs_public + hide: + controls: false + + - type: vertical-stack + cards: + # Primary YouTube Music Player card + - type: vertical-stack + cards: + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: input_select.ytube_music_player_playlist + name: Playlist + layout: vertical + hide_icon: true + primary_info: state + secondary_info: name + - type: custom:mushroom-entity-card + entity: input_select.ytube_music_player_speakers + name: Speakers + hide_icon: true + layout: vertical + primary_info: state + secondary_info: name + - type: horizontal-stack + cards: + - type: custom:mushroom-media-player-card + entity: media_player.ytube_music_player + name: YouTube Music Player + volume_controls: + - volume_mute + - volume_set + use_media_info: true + use_media_artwork: true + media_controls: + - on_off + - previous + - next + - play_pause_stop + - type: vertical-stack + cards: + - !include /config/lovelace/templates/card-mini-media-player.yaml + # - type: entities + # entities: + # - entity: input_select.ytube_music_player_playlist + # - entity: input_select.ytube_music_player_source + # - entity: input_select.ytube_music_player_speakers + # - entity: input_boolean.ytube_music_player_playcontinuous + # - entity: input_select.ytube_music_player_playmode + # title: Songs + # - type: 'custom:mini-media-player' + # name: YouTube Music Player + # entity: media_player.ytube_music_player + # artwork: cover + # hide: + # shuffle: false + # icon_state: false + # repeat: false + # shortcuts: + # columns: 3 + # hide_when_off: true + # buttons: + # - name: All + # type: source + # id: all_speakers + # - name: In and Out + # type: source + # id: inside_and_outside + # - name: Outside + # type: source + # id: media_player.outside + # - name: Upstairs + # type: source + # id: all_upstairs_speakers + # - name: Downstairs + # type: source + # id: all_downstairs_speakers + # - name: Bathroom + # type: source + # id: bathroom_mini + # - name: Kitchen + # type: source + # id: kitchen + # - name: Computer Desk + # type: source + # id: computer_area_hub + # - name: Great Room + # type: source + # id: great_room + # - name: Nursery + # type: source + # id: nursery_hub + # - name: Master Bedroom + # type: source + # id: master_bedroom_clock + # - name: Front Room + # type: source + # id: front_room_hub + # - name: Alt Rock + # type: channel + # id: RDCLAK5uy_mBXcHMxLpl_Mwm6VcGG_kmsB3HEtvg4OM + # - name: Hamilton + # type: album + # id: MPREb_iNWH4dO6PQO + # - name: Timeless + # type: playlist + # id: RDCLAK5uy_mH5mS2pbI9c743F2Xoi7WxRVBbw7k3hPE + # - name: Goodnight + # type: playlist + # id: PLtfKVM9o2_5ag5qC9nHxl7tKBvGRnh2HM + # - name: Dance Games + # type: playlist + # id: PLtfKVM9o2_5YBQCwU-6NeAAuonxHfZ7ff + # - name: Ten Little Snowflakes + # type: track + # id: Ros6UL4dz_A + # - name: Lollipop + # type: track + # id: Yw0qIyZMtH8 diff --git a/lovelace/view-more-charts.yaml b/lovelace/view-more-charts.yaml new file mode 100644 index 0000000..c9b6172 --- /dev/null +++ b/lovelace/view-more-charts.yaml @@ -0,0 +1,167 @@ +title: More Charts +path: more-charts +icon: mdi:chart-timeline-variant-shimmer +type: sidebar +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f +cards: + - type: vertical-stack + cards: + - type: horizontal-stack + cards: + - entities: + - entity: sensor.master_bedroom_multisensor_air_temperature + name: Master Bedroom + - entity: sensor.nursery_multisensor_air_temperature + name: Nursery + - entity: sensor.thermostat_temperature + name: Thermostat + - entity: sensor.bar_temperature + name: Dining Room + - entity: sensor.front_room_thermostat_temperature + name: Front Room + - entity: sensor.kitchen_multisensor_air_temperature + name: Kitchen + - entity: sensor.entryway_temperature + name: Entryway + hours_to_show: 12 + refresh_interval: 60 + title: Upstairs Temp + type: history-graph + - entities: + - entity: sensor.master_bedroom_multisensor_humidity + name: Master Bedroom + - entity: sensor.nursery_multisensor_humidity + name: Nursery + - entity: sensor.front_room_thermostat_humidity + name: Front Room + - entity: sensor.kitchen_multisensor_humidity + name: Kitchen + - entity: sensor.thermostat_humidity + name: Thermostat + hours_to_show: 12 + refresh_interval: 60 + title: Upstairs Humidity + type: history-graph + - entities: + - entity: sensor.master_bathroom_thermostat_temperature + name: Master Bathroom + - entity: sensor.utility_room_thermostat_temperature + name: Utility Room + hours_to_show: 12 + refresh_interval: 60 + title: Bathroom Temperature + type: history-graph + - type: horizontal-stack + cards: + - entities: + - entity: sensor.computer_area_multisensor_air_temperature + name: Computer Area + - entity: sensor.entryway_temperature + name: Entryway + - entity: sensor.mancave_thermostat_temperature + name: Mancave + - entity: sensor.blue_room_thermostat_temperature + name: Blue Room + - entity: sensor.great_room_multisensor_air_temperature + name: Great Room + - entity: sensor.furnace_room_thermostat_temperature + name: Furnace Room + hours_to_show: 12 + refresh_interval: 60 + title: Downstairs Temp + type: history-graph + - entities: + - entity: sensor.computer_area_multisensor_humidity + name: Computer Area + - entity: sensor.great_room_multisensor_humidity + name: Great Room + - entity: sensor.mancave_thermostat_humidity + name: Mancave + - entity: sensor.blue_room_thermostat_humidity + name: Blue Room + - entity: sensor.furnace_room_thermostat_humidity + name: Furnace Room + hours_to_show: 12 + refresh_interval: 60 + title: Downstairs Humidity + type: history-graph + - entities: + - entity: sensor.master_bathroom_thermostat_humidity + name: Master Bathroom + - entity: sensor.utility_room_thermostat_humidity + name: Utility Room + hours_to_show: 12 + refresh_interval: 60 + title: Bathroom Humidity + type: history-graph + + - type: vertical-stack + view_layout: + position: sidebar + cards: + # - type: glance + # columns: 3 + # show_name: true + # show_icon: false + # entities: + # - entity: sensor.upstairs_max_temperature + # name: Upstairs Max + # - entity: sensor.upstairs_mean_temperature + # name: Upstairs Mean + # - entity: sensor.upstairs_min_temperature + # name: Upstairs Min + # - entity: sensor.upstairs_max_humidity + # name: Upstairs Max + # - entity: sensor.upstairs_mean_humidity + # name: Upstairs Mean + # - entity: sensor.upstairs_min_humidity + # name: Upstairs Min + # - entity: sensor.downstairs_max_temperature + # name: Basement Max + # - entity: sensor.downstairs_mean_temperature + # name: Basement Mean + # - entity: sensor.downstairs_min_temperature + # name: Basement Min + # - entity: sensor.downstairs_max_humidity + # name: Basement Max + # - entity: sensor.downstairs_mean_humidity + # name: Basement Mean + # - entity: sensor.downstairs_min_humidity + # name: Basement Min + + - entities: + - entity: sensor.master_bedroom_multisensor_illuminance + name: Master Bedroom + - entity: sensor.nursery_multisensor_illuminance + name: Nursery + - entity: sensor.front_room_light_level + name: Front Room + - entity: sensor.bar_light_level + name: Dining Room + - entity: sensor.entryway_light_level + name: Entryway + - entity: sensor.kitchen_multisensor_illuminance + name: Kitchen + hours_to_show: 12 + refresh_interval: 60 + title: Upstairs Light Level + type: history-graph + + - entities: + - entity: sensor.computer_area_multisensor_illuminance + name: Computer Area + - entity: sensor.great_room_multisensor_illuminance + name: Great Room + hours_to_show: 12 + refresh_interval: 60 + title: Downstairs Light Level + type: history-graph + + - entities: + - entity: sensor.front_porch_light_level + - entity: sensor.deck_light_level + hours_to_show: 12 + refresh_interval: 60 + title: Outdoor Light Level + type: history-graph diff --git a/lovelace/view-overview.yaml b/lovelace/view-overview.yaml new file mode 100644 index 0000000..3e35540 --- /dev/null +++ b/lovelace/view-overview.yaml @@ -0,0 +1,1560 @@ +title: Overview +path: home +icon: mdi:home +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 +badges: + - type: custom:mushroom-chips-card + alignment: center + chips: + - type: weather + entity: weather.openweathermap_daily + show_conditions: true + show_temperature: true + tap_action: + action: navigate + navigation_path: /details-yml/weather + + - type: conditional + conditions: + - entity: sensor.thermal_comfort_dew_point_perception + state_not: unavailable + chip: + type: template + entity: sensor.thermal_comfort_dew_point_perception + content: > + {% if is_state('sensor.thermal_comfort_dew_point_perception','dry') %} + Dry + {% elif is_state('sensor.thermal_comfort_dew_point_perception','very_comfortable') %} + Very Comfy + {% elif is_state('sensor.thermal_comfort_dew_point_perception','comfortable') %} + Comfy + {% elif is_state('sensor.thermal_comfort_dew_point_perception','ok_but_humid') %} + Humid + {% elif is_state('sensor.thermal_comfort_dew_point_perception','somewhat_uncomfortable') %} + Somewhat Uncomfy + {% elif is_state('sensor.thermal_comfort_dew_point_perception','quite_uncomfortable') %} + Quite Uncomfy + {% elif is_state('sensor.thermal_comfort_dew_point_perception','extremely_uncomfortable') %} + Extremely Uncomfy + {% elif is_state('sensor.thermal_comfort_dew_point_perception','severely_high') %} + Severely High + {% endif %} + icon: tc:dew-point + # icon: > + # {% if is_state('sensor.thermal_comfort_dew_point_perception','dry') %} + # mdi:water-outline + # {% elif is_state('sensor.thermal_comfort_dew_point_perception','very_comfortable') %} + # mdi:water + # {% elif is_state('sensor.thermal_comfort_dew_point_perception','comfortable') %} + # mdi:water + # {% elif is_state('sensor.thermal_comfort_dew_point_perception','ok_but_humid') %} + # mdi:water-plus + # {% elif is_state('sensor.thermal_comfort_dew_point_perception','somewhat_uncomfortable') %} + # mdi:water-percent + # {% elif is_state('sensor.thermal_comfort_dew_point_perception','quite_uncomfortable') %} + # mdi:water-percent + # {% elif is_state('sensor.thermal_comfort_dew_point_perception','extremely_uncomfortable') %} + # mdi:water-percent-alert + # {% elif is_state('sensor.thermal_comfort_dew_point_perception','severely_high') %} + # mdi:water-percent-alert + # {% endif %} + icon_color: > + {% if is_state('sensor.thermal_comfort_dew_point_perception','dry') %} + gray + {% elif is_state('sensor.thermal_comfort_dew_point_perception','very_comfortable') %} + green + {% elif is_state('sensor.thermal_comfort_dew_point_perception','comfortable') %} + green + {% elif is_state('sensor.thermal_comfort_dew_point_perception','ok_but_humid') %} + blue + {% elif is_state('sensor.thermal_comfort_dew_point_perception','somewhat_uncomfortable') %} + yellow + {% elif is_state('sensor.thermal_comfort_dew_point_perception','quite_uncomfortable') %} + orange + {% elif is_state('sensor.thermal_comfort_dew_point_perception','extremely_uncomfortable') %} + orange + {% elif is_state('sensor.thermal_comfort_dew_point_perception','severely_high') %} + red + {% endif %} + tap_action: + action: navigate + navigation_path: /details-yml/hvac + + - type: conditional + conditions: + - entity: sensor.thermal_comfort_humidex_perception + state_not: unavailable + chip: + type: template + entity: sensor.thermal_comfort_humidex_perception + content: > + {% if is_state('sensor.thermal_comfort_humidex_perception','comfortable') %} + Comfy + {% elif is_state('sensor.thermal_comfort_humidex_perception','noticable_discomfort') %} + Noticable Discomfort + {% elif is_state('sensor.thermal_comfort_humidex_perception','evident_discomfort') %} + Evident Discomfort + {% elif is_state('sensor.thermal_comfort_humidex_perception','great_discomfort') %} + Great Discomfort + {% elif is_state('sensor.thermal_comfort_humidex_perception','dangerous_discomfort') %} + Dangerous + {% elif is_state('sensor.thermal_comfort_humidex_perception','heat_stroke') %} + Heat Stroke + {% endif %} + icon: tc:thermal-perception + # icon: > + # {% if is_state('sensor.thermal_comfort_humidex_perception','comfortable') %} + # mdi:thermometer-low + # {% elif is_state('sensor.thermal_comfort_humidex_perception','noticable_discomfort') %} + # mdi:thermometer + # {% elif is_state('sensor.thermal_comfort_humidex_perception','evident_discomfort') %} + # mdi:thermometer-high + # {% elif is_state('sensor.thermal_comfort_humidex_perception','great_discomfort') %} + # mdi:thermometer-high + # {% elif is_state('sensor.thermal_comfort_humidex_perception','dangerous_discomfort') %} + # mdi:thermometer-alert + # {% elif is_state('sensor.thermal_comfort_humidex_perception','heat_stroke') %} + # mdi:thermometer-alert + # {% endif %} + icon_color: > + {% if is_state('sensor.thermal_comfort_humidex_perception','comfortable') %} + green + {% elif is_state('sensor.thermal_comfort_humidex_perception','noticable_discomfort') %} + yellow + {% elif is_state('sensor.thermal_comfort_humidex_perception','evident_discomfort') %} + orange + {% elif is_state('sensor.thermal_comfort_humidex_perception','great_discomfort') %} + orange + {% elif is_state('sensor.thermal_comfort_humidex_perception','dangerous_discomfort') %} + red + {% elif is_state('sensor.thermal_comfort_humidex_perception','heat_stroke') %} + red + {% endif %} + tap_action: + action: navigate + navigation_path: /details-yml/hvac + + - type: conditional + conditions: + - entity: sensor.thermal_comfort_summer_scharlau_perception + state_not: unavailable + - entity: sensor.thermal_comfort_summer_scharlau_perception + state_not: outside_calculable_range + chip: + type: template + entity: sensor.thermal_comfort_summer_scharlau_perception + content: > + {% if is_state('sensor.thermal_comfort_summer_scharlau_perception','comfortable') %} + Comfy + {% elif is_state('sensor.thermal_comfort_summer_scharlau_perception','slightly_uncomfortable') %} + Slightly Uncomfy + {% elif is_state('sensor.thermal_comfort_summer_scharlau_perception','moderatly_uncomfortable') %} + Moderatly Uncomfy + {% elif is_state('sensor.thermal_comfort_summer_scharlau_perception','highly_uncomfortable') %} + Highly Uncomfortable + {% endif %} + icon: > + {% if is_state('sensor.thermal_comfort_summer_scharlau_perception','comfortable') %} + mdi:thermometer-low + {% elif is_state('sensor.thermal_comfort_summer_scharlau_perception','slightly_uncomfortable') %} + mdi:thermometer + {% elif is_state('sensor.thermal_comfort_summer_scharlau_perception','moderatly_uncomfortable') %} + mdi:thermometer-high + {% elif is_state('sensor.thermal_comfort_summer_scharlau_perception','highly_uncomfortable') %} + mdi:thermometer-alert + {% endif %} + icon_color: > + {% if is_state('sensor.thermal_comfort_summer_scharlau_perception','comfortable') %} + green + {% elif is_state('sensor.thermal_comfort_summer_scharlau_perception','slightly_uncomfortable') %} + yellow + {% elif is_state('sensor.thermal_comfort_summer_scharlau_perception','moderatly_uncomfortable') %} + orange + {% elif is_state('sensor.thermal_comfort_summer_scharlau_perception','highly_uncomfortable') %} + red + {% endif %} + tap_action: + action: navigate + navigation_path: /details-yml/hvac + + - type: conditional + conditions: + - entity: sensor.thermal_comfort_winter_scharlau_perception + state_not: unavailable + - entity: sensor.thermal_comfort_winter_scharlau_perception + state_not: outside_calculable_range + chip: + type: template + entity: sensor.thermal_comfort_winter_scharlau_perception + content: > + {% if is_state('sensor.thermal_comfort_winter_scharlau_perception','comfortable') %} + Comfy + {% elif is_state('sensor.thermal_comfort_winter_scharlau_perception','slightly_uncomfortable') %} + Slightly Uncomfy + {% elif is_state('sensor.thermal_comfort_winter_scharlau_perception','moderatly_uncomfortable') %} + Moderatly Uncomfy + {% elif is_state('sensor.thermal_comfort_winter_scharlau_perception','highly_uncomfortable') %} + Highly Uncomfortable + {% endif %} + icon: > + {% if is_state('sensor.thermal_comfort_winter_scharlau_perception','comfortable') %} + mdi:snowflake-off + {% elif is_state('sensor.thermal_comfort_winter_scharlau_perception','slightly_uncomfortable') %} + mdi:snowflake + {% elif is_state('sensor.thermal_comfort_winter_scharlau_perception','moderatly_uncomfortable') %} + mdi:snowflake-thermometer + {% elif is_state('sensor.thermal_comfort_winter_scharlau_perception','highly_uncomfortable') %} + mdi:snowflake-alert + {% endif %} + icon_color: > + {% if is_state('sensor.thermal_comfort_winter_scharlau_perception','comfortable') %} + green + {% elif is_state('sensor.thermal_comfort_winter_scharlau_perception','slightly_uncomfortable') %} + yellow + {% elif is_state('sensor.thermal_comfort_winter_scharlau_perception','moderatly_uncomfortable') %} + orange + {% elif is_state('sensor.thermal_comfort_winter_scharlau_perception','highly_uncomfortable') %} + red + {% endif %} + tap_action: + action: navigate + navigation_path: /details-yml/hvac + + - type: conditional + conditions: + - entity: sensor.thermal_comfort_frost_risk + state_not: unavailable + - entity: sensor.thermal_comfort_frost_risk + state_not: no_risk + chip: + type: template + entity: sensor.thermal_comfort_frost_risk + content: > + {% if is_state('sensor.thermal_comfort_frost_risk','no_risk') %} + No Risk + {% elif is_state('sensor.thermal_comfort_frost_risk','unlikely') %} + Unlikely + {% elif is_state('sensor.thermal_comfort_frost_risk','probable') %} + Probable + {% elif is_state('sensor.thermal_comfort_frost_risk','high') %} + Hi Risk + {% endif %} + icon: > + {% if is_state('sensor.thermal_comfort_frost_risk','no_risk') %} + mdi:snowflake-off + {% elif is_state('sensor.thermal_comfort_frost_risk','unlikely') %} + mdi:snowflake-melt + {% elif is_state('sensor.thermal_comfort_frost_risk','probable') %} + mdi:car-defrost-rear + {% elif is_state('sensor.thermal_comfort_frost_risk','high') %} + mdi:car-defrost-front + {% endif %} + icon_color: > + {% if is_state('sensor.thermal_comfort_frost_risk','no_risk') %} + green + {% elif is_state('sensor.thermal_comfort_frost_risk','unlikely') %} + yellow + {% elif is_state('sensor.thermal_comfort_frost_risk','probable') %} + orange + {% elif is_state('sensor.thermal_comfort_frost_risk','high') %} + red + {% endif %} + tap_action: + action: navigate + navigation_path: /details-yml/hvac + + - type: conditional + conditions: + - entity: sensor.thermal_comfort_summer_simmer_perception + state_not: unavailable + chip: + type: template + entity: sensor.thermal_comfort_summer_simmer_perception + content: > + {% if is_state('sensor.thermal_comfort_summer_simmer_perception','cool') %} + Cool + {% elif is_state('sensor.thermal_comfort_summer_simmer_perception','slightly_cool') %} + Cool + {% elif is_state('sensor.thermal_comfort_summer_simmer_perception','comfortable') %} + Comfy + {% elif is_state('sensor.thermal_comfort_summer_simmer_perception','slightly_warm') %} + Warm + {% elif is_state('sensor.thermal_comfort_summer_simmer_perception','increasing_discomfort') %} + Warm + {% elif is_state('sensor.thermal_comfort_summer_simmer_perception','extremely_warm') %} + Hot + {% elif is_state('sensor.thermal_comfort_summer_simmer_perception','danger_of_heatstroke') %} + Hot + {% elif is_state('sensor.thermal_comfort_summer_simmer_perception','extreme_danger_of_heatstroke') %} + Danger + {% elif is_state('sensor.thermal_comfort_summer_simmer_perception','circulatory_collapse_imminent') %} + Danger + {% endif %} + icon: tc:simmer-zone + # icon: > + # {% if is_state('sensor.thermal_comfort_summer_simmer_perception','cool') %} + # mdi:thermometer-low + # {% elif is_state('sensor.thermal_comfort_summer_simmer_perception','slightly_cool') %} + # mdi:thermometer-low + # {% elif is_state('sensor.thermal_comfort_summer_simmer_perception','comfortable') %} + # mdi:thermometer + # {% elif is_state('sensor.thermal_comfort_summer_simmer_perception','slightly_warm') %} + # mdi:thermometer-chevron-up + # {% elif is_state('sensor.thermal_comfort_summer_simmer_perception','increasing_discomfort') %} + # mdi:thermometer-chevron-up + # {% elif is_state('sensor.thermal_comfort_summer_simmer_perception','extremely_warm') %} + # mdi:thermometer-high + # {% elif is_state('sensor.thermal_comfort_summer_simmer_perception','danger_of_heatstroke') %} + # mdi:thermometer-high + # {% elif is_state('sensor.thermal_comfort_summer_simmer_perception','extreme_danger_of_heatstroke') %} + # mdi:thermometer-alert + # {% elif is_state('sensor.thermal_comfort_summer_simmer_perception','circulatory_collapse_imminent') %} + # mdi:thermometer-alert + # {% endif %} + icon_color: > + {% if is_state('sensor.thermal_comfort_summer_simmer_perception','cool') %} + blue + {% elif is_state('sensor.thermal_comfort_summer_simmer_perception','slightly_cool') %} + blue + {% elif is_state('sensor.thermal_comfort_summer_simmer_perception','comfortable') %} + green + {% elif is_state('sensor.thermal_comfort_summer_simmer_perception','slightly_warm') %} + yellow + {% elif is_state('sensor.thermal_comfort_summer_simmer_perception','increasing_discomfort') %} + yellow + {% elif is_state('sensor.thermal_comfort_summer_simmer_perception','extremely_warm') %} + orange + {% elif is_state('sensor.thermal_comfort_summer_simmer_perception','danger_of_heatstroke') %} + orange + {% elif is_state('sensor.thermal_comfort_summer_simmer_perception','extreme_danger_of_heatstroke') %} + red + {% elif is_state('sensor.thermal_comfort_summer_simmer_perception','circulatory_collapse_imminent') %} + red + {% endif %} + tap_action: + action: navigate + navigation_path: /details-yml/hvac + + - type: conditional + conditions: + - entity: sensor.thermal_comfort_thoms_discomfort_perception + state_not: unavailable + chip: + type: template + entity: sensor.thermal_comfort_thoms_discomfort_perception + content: > + {% if is_state('sensor.thermal_comfort_thoms_discomfort_perception','no_discomfort') %} + Comfy + {% elif is_state('sensor.thermal_comfort_thoms_discomfort_perception','less_then_half') %} + < 1/2 + {% elif is_state('sensor.thermal_comfort_thoms_discomfort_perception','more_then_half') %} + > 1/2 + {% elif is_state('sensor.thermal_comfort_thoms_discomfort_perception','most') %} + Most + {% elif is_state('sensor.thermal_comfort_thoms_discomfort_perception','everyone') %} + Everyone + {% elif is_state('sensor.thermal_comfort_thoms_discomfort_perception','dangerous') %} + Dangerous + {% endif %} + icon: > + {% if is_state('sensor.thermal_comfort_thoms_discomfort_perception','no_discomfort') %} + mdi:thermometer-low + {% elif is_state('sensor.thermal_comfort_thoms_discomfort_perception','less_then_half') %} + mdi:thermometer + {% elif is_state('sensor.thermal_comfort_thoms_discomfort_perception','more_then_half') %} + mdi:thermometer + {% elif is_state('sensor.thermal_comfort_thoms_discomfort_perception','most') %} + mdi:thermometer-high + {% elif is_state('sensor.thermal_comfort_thoms_discomfort_perception','everyone') %} + mdi:thermometer-high + {% elif is_state('sensor.thermal_comfort_thoms_discomfort_perception','dangerous') %} + mdi:thermometer-alert + {% endif %} + icon_color: > + {% if is_state('sensor.thermal_comfort_thoms_discomfort_perception','no_discomfort') %} + green + {% elif is_state('sensor.thermal_comfort_thoms_discomfort_perception','less_then_half') %} + yellow + {% elif is_state('sensor.thermal_comfort_thoms_discomfort_perception','more_then_half') %} + yellow + {% elif is_state('sensor.thermal_comfort_thoms_discomfort_perception','most') %} + orange + {% elif is_state('sensor.thermal_comfort_thoms_discomfort_perception','everyone') %} + orange + {% elif is_state('sensor.thermal_comfort_thoms_discomfort_perception','dangerous') %} + red + {% endif %} + tap_action: + action: navigate + navigation_path: /details-yml/hvac + + - type: conditional + conditions: + - entity: sensor.frigate_status + state: error + chip: + type: entity + entity: sensor.frigate_status + icon_color: red + name: Frigate + + - type: conditional + conditions: + - entity: binary_sensor.theater_mode_at_home + state: 'on' + chip: + type: template + entity: binary_sensor.theater_mode_at_home + #content: Theater + icon: mdi:filmstrip + icon_color: red + tap_action: + action: navigate + navigation_path: /details-yml/mobile-app + + - type: conditional + conditions: + - entity: binary_sensor.dnd_at_home + state: 'on' + chip: + type: template + entity: binary_sensor.dnd_at_home + content: DND + icon: mdi:minus-circle + icon_color: red + tap_action: + action: navigate + navigation_path: /details-yml/mobile-app + + - type: conditional + conditions: + - condition: numeric_state + entity: sensor.pixel_7_volume_level_ringer + below: 1 + chip: + type: template + entity: sensor.pixel_7_volume_level_ringer + content: Silent + icon: mdi:cellphone + icon_color: red + tap_action: + action: navigate + navigation_path: /details-yml/mobile-app + + - type: conditional + conditions: + - entity: binary_sensor.sprinkler_in_season + state: 'on' + chip: + type: entity + entity: sensor.sprinkler_current_status + tap_action: + action: navigate + navigation_path: /phone-yaml/plants + + - type: conditional + conditions: + - entity: binary_sensor.sprinkler_should_winterize + state: 'on' + chip: + type: entity + entity: binary_sensor.sprinkler_should_winterize + content_info: name + tap_action: + action: navigate + navigation_path: /phone-yaml/plants + + - type: conditional + conditions: + - entity: binary_sensor.sprinkler_should_dewinterize + state: 'on' + chip: + type: entity + entity: binary_sensor.sprinkler_should_dewinterize + content_info: name + tap_action: + action: navigate + navigation_path: /phone-yaml/plants + + - type: conditional + conditions: + - entity: sensor.chickadee_unread + state_not: unavailable + - entity: sensor.chickadee_unread + state_not: '0' + chip: + type: entity + entity: sensor.chickadee_unread + + - type: conditional + conditions: + - entity: sensor.watchman_missing_entities + state_not: unavailable + - entity: sensor.watchman_missing_entities + state_not: '0' + chip: + type: entity + entity: sensor.watchman_missing_entities + tap_action: + action: navigate + navigation_path: /details-yml/watchman + + - type: conditional + conditions: + - entity: sensor.watchman_missing_services + state_not: unavailable + - entity: sensor.watchman_missing_services + state_not: '0' + chip: + type: entity + entity: sensor.watchman_missing_services + tap_action: + action: navigate + navigation_path: /details-yml/watchman + + - type: conditional + conditions: + - entity: sensor.open_windows_count + state_not: unavailable + - entity: sensor.open_windows_count + state_not: '0' + chip: + type: template + entity: group.my_exterior_windows + icon: mdi:window-open-variant + content: "{{states('sensor.open_windows_count')}}" + tap_action: + action: more-info + + - type: conditional + conditions: + - entity: sensor.open_external_doors_count + state_not: unavailable + - entity: sensor.open_external_doors_count + state_not: '0' + chip: + type: template + entity: group.my_exterior_doors + icon: > + {% if is_state('binary_sensor.patio_door_contact','on')-%} + mdi:door-sliding-open + {% elif is_state('binary_sensor.garage_door','on')-%} + mdi:garage-open + {% else -%} + mdi:door-open + {%- endif %} + content: "{{states('sensor.open_external_doors_count')}}" + tap_action: + action: more-info + + - type: conditional + conditions: + - entity: sensor.lights_left_on_count + state_not: unavailable + - entity: sensor.lights_left_on_count + state_not: '0' + chip: + type: template + entity: group.lights_left_on + icon: mdi:lightbulb-on + tap_action: + action: more-info + content: "{{states('sensor.lights_left_on_count')}}" + + - type: conditional + conditions: + - entity: group.all_my_speakers + state_not: unavailable + chip: + type: template + entity: group.all_my_speakers + icon: mdi:speaker-multiple + tap_action: + action: navigate + navigation_path: /phone-yaml/media + content: "{{states('sensor.speakers_on_count')}}" + + - type: conditional + conditions: + - entity: binary_sensor.need_salt + state: 'on' + chip: + type: entity + entity: binary_sensor.need_salt + content_info: none + + - type: spacer + + - type: conditional + conditions: + - entity: input_boolean.clint_needs_am_meds + state: 'on' + chip: + type: entity + entity: input_boolean.clint_needs_am_meds + content_info: name + name: AM + tap_action: + action: toggle + + - type: conditional + conditions: + - entity: input_boolean.clint_needs_pm_meds + state: 'on' + chip: + type: entity + entity: input_boolean.clint_needs_pm_meds + content_info: name + name: PM + tap_action: + action: toggle + + - type: conditional + conditions: + - entity: sensor.dishwasher + state_not: 'idle' + chip: + type: template + entity: input_boolean.empty_dishwasher + icon: > + {% if is_state('sensor.dishwasher','running')-%} + mdi:dishwasher + {% elif is_state('sensor.dishwasher','pending')-%} + mdi:dishwasher-alert + {%- endif %} + icon_color: > + {% if is_state('sensor.dishwasher','running')-%} + amber + {% elif is_state('sensor.dishwasher','pending')-%} + blue + {% else -%} + red + {%- endif %} + tap_action: + action: navigate + navigation_path: /phone-yaml/dishwasher + + - type: conditional + conditions: + - entity: sensor.washing_machine + state_not: 'idle' + chip: + type: template + entity: input_boolean.swap_laundry + icon: > + {% if is_state('sensor.washing_machine','running')-%} + mdi:washing-machine + {% elif is_state('sensor.washing_machine','pending')-%} + mdi:washing-machine-alert + {%- endif %} + icon_color: > + {% if is_state('sensor.washing_machine','running')-%} + amber + {% elif is_state('sensor.washing_machine','pending')-%} + blue + {% else -%} + red + {%- endif %} + tap_action: + action: navigate + navigation_path: /phone-yaml/washing-machine + + - type: conditional + conditions: + - entity: sensor.tumble_dryer + state_not: 'idle' + chip: + type: template + entity: input_boolean.fold_clothes + icon: > + {% if is_state('sensor.tumble_dryer','running')-%} + mdi:tumble-dryer + {% elif is_state('sensor.tumble_dryer','pending')-%} + mdi:tumble-dryer-alert + {%- endif %} + icon_color: > + {% if is_state('sensor.tumble_dryer','running')-%} + amber + {% elif is_state('sensor.tumble_dryer','pending')-%} + blue + {% else -%} + red + {%- endif %} + tap_action: + action: navigate + navigation_path: /phone-yaml/tumble-dryer + + - type: custom:mushroom-chips-card + alignment: center + chips: + - type: entity + entity: input_text.person_clint + use_entity_picture: true + - type: conditional + conditions: + - entity: binary_sensor.kids_possible + state: 'on' + chip: + type: entity + entity: input_text.person_emmett + use_entity_picture: true + - type: conditional + conditions: + - entity: binary_sensor.kids_possible + state: 'on' + chip: + type: entity + entity: input_text.person_bridget + use_entity_picture: true + - type: conditional + conditions: + - entity: binary_sensor.kids_possible + state: 'on' + - entity: person.ebin + state: 'home' + chip: + type: entity + entity: input_text.person_ebin + use_entity_picture: true + - type: conditional + conditions: + - entity: binary_sensor.kids_possible + state: 'on' + chip: + type: entity + entity: input_datetime.kids_bedtime_announcement_time + icon: mdi:bed-clock + + - type: entity-filter + entities: + - entity: sensor.processor_use + name: Procesor + - entity: sensor.disk_use_percent_home + name: Disk + - entity: sensor.dream_nas_volume_1_volume_used + name: NAS + state_filter: + - operator: ">" + value: 80 + + - type: entity-filter + entities: + - entity: sensor.nws_alerts + name: NWS Alert + icon: mdi:alert + tap_action: + action: navigate + navigation_path: /details-yml/nws-alerts + state_filter: + - operator: ">" + value: 0 + + - type: entity-filter + entities: + - entity: sensor.nursery_thermal_comfort_dew_point_perception + name: Nursery + tap_action: + action: navigate + navigation_path: /details-yml/hvac + - entity: sensor.master_bedroom_thermal_comfort_dew_point_perception + name: Bedroom + tap_action: + action: navigate + navigation_path: /details-yml/hvac + - entity: sensor.great_room_thermal_comfort_dew_point_perception + name: Great Room + tap_action: + action: navigate + navigation_path: /details-yml/hvac + state_filter: + - "somewhat_uncomfortable" + - "quite_uncomfortable" + - "extremely_uncomfortable" + - "severely_high" + + - type: entity-filter + entities: + - entity: sensor.openweathermap_hourly_forecast_precipitation_probability + name: Precip % + tap_action: + action: navigate + navigation_path: /details-yml/weather + state_filter: + - operator: ">" + value: 30 + + - type: entity-filter + entities: + - entity: sensor.lowest_door_battery + name: Door + tap_action: + action: navigate + navigation_path: /details-yml/batteries + - entity: sensor.lowest_window_battery + name: Window + tap_action: + action: navigate + navigation_path: /details-yml/batteries + - entity: sensor.lowest_thermostat_battery + name: Thermostat + tap_action: + action: navigate + navigation_path: /details-yml/batteries + - entity: sensor.lowest_zwave_device_battery + name: ZWave + tap_action: + action: navigate + navigation_path: /details-yml/batteries + - entity: sensor.lowest_xiaomi_plant_sensor_battery + name: BLE Plant + tap_action: + action: navigate + navigation_path: /details-yml/batteries + - entity: sensor.lowest_ecowitt_battery + name: 433 Plant + tap_action: + action: navigate + navigation_path: /details-yml/batteries + - entity: sensor.lowest_hue_device_battery + name: Hue + tap_action: + action: navigate + navigation_path: /details-yml/batteries + state_filter: + - operator: "<" + value: 20 + + - type: entity-filter + entities: + - entity: binary_sensor.last_chance_to_mow + name: Losing Daylight + - entity: binary_sensor.too_late_to_mow + name: Dark Soon + # - entity: device_tracker.dream_frigate + # name: Frigate + - entity: binary_sensor.hacs_update_available + name: HACS + tap_action: + action: navigate + navigation_path: /hacs/entry + - entity: binary_sensor.need_to_open_something_too_warm_or_cold + name: Open Something + tap_action: + action: navigate + navigation_path: /details-yml/hvac + - entity: binary_sensor.something_open_too_warm_or_cold + name: Close Something + tap_action: + action: navigate + navigation_path: /details-yml/hvac + - entity: input_boolean.doorbell + name: Doorbell + - entity: plant.plant_sensor_cea4 + name: Lilly Plants + tap_action: + action: navigate + navigation_path: /phone-yaml/plants + - entity: plant.plant_sensor_3eb0 + name: Green Onions + tap_action: + action: navigate + navigation_path: /phone-yaml/plants + - entity: plant.plant_sensor_3eae + name: Lavendar Plants + tap_action: + action: navigate + navigation_path: /phone-yaml/plants + - entity: plant.fineoffset_wh51_0ce593 + name: Hostas + tap_action: + action: navigate + navigation_path: /phone-yaml/plants + - entity: plant.fineoffset_wh51_00f935 + name: Dasies + tap_action: + action: navigate + navigation_path: /phone-yaml/plants + - entity: plant.fineoffset_wh51_0d1e11 + name: Cacti + tap_action: + action: navigate + navigation_path: /phone-yaml/plants + - entity: binary_sensor.clint_s_watch_needs_to_charge + name: Charge Watch + tap_action: + action: navigate + navigation_path: /details-yml/batteries + - entity: binary_sensor.clint_s_watch_done_charging + name: Watch Charged + tap_action: + action: navigate + navigation_path: /details-yml/batteries + - entity: binary_sensor.check_mail + name: Mail + tap_action: + action: call-service + service: homeassistant.turn_on + service_data: + entity_id: input_boolean.mail_checked + - entity: binary_sensor.take_dumpster_to_curb + name: Trash + tap_action: + action: call-service + service: homeassistant.turn_on + service_data: + entity_id: input_boolean.trash_out + hold_action: + action: more-info + - entity: binary_sensor.hassio_version_update_available + name: Update + - entity: binary_sensor.computer_chair_contact_occupied + name: Comp Chair + - entity: binary_sensor.grocy_overdue_chores + name: Chores + tap_action: + action: navigate + navigation_path: /details-yml/chores + - entity: binary_sensor.grocy_overdue_tasks + name: Tasks + tap_action: + action: navigate + navigation_path: /details-yml/chores + - entity: binary_sensor.grocy_overdue_products + name: Overdue + tap_action: + action: navigate + navigation_path: /details-yml/stock + - entity: binary_sensor.grocy_missing_products + name: Missing + tap_action: + action: navigate + navigation_path: /details-yml/stock + - entity: binary_sensor.grocy_expiring_products + name: Expiring + tap_action: + action: navigate + navigation_path: /details-yml/stock + - entity: binary_sensor.grocy_expired_products + name: Expired + tap_action: + action: navigate + navigation_path: /details-yml/stock + - entity: binary_sensor.humidity_too_low + name: Too Dry + hold_action: + action: more-info + - entity: binary_sensor.humidity_too_high + name: Too Humid + hold_action: + action: more-info + - entity: binary_sensor.workshop_person_occupancy + name: Workshop + tap_action: + action: navigate + navigation_path: /ai-yml/ai-cam04 + - entity: binary_sensor.walkway_person_occupancy + name: Walkway + tap_action: + action: navigate + navigation_path: /ai-yml/ai-cam04 + - entity: binary_sensor.back_yard_person_occupancy + name: Yard + tap_action: + action: navigate + navigation_path: /ai-yml/ai-cam14 + - entity: binary_sensor.front_yard_person_occupancy + name: Front + tap_action: + action: navigate + navigation_path: /ai-yml/ai-cam19 + - entity: binary_sensor.driveway_east_side_vehicle_occupancy + name: Driveway + tap_action: + action: navigate + navigation_path: /ai-yml/ai-cam19 + - entity: binary_sensor.driveway_center_vehicle_occupancy + name: Driveway + tap_action: + action: navigate + navigation_path: /ai-yml/ai-cam19 + - entity: binary_sensor.driveway_west_side_vehicle_occupancy + name: Driveway + tap_action: + action: navigate + navigation_path: /ai-yml/ai-cam19 + # - entity: input_boolean.guest_mode + # name: Guest Mode + # tap_action: + # action: toggle + + - entity: binary_sensor.close_kitchen_fridge + name: Fridge + state_filter: + - "on" + - "problem" + - "running" + - "not_home" + + # - type: entity-filter + # entities: + # - entity: sensor.dishwasher + # icon: mdi:dishwasher + # name: Clean + # - entity: sensor.washing_machine + # icon: mdi:washing-machine + # name: Swap + # - entity: sensor.tumble_dryer + # icon: mdi:tumble-dryer + # name: Fold + # state_filter: + # - "pending" + + - type: entity-filter + entities: + - entity: sensor.energy_tariff + icon: mdi:cash-multiple + name: Non-Peak + tap_action: + action: navigate + navigation_path: /details-yml/power-breaker + state_filter: + - "Summer Non-Peak" + + - type: entity-filter + entities: + - entity: sensor.energy_tariff + icon: mdi:cash-100 + name: Peak + tap_action: + action: navigate + navigation_path: /details-yml/power-breaker + state_filter: + - "Summer Peak" + + - type: entity-filter + entities: + - entity: sensor.energy_tariff + icon: mdi:cash + name: Non-Summer + tap_action: + action: navigate + navigation_path: /details-yml/power-breaker + state_filter: + - "Non-Summer" + + - type: entity-filter + entities: + - entity: input_text.person_kristy + name: Kristy + - entity: input_text.person_marshall + name: Marshall + - entity: input_text.person_tess + name: Tess + - entity: group.person_clint + name: Clint + icon: mdi:cellphone + - entity: group.person_emmett + name: Emmett + icon: mdi:tablet + - entity: group.person_bridget + name: Bridget + icon: mdi:tablet + - entity: group.person_kristy + name: Kristy + - entity: group.person_marshall + name: Marshall + - entity: group.person_tess + name: Tess + - entity: group.person_ebin + name: Ebin + show_empty: false + state_filter: + - "on" + - "home" + - "At Childcare" + - "Home" + +cards: + - type: entity-filter + entities: + - entity: alert.need_salt + name: Need Salt + - entity: alert.garage_door + name: Garage door + - entity: alert.front_door + name: Front door + - entity: alert.kitchen_fridge_too_warm + name: Kitchen Fridge Temp + - entity: alert.kitchen_freezer_too_warm + name: Kitchen Freezer Temp + show_empty: false + state_filter: + - "on" + card: + type: glance + show_state: false + + - type: entity-filter + entities: + # - entity: binary_sensor.front_room_light_left_on + # name: Front Room + # - entity: binary_sensor.computer_area_light_left_on + # name: Computer Area + # - entity: binary_sensor.nursery_light_left_on + # name: Nursery + # - entity: binary_sensor.kitchen_light_left_on + # name: Kitchen + # - entity: binary_sensor.master_bathroom_light_left_on + # name: Master Bathroom + # - entity: binary_sensor.dining_room_light_left_on + # name: Dining Room + # - entity: binary_sensor.entryway_light_left_on + # name: Entryway + # - entity: binary_sensor.great_room_light_left_on + # name: Great Room + # - entity: binary_sensor.utility_room_light_left_on + # name: Utility Room + - entity: media_player.ytube_music_player + name: YTube + - entity: media_player.all_downstairs_speakers + name: All Downstairs + - entity: media_player.downstairs_public + name: Downstairs Public + - entity: media_player.all_upstairs_speakers + name: All Upstairs + - entity: media_player.upstairs_public + name: Upstairs Public + - entity: media_player.front_room_tv + name: Front Room TV + # - entity: media_player.front_room_hub + # name: Front Room display + # state_filter: + # - "on" + # - "playing" + # - "paused" + # - "idle" + # - entity: media_player.master_bedroom_clock + # name: Master Bedroom Clock + # - entity: media_player.garage + # name: Garage + # - entity: media_player.deck + # name: Deck + # - entity: media_player.great_room + # name: Great Room + # - entity: media_player.kitchen + # name: Jukebox + # - entity: media_player.nursery_hub + # name: Nursery + # state_filter: + # - "on" + # - "playing" + # - "paused" + # - "idle" + # - entity: media_player.bathroom_mini + # name: Bathroom Mini + # - entity: media_player.computer_area_hub + # name: Computer Area + # state_filter: + # - "on" + # - "playing" + # - "paused" + # - "idle" + - entity: media_player.downstairs_roku + name: Downstairs Roku + # - entity: binary_sensor.front_door_contact + # name: Front Door + # - entity: binary_sensor.garage_door + # name: Garage Door + # - entity: binary_sensor.outer_garage_door + # name: Outer Garage Door + # - entity: binary_sensor.patio_door_contact + # name: Patio Door + - entity: light.master_bedroom_strips_hue + name: MBR Strips + tap_action: + action: toggle + - entity: light.nursery_closet + name: Nursery Closet + tap_action: + action: toggle + - entity: light.garage_overhead + name: Garage + tap_action: + action: toggle + - entity: light.front_porch_overhead + name: Porch + tap_action: + action: toggle + # - entity: binary_sensor.entryway_window_contact + # name: Entryway + # - entity: binary_sensor.front_room_window_contact + # name: Front Room + # - entity: binary_sensor.nursery_window_contact + # name: Nursery + # - entity: binary_sensor.master_bedroom_window_contact + # name: Master Bedroom + # - entity: binary_sensor.computer_area_window_contact + # name: Computer Area + # - entity: binary_sensor.blue_room_window_contact + # name: Blue Room + - entity: light.master_bedroom_closet + name: MBR Closet + tap_action: + action: toggle + - entity: light.driveway + name: Driveway + tap_action: + action: toggle + # - entity: switch.outdoor_plug + # name: Outdoor Plug + # tap_action: + # action: toggle + - entity: switch.deck_power_plug + name: Deck Plug + state_filter: + - "off" + - entity: switch.outdoor_power_monitor_plug + name: Outdoor PM Plug + state_filter: + - "on" + tap_action: + action: toggle + - entity: sensor.frigate_status + name: Frigate + state_filter: + - "error" + - entity: binary_sensor.front_yard_plant_monitor_status + state_filter: + - "off" + - entity: binary_sensor.pm_status + state_filter: + - "off" + - entity: binary_sensor.furnace_room_multisensor_status + state_filter: + - "off" + - entity: binary_sensor.nursery_tagreader_status + state_filter: + - "off" + - entity: binary_sensor.black_bed_status + state_filter: + - "off" + - entity: binary_sensor.white_bed_status + state_filter: + - "off" + - entity: binary_sensor.master_bed_status + state_filter: + - "off" + + show_empty: false + state_filter: + - "on" + - "playing" + card: + type: glance + title: What's Going On + show_state: false + + - type: entity-filter + entities: + - entity: binary_sensor.patio_door_contact + name: Patio + - entity: binary_sensor.front_door_contact + name: Front Door + - entity: binary_sensor.front_room_window_contact + name: Front Room + - entity: binary_sensor.nursery_window_contact + name: Nursery + - entity: binary_sensor.master_bedroom_window_contact + name: Bedroom + - entity: binary_sensor.computer_area_window_contact + name: Computer + - entity: binary_sensor.blue_room_window_contact + name: Blue Room + - entity: binary_sensor.kitchen_fridge_door_contact + name: Fridge + - entity: binary_sensor.computer_chair_contact + name: Computer Chair + - entity: binary_sensor.basement_door_contact + name: Basement + - entity: binary_sensor.blue_room_door_contact + name: Blue Room + - entity: binary_sensor.mancave_door_contact + name: Mancave + - entity: binary_sensor.utility_room_door_contact + name: Utility + + - entity: sensor.bathroom_vent_switch_node_status + name: Bathroom Vent + + - entity: sensor.blue_room_closet_switch_node_status + name: Blue Room Closet + + - entity: sensor.blue_room_motion_switch_node_status + name: Blue Room Motion Switch + + - entity: sensor.computer_area_multisensor_node_status + name: Computer Area MultiSensor + + - entity: sensor.dining_room_motion_switch_node_status + name: Dining Room Motion Switch + + - entity: sensor.dining_room_switch_node_status + name: Dining Room Switch + + - entity: sensor.driveway_switch_node_status + name: Driveway Switch + + - entity: sensor.entryway_motion_switch_node_status + name: Entryway + + # - entity: sensor.outdoor_plug_node_status + # name: Front Porch Plug + + - entity: sensor.front_room_motion_sensor_node_status + name: Front Room Motion + - entity: sensor.front_room_motion_switch_node_status + name: Front Room Motion Switch + + - entity: sensor.furnace_room_motion_switch_node_status + name: Furnace Room Motion + - entity: sensor.garage_motion_switch_node_status + name: Garage Motion Switch + - entity: sensor.garage_multisensor_node_status + name: Garage MultiSensor + - entity: sensor.garage_switch_node_status + name: Garage Switch + - entity: sensor.great_room_motion_switch_node_status + name: Great Room Motion Switch + - entity: sensor.great_room_multisensor_node_status + name: Great Room MultiSensor + - entity: sensor.kitchen_motion_sensor_node_status + name: Kitchen Motion Sensor + - entity: sensor.kitchen_switch_node_status + name: Kitchen Switch + - entity: sensor.mancave_motion_switch_node_status + name: Mancave Motion Switch + + - entity: sensor.master_bathroom_motion_switch_node_status + name: Master Bathroom Motion Switch + + - entity: sensor.master_bedroom_closet_motion_switch_node_status + name: Bedroom Closet + - entity: sensor.master_bedroom_dimmer_node_status + name: Master Bedroom Dimmer + - entity: sensor.master_bedroom_multisensor_node_status + name: Master Bedroom MultiSensor + + - entity: sensor.nursery_closet_motion_switch_node_status + name: Nursery Closet + + - entity: sensor.nursery_multisensor_node_status + name: Nursery MultiSensor + + - entity: sensor.shower_switch_node_status + name: Shower Switch + + - entity: sensor.storage_room_switch_node_status + name: Storage Room Switch + + - entity: sensor.utility_room_motion_switch_node_status + name: Utility Room Motion + - entity: sensor.utility_room_vent_switch_node_status + name: Utility Room Vent + + - entity: camera.frigate_cam01 + name: Blue Room + - entity: camera.frigate_cam03 + name: Comp. Desk + - entity: camera.frigate_cam04 + name: Garage + - entity: camera.frigate_cam08 + name: Nursery + - entity: camera.frigate_cam12 + name: Kitchen + - entity: camera.frigate_cam13 + name: Front Room + - entity: camera.frigate_cam14 + name: Back Yard + - entity: camera.frigate_cam19 + name: Front Porch + + - entity: media_player.bathroom_mini + - entity: media_player.computer_area_hub + - entity: media_player.deck + - entity: media_player.front_room_hub + - entity: media_player.garage + - entity: media_player.great_room + - entity: media_player.kitchen + - entity: media_player.master_bedroom_clock + - entity: media_player.nursery_hub + - entity: device_tracker.amcrest_technologies_24_1f_27 + name: MBR Left + icon: mdi:cctv + state_filter: + - "not_home" + - entity: device_tracker.amcrest_technologies_35_ad_6f + name: Blue Room + icon: mdi:cctv + state_filter: + - "not_home" + - entity: device_tracker.amcrest_technologies_35_5c_cf + name: Comp Area + icon: mdi:cctv + state_filter: + - "not_home" + - entity: device_tracker.amcrest_technologies_35_5d_c3 + name: Garage + icon: mdi:cctv + state_filter: + - "not_home" + - entity: device_tracker.amcrest_technologies_24_1f_0a + name: MBR Left + icon: mdi:cctv + state_filter: + - "not_home" + - entity: device_tracker.amcrest_technologies_31_c3_6d + name: Nursery + icon: mdi:cctv + state_filter: + - "not_home" + - entity: device_tracker.amcrest_technologies_31_c3_b8 + name: Kitchen + icon: mdi:cctv + state_filter: + - "not_home" + - entity: device_tracker.amcrest_technologies_32_ae_4e + name: Front Room + icon: mdi:cctv + state_filter: + - "not_home" + - entity: device_tracker.amcrest_technologies_36_1d_8a + name: Back Yard + icon: mdi:cctv + state_filter: + - "not_home" + - entity: device_tracker.amcrest_technologies_38_66_bc + name: Front Porch + icon: mdi:cctv + state_filter: + - "not_home" + + show_empty: false + state_filter: + - "unavailable" + - "dead" + + - type: entity-filter + entities: + - binary_sensor.kids_possible + show_empty: false + state_filter: + - 'on' + card: + type: vertical-stack + cards: + - type: horizontal-stack + cards: + - type: custom:mushroom-entity-card + entity: input_boolean.out_of_bed_alert + secondary_info: none + fill_container: false + tap_action: + action: toggle + name: Goodnight Kids + - type: custom:mushroom-entity-card + entity: input_boolean.announce_bedtime + secondary_info: none + fill_container: false + tap_action: + action: toggle + name: Announce Bedtime + - type: horizontal-stack + cards: + - type: entity + name: Warning + entity: input_datetime.kids_five_minute_warning_time + - type: entity + name: Bedtime + entity: input_datetime.kids_bedtime_announcement_time + - type: glance + show_name: false + entities: + - input_boolean.emmett_home + - input_boolean.bridget_home + - input_boolean.ebin_home + + - type: entity-filter + entities: + - binary_sensor.check_mail + show_empty: false + state_filter: + - 'on' + card: + type: custom:mail-and-packages-card + name: Mail Summary + updated: sensor.mail_updated + details: true + image: false + deliveries_message: sensor.mail_deliveries_message + fedex_packages: sensor.mail_fedex_packages + usps_mail: sensor.mail_usps_mail + packages_delivered: sensor.mail_packages_delivered + packages_in_transit: sensor.mail_packages_in_transit + ups_packages: sensor.mail_ups_packages + usps_packages: sensor.mail_usps_packages + amazon_packages: sensor.mail_amazon_packages + camera_entity: camera.mail_usps_camera + + - type: custom:hourly-weather + entity: weather.openweathermap_hourly + icons: true + name: "" + hide_hours: false + + - type: custom:clock-weather-card + entity: weather.openweathermap_daily + weather_icon_type: fill + time_format: 12 + date_pattern: DDDD + + # - type: entity-filter + # card: + # type: glance + # show_state: true + # entities: + # - entity: input_text.person_clint + # name: Clint + # - entity: input_text.person_emmett + # name: Emmett + # - entity: input_text.person_bridget + # name: Bridget + # - entity: input_text.person_kristy + # name: Kristy + # - entity: input_text.person_marshall + # name: Marshall + # - entity: input_text.person_tess + # name: Tess + # - entity: input_text.person_ebin + # name: Ebin + # - entity: group.person_clint + # name: Clint + # - entity: group.person_emmett + # name: Emmett + # - entity: group.person_bridget + # name: Bridget + # - entity: group.person_kristy + # name: Kristy + # - entity: group.person_marshall + # name: Marshall + # - entity: group.person_tess + # name: Tess + # - entity: group.person_ebin + # name: Ebin + # show_empty: false + # state_filter: + # - "on" + # - "home" + # - "At Childcare" + # - "Home" diff --git a/lovelace/view-people.yaml b/lovelace/view-people.yaml new file mode 100644 index 0000000..22b9bea --- /dev/null +++ b/lovelace/view-people.yaml @@ -0,0 +1,117 @@ +title: People +path: people +icon: mdi:family-tree +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 +cards: + - type: vertical-stack + cards: + - type: picture-glance + entities: + - input_boolean.clint_home + - input_boolean.clint_in_bed + - input_boolean.clint_is_awake + - binary_sensor.clint_work_from_home + - input_boolean.clint_work_from_home + camera_image: camera.google_photos_clint_media + tap_action: + action: call-service + service: input_boolean.toggle + service_data: + entity_id: input_boolean.lovelace_clint_more + - type: conditional + conditions: + - entity: input_boolean.lovelace_clint_more + state: "on" + card: + type: vertical-stack + cards: + - type: glance + columns: 2 + entities: + - entity: device_tracker.pixel_7 + name: App + - entity: device_tracker.pixel_7_wifi + name: Wifi + # - type: entities + # entities: + # - entity: sensor.pixel_7_next_alarm + # name: Next Alarm + # - entity: sensor.pixel_7_next_alarm_source + # name: Alarm Source + - type: calendar + entities: + - calendar.clint + + - type: vertical-stack + cards: + - type: picture-glance + entities: + - binary_sensor.emmett_home + - input_boolean.emmett_home + - input_boolean.emmett_in_bed + - input_boolean.emmett_is_awake + - binary_sensor.emmetts_bed + #image: /local/Emmett.jpg + camera_image: camera.google_photos_emmett_media + tap_action: + action: call-service + service: input_boolean.toggle + service_data: + entity_id: input_boolean.lovelace_emmett_more + - type: conditional + conditions: + - entity: input_boolean.lovelace_emmett_more + state: "on" + card: + type: vertical-stack + cards: + - type: glance + entities: + - entity: device_tracker.emmett_s_fire_wifi + name: Wifi + - entity: input_boolean.emmett_tablet_home + name: Home + tap_action: + action: toggle + - type: calendar + entities: + - calendar.emmett + - calendar.allegan_public_schools + - calendar.west_ward_elementary + + - type: vertical-stack + cards: + - type: picture-glance + entities: + - binary_sensor.bridget_home + - input_boolean.bridget_home + - input_boolean.bridget_in_bed + - input_boolean.bridget_is_awake + - binary_sensor.bridgets_bed + camera_image: camera.google_photos_bridget_media + tap_action: + action: call-service + service: input_boolean.toggle + service_data: + entity_id: input_boolean.lovelace_bridget_more + - type: conditional + conditions: + - entity: input_boolean.lovelace_bridget_more + state: "on" + card: + type: vertical-stack + cards: + - type: glance + entities: + - entity: device_tracker.bridget_s_fire_wifi + name: Wifi + - entity: input_boolean.bridget_tablet_home + name: Home + tap_action: + action: toggle + - type: calendar + entities: + - calendar.bridget + - calendar.my_custody diff --git a/lovelace/view-power-breaker copy.yaml b/lovelace/view-power-breaker copy.yaml new file mode 100644 index 0000000..70be678 --- /dev/null +++ b/lovelace/view-power-breaker copy.yaml @@ -0,0 +1,860 @@ +title: Power Breaker +path: power-breaker +icon: mdi:electric-switch +panel: true + +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 +cards: + - type: vertical-stack + cards: + - type: horizontal-stack + cards: + - type: picture-elements + image: /local/background100.png + elements: + - type: state-label + entity: sensor.pm_grid_total_w + style: + font-size: 300% + left: 50% + top: 50% + - type: picture-elements + image: /local/background100.png + elements: + - type: 'custom:mini-graph-card' + style: + top: 50% + left: 50% + width: 100% + height: 100% + line_width: 3 + height: 100 + align_header: left + align_icon: right + align_state: center + aggregate_func: max + hours_to_show: 24 + points_per_hour: 4 + update_interval: 30 + group: true + entities: + - entity: sensor.pm_grid_total_w + show: + icon: false + name: false + state: false + extrema: false + color_thresholds: + - value: 500 + color: "#77FF77" + - value: 2000 + color: "#FFFF77" + - value: 8000 + color: "#FF7777" + - type: picture-elements + image: /local/background100.png + elements: + - type: state-label + entity: sensor.pm_grid_kwh + style: + font-size: 300% + left: 50% + top: 50% + + - type: horizontal-stack + cards: + - type: vertical-stack + cards: + # Well + - type: picture-elements + image: /local/background200.png + elements: + - type: 'custom:mini-graph-card' + style: + top: 50% + left: 50% + width: 100% + height: 100% + line_width: 3 + height: 200 + align_header: left + align_icon: right + align_state: center + aggregate_func: max + hours_to_show: 24 + points_per_hour: 4 + update_interval: 30 + group: true + entities: + - entity: sensor.pm_grid_total_w + show: + icon: false + name: false + state: false + extrema: false + color_thresholds: + - value: 500 + color: "#77FF77" + - value: 2000 + color: "#FFFF77" + - value: 8000 + color: "#FF7777" + + # Kitchen 1 + - type: picture-elements + image: /local/background100.png + elements: + - type: 'custom:mini-graph-card' + style: + top: 50% + left: 50% + width: 100% + height: 100% + line_width: 3 + height: 100 + align_header: left + align_icon: right + align_state: center + aggregate_func: max + hours_to_show: 24 + points_per_hour: 4 + update_interval: 30 + group: true + entities: + - entity: sensor.pm_kitchen_1_w + show: + icon: false + name: false + state: false + extrema: false + color_thresholds: + - value: 500 + color: "#77FF77" + - value: 2000 + color: "#FFFF77" + - value: 8000 + color: "#FF7777" + + # Kitchen 2 + - type: picture-elements + image: /local/background100.png + elements: + - type: 'custom:mini-graph-card' + style: + top: 50% + left: 50% + width: 100% + height: 100% + line_width: 3 + height: 100 + align_header: left + align_icon: right + align_state: center + aggregate_func: max + hours_to_show: 24 + points_per_hour: 4 + update_interval: 30 + group: true + entities: + - entity: sensor.pm_kitchen_1_w + show: + icon: false + name: false + state: false + extrema: false + color_thresholds: + - value: 500 + color: "#77FF77" + - value: 2000 + color: "#FFFF77" + - value: 8000 + color: "#FF7777" + + # Laundry Plug + - type: picture-elements + image: /local/background100.png + elements: + - type: 'custom:mini-graph-card' + style: + top: 50% + left: 50% + width: 100% + height: 100% + line_width: 3 + height: 100 + align_header: left + align_icon: right + align_state: center + aggregate_func: max + hours_to_show: 24 + points_per_hour: 4 + update_interval: 30 + group: true + entities: + - entity: sensor.pm_kitchen_1_w + show: + icon: false + name: false + state: false + extrema: false + color_thresholds: + - value: 500 + color: "#77FF77" + - value: 2000 + color: "#FFFF77" + - value: 8000 + color: "#FF7777" + + # Microwave Plug + - type: picture-elements + image: /local/background100.png + elements: + - type: 'custom:mini-graph-card' + style: + top: 50% + left: 50% + width: 100% + height: 100% + line_width: 3 + height: 100 + align_header: left + align_icon: right + align_state: center + aggregate_func: max + hours_to_show: 24 + points_per_hour: 4 + update_interval: 30 + group: true + entities: + - entity: sensor.pm_microwave_plug_w + name: Microwave + show: + icon: false + name: false + state: false + extrema: false + color_thresholds: + - value: 500 + color: "#77FF77" + - value: 2000 + color: "#FFFF77" + - value: 8000 + color: "#FF7777" + + # Bathroom Plug + - type: picture-elements + image: /local/background100.png + elements: + - type: 'custom:mini-graph-card' + style: + top: 50% + left: 50% + width: 100% + height: 100% + line_width: 3 + height: 100 + align_header: left + align_icon: right + align_state: center + aggregate_func: max + hours_to_show: 24 + points_per_hour: 4 + update_interval: 30 + group: true + entities: + - entity: sensor.pm_microwave_plug_w + name: Microwave + show: + icon: false + name: false + state: false + extrema: false + color_thresholds: + - value: 500 + color: "#77FF77" + - value: 2000 + color: "#FFFF77" + - value: 8000 + color: "#FF7777" + + # Heat Pump + - type: picture-elements + image: /local/background200.png + elements: + - type: 'custom:mini-graph-card' + style: + top: 50% + left: 50% + width: 100% + height: 100% + line_width: 3 + height: 200 + align_header: left + align_icon: right + align_state: center + aggregate_func: max + hours_to_show: 24 + points_per_hour: 4 + update_interval: 30 + group: true + entities: + - entity: sensor.pm_heat_pump_w + name: Heat Pump + show: + icon: false + name: false + state: false + extrema: false + color_thresholds: + - value: 500 + color: "#77FF77" + - value: 2000 + color: "#FFFF77" + - value: 8000 + color: "#FF7777" + + # Basement Bedroom Lights and Plugs + - type: picture-elements + image: /local/background100.png + elements: + - type: 'custom:mini-graph-card' + style: + top: 50% + left: 50% + width: 100% + height: 100% + line_width: 3 + height: 100 + align_header: left + align_icon: right + align_state: center + aggregate_func: max + hours_to_show: 24 + points_per_hour: 4 + update_interval: 30 + group: true + entities: + - entity: sensor.pm_microwave_plug_w + name: Microwave + show: + icon: false + name: false + state: false + extrema: false + color_thresholds: + - value: 500 + color: "#77FF77" + - value: 2000 + color: "#FFFF77" + - value: 8000 + color: "#FF7777" + + # Basement Plugs + - type: picture-elements + image: /local/background50.png + elements: + - type: 'custom:mini-graph-card' + style: + top: 50% + left: 50% + width: 100% + height: 100% + line_width: 3 + height: 50 + align_header: left + align_icon: right + align_state: center + aggregate_func: max + hours_to_show: 24 + points_per_hour: 4 + update_interval: 30 + group: true + entities: + - entity: sensor.pm_basement_plugs_w + name: Basement + show: + icon: false + name: false + state: false + extrema: false + color_thresholds: + - value: 500 + color: "#77FF77" + - value: 2000 + color: "#FFFF77" + - value: 8000 + color: "#FF7777" + + # Basement Bath Lights and Plugs + - type: picture-elements + image: /local/background50.png + elements: + - type: 'custom:mini-graph-card' + style: + top: 50% + left: 50% + width: 100% + height: 100% + line_width: 3 + height: 50 + align_header: left + align_icon: right + align_state: center + aggregate_func: max + hours_to_show: 24 + points_per_hour: 4 + update_interval: 30 + group: true + entities: + - entity: sensor.pm_microwave_plug_w + name: Microwave + show: + icon: false + name: false + state: false + extrema: false + color_thresholds: + - value: 500 + color: "#77FF77" + - value: 2000 + color: "#FFFF77" + - value: 8000 + color: "#FF7777" + + #Sump Pump Plug + - type: picture-elements + image: /local/background100.png + elements: + - type: 'custom:mini-graph-card' + style: + top: 50% + left: 50% + width: 100% + height: 100% + line_width: 3 + height: 100 + align_header: left + align_icon: right + align_state: center + aggregate_func: max + hours_to_show: 24 + points_per_hour: 4 + update_interval: 30 + group: true + entities: + - entity: sensor.pm_sump_pump_plug_w + name: Sump + show: + icon: false + name: false + state: false + extrema: false + color_thresholds: + - value: 500 + color: "#77FF77" + - value: 2000 + color: "#FFFF77" + - value: 8000 + color: "#FF7777" + + - type: vertical-stack + cards: + - type: picture-elements + image: /local/background100.png + elements: [] + - type: picture-elements + image: /local/background100.png + elements: [] + - type: picture-elements + image: /local/background100.png + elements: [] + - type: picture-elements + image: /local/background100.png + elements: [] + - type: picture-elements + image: /local/background100.png + elements: [] + - type: picture-elements + image: /local/background100.png + elements: [] + - type: picture-elements + image: /local/background100.png + elements: [] + - type: picture-elements + image: /local/background100.png + elements: [] + - type: picture-elements + image: /local/background100.png + elements: [] + - type: picture-elements + image: /local/background100.png + elements: [] + - type: picture-elements + image: /local/background100.png + elements: [] + - type: picture-elements + image: /local/background100.png + elements: [] + + - type: vertical-stack + cards: + # Nursery Kitchen and Dining + - type: picture-elements + image: /local/background100.png + elements: + - type: 'custom:mini-graph-card' + style: + top: 50% + left: 50% + width: 100% + height: 100% + line_width: 3 + height: 100 + align_header: left + align_icon: right + align_state: center + aggregate_func: max + hours_to_show: 24 + points_per_hour: 4 + update_interval: 30 + group: true + entities: + - entity: sensor.pm_nursery_dining_kitchen_lights_w + show: + icon: false + name: false + state: false + extrema: false + color_thresholds: + - value: 500 + color: "#77FF77" + - value: 2000 + color: "#FFFF77" + - value: 8000 + color: "#FF7777" + + # Master Bed and Bath Lights + - type: picture-elements + image: /local/background100.png + elements: + - type: 'custom:mini-graph-card' + style: + top: 50% + left: 50% + width: 100% + height: 100% + line_width: 3 + height: 100 + align_header: left + align_icon: right + align_state: center + aggregate_func: max + hours_to_show: 24 + points_per_hour: 4 + update_interval: 30 + group: true + entities: + - entity: sensor.pm_kitchen_1_w + show: + icon: false + name: false + state: false + extrema: false + color_thresholds: + - value: 500 + color: "#77FF77" + - value: 2000 + color: "#FFFF77" + - value: 8000 + color: "#FF7777" + + # Furnace + - type: picture-elements + image: /local/background100.png + elements: + - type: 'custom:mini-graph-card' + style: + top: 50% + left: 50% + width: 100% + height: 100% + line_width: 3 + height: 100 + align_header: left + align_icon: right + align_state: center + aggregate_func: max + hours_to_show: 24 + points_per_hour: 4 + update_interval: 30 + group: true + entities: + - entity: sensor.pm_furnace_w + show: + icon: false + name: false + state: false + extrema: false + color_thresholds: + - value: 500 + color: "#77FF77" + - value: 2000 + color: "#FFFF77" + - value: 8000 + color: "#FF7777" + + # Basement and Stair Lights + - type: picture-elements + image: /local/background100.png + elements: + - type: 'custom:mini-graph-card' + style: + top: 50% + left: 50% + width: 100% + height: 100% + line_width: 3 + height: 100 + align_header: left + align_icon: right + align_state: center + aggregate_func: max + hours_to_show: 24 + points_per_hour: 4 + update_interval: 30 + group: true + entities: + - entity: sensor.pm_microwave_plug_w + name: Microwave + show: + icon: false + name: false + state: false + extrema: false + color_thresholds: + - value: 500 + color: "#77FF77" + - value: 2000 + color: "#FFFF77" + - value: 8000 + color: "#FF7777" + + # Dishwasher + - type: picture-elements + image: /local/background100.png + elements: + - type: 'custom:mini-graph-card' + style: + top: 50% + left: 50% + width: 100% + height: 100% + line_width: 3 + height: 100 + align_header: left + align_icon: right + align_state: center + aggregate_func: max + hours_to_show: 24 + points_per_hour: 4 + update_interval: 30 + group: true + entities: + - entity: sensor.pm_microwave_plug_w + name: Microwave + show: + icon: false + name: false + state: false + extrema: false + color_thresholds: + - value: 500 + color: "#77FF77" + - value: 2000 + color: "#FFFF77" + - value: 8000 + color: "#FF7777" + + # Garage and Outside Lights + - type: picture-elements + image: /local/background100.png + elements: + - type: 'custom:mini-graph-card' + style: + top: 50% + left: 50% + width: 100% + height: 100% + line_width: 3 + height: 100 + align_header: left + align_icon: right + align_state: center + aggregate_func: max + hours_to_show: 24 + points_per_hour: 4 + update_interval: 30 + group: true + entities: + - entity: sensor.pm_heat_pump_w + name: Heat Pump + show: + icon: false + name: false + state: false + extrema: false + color_thresholds: + - value: 500 + color: "#77FF77" + - value: 2000 + color: "#FFFF77" + - value: 8000 + color: "#FF7777" + + # Front Room and Plugs + - type: picture-elements + image: /local/background100.png + elements: + - type: 'custom:mini-graph-card' + style: + top: 50% + left: 50% + width: 100% + height: 100% + line_width: 3 + height: 100 + align_header: left + align_icon: right + align_state: center + aggregate_func: max + hours_to_show: 24 + points_per_hour: 4 + update_interval: 30 + group: true + entities: + - entity: sensor.pm_front_room_plugs_w + name: Front Room + show: + icon: false + name: false + state: false + extrema: false + color_thresholds: + - value: 500 + color: "#77FF77" + - value: 2000 + color: "#FFFF77" + - value: 8000 + color: "#FF7777" + + # Garage & Outside Plugs + - type: picture-elements + image: /local/background100.png + elements: + - type: 'custom:mini-graph-card' + style: + top: 50% + left: 50% + width: 100% + height: 100% + line_width: 3 + height: 100 + align_header: left + align_icon: right + align_state: center + aggregate_func: max + hours_to_show: 24 + points_per_hour: 4 + update_interval: 30 + group: true + entities: + - entity: sensor.pm_basement_plugs_w + name: Basement + show: + icon: false + name: false + state: false + extrema: false + color_thresholds: + - value: 500 + color: "#77FF77" + - value: 2000 + color: "#FFFF77" + - value: 8000 + color: "#FF7777" + + # Stove + - type: picture-elements + image: /local/background200.png + elements: + - type: 'custom:mini-graph-card' + style: + top: 50% + left: 50% + width: 100% + height: 100% + line_width: 3 + height: 200 + align_header: left + align_icon: right + align_state: center + aggregate_func: max + hours_to_show: 24 + points_per_hour: 4 + update_interval: 30 + group: true + entities: + - entity: sensor.pm_stove_w + name: Microwave + show: + icon: false + name: false + state: false + extrema: false + color_thresholds: + - value: 500 + color: "#77FF77" + - value: 2000 + color: "#FFFF77" + - value: 8000 + color: "#FF7777" + + # Dryer + - type: picture-elements + image: /local/background200.png + elements: + - type: 'custom:mini-graph-card' + style: + top: 50% + left: 50% + width: 100% + height: 100% + line_width: 3 + height: 200 + align_header: left + align_icon: right + align_state: center + aggregate_func: max + hours_to_show: 24 + points_per_hour: 4 + update_interval: 30 + group: true + entities: + - entity: sensor.pm_dryer_w + name: Dryer + show: + icon: false + name: false + state: false + extrema: false + color_thresholds: + - value: 500 + color: "#77FF77" + - value: 2000 + color: "#FFFF77" + - value: 8000 + color: "#FF7777" + + diff --git a/lovelace/view-power-usage.yaml b/lovelace/view-power-usage.yaml new file mode 100644 index 0000000..aaedd94 --- /dev/null +++ b/lovelace/view-power-usage.yaml @@ -0,0 +1,87 @@ +title: Power Usage +path: power-usage +icon: mdi:power-plug +type: panel +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 +cards: + - type: vertical-stack + cards: + - type: custom:mini-graph-card + #- type: history-graph + #title: Room Power (12h) + name: Room Power (12h) + smoothing: false + hours_to_show: 6 + points_per_hour: 12 + show_points: false + line_width: 1 + # upper_bound: 300 + # lower_bound: 0 + aggregate_func: max + show: + fill: false + entities: + - entity: sensor.pm_basement_plugs_w + name: Basement + - entity: sensor.pm_kitchen_1_w + name: Kitchen 1 + - entity: sensor.pm_kitchen_2_w + name: Kitchen 2 + - entity: sensor.pm_nursery_dining_kitchen_lights_w + name: Nursery, Kitchen, Dining Lights + - entity: sensor.pm_front_room_plugs_w + name: Front Room + - entity: sensor.furnace_room_plug_power + name: Datacenter + #- type: custom:mini-graph-card + - type: custom:mini-graph-card + #- type: history-graph + #title: Appliance Power (12h) + name: Appliance Power (12h) + smoothing: false + hours_to_show: 12 + points_per_hour: 15 + show_points: false + line_width: 1 + upper_bound: 100 + lower_bound: 0 + aggregate_func: max + show: + fill: false + entities: + - entity: sensor.pm_dryer_w + name: Dryer + - entity: sensor.pm_sump_pump_plug_w + name: Sump Pump + - entity: sensor.pm_microwave_plug_w + name: Microwave + - entity: sensor.pm_stove_w + name: Stove/Oven + - entity: sensor.shelly_dishwasher_w + name: Dishwasher + - entity: sensor.shelly_keurig_w + name: Keurig + - entity: sensor.shelly_washing_machine_w + name: Washing Machine + + #- type: custom:mini-graph-card + - type: custom:mini-graph-card + #- type: history-graph + #title: HVAC Power (12h) + name: HVAC Power (12h) + smoothing: false + hours_to_show: 12 + points_per_hour: 15 + show_points: false + line_width: 1 + aggregate_func: max + show: + fill: false + points: false + entities: + - entity: sensor.pm_furnace_w + name: Furnace + - entity: sensor.pm_heat_pump_w + name: Heat Pump diff --git a/lovelace/view-power.yaml b/lovelace/view-power.yaml new file mode 100644 index 0000000..93cffa9 --- /dev/null +++ b/lovelace/view-power.yaml @@ -0,0 +1,83 @@ +title: Power +path: power +icon: mdi:home-battery +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 +cards: + #- type: energy-distribution + - type: energy-usage-graph + - type: energy-devices-graph + - type: vertical-stack + cards: + - type: entities + entities: + - entity: sensor.pm_grid_total_w + name: Grid [W] + - entity: sensor.pm_grid_kwh + name: Grid [kWh] + - type: horizontal-stack + cards: + - type: vertical-stack + cards: + - type: entities + entities: + - entity: sensor.pm_grid_phase_a_w + name: Phase A + - type: divider + - entity: sensor.pm_well_w + name: Well + - entity: sensor.pm_kitchen_1_w + name: Kitchen 1 + - entity: sensor.pm_kitchen_2_w + name: Kitchen 2 + - entity: sensor.pm_laundry_plug_w + name: Laundry + - entity: sensor.pm_microwave_plug_w + name: Microwave + - entity: sensor.pm_bathroom_plug_w + name: Bathroom + - entity: sensor.pm_heat_pump_w + name: Heat Pump + - entity: sensor.pm_basement_bedroom_and_furnace_room_lights_w + name: Blue Room/Furnace Lights + - entity: sensor.pm_basement_plugs_w + name: Basement Plugs + - entity: sensor.pm_basement_and_laundry_lights_and_plugs_w + name: Basement 2 + - entity: sensor.pm_sump_pump_plug_w + name: Sump Pump + show_header_toggle: false + header: + type: graph + entity: sensor.pm_grid_phase_a_w + - type: vertical-stack + cards: + - type: entities + entities: + - entity: sensor.pm_grid_phase_b_w + name: Phase B + - type: divider + - entity: sensor.pm_nursery_dining_kitchen_lights_w + name: Nursery, Kitchen, Dining Lights + - entity: sensor.pm_master_suite_w + name: Master Suite + - entity: sensor.pm_furnace_w + name: Furnace + - entity: sensor.pm_basement_stairs_and_lights_w + name: Basement Stairs + - entity: sensor.pm_dishwasher_w + name: Dishwasher + - entity: sensor.pm_garage_outside_and_front_garage_lights_w + name: Garage & Outside Lights + - entity: sensor.pm_front_room_plugs_w + name: Front Room + - entity: sensor.pm_garage_and_outside_plugs_w + name: Garage & Outside plugs + - entity: sensor.pm_stove_w + name: Stove + - entity: sensor.pm_dryer_w + name: Dryer + header: + type: graph + entity: sensor.pm_grid_phase_b_w \ No newline at end of file diff --git a/lovelace/view-remotes.yaml b/lovelace/view-remotes.yaml new file mode 100644 index 0000000..6e3b7bf --- /dev/null +++ b/lovelace/view-remotes.yaml @@ -0,0 +1,13 @@ +title: Remotes +path: remotes +icon: mdi:remote-tv +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f + - user: cad46dedf86f454ebbd7f697a58730f2 +panel: true +cards: + - type: horizontal-stack + cards: + - !include /config/lovelace/templates/front-room-roku-card.yaml + + - !include /config/lovelace/templates/great-room-roku-card.yaml diff --git a/lovelace/view-scripts.yaml b/lovelace/view-scripts.yaml new file mode 100644 index 0000000..9b30854 --- /dev/null +++ b/lovelace/view-scripts.yaml @@ -0,0 +1,55 @@ +title: scripts +path: scripts +icon: mdi:script +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f +cards: +- type: entities + title: Clint + entities: + - entity: script.clint_travel_sensor + secondary_info: last-triggered + +- type: entities + title: Emmett + entities: + - entity: script.emmett_travel_sensor + secondary_info: last-triggered + +- type: entities + title: Bridget + entities: + - entity: script.bridget_travel_sensor + secondary_info: last-triggered + +- type: entities + title: Kristy + entities: + - entity: script.kristy_travel_sensor + secondary_info: last-triggered + +- type: entities + title: Marshall + entities: + - entity: script.marshall_travel_sensor + secondary_info: last-triggered + +- type: entities + title: Tess + entities: + - entity: script.tess_travel_sensor + secondary_info: last-triggered + +- type: entities + title: Ebin + entities: + - entity: script.ebin_travel_sensor + secondary_info: last-triggered + +- type: entities + title: Misc + entities: + - entity: script.wake_up_the_master_bedroom + secondary_info: last-triggered + - entity: script.house_alert + secondary_info: last-triggered diff --git a/lovelace/view-spacer.yaml b/lovelace/view-spacer.yaml new file mode 100644 index 0000000..1659803 --- /dev/null +++ b/lovelace/view-spacer.yaml @@ -0,0 +1,58 @@ +title: Spacer +icon: mdi:dots-horizontal +cards: + + - type: 'custom:roku-card' + entity: media_player.downstairs_roku + tv: true + name: Great Room + apps: + - image: /local/netflix-icon.png + app: Netflix + hold_action: + action: call-service + service: media_player.select_source + service_data: + entity_id: media_player.downstairs_roku + source: Netflix + + - image: /local/youtube-icon.png + app: YouTube + hold_action: + action: call-service + service: media_player.select_source + service_data: + source: "YouTube" + entity_id: media_player.downstairs_roku + + - image: /local/baby-yoda.png + app: Disney Plus + hold_action: + action: call-service + service: media_player.select_source + service_data: + source: "Disney Plus" + entity_id: media_player.downstairs_roku + + - image: /local/primevideo-icon.png + app: Prime Video + hold_action: + action: call-service + service: media_player.select_source + service_data: + source: "Prime Video" + entity_id: media_player.downstairs_roku + + volume_up: + show: false + volume_down: + show: false + volume_mute: + show: false + + power: + tap_action: + action: call-service + service: switch.toggle + service_data: + entity_id: switch.shelly_projector diff --git a/lovelace/view-surveillance-card.yaml b/lovelace/view-surveillance-card.yaml new file mode 100644 index 0000000..830728b --- /dev/null +++ b/lovelace/view-surveillance-card.yaml @@ -0,0 +1,45 @@ +title: Surveillance +path: cameras +icon: mdi:cctv +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f +panel: true +cards: + # - type: picture-entity + # entity: camera.amcrest_all + # camera_image: camera.amcrest_all + + - type: custom:surveillance-card + thumb_interval: 15 + update_interval: 0.5 + recording_duration: 10 + show_capture_buttons: false + camera_view: live + focus_motion: true + cameras: + - entity: camera.frigate_cam08 + motion_entity: binary_sensor.frigate_cam08_person_occupancy + - entity: camera.frigate_cam12 + motion_entity: binary_sensor.frigate_cam12_person_occupancy + - entity: camera.frigate_cam13 + motion_entity: binary_sensor.frigate_cam13_person_occupancy + - entity: camera.frigate_cam01 + motion_entity: binary_sensor.frigate_cam01_person_occupancy + - entity: camera.frigate_cam03 + motion_entity: binary_sensor.frigate_cam03_person_occupancy + # - entity: camera.amcrest_cam05 + # motion_entity: binary_sensor.frigate_cam05_person_occupancy + - entity: camera.frigate_cam06 + motion_entity: binary_sensor.frigate_cam06_person_occupancy + - entity: camera.frigate_cam07 + motion_entity: binary_sensor.frigate_cam07_person_occupancy + # - entity: camera.amcrest_cam09 + # motion_entity: binary_sensor.frigate_cam09_person_occupancy + # - entity: camera.amcrest_cam10 + # motion_entity: binary_sensor.frigate_cam10_person_occupancy + - entity: camera.frigate_cam04 + motion_entity: binary_sensor.frigate_cam04_person_occupancy + - entity: camera.frigate_cam14 + motion_entity: binary_sensor.frigate_cam14_person_occupancy + - entity: camera.frigate_cam19 + motion_entity: binary_sensor.frigate_cam19_person_occupancy diff --git a/lovelace/view-surveillance.yaml b/lovelace/view-surveillance.yaml new file mode 100644 index 0000000..f54332a --- /dev/null +++ b/lovelace/view-surveillance.yaml @@ -0,0 +1,48 @@ +title: Cameras +path: cameras +icon: mdi:cctv +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f +panel: true +cards: + - type: vertical-stack + cards: + - type: grid + square: false + columns: 3 + cards: + # 8 and 2 + - !include /config/lovelace/cameras/view-camera-08.yaml + - !include /config/lovelace/cameras/view-camera-13.yaml + - !include /config/lovelace/cameras/view-camera-12.yaml + #- !include /config/lovelace/cameras/view-camera-02.yaml + + + # 5 and 9 + #- !include /config/lovelace/cameras/view-camera-05.yaml + + - !include /config/lovelace/cameras/view-camera-03.yaml + - !include /config/lovelace/cameras/view-camera-04.yaml + #- !include /config/lovelace/cameras/view-camera-09.yaml + + + # 6 and 7 + #- !include /config/lovelace/cameras/view-camera-06.yaml + + #- !include /config/lovelace/cameras/view-camera-07.yaml + + # 1 and 3 + + # 4 and 10 + + - !include /config/lovelace/cameras/view-camera-01.yaml + + - !include /config/lovelace/cameras/view-camera-06.yaml + #- !include /config/lovelace/cameras/view-camera-10.yaml + + # 11 and 12 + + - !include /config/lovelace/cameras/view-camera-14.yaml + - !include /config/lovelace/cameras/view-camera-18.yaml + - !include /config/lovelace/cameras/view-camera-19.yaml + diff --git a/lovelace/view-tasks-all.yaml b/lovelace/view-tasks-all.yaml new file mode 100644 index 0000000..bcf9bcb --- /dev/null +++ b/lovelace/view-tasks-all.yaml @@ -0,0 +1,76 @@ +title: All Tasks +path: tasks-all +icon: mdi:checkbox-marked-circle +visible: + - user: 24a4bd075e7f41a497dd0390a1dd4a9f +cards: + +- type: custom:grocy-chores-card + title: Daddy's Tasks + user_id: 2 + show_quantity: 5 + show_days: 5 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_tasks + +- type: custom:grocy-chores-card + title: Chickadee's Tasks + user_id: 5 + show_quantity: 5 + show_days: 5 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_tasks + +- type: custom:grocy-chores-card + title: Marshall's Tasks + user_id: 6 + show_quantity: 5 + show_days: 5 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_tasks + +- type: custom:grocy-chores-card + title: Tess' Tasks + user_id: 7 + show_quantity: 5 + show_days: 5 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_tasks + +- type: custom:grocy-chores-card + title: Emmett's Tasks + user_id: 3 + show_quantity: 5 + show_days: 5 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_tasks + +- type: custom:grocy-chores-card + title: Bridget's Tasks + user_id: 4 + show_quantity: 5 + show_days: 5 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_tasks + +- type: custom:grocy-chores-card + title: Ebin's Tasks + user_id: 8 + show_quantity: 5 + show_days: 5 + show_create_task: false + show_assigned: false + entity: + - sensor.grocy_tasks \ No newline at end of file diff --git a/python_scripts/services.yaml b/python_scripts/services.yaml new file mode 100644 index 0000000..1c360a8 --- /dev/null +++ b/python_scripts/services.yaml @@ -0,0 +1,10 @@ +# services.yaml +turn_on_light: + description: Turn on a light and set its color. + fields: + entity_id: + description: The light that will be turned on. + example: light.bedroom + rgb_color: + description: The color to which the light will be set. + example: [255, 0, 0] \ No newline at end of file diff --git a/rgbcolors.txt b/rgbcolors.txt new file mode 100644 index 0000000..34d526a --- /dev/null +++ b/rgbcolors.txt @@ -0,0 +1,611 @@ +*** Basic Colors *** +[255,255,255] White +[0,0,0] Black +[255,0,0] Red +[255,127,0] Orange +[255,255,0] Yellow +[0,255,0] Green +[0,0,255] Blue +[128,0,128] Purple +[255,192,203] Pink +[165,42,42] Brown +[128,128,128] Gray + +*** Color Wheel *** +[255,0,0] Red +[255,127,0] Orange +[255,255,0] Yellow +[127,255,0] Chartreuse +[0,255,0] Green +[0,255,127] Spring Green +[0,255,255] Cyan +[0,127,255] Azure +[0,0,255] Blue +[127,0,255] Violet +[255,0,255] Magenta +[255,0,127] Rose + +*** HTML Color Names *** +[240,248,255] Alice Blue +[250,235,215] Antique White +[0,255,255] Aqua +[127,255,212] Aquamarine +[240,255,255] Azure +[245,245,220] Beige +[0,0,0] Black +[0,0,255] Blue +[138,43,226] Blue Violet +[165,42,42] Brown +[95,158,160] Cadet Blue +[127,255,0] Chartreuse +[210,105,30] Chocolate +[255,127,80] Coral +[100,149,237] Cornflower Blue +[220,20,60] Crimson +[0,255,255] Cyan +[0,0,139] Dark Blue +[0,139,139] Dark Cyan +[184,134,11] Dark Goldenrod +[169,169,169] Dark Gray +[0,100,0] Dark Green +[189,183,107] Dark Khaki +[139,0,139] Dark Magenta +[85,107,47] Dark Olive Green +[255,140,0] Dark Orange +[153,50,204] Dark Orchid +[139,0,0] Dark Red +[233,150,122] Dark Salmon +[47,79,79] Dark Slate Gray +[0,206,209] Dark Turquoise +[148,0,211] Dark Violet +[255,20,147] Deep Pink +[0,191,255] Deep Sky Blue +[105,105,105] Dim Gray +[30,144,255] Dodger Blue +[178,34,34] Fire Brick +[255,175,0] Floral White +[34,139,34] Forest Green +[255,0,255] Fuschia +[248,248,255] Ghost White +[255,215,0] Gold +[218,165,32] Goldenrod +[128,128,128] Gray +[0,128,0] Green +[173,255,47] Green Yellow +[240,255,240] Honeydew +[255,105,180] Hot Pink +[205,92,92] Indian Red +[75,0,130] Indigo +[255,255,240] Ivory +[240,230,140] Khaki +[230,230,250] Lavender +[255,240,245] Lavender Blush +[124,252,0] Lawn Green +[255,250,205] Lemon Chiffon +[173,216,230] Light Blue +[240,128,128] Light Coral +[224,255,255] Light Cyan +[250,250,210] Light Goldenrod Yellow +[211,211,211] Light Gray +[144,238,144] Light Green +[255,182,193] Light Pink +[255,160,122] Light Salmon +[32,178,170] Light Sea Green +[135,206,250] Light Sky Blue +[119,136,153] Light Slate Gray +[176,196,222] Light Steel Blue +[255,255,224] Light Yellow +[0,255,0] Lime +[50,205,50] Lime Green +[250,240,230] Linen +[255,0,255] Magenta +[128,0,0] Maroon +[102,205,170] Medium Aquamarine +[0,0,205] Medium Blue +[147,112,219] Medium Purple +[60,179,113] Medium Sea Green +[0,250,154] Medium Spring Green +[72,209,204] Medium Turquoise +[25,25,112] Midnight Blue +[245,255,250] Mint Cream +[255,228,225] Misty Rose +[255,222,173] Navajo White +[0,0,128] Navy +[253,245,230] Old Lace +[128,128,0] Olive +[107,142,35] Olive Drab +[255,165,0] Orange +[255,69,0] Orange Red +[218,112,214] Orchid +[255,239,213] Papaya Whip +[255,218,185] Peach Puff +[205,133,63] Peru +[255,192,203] Pink +[221,160,221] Plum +[176,224,230] Powder Blue +[128,0,128] Purple +[255,0,0] Red +[65,105,225] Royal Blue +[250,128,114] Salmon +[244,164,96] Sandy Brown +[46,139,87] Sea Green +[255,245,238] Seashell +[160,82,45] Sienna +[192,192,192] Silver +[135,206,235] Sky Blue +[106,90,205] Slate Blue +[112,128,144] Slate Gray +[255,250,250] Snow +[0,255,127] Spring Green +[70,130,180] Steel Blue +[210,180,140] Tan +[0,128,128] Teal +[216,191,216] Thistle +[255,99,71] Tomato +[64,224,208] Turquoise +[238,130,238] Violet +[245,222,179] Wheat +[255,255,255] White +[245,245,245] White Smoke +[255,255,0] Yellow +[154,205,50] Yellow Green + +*** RYB Color Wheel *** +[255,0,0] Red +[255,165,0] Orange +[255,204,0] Amber +[255,255,0] Yellow +[127,255,0] Chartreuse +[0,128,0] Green +[0,128,128] Teal +[0,0,255] Blue +[127,0,255] Violet +[128,0,128] Purple +[255,0,255] Magenta + +*** ROYGBIV Traditional Rainbow *** +[255,0,0] Red +[255,165,0] Orange +[255,255,0] Yellow +[0,255,0] Green +[0,0,255] Blue +[75,0,130] Indigo +[127,0,255] Violet + +*** School/Sports Teams *** +[158,27,50] Alabama Crimson +[30,77,43] Cal Poly Pomona Green +[0,86,59] Castleton Green +[179,27,27] Cornell Red +[0,105,62] Dartmouth Green +[254,90,29] Giants Orange +[165,28,48] Harvard Crimson +[125,17,12] IU Crimson (Indiana University) +[81,40,136] KSU Purple (Kansas State University) +[0,73,83] MSU Green (Michigan State University) +[132,22,23] Oklahoma Crimson +[238,127,45] Princeton Orange +[118,255,122] Sacramento State Green +[204,0,0] Utah Crimson +[255,130,0] UT Orange (University of Tennessee) + +*** Proprietary Colors *** +[164,198,57] Android Green +[218,24,132] Barbie Pink +[0,171,102] GO Green (GO Transit +[129,216,208] Tiffany Blue + +*** Standard Crayola Crayon Colors *** +[253,213,177] Apricot +[133,224,232] Aquamarine +[123,160,91] Asparagus +[146,111,91] Beaver +[254,111,94] Bittersweet +[0,0,0] Black +[0,102,255] Blue +[153,153,204] Blue Bell +[200,200,205] Blue-Gray +[153,133,183] Blue-Green +[100,86,183] Blue-Violet +[219,80,121] Blush +[198,45,66] Brick Red +[230,103,206] Brilliant Rose +[175,89,62] Brown +[255,127,73] Burnt Orange +[233,116,81] Burnt Sienna +[128,85,51] Burnt Umber +[169,178,195] Cadet Blue +[0,204,153] Caribbean Green +[230,46,107] Carmine +[255,166,201] Carnation Pink +[112,112,204] Celestial Blue +[218,50,135] Cerise +[2,164,211] Cerulean +[51,154,204] Cerulean Blue +[115,106,98] Charcoal Gray +[140,144,200] Cobalt Blue +[218,138,103] Copper +[147,204,234] Cornflower +[255,183,213] Cotton Canddy +[254,216,93] Dandelion +[179,59,36] Dark Venetian Red +[21,96,189] Denim +[237,201,175] Desert Sand +[97,64,81] Eggplant +[204,71,75] English Vermilion +[99,183,108] Fern +[95,167,119] Forest Green +[193,84,193] Fuschia +[135,66,31] Fuzzy Wuzzy +[230,190,138] Gold +[252,214,103] Goldenrod +[157,224,147] Granny Smith Apple +[139,134,128] Gray +[58,166,85] Green +[40,135,200] Green-Blue +[241,231,136] Green-Yellow +[185,254,72] Indian Red +[79,105,198] Indigo +[165,11,94] Jazzberry Jam +[41,171,135] Jungle Green +[251,174,210] Lavender +[255,255,159] Lemon Yellow +[143,216,216] Light Blue +[190,230,75] Light Chrome Green +[230,115,92] Light Venetian Red +[255,185,123] Macaroni and Cheese +[204,51,54] Madder Lake +[246,83,166] Magenta +[202,52,53] Mahogany +[242,198,73] Maize +[141,144,161] Manatee +[231,114,0] Mango Tango +[195,33,72] Maroon +[240,145,169] Mauvelous +[108,166,124] Medium Chrome Green +[217,108,190] Medium Rose +[143,71,179] Medium Violet +[254,186,173] Melon +[0,70,140] Midnight Blue +[26,179,133] Mountain Meadow +[200,80,155] Mulberry +[0,102,204] Navy Blue +[181,179,92] Olive Green +[255,136,51] Orange +[255,83,73] Orange-Red +[248,213,104] Orange-Yellow +[226,156,210] Orchid +[45,56,58] Outer Space +[0,157,196] Pacific Blue +[255,203,164] Peach +[195,205,230] Periwinkle +[225,44,44] Permanent Geranium Lake +[253,215,228] Pig Pink +[1,120,111] Pine Green +[252,116,253] Pink Flamingo +[247,163,142] Pink Sherbert +[142,49,121] Plum +[101,45,193] Purple Heart +[214,174,221] Purple Mountain Majesty +[210,125,70] Raw Sienna +[102,82,51] Raw Umber +[227,11,92] Razzmatazz +[237,10,63] Red +[255,104,31] Red-Orange +[187,51,133] Red-Violet +[0,204,204] Robin Egg Blue +[107,63,160] Royal Purple +[255,145,164] Salmon +[147,223,184] Sea Green +[158,91,64] Sepia +[131,112,80] Shadow +[51,204,153] Shamrock +[201,192,187] Silver +[118,215,234] Sky Blue +[236,235,189] Spring Green +[254,76,64] Sunset Orange +[217,154,108] Tan +[0,128,128] Teal Blue +[235,176,215] Thistle +[252,128,165] Tickle Me Pink +[217,214,207] Timberwolf +[0,117,94] Tropical Rain Forest +[222,166,129] Tumbleweed +[108,218,231] Turquoise Blue +[63,38,191] Ultramarine Blue +[102,66,40] Van Dyke Brown +[204,85,61] Venetian Red +[131,89,163] Violet (Purple) +[118,110,200] Violet-Blue +[247,70,138] Violet-Red +[255,153,128] Vivid Tangerine +[128,55,144] Vivid Violet +[255,255,255] White +[122,137,184] Wild Blue Yonder +[255,51,153] Wild Strawberry +[201,160,220] Wisteria +[251,232,112] Yellow +[197,225,122] Yellow-Green +[255,174,66] Yellow-Orange + +*** Fluorescent Crayola Crayon Colors *** +[255,53,94] Radical Red +[253,91,120] Wild Watermelon +[255,96,55] Outrageous Orange +[255,153,102] Atomic Tangerine +[255,153,51] Neon Carrot +[255,204,51] Sunglow +[255,255,102] Laser Lemon +[255,255,102] Unmellow Yellow +[204,255,0] Electric Lime +[102,255,102] Screamin' Green +[170,240,209] Magic Mint +[80,191,230] Blizzard Blue +[255,110,255] Shocking Pink +[238,52,210] Razzle Dazzle Rose +[255,0,204] Hot Magenta +[255,0,204] Purple Pizzazz + +*** Silver Swirl Crayola Crayon Colors *** +[195,153,83] Aztec Gold +[161,122,116] Burnished Brown +[109,155,195] Cerulean Frost +[205,96,126] Cinnamon Satin +[173,111,105] Copper Penny +[46,45,136] Cosmic Cobalt +[171,146,179] Glossy Grape +[103,103,103] Granite Gray +[110,174,161] Green Sheen +[174,152,170] Lilac Luster +[187,180,119] Misty Moss +[173,67,121] Mystic Maroon +[183,104,162] Pearly Purple +[139,168,183] Pewter Blue +[93,164,147] Polished Pine +[166,166,166] Quick Silver +[158,94,111] Rose Dust +[218,44,67] Rusty Red +[119,139,165] Shadow Blue +[95,167,120] Shiny Shamrock +[95,138,139] Steel Teal +[145,78,117] Sugar Plum +[138,73,107] Twilight Lavender +[86,136,125] Wintergreen Dream + +*** Gem Tone Crayola Crayon Colors *** +[100,96,154] Amethyst +[147,55,9] Citrine +[20,169,137] Emerald +[70,154,132] Jade +[67,108,185] Lapis Lazuli +[70,148,150] Malachite +[53,56,57] Onyx +[189,85,156] Rose Quartz +[170,64,105] Ruby +[45,93,161] Sapphire +[131,42,13] Smokey Topaz + +*** Reds *** +[165,42,42] Auburn +[244,194,194] Baby Pink +[124,10,2] Barn Red +[0,0,32] Burgundy +[138,51,36] Burnt Umber +[227,0,34] Cadmium Red +[206,32,41] Cardinal +[149,69,53] Chesnut +[226,61,40] Chili Red +[248,131,121] Congo Pink +[248,131,121] Coral Pink +[234,60,83] Desire +[206,32,41] Fire Engine Red +[237,41,57] Imperial Red +[215,131,127] New York Pink +[230,62,98] Paradise Pink +[222,165,164] Pastel Pink +[237,28,36] Pigment Red +[183,65,14] Rust +[255,145,164] Salmon Pink +[228,113,122] Tango Pink +[169,17,1] Turkey Red +[243,217,223] Vanilla Ice +[114,47,55] Wine + +*** Oranges *** +[159,129,112] Beaver +[237,135,45] Cadmium Orange +[237,145,33] Carrot Orange +[247,231,206] Champagne +[123,63,0] Chocolate +[210,105,30] Cocoa Brown +[237,201,175] Desert Sand +[226,88,34] Flame +[228,155,15] Gamboge +[255,79,0] International Orange +[107,68,35] Kobicha +[193,154,107] Lion +[234,162,33] Marigold +[255,159,0] Orange Peel +[217,144,88] Persian Orange +[236,88,0] Persimmon +[205,133,63] Peru +[255,90,54] Portland Orange +[255,117,24] Pumpkin +[128,70,27] Russet +[255,121,0] Safety Orange +[244,164,96] Sandy Brown +[210,180,140] Tan +[72,60,50] Taupe +[205,87,0] Tawny +[248,131,121] Tea Rose +[193,154,107] Wood Brown + +*** Yellows *** +[255,191,0] Amber +[245,245,220] Beige +[240,220,130] Buff +[228,208,10] Citrine +[255,253,208] Cream +[255,211,0] Cyber Yellow +[194,178,128] Ecru +[230,168,23] Harvest Gold +[248,222,126] Jasmine +[244,202,22] Jonquil +[195,176,145] Khaki +[255,244,79] Lemon +[248,222,126] Mellow Yellow +[255,196,12] Mikado Yellow +[255,219,88] Mustard +[250,218,94] Naples Yellow +[207,181,59] Old Gold +[255,239,0] Process Yellow +[250,218,94] Royal Yellow +[238,210,2] Safety Yellow +[244,196,48] Saffron +[255,216,0] School Bus Yellow +[228,217,111] Straw +[243,229,171] Vanilla + +*** Greens *** +[75,83,32] Army Green +[143,151,121] Artichoke +[135,169,107] Asparagus +[86,130,3] Avacado +[0,106,78] Bottle Green +[79,255,176] Bright Mint +[172,225,175] Celadon +[80,200,120] Emerald +[79,121,66] Fern Green +[34,139,34] Forest Green +[63,255,0] Harlequin +[53,94,59] Hunter Green +[19,136,8] India Green +[0,144,0] Islamic Green +[0,168,107] Jade +[76,187,23] Kelly Green +[169,186,157] Laurel Green +[11,218,81] Malachite +[116,195,101] Mantis +[152,251,152] Mint Green +[138,154,91] Moss Green +[57,255,20] Neon Green +[128,128,0] Olive +[0,102,0] Pakistan Green +[80,200,120] Paris Green +[68,76,56] Rifle Green +[103,146,103] Russian Green +[46,139,87] Sea Green +[0,158,96] Shamrock Green +[0,128,0] Slytherin Green + + *** Cyan *** +[0,255,255] Aqua +[127,255,212] Aquamarine +[27,77,62] Brunswick Green +[47,132,124] Celadon Green +[178,255,255] Celeste +[0,123,167] Cerulean +[35,43,43] Charleston Green +[0,139,139] Dark Cyan +[125,249,255] Electric Blue +[77,93,83] Feldgrau +[94,113,106] Gray Green +[0,73,83] Midnight Green +[141,163,153] Morning Blue +[49,120,115] Myrtle Green +[0,166,147] Persian Green +[0,204,204] Robin Egg Blue +[128,218,235] Sky Blue +[0,128,128] Teal +[54,117,136] Teal Blue +[64,224,208] Turquoise +[67,179,174] Verdigris +[64,130,109] Viridian + +*** Blues *** +[0,127,255] Azure +[137,207,240] Baby Blue +[102,153,204] Blue Gray +[0,191,255] Capri +[100,149,237] Cornflower +[16,52,166] Egyptian Blue +[96,130,182] Glaucous +[76,81,109] Independence +[75,0,130] Indigo +[0,65,106] Indigo Dye +[84,90,167] Liberty +[173,216,230] Light Blue +[25,25,112] Midnight Blue +[0,0,128] Navy (Blue) +[204,204,255] Periwinkle +[176,224,230] Powder Blue +[0,35,135] Resolution Blue +[8,37,103] Sapphire +[29,41,81] Space Cadet +[70,130,180] Steel Blue +[63,0,255] Ultramarine + +*** Purples *** +[112,41,99] Byzantium +[48,25,52] Dark Purple +[111,0,255] Electric Indigo +[108,48,130] Eminence +[223,115,255] Heliotrope +[75,0,130] Indigo +[0,65,106] Indigo Dye +[136,0,133] Mardi Gras +[224,176,255] Mauve +[147,112,219] Medium Purple +[218,112,214] Orchid +[120,24,74] Pansy Purple +[223,0,255] Phlox +[154,78,174] Purpureus +[216,191,216] Thistle +[150,131,236] Tropical Indigo +[102,2,60] Tyrian Purple +[120,81,169] Royal Purple + +*** Magentas *** +[171,39,79] Amaranth +[145,92,131] Antique Fuchsia +[244,194,194] Baby Pink +[239,187,204] Cameo Pink +[255,166,201] Carnation Pink +[230,143,172] Charm Pink +[222,111,161] China Pink +[255,188,217] Cotton Candy +[139,0,139] Dark Magenta +[181,51,137] Fandango +[253,63,146] French Fuchsia +[253,108,158] French Pink +[199,69,117] Fuchsia Rose +[159,69,118] Magenta Haze +[255,218,233] Mimi Pink +[247,127,190] Persian Pink +[253,221,230] Piggy Pink +[255,192,203] Pink +[255,221,244] Pink Lace +[219,178,209] Pink Lavender +[142,69,133] Plum +[232,204,215] Queen Pink +[255,0,127] Rose +[170,152,169] Rose Quartz +[252,15,192] Shocking Pink +[196,174,173] Silver Pink +[207,113,175] Sky Magenta +[207,107,169] Super Pink + +*** Grays *** +[178,190,181] Ash Gray +[132,132,130] Battleship Gray +[145,163,176] Cadet Gray +[54,69,79] Charcoal +[105,105,105] Dim Gray +[114,116,114] Gunmetal +[52,52,52] Jet +[76,88,102] Marengo +[114,116,114] Nickel +[229,228,226] Platinum +[138,127,141] Rocket Metallic +[192,192,192] Silver +[112,128,144] Slate Gray \ No newline at end of file diff --git a/rtsp2webrtc_v5_amd64 b/rtsp2webrtc_v5_amd64 new file mode 100644 index 0000000..87168a7 Binary files /dev/null and b/rtsp2webrtc_v5_amd64 differ diff --git a/scripts/cameras/cam03_computer_area.yaml b/scripts/cameras/cam03_computer_area.yaml new file mode 100644 index 0000000..8c55353 --- /dev/null +++ b/scripts/cameras/cam03_computer_area.yaml @@ -0,0 +1,8 @@ +alias: Cam03 on Computer Area Hub +sequence: +- service: webrtc.dash_cast + data: + entity_id: media_player.computer_area_hub + url: rtsp_cam03 + extra: + mode: webrtc \ No newline at end of file diff --git a/scripts/cameras/cam03_sub_computer_area.yaml b/scripts/cameras/cam03_sub_computer_area.yaml new file mode 100644 index 0000000..ae1407f --- /dev/null +++ b/scripts/cameras/cam03_sub_computer_area.yaml @@ -0,0 +1,8 @@ +alias: Cam03_sub on Computer Area Hub +sequence: +- service: webrtc.dash_cast + data: + entity_id: media_player.computer_area_hub + url: rtsp_cam03_sub + extra: + mode: webrtc \ No newline at end of file diff --git a/scripts/cameras/cam08_computer_area.yaml b/scripts/cameras/cam08_computer_area.yaml new file mode 100644 index 0000000..87b5c90 --- /dev/null +++ b/scripts/cameras/cam08_computer_area.yaml @@ -0,0 +1,8 @@ +alias: Cam08 on Computer Area Hub +sequence: +- service: webrtc.dash_cast + data: + entity_id: media_player.computer_area_hub + url: rtsp_cam08 + extra: + mode: webrtc \ No newline at end of file diff --git a/scripts/cameras/cam08_front_room.yaml b/scripts/cameras/cam08_front_room.yaml new file mode 100644 index 0000000..a10a146 --- /dev/null +++ b/scripts/cameras/cam08_front_room.yaml @@ -0,0 +1,8 @@ +alias: Cam08 on Front Room Hub +sequence: +- service: webrtc.dash_cast + data: + entity_id: media_player.front_room_hub + url: rtsp_cam08_sub + extra: + mode: webrtc \ No newline at end of file diff --git a/scripts/cameras/cam13_computer_area.yaml b/scripts/cameras/cam13_computer_area.yaml new file mode 100644 index 0000000..cd89ac1 --- /dev/null +++ b/scripts/cameras/cam13_computer_area.yaml @@ -0,0 +1,8 @@ +alias: Cam13 on Computer Area Hub +sequence: +- service: webrtc.dash_cast + data: + entity_id: media_player.computer_area_hub + url: rtsp://192.168.1.7:8554/rtsp_cam13_sub + extra: + mode: webrtc \ No newline at end of file diff --git a/scripts/cameras/cam13_front_room.yaml b/scripts/cameras/cam13_front_room.yaml new file mode 100644 index 0000000..1237860 --- /dev/null +++ b/scripts/cameras/cam13_front_room.yaml @@ -0,0 +1,8 @@ +alias: Cam13 on Front Room Hub +sequence: +- service: webrtc.dash_cast + data: + entity_id: media_player.front_room_hub + url: rtsp://192.168.1.7:8554/rtsp_cam13_sub + extra: + mode: webrtc \ No newline at end of file diff --git a/scripts/cameras/cam19_computer_area.yaml b/scripts/cameras/cam19_computer_area.yaml new file mode 100644 index 0000000..d396500 --- /dev/null +++ b/scripts/cameras/cam19_computer_area.yaml @@ -0,0 +1,8 @@ +alias: Cam19 on Computer Area Hub +sequence: +- service: webrtc.dash_cast + data: + entity_id: media_player.computer_area_hub + url: rtsp://192.168.1.7:8554/rtsp_cam19_sub + extra: + mode: webrtc \ No newline at end of file diff --git a/scripts/cameras/cam19_front_room.yaml b/scripts/cameras/cam19_front_room.yaml new file mode 100644 index 0000000..716dfc9 --- /dev/null +++ b/scripts/cameras/cam19_front_room.yaml @@ -0,0 +1,8 @@ +alias: Cam19 on Front Room Hub +sequence: +- service: webrtc.dash_cast + data: + entity_id: media_player.front_room_hub + url: rtsp://192.168.1.7:8554/rtsp_cam19_sub + extra: + mode: webrtc \ No newline at end of file diff --git a/scripts/cameras/create_camera_link.yaml b/scripts/cameras/create_camera_link.yaml new file mode 100644 index 0000000..6065783 --- /dev/null +++ b/scripts/cameras/create_camera_link.yaml @@ -0,0 +1,17 @@ +alias: Create temporary camera link +sequence: + - variables: + link_id: "{% for _ in range(40) %}{{ range(10)|random }}{% endfor %}" + + - service: webrtc.create_link + data: + link_id: "{{ link_id }}" # create a random or permanent link ID + # url: rtsp://rtsp:12345678@192.168.1.123:554/av_stream/ch0 + # entity: camera.sonoff # you can use camera entity_id or url + url: rtsp://192.168.1.7:8554/rtsp_cam03_sub + open_limit: 1 # how many times a link can be opened (0 - unlimit, 1 - default) + time_to_live: 60 # how many seconds will the link live (0 - unlimit, 60 - default) + + - service: persistent_notification.create + data: + message: 'Open Camera' \ No newline at end of file diff --git a/scripts/computer_area/computer_area_light_cycle.yaml b/scripts/computer_area/computer_area_light_cycle.yaml new file mode 100644 index 0000000..2089515 --- /dev/null +++ b/scripts/computer_area/computer_area_light_cycle.yaml @@ -0,0 +1,56 @@ +alias: Computer Area Light Cycle +fields: + colorset: + description: The set of colors to loop through + example: 'gemtones' + brightness: + description: The brightness that the lights should be set to + example: '100' + transition: + description: The transition time, in seconds + example: '10' +sequence: + - service: light.turn_on + data_template: + entity_id: light.computer_area_hue + brightness: '{{ states("input_number.computer_area_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.computer_area_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.computer_area_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.computer_area_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.computer_area_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.computer_area_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.computer_area_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.computer_area_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.computer_area_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.computer_area_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.computer_area_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.computer_area_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.computer_area_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.computer_area_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.computer_area_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.computer_area_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.computer_area_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + - delay: + seconds: '{{ states("input_number.computer_area_light_cycle_transition") | int }}' + # Wait until the loop_lights script has finished running + - wait_template: "{{ is_state('script.computer_area_loop_lights', 'off') }}" + - service: script.turn_on + entity_id: script.computer_area_loop_lights diff --git a/scripts/computer_area/computer_area_loop_lights.yaml b/scripts/computer_area/computer_area_loop_lights.yaml new file mode 100644 index 0000000..474ceea --- /dev/null +++ b/scripts/computer_area/computer_area_loop_lights.yaml @@ -0,0 +1,6 @@ +alias: Computer Area Loop Lights +sequence: + # Wait until the light_cycle script has finished running + - wait_template: "{{ is_state('script.computer_area_light_cycle', 'off') }}" + - service: script.turn_on + entity_id: script.computer_area_light_cycle diff --git a/scripts/control_light_with_lux.yaml b/scripts/control_light_with_lux.yaml new file mode 100644 index 0000000..cd33af7 --- /dev/null +++ b/scripts/control_light_with_lux.yaml @@ -0,0 +1,7 @@ +alias: Control Light With Lux +sequence: + - service: light.turn_on + data_template: + entity_id: '{{ lightname }}' + brightness: '{{ brightness }}' + transition: 5 \ No newline at end of file diff --git a/scripts/front_room/front_room_light_cycle.yaml b/scripts/front_room/front_room_light_cycle.yaml new file mode 100644 index 0000000..8176367 --- /dev/null +++ b/scripts/front_room/front_room_light_cycle.yaml @@ -0,0 +1,139 @@ +alias: Front Room Light Cycle +fields: + colorset: + description: The set of colors to loop through + example: 'gemtones' + brightness: + description: The brightness that the lights should be set to + example: '100' + transition: + description: The transition time, in seconds + example: '10' +sequence: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.front_room_cycle_same + state: 'on' + sequence: + - service: light.turn_on + data_template: + entity_id: light.front_room_hue + brightness: '{{ states("input_number.front_room_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.front_room_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.front_room_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.front_room_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.front_room_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.front_room_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.front_room_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.front_room_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.front_room_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.front_room_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.front_room_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.front_room_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.front_room_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.front_room_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.front_room_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.front_room_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.front_room_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + default: + - service: light.turn_on + data_template: + entity_id: light.front_room_splash_left + brightness: '{{ states("input_number.front_room_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.front_room_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.front_room_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.front_room_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.front_room_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.front_room_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.front_room_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.front_room_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.front_room_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.front_room_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.front_room_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.front_room_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.front_room_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.front_room_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.front_room_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.front_room_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.front_room_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + - service: light.turn_on + data_template: + entity_id: light.front_room_splash_right + brightness: '{{ states("input_number.front_room_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.front_room_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.front_room_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.front_room_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.front_room_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.front_room_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.front_room_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.front_room_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.front_room_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.front_room_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.front_room_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.front_room_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.front_room_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.front_room_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.front_room_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.front_room_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.front_room_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + - delay: + seconds: '{{ states("input_number.front_room_light_cycle_transition") | int }}' + # Wait until the loop_lights script has finished running + - wait_template: "{{ is_state('script.front_room_loop_lights', 'off') }}" + - service: script.turn_on + entity_id: script.front_room_loop_lights diff --git a/scripts/front_room/front_room_loop_lights.yaml b/scripts/front_room/front_room_loop_lights.yaml new file mode 100644 index 0000000..b2d8156 --- /dev/null +++ b/scripts/front_room/front_room_loop_lights.yaml @@ -0,0 +1,6 @@ +alias: Front Room Loop Lights +sequence: + # Wait until the light_cycle script has finished running + - wait_template: "{{ is_state('script.front_room_light_cycle', 'off') }}" + - service: script.turn_on + entity_id: script.front_room_light_cycle diff --git a/scripts/garage/blink_garage_lights.yaml b/scripts/garage/blink_garage_lights.yaml new file mode 100644 index 0000000..0781370 --- /dev/null +++ b/scripts/garage/blink_garage_lights.yaml @@ -0,0 +1,21 @@ +alias: Blink Garage Lights +sequence: + - alias: "Manually flash the garage lights" + service: light.toggle + target: + entity_id: light.garage_overhead + - delay: '00:00:01' + - alias: "Manually flash the garage lights" + service: light.toggle + target: + entity_id: light.garage_overhead + - delay: '00:00:01' + - alias: "Manually flash the garage lights" + service: light.toggle + target: + entity_id: light.garage_overhead + - delay: '00:00:01' + - alias: "Manually flash the garage lights" + service: light.toggle + target: + entity_id: light.garage_overhead \ No newline at end of file diff --git a/scripts/great_room/great_room_light_cycle.yaml b/scripts/great_room/great_room_light_cycle.yaml new file mode 100644 index 0000000..df271a2 --- /dev/null +++ b/scripts/great_room/great_room_light_cycle.yaml @@ -0,0 +1,253 @@ +alias: Great Room Light Cycle +fields: + colorset: + description: The set of colors to loop through + example: 'gemtones' + brightness: + description: The brightness that the lights should be set to + example: '100' + transition: + description: The transition time, in seconds + example: '10' +sequence: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.great_room_cycle_same + state: 'on' + sequence: + - service: light.turn_on + data_template: + entity_id: light.downstairs + brightness: '{{ states("input_number.great_room_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.great_room_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.great_room_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.great_room_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.great_room_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.great_room_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.great_room_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.great_room_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.great_room_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.great_room_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.great_room_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.great_room_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.great_room_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.great_room_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.great_room_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.great_room_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.great_room_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + default: + - service: light.turn_on + data_template: + entity_id: light.basement_1 + brightness: '{{ states("input_number.great_room_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.great_room_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.great_room_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.great_room_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.great_room_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.great_room_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.great_room_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.great_room_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.great_room_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.great_room_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.great_room_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.great_room_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.great_room_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.great_room_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.great_room_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.great_room_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.great_room_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + - service: light.turn_on + data_template: + entity_id: light.basement_2 + brightness: '{{ states("input_number.great_room_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.great_room_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.great_room_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.great_room_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.great_room_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.great_room_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.great_room_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.great_room_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.great_room_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.great_room_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.great_room_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.great_room_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.great_room_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.great_room_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.great_room_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.great_room_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.great_room_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + - service: light.turn_on + data_template: + entity_id: light.basement_3 + brightness: '{{ states("input_number.great_room_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.great_room_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.great_room_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.great_room_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.great_room_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.great_room_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.great_room_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.great_room_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.great_room_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.great_room_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.great_room_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.great_room_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.great_room_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.great_room_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.great_room_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.great_room_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.great_room_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + - service: light.turn_on + data_template: + entity_id: light.basement_4 + brightness: '{{ states("input_number.great_room_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.great_room_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.great_room_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.great_room_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.great_room_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.great_room_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.great_room_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.great_room_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.great_room_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.great_room_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.great_room_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.great_room_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.great_room_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.great_room_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.great_room_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.great_room_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.great_room_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + - service: light.turn_on + data_template: + entity_id: light.basement_5 + brightness: '{{ states("input_number.great_room_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.great_room_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.great_room_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.great_room_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.great_room_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.great_room_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.great_room_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.great_room_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.great_room_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.great_room_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.great_room_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.great_room_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.great_room_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.great_room_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.great_room_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.great_room_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.great_room_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + - delay: + seconds: '{{ states("input_number.great_room_light_cycle_transition") | int }}' + # Wait until the loop_lights script has finished running + - wait_template: "{{ is_state('script.great_room_loop_lights', 'off') }}" + - service: script.turn_on + entity_id: script.great_room_loop_lights diff --git a/scripts/great_room/great_room_loop_lights.yaml b/scripts/great_room/great_room_loop_lights.yaml new file mode 100644 index 0000000..0d7b8a0 --- /dev/null +++ b/scripts/great_room/great_room_loop_lights.yaml @@ -0,0 +1,6 @@ +alias: Great Room Loop Lights +sequence: + # Wait until the light_cycle script has finished running + - wait_template: "{{ is_state('script.great_room_light_cycle', 'off') }}" + - service: script.turn_on + entity_id: script.great_room_light_cycle diff --git a/scripts/grocy_say_chores.yaml b/scripts/grocy_say_chores.yaml new file mode 100644 index 0000000..31f3701 --- /dev/null +++ b/scripts/grocy_say_chores.yaml @@ -0,0 +1,91 @@ +mode: parallel +alias: Grocy Say Chores + +sequence: + - variables: + speaker: "{{speaker}}" + closing_line: > + {% if room is defined %} + Nothing needs to be done in the {{ room }} + {% elif person is defined %} + {{ person }} doesn't need to do anything + {% else %} + Nothing pressing needs to be done + {% endif %} + object_name: > + {% if room is defined %} + {{ (room | lower).replace(' ','_')~"_" }} + {% elif person is defined %} + {{ (person | lower).replace(' ','_')~"_" }} + {% else %} + {% endif %} + room_name: > + {% if room is defined %} + {% if room == "All" %}{%else%}{{ (room | lower).replace(' ','_')~"_" }}{%endif%} + {% endif %} + person_name: > + {% if person is defined %} + {{ (person | lower).replace(' ','_')~"_" }} + {% endif %} + + - alias: "Say next three chores" + service: tts.google_translate_say + data: + entity_id: "{{speaker}}" + message: >- + {% if not is_state('sensor.'~object_name~'chore_one',"None") -%} + First you should {{ states('sensor.'~object_name~'chore_one') }}. + {% if not is_state('sensor.'~object_name~'chore_two',"None") -%} + After that, you can {{ states('sensor.'~object_name~'chore_two') }} + {% if not is_state('sensor.'~object_name~'chore_three',"None") -%} + Finally, you can always {{ states('sensor.'~object_name~'chore_three') }} + {% endif -%} + {% endif -%} + {%- else -%} + {{ closing_line }} + {% endif -%} + +fields: + room: + description: Choose room to hear chores associate with the selected room (takes prescedence over person) + example: Blue Room + selector: + select: + options: + - Blue Room + - Computer Area + - Dining Room + - Entryway + - Front Room + - Furnace Room + - Garage + - Kitchen + - Great Room + - Mancave + - Master Bathroom + - Master Bedroom + - Nursery + - Utility Room + - Other + + person: + description: Choose person to hear chores associate with that person (if a room is not chosen) + example: Daddy + selector: + select: + options: + - Daddy + - Chickadee + - Marshall + - Tess + - Emmett + - Bridget + - Ebin + - Other + + speaker: + description: Speaker to announce chores on + example: media_player.announcements + selector: + entity: + domain: media_player \ No newline at end of file diff --git a/scripts/hass_restart.yaml b/scripts/hass_restart.yaml new file mode 100644 index 0000000..aa8dbe9 --- /dev/null +++ b/scripts/hass_restart.yaml @@ -0,0 +1,3 @@ +alias: Restart Home Assistant +sequence: +- service: homeassistant.restart \ No newline at end of file diff --git a/scripts/house_alert.yaml b/scripts/house_alert.yaml new file mode 100644 index 0000000..a8e0d2e --- /dev/null +++ b/scripts/house_alert.yaml @@ -0,0 +1,34 @@ +alias: House alert +sequence: + - service: media_player.turn_on + data: + entity_id: media_player.master_bedroom_clock + - service: media_player.volume_set + data: + entity_id: media_player.master_bedroom_clock + volume_level: 0.5 + - service: media_player.play_media + data: + entity_id: media_player.master_bedroom_clock + media_content_id: http://192.168.1.11:8123/local/audio/alarms/Alarm_Clock.mp3 + media_content_type: music + - delay: '00:00:10' + # Wait for it to stop playing (5 second audio clip) + - wait_template: "{{ is_state('media_player.master_bedroom_clock','idle') }}" + timeout: '00:00:06' + continue_on_timeout: 'true' + # Send an audio alert + - service: tts.google_translate_say + data_template: + entity_id: media_player.master_bedroom_clock + message: >- + The following are open: {{ dict((states|selectattr('entity_id', 'in', state_attr('group.my_exterior_doors', 'entity_id'))|list)|groupby('state'))['on']|map(attribute='name')|list|join(', ') }} + - delay: '00:00:02' + # Wait for it to stop playing (2 minute timeout) + - wait_template: "{{ is_state('media_player.master_bedroom_clock','idle') }}" + timeout: '00:02:00' + continue_on_timeout: 'true' + # Turn off the media players + - service: media_player.turn_off + data: + entity_id: media_player.master_bedroom_clock diff --git a/scripts/inovelli_led.yaml b/scripts/inovelli_led.yaml new file mode 100644 index 0000000..ab66a39 --- /dev/null +++ b/scripts/inovelli_led.yaml @@ -0,0 +1,320 @@ +--- +# Calculation References: +# https://nathanfiscus.github.io/inovelli-notification-calc/ +# https://community.inovelli.com/t/home-assistant-2nd-gen-switch-rgb-working/168/62 +# https://docs.google.com/spreadsheets/d/1bEpujdvBPZY9Fl61PZLUWuHanD2VAkRORFZ5D9xjLzA/edit?usp=sharing +# +# Changes: +# July 22, 2020: Incorporating changes from Kevin Schlichter. +# https://github.com/kschlichter/Home-Assistant-Inovelli-Red-Dimmer-Switch +# +# September 17, 2020: There are some massive improvements to my version of this code. Here are the highlights: +# 1. Choose - using the recently added choose: feature a separate call has been created for the Z-wave and OZW +# versions of the service call. +# 2. Variables - using 0.115’s new variables: feature the variables sent each service call only have to be +# calculated once. +# 3. Supported Features - I realized that I could probably tell the difference between modules using the +# “supported_features” attribute of each switch. For example my dimmer’s supported features is “33”. +# +# September 18, 2020: Added "model" parameter with options of dimmer, switch, combo_light, combo_fan. This replaces +# supported_features as the combo fan/light switch also had the same supported_features value. +# +# February 24, 2021: Added support for Z-Wave JS in place of OpenZwave (ozw). +# The ozw code is remarked out for those that still need it. +# +# February 27, 2021: +# 1. Added zwave_integration at top of "variables:" section to allow users to define which integration is +# installed ("zwave", "ozw", "zwave_js"). I just don't see a simple way to auto-detect this. +# 2. Added a comment describing the "model" variable. +# 3. Replaced personal "script.debug" service call with universal "persistent_notification.create". +# Unremarking these lines could help you troubleshoot why something isn't working as expected. +# 4. Updated broken spreadsheet link with public copy stored in my Google Docs account. +# Thanks for the heads up Kevin Schlichter! +# +# March 26, 2021 +# 1. Added fields to help users experimenting in the Services Developer Tool. +# +# April 3, 2021 +# Incorporated @firstof9's changes: +# 1. Set execution mode to "parallel" to all this script to potentially run on more than one devices simultaneously. +# 2. Implement ZWave JS's new zwave_js.bulk_set_partial_config_parameters command. +# Source: https://gist.github.com/firstof9/b88d072a81c54b314fe7ddb901fc5c29 +# +mode: parallel +variables: + # REQUIRED to be one of these options: "zwave", "ozw", "zwave_js" + # Advanced: If you'd like to have your device list filtered in the Services Developer Tool, + # then unremark out "integration: zwave_js" under the fields section, and change the integration + # name to match. + zwave_integration: "zwave_js" + + # * Strongly recommended -> Use the passed model type ("dimmer", "switch", "combo_light") when present. + # * If not present, then attempt to identify the type using the "product_name" attribute (which is only + # unfortunately only available in the original zwave integration). + # * Finally, assume the model type is "dimmer". + model: | + {% if model is string %} + {{ model }} + {%- elif state_attr(entity_id, 'product_name') is string %} + {%- if 'LZW31' in state_attr(entity_id, 'product_name') %} + dimmer + {%- elif 'LZW36' in state_attr(entity_id, 'product_name') %} + combo_light + {%- else %} + switch + {%- endif %} + {%- else %} + dimmer + {%- endif %} + parameters: + dimmer: 16 + combo_light: 24 + combo_fan: 25 + switch: 8 + node_id: '{{ state_attr(entity_id,"node_id") }}' + color: | + {%- if color is not number %} + {{ color|default("Yellow")|title }} + {%- else %} + {{ color|int }} + {% endif %} + # 1-10 + level: "{{ level|default(4)|int }}" + duration: '{{ duration|default("Indefinitely")|title }}' + effect: '{{ effect|default("Blink")|title }}' + colors: + "Off": 0 + "Red": 1 + "Orange": 21 + "Yellow": 42 + "Green": 85 + "Cyan": 127 + "Teal": 145 + "Blue": 170 + "Purple": 195 + "Light Pink": 220 + "Pink": 234 + durations: + "Off": 0 + "1 Second": 1 + "2 Seconds": 2 + "3 Seconds": 3 + "4 Seconds": 4 + "5 Seconds": 5 + "6 Seconds": 6 + "7 Seconds": 7 + "8 Seconds": 8 + "9 Seconds": 9 + "10 Seconds": 10 + "15 Seconds": 15 + "20 Seconds": 20 + "25 Seconds": 25 + "30 Seconds": 30 + "35 Seconds": 35 + "40 Seconds": 40 + "45 Seconds": 45 + "50 Seconds": 50 + "55 Seconds": 55 + "60 Seconds": 60 + "2 Minutes": 62 + "3 Minutes": 63 + "4 Minutes": 64 + "10 Minutes": 70 + "15 Minutes": 75 + "30 Minutes": 90 + "45 Minutes": 105 + "1 Hour": 120 + "2 Hours": 122 + "Indefinitely": 255 + effects_dimmer: + "Off": 0 + "Solid": 1 + "Chase": 2 + "Fast Blink": 3 + "Slow Blink": 4 + "Blink": 4 + "Pulse": 5 + "Breath": 5 + effects_switch: + "Off": 0 + "Solid": 1 + "Fast Blink": 2 + "Slow Blink": 3 + "Blink": 3 + "Pulse": 4 + "Breath": 4 +sequence: + # Preform the Inovelli math. + - variables: + parameter: "{{ parameters[model|lower] }}" + color: "{{ colors[color|title]|int }}" + duration: "{{ durations[duration|title] }}" + effect: | + {% if model == "switch" %} + {{- effects_switch[effect|title] }} + {%- else %} + {{- effects_dimmer[effect|title] }} + {% endif %} + inovelli_math: | + {%- if effect|int > 0 %} + {{ color|int + (level|int * 256) + (duration|int * 65536) + (effect|int * 16777216) }} + {%- else %} + 0 + {% endif %} + # Unremark to provide an notification with troubleshooting information. + # - service: persistent_notification.create + # data: + # title: "DEBUG: script.inovelli_led" + # notification_id: "inovelli_led" + # message: | + # zwave_integration: {{ zwave_integration }} + # model: {{ model }} + # color: '{{ color|title }}' + # level: '{{ level }}' + # duration: '{{ duration|title }}' + # effect: '{{ effect|title }}' + # node_id: '{{ node_id }}' + # parameter: '{{ parameter }}' + # value: '{{ inovelli_math }}' + + - choose: + # The Z-Wave JS integration requires this service call. + - conditions: + - '{{ zwave_integration == "zwave_js" }}' + sequence: + # Clear the previous effect. + - service: zwave_js.bulk_set_partial_config_parameters + target: + entity_id: "{{ entity_id }}" + data: + parameter: "{{ parameter }}" + value: 0 + + # Start the new effect. + - service: zwave_js.bulk_set_partial_config_parameters + target: + entity_id: "{{ entity_id }}" + data: + parameter: "{{ parameter }}" + value: "{{ inovelli_math }}" + + # # The OZW integration requires this service call. + # - conditions: + # - '{{ zwave_integration == "ozw" }}' + # sequence: + # # Clear the previous effect. + # - service: ozw.set_config_parameter + # data: + # node_id: "{{ node_id }}" + # parameter: "{{ parameter }}" + # value: 0 + + # # Start the new effect. + # - service: ozw.set_config_parameter + # data: + # node_id: "{{ node_id }}" + # parameter: "{{ parameter }}" + # value: "{{ inovelli_math }}" + + # # The Z-wave integration requires this service call. + # default: + # # Clear the previous effect. + # - service: zwave.set_config_parameter + # data: + # node_id: "{{ node_id }}" + # parameter: "{{ parameter }}" + # size: 4 + # value: 0 + + # # Start the new effect. + # - service: zwave.set_config_parameter + # data: + # node_id: "{{ node_id }}" + # parameter: "{{ parameter }}" + # size: 4 + # value: "{{ inovelli_math }}" + +fields: + entity_id: + description: Light or switch which represents + example: light.red_series_dimmer + selector: + entity: + #integration: zwave_js + model: + description: 'Device type: dimmer (default), switch, combo_light' + example: dimmer + selector: + select: + options: + - dimmer + - switch + - combo_light + color: + description: 'Choose a color.' + example: purple + selector: + select: + options: + - "Off" + - Red + - Orange + - Yellow + - Green + - Cyan + - Teal + - Blue + - Purple + - Light Pink + - Pink + effect: + description: 'Choose an effect.' + example: blink + selector: + select: + options: + - "Off" + - Solid + - Chase + - Fast Blink + - Slow Blink + - Blink + - Pulse + - Breath + duration: + description: 'How long should the effect run?' + example: 10 seconds + selector: + select: + options: + - "Off" + - 1 Second + - 2 Seconds + - 3 Seconds + - 4 Seconds + - 5 Seconds + - 6 Seconds + - 7 Seconds + - 8 Seconds + - 9 Seconds + - 10 Seconds + - 15 Seconds + - 20 Seconds + - 25 Seconds + - 30 Seconds + - 35 Seconds + - 40 Seconds + - 45 Seconds + - 50 Seconds + - 55 Seconds + - 60 Seconds + - 2 Minutes + - 3 Minutes + - 4 Minutes + - 10 Minutes + - 15 Minutes + - 30 Minutes + - 45 Minutes + - 1 Hour + - 2 Hours + - Indefinitely \ No newline at end of file diff --git a/scripts/inovelli_led_number.yaml b/scripts/inovelli_led_number.yaml new file mode 100644 index 0000000..26e2950 --- /dev/null +++ b/scripts/inovelli_led_number.yaml @@ -0,0 +1,108 @@ +# Calculation References: +# https://nathanfiscus.github.io/inovelli-notification-calc/ +# https://community.inovelli.com/t/home-assistant-2nd-gen-switch-rgb-working/168/62 +# https://docs.google.com/spreadsheets/u/1/d/1SGJrJHCUtz8AzznWL_mLCTJjjr2U0IpltcUkRr7N_6M/edit?usp=sharing +description: 'Set color on Inovelli LED dimmer' +mode: queued + +fields: + entity_id: + description: The entity to change + example: input_number.master_bedroom_light_led + color: + description: The color to set the LED (Red, Orange, Green, Blue, Pink, Yellow(Default), Cyan, Purple) + example: Purple + duration: + description: 'How long the effect should last (1 Second, 15 Minutes, 2 Hours, Indefinitely(Default))' + example: '"30 Seconds"' + effect: + description: 'The effect to use (Off, Solid, Chase(Default), Fast Blink, Slow Blink, Pulse)' + example: Chase + level: + description: Brightness level (1-10, Default is 4) + example: 4 + value: + description: A pre-calculated Inovelli LED value + example: 33490140 +sequence: + - service: input_number.set_value + data_template: + entity_id: "{{ entity_id }}" + value: > + {%- set value = value|default(0) | int %} + {# Skip the calculations for effect = "off". #} + {% if effect|title == "Off" %} + 0 + {# Skip the calculations if a value is already given #} + {% elif value | int > 0 %} + {{ value | int }} + {% else %} + {# Set default values if any needed values are missing. #} + {% set color = color|default("Yellow") %} + {% set level = level|default(4) | int %}{# 1-10 #} + {% set duration = duration|default("60 Seconds") %} + {% set effect = effect|default("Pulse") %} + {# Let's make things easy by using descriptive text instead of hard to understand numbers. #} + {% set colors = { + "Red": 1, + "Orange": 21, + "Green": 85, + "Blue": 170, + "Pink": 234, + "Yellow": 42, + "Cyan": 127, + "Purple": 195 + } %} + {% set durations = { + "1 Second": 1, + "2 Seconds": 2, + "3 Seconds": 3, + "4 Seconds": 4, + "5 Seconds": 5, + "6 Seconds": 6, + "7 Seconds": 7, + "8 Seconds": 8, + "9 Seconds": 9, + "10 Seconds": 10, + "15 Seconds": 15, + "20 Seconds": 20, + "25 Seconds": 25, + "30 Seconds": 30, + "35 Seconds": 35, + "40 Seconds": 40, + "45 Seconds": 45, + "50 Seconds": 50, + "55 Seconds": 55, + "60 Seconds": 60, + "2 Minutes": 62, + "3 Minutes": 63, + "4 Minutes": 64, + "15 Minutes": 75, + "30 Minutes": 90, + "45 Minutes": 105, + "1 Hour": 120, + "2 Hours": 122, + "Indefinitely": 255 + } %} + {% set effects = { + "Off": 0, + "Solid": 1, + "Chase": 2, + "Fast Blink": 3, + "Slow Blink": 4, + "Blink": 4, + "Pulse": 5, + "Breath": 5 + } %} + {# Preform the Inovelli mind bending mathmatics automatically for us! :) #} + {#{ colors[color|title] + (level * 256) + (durations[duration|title] * 65536) + (effects[effect|title] * 16777216) }#} + {% set value = (colors[color|title] + (level * 256) + (durations[duration|title] * 65536) + (effects[effect|title] * 16777216)) %} + {{ value }} + {% endif %} + + - service: logbook.log + data_template: + name: Inovelli LED Number + entity_id: script.inovelli_led_number + message: > + {{ states("sensor.date_time_iso") }} Inovelli LED ran with the following options: {{ entity_id }} {{ led }} {{ color }} {{ duration }} {{ effect }} {{ level }} and generated {{ states("input_number.master_bedroom_light_led") | int }} \ No newline at end of file diff --git a/scripts/inovelli_led_off.yaml b/scripts/inovelli_led_off.yaml new file mode 100644 index 0000000..49267c8 --- /dev/null +++ b/scripts/inovelli_led_off.yaml @@ -0,0 +1,13 @@ +fields: + entity_id: + description: The entity to change + example: zwave.master_bedroom_dimmer + led: + description: 'Which LED to adjust (Light(Default), Fan)' + example: "Light" # Set to "false" to adjust the fan LED +sequence: + - service: script.inovelli_led + data_template: + entity_id: "{{ entity_id }}" + led: "{{ led }}" + effect: "Off" \ No newline at end of file diff --git a/scripts/inovelli_led_set_defaults.yaml b/scripts/inovelli_led_set_defaults.yaml new file mode 100644 index 0000000..7ce4f7c --- /dev/null +++ b/scripts/inovelli_led_set_defaults.yaml @@ -0,0 +1,142 @@ +--- +# Incorporates default LED color + dimmer brightness. +# Originally in a script by Kevin Schlichter https://github.com/kschlichter/Home-Assistant-Inovelli-Red-Dimmer-Switch +variables: + # REQUIRED to be one of these options: "zwave", "ozw", "zwave_js" + zwave_integration: "zwave_js" + + # * Strongly recommended -> Use the passed model type ("dimmer", "switch", "combo_light") when present. + # * If not present, then attempt to identify the type using the "product_name" attribute (which is only + # unfortunately only available in the original zwave integration). + # * Finally, assume the model type is "dimmer". + model: | + {% if model is string %} + {{ model }} + {%- elif state_attr(entity_id, 'product_name') is string %} + {%- if 'LZW31' in state_attr(entity_id, 'product_name') %} + dimmer + {%- elif 'LZW36' in state_attr(entity_id, 'product_name') %} + combo_light + {%- else %} + switch + {%- endif %} + {%- else %} + dimmer + {%- endif %} + node_id: '{{ state_attr(entity_id,"node_id") }}' + color: '{{ color|default("Blue") }}' + level_on: '{{ level_on|default("10") }}' + level_off: '{{ level_off|default("3") }}' + parameters: + dimmer: + color: 13 + level_on: 14 + level_off: 15 + combo_light: + color: 18 + level_on: 19 + level_off: 22 + combo_fan: + color: 20 + level_on: 21 + level_off: 23 + switch: + color: 5 + level_on: 6 + level_off: 7 + colors: + "Off": 0 + "Red": 1 + "Orange": 21 + "Yellow": 42 + "Green": 85 + "Cyan": 127 + "Teal": 145 + "Blue": 170 + "Purple": 195 + "Light Pink": 220 + "Pink": 234 +sequence: + - variables: + color: '{{ colors[color|title] }}' + color_parameter: '{{ parameters[model]["color"] }}' + level_on_parameter: '{{ parameters[model]["level_on"] }}' + level_off_parameter: '{{ parameters[model]["level_off"] }}' + + # - service: script.debug + # data: + # id: 02 + # message: | + # node_id: '{{ node_id }}' + # parameter: '{{ parameters[model]["color"] }}' + # color: '{{ color }}' + # level_on: '{{ level_on }}' + # level_off: '{{ level_off }}' + + - choose: + # The Z-Wave JS integration requires this service call. + - conditions: + - '{{ zwave_integration == "zwave_js" }}' + sequence: + - service: zwave_js.set_config_parameter + target: + entity_id: '{{ entity_id }}' + data: + parameter: '{{ color_parameter }}' + value: '{{ color }}' + + - service: zwave_js.set_config_parameter + target: + entity_id: '{{ entity_id }}' + data: + parameter: '{{ level_on_parameter }}' + value: '{{ level_on }}' + + # - service: ozw.set_config_parameter + - service: zwave_js.set_config_parameter + target: + entity_id: '{{ entity_id }}' + data: + parameter: '{{ level_off_parameter }}' + value: '{{ level_off }}' + +fields: + entity_id: + description: Light or switch which represents + example: light.red_series_dimmer + selector: + entity: + #integration: zwave_js + model: + description: 'Device type: dimmer (default), switch, combo_light, combo_fan' + example: dimmer + selector: + select: + options: + - dimmer + - switch + - combo_light + - combo_fan + color: + description: 'Choose a color.' + example: purple + selector: + select: + options: + - "Off" + - Red + - Orange + - Yellow + - Green + - Cyan + - Teal + - Blue + - Purple + - Light Pink + - Pink + level_on: + description: LED Brightness when on + example: 10 + level_off: + description: LED Brightness when off + example: 3 \ No newline at end of file diff --git a/scripts/master_bedroom/master_bedroom_light_cycle.yaml b/scripts/master_bedroom/master_bedroom_light_cycle.yaml new file mode 100644 index 0000000..163b097 --- /dev/null +++ b/scripts/master_bedroom/master_bedroom_light_cycle.yaml @@ -0,0 +1,177 @@ +alias: Master Bedroom Light Cycle +fields: + colorset: + description: The set of colors to loop through + example: 'gemtones' + brightness: + description: The brightness that the lights should be set to + example: '100' + transition: + description: The transition time, in seconds + example: '10' +sequence: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.master_bedroom_cycle_same + state: 'on' + sequence: + - service: light.turn_on + data_template: + entity_id: light.master_bedroom_hue + brightness: '{{ states("input_number.master_bedroom_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.master_bedroom_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.master_bedroom_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + default: + - service: light.turn_on + data_template: + entity_id: light.master_bedroom_1 + brightness: '{{ states("input_number.master_bedroom_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.master_bedroom_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.master_bedroom_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + - service: light.turn_on + data_template: + entity_id: light.master_bedroom_2 + brightness: '{{ states("input_number.master_bedroom_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.master_bedroom_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.master_bedroom_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + - service: light.turn_on + data_template: + entity_id: light.master_bedroom_3 + brightness: '{{ states("input_number.master_bedroom_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.master_bedroom_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.master_bedroom_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.master_bedroom_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + - delay: + seconds: '{{ states("input_number.master_bedroom_light_cycle_transition") | int }}' + # Wait until the loop_lights script has finished running + - wait_template: "{{ is_state('script.master_bedroom_loop_lights', 'off') }}" + - service: script.turn_on + entity_id: script.master_bedroom_loop_lights diff --git a/scripts/master_bedroom/master_bedroom_loop_lights.yaml b/scripts/master_bedroom/master_bedroom_loop_lights.yaml new file mode 100644 index 0000000..e603926 --- /dev/null +++ b/scripts/master_bedroom/master_bedroom_loop_lights.yaml @@ -0,0 +1,6 @@ +alias: Master Bedroom Loop Lights +sequence: + # Wait until the light_cycle script has finished running + - wait_template: "{{ is_state('script.master_bedroom_light_cycle', 'off') }}" + - service: script.turn_on + entity_id: script.master_bedroom_light_cycle diff --git a/scripts/master_bedroom/wake_up_the_master_bedroom.yaml b/scripts/master_bedroom/wake_up_the_master_bedroom.yaml new file mode 100644 index 0000000..b0f6619 --- /dev/null +++ b/scripts/master_bedroom/wake_up_the_master_bedroom.yaml @@ -0,0 +1,33 @@ +alias: Wake Up the Master Bedroom +mode: single +icon: mdi:alarm +sequence: + - repeat: + while: + - condition: state + entity_id: binary_sensor.master_bed_occupied + state: "on" + sequence: + - variables: + volume: "{{ 0.5 + (repeat.index * 0.05) }}" + - service: script.make_clever_announcement + data: + entity_id: media_player.master_bedroom_clock + media_content_id: media-source://media_source/local/Sounds/tts/time_to_wake_up.mp3 + volume: "{{iif(volume>1,1,volume)}}" + - service: script.make_clever_announcement + data: + entity_id: media_player.master_bedroom_clock + media_content_id: media-source://media_source/local/Sounds/alarms/Alarm_Clock.mp3 + volume: "{{iif(volume>1,1,volume)}}" + - delay: + hours: 0 + minutes: 5 + seconds: 0 + milliseconds: 0 + + - service: input_select.select_option + data: + option: Auto + target: + entity_id: input_select.master_bedroom_mode diff --git a/scripts/notification_action_script.yaml b/scripts/notification_action_script.yaml new file mode 100644 index 0000000..aae9bce --- /dev/null +++ b/scripts/notification_action_script.yaml @@ -0,0 +1,64 @@ +alias: Notification Action Script +sequence: + # inside a automation actions or script sequence + - alias: "Set up variables for the actions" + variables: + # Including an id in the action allows us to identify this script run + # and not accidentally trigger for other notification actions + action_open: "{{ 'OPEN_' ~ context.id }}" + action_close: "{{ 'CLOSE_' ~ context.id }}" + - alias: "Ask to close or open the garage" + choose: + - conditions: + - condition: state + entity_id: cover.garage_door + state: 'closed' + sequence: + service: notify.mobile_app_pixel_7 + data: + message: "The garage is closed. Do you want to adjust this?" + data: + actions: + - action: "{{ action_open }}" + title: Open + - action: "{{ action_close }}" + title: Close + - conditions: + - condition: state + entity_id: cover.garage_door + state: 'open' + sequence: + service: notify.mobile_app_pixel_7 + data: + message: "The garage is open. Do you want to adjust this?" + data: + actions: + - action: "{{ action_open }}" + title: Open + - action: "{{ action_close }}" + title: Close + + - alias: "Wait for a response" + wait_for_trigger: + - platform: event + event_type: mobile_app_notification_action + event_data: + # waiting for the specific action avoids accidentally continuing + # for another script/automation's notification action + action: "{{ action_open }}" + - platform: event + event_type: mobile_app_notification_action + event_data: + action: "{{ action_close }}" + - alias: "Perform the action" + choose: + - conditions: "{{ wait.trigger.event.data.action == action_open }}" + sequence: + - service: cover.open_cover + target: + entity_id: cover.garage_door + - conditions: "{{ wait.trigger.event.data.action == action_close }}" + sequence: + - service: cover.close_cover + target: + entity_id: cover.garage_door diff --git a/scripts/notify_alert.yaml b/scripts/notify_alert.yaml new file mode 100644 index 0000000..cf1b1c9 --- /dev/null +++ b/scripts/notify_alert.yaml @@ -0,0 +1,10 @@ +alias: Notify Alert +sequence: + - service: notify.mobile_app_pixel_7 + data: + title: "Wake up!" + message: "The house is on fire and the cat's stuck in the dryer!" + data: + ttl: 0 + priority: high + channel: alarm_stream diff --git a/scripts/notify_with_icon.yaml b/scripts/notify_with_icon.yaml new file mode 100644 index 0000000..400b526 --- /dev/null +++ b/scripts/notify_with_icon.yaml @@ -0,0 +1,8 @@ +alias: Notify With Icon +sequence: + - service: notify.mobile_app_pixel_7 + data: + title: "Cellphone icon" + message: "This will show a cellphone icon in the status bar" + data: + notification_icon: "mdi:cellphone" diff --git a/scripts/notify_with_pic.yaml b/scripts/notify_with_pic.yaml new file mode 100644 index 0000000..d8c5050 --- /dev/null +++ b/scripts/notify_with_pic.yaml @@ -0,0 +1,13 @@ +alias: Notify with Pic +sequence: + - service: notify.mobile_app_pixel_7 + data: + title: Test + message: "This is a test message with an image." + data: + image: > + {%- set image = "https://automation.clintweaver.com" + state_attr("camera.frigate_cam19","entity_picture") %} + {{ image }} + # image: > + # {%- set image = "http://192.168.1.11:8123" + state_attr("camera.frigate_cam08","entity_picture") %} + # {{ image }} diff --git a/scripts/nursery/nursery_light_cycle.yaml b/scripts/nursery/nursery_light_cycle.yaml new file mode 100644 index 0000000..459084b --- /dev/null +++ b/scripts/nursery/nursery_light_cycle.yaml @@ -0,0 +1,139 @@ +alias: Nursery Light Cycle +fields: + colorset: + description: The set of colors to loop through + example: 'gemtones' + brightness: + description: The brightness that the lights should be set to + example: '100' + transition: + description: The transition time, in seconds + example: '10' +sequence: + - choose: + - conditions: + - condition: state + entity_id: input_boolean.nursery_cycle_same + state: 'on' + sequence: + - service: light.turn_on + data_template: + entity_id: light.nursery_hue + brightness: '{{ states("input_number.nursery_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.nursery_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.nursery_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.nursery_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.nursery_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.nursery_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.nursery_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.nursery_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.nursery_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.nursery_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.nursery_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.nursery_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.nursery_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.nursery_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.nursery_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.nursery_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.nursery_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + default: + - service: light.turn_on + data_template: + entity_id: light.nursery_color_1 + brightness: '{{ states("input_number.nursery_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.nursery_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.nursery_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.nursery_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.nursery_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.nursery_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.nursery_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.nursery_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.nursery_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.nursery_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.nursery_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.nursery_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.nursery_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.nursery_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.nursery_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.nursery_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.nursery_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + - service: light.turn_on + data_template: + entity_id: light.nursery_color_2 + brightness: '{{ states("input_number.nursery_light_cycle_brightness") | int }}' + transition: '{{ states("input_number.nursery_light_cycle_transition") | int }}' + profile: > + {% if states('input_select.nursery_color_set') == 'Basic' %} + {% set colors = ['white','black','red','orange','yellow','green','blue','purple','pink','brown','gray'] %} + {% elif states('input_select.nursery_color_set') == 'Color Wheel' %} + {% set colors = ['red','orange','amber','yellow','chartreuse','green','teal','blue','violet','purple','magenta'] %} + {% elif states('input_select.nursery_color_set') == 'Rainbow' %} + {% set colors = ['red','orange','yellow','green','blue','indigo','violet'] %} + {% elif states('input_select.nursery_color_set') == 'Flourescent' %} + {% set colors = ['radical_red','wild_watermelon','outrageous_orange','atomic_tangerine','neon_carrot','sunglow','laser_lemon','unmellow_yellow','electric_lime','screamin_green','magic_mint','blizzard_blue','shocking_pink','razzle_dazzle_rose','hot_magenta','purple_pizzazz'] %} + {% elif states('input_select.nursery_color_set') == 'Silver Swirl' %} + {% set colors = ['aztec_gold','burnished_brown','cerulean_frost','cinnamon_satin','copper_penny','cosmic_cobalt','glossy_grape','granite_gray','green_sheen','lilac_luster','misty_moss','mystic_maroon','pearly_purple','pewter_blue','polished_pine','quick_silver','rose_dust','rusty_red','shadow_blue','shiny_shamrock','steel_teal','sugar_plum','twilight_lavender','wintergreen_dream'] %} + {% elif states('input_select.nursery_color_set') == 'Gem Tones' %} + {% set colors = ['amethyst','citrine','emerald','jade','lapis_lazuli','malachite','rose_quartz','ruby','sapphire','smokey_topaz'] %} + {% elif states('input_select.nursery_color_set') == 'Reds' %} + {% set colors = ['auburn','baby_pink','barn_red','burgundy','burnt_umber','cadmium_red','cardinal','chesnut','chili_red','congo_pink','coral_pink','desire','fire_engine_red','imperial_red','new_york_pink','paradise_pink','pastel_pink','pigment_red','rust','salmon_pink','tango_pink','turkey_red','vanilla_ice','wine'] %} + {% elif states('input_select.nursery_color_set') == 'Oranges' %} + {% set colors = ['beaver','cadmium_orange','carrot_orange','champagne','chocolate','cocoa_brown','desert_sand','flame','gamboge','international_orange','kobicha','lion','marigold','orange_peel','persian_orange','persimmon','peru','portland_orange','pumpkin','russet','safety_orange','sandy_brown','tan','taupe','tawny','tea_rose','wood_brown'] %} + {% elif states('input_select.nursery_color_set') == 'Yellows' %} + {% set colors = ['amber','beige','buff','citrine','cream','cyber_yellow','ecru','harvest_gold','jasmine','jonquil','khaki','lemon','mellow_yellow','mikado_yellow','mustard','naples_yellow','old_gold','process_yellow','royal_yellow','safety_yellow','saffron','school_bus_yellow','straw','vanilla'] %} + {% elif states('input_select.nursery_color_set') == 'Greens' %} + {% set colors = ['army_green','artichoke','asparagus','avacado','bottle_green','bright_mint','celadon','emerald','fern_green','forest_green','harlequin','hunter_green','india_green','islamic_green','jade','kelly_green','laurel_green','malachite','mantis','mint_green','moss_green','neon_green','olive','pakistan_green','paris_green','rifle_green','russian_green','sea_green','shamrock_green','slytherin_green'] %} + {% elif states('input_select.nursery_color_set') == 'Cyans' %} + {% set colors = ['aqua','aquamarine','brunswick_green','celadon_green','celeste','cerulean','charleston_green','dark_cyan','electric_blue','feldgrau','gray_green','midnight_green','morning_blue','myrtle_green','persian_green','robin_egg_blue','sky_blue','teal','teal_blue','turquoise','verdigris','viridian'] %} + {% elif states('input_select.nursery_color_set') == 'Blues' %} + {% set colors = ['azure','baby_blue','blue_gray','capri','cornflower','egyptian_blue','glaucous','independence','indigo','indigo_dye','liberty','light_blue','midnight_blue','navy_blue','periwinkle','powder_blue','resolution_blue','sapphire','space_cadet','steel_blue','ultramarine'] %} + {% elif states('input_select.nursery_color_set') == 'Purples' %} + {% set colors = ['byzantium','dark_purple','electric_indigo','eminence','heliotrope','indigo','indigo_dye','mardi_gras','mauve','medium_purple','orchid','pansy_purple','phlox','purpureus','thistle','tropical_indigo','tyrian_purple','royal_purple'] %} + {% elif states('input_select.nursery_color_set') == 'Magentas' %} + {% set colors = ['amaranth','antique_fuchsia','baby_pink','cameo_pink','carnation_pink','charm_pink','china_pink','cotton_candy','dark_magenta','fandango','french_fuchsia','french_pink','fuchsia_rose','magenta_haze','mimi_pink','persian_pink','piggy_pink','pink','pink_lace','pink_lavender','plum','queen_pink','rose','rose_quartz','shocking_pink','silver_pink','sky_magenta','super_pink'] %} + {% elif states('input_select.nursery_color_set') == 'Grays' %} + {% set colors = ['ash_gray','battleship_gray','cadet_gray','charcoal','dim_gray','gunmetal','jet','marengo','nickel','platinum','rocket_metallic','silver','slate_gray'] %} + {% endif %} + {{ colors|random }} + - delay: + seconds: '{{ states("input_number.nursery_light_cycle_transition") | int }}' + # Wait until the loop_lights script has finished running + - wait_template: "{{ is_state('script.nursery_loop_lights', 'off') }}" + - service: script.turn_on + entity_id: script.nursery_loop_lights diff --git a/scripts/nursery/nursery_loop_lights.yaml b/scripts/nursery/nursery_loop_lights.yaml new file mode 100644 index 0000000..45603ef --- /dev/null +++ b/scripts/nursery/nursery_loop_lights.yaml @@ -0,0 +1,6 @@ +alias: Nursery Loop Lights +sequence: + # Wait until the light_cycle script has finished running + - wait_template: "{{ is_state('script.nursery_light_cycle', 'off') }}" + - service: script.turn_on + entity_id: script.nursery_light_cycle diff --git a/scripts/people/all_kids_youtube_music.yaml b/scripts/people/all_kids_youtube_music.yaml new file mode 100644 index 0000000..838c1cc --- /dev/null +++ b/scripts/people/all_kids_youtube_music.yaml @@ -0,0 +1,21 @@ +alias: All Kids Youtube Music +mode: single +icon: mdi:music +sequence: + - service: media_player.select_source + data: + source: nursery_hub + entity_id: media_player.ytube_music_player + - service: media_player.shuffle_set + data: + shuffle: true + entity_id: media_player.ytube_music_player + - service: media_player.repeat_set + data: + repeat: all + entity_id: media_player.ytube_music_player + - service: media_player.play_media + data: + entity_id: media_player.ytube_music_player + media_content_id: RDCLAK5uy_mH5mS2pbI9c743F2Xoi7WxRVBbw7k3hPE + media_content_type: playlist \ No newline at end of file diff --git a/scripts/people/bridget/bridget_travel_sensor.yaml b/scripts/people/bridget/bridget_travel_sensor.yaml new file mode 100644 index 0000000..f988951 --- /dev/null +++ b/scripts/people/bridget/bridget_travel_sensor.yaml @@ -0,0 +1,22 @@ +alias: Bridget travel sensor +mode: restart +sequence: + - service: input_text.set_value + data_template: + entity_id: input_text.person_bridget + value: >- + {% if is_state('input_boolean.bridget_home', 'on') %} + {% if is_state('input_boolean.bridget_is_awake','off') %} + Sleeping + {% elif is_state('input_boolean.bridget_in_bed','on') %} + In bed + {% else %} + {{ states("input_select.bridget_status_dropdown") }} + {% endif %} + {% elif is_state('binary_sensor.have_custody', 'off') %} + Off week + {% elif is_state('input_boolean.clint_work_from_home', 'on') %} + At Childcare + {% else %} + Somewhere + {% endif %} diff --git a/scripts/people/clint/clint_travel_sensor.yaml b/scripts/people/clint/clint_travel_sensor.yaml new file mode 100644 index 0000000..1d9d568 --- /dev/null +++ b/scripts/people/clint/clint_travel_sensor.yaml @@ -0,0 +1,22 @@ +alias: Clint travel sensor +mode: restart +sequence: + - service: input_text.set_value + data_template: + entity_id: input_text.person_clint + value: >- + {% if is_state('input_boolean.clint_home', 'on') %} + {% if is_state('input_boolean.clint_is_awake','off') %} + sleeping + {% elif is_state('input_boolean.clint_in_bed','on') %} + in bed + {% else %} + {{ states("input_select.clint_status_dropdown") }} + {% endif %} + {% elif is_state('device_tracker.pixel_7', 'home') and is_state('input_boolean.clint_home', 'off') %} + near home ({{ states('input_select.clint_status_dropdown') }}) + {% elif not is_state('device_tracker.pixel_7', 'not_home') %} + at {{ states('device_tracker.pixel_7') }} + {% else %} + somewhere + {% endif %} diff --git a/scripts/people/clint/clint_traveltime.yaml b/scripts/people/clint/clint_traveltime.yaml new file mode 100644 index 0000000..08e7ca8 --- /dev/null +++ b/scripts/people/clint/clint_traveltime.yaml @@ -0,0 +1,9 @@ +alias: Clint traveltime +mode: restart +sequence: + - service: logbook.log + data_template: + name: Clint Traveltime + entity_id: script.clint_traveltime + message: > + {{ states("sensor.date_time_iso") }} Updated travel time for Clint diff --git a/scripts/people/clint/take_meds.yaml b/scripts/people/clint/take_meds.yaml new file mode 100644 index 0000000..2292e6c --- /dev/null +++ b/scripts/people/clint/take_meds.yaml @@ -0,0 +1,46 @@ +alias: Take Meds +sequence: + - alias: "Check the input_booleans and react accordingly" + choose: + - conditions: + - alias: "Morning meds needed" + condition: state + entity_id: input_boolean.clint_needs_am_meds + state: "on" + sequence: + - alias: "Turn off AM meds" + service: input_boolean.turn_off + target: + entity_id: input_boolean.clint_needs_am_meds + - service: media_player.play_media + target: + entity_id: + - media_player.bathroom_mini + data: + media_content_id: media-source://media_source/local/Sounds/tts/taking_morning_meds.mp3 + media_content_type: "audio/mpeg" + - conditions: + - alias: "Afternoon meds needed" + condition: state + entity_id: input_boolean.clint_needs_pm_meds + state: "on" + sequence: + - alias: "Turn off PM meds" + service: input_boolean.turn_off + target: + entity_id: input_boolean.clint_needs_pm_meds + - service: media_player.play_media + target: + entity_id: + - media_player.bathroom_mini + data: + media_content_id: media-source://media_source/local/Sounds/tts/taking_afternoon_meds.mp3 + media_content_type: "audio/mpeg" + default: + - service: media_player.play_media + target: + entity_id: + - media_player.bathroom_mini + data: + media_content_id: media-source://media_source/local/Sounds/tts/meds_not_needed.mp3 + media_content_type: "audio/mpeg" diff --git a/scripts/people/ebin/ebin_travel_sensor.yaml b/scripts/people/ebin/ebin_travel_sensor.yaml new file mode 100644 index 0000000..3bdecf9 --- /dev/null +++ b/scripts/people/ebin/ebin_travel_sensor.yaml @@ -0,0 +1,20 @@ +alias: Ebin travel sensor +mode: restart +sequence: + - service: input_text.set_value + data_template: + entity_id: input_text.person_ebin + value: >- + {% if is_state('input_boolean.ebin_home', 'on') %} + {% if is_state('input_boolean.ebin_is_awake','off') %} + Sleeping + {% elif is_state('input_boolean.ebin_in_bed','on') %} + In bed + {% else %} + {{ states("input_select.ebin_status_dropdown") }} + {% endif %} + {% elif is_state('group.person_ebin', 'home') and is_state('input_boolean.ebin_home', 'off') %} + Near home ({{ states('input_select.ebin_status_dropdown') }}) + {% else %} + Away + {% endif %} diff --git a/scripts/people/emmett/emmett_travel_sensor.yaml b/scripts/people/emmett/emmett_travel_sensor.yaml new file mode 100644 index 0000000..2527dbd --- /dev/null +++ b/scripts/people/emmett/emmett_travel_sensor.yaml @@ -0,0 +1,22 @@ +alias: Emmett travel sensor +mode: restart +sequence: + - service: input_text.set_value + data_template: + entity_id: input_text.person_emmett + value: >- + {% if is_state('input_boolean.emmett_home', 'on') %} + {% if is_state('input_boolean.emmett_is_awake','off') %} + Sleeping + {% elif is_state('input_boolean.emmett_in_bed','on') %} + In bed + {% else %} + {{ states("input_select.emmett_status_dropdown") }} + {% endif %} + {% elif is_state('binary_sensor.have_custody', 'off') %} + Off week + {% elif is_state('input_boolean.clint_work_from_home', 'on') %} + At Childcare + {% else %} + Somewhere + {% endif %} diff --git a/scripts/people/goodnight_kids_youtube_music.yaml b/scripts/people/goodnight_kids_youtube_music.yaml new file mode 100644 index 0000000..e31dfba --- /dev/null +++ b/scripts/people/goodnight_kids_youtube_music.yaml @@ -0,0 +1,21 @@ +alias: Goodnight Kids Youtube Music +mode: single +icon: mdi:music +sequence: + - service: media_player.select_source + data: + source: nursery_hub + entity_id: media_player.ytube_music_player + - service: media_player.shuffle_set + data: + shuffle: false + entity_id: media_player.ytube_music_player + - service: media_player.repeat_set + data: + repeat: all + entity_id: media_player.ytube_music_player + - service: media_player.play_media + data: + entity_id: media_player.ytube_music_player + media_content_id: PLtfKVM9o2_5ag5qC9nHxl7tKBvGRnh2HM + media_content_type: playlist \ No newline at end of file diff --git a/scripts/people/guest/guest_travel_sensor.yaml b/scripts/people/guest/guest_travel_sensor.yaml new file mode 100644 index 0000000..709312c --- /dev/null +++ b/scripts/people/guest/guest_travel_sensor.yaml @@ -0,0 +1,18 @@ +alias: Guest travel sensor +mode: restart +sequence: + - service: input_text.set_value + data_template: + entity_id: input_text.person_guest + value: >- + {% if is_state('input_boolean.guest_home', 'on') %} + {% if is_state('input_boolean.guest_is_awake','off') %} + Sleeping + {% elif is_state('input_boolean.guest_in_bed','on') %} + In bed + {% else %} + {{ states("input_select.guest_status_dropdown") }} + {% endif %} + {% else %} + Away + {% endif %} diff --git a/scripts/people/kristy/kristy_travel_sensor.yaml b/scripts/people/kristy/kristy_travel_sensor.yaml new file mode 100644 index 0000000..858514d --- /dev/null +++ b/scripts/people/kristy/kristy_travel_sensor.yaml @@ -0,0 +1,20 @@ +alias: Kristy travel sensor +mode: restart +sequence: + - service: input_text.set_value + data_template: + entity_id: input_text.person_kristy + value: >- + {% if is_state('input_boolean.kristy_home', 'on') %} + {% if is_state('input_boolean.kristy_is_awake','off') %} + Sleeping + {% elif is_state('input_boolean.kristy_in_bed','on') %} + In bed + {% else %} + {{ states("input_select.kristy_status_dropdown") }} + {% endif %} + {% elif is_state('group.person_kristy', 'home') and is_state('input_boolean.kristy_home', 'off') %} + Near home ({{ states('input_select.kristy_status_dropdown') }}) + {% else %} + Away + {% endif %} diff --git a/scripts/people/marshall/marshall_travel_sensor.yaml b/scripts/people/marshall/marshall_travel_sensor.yaml new file mode 100644 index 0000000..9bdf37c --- /dev/null +++ b/scripts/people/marshall/marshall_travel_sensor.yaml @@ -0,0 +1,20 @@ +alias: Marshall travel sensor +mode: restart +sequence: + - service: input_text.set_value + data_template: + entity_id: input_text.person_marshall + value: >- + {% if is_state('input_boolean.marshall_home', 'on') %} + {% if is_state('input_boolean.marshall_is_awake','off') %} + Sleeping + {% elif is_state('input_boolean.marshall_in_bed','on') %} + In bed + {% else %} + {{ states("input_select.marshall_status_dropdown") }} + {% endif %} + {% elif is_state('group.person_marshall', 'home') and is_state('input_boolean.marshall_home', 'off') %} + Near home ({{ states('input_select.marshall_status_dropdown') }}) + {% else %} + Away + {% endif %} diff --git a/scripts/people/tess/tess_travel_sensor.yaml b/scripts/people/tess/tess_travel_sensor.yaml new file mode 100644 index 0000000..90236ea --- /dev/null +++ b/scripts/people/tess/tess_travel_sensor.yaml @@ -0,0 +1,20 @@ +alias: Tess travel sensor +mode: restart +sequence: + - service: input_text.set_value + data_template: + entity_id: input_text.person_tess + value: >- + {% if is_state('input_boolean.tess_home', 'on') %} + {% if is_state('input_boolean.tess_is_awake','off') %} + Sleeping + {% elif is_state('input_boolean.tess_in_bed','on') %} + In bed + {% else %} + {{ states("input_select.tess_status_dropdown") }} + {% endif %} + {% elif is_state('group.person_tess', 'home') and is_state('input_boolean.tess_home', 'off') %} + Near home ({{ states('input_select.tess_status_dropdown') }}) + {% else %} + Away + {% endif %} diff --git a/themes/mushroom/mushroom-shadow.yaml b/themes/mushroom/mushroom-shadow.yaml new file mode 100644 index 0000000..47995f8 --- /dev/null +++ b/themes/mushroom/mushroom-shadow.yaml @@ -0,0 +1,11 @@ +# DO NOT EDIT THIS FILE. +# This file will be reset with updates. +# If you want to customize it, copy the content in another folder and file and change the name. +# https://www.home-assistant.io/integrations/frontend/#defining-themes +Mushroom Shadow: + # Home Assistant override + ha-card-box-shadow: 0px 2px 4px 0px rgba(0,0,0,0.16) + ha-card-border-width: 0 + modes: + light: {} + dark: {} diff --git a/themes/mushroom/mushroom-square-shadow.yaml b/themes/mushroom/mushroom-square-shadow.yaml new file mode 100644 index 0000000..19d54c9 --- /dev/null +++ b/themes/mushroom/mushroom-square-shadow.yaml @@ -0,0 +1,20 @@ +# DO NOT EDIT THIS FILE. +# This file will be reset with updates. +# If you want to customize it, copy the content in another folder and file and change the name. +# https://www.home-assistant.io/integrations/frontend/#defining-themes +Mushroom Square Shadow: + # Home Assistant override + ha-card-box-shadow: 0px 2px 4px 0px rgba(0,0,0,0.16) + ha-card-border-width: 0 + # Home Assistant override + ha-card-border-radius: 6px + # Layout + mush-spacing: 8px + # Elements + mush-icon-border-radius: 6px + mush-control-border-radius: 6px + # Chips + mush-chip-border-radius: 6px + modes: + light: {} + dark: {} diff --git a/themes/mushroom/mushroom-square.yaml b/themes/mushroom/mushroom-square.yaml new file mode 100644 index 0000000..518487e --- /dev/null +++ b/themes/mushroom/mushroom-square.yaml @@ -0,0 +1,17 @@ +# DO NOT EDIT THIS FILE. +# This file will be reset with updates. +# If you want to customize it, copy the content in another folder and file and change the name. +# https://www.home-assistant.io/integrations/frontend/#defining-themes +Mushroom Square: + # Home Assistant override + ha-card-border-radius: 6px + # Layout + mush-spacing: 8px + # Elements + mush-icon-border-radius: 6px + mush-control-border-radius: 6px + # Chips + mush-chip-border-radius: 6px + modes: + light: {} + dark: {} diff --git a/themes/mushroom/mushroom.yaml b/themes/mushroom/mushroom.yaml new file mode 100644 index 0000000..bba28dd --- /dev/null +++ b/themes/mushroom/mushroom.yaml @@ -0,0 +1,9 @@ +# DO NOT EDIT THIS FILE. +# This file will be reset with updates. +# If you want to customize it, copy the content in another folder and file and change the name. +# https://www.home-assistant.io/integrations/frontend/#defining-themes +Mushroom: + # Nothing here as it's the default HA theme since 2022.11 + modes: + light: {} + dark: {} diff --git a/tmp/tts/helloworld.txt b/tmp/tts/helloworld.txt new file mode 100644 index 0000000..e69de29 diff --git a/ui-camera-cast.yaml b/ui-camera-cast.yaml new file mode 100644 index 0000000..d8ecb4e --- /dev/null +++ b/ui-camera-cast.yaml @@ -0,0 +1,19 @@ +title: Camera Casting +icon: mdi:camcorder + +#custom_header: !include lovelace/custom_header.yaml +views: + - !include lovelace/stretch-cameras/dual-camera-view.yaml + - !include lovelace/stretch-cameras/nursery-view.yaml + - !include lovelace/stretch-cameras/front-room-view.yaml + - !include lovelace/stretch-cameras/kitchen-view.yaml + - !include lovelace/stretch-cameras/computer-area-view.yaml + - !include lovelace/stretch-cameras/blue-room-view.yaml + - !include lovelace/stretch-cameras/garage-view.yaml + - !include lovelace/stretch-cameras/front-porch-view.yaml + - !include lovelace/stretch-cameras/front-yard-view.yaml + - !include lovelace/stretch-cameras/back-yard-view.yaml + - !include lovelace/stretch-cameras/master-bedroom-view.yaml + - !include lovelace/stretch-cameras/indoor-camera-view.yaml + - !include lovelace/stretch-cameras/outdoor-camera-view.yaml + diff --git a/ui-cameras.yaml b/ui-cameras.yaml new file mode 100644 index 0000000..412c592 --- /dev/null +++ b/ui-cameras.yaml @@ -0,0 +1,26 @@ +title: Cameras +icon: mdi:cctv + +#custom_header: !include lovelace/custom_header.yaml +views: + - !include lovelace/view-surveillance.yaml + - !include lovelace/view-cameras.yaml + - !include lovelace/view-camera-overview.yaml + - !include lovelace/view-ai-overview.yaml + - !include lovelace/frigate/view-ai-cam08.yaml + - !include lovelace/frigate/view-ai-cam12.yaml + - !include lovelace/frigate/view-ai-cam13.yaml + + #- !include lovelace/frigate/view-ai-cam02.yaml + - !include lovelace/frigate/view-ai-cam03.yaml + #- !include lovelace/frigate/view-ai-cam05.yaml + - !include lovelace/frigate/view-ai-cam06.yaml + - !include lovelace/frigate/view-ai-cam07.yaml + #- !include lovelace/frigate/view-ai-cam09.yaml + #- !include lovelace/frigate/view-ai-cam10.yaml + #- !include lovelace/frigate/view-ai-cam11.yaml + - !include lovelace/frigate/view-ai-cam01.yaml + - !include lovelace/frigate/view-ai-cam04.yaml + - !include lovelace/frigate/view-ai-cam14.yaml + - !include lovelace/frigate/view-ai-cam18.yaml + - !include lovelace/frigate/view-ai-cam19.yaml \ No newline at end of file diff --git a/ui-cams.yaml b/ui-cams.yaml new file mode 100644 index 0000000..cf3b1c3 --- /dev/null +++ b/ui-cams.yaml @@ -0,0 +1,19 @@ +title: Cams +icon: mdi:camcorder + +#custom_header: !include lovelace/custom_header.yaml +views: + - !include lovelace/raw-cameras/dual-camera-view.yaml + - !include lovelace/raw-cameras/nursery-view.yaml + - !include lovelace/raw-cameras/front-room-view.yaml + - !include lovelace/raw-cameras/kitchen-view.yaml + - !include lovelace/raw-cameras/computer-area-view.yaml + - !include lovelace/raw-cameras/blue-room-view.yaml + - !include lovelace/raw-cameras/garage-view.yaml + - !include lovelace/raw-cameras/front-porch-view.yaml + - !include lovelace/raw-cameras/front-yard-view.yaml + - !include lovelace/raw-cameras/back-yard-view.yaml + - !include lovelace/raw-cameras/master-bedroom-view.yaml + - !include lovelace/raw-cameras/indoor-camera-view.yaml + - !include lovelace/raw-cameras/outdoor-camera-view.yaml + diff --git a/ui-data.yaml b/ui-data.yaml new file mode 100644 index 0000000..bccbacb --- /dev/null +++ b/ui-data.yaml @@ -0,0 +1,15 @@ +title: Data +icon: mdi:align-horizontal-left + +views: + - !include lovelace/view-charts.yaml + - !include lovelace/view-more-charts.yaml + - !include lovelace/view-automatic_lights.yaml + - !include lovelace/view-devices.yaml + - !include lovelace/view-automations.yaml + - !include lovelace/view-automations_clint.yaml + - !include lovelace/view-automations_kristy.yaml + - !include lovelace/view-big_kids.yaml + - !include lovelace/view-little_kids.yaml + - !include lovelace/view-automations_group.yaml + - !include lovelace/view-scripts.yaml diff --git a/ui-details.yaml b/ui-details.yaml new file mode 100644 index 0000000..ef6a764 --- /dev/null +++ b/ui-details.yaml @@ -0,0 +1,15 @@ +title: Details +icon: mdi:magnify + +views: + - !include lovelace/details/view-power-breaker.yaml + - !include lovelace/details/view-mobile-app.yaml + - !include lovelace/details/view-chores.yaml + - !include lovelace/details/view-stock.yaml + - !include lovelace/details/view-hvac.yaml + - !include lovelace/details/view-watchman.yaml + - !include lovelace/details/view-batteries.yaml + - !include lovelace/details/view-weather.yaml + - !include lovelace/details/view-people.yaml + - !include lovelace/details/view-nws-alerts.yaml + - !include lovelace/details/view-openminds.yaml \ No newline at end of file diff --git a/ui-lovelace.yaml b/ui-lovelace.yaml new file mode 100644 index 0000000..bdad529 --- /dev/null +++ b/ui-lovelace.yaml @@ -0,0 +1,16 @@ +title: Daddy's House +icon: mdi:home + +views: + - !include lovelace/view-overview.yaml + - !include lovelace/view-ha-floorplan.yaml + - !include lovelace/view-floor-all.yaml + - !include lovelace/view-remotes.yaml + - !include lovelace/view-media.yaml + - !include lovelace/view-people.yaml + - !include lovelace/view-information.yaml + - !include lovelace/view-inputs.yaml +# - !include lovelace/view-plants.yaml + - !include lovelace/view-power.yaml +# - !include lovelace/view-power-usage.yaml +# - !include lovelace/view-tasks-all.yaml # This isn't really needed unless multiple people get multiple tasks on a regular-ish basis \ No newline at end of file diff --git a/ui-phone.yaml b/ui-phone.yaml new file mode 100644 index 0000000..6caa237 --- /dev/null +++ b/ui-phone.yaml @@ -0,0 +1,35 @@ +title: Home +icon: mdi:cellphone + +kiosk_mode: + mobile_settings: + hide_header: true + ignore_entity_settings: true +views: + - !include lovelace/phone/home.yaml + - !include lovelace/phone/nursery.yaml + - !include lovelace/phone/master-bedroom.yaml + - !include lovelace/phone/front-room.yaml + - !include lovelace/phone/kitchen.yaml + - !include lovelace/phone/dining-room.yaml + - !include lovelace/phone/master-bathroom.yaml + - !include lovelace/phone/entryway.yaml + - !include lovelace/phone/garage.yaml + - !include lovelace/phone/front-yard.yaml + - !include lovelace/phone/back-yard.yaml + - !include lovelace/phone/computer-area.yaml + - !include lovelace/phone/great-room.yaml + - !include lovelace/phone/blue-room.yaml + - !include lovelace/phone/mancave.yaml + - !include lovelace/phone/utility-room.yaml + - !include lovelace/phone/furnace-room.yaml + - !include lovelace/phone/lights.yaml + - !include lovelace/phone/media.yaml + - !include lovelace/phone/lyrics.yaml + - !include lovelace/phone/cctv.yaml + - !include lovelace/phone/plants.yaml + - !include lovelace/appliances/dishwasher.yaml + - !include lovelace/appliances/keurig.yaml + - !include lovelace/appliances/washing-machine.yaml + - !include lovelace/appliances/tumble-dryer.yaml + - !include lovelace/appliances/stove.yaml diff --git a/www/device_tracker.svg b/www/device_tracker.svg new file mode 100644 index 0000000..3401f11 --- /dev/null +++ b/www/device_tracker.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/www/floorplan/computer_area.svg b/www/floorplan/computer_area.svg new file mode 100644 index 0000000..fb3c3b8 --- /dev/null +++ b/www/floorplan/computer_area.svg @@ -0,0 +1,1515 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +--------- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + inkscape:label="light.front_porch_overhead" /> + + + + + + + + + + + + +--------- +--------- +--------- +--------- +--------- +--------- + + + + + + + + + + + + + + + + + diff --git a/www/floorplan/floorplan.css b/www/floorplan/floorplan.css new file mode 100644 index 0000000..3dba399 --- /dev/null +++ b/www/floorplan/floorplan.css @@ -0,0 +1,771 @@ +/* SVG shapes */ + +svg, +svg * { + vector-effect: non-scaling-stroke !important; + pointer-events: all !important; + background-color: var(--primary-background-color); + max-height: calc( 100vh - 50px); +} + + +/* Hover over */ + +.entity:hover { + stroke: #FFFFFF !important; + stroke-width: 1px !important; + stroke-opacity: 1 !important; +} + + +/* Bootstrap succsss */ + +.success-text { + fill: #3c763d !important; +} + +.success-background, +.success-text-background { + fill: #dff0d8 !important; + fill-opacity: 1 !important; + stroke: #d6e9c6 !important; + stroke-width: 1px !important; +} + + +/* Bootstrap info */ + +.info-text { + fill: #d4d4d4 !important; +} + +.awake { + fill: #949494 !important; +} + +.sleeping { + fill: #0e0e6e !important; +} + +.in-bed { + fill: #504c66 !important; +} + +.out-of-bed { + fill: #57565c !important; +} + +.room-empty { + /*fill: #5d5b5b !important;*/ + fill: #888888 !important; +} + +.room-occupied { + fill: #596170 !important; + /* fill: #5d5d6f !important;*/ +} + +.water-dry { + fill: #81D9a7 !important; + fill-opacity: 1 !important; +} + +.water-wet { + fill: #FF0000 !important; + fill-opacity: 1 !important; +} + +.door-closed { + /* fill: #77FF77 !important; */ + /* fill: #81c9a7 !important; */ + fill: #81D9a7 !important; + fill-opacity: 1 !important; + /* stroke: #82caa8 !important; + stroke-width: 1px !important; + animation-duration: 4s; + animation-name: rotateReset90; */ +} + +.door-open { + fill: #FF0000 !important; + fill-opacity: 1 !important; + stroke: #FFFF00 !important; + stroke-dasharray: 10, 4 !important; + stroke-width: 2px !important; + stroke-opacity: 0.8 !important; + /* animation-duration: 4s; + animation-name: rotate90; + animation-fill-mode: forwards; */ +} + +.appliance-off { + /* fill: #77FF77 !important; */ + /* fill: #81c9a7 !important; */ + fill: #81D9a7 !important; + fill-opacity: 1 !important; + /* stroke: #82caa8 !important; + stroke-width: 1px !important; + animation-duration: 4s; + animation-name: rotateReset90; */ +} + +.appliance-on { + fill: #ff8800 !important; + fill-opacity: 1 !important; + /* animation-duration: 4s; + animation-name: rotate90; + animation-fill-mode: forwards; */ +} + +.appliance-pending { + fill: #6b0000 !important; + fill-opacity: 1 !important; + /* animation-duration: 4s; + animation-name: rotate90; + animation-fill-mode: forwards; */ +} + +.window-closed { + /* fill: #77FF77 !important; */ + /* fill: #81c9a7 !important; */ + fill: #CCCCCC !important; + fill-opacity: 1 !important; + /* stroke: #82caa8 !important; + stroke-width: 1px !important; + animation-duration: 4s; + animation-name: rotateReset90; */ +} + +.window-open { + fill: #FF0000 !important; + fill-opacity: 1 !important; + stroke: #FFFF00 !important; + stroke-dasharray: 10, 4 !important; + stroke-width: 2px !important; + stroke-opacity: 0.8 !important; +} + +.window-unavailable { + fill: #FFFF00 !important; + fill-opacity: 1 !important; + stroke: #FF0000 !important; + stroke-dasharray: 10, 4 !important; + stroke-width: 2px !important; + stroke-opacity: 0.8 !important; +} + + +/* + .alarm-disarmed { + fill: #81D9a7 !important; + fill-opacity: 0.5 !important; + } + + .alarm-triggered { + fill: #FF0000 !important; + fill-opacity: 1 !important; + stroke: #FFFF00 !important; + } + + .alarm-armed_night { + fill: #FF8A0D; !important; + } + + .alarm-armed_away { + fill: #FFCC66; !important; + } + + .alarm-armed_home { + fill: #FF8A0D; !important; + } + + .alarm-armed_custom_bypass { + fill: #FFCC66; !important; + } + */ + +.closed-background, +.closed-text-background { + /* fill: #77FF77 !important; */ + fill: #81D9a7 !important; + fill-opacity: 1 !important; + /* stroke: #82caa8 !important; + stroke-width: 1px !important; */ +} + +.open-background, +.open-text-background { + fill: #FF0000 !important; + fill-opacity: 1 !important; + stroke: #FFFF00 !important; + stroke-dasharray: 10, 4 !important; + stroke-width: 2px !important; + stroke-opacity: 0.8 !important; +} + +.interior-closed-background, +.interior-closed-text-background { + fill: #81c9a7 !important; + fill-opacity: 1 !important; + /* stroke: #82caa8 !important; + stroke-width: 1px !important; */ +} + +.interior-open-background, +.interior-open-text-background { + fill: #5fd3eb !important; + fill-opacity: 1 !important; + stroke: #6fE3Fb !important; + stroke-dasharray: 4, 4 !important; + stroke-width: 1px !important; + stroke-opacity: 0.5 !important; +} + +.window-closed-background, +.window-closed-text-background { + fill: #83DFF3 !important; + fill-opacity: 1 !important; + /* stroke: #82caa8 !important; + stroke-width: 1px !important; */ +} + +.window-open-background, +.window-open-text-background { + fill: #FF0000 !important; + fill-opacity: 1 !important; + stroke: #FFFF00 !important; + stroke-dasharray: 10, 4 !important; + stroke-width: 2px !important; + stroke-opacity: 0.8 !important; +} + +.motion-background, +.motion-text-background { + fill: #81c9a7 !important; + /* fill-opacity: 1 !important; */ + /* stroke: #82caa8 !important; + stroke-width: 1px !important; */ +} + + +/* .info-background, .info-text-background { */ + +.info-background { + /* fill: #D2D0ED !important; */ + fill: #81c9a7 !important; + /* fill-opacity: 1 !important; */ + /* stroke: #82caa8 !important; + stroke-width: 1px !important; */ +} + + +/* Bootstrap warning */ + +.warning-text { + fill: #8a6d3b !important; +} + +.warning-background, +.warning-text-background { + fill: #FFFF00 !important; + fill-opacity: 1 !important; + stroke: #FF0000 !important; + stroke-width: 4px !important; + stroke-opacity: 0.5 !important; +} + +.motion-unavailable { + /* fill: #B9CEF7 !important; */ + fill: #6FAECE !important; + /* fill: #8270A2 !important; */ +} + + +/* Bootstrap danger */ + +.danger-text { + fill: #a94442 !important; +} + +.danger-background, +.danger-text-background { + fill: #f2dede !important; + fill-opacity: 1 !important; + stroke: #ebccd1 !important; + stroke-width: 1px !important; +} + + +/* Last motion entity */ + +.last-motion { + stroke: #808080 !important; + stroke-width: 1px !important; + stroke-opacity: 1 !important; +} + + +/* Alarm Panel */ + +.alarm-disarmed { + fill: #3c763d !important; +} + +.alarm-armed { + fill: #8a6d3b !important; +} + + +/* Camera */ + +.camera-idle { + /* fill: #B9CEF7 !important; */ + /* fill: #6FAECE !important; */ + fill: #8270A2 !important; +} + +.camera-unavailable { + fill: #B9CEF7 !important; + /* fill: #6FAECE !important; */ + /* fill: #8270A2 !important; */ +} + +.camera-streaming { + /* fill: #B9CEF7 !important; */ + fill: #6FAECE !important; + /* fill: #8270A2 !important; */ +} + + +/* Light */ + +.light-unavailable { + fill: #8270A2 !important; + stroke: #FFFFFF !important; + stroke-width: 1px !important; +} + +.light-off, +.light-off * { + fill: #4d4d3e !important; +} + +.light-on, +.light-on * { + fill: #FFF27F !important; + stroke: #FFF27F !important; + stroke-width: 7px !important; + stroke-opacity: 0.25 !important; +} + +.sun-on { + fill: #FFF27F !important; + stroke: #FFF27F !important; + stroke-width: 2px !important; + stroke-opacity: 0.25 !important; +} + +.light-strip-on { + fill: #FFF27F !important; + stroke: #FFF27F !important; + stroke-width: 3px !important; + stroke-opacity: 0.25 !important; +} + +.indicator-on { + fill: #FFE500 !important; + /* stroke: #FFE500 !important; + stroke-width: 20px !important; + stroke-opacity: 0.25 !important; */ +} + + +/* Doorbell */ + +.doorbell-off { + /* fill: #92C0AD !important; */ + fill: #4d4d3e !important; +} + +.doorbell-on { + fill: #FFE500 !important; +} + + +/* Temperature sensor */ + +.temp-very-low-background { + fill: #d9edf7 !important; + fill-opacity: 1 !important; +} + +.temp-below-average-background { + fill: #dcefe8 !important; + fill-opacity: 1 !important; +} + +.temp-average-background { + fill: #dff0d8 !important; + fill-opacity: 1 !important; +} + +.temp-very-high-background { + fill: #f2dede !important; + fill-opacity: 1 !important; +} + + +/* Media player */ + +.homehub-off { + fill: #515151 !important; +} + +.homehub-paused { + fill: #518151 !important; +} + +.homehub-on { + fill: #F1F1F1 !important; +} + +.squeezebox-off { + fill: #8270A2 !important; +} + +.squeezebox-idle { + fill: #BBBBBB !important; +} + +.squeezebox-paused { + /* fill: #B9C999 !important; */ + fill: #8da6c9 !important; +} + +.squeezebox-on { + /* fill: #2baaa6 !important; */ + /* fill: #E0E276 !important; */ + /* fill: #A7B349 !important; */ + /* fill: #03a9f4 !important; */ + fill: #40a2cf !important; +} + +.squeezebox-unknown { + fill: #A99999 !important; +} + + +/* People */ + +.car-away { + fill: #585858 !important; + visibility: hidden !important; +} + +.car-home { + fill: #014421 !important; +} + +.suv-away { + visibility: hidden !important; +} + +.suv-home { + fill: #4b4b4b !important; +} + +.tracker-away { + fill: #585858 !important; +} + +.tracker-travel { + fill: #88a9b8 !important; +} + +.tracker-work { + fill: #9963a6 !important; +} + +.tracker-other { + fill: #6993a6 !important; +} + +.tracker-home { + /* fill: #2baaa6 !important; */ + /* fill: #D0D266 !important; */ + /* fill: #77FF77 !important; */ + fill: #40a2cf !important; +} + +.hvac-heating { + fill: #5e0202 +} + +.hvac-fan { + fill: #6d6d02 +} + +.hvac-cooling { + fill: #010194 +} + +.hvac-idle { + fill: #8270A2 +} + +.fridge-low { + fill: #7777FF !important; + /* stroke-width: 2px !important; */ + /* stroke-opacity: 1 !important; */ +} + +.fridge-medium { + fill: #81D9a7 !important; + /* stroke-width: 2px !important; + stroke-opacity: 1 !important; */ +} + +.fridge-high { + fill: #ff8800 !important; + /* stroke-width: 2px !important; + stroke-opacity: 1 !important; */ +} + +.temp-freeze { + fill: #FFFFFF !important; + text-align: right; +} + +.temp-low { + fill: #6969ff !important; + text-align: right; +} + +.temp-medium { + fill: #77FF77 !important; + text-align: right; +} + +.temp-high { + fill: #FF7700 !important; + text-align: right; +} + +.temp-hot { + fill: #FF0000 !important; + text-align: right; +} + +.temp-unknown { + fill: #777777 !important; +} + +.health-critical { + fill: #FF0000 !important; +} + +.health-warning { + fill: #ffa500 !important; +} + +.health-info { + fill: #ffff00 !important; +} + +.health-good { + fill: #77FF77 !important; +} + +.health-unknown { + fill: #0000FF !important; +} + +.humid-low { + fill: #300330 !important; +} + +.humid-med-low { + fill: #cfb837 !important; +} + +.humid-medium { + fill: #77FF77 !important; +} + +.humid-med-high { + fill: #C8AB37 !important; +} + +.humid-high { + fill: #FF0000 !important; +} + +.light-low { + /* fill: #000083 !important; */ + fill: #1D2375 !important; +} + +.light-medium-low { + fill: #A7B349 !important; +} + +.light-medium { + fill: #e4ff24 !important; +} + +.light-high { + fill: #FFFFFF !important; +} + +.tv-on { + /* fill: #DFDFDF !important; */ + fill: #B0B0D0 !important; +} + +.tv-off { + fill: #505050 !important; +} + +.bin-today { + fill: #FF0000 !important; +} + +.bin-tomorrow { + fill: #FFFF00 !important; +} + +.bin-future { + fill: #00FF00 !important; +} + +.bin-false { + fill: #000000 !important; +} + +.bags-five { + fill: #00FF00 !important; +} + +.bags-four { + fill: #33CC00 !important; +} + +.bags-three { + fill: #669900 !important; +} + +.bags-two { + fill: #996600 !important; +} + +.bags-one { + fill: #CC3300 !important; +} + +.bags-zero { + fill: #FF0000 !important; +} + +.visible-entity { + display: initial !important; +} + +.hidden-entity { + display: none !important; +} + +.hidden { + visibility: hidden !important; +} + +.transparent { + fill-opacity: 0.5 !important; +} + +.visible { + visibility: visible !important; +} + + +/* Spinning fan */ + +.spinning-fan { + animation-name: fan-spin; + animation-duration: 5s; + animation-iteration-count: infinite; + animation-timing-function: linear; + transform-origin: center; + transform-box: fill-box; +} + +.spinning-fan-low { + animation-name: fan-spin; + animation-duration: 5s; + animation-iteration-count: infinite; + animation-timing-function: linear; + transform-origin: center; + transform-box: fill-box; +} + +.spinning-fan-med { + animation-name: fan-spin; + animation-duration: 3s; + animation-iteration-count: infinite; + animation-timing-function: linear; + transform-origin: center; + transform-box: fill-box; +} + +.spinning-fan-high { + animation-name: fan-spin; + animation-duration: 1s; + animation-iteration-count: infinite; + animation-timing-function: linear; + transform-origin: center; + transform-box: fill-box; +} + +@keyframes fan-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +.cam14-preset-1 { + /* transform-origin: 932.77301, 516.55847; */ + transform: rotate(-162.13251deg); + /* transform: rotate(-162.13251, 932.77301, 516.55847); */ +} + +.cam14-preset-2 { + /* transform: rotate(-52.13251, 937.18866, 521.48235); */ + transform: rotate(-52.13251deg); +} + +.cam14-preset-3 { + /* transform: rotate(12.86749, 911.65468, 493.00954); */ + transform: rotate(12.86749deg); +} + +.cam14-preset-4 { + /* transform: rotate(57.86749, 928.17232, 511.42827); */ + transform: rotate(57.86749deg); +} + +.cam14-preset-5 { + /* transform: rotate(-127.13251, 933.56844, 517.44545); */ + transform: rotate(-127.13251deg); +} + +.cam14-preset-6 { + /* transform: rotate(-107.13251, 934.13244, 518.07436); */ + transform: rotate(-107.13251deg); +} + +.cam14-preset-7 { + /* transform: rotate(-12.13251, 954.42304, 540.7003); */ + transform: rotate(-12.13251deg); +} \ No newline at end of file diff --git a/www/floorplan/floorplan_panel copy.css b/www/floorplan/floorplan_panel copy.css new file mode 100644 index 0000000..1e88df5 --- /dev/null +++ b/www/floorplan/floorplan_panel copy.css @@ -0,0 +1,86 @@ +/* SVG size */ + +#floorplan { + padding: 10px; +} + +#floorplan > svg { + min-width: 100%; +} + +/* SVG elements */ + +svg * { + vector-effect: non-scaling-stroke !important; +} + +/* Hover over */ + +.floorplan-shape:hover, +g.floorplan-hover > :not(text):hover, +g.floorplan-click > :not(text):hover, +g.floorplan-long-click > :not(text):hover, +:not(text).floorplan-hover:hover, +:not(text).floorplan-click:hover, +:not(text).floorplan-long-click:hover { + stroke: #03a9f4 !important; + stroke-width: 1px !important; + stroke-opacity: 1 !important; +} + +/* Animation */ + +.spinning { + animation-name: spin; + animation-duration: 5s; + animation-iteration-count: infinite; + animation-timing-function: linear; + transform-origin: 50% 50%; + transform-box: fill-box; +} + +@keyframes spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +/* Binary sensors */ + +.binary-sensor-on { + fill: #f9d27c !important; +} + +.binary-sensor-off { + fill: #7cb1f9 !important; + transition: fill 5s ease; +} + +/* Lights */ + +.light-on { + fill: #f9d27c !important; +} + +.light-off { + fill: #7cb1f9 !important; + transition: fill 5s ease; +} + +/* Buttons */ + +.button-on rect { + fill: #1aba92 !important; +} + +.button-off rect { + fill: #d32f2f !important; +} + +.button-on tspan, +.button-off tspan { + fill: white !important; +} diff --git a/www/floorplan/floorplan_panel.css b/www/floorplan/floorplan_panel.css new file mode 100644 index 0000000..f46d64a --- /dev/null +++ b/www/floorplan/floorplan_panel.css @@ -0,0 +1,121 @@ +/* SVG size */ + +#floorplan { + padding: 10px; +} + +#floorplan > svg { + min-width: 100%; +} + +/* SVG elements */ + +svg * { + vector-effect: non-scaling-stroke !important; +} + +/* Hover over */ + +.floorplan-shape:hover, +g.floorplan-hover > :not(text):hover, +g.floorplan-click > :not(text):hover, +g.floorplan-long-click > :not(text):hover, +:not(text).floorplan-hover:hover, +:not(text).floorplan-click:hover, +:not(text).floorplan-long-click:hover { + stroke: #03a9f4 !important; + stroke-width: 1px !important; + stroke-opacity: 1 !important; +} + +/* Animation */ + +.spinning { + animation-name: spin; + animation-duration: 5s; + animation-iteration-count: infinite; + animation-timing-function: linear; + transform-origin: 50% 50%; + transform-box: fill-box; +} + +@keyframes spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +/* Binary sensors */ + +.binary-sensor-on { + fill: #f9d27c !important; +} + +.binary-sensor-off { + fill: #7cb1f9 !important; + transition: fill 5s ease; +} + +/* Lights */ + +.light-on { + fill: #f9d27c !important; +} + +.light-off { + fill: #7cb1f9 !important; + transition: fill 5s ease; +} + +/* Buttons */ + +.button-on rect { + fill: #1aba92 !important; +} + +.button-off rect { + fill: #d32f2f !important; +} + +.button-on tspan, +.button-off tspan { + fill: white !important; +} + +.cam14-preset-1 { + transform: rotate(-162.13251,932.77301,516.55847); + transition: fill 5s ease; +} + +.cam14-preset-2 { + transform: rotate(-52.13251,937.18866,521.48235); + transition: fill 5s ease; +} + +.cam14-preset-3 { + transform: rotate(12.86749,911.65468,493.00954); + transition: fill 5s ease; +} + +.cam14-preset-4 { + transform: rotate(57.86749,928.17232,511.42827); + transition: fill 5s ease; +} + +.cam14-preset-5 { + transform: rotate(-127.13251, 933.56844, 517.44545); + transition: fill 5s ease; +} + +.cam14-preset-6 { + transform: rotate(-107.13251,934.13244,518.07436); + transition: none; +} + +.cam14-preset-7 { + transform: rotate(-12.13251,954.42304,540.7003); + transition: none; +} \ No newline at end of file diff --git a/www/floorplan/fullsized_floorplan.svg b/www/floorplan/fullsized_floorplan.svg new file mode 100644 index 0000000..1907cd6 --- /dev/null +++ b/www/floorplan/fullsized_floorplan.svg @@ -0,0 +1,5933 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + Landing is 81x48 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Landing is 81x48 + + + Landing is 81x48 + + + + + + + Landing is 81x48 + + + + + + + + + + + + + + + + + + + + + + + + Landing is 81x48 + + + + + + + + + Landing is 81x48 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +999.9 °F + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +0 +--------- +--------- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +----------- + + + +----------- +----------- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + inkscape:label="light.front_porch_overhead" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +--------- +--------- +--------- +--------- +--------- +--------- +-- +-- +--------- +--------- +--------- +--------- +--------- +--------- +--------- +--------- +--------- +--------- +--------- +--------- +--------- +--------- +--------- +--------- +--------- +--------- +--------- +--------- +--------- +--------- +--------- +--------- +--------- +--------- +--------- +--------- +--------- +--------- +--------- +--------- +--------- +--------- +--------- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +--------- +--------- +--------- +--------- +--------- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +--------- +--------- +--------- +--------- +--------- + + + + + + + + + + + + + diff --git a/www/floorplan/ha-floorplan.html b/www/floorplan/ha-floorplan.html new file mode 100644 index 0000000..3b6bc97 --- /dev/null +++ b/www/floorplan/ha-floorplan.html @@ -0,0 +1,196 @@ + + + + + + + + + + diff --git a/www/floorplan/sensor_templates.svg b/www/floorplan/sensor_templates.svg new file mode 100644 index 0000000..4ea5365 --- /dev/null +++ b/www/floorplan/sensor_templates.svg @@ -0,0 +1,442 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + --------- + + + --------- + + + + + + + + + + + + + + + + + + + --------- + + + + + + + + --------- + + + --------- + + + + + + + + + + + + + + --------- + + + + + + + + + + + + + + + + + + + --------- + + + diff --git a/www/font.css b/www/font.css new file mode 100644 index 0000000..0ea451c --- /dev/null +++ b/www/font.css @@ -0,0 +1,222 @@ +@font-face { + font-family: sf display; + font-weight: 900; + src: url(/local/fonts/SF-UI-Display-Black.otf) +} + +@font-face { + font-family: sf display; + font-weight: 700; + src: url(/local/fonts/SF-UI-Display-Bold.otf) +} + +@font-face { + font-family: sf display; + font-weight: 800; + src: url(/local/fonts/SF-UI-Display-Heavy.otf) +} + +@font-face { + font-family: sf display; + font-weight: 200; + src: url(/local/fonts/SF-UI-Display-Light.otf) +} + +@font-face { + font-family: sf display; + font-weight: 500; + src: url(/local/fonts/SF-UI-Display-Medium.otf) +} + +@font-face { + font-family: sf display; + font-weight: 400; + src: url(/local/fonts/SF-UI-Display-Regular.otf) +} + +@font-face { + font-family: sf display; + font-weight: 600; + src: url(/local/fonts/SF-UI-Display-Semibold.otf) +} + +@font-face { + font-family: sf display; + font-weight: 300; + src: url(/local/fonts/SF-UI-Display-Thin.otf) +} + +@font-face { + font-family: sf display; + font-weight: 100; + src: url(/local/fonts/SF-UI-Display-Ultralight.otf) +} + +@font-face { + font-family: sf text; + font-weight: 700; + src: url(/local/fonts/SF-UI-Text-Bold.otf) +} + +@font-face { + font-family: sf text; + font-weight: 700; + font-style: italic; + src: url(/local/fonts/SF-UI-Text-BoldItalic.otf) +} + +@font-face { + font-family: sf text; + font-weight: 800; + src: url(/local/fonts/SF-UI-Text-Heavy.otf) +} + +@font-face { + font-family: sf text; + font-weight: 800; + font-style: italic; + src: url(/local/fonts/SF-UI-Text-HeavyItalic.otf) +} + +@font-face { + font-family: sf text; + font-weight: 200; + src: url(/local/fonts/SF-UI-Text-Light.otf) +} + +@font-face { + font-family: sf text; + font-weight: 200; + font-style: italic; + src: url(/local/fonts/SF-UI-Text-LightItalic.otf) +} + +@font-face { + font-family: sf text; + font-weight: 500; + src: url(/local/fonts/SF-UI-Text-Medium.otf) +} + +@font-face { + font-family: sf text; + font-weight: 500; + font-style: italic; + src: url(/local/fonts/SF-UI-Text-MediumItalic.otf) +} + +@font-face { + font-family: sf text; + font-weight: 400; + src: url(/local/fonts/SF-UI-Text-Regular.otf) +} + +@font-face { + font-family: sf text; + font-weight: 400; + font-style: italic; + src: url(/local/fonts/SF-UI-Text-RegularItalic.otf) +} + +@font-face { + font-family: sf text; + font-weight: 600; + src: url(/local/fonts/SF-UI-Text-Semibold.otf) +} + +@font-face { + font-family: sf text; + font-weight: 600; + font-style: italic; + src: url(/local/fonts/SF-UI-Text-SemiboldItalic.otf) +} + +@font-face { + font-family: sf text; + font-weight: 100; + src: url(/local/fonts/SF-UI-Text-Ultrathin.otf) +} + +@font-face { + font-family: sf text; + font-weight: 100; + font-style: italic; + src: url(/local/fonts/SF-UI-Text-UltrathinItalic.otf) +} + +@font-face { + font-family: sf mono; + font-weight: 700; + src: url(/local/fonts/SFMono-Bold.otf) +} + +@font-face { + font-family: sf mono; + font-weight: 700; + font-style: italic; + src: url(/local/fonts/SFMono-BoldItalic.otf) +} + +@font-face { + font-family: sf mono; + font-weight: 800; + src: url(/local/fonts/SFMono-Heavy.otf) +} + +@font-face { + font-family: sf mono; + font-weight: 800; + font-style: italic; + src: url(/local/fonts/SFMono-HeavyItalic.otf) +} + +@font-face { + font-family: sf mono; + font-weight: 200; + src: url(/local/fonts/SFMono-Light.otf) +} + +@font-face { + font-family: sf mono; + font-weight: 200; + font-style: italic; + src: url(/local/fonts/SFMono-LightItalic.otf) +} + +@font-face { + font-family: sf mono; + font-weight: 500; + src: url(/local/fonts/SFMono-Medium.otf) +} + +@font-face { + font-family: sf mono; + font-weight: 500; + font-style: italic; + src: url(/local/fonts/SFMono-MediumItalic.otf) +} + +@font-face { + font-family: sf mono; + font-weight: 400; + src: url(/local/fonts/SFMono-Regular.otf) +} + +@font-face { + font-family: sf mono; + font-weight: 400; + font-style: italic; + src: url(/local/fonts/SFMono-RegularItalic.otf) +} + +@font-face { + font-family: sf mono; + font-weight: 600; + src: url(/local/fonts/SFMono-Semibold.otf) +} + +@font-face { + font-family: sf mono; + font-weight: 600; + font-style: italic; + src: url(/local/fonts/SFMono-SemiboldItalic.otf) +} diff --git a/www/img/animations.gif b/www/img/animations.gif new file mode 100644 index 0000000..3bcb9fc Binary files /dev/null and b/www/img/animations.gif differ diff --git a/www/img/custom_icons.png b/www/img/custom_icons.png new file mode 100644 index 0000000..399caea Binary files /dev/null and b/www/img/custom_icons.png differ diff --git a/www/img/info_2.png b/www/img/info_2.png new file mode 100644 index 0000000..8011ee7 Binary files /dev/null and b/www/img/info_2.png differ diff --git a/www/img/info_light_2.png b/www/img/info_light_2.png new file mode 100644 index 0000000..a7a65c1 Binary files /dev/null and b/www/img/info_light_2.png differ diff --git a/www/img/light.gif b/www/img/light.gif new file mode 100644 index 0000000..89d6550 Binary files /dev/null and b/www/img/light.gif differ diff --git a/www/img/media.gif b/www/img/media.gif new file mode 100644 index 0000000..763da27 Binary files /dev/null and b/www/img/media.gif differ diff --git a/www/img/misc_2.png b/www/img/misc_2.png new file mode 100644 index 0000000..43d242c Binary files /dev/null and b/www/img/misc_2.png differ diff --git a/www/img/screenshot.png b/www/img/screenshot.png new file mode 100644 index 0000000..afc15be Binary files /dev/null and b/www/img/screenshot.png differ diff --git a/www/img/tracker_updates.png b/www/img/tracker_updates.png new file mode 100644 index 0000000..bd35d14 Binary files /dev/null and b/www/img/tracker_updates.png differ diff --git a/www/img/vacuum_2.png b/www/img/vacuum_2.png new file mode 100644 index 0000000..ad8ad68 Binary files /dev/null and b/www/img/vacuum_2.png differ diff --git a/www/sound/off.m4a b/www/sound/off.m4a new file mode 100644 index 0000000..31e6035 Binary files /dev/null and b/www/sound/off.m4a differ diff --git a/www/sound/on.m4a b/www/sound/on.m4a new file mode 100644 index 0000000..ad6837b Binary files /dev/null and b/www/sound/on.m4a differ diff --git a/www/sound/popup.m4a b/www/sound/popup.m4a new file mode 100644 index 0000000..9a8e971 Binary files /dev/null and b/www/sound/popup.m4a differ diff --git a/www/sound/timer.mp3 b/www/sound/timer.mp3 new file mode 100644 index 0000000..d33e70e Binary files /dev/null and b/www/sound/timer.mp3 differ