From c5e740a89582ea483352b544327fed77cf7dd971 Mon Sep 17 00:00:00 2001 From: CeeWeasel Date: Sat, 9 Aug 2025 23:34:29 -0400 Subject: [PATCH] renames, fixes , and other fun schtuff --- .gitignore | 2 +- .../people/Bridget/bridget_in_bed.yaml | 6 +- automations/people/Ebin/ebin_in_bed.yaml | 4 +- automations/people/kids_awake.yaml | 22 +- .../baby_monitor_on_front_room_hub.yaml | 2 +- .../rooms/front_room/baby_monitor_on_tv.yaml | 2 +- .../rooms/nursery/nursery_into_bed.yaml | 2 +- .../rooms/nursery/nursery_not_occupied.yaml | 2 +- .../rooms/nursery/nursery_out_of_bed.yaml | 2 +- automations/things/automatic_fan_speeds.yaml | 4 +- .../aqara-magic-cube-zha-51-actions.yaml | 544 --------- .../Zigbee2MQTT - Xiaomi Cube Controller.yaml | 787 ------------- ...Xiaomi_Cube_Controller_MQTT_Triggered.yaml | 1040 +++++++++++++++++ .../automation/rvaidya/aqara_magic_cube.yaml | 755 ------------ .../rooms/nursery_occupied.yaml | 2 +- components/binary_sensors/template.yaml | 26 +- .../input_selects/people/podein_kids.yaml | 1 + .../input_selects/people/weaver_kids.yaml | 1 + .../packages/automatic_sprinkler_system.yaml | 18 +- components/packages/clever_announcements.yaml | 50 +- components/packages/databases.yaml | 1 - .../packages/plant_sensor_batteries.yaml | 3 +- components/packages/plants.yaml | 19 +- .../rtl_433_devices/back_yard_thermostat.yaml | 44 +- .../chevrolet_traverse_lt_awd.yaml | 12 + .../rtl_433_devices/daisy_soil_sensor.yaml | 42 + .../rtl_433_devices/deck_thermostat.yaml | 44 +- ...mostat.yaml => front_yard_thermostat.yaml} | 110 +- ...a_moisture.yaml => hasta_soil_sensor.yaml} | 84 +- .../kitchen_freezer_thermostat.yaml | 36 +- .../kitchen_fridge_thermostat.yaml | 36 +- .../outdoor_rain_gauge_sensor.yaml | 73 -- .../rtl_433_devices/podein_devices.yaml | 11 + .../packages/rtl_433_devices/rain_gauge.yaml | 55 + components/packages/rtl_433_devices/tpms.yaml | 112 ++ .../packages/temperature_management.yaml | 2 +- customizations/entities/beds.yaml | 2 +- customizations/entities/plants.yaml | 8 +- esphome/bed-presence-2d14a4.yaml | 1 + esphome/bed-presence-c175a4.yaml | 1 + esphome/black-bed.yaml | 2 +- esphome/common/bme680_advanced.yaml | 53 + esphome/common/bme680_bsec.yaml | 106 ++ esphome/common/bme680_multiple.yaml | 61 + esphome/hvac-multisensor.yaml | 10 +- groups.yaml | 5 +- lovelace/cameras/view-camera-08.yaml | 6 +- lovelace/details/view-batteries.yaml | 4 +- lovelace/details/view-hvac.yaml | 122 +- lovelace/phone/back-yard.yaml | 6 +- lovelace/phone/blue-room.yaml | 6 +- lovelace/phone/computer-area.yaml | 6 +- lovelace/phone/dining-room.yaml | 6 +- lovelace/phone/entryway.yaml | 6 +- lovelace/phone/front-room.yaml | 6 +- lovelace/phone/front-yard.yaml | 30 +- lovelace/phone/furnace-room.yaml | 6 +- lovelace/phone/garage.yaml | 6 +- lovelace/phone/great-room.yaml | 6 +- lovelace/phone/home.yaml | 97 +- lovelace/phone/kitchen.yaml | 10 +- lovelace/phone/mancave.yaml | 6 +- lovelace/phone/master-bathroom.yaml | 6 +- lovelace/phone/master-bedroom.yaml | 6 +- lovelace/phone/nursery.yaml | 38 +- lovelace/phone/plants.yaml | 27 +- lovelace/phone/utility-room.yaml | 6 +- ...h51_0ce593.yaml => daisy_soil_sensor.yaml} | 3 +- lovelace/plant-cards/hasta_soil_sensor.yaml | 4 + lovelace/room_cards/back_yard.yaml | 4 +- lovelace/room_cards/front_yard.yaml | 4 +- lovelace/view-charts.yaml | 2 +- lovelace/view-devices.yaml | 1 + lovelace/view-ha-floorplan.yaml | 15 +- lovelace/view-more-charts.yaml | 26 +- lovelace/view-overview.yaml | 2 +- lovelace/view-people.yaml | 4 +- www/floorplan/fullsized_floorplan.svg | 68 +- 78 files changed, 2050 insertions(+), 2700 deletions(-) delete mode 100644 blueprints/automation/Mikkelmoeller/aqara-magic-cube-zha-51-actions.yaml delete mode 100644 blueprints/automation/SirGoodenough/Zigbee2MQTT - Xiaomi Cube Controller.yaml create mode 100644 blueprints/automation/SirGoodenough/Zigbee2MQTT-Xiaomi_Cube_Controller_MQTT_Triggered.yaml delete mode 100644 blueprints/automation/rvaidya/aqara_magic_cube.yaml create mode 100644 components/packages/rtl_433_devices/chevrolet_traverse_lt_awd.yaml create mode 100644 components/packages/rtl_433_devices/daisy_soil_sensor.yaml rename components/packages/rtl_433_devices/{outdoor_thermostat.yaml => front_yard_thermostat.yaml} (54%) rename components/packages/rtl_433_devices/{hasta_moisture.yaml => hasta_soil_sensor.yaml} (53%) delete mode 100644 components/packages/rtl_433_devices/outdoor_rain_gauge_sensor.yaml create mode 100644 components/packages/rtl_433_devices/podein_devices.yaml create mode 100644 components/packages/rtl_433_devices/rain_gauge.yaml create mode 100644 components/packages/rtl_433_devices/tpms.yaml create mode 100644 esphome/common/bme680_advanced.yaml create mode 100644 esphome/common/bme680_bsec.yaml create mode 100644 esphome/common/bme680_multiple.yaml rename lovelace/plant-cards/{fineoffset_wh51_0ce593.yaml => daisy_soil_sensor.yaml} (55%) create mode 100644 lovelace/plant-cards/hasta_soil_sensor.yaml diff --git a/.gitignore b/.gitignore index 52d47a2..a254933 100644 --- a/.gitignore +++ b/.gitignore @@ -38,7 +38,7 @@ media/ custom_components/ custom_logs/ snapshots/ -rtl_433*/ +rtl_433/ tts/ /lovelace/private model_cache/ diff --git a/automations/people/Bridget/bridget_in_bed.yaml b/automations/people/Bridget/bridget_in_bed.yaml index 78a2dc4..2a3c6b8 100644 --- a/automations/people/Bridget/bridget_in_bed.yaml +++ b/automations/people/Bridget/bridget_in_bed.yaml @@ -5,7 +5,7 @@ mode: restart trigger: - platform: state - entity_id: input_boolean.white_bed_occupied + entity_id: binary_sensor.white_bed_occupied to: "on" for: "00:10:00" - platform: state @@ -22,14 +22,14 @@ condition: state: "on" - condition: state entity_id: - - input_boolean.white_bed_occupied + - 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: input_boolean.white_bed_occupied + # entity_id: binary_sensor.white_bed_occupied # state: 'on' # for: # minutes: 5 diff --git a/automations/people/Ebin/ebin_in_bed.yaml b/automations/people/Ebin/ebin_in_bed.yaml index 02d712d..be54d2f 100644 --- a/automations/people/Ebin/ebin_in_bed.yaml +++ b/automations/people/Ebin/ebin_in_bed.yaml @@ -4,7 +4,7 @@ mode: restart trigger: - platform: state - entity_id: input_boolean.white_bed_occupied + entity_id: binary_sensor.white_bed_occupied to: "on" for: "00:05:00" - platform: state @@ -31,7 +31,7 @@ condition: for: minutes: 5 - condition: state - entity_id: input_boolean.white_bed_occupied + entity_id: binary_sensor.white_bed_occupied state: "on" for: minutes: 5 diff --git a/automations/people/kids_awake.yaml b/automations/people/kids_awake.yaml index 16b2c28..65cd77b 100644 --- a/automations/people/kids_awake.yaml +++ b/automations/people/kids_awake.yaml @@ -16,7 +16,7 @@ trigger: - platform: state entity_id: - binary_sensor.black_bed_occupied - - input_boolean.white_bed_occupied + - binary_sensor.white_bed_occupied to: "off" for: "00:05:00" @@ -67,10 +67,10 @@ condition: - condition: or conditions: - condition: state - entity_id: input_boolean.white_bed_occupied + entity_id: binary_sensor.white_bed_occupied state: "off" - condition: state - entity_id: input_boolean.white_bed_occupied + entity_id: binary_sensor.white_bed_occupied state: "unavailable" - condition: or conditions: @@ -96,10 +96,10 @@ condition: - condition: or conditions: - condition: state - entity_id: input_boolean.white_bed_occupied + entity_id: binary_sensor.white_bed_occupied state: "off" - condition: state - entity_id: input_boolean.white_bed_occupied + entity_id: binary_sensor.white_bed_occupied state: "unavailable" action: - service: input_boolean.turn_off @@ -140,10 +140,10 @@ action: - condition: or conditions: - condition: state - entity_id: input_boolean.white_bed_occupied + entity_id: binary_sensor.white_bed_occupied state: "off" - condition: state - entity_id: input_boolean.white_bed_occupied + entity_id: binary_sensor.white_bed_occupied state: "unavailable" sequence: - service: input_boolean.turn_off @@ -170,10 +170,10 @@ action: - condition: or conditions: - condition: state - entity_id: input_boolean.white_bed_occupied + entity_id: binary_sensor.white_bed_occupied state: "off" - condition: state - entity_id: input_boolean.white_bed_occupied + entity_id: binary_sensor.white_bed_occupied state: "unavailable" sequence: - service: input_boolean.turn_off @@ -194,10 +194,10 @@ action: - condition: or conditions: - condition: state - entity_id: input_boolean.white_bed_occupied + entity_id: binary_sensor.white_bed_occupied state: "off" - condition: state - entity_id: input_boolean.white_bed_occupied + entity_id: binary_sensor.white_bed_occupied state: "unavailable" - condition: not conditions: 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 index 05ba735..3d7620f 100644 --- a/automations/rooms/front_room/baby_monitor_on_front_room_hub.yaml +++ b/automations/rooms/front_room/baby_monitor_on_front_room_hub.yaml @@ -8,7 +8,7 @@ trigger: for: "00:00:03" - platform: state - entity_id: input_boolean.white_bed_occupied + entity_id: binary_sensor.white_bed_occupied to: "off" for: "00:00:03" diff --git a/automations/rooms/front_room/baby_monitor_on_tv.yaml b/automations/rooms/front_room/baby_monitor_on_tv.yaml index d2bd2bd..575a37d 100644 --- a/automations/rooms/front_room/baby_monitor_on_tv.yaml +++ b/automations/rooms/front_room/baby_monitor_on_tv.yaml @@ -7,7 +7,7 @@ trigger: to: "off" for: "00:00:03" - platform: state - entity_id: input_boolean.white_bed_occupied + entity_id: binary_sensor.white_bed_occupied to: "off" for: "00:00:03" diff --git a/automations/rooms/nursery/nursery_into_bed.yaml b/automations/rooms/nursery/nursery_into_bed.yaml index ff7d549..3ddc8b4 100644 --- a/automations/rooms/nursery/nursery_into_bed.yaml +++ b/automations/rooms/nursery/nursery_into_bed.yaml @@ -7,7 +7,7 @@ trigger: to: "on" for: "00:00:30" - platform: state - entity_id: input_boolean.white_bed_occupied + entity_id: binary_sensor.white_bed_occupied to: "on" for: "00:00:30" diff --git a/automations/rooms/nursery/nursery_not_occupied.yaml b/automations/rooms/nursery/nursery_not_occupied.yaml index f470107..a7df309 100644 --- a/automations/rooms/nursery/nursery_not_occupied.yaml +++ b/automations/rooms/nursery/nursery_not_occupied.yaml @@ -24,7 +24,7 @@ condition: state: "off" - condition: state entity_id: - - input_boolean.white_bed_occupied + - binary_sensor.white_bed_occupied - binary_sensor.black_bed_occupied state: - "off" diff --git a/automations/rooms/nursery/nursery_out_of_bed.yaml b/automations/rooms/nursery/nursery_out_of_bed.yaml index e321477..cab4562 100644 --- a/automations/rooms/nursery/nursery_out_of_bed.yaml +++ b/automations/rooms/nursery/nursery_out_of_bed.yaml @@ -11,7 +11,7 @@ trigger: to: "off" for: "00:00:05" - trigger: state - entity_id: input_boolean.white_bed_occupied + entity_id: binary_sensor.white_bed_occupied from: "on" to: "off" for: "00:00:05" diff --git a/automations/things/automatic_fan_speeds.yaml b/automations/things/automatic_fan_speeds.yaml index 8a0bfe8..408c960 100644 --- a/automations/things/automatic_fan_speeds.yaml +++ b/automations/things/automatic_fan_speeds.yaml @@ -69,7 +69,7 @@ triggers: condition: - alias: "Only turn the fans on if it's warm enough outside" condition: template - value_template: "{{ (states('sensor.lacrosse_tx141thbv2_0_temperature') | float(default=0) > 60.0) or is_state('group.ceiling_fans','on') }}" + value_template: "{{ (states('sensor.front_yard_thermostat_temperature') | float(default=0) > 60.0) or is_state('group.ceiling_fans','on') }}" action: - alias: "Calculate fan speeds" @@ -82,7 +82,7 @@ action: # name: Automatic Fan Speeds # entity_id: automation.automatic_fan_speeds # message: > - # Outdoor Air Temp: {{states('sensor.lacrosse_tx141thbv2_0_temperature') | float(default=0)}} + # Outdoor Air Temp: {{states('sensor.front_yard_thermostat_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)}} diff --git a/blueprints/automation/Mikkelmoeller/aqara-magic-cube-zha-51-actions.yaml b/blueprints/automation/Mikkelmoeller/aqara-magic-cube-zha-51-actions.yaml deleted file mode 100644 index 3e24112..0000000 --- a/blueprints/automation/Mikkelmoeller/aqara-magic-cube-zha-51-actions.yaml +++ /dev/null @@ -1,544 +0,0 @@ -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 deleted file mode 100644 index e69b650..0000000 --- a/blueprints/automation/SirGoodenough/Zigbee2MQTT - Xiaomi Cube Controller.yaml +++ /dev/null @@ -1,787 +0,0 @@ -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/SirGoodenough/Zigbee2MQTT-Xiaomi_Cube_Controller_MQTT_Triggered.yaml b/blueprints/automation/SirGoodenough/Zigbee2MQTT-Xiaomi_Cube_Controller_MQTT_Triggered.yaml new file mode 100644 index 0000000..585735e --- /dev/null +++ b/blueprints/automation/SirGoodenough/Zigbee2MQTT-Xiaomi_Cube_Controller_MQTT_Triggered.yaml @@ -0,0 +1,1040 @@ +blueprint: + name: Aqara Magic Cube Zigbee2MQTT MQTT Triggered - 2024-06-02 + author: SirGoodenough + 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### + \U0001F352 There is a set of 6 event functions that will trigger on specific actions + on *ANY* side that are listed as **Group 2 actions \U0001F352**.\n\n### \U0001F350 + There is a set of 30 event functions that will trigger on cube flips to & from + specific sides that are listed as **Group 3 actions \U0001F350**.\n\n### \U0001F355 + There are 2 actions (shake and drop) that only occur once and are OK to be combined + with any other group. Listed as **Group 4 sections \U0001F355**.\n\nPlease be + aware that ALL actions **except** the **Group 4 actions \U0001F355** 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 / \U0001F352* events.\nIf you want more than a few events, + you should select actions in **Group 1 / \U0001F34E OR Group 3 / \U0001F350**.\n**Group + 4 actions \U0001F355** will not affect others.\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 MQTT Triggered.md](https://github.com/SirGoodenough/HA_Blueprints/blob/master/Automations/Zigbee2MQTT%20-%20Xiaomi%20Cube%20Controller%20MQTT%20Triggered.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\n[Community link for + this blueprint](https://community.home-assistant.io/t/zigbee2mqtt-xiaomi-cube-controller/393203)\n\n## + \U0001F5FFNotice\U0001F46E\U0001F3FF‍♂️:\n* Copies of the original Blueprint that + were converted via the 'Take Control' feature or other means are officially not + supported by me.\n\n* I may or may not be able to support you when you have a + problem after you make changes to my code, as some of the code is no longer mine.\n\n* + I & my license also require attribution as a link back to the original should + you use this code in your own creation.\n\n* [Here is a link to my license & the + original github post](https://github.com/SirGoodenough/HA_Blueprints?tab=License-1-ov-file) + expected to be followed & referenced as attribution should you use this code elsewhere.\n" + source_url: https://github.com/SirGoodenough/HA_Blueprints/blob/master/Automations/Zigbee2MQTT-Xiaomi_Cube_Controller_MQTT_Triggered.yaml + domain: automation + homeassistant: + min_version: 2024.6.0 + input: + required_input: + name: "Required input \U0001F440" + icon: mdi:alert-box + collapsed: false + description: "This blueprint has been known to freak out when there are spaces + or odd characters\n in the MQTT Topic. Make sure there are no spaces, ONLY + a single word,\n and ONLY A thru Z, a thru z, and 0 thru 9 in the topic.\n + \ (``` / ``` is ok between device and topic)\n\n If there are other characters, + you will need to change the name of the cube to\n remove those characters.\n\n + \ ### IF YOU SEE --> TemplateError: Must provide a device or entity ID\n\n + \ If you get an error like that, The friendly_name in Z2M likely does not + match the \n friendly_name on HA. To fix go into the Z2M ```Open web UI``` + and set the \n friendly_name there. Setting this in just HA or in Z2M without + ticking the update HA\n box will cause this. See the blueprint documentation + page for details.\n \n" + input: + topic: + name: Topic + description: "The main MQTT Topic for your cube. \nDetails on finding the + correct topic can be found here: \n[Find my Cube Topic](https://github.com/SirGoodenough/HA_Blueprints/blob/master/Automations/Zigbee2MQTT%20-%20Xiaomi%20Cube%20Controller%20MQTT%20Triggered.md#-to-make-the-blueprint-work-it-will-need)\n" + default: zigbee2mqtt/? + selector: + text: + multiline: false + multiple: false + optional_conditions: + name: "Optional conditions\U0001F913" + icon: mdi:alert-octagon-outline + collapsed: true + description: "This input was added by user request. With it you can add your + own condition.\n If you only want the cube to work like this in the morning,\n + \ then after 6pm you want it to do different actions, add a condition that\n + \ will only let this run from 6am until 6pm. Then have another copy of\n the + blueprint that will only run from 6pm until 6am. (for example)\n\n Any valid + conditions you can dream up, you should be able to add here.\n\n Leave it + as the default of you don't want to add a condition of your own.\n \n" + input: + additional_conditions: + name: Additional conditions + description: "Extra conditions you may want to add to this automation \n(Example: + Home occupied, TV on, etc)\n" + default: [] + selector: + condition: {} + side_0_group_1_actions: + name: "Side 0 Group 1 actions \U0001F34E" + icon: mdi:numeric-0-box + collapsed: true + description: "These are Group 1 actions that happen with Face 0\n (the one + with the 'Aqara' LOGO) of the cube up to start.\n" + input: + 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: {} + flip_from_any_to_face_0: + name: "Group 1 actions \U0001F34E Flip the cube from any to face 0" + description: 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: {} + side_1_group_1_actions: + name: "Side 1 Group 1 actions \U0001F34E" + icon: mdi:numeric-1-box + collapsed: true + description: "These are Group 1 actions that happen with Face 1\n of the cube + up to start.\n" + input: + 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: {} + flip_from_any_to_face_1: + name: "Group 1 actions \U0001F34E Flip the cube from any to face 1" + description: Face 1 is the one with the 'Aqara' LOGO + 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: {} + side_2_group_1_actions: + name: "Side 2 Group 1 actions \U0001F34E" + icon: mdi:numeric-2-box + collapsed: true + description: "These are Group 1 actions that happen with Face 2\n of the cube + up to start.\n" + input: + 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: {} + flip_from_any_to_face_2: + name: "Group 1 actions \U0001F34E Flip the cube from any to face 2" + description: Face 2 is the one with the 'Aqara' LOGO + 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: {} + side_3_group_1_actions: + name: "Side 3 Group 1 actions \U0001F34E" + icon: mdi:numeric-3-box + collapsed: true + description: "These are Group 1 actions that happen with Face 3\n of the cube + up to start.\n" + input: + 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: {} + flip_from_any_to_face_3: + name: "Group 1 actions \U0001F34E Flip the cube from any to face 3" + description: Face 3 is the one with the 'Aqara' LOGO + 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: {} + side_4_group_1_actions: + name: "Side 4 Group 1 actions \U0001F34E" + icon: mdi:numeric-4-box + collapsed: true + description: "These are Group 1 actions that happen with Face 4\n of the cube + up to start.\n" + input: + 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: {} + flip_from_any_to_face_4: + name: "Group 1 actions \U0001F34E Flip the cube from any to face 4" + description: Face 4 is the one with the 'Aqara' LOGO + 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: {} + side_5_group_1_actions: + name: "Side 5 Group 1 actions \U0001F34E" + icon: mdi:numeric-5-box + collapsed: true + description: "These are Group 1 actions that happen with Face 5\n of the cube + up to start.\n" + input: + 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: {} + flip_from_any_to_face_5: + name: "Group 1 actions \U0001F34E Flip the cube from any to face 5" + description: Face 5 is the one with the 'Aqara' LOGO + 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: {} + any_side_group_2_actions: + name: "Any side Group 2 actions \U0001F352" + icon: mdi:fruit-cherries + collapsed: true + description: "\U0001F352 These are a set of 6 event functions that will trigger + on specific actions\n on *ANY* side. **Group 2 actions \U0001F352**\n" + input: + slide_any: + name: "Group 2 actions \U0001F352 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 \U0001F352 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 \U0001F352 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 \U0001F352 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 \U0001F352 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 \U0001F352 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: {} + side_0_group_3_actions: + name: "Side 0 Group 3 actions \U0001F350" + icon: mdi:numeric-0-circle + collapsed: true + description: "These are Group 3 actions that happen with Face 0 as the ending + point.\n (the one with the 'Aqara' LOGO) of the cube up to start.\n All + are flips from another side to side 0.\n" + input: + 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 \U0001F352 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 \U0001F352 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 \U0001F352 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 \U0001F352 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 \U0001F352 automations will also trigger.\nI suggest using + only one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + side_1_group_3_actions: + name: "Side 1 Group 3 actions \U0001F350" + icon: mdi:numeric-1-circle + collapsed: true + description: "These are Group 3 actions that happen with Face 1 as the ending + point.\n All are flips from another side to side 1.\n" + input: + 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 \U0001F352 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 \U0001F352 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 \U0001F352 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 \U0001F352 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 \U0001F352 automations will also trigger.\nI suggest using + only one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + side_2_group_3_actions: + name: "Side 2 Group 3 actions \U0001F350" + icon: mdi:numeric-2-circle + collapsed: true + description: "These are Group 3 actions that happen with Face 2 as the ending + point.\n All are flips from another side to side 2.\n" + input: + 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 \U0001F352 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 \U0001F352 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 \U0001F352 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 \U0001F352 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 \U0001F352 automations will also trigger.\nI suggest using + only one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + side_3_group_3_actions: + name: "Side 3 Group 3 actions \U0001F350" + icon: mdi:numeric-3-circle + collapsed: true + description: "These are Group 3 actions that happen with Face 3 as the ending + point.\n All are flips from another side to side 3.\n" + input: + 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 \U0001F352 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 \U0001F352 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 \U0001F352 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 \U0001F352 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 \U0001F352 automations will also trigger.\nI suggest using + only one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + side_4_group_3_actions: + name: "Side 4 Group 3 actions \U0001F350" + icon: mdi:numeric-4-circle + collapsed: true + description: "These are Group 3 actions that happen with Face 4 as the ending + point.\n All are flips from another side to side 4.\n" + input: + 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 \U0001F352 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 \U0001F352 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 \U0001F352 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 \U0001F352 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 \U0001F352 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 \U0001F352 automations will also trigger.\nI suggest using + only one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + side_5_group_3_actions: + name: "Side 5 Group 3 actions \U0001F350" + icon: mdi:numeric-5-circle + collapsed: true + description: "These are Group 3 actions that happen with Face 5 as the ending + point.\n All are flips from another side to side 5.\n" + input: + 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 \U0001F352 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 \U0001F352 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 \U0001F352 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 \U0001F352 automations will also trigger.\nI suggest using + only one of the three groups of triggers, not multiple groups..." + default: [] + selector: + action: {} + group_4_actions: + name: "Group 4 actions only used once (no side) \U0001F355" + icon: mdi:pizza + collapsed: true + description: "These are Group 4 actions only used once (no side) \U0001F355\n + \ they can be safely compined with any other command.\n" + input: + shake: + name: "Shake the cube \U0001F355 Group 4" + 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 \U0001F355 Group 4" + description: 'This trigger only occurs once in the set-up. + + It can be combined in any group.' + default: [] + selector: + action: {} +trigger: +- platform: mqtt + topic: !input topic +variables: + action: "{% if trigger.payload_json.action is defined %}\n {{ trigger.payload_json.action + }}\n{% else %}\n none\n{% endif %}\n" + angle: "{% if trigger.payload_json.action_angle is number %}\n {{ trigger.payload_json.action_angle + | float(0.0) }}\n{% else %}\n 0.0\n{% endif %}\n" + side: "{% if trigger.payload_json.side is number %}\n {{ trigger.payload_json.side + | int(0) }}\n{% else %}\n 0\n{% endif %}\n" + op_mode: "{% if trigger.payload_json.operation_mode is defined %}\n {{ trigger.payload_json.operation_mode + }}\n{% else %}\n none\n{% endif %}\n" + topic_var: !input topic + friendly_name: '{{ topic_var.split(''/'')[1] | regex_replace("[^A-Za-z0-9_/./-]", + "") }}' + device_id: '{{ device_id( friendly_name ) }}' + ieee_id_long: '{{(( device_attr( device_id, ''identifiers'') |list)[0][1]) }}' + ieee_id: '{{ieee_id_long.split(''_'')[1] }}' + num_name: last side + num_ha_name: '{{ ''number.'' + friendly_name + ''_last_side'' }}' + num_ha_val: '{{ states(num_ha_name) | default(0) | int(0) }}' + last_side: "{# The first time it will not be there, so make sure its 0 instead of + undefined. #} {% if not num_ha_val in [\"undefined\", \"unknown\", \"unavailable\", + \"none\", \"null\", \"\"] %}\n {{ num_ha_val }}\n{% else %}\n 0\n{% endif %}\n" + mdl: Number Helper for Z2M Cube Integration + mf: SirGoodenough + sa: house + sw: '2023-12-09' + hw: https://github.com/SirGoodenough/HA_Blueprints/blob/master/Automations/Zigbee2MQTT + - Xiaomi Cube Controller.yaml + cu: https://community.home-assistant.io/t/zigbee2mqtt-xiaomi-cube-controller/393203 + config_topic_2: '{{ ''homeassistant/number/'' + ieee_id + ''/last_side/config'' + }}' + topic_2: '{{ ''homeassistant/number/'' + ieee_id + ''/last_side'' }}' +condition: +- condition: template + value_template: "{{ trigger.payload_json is defined and\n trigger.payload_json.action + is defined and\n trigger.payload_json.action in [\"rotate_right\", \"rotate_left\",\n + \ \"flip90\", \"flip180\", \"slide\", \"tap\", \"shake\", \"fall\"] }}\n" +- alias: User pick + condition: !input additional_conditions +action: +- alias: Make number helper to store last side + service: mqtt.publish + data: + topic: '{{ config_topic_2 }}' + retain: true + payload: "{ \"name\": \"{{ num_name }}\",\n \"avty_t\": \"homeassistant/status\",\n + \ \"uniq_id\": \"{{ friendly_name + '-' + device_id }}\",\n \"cmd_t\": \"{{ + topic_2 }}\",\n \"sta_t\": \"{{ topic_2 }}\",\n \"min\": \"0\",\n \"max\": + \"6\",\n \"step\": \"1\",\n \"mode\": \"box\",\n \"ret\": true,\n \"dev\": + {\n \"name\": \"{{ friendly_name }}\",\n \"mdl\": \"{{ mdl }}\",\n \"mf\": + \"{{ mf }}\",\n \"sa\": \"{{ sa }}\",\n \"sw\": \"{{ sw }}\",\n \"hw\": + \"{{ hw }}\",\n \"cu\": \"{{ cu }}\",\n \"ids\": [\n \"{{ ieee_id + + '-' + num_name }}\"\n ]\n }\n}\n" +- alias: Fire Last Action event. This is for optional troubleshooting data. + event: cube_last_action + event_data: + action: '{{ action }}' + side: '{{ side }}' + last_side: '{{ last_side }}' + friendly_name: '{{ friendly_name }}' + device_id: '{{ device_id }}' + ieee_id: '{{ ieee_id }}' + angle: '{{ angle }}' +- alias: Store the current_side as the last_side for the next trigger + service: number.set_value + target: + entity_id: '{{ num_ha_name }}' + data: + value: '{{ side }}' +- alias: "Group 2 \U0001F352 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 == "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 + - conditions: '{{ action == "flip90" }}' + sequence: + - parallel: + - !input flipped90_any + - alias: These are flip to specific side from any side events + choose: &id001 + - conditions: '{{ side == 0 }}' + sequence: !input flip_from_any_to_face_0 + - conditions: '{{ side == 1 }}' + sequence: !input flip_from_any_to_face_1 + - conditions: '{{ side == 2 }}' + sequence: !input flip_from_any_to_face_2 + - conditions: '{{ side == 3 }}' + sequence: !input flip_from_any_to_face_3 + - conditions: '{{ side == 4 }}' + sequence: !input flip_from_any_to_face_4 + - conditions: '{{ side == 5 }}' + sequence: !input flip_from_any_to_face_5 + - conditions: '{{ action == "flip180" }}' + sequence: + - parallel: + - !input flipped180_any + - alias: These are flip to specific side from any side events + choose: *id001 +- 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 +mode: single +max_exceeded: silent diff --git a/blueprints/automation/rvaidya/aqara_magic_cube.yaml b/blueprints/automation/rvaidya/aqara_magic_cube.yaml deleted file mode 100644 index e8983a8..0000000 --- a/blueprints/automation/rvaidya/aqara_magic_cube.yaml +++ /dev/null @@ -1,755 +0,0 @@ -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/components/binary_sensors/rooms/nursery_occupied.yaml b/components/binary_sensors/rooms/nursery_occupied.yaml index 0e9cb7b..bdd854b 100644 --- a/components/binary_sensors/rooms/nursery_occupied.yaml +++ b/components/binary_sensors/rooms/nursery_occupied.yaml @@ -24,7 +24,7 @@ observations: prob_given_false: 0.0 - platform: state - entity_id: input_boolean.white_bed_occupied + entity_id: binary_sensor.white_bed_occupied to_state: "on" prob_given_true: .67 prob_given_false: 0.0 diff --git a/components/binary_sensors/template.yaml b/components/binary_sensors/template.yaml index 031b138..92570e3 100644 --- a/components/binary_sensors/template.yaml +++ b/components/binary_sensors/template.yaml @@ -71,25 +71,25 @@ sensors: 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) }}" + value_template: "{{ states('sensor.hasta_soil_sensor_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' %} + {% if states('sensor.hasta_soil_sensor_moisture') == 'unavailable' %} mdi:flower-outline {% else %} mdi:flower {% endif %} attribute_templates: - moisture: "{{states('sensor.fineoffset_wh51_00f935_moisture') | float(default=0)}}" + moisture: "{{states('sensor.hasta_soil_sensor_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) }}" + value_template: "{{ states('sensor.kitchen_fridge_thermostat_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) %} + {% if states('sensor.kitchen_fridge_thermostat_temperature')|int(default=0) > states('input_number.kitchen_fridge_alert')|int(default=0) %} mdi:fridge-variant-alert {% else %} mdi:fridge-variant @@ -98,10 +98,10 @@ sensors: 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) }}" + value_template: "{{ states('sensor.kitchen_freezer_thermostat_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) %} + {% if states('sensor.kitchen_freezer_thermostat_temperature')|int(default=0) > states('input_number.kitchen_freezer_alert')|int(default=0) %} mdi:fridge-variant-alert {% else %} mdi:fridge-variant @@ -110,10 +110,10 @@ sensors: 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) }}" + value_template: "{{ states('sensor.kitchen_fridge_thermostat_temperature')|int(default=0) > states('input_number.kitchen_fridge_alert')|int(default=0) or states('sensor.kitchen_freezer_thermostat_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) %} + {% if states('sensor.kitchen_fridge_thermostat_temperature')|int(default=0) > states('input_number.kitchen_fridge_alert')|int(default=0) or states('sensor.kitchen_freezer_thermostat_temperature')|int(default=0) > states('input_number.kitchen_freezer_alert')|int(default=0) %} mdi:fridge-variant-alert {% else %} mdi:fridge-variant @@ -375,7 +375,7 @@ sensors: # 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_temperature') | float(default=0) %} + # {% if states('sensor.thermostat_temperature') | float(default=0) - 5 < states('sensor.front_yard_thermostat_temperature') | float(default=0) %} # {{'true'}} # {% else %} # {{ 'false' }} @@ -387,7 +387,7 @@ sensors: # unique_id: templatebinarysensor.cooler_outside # friendly_name: Cooler Outside # value_template: >- - # {% if states('sensor.lacrosse_tx141thbv2_0_temperature') | float(default=0) + 5 < states('sensor.thermostat_temperature') | float(default=0) %} + # {% if states('sensor.front_yard_thermostat_temperature') | float(default=0) + 5 < states('sensor.thermostat_temperature') | float(default=0) %} # {{'true'}} # {% else %} # {{ 'false' }} @@ -701,8 +701,8 @@ sensors: bridgets_bed: unique_id: templatebinarysensor.bridgets_bed friendly_name: Bridget's Bed - value_template: "{{ states('input_boolean.white_bed_occupied') }}" - icon_template: "{{ iif(is_state('input_boolean.white_bed_occupied','on'),'mdi:bed','mdi:bed-empty','mdi:bed-outline')}}" + value_template: "{{ states('binary_sensor.bed_presence_2d14a4_bed_occupied_either') }}" + icon_template: "{{ iif(is_state('binary_sensor.bed_presence_2d14a4_bed_occupied_either','on'),'mdi:bed','mdi:bed-empty','mdi:bed-outline')}}" check_mail: unique_id: templatebinarysensor.check_mail diff --git a/components/input_selects/people/podein_kids.yaml b/components/input_selects/people/podein_kids.yaml index abb7894..dde5834 100644 --- a/components/input_selects/people/podein_kids.yaml +++ b/components/input_selects/people/podein_kids.yaml @@ -1,4 +1,5 @@ name: Podein Kids +icon: mdi:alpha-p-box-outline options: - Auto - Home diff --git a/components/input_selects/people/weaver_kids.yaml b/components/input_selects/people/weaver_kids.yaml index d67feb3..26be0c2 100644 --- a/components/input_selects/people/weaver_kids.yaml +++ b/components/input_selects/people/weaver_kids.yaml @@ -1,4 +1,5 @@ name: Weaver Kids +icon: mdi:alpha-w-box options: - Auto - Home diff --git a/components/packages/automatic_sprinkler_system.yaml b/components/packages/automatic_sprinkler_system.yaml index 7537813..9451b30 100644 --- a/components/packages/automatic_sprinkler_system.yaml +++ b/components/packages/automatic_sprinkler_system.yaml @@ -342,7 +342,7 @@ template: - trigger: - platform: state entity_id: binary_sensor.is_raining - not_from: + not_to: - "unknown" - "unavailable" @@ -416,7 +416,7 @@ automation: to: "on" - platform: state - entity_id: sensor.ecowitt_wh40_21917_precipitation + entity_id: sensor.rain_gauge_precipitation not_to: - "unknown" - "unavailable" @@ -433,7 +433,7 @@ automation: target: entity_id: 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')}}" + message: "{{now().strftime('%Y-%m-%d')}}T{{now().strftime('%H:%M:%S.%f')}},{{states('sensor.rain_gauge_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: "Sprinkler: Reset After Automatic Run" id: automation_sprinkler_reset_after_automatic_run @@ -688,7 +688,7 @@ utility_meter: rain_quarter_hourly: unique_id: utility_meter_rain_quarter_hourly name: "Rain: Quarter Hourly" - source: sensor.ecowitt_wh40_21917_precipitation + source: sensor.rain_gauge_precipitation cycle: quarter-hourly tariffs: - Precipitation @@ -696,7 +696,7 @@ utility_meter: rain_hourly: unique_id: utility_meter_rain_hourly name: "Rain: Hourly" - source: sensor.ecowitt_wh40_21917_precipitation + source: sensor.rain_gauge_precipitation cycle: hourly tariffs: - Precipitation @@ -704,7 +704,7 @@ utility_meter: rain_daily: unique_id: utility_meter_rain_daily name: "Rain: Daily" - source: sensor.ecowitt_wh40_21917_precipitation + source: sensor.rain_gauge_precipitation cycle: daily offset: "12:00" tariffs: @@ -713,7 +713,7 @@ utility_meter: rain_monthly: unique_id: utility_meter_rain_monthly name: "Rain: Monthly" - source: sensor.ecowitt_wh40_21917_precipitation + source: sensor.rain_gauge_precipitation cycle: monthly tariffs: - Precipitation @@ -721,7 +721,7 @@ utility_meter: rain_yearly: unique_id: utility_meter_rain_yearly name: "Rain: Yearly" - source: sensor.ecowitt_wh40_21917_precipitation + source: sensor.rain_gauge_precipitation cycle: yearly tariffs: - Precipitation @@ -729,7 +729,7 @@ utility_meter: sprinkler_recent_rain: unique_id: utility_meter_sprinkler_recent_rain name: "Sprinkler: Recent Rain" - source: sensor.ecowitt_wh40_21917_precipitation + source: sensor.rain_gauge_precipitation cycle: yearly tariffs: - Precipitation diff --git a/components/packages/clever_announcements.yaml b/components/packages/clever_announcements.yaml index b3a074b..e23a424 100644 --- a/components/packages/clever_announcements.yaml +++ b/components/packages/clever_announcements.yaml @@ -21,7 +21,7 @@ script: media_content_type: description: "The media content type of the specified media" - example: audio/mpeg + example: music selector: text: @@ -41,14 +41,28 @@ script: # 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") }}' + remote_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"),"")) }}' content_id: '{{ iif(media_content_id is defined,media_content_id,"media-source://media_source/tts/welcome_to_daddys_house.mp3") }}' - content_type: '{{ iif(media_content_type is defined,media_content_type,"audio/mpeg") }}' + content_type: '{{ iif(media_content_type is defined,media_content_type,"music") }}' volume: "{{ iif(volume is defined,volume,0.6) }}" - original_volume: '{{ iif(is_state("media_player.ytube_music_player","off"),0.0,state_attr(state_attr("media_player.ytube_music_player","remote_player_id"), "volume_level")) }}' + original_volume: '{{ iif(is_state("media_player.ytube_music_player","off"),0.0)}}' #,state_attr(state_attr("media_player.ytube_music_player","remote_player_id"), "volume")) }}' 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: + - action: logbook.log + data: + name: Clever Announcement Values + entity_id: script.make_clever_announcement + message: > + Hopefully this contains all of the values: + media_player: {{ media_player }} + content_id: {{ content_id }} + content_type: {{ content_type }} + volume: {{ volume }} + original_volume: {{ original_volume }} + ytube_in_use: {{ ytube_in_use }} + domain: script + - choose: - alias: "Ytube music player is playing something" conditions: "{{ ytube_in_use }}" @@ -65,15 +79,6 @@ script: minutes: 0 seconds: 2 - # 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: @@ -81,12 +86,6 @@ script: data: volume_level: "{{volume}}" - # - alias: "Wait another bit for the volume to be set" - # delay: - # hours: 0 - # minutes: 0 - # seconds: 2 - - alias: "Play the announcement" service: media_player.play_media target: @@ -95,19 +94,6 @@ script: 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 diff --git a/components/packages/databases.yaml b/components/packages/databases.yaml index 582d984..e5866cd 100644 --- a/components/packages/databases.yaml +++ b/components/packages/databases.yaml @@ -30,7 +30,6 @@ recorder: - sensor.mail_updated - light.upstairs_public - input_select.master_bedroom_camera - - automation.cycle_cameras - input_select.outdoor_camera_cycle - input_select.indoor_camera_cycle - sensor.nws_alerts_last_updated diff --git a/components/packages/plant_sensor_batteries.yaml b/components/packages/plant_sensor_batteries.yaml index 0b09939..178c8b6 100644 --- a/components/packages/plant_sensor_batteries.yaml +++ b/components/packages/plant_sensor_batteries.yaml @@ -13,5 +13,4 @@ sensor: name: Lowest Ecowitt Battery type: min entity_ids: - - sensor.fineoffset_wh51_0ce593_battery - + - sensor.hasta_soil_sensor_battery diff --git a/components/packages/plants.yaml b/components/packages/plants.yaml index 99779fb..00269fd 100644 --- a/components/packages/plants.yaml +++ b/components/packages/plants.yaml @@ -44,11 +44,11 @@ plant: min_conductivity: 10 max_conductivity: 5700 - fineoffset_wh51_0ce593: + hasta_soil_sensor: sensors: - moisture: sensor.fineoffset_wh51_0ce593_moisture + moisture: sensor.hasta_soil_sensor_moisture temperature: sensor.outdoor_temperature - battery: sensor.fineoffset_wh51_0ce593_battery + battery: sensor.hasta_soil_sensor_battery brightness: sensor.outdoors_mean_illuminance min_moisture: 15 max_moisture: 80 @@ -56,3 +56,16 @@ plant: max_brightness: 300000 min_temperature: -30 max_temperature: 120 + + daisy_soil_sensor: + sensors: + moisture: sensor.daisy_soil_sensor_moisture + temperature: sensor.outdoor_temperature + battery: sensor.daisy_soil_sensor_battery + brightness: sensor.outdoors_mean_illuminance + min_moisture: 15 + max_moisture: 80 + min_brightness: 200 + max_brightness: 300000 + min_temperature: -30 + max_temperature: 120 \ No newline at end of file diff --git a/components/packages/rtl_433_devices/back_yard_thermostat.yaml b/components/packages/rtl_433_devices/back_yard_thermostat.yaml index 6413999..0d3c478 100644 --- a/components/packages/rtl_433_devices/back_yard_thermostat.yaml +++ b/components/packages/rtl_433_devices/back_yard_thermostat.yaml @@ -4,14 +4,13 @@ mqtt: device_class: timestamp icon: mdi:clock-in state_topic: "rtl_433/9b13b3f4-rtl433/devices/Acurite-Tower/A/6162/time" - force_update: true entity_category: diagnostic - unique_id: AcuriteTower-6162-A-UTC + unique_id: acurite-tower-1-a-time device: - identifiers: AcuriteTower-6162-A - name: Acurite 592TXR A - model: Acurite 592TXR - manufacturer: rtl_433 + identifiers: acurite-tower-1-a + name: Back Yard Thermostat + model: Tower + manufacturer: Acurite - name: "Battery" device_class: battery @@ -20,13 +19,12 @@ mqtt: state_class: measurement entity_category: diagnostic state_topic: "rtl_433/9b13b3f4-rtl433/devices/Acurite-Tower/A/6162/battery_ok" - force_update: true - unique_id: AcuriteTower-6162-A-B + unique_id: acurite-tower-1-a-battery-ok device: - identifiers: AcuriteTower-6162-A - name: Acurite 592TXR A - model: Acurite 592TXRv2 - manufacturer: rtl_433 + identifiers: acurite-tower-1-a + name: Back Yard Thermostat + model: Tower + manufacturer: Acurite - name: "Temperature" device_class: temperature @@ -34,13 +32,12 @@ mqtt: value_template: "{{ value|float }}" state_class: measurement state_topic: "rtl_433/9b13b3f4-rtl433/devices/Acurite-Tower/A/6162/temperature_C" - force_update: true - unique_id: AcuriteTower-6162-A-T + unique_id: acurite-tower-1-a-temperature-c device: - identifiers: AcuriteTower-6162-A - name: Acurite 592TXR A - model: Acurite 592TXR - manufacturer: rtl_433 + identifiers: acurite-tower-1-a + name: Back Yard Thermostat + model: Tower + manufacturer: Acurite - name: "Humidity" device_class: humidity @@ -48,10 +45,9 @@ mqtt: value_template: "{{ value|float }}" state_class: measurement state_topic: "rtl_433/9b13b3f4-rtl433/devices/Acurite-Tower/A/6162/humidity" - force_update: true - unique_id: AcuriteTower-6162-A-H + unique_id: acurite-tower-1-a-humidity device: - identifiers: AcuriteTower-6162-A - name: Acurite 592TXR A - model: Acurite 592TXR - manufacturer: rtl_433 \ No newline at end of file + identifiers: acurite-tower-1-a + name: Back Yard Thermostat + model: Tower + manufacturer: Acurite diff --git a/components/packages/rtl_433_devices/chevrolet_traverse_lt_awd.yaml b/components/packages/rtl_433_devices/chevrolet_traverse_lt_awd.yaml new file mode 100644 index 0000000..48e3d99 --- /dev/null +++ b/components/packages/rtl_433_devices/chevrolet_traverse_lt_awd.yaml @@ -0,0 +1,12 @@ +mqtt: + device_tracker: + - name: "Location" + icon: mdi:car-estate + json_attributes_topic: "cleverdevices/clever_traverse/attributes" + unique_id: chevrolet-traverse-lt-awd + device: + name: Chevrolet Traverse + identifiers: chevrolet-traverse-lt-awd + model_id: LT AWD + model: Traverse + manufacturer: Chevrolet diff --git a/components/packages/rtl_433_devices/daisy_soil_sensor.yaml b/components/packages/rtl_433_devices/daisy_soil_sensor.yaml new file mode 100644 index 0000000..42f4792 --- /dev/null +++ b/components/packages/rtl_433_devices/daisy_soil_sensor.yaml @@ -0,0 +1,42 @@ +mqtt: + sensor: + - name: "Timestamp" + device_class: timestamp + icon: mdi:clock-in + state_topic: "rtl_433/9b13b3f4-rtl433/devices/Fineoffset-WH51/00e1cd/time" + entity_category: diagnostic + unique_id: fine-offset-wh51-daisy-time + device: + identifiers: ecowitt-wh51-daisy + name: Daisy Soil Sensor + model: WH51 + manufacturer: Ecowitt + + - 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/00e1cd/battery_ok" + unique_id: fine-offset-wh51-battery-ok + device: + identifiers: ecowitt-wh51-daisy + name: Daisy Soil Sensor + model: WH51 + manufacturer: Ecowitt + + - name: "Moisture" + device_class: moisture + unit_of_measurement: "%" + value_template: "{{ value|float }}" + state_class: measurement + state_topic: "rtl_433/9b13b3f4-rtl433/devices/Fineoffset-WH51/00e1cd/moisture" + unique_id: fine-offset-wh51-daisy-moisture + device: + identifiers: ecowitt-wh51-daisy + name: Daisy Soil Sensor + model: WH51 + manufacturer: Ecowitt + + diff --git a/components/packages/rtl_433_devices/deck_thermostat.yaml b/components/packages/rtl_433_devices/deck_thermostat.yaml index f5ebf78..6f9dac1 100644 --- a/components/packages/rtl_433_devices/deck_thermostat.yaml +++ b/components/packages/rtl_433_devices/deck_thermostat.yaml @@ -4,14 +4,13 @@ mqtt: device_class: timestamp icon: mdi:clock-in state_topic: "rtl_433/9b13b3f4-rtl433/devices/Nexus-TH/1/44/time" - force_update: true entity_category: diagnostic - unique_id: Nexus-TH-1-UTC + unique_id: nexus-th-1-time device: - identifiers: Nexus-TH-1 - name: Nexus-TH-1 - model: Nexus-TH - manufacturer: rtl_433 + identifiers: nexus-th-1 + name: Deck Thermostat + model: TH + manufacturer: Nexus - name: "Battery" device_class: battery @@ -20,13 +19,12 @@ mqtt: state_class: measurement entity_category: diagnostic state_topic: "rtl_433/9b13b3f4-rtl433/devices/Nexus-TH/1/44/battery_ok" - force_update: true - unique_id: Nexus-TH-1-B + unique_id: nexus-th-1-battery-ok device: - identifiers: Nexus-TH-1 - name: Nexus-TH-1 - model: Nexus-TH - manufacturer: rtl_433 + identifiers: nexus-th-1 + name: Deck Thermostat + model: TH + manufacturer: Nexus - name: "Temperature" device_class: temperature @@ -34,13 +32,12 @@ mqtt: value_template: "{{ value|float }}" state_class: measurement state_topic: "rtl_433/9b13b3f4-rtl433/devices/Nexus-TH/1/44/temperature_C" - force_update: true - unique_id: Nexus-TH-1-T + unique_id: nexus-th-1-temperature-c device: - identifiers: Nexus-TH-1 - name: Nexus-TH-1 - model: Nexus-TH - manufacturer: rtl_433 + identifiers: nexus-th-1 + name: Deck Thermostat + model: TH + manufacturer: Nexus - name: "Humidity" device_class: humidity @@ -48,10 +45,9 @@ mqtt: value_template: "{{ value|float }}" state_class: measurement state_topic: "rtl_433/9b13b3f4-rtl433/devices/Nexus-TH/1/44/humidity" - force_update: true - unique_id: Nexus-TH-1-H + unique_id: nexus-th-1-humidity device: - identifiers: Nexus-TH-1 - name: Nexus-TH-1 - model: Nexus-TH - manufacturer: rtl_433 \ No newline at end of file + identifiers: nexus-th-1 + name: Deck Thermostat + model: TH + manufacturer: Nexus diff --git a/components/packages/rtl_433_devices/outdoor_thermostat.yaml b/components/packages/rtl_433_devices/front_yard_thermostat.yaml similarity index 54% rename from components/packages/rtl_433_devices/outdoor_thermostat.yaml rename to components/packages/rtl_433_devices/front_yard_thermostat.yaml index 3c43287..72f420d 100644 --- a/components/packages/rtl_433_devices/outdoor_thermostat.yaml +++ b/components/packages/rtl_433_devices/front_yard_thermostat.yaml @@ -1,57 +1,53 @@ -mqtt: - sensor: - - name: "Timestamp" - device_class: timestamp - icon: mdi:clock-in - state_topic: "rtl_433/9b13b3f4-rtl433/devices/LaCrosse-TX141THBv2/0/233/time" - force_update: true - entity_category: diagnostic - unique_id: LaCrosse-TX141THBv2-0-UTC - device: - identifiers: LaCrosse-TX141THBv2-0 - name: LaCrosse-TX141THBv2-0 - 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/233/battery_ok" - force_update: true - unique_id: LaCrosse-TX141THBv2-0-B - device: - identifiers: LaCrosse-TX141THBv2-0 - name: LaCrosse-TX141THBv2-0 - 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/233/temperature_C" - force_update: true - unique_id: LaCrosse-TX141THBv2-0-T - device: - identifiers: LaCrosse-TX141THBv2-0 - name: LaCrosse-TX141THBv2-0 - 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/233/humidity" - force_update: true - unique_id: LaCrosse-TX141THBv2-0-H - device: - identifiers: LaCrosse-TX141THBv2-0 - name: LaCrosse-TX141THBv2-0 - model: LaCrosse-TX141THBv2 - manufacturer: rtl_433 \ No newline at end of file +mqtt: + sensor: + - name: "Timestamp" + device_class: timestamp + icon: mdi:clock-in + state_topic: "rtl_433/9b13b3f4-rtl433/devices/LaCrosse-TX141THBv2/0/233/time" + entity_category: diagnostic + unique_id: lacrosse-tx141thbv2-0-time + device: + identifiers: lacrosse-tx141thbv2-0 + name: Front Yard Thermostat + model: TX141THBv2 + manufacturer: LaCrosse + + - 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/233/battery_ok" + unique_id: lacrosse-tx141thbv2-0-battery-ok + device: + identifiers: lacrosse-tx141thbv2-0 + name: Front Yard Thermostat + model: TX141THBv2 + manufacturer: LaCrosse + + - 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/233/temperature_C" + unique_id: lacrosse-tx141thbv2-0-temperature-c + device: + identifiers: lacrosse-tx141thbv2-0 + name: Front Yard Thermostat + model: TX141THBv2 + manufacturer: LaCrosse + + - 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/233/humidity" + unique_id: lacrosse-tx141thbv2-0-humidity + device: + identifiers: lacrosse-tx141thbv2-0 + name: Front Yard Thermostat + model: TX141THBv2 + manufacturer: LaCrosse \ No newline at end of file diff --git a/components/packages/rtl_433_devices/hasta_moisture.yaml b/components/packages/rtl_433_devices/hasta_soil_sensor.yaml similarity index 53% rename from components/packages/rtl_433_devices/hasta_moisture.yaml rename to components/packages/rtl_433_devices/hasta_soil_sensor.yaml index 38a6761..356eb90 100644 --- a/components/packages/rtl_433_devices/hasta_moisture.yaml +++ b/components/packages/rtl_433_devices/hasta_soil_sensor.yaml @@ -1,44 +1,40 @@ -# 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 +mqtt: + sensor: + - name: "Timestamp" + device_class: timestamp + icon: mdi:clock-in + state_topic: "rtl_433/9b13b3f4-rtl433/devices/Fineoffset-WH51/0ce593/time" + entity_category: diagnostic + unique_id: fine-offset-wh51-hasta-time + device: + identifiers: ecowitt-wh51-hasta + name: Hasta Soil Sensor + model: WH51 + manufacturer: Ecowitt + + - 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" + unique_id: fine-offset-wh51-hasta-battery-ok + device: + identifiers: ecowitt-wh51-hasta + name: Hasta Soil Sensor + model: WH51 + manufacturer: Ecowitt + + - 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" + unique_id: fine-offset-wh51-0ce593-moisture + device: + identifiers: ecowitt-wh51-hasta + name: Hasta Soil Sensor + model: WH51 + manufacturer: Ecowitt \ No newline at end of file diff --git a/components/packages/rtl_433_devices/kitchen_freezer_thermostat.yaml b/components/packages/rtl_433_devices/kitchen_freezer_thermostat.yaml index c2d9d8e..8945602 100644 --- a/components/packages/rtl_433_devices/kitchen_freezer_thermostat.yaml +++ b/components/packages/rtl_433_devices/kitchen_freezer_thermostat.yaml @@ -4,14 +4,14 @@ mqtt: 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 + unique_id: acurite-986-2f-time device: - identifiers: Acurite-986-2F-42383 - name: Acurite-986-2F-42383 - model: Acurite-986 - manufacturer: rtl_433 + identifiers: acurite-986-2f + name: Kitchen Freezer Thermostat + model_id: 2F + model: 986 + manufacturer: Acurite - name: "Battery" device_class: battery @@ -20,13 +20,13 @@ mqtt: 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 + unique_id: acurite-986-2f-battery-ok device: - identifiers: Acurite-986-2F-42383 - name: Acurite-986-2F-42383 - model: Acurite-986 - manufacturer: rtl_433 + identifiers: acurite-986-2f + name: Kitchen Freezer Thermostat + model_id: 2F + model: 986 + manufacturer: Acurite - name: "Temperature" device_class: temperature @@ -34,10 +34,10 @@ mqtt: 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 + unique_id: acurite-986-2f-temperature-c device: - identifiers: Acurite-986-2F-42383 - name: Acurite-986-2F-42383 - model: Acurite-986 - manufacturer: rtl_433 \ No newline at end of file + identifiers: acurite-986-2f + name: Kitchen Freezer Thermostat + model_id: 2F + model: 986 + manufacturer: Acurite \ 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 index 94abd02..12b5f0e 100644 --- a/components/packages/rtl_433_devices/kitchen_fridge_thermostat.yaml +++ b/components/packages/rtl_433_devices/kitchen_fridge_thermostat.yaml @@ -4,14 +4,14 @@ mqtt: 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 + unique_id: acurite-986-1r-time device: - identifiers: Acurite-986-1R-48226 - name: Acurite-986-1R-48226 - model: Acurite-986 - manufacturer: rtl_433 + identifiers: acurite-986-1r + name: Kitchen Fridge Thermostat + model_id: 1R + model: 986 + manufacturer: Acurite - name: "Battery" device_class: battery @@ -20,13 +20,13 @@ mqtt: 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 + unique_id: acurite-986-1r-battery-ok device: - identifiers: Acurite-986-1R-48226 - name: Acurite-986-1R-48226 - model: Acurite-986 - manufacturer: rtl_433 + identifiers: acurite-986-1r + name: Kitchen Fridge Thermostat + model_id: 1R + model: 986 + manufacturer: Acurite - name: "Temperature" device_class: temperature @@ -34,10 +34,10 @@ mqtt: 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 + unique_id: acurite-986-1r-temperature-c device: - identifiers: Acurite-986-1R-48226 - name: Acurite-986-1R-48226 - model: Acurite-986 - manufacturer: rtl_433 \ No newline at end of file + identifiers: acurite-986-1r + name: Kitchen Fridge Thermostat + model_id: 1R + model: 986 + manufacturer: Acurite \ 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 deleted file mode 100644 index 4b7b546..0000000 --- a/components/packages/rtl_433_devices/outdoor_rain_gauge_sensor.yaml +++ /dev/null @@ -1,73 +0,0 @@ -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/podein_devices.yaml b/components/packages/rtl_433_devices/podein_devices.yaml new file mode 100644 index 0000000..9fab11d --- /dev/null +++ b/components/packages/rtl_433_devices/podein_devices.yaml @@ -0,0 +1,11 @@ +mqtt: + device_tracker: + - name: Kristy's Phone + icon: mdi:cellphone + json_attributes_topic: "cleverdevices/kristy_s_phone/attributes" + unique_id: kristys-phone + + - name: nmap_tracker_fe_cf_82_b2_22_e0 + icon: mdi:cellphone + json_attributes_topic: "cleverdevices/marshalls_phone/attributes" + unique_id: marshalls-phone \ No newline at end of file diff --git a/components/packages/rtl_433_devices/rain_gauge.yaml b/components/packages/rtl_433_devices/rain_gauge.yaml new file mode 100644 index 0000000..de0611d --- /dev/null +++ b/components/packages/rtl_433_devices/rain_gauge.yaml @@ -0,0 +1,55 @@ +mqtt: + sensor: + - name: "Timestamp" + device_class: timestamp + icon: mdi:clock-in + state_topic: "rtl_433/9b13b3f4-rtl433/devices/EcoWitt-WH40/21917/time" + entity_category: diagnostic + unique_id: ecowitt-wh40-time + device: + identifiers: ecowitt-wh40 + name: Rain Gauge + model: WH40 + manufacturer: EcoWitt + + - 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" + unique_id: ecowitt-wh40-rain-mm + device: + identifiers: ecowitt-wh40 + name: Rain Gauge + model: WH40 + manufacturer: EcoWitt + + - 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" + unique_id: ecowitt-wh40-battery-v + device: + identifiers: ecowitt-wh40 + name: Rain Gauge + model: WH40 + manufacturer: EcoWitt + + 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" + unique_id: ecowitt-wh40-battery-ok + device: + identifiers: ecowitt-wh40 + name: Rain Gauge + model: WH40 + manufacturer: EcoWitt \ No newline at end of file diff --git a/components/packages/rtl_433_devices/tpms.yaml b/components/packages/rtl_433_devices/tpms.yaml new file mode 100644 index 0000000..1ee013f --- /dev/null +++ b/components/packages/rtl_433_devices/tpms.yaml @@ -0,0 +1,112 @@ +mqtt: + sensor: + - name: "Timestamp" + device_class: timestamp + icon: mdi:clock-in + state_topic: "rtl_433/9b13b3f4-rtl433/devices/TPMS/Schrader-EG53MA4/0D0D33/time" + entity_category: diagnostic + unique_id: schrader-0d0d33-time + device: + name: "Tire 1" + identifiers: schrader-0d0d33 + via_device: chevrolet-traverse-lt-awd + + - name: "Pressure" + device_class: pressure + unit_of_measurement: "kPa" + value_template: "{{ value|float }}" + state_class: measurement + entity_category: diagnostic + state_topic: "rtl_433/9b13b3f4-rtl433/devices/TPMS/Schrader-EG53MA4/0D0D33/pressure_kPa" + unique_id: schrader-0d0d33-pressure-kpa + device: + name: "Tire 1" + identifiers: schrader-0d0d33 + via_device: chevrolet-traverse-lt-awd + + - name: "Temperature" + device_class: temperature + unit_of_measurement: "°C" + value_template: "{{ value|float }}" + state_class: measurement + entity_category: diagnostic + state_topic: "rtl_433/9b13b3f4-rtl433/devices/TPMS/Schrader-EG53MA4/0D0D33/temperature_C" + unique_id: schrader-0d0d33-temperature-c + device: + name: "Tire 1" + identifiers: schrader-0d0d33 + via_device: chevrolet-traverse-lt-awd + + - name: "Timestamp" + device_class: timestamp + icon: mdi:clock-in + state_topic: "rtl_433/9b13b3f4-rtl433/devices/TPMS/Schrader-EG53MA4/0D31A0/time" + entity_category: diagnostic + unique_id: schrader-0d31a0-time + device: + name: "Tire 2" + identifiers: schrader-0d31a0 + via_device: chevrolet-traverse-lt-awd + + - name: "Pressure" + device_class: pressure + unit_of_measurement: "kPa" + value_template: "{{ value|float }}" + state_class: measurement + entity_category: diagnostic + state_topic: "rtl_433/9b13b3f4-rtl433/devices/TPMS/Schrader-EG53MA4/0D31A0/pressure_kPa" + unique_id: schrader-0d31a0-pressure-kpa + device: + name: "Tire 2" + identifiers: schrader-0d31a0 + via_device: chevrolet-traverse-lt-awd + + - name: "Temperature" + device_class: temperature + unit_of_measurement: "°C" + value_template: "{{ value|float }}" + state_class: measurement + entity_category: diagnostic + state_topic: "rtl_433/9b13b3f4-rtl433/devices/TPMS/Schrader-EG53MA4/0D31A0/temperature_C" + unique_id: schrader-0d31a0-temperature-c + device: + name: "Tire 2" + identifiers: schrader-0d31a0 + via_device: chevrolet-traverse-lt-awd + + - name: "Timestamp" + device_class: timestamp + icon: mdi:clock-in + state_topic: "rtl_433/9b13b3f4-rtl433/devices/TPMS/Schrader-EG53MA4/0D1909/time" + entity_category: diagnostic + unique_id: schrader-0d1909-time + device: + name: "Tire 3" + identifiers: schrader-0d1909 + via_device: chevrolet-traverse-lt-awd + + - name: "Pressure" + device_class: pressure + unit_of_measurement: "kPa" + value_template: "{{ value|float }}" + state_class: measurement + entity_category: diagnostic + state_topic: "rtl_433/9b13b3f4-rtl433/devices/TPMS/Schrader-EG53MA4/0D1909/pressure_kPa" + unique_id: schrader-0d1909-pressure-kpa + device: + name: "Tire 3" + identifiers: schrader-0d1909 + via_device: chevrolet-traverse-lt-awd + + - name: "Temperature" + device_class: temperature + unit_of_measurement: "°C" + value_template: "{{ value|float }}" + state_class: measurement + entity_category: diagnostic + state_topic: "rtl_433/9b13b3f4-rtl433/devices/TPMS/Schrader-EG53MA4/0D1909/temperature_C" + unique_id: schrader-0d1909-temperature-c + device: + name: "Tire 3" + identifiers: schrader-0d1909 + via_device: chevrolet-traverse-lt-awd \ No newline at end of file diff --git a/components/packages/temperature_management.yaml b/components/packages/temperature_management.yaml index d2579d4..8d13d34 100644 --- a/components/packages/temperature_management.yaml +++ b/components/packages/temperature_management.yaml @@ -188,7 +188,7 @@ template: - 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 ['unknown', 'unavailable']) }}" + availability: "{{ (states('binary_sensor.getting_warmer_outside') not in ['unavailable']) }}" icon: mdi:sun-thermometer state_class: measurement unit_of_measurement: p diff --git a/customizations/entities/beds.yaml b/customizations/entities/beds.yaml index b05c953..f4786f8 100644 --- a/customizations/entities/beds.yaml +++ b/customizations/entities/beds.yaml @@ -1,7 +1,7 @@ binary_sensor.black_bed_occupied: icon: mdi:bed -input_boolean.white_bed_occupied: +binary_sensor.white_bed_occupied: icon: mdi:bed input_boolean.master_bed_occupied: diff --git a/customizations/entities/plants.yaml b/customizations/entities/plants.yaml index a20ebd0..f06c96c 100644 --- a/customizations/entities/plants.yaml +++ b/customizations/entities/plants.yaml @@ -22,9 +22,13 @@ plant.plant_sensor_3eb0: # entity_picture: /local/image/pansy.jpg # friendly_name: Pansy -plant.fineoffset_wh51_0ce593: +plant.hasta_soil_sensor: entity_picture: /local/image/hosta.jpg - friendly_name: Hostas (E593) + friendly_name: Hostas + +plant.daisy_soil_sensor: + entity_picture: /local/image/daisy.jpg + friendly_name: Dasies ## Groups diff --git a/esphome/bed-presence-2d14a4.yaml b/esphome/bed-presence-2d14a4.yaml index f65f805..227c381 100644 --- a/esphome/bed-presence-2d14a4.yaml +++ b/esphome/bed-presence-2d14a4.yaml @@ -1,6 +1,7 @@ esphome: name: bed-presence-2d14a4 friendly_name: Bed Presence 2d14a4 + comment: White Bed Sensor min_version: 2024.6.0 name_add_mac_suffix: false project: diff --git a/esphome/bed-presence-c175a4.yaml b/esphome/bed-presence-c175a4.yaml index 6163370..fb09d92 100644 --- a/esphome/bed-presence-c175a4.yaml +++ b/esphome/bed-presence-c175a4.yaml @@ -1,6 +1,7 @@ esphome: name: bed-presence-c175a4 friendly_name: Bed Presence c175a4 + comment: Master Bed Sensor min_version: 2024.6.0 name_add_mac_suffix: false project: diff --git a/esphome/black-bed.yaml b/esphome/black-bed.yaml index d3d3b18..9f6890e 100644 --- a/esphome/black-bed.yaml +++ b/esphome/black-bed.yaml @@ -1,7 +1,7 @@ substitutions: devicename: black-bed friendly_name: Black Bed - comment: Clever Bed Sensor + comment: Black Bed Sensor entity_name: black_bed platform: ESP8266 board: nodemcuv2 diff --git a/esphome/common/bme680_advanced.yaml b/esphome/common/bme680_advanced.yaml new file mode 100644 index 0000000..fb9c5ee --- /dev/null +++ b/esphome/common/bme680_advanced.yaml @@ -0,0 +1,53 @@ +# Example configuration entry +sensor: + - platform: bme680 + temperature: + name: "BME680 Temperature" + oversampling: 16x + pressure: + name: "BME680 Pressure" + humidity: + id: "humidity" + name: "BME680 Humidity" + gas_resistance: + id: "gas_resistance" + name: "BME680 Gas Resistance" + address: 0x77 + update_interval: 60s + - platform: template + name: "BME680 Indoor Air Quality" + id: iaq + icon: "mdi:gauge" + # calculation: comp_gas = log(R_gas[ohm]) + 0.04 log(Ohm)/%rh * hum[%rh] + lambda: |- + return log(id(gas_resistance).state) + 0.04 * id(humidity).state; + state_class: "measurement" +text_sensor: + - platform: template + name: "BME680 IAQ Classification" + icon: "mdi:checkbox-marked-circle-outline" + lambda: |- + if (int(id(iaq).state) <= 50) { + return {"Excellent"}; + } + else if (int(id(iaq).state) <= 100) { + return {"Good"}; + } + else if (int(id(iaq).state) <= 150) { + return {"Lightly polluted"}; + } + else if (int(id(iaq).state) <= 200) { + return {"Moderately polluted"}; + } + else if (int(id(iaq).state) <= 250) { + return {"Heavily polluted"}; + } + else if (int(id(iaq).state) <= 350) { + return {"Severely polluted"}; + } + else if (int(id(iaq).state) <= 500) { + return {"Extremely polluted"}; + } + else { + return {"unknown"}; + } \ No newline at end of file diff --git a/esphome/common/bme680_bsec.yaml b/esphome/common/bme680_bsec.yaml new file mode 100644 index 0000000..12e3f23 --- /dev/null +++ b/esphome/common/bme680_bsec.yaml @@ -0,0 +1,106 @@ +bme680_bsec: + # id + # ----------- + # Identifier for this component, useful when working with multiple devices. + # Must be unique, and can be used in the sensor sections to refer to the correct device. + # Default: auto-computed + id: bme680_internal + + # i2c address + # ----------- + # Common values are: + # - 0x76 + # - 0x77 + # Default: 0x76 + address: 0x76 + + # Temperature offset + # ------------------ + # Useful if device is in enclosure and reads too high + # For example, if it reads 5C too high, set this to 5 + # This also corrects the relative humidity readings + # Default: 0 + temperature_offset: 0 + + # IAQ calculation mode + # -------------------- + # Available options: + # - static (for fixed position devices) + # - mobile (for on a person or other moveable devices) + # Default: static + iaq_mode: static + + # Supply voltage + # -------------------- + # Available options: + # - 3.3V + # - 1.8V + # Default: 3.3V + supply_voltage: 3.3V + + # Sample rate + # ----------- + # Available options: + # - lp (low power - samples every 3 seconds) + # - ulp (ultra-low power - samples every 5 minutes) + # Default: lp + sample_rate: ulp + + # Interval at which to save BSEC state + # ------------------------------------ + # Default: 6h + state_save_interval: 6h + +sensor: + - platform: bme680_bsec + # ID of the bme680_bsec component to use for the next sensors. + # Useful when working with multiple devices + bme680_bsec_id: bme680_internal + + temperature: + # Temperature in °C + name: "BME680 Temperature" + sample_rate: lp + filters: + - median + pressure: + # Pressure in hPa + name: "BME680 Pressure" + sample_rate: lp + filters: + - median + humidity: + # Relative humidity % + name: "BME680 Humidity" + sample_rate: lp + filters: + - median + gas_resistance: + # Gas resistance in Ω + name: "BME680 Gas Resistance" + filters: + - median + iaq: + # Indoor air quality value + name: "BME680 IAQ" + filters: + - median + iaq_accuracy: + # IAQ accuracy as a numeric value of 0, 1, 2, 3 + name: "BME680 Numeric IAQ Accuracy" + co2_equivalent: + # CO2 equivalent estimate in ppm + name: "BME680 CO2 Equivalent" + filters: + - median + breath_voc_equivalent: + # Volatile organic compounds equivalent estimate in ppm + name: "BME680 Breath VOC Equivalent" + filters: + - median + +text_sensor: + - platform: bme680_bsec + iaq_accuracy: + # IAQ accuracy as a text value of Stabilizing, Uncertain, Calibrating, Calibrated + name: "BME680 IAQ Accuracy" \ No newline at end of file diff --git a/esphome/common/bme680_multiple.yaml b/esphome/common/bme680_multiple.yaml new file mode 100644 index 0000000..df2bce7 --- /dev/null +++ b/esphome/common/bme680_multiple.yaml @@ -0,0 +1,61 @@ +# I2C bus for the BME680 devices +i2c: + - id: "i2cbus_bme" + sda: GPIO18 + scl: GPIO19 + scan: true + +# BME680 devices using BSEC library +bme680_bsec: + - id: bme680_internal + i2c_id: "i2cbus_bme" + address: 0x76 + - id: bme680_external + i2c_id: "i2cbus_bme" + address: 0x77 + +sensor: + # Sensors for the internal BME680 device + - platform: bme680_bsec + bme680_bsec_id: bme680_internal + temperature: + name: "IN_Temp" + pressure: + name: "IN_Press" + humidity: + name: "IN_RH" + iaq: + name: "IN_IAQ" + co2_equivalent: + name: "IN_CO2eq" + breath_voc_equivalent: + name: "IN_VOCeq" + + # Sensors for the external BME680 device + - platform: bme680_bsec + bme680_bsec_id: bme680_external + temperature: + name: "OUT_Temperatura" + pressure: + name: "OUT_Pressione" + humidity: + name: "OUT_RH" + iaq: + name: "OUT_IAQ" + co2_equivalent: + name: "OUT_CO2eq" + breath_voc_equivalent: + name: "OUT_VOCeq" + +text_sensor: + # Text sensor for the internal BME680 device + - platform: bme680_bsec + bme680_bsec_id: bme680_internal + iaq_accuracy: + name: "IN_IAQaccuracy" + + # Text sensor for the external BME680 device + - platform: bme680_bsec + bme680_bsec_id: bme680_external + iaq_accuracy: + name: "OUT_IAQaccuracy" \ No newline at end of file diff --git a/esphome/hvac-multisensor.yaml b/esphome/hvac-multisensor.yaml index acdf4a6..29083d1 100644 --- a/esphome/hvac-multisensor.yaml +++ b/esphome/hvac-multisensor.yaml @@ -8,13 +8,17 @@ substitutions: board: wemos_d1_mini32 static_ip: !secret hvac-multisensor-ip +# For i2c devices +# In this case it's just the display sda_pin: GPIO21 scl_pin: GPIO22 + door_pin: GPIO19 + one_wire_pin: GPIO26 - #one_wire_pin: GPIO14 + +# For the ultrasonic sensor trigger_pin: GPIO16 - #trigger_pin: GPIO04 echo_pin: GPIO13 #mdc_pin: GPIO23 @@ -133,7 +137,7 @@ sensor: trigger_pin: ${trigger_pin} echo_pin: ${echo_pin} id: ultrasonic_source - #update_interval: 5s + update_interval: 1s internal: True filters: - sliding_window_moving_average: diff --git a/groups.yaml b/groups.yaml index e574804..5e156ad 100644 --- a/groups.yaml +++ b/groups.yaml @@ -4,14 +4,14 @@ front_yard_plants: # does this work? # back to working here? - plant.plant_sensor_cea4 #Pepper - - plant.fineoffset_wh51_0ce593 #Hostas + - plant.hasta_soil_sensor #Hostas back_yard_plants: - plant.plant_sensor_3eb0 #Manly Deck Box - plant.plant_sensor_3eae #Golden Deck Box outdoor_plants: - - plant.fineoffset_wh51_0ce593 #Hostas + - plant.hasta_soil_sensor #Hostas ceiling_fans: - fan.master_bedroom @@ -208,7 +208,6 @@ person_bridget: entities: - device_tracker.bridget_s_fire_wifi - traverse: name: Traverse icon: mdi:car-estate diff --git a/lovelace/cameras/view-camera-08.yaml b/lovelace/cameras/view-camera-08.yaml index e1c610a..d7cf880 100644 --- a/lovelace/cameras/view-camera-08.yaml +++ b/lovelace/cameras/view-camera-08.yaml @@ -79,7 +79,7 @@ card: left: 40% top: 95% - type: state-icon - entity: input_boolean.white_bed_occupied + entity: binary_sensor.white_bed_occupied style: left: 60% top: 95% @@ -110,11 +110,11 @@ card: - type: conditional conditions: - - entity: input_boolean.white_bed_occupied + - entity: binary_sensor.white_bed_occupied state: "on" elements: - type: state-icon - entity: input_boolean.white_bed_occupied + entity: binary_sensor.white_bed_occupied style: top: 65% left: 80% diff --git a/lovelace/details/view-batteries.yaml b/lovelace/details/view-batteries.yaml index cabee25..243a16f 100644 --- a/lovelace/details/view-batteries.yaml +++ b/lovelace/details/view-batteries.yaml @@ -14,7 +14,7 @@ cards: - type: entities title: Ecowitt Batteries entities: - - entity: sensor.fineoffset_wh51_0ce593_battery + - entity: sensor.hasta_soil_sensor_battery name: Hostas - e593 - type: entities title: BLE Batteries @@ -87,4 +87,4 @@ cards: - 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 + - sensor.kitchen_multisensor_battery_level diff --git a/lovelace/details/view-hvac.yaml b/lovelace/details/view-hvac.yaml index 8f3df86..f5f4d45 100644 --- a/lovelace/details/view-hvac.yaml +++ b/lovelace/details/view-hvac.yaml @@ -1811,9 +1811,9 @@ sections: - value: below_horizon label: Night entities: - - entity: sensor.lacrosse_tx141thbv2_0_temperature + - entity: sensor.front_yard_thermostat_temperature name: Front Yard - - entity: sensor.acurite_592txr_a_temperature + - entity: sensor.back_yard_thermostat_temperature name: Back Yard - color: white entity: sensor.outdoor_temperature @@ -1875,64 +1875,64 @@ sections: cards: - type: horizontal-stack grid_options: - columns: full + columns: full cards: - - 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. -
-
+ - 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. +
+
column_span: 5 -cards: [] \ No newline at end of file +cards: [] diff --git a/lovelace/phone/back-yard.yaml b/lovelace/phone/back-yard.yaml index 929e71d..06de6f4 100644 --- a/lovelace/phone/back-yard.yaml +++ b/lovelace/phone/back-yard.yaml @@ -7,9 +7,9 @@ badges: [] cards: - type: vertical-stack cards: - - type: custom:mushroom-chips-card - chips: - - type: back + # - type: custom:mushroom-chips-card + # chips: + # - type: back - type: horizontal-stack cards: - hours_to_show: 24 diff --git a/lovelace/phone/blue-room.yaml b/lovelace/phone/blue-room.yaml index 2f87110..a423583 100644 --- a/lovelace/phone/blue-room.yaml +++ b/lovelace/phone/blue-room.yaml @@ -7,9 +7,9 @@ badges: [] cards: - type: vertical-stack cards: - - type: custom:mushroom-chips-card - chips: - - type: back + # - type: custom:mushroom-chips-card + # chips: + # - type: back - type: horizontal-stack cards: - hours_to_show: 24 diff --git a/lovelace/phone/computer-area.yaml b/lovelace/phone/computer-area.yaml index bdc090c..50b8467 100644 --- a/lovelace/phone/computer-area.yaml +++ b/lovelace/phone/computer-area.yaml @@ -5,9 +5,9 @@ path: computer-area icon: mdi:desktop-classic badges: [] cards: - - type: custom:mushroom-chips-card - chips: - - type: back + # - type: custom:mushroom-chips-card + # chips: + # - type: back - type: horizontal-stack cards: - hours_to_show: 24 diff --git a/lovelace/phone/dining-room.yaml b/lovelace/phone/dining-room.yaml index b48b386..3703525 100644 --- a/lovelace/phone/dining-room.yaml +++ b/lovelace/phone/dining-room.yaml @@ -7,9 +7,9 @@ badges: [] cards: - type: vertical-stack cards: - - type: custom:mushroom-chips-card - chips: - - type: back + # - type: custom:mushroom-chips-card + # chips: + # - type: back - type: horizontal-stack cards: - hours_to_show: 24 diff --git a/lovelace/phone/entryway.yaml b/lovelace/phone/entryway.yaml index 038bde4..c2459df 100644 --- a/lovelace/phone/entryway.yaml +++ b/lovelace/phone/entryway.yaml @@ -7,9 +7,9 @@ badges: [] cards: - type: vertical-stack cards: - - type: custom:mushroom-chips-card - chips: - - type: back + # - type: custom:mushroom-chips-card + # chips: + # - type: back - type: horizontal-stack cards: - hours_to_show: 24 diff --git a/lovelace/phone/front-room.yaml b/lovelace/phone/front-room.yaml index 0f044b1..28fcbb9 100644 --- a/lovelace/phone/front-room.yaml +++ b/lovelace/phone/front-room.yaml @@ -8,9 +8,9 @@ badges: [] sections: - type: grid cards: - - type: custom:mushroom-chips-card - chips: - - type: back + # - type: custom:mushroom-chips-card + # chips: + # - type: back - type: horizontal-stack cards: - hours_to_show: 24 diff --git a/lovelace/phone/front-yard.yaml b/lovelace/phone/front-yard.yaml index 350703d..24cb3b5 100644 --- a/lovelace/phone/front-yard.yaml +++ b/lovelace/phone/front-yard.yaml @@ -7,42 +7,42 @@ badges: [] cards: - type: vertical-stack cards: - - type: custom:mushroom-chips-card - chips: - - type: back + # - type: custom:mushroom-chips-card + # chips: + # - type: back - type: horizontal-stack cards: - type: custom:mushroom-template-card - primary: "{{states('sensor.lacrosse_tx141thbv2_0_temperature')}}°F" + primary: "{{states('sensor.front_yard_thermostat_temperature')}}°F" secondary: "" icon: mdi:thermometer - entity: sensor.lacrosse_tx141thbv2_0_temperature + entity: sensor.front_yard_thermostat_temperature icon_color: >- - {% if states('sensor.lacrosse_tx141thbv2_0_temperature')|float(default=0) < 30.0 %} + {% if states('sensor.front_yard_thermostat_temperature')|float(default=0) < 30.0 %} white - {%elif states('sensor.lacrosse_tx141thbv2_0_temperature')|float(default=0) < 60.0 %} + {%elif states('sensor.front_yard_thermostat_temperature')|float(default=0) < 60.0 %} blue - {%elif states('sensor.lacrosse_tx141thbv2_0_temperature')|float(default=0) < 85.0 %} + {%elif states('sensor.front_yard_thermostat_temperature')|float(default=0) < 85.0 %} green - {%elif states('sensor.lacrosse_tx141thbv2_0_temperature')|float(default=0) < 100.0 %} + {%elif states('sensor.front_yard_thermostat_temperature')|float(default=0) < 100.0 %} orange {%else%} red {%endif%} layout: vertical - type: custom:mushroom-template-card - primary: "{{states('sensor.lacrosse_tx141thbv2_0_humidity')}}%" + primary: "{{states('sensor.front_yard_thermostat_humidity')}}%" secondary: "" icon: mdi:water-percent - entity: sensor.lacrosse_tx141thbv2_0_humidity + entity: sensor.front_yard_thermostat_humidity icon_color: >- - {% if states('sensor.lacrosse_tx141thbv2_0_humidity')|float(default=0) < 20.0 %} + {% if states('sensor.front_yard_thermostat_humidity')|float(default=0) < 20.0 %} white - {%elif states('sensor.lacrosse_tx141thbv2_0_humidity')|float(default=0) < 40.0 %} + {%elif states('sensor.front_yard_thermostat_humidity')|float(default=0) < 40.0 %} grey - {%elif states('sensor.lacrosse_tx141thbv2_0_humidity')|float(default=0) < 60.0 %} + {%elif states('sensor.front_yard_thermostat_humidity')|float(default=0) < 60.0 %} green - {%elif states('sensor.lacrosse_tx141thbv2_0_humidity')|float(default=0) < 80.0 %} + {%elif states('sensor.front_yard_thermostat_humidity')|float(default=0) < 80.0 %} cyan {%else%} blue diff --git a/lovelace/phone/furnace-room.yaml b/lovelace/phone/furnace-room.yaml index a34fbba..b9f3a41 100644 --- a/lovelace/phone/furnace-room.yaml +++ b/lovelace/phone/furnace-room.yaml @@ -7,9 +7,9 @@ badges: [] cards: - type: vertical-stack cards: - - type: custom:mushroom-chips-card - chips: - - type: back + # - type: custom:mushroom-chips-card + # chips: + # - type: back - type: horizontal-stack cards: - hours_to_show: 24 diff --git a/lovelace/phone/garage.yaml b/lovelace/phone/garage.yaml index 3af821d..53e06d7 100644 --- a/lovelace/phone/garage.yaml +++ b/lovelace/phone/garage.yaml @@ -7,9 +7,9 @@ badges: [] cards: - type: vertical-stack cards: - - type: custom:mushroom-chips-card - chips: - - type: back + # - type: custom:mushroom-chips-card + # chips: + # - type: back - type: horizontal-stack cards: - hours_to_show: 24 diff --git a/lovelace/phone/great-room.yaml b/lovelace/phone/great-room.yaml index c26364f..a19a12b 100644 --- a/lovelace/phone/great-room.yaml +++ b/lovelace/phone/great-room.yaml @@ -8,9 +8,9 @@ type: sections sections: - type: grid cards: - - type: custom:mushroom-chips-card - chips: - - type: back + # - type: custom:mushroom-chips-card + # chips: + # - type: back - type: horizontal-stack cards: - hours_to_show: 24 diff --git a/lovelace/phone/home.yaml b/lovelace/phone/home.yaml index 47222f2..f5d28db 100644 --- a/lovelace/phone/home.yaml +++ b/lovelace/phone/home.yaml @@ -17,9 +17,9 @@ cards: - type: conditional conditions: - entity: switch.opensprinkler_enabled - state: 'on' + state: "on" - entity: input_boolean.sprinkler_is_winterized - state: 'off' + state: "off" chip: type: entity entity: sensor.sprinkler_current_status @@ -53,7 +53,7 @@ cards: - type: template entity: group.my_exterior_doors - icon: > + 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 @@ -72,7 +72,7 @@ cards: - type: conditional conditions: - entity: input_boolean.clint_needs_am_meds - state: 'on' + state: "on" chip: type: entity entity: input_boolean.clint_needs_am_meds @@ -84,7 +84,7 @@ cards: - type: conditional conditions: - entity: input_boolean.clint_needs_pm_meds - state: 'on' + state: "on" chip: type: entity entity: input_boolean.clint_needs_pm_meds @@ -96,11 +96,11 @@ cards: - type: conditional conditions: - entity: sensor.dishwasher - state_not: 'idle' + state_not: "idle" chip: type: template entity: input_boolean.empty_dishwasher - icon: > + icon: > {% if is_state('sensor.dishwasher','running')-%} mdi:dishwasher {% elif is_state('sensor.dishwasher','pending')-%} @@ -121,11 +121,11 @@ cards: - type: conditional conditions: - entity: sensor.washing_machine - state_not: 'idle' + state_not: "idle" chip: type: template entity: input_boolean.swap_laundry - icon: > + icon: > {% if is_state('sensor.washing_machine','running')-%} mdi:washing-machine {% elif is_state('sensor.washing_machine','pending')-%} @@ -146,11 +146,11 @@ cards: - type: conditional conditions: - entity: sensor.tumble_dryer - state_not: 'idle' + state_not: "idle" chip: type: template entity: input_boolean.fold_clothes - icon: > + icon: > {% if is_state('sensor.tumble_dryer','running')-%} mdi:tumble-dryer {% elif is_state('sensor.tumble_dryer','pending')-%} @@ -171,7 +171,7 @@ cards: - type: conditional conditions: - entity: alert.garage_door - state: 'on' + state: "on" chip: type: entity entity: alert.garage_door @@ -293,8 +293,7 @@ cards: - type: vertical-stack cards: - type: custom:mushroom-title-card - title: Rooms - subtitle: Upstairs + title: Upstairs - type: horizontal-stack cards: - type: custom:mushroom-template-card @@ -309,7 +308,7 @@ cards: secondary: |- {{states('sensor.nursery_multisensor_air_temperature')}}°F {{states('sensor.nursery_multisensor_humidity')}}% - icon_color: '{{iif(is_state(''light.nursery_hue'',''on''),''yellow'')}}' + icon_color: "{{iif(is_state('light.nursery_hue','on'),'yellow')}}" multiline_secondary: true layout: vertical - type: custom:mushroom-template-card @@ -325,7 +324,7 @@ cards: {{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'')}}' + icon_color: "{{iif(is_state('light.master_bedroom_hue','on'),'yellow')}}" multiline_secondary: true layout: vertical - type: custom:mushroom-template-card @@ -340,7 +339,7 @@ cards: 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'')}}' + icon_color: "{{iif(is_state('light.master_bathroom_hue','on'),'yellow')}}" multiline_secondary: true layout: vertical - type: horizontal-stack @@ -357,7 +356,7 @@ cards: 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'')}}' + icon_color: "{{iif(is_state('light.front_room_hue','on'),'yellow')}}" multiline_secondary: true layout: vertical - type: custom:mushroom-template-card @@ -372,7 +371,7 @@ cards: secondary: |- {{states('sensor.kitchen_multisensor_air_temperature')}}°F {{states('sensor.kitchen_multisensor_humidity')}}% - icon_color: '{{iif(is_state(''light.kitchen_hue'',''on''),''yellow'')}}' + icon_color: "{{iif(is_state('light.kitchen_hue','on'),'yellow')}}" multiline_secondary: true layout: vertical - type: custom:mushroom-template-card @@ -387,13 +386,13 @@ cards: 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'')}}' + 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 + title: Ground Level - type: horizontal-stack cards: - type: custom:mushroom-template-card @@ -408,7 +407,22 @@ cards: secondary: |- {{states('sensor.entryway_temperature')}}°F {{states('sensor.thermostat_humidity')}}% - icon_color: '{{iif(is_state(''light.entryway_hue'',''on''),''yellow'')}}' + icon_color: "{{iif(is_state('light.entryway_hue','on'),'yellow')}}" + multiline_secondary: true + layout: vertical + - type: custom:mushroom-template-card + primary: Front Porch + icon: mdi:door + entity: light.front_porch_overhead + tap_action: + action: navigate + navigation_path: garage + hold_action: + action: toggle + secondary: |- + {{states('sensor.front_yard_thermostat_temperature')}}°F + {{states('sensor.front_yard_thermostat_humidity')}}% + icon_color: "{{iif(is_state('light.front_porch_overhead','on'),'yellow')}}" multiline_secondary: true layout: vertical - type: custom:mushroom-template-card @@ -423,7 +437,7 @@ cards: secondary: |- {{states('sensor.garage_multisensor_air_temperature')}}°F {{states('sensor.garage_multisensor_humidity')}}% - icon_color: '{{iif(is_state(''light.garage_overhead'',''on''),''yellow'')}}' + icon_color: "{{iif(is_state('light.garage_overhead','on'),'yellow')}}" multiline_secondary: true layout: vertical - type: horizontal-stack @@ -440,7 +454,7 @@ cards: secondary: |- {{states('sensor.front_porch_temperature')}}°F {{states('sensor.garage_multisensor_humidity')}}% - icon_color: '{{iif(is_state(''light.front_porch_overhead'',''on''),''yellow'')}}' + icon_color: "{{iif(is_state('light.front_porch_overhead','on'),'yellow')}}" multiline_secondary: true layout: vertical - type: custom:mushroom-template-card @@ -453,9 +467,24 @@ cards: hold_action: action: toggle secondary: |- - {{states('sensor.deck_temperature')}}°F - {{states('sensor.garage_multisensor_humidity')}}% - icon_color: '{{iif(is_state(''light.deck'',''on''),''yellow'')}}' + {{states('sensor.back_yard_thermostat_temperature')}}°F + {{states('sensor.back_yard_thermostat_humidity')}}% + icon_color: "{{iif(is_state('light.deck','on'),'yellow')}}" + multiline_secondary: true + layout: vertical + - type: custom:mushroom-template-card + primary: Deck + icon: mdi:grill + entity: light.deck + tap_action: + action: navigate + navigation_path: back-yard + hold_action: + action: toggle + secondary: |- + {{states('sensor.back_yard_thermostat_temperature')}}°F + {{states('sensor.back_yard_thermostat_humidity')}}% + icon_color: "{{iif(is_state('light.deck','on'),'yellow')}}" multiline_secondary: true layout: vertical - type: vertical-stack @@ -477,7 +506,7 @@ cards: {{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'')}}' + icon_color: "{{iif(is_state('light.computer_area_hue','on'),'yellow')}}" multiline_secondary: true layout: vertical - type: custom:mushroom-template-card @@ -492,7 +521,7 @@ cards: 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'')}}' + icon_color: "{{iif(is_state('light.great_room_hue','on'),'yellow')}}" multiline_secondary: true layout: vertical - type: custom:mushroom-template-card @@ -507,7 +536,7 @@ cards: 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'')}}' + icon_color: "{{iif(is_state('light.utility_room_vanity','on'),'yellow')}}" multiline_secondary: true layout: vertical - type: horizontal-stack @@ -524,7 +553,7 @@ cards: 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'')}}' + icon_color: "{{iif(is_state('light.blue_room_hue','on'),'yellow')}}" multiline_secondary: true layout: vertical - type: custom:mushroom-template-card @@ -539,7 +568,7 @@ cards: secondary: |- {{states('sensor.mancave_thermostat_temperature')}}°F {{states('sensor.mancave_thermostat_humidity')}}% - icon_color: '{{iif(is_state(''light.mancave'',''on''),''yellow'')}}' + icon_color: "{{iif(is_state('light.mancave','on'),'yellow')}}" multiline_secondary: true layout: vertical - type: custom:mushroom-template-card @@ -554,6 +583,6 @@ cards: secondary: |- {{states('sensor.furnace_room_thermostat_temperature')}}°F {{states('sensor.furnace_room_thermostat_humidity')}}% - icon_color: '{{iif(is_state(''light.furnace_room'',''on''),''yellow'')}}' + icon_color: "{{iif(is_state('light.furnace_room','on'),'yellow')}}" multiline_secondary: true - layout: vertical \ No newline at end of file + layout: vertical diff --git a/lovelace/phone/kitchen.yaml b/lovelace/phone/kitchen.yaml index 33c5e5f..6697d15 100644 --- a/lovelace/phone/kitchen.yaml +++ b/lovelace/phone/kitchen.yaml @@ -7,9 +7,9 @@ badges: [] cards: - type: vertical-stack cards: - - type: custom:mushroom-chips-card - chips: - - type: back + # - type: custom:mushroom-chips-card + # chips: + # - type: back - type: horizontal-stack cards: - hours_to_show: 24 @@ -120,11 +120,11 @@ cards: - type: horizontal-stack cards: - type: custom:mushroom-entity-card - entity: sensor.acurite_986_2f_42383_temperature + entity: sensor.kitchen_freezer_thermostat_temperature name: Freezer layout: vertical - type: custom:mushroom-entity-card - entity: sensor.acurite_986_1r_48226_temperature + entity: sensor.kitchen_fridge_thermostat_temperature name: Fridge layout: vertical - type: vertical-stack diff --git a/lovelace/phone/mancave.yaml b/lovelace/phone/mancave.yaml index e1d5be9..a4f9d9e 100644 --- a/lovelace/phone/mancave.yaml +++ b/lovelace/phone/mancave.yaml @@ -7,9 +7,9 @@ badges: [] cards: - type: vertical-stack cards: - - type: custom:mushroom-chips-card - chips: - - type: back + # - type: custom:mushroom-chips-card + # chips: + # - type: back - type: horizontal-stack cards: - hours_to_show: 24 diff --git a/lovelace/phone/master-bathroom.yaml b/lovelace/phone/master-bathroom.yaml index ecdfb8e..267a62d 100644 --- a/lovelace/phone/master-bathroom.yaml +++ b/lovelace/phone/master-bathroom.yaml @@ -7,9 +7,9 @@ badges: [] cards: - type: vertical-stack cards: - - type: custom:mushroom-chips-card - chips: - - type: back + # - type: custom:mushroom-chips-card + # chips: + # - type: back - type: horizontal-stack cards: - hours_to_show: 24 diff --git a/lovelace/phone/master-bedroom.yaml b/lovelace/phone/master-bedroom.yaml index 2c4c2be..6ee495a 100644 --- a/lovelace/phone/master-bedroom.yaml +++ b/lovelace/phone/master-bedroom.yaml @@ -7,9 +7,9 @@ badges: [] cards: - type: vertical-stack cards: - - type: custom:mushroom-chips-card - chips: - - type: back + # - type: custom:mushroom-chips-card + # chips: + # - type: back - type: horizontal-stack cards: - hours_to_show: 24 diff --git a/lovelace/phone/nursery.yaml b/lovelace/phone/nursery.yaml index db6dc6e..8babbac 100644 --- a/lovelace/phone/nursery.yaml +++ b/lovelace/phone/nursery.yaml @@ -8,9 +8,9 @@ cards: # Header and HVAC - type: vertical-stack cards: - - type: custom:mushroom-chips-card - chips: - - type: back + # - type: custom:mushroom-chips-card + # chips: + # - type: back - type: horizontal-stack cards: - hours_to_show: 24 @@ -331,29 +331,15 @@ cards: target: entity_id: button.black_bed_manual_tare layout: vertical - # - type: custom:mushroom-template-card - # entity: input_boolean.white_bed_occupied - # icon: mdi:bed - # icon_color: >- - # {% if(is_state('input_boolean.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: 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 + {% endif %} + primary: White Bed + layout: vertical - type: horizontal-stack cards: - type: custom:mushroom-entity-card diff --git a/lovelace/phone/plants.yaml b/lovelace/phone/plants.yaml index e541c48..ce2dd0c 100644 --- a/lovelace/phone/plants.yaml +++ b/lovelace/phone/plants.yaml @@ -19,13 +19,13 @@ cards: max: 25 segments: - from: 5 - color: '#4dab6d' + color: "#4dab6d" - from: 10 - color: '#c1da64' + color: "#c1da64" - from: 15 - color: '#fabd57' + color: "#fabd57" - from: 20.6 - color: '#ee4d55' + color: "#ee4d55" name: Recent Precipitation - type: gauge entity: input_number.sprinkler_maximum_temperature_measured @@ -36,11 +36,11 @@ cards: - from: 61 color: var(--info-color) - from: 70 - color: '#4dab6d' + color: "#4dab6d" - from: 79 - color: '#c1da64' + color: "#c1da64" - from: 88 - color: '#fabd57' + color: "#fabd57" name: Recent High Temp - type: gauge entity: sensor.sprinkler_days_since_last_watering @@ -49,18 +49,19 @@ cards: max: 4 segments: - from: 0 - color: '#ee4d55' + color: "#ee4d55" - from: 1 - color: '#fabd57' + color: "#fabd57" - from: 2 - color: '#c1da64' + color: "#c1da64" - from: 3 - color: '#4dab6d' + 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/hasta_soil_sensor.yaml + - !include /config/lovelace/plant-cards/daisy_soil_sensor.yaml - type: vertical-stack view_layout: @@ -74,7 +75,7 @@ cards: action: toggle - type: entities entities: - - entity: sensor.ecowitt_wh40_21917_precipitation + - entity: sensor.rain_gauge_precipitation secondary_info: last-updated - entity: binary_sensor.is_raining secondary_info: last-changed diff --git a/lovelace/phone/utility-room.yaml b/lovelace/phone/utility-room.yaml index 7ba617f..dcd49a8 100644 --- a/lovelace/phone/utility-room.yaml +++ b/lovelace/phone/utility-room.yaml @@ -7,9 +7,9 @@ badges: [] cards: - type: vertical-stack cards: - - type: custom:mushroom-chips-card - chips: - - type: back + # - type: custom:mushroom-chips-card + # chips: + # - type: back - type: horizontal-stack cards: - hours_to_show: 24 diff --git a/lovelace/plant-cards/fineoffset_wh51_0ce593.yaml b/lovelace/plant-cards/daisy_soil_sensor.yaml similarity index 55% rename from lovelace/plant-cards/fineoffset_wh51_0ce593.yaml rename to lovelace/plant-cards/daisy_soil_sensor.yaml index c9c97cb..5871a18 100644 --- a/lovelace/plant-cards/fineoffset_wh51_0ce593.yaml +++ b/lovelace/plant-cards/daisy_soil_sensor.yaml @@ -1,4 +1,5 @@ type: vertical-stack cards: - type: plant-status - entity: plant.fineoffset_wh51_0ce593 + entity: plant.daisy_soil_sensor + \ No newline at end of file diff --git a/lovelace/plant-cards/hasta_soil_sensor.yaml b/lovelace/plant-cards/hasta_soil_sensor.yaml new file mode 100644 index 0000000..e3450e0 --- /dev/null +++ b/lovelace/plant-cards/hasta_soil_sensor.yaml @@ -0,0 +1,4 @@ +type: vertical-stack +cards: + - type: plant-status + entity: plant.hasta_soil_sensor diff --git a/lovelace/room_cards/back_yard.yaml b/lovelace/room_cards/back_yard.yaml index 7b66c7d..6f15f5d 100644 --- a/lovelace/room_cards/back_yard.yaml +++ b/lovelace/room_cards/back_yard.yaml @@ -25,13 +25,13 @@ elements: # text-transform: capitalize - type: state-label - entity: sensor.acurite_592txr_a_temperature + entity: sensor.back_yard_thermostat_temperature style: left: 15% top: 35% font-size: 180% - type: state-label - entity: sensor.acurite_592txr_a_humidity + entity: sensor.back_yard_thermostat_humidity style: left: 85% top: 35% diff --git a/lovelace/room_cards/front_yard.yaml b/lovelace/room_cards/front_yard.yaml index 6146d0d..fa46a0b 100644 --- a/lovelace/room_cards/front_yard.yaml +++ b/lovelace/room_cards/front_yard.yaml @@ -30,13 +30,13 @@ elements: text-transform: capitalize - type: state-label - entity: sensor.lacrosse_tx141thbv2_0_temperature + entity: sensor.front_yard_thermostat_temperature style: left: 15% top: 35% font-size: 180% - type: state-label - entity: sensor.lacrosse_tx141thbv2_0_humidity + entity: sensor.front_yard_thermostat_humidity style: left: 85% top: 35% diff --git a/lovelace/view-charts.yaml b/lovelace/view-charts.yaml index 4483247..93b01ed 100644 --- a/lovelace/view-charts.yaml +++ b/lovelace/view-charts.yaml @@ -50,7 +50,7 @@ cards: - sensor.disk_use_percent_home font_size: 50 name: HA Disk - hours_to_show: 96 + hours_to_show: 4 points_per_hour: 3 show: fill: false diff --git a/lovelace/view-devices.yaml b/lovelace/view-devices.yaml index 66d9074..04481f2 100644 --- a/lovelace/view-devices.yaml +++ b/lovelace/view-devices.yaml @@ -15,6 +15,7 @@ cards: show_header_toggle: false entities: - entity: device_tracker.chevrolet_mylink + - entity: device_tracker.chevrolet_traverse_location - type: entities title: Bridget's Tablet diff --git a/lovelace/view-ha-floorplan.yaml b/lovelace/view-ha-floorplan.yaml index 2e31bd9..0f4e1b1 100644 --- a/lovelace/view-ha-floorplan.yaml +++ b/lovelace/view-ha-floorplan.yaml @@ -97,7 +97,8 @@ cards: - entities: - plant.plant_sensor_cea4 - plant.plant_sensor_3eae - - plant.fineoffset_wh51_0ce593 + - plant.hasta_soil_sensor + - plant.daisy_soil_sensor - plant.plant_sensor_3eb0 states: - state: "problem" @@ -386,14 +387,14 @@ cards: # Outside is expected to be colder/hotter - entities: - - sensor.lacrosse_tx141thbv2_0_temperature + - sensor.front_yard_thermostat_temperature - sensor.front_porch_temperature - sensor.deck_temperature - sensor.garage_multisensor_air_temperature # - sensor.hvac_multisensor_supply # - sensor.hvac_multisensor_return # - sensor.hvac_multisensor_ambient - - sensor.acurite_592txr_a_temperature + - sensor.back_yard_thermostat_temperature - sensor.outdoor_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 @@ -415,7 +416,7 @@ cards: ' - entities: - - sensor.acurite_986_1r_48226_temperature + - sensor.kitchen_fridge_thermostat_temperature text_template: '${entity.state ? Math.floor(entity.state) : "unknown"}' class_template: ' var temp = parseFloat(entity.state.replace("°", "")); @@ -430,7 +431,7 @@ cards: ' - entities: - - sensor.acurite_986_2f_42383_temperature + - sensor.kitchen_freezer_thermostat_temperature text_template: '${entity.state ? Math.floor(entity.state) : "unknown"}' class_template: ' var temp = parseFloat(entity.state.replace("°", "")); @@ -490,9 +491,9 @@ cards: ' - entities: - - sensor.lacrosse_tx141thbv2_0_humidity + - sensor.front_yard_thermostat_humidity - sensor.garage_multisensor_humidity - - sensor.acurite_592txr_a_humidity + - sensor.back_yard_thermostat_humidity - sensor.outdoor_humidity text_template: '${entity.state ? Math.ceil(entity.state) : "unknown"} %' class_template: ' diff --git a/lovelace/view-more-charts.yaml b/lovelace/view-more-charts.yaml index c9b6172..ce808fb 100644 --- a/lovelace/view-more-charts.yaml +++ b/lovelace/view-more-charts.yaml @@ -16,14 +16,12 @@ cards: name: Nursery - entity: sensor.thermostat_temperature name: Thermostat - - entity: sensor.bar_temperature + - entity: sensor.dining_room_multisensor_air_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 @@ -33,12 +31,14 @@ cards: name: Master Bedroom - entity: sensor.nursery_multisensor_humidity name: Nursery + - entity: sensor.thermostat_humidity + name: Thermostat + - entity: sensor.dining_room_multisensor_humidity + name: Dining Room - 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 @@ -57,14 +57,12 @@ 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.mancave_thermostat_temperature + name: Mancave + - entity: sensor.blue_room_multisensor_air_temperature + name: Blue Room - entity: sensor.furnace_room_thermostat_temperature name: Furnace Room hours_to_show: 12 @@ -78,7 +76,7 @@ cards: name: Great Room - entity: sensor.mancave_thermostat_humidity name: Mancave - - entity: sensor.blue_room_thermostat_humidity + - entity: sensor.blue_room_multisensor_humidity name: Blue Room - entity: sensor.furnace_room_thermostat_humidity name: Furnace Room @@ -137,7 +135,7 @@ cards: name: Nursery - entity: sensor.front_room_light_level name: Front Room - - entity: sensor.bar_light_level + - entity: sensor.dining_room_multisensor_illuminance name: Dining Room - entity: sensor.entryway_light_level name: Entryway @@ -153,6 +151,8 @@ cards: name: Computer Area - entity: sensor.great_room_multisensor_illuminance name: Great Room + - entity: sensor.blue_room_multisensor_illuminance + name: Blue Room hours_to_show: 12 refresh_interval: 60 title: Downstairs Light Level diff --git a/lovelace/view-overview.yaml b/lovelace/view-overview.yaml index 89ee8fc..01eaa82 100644 --- a/lovelace/view-overview.yaml +++ b/lovelace/view-overview.yaml @@ -843,7 +843,7 @@ badges: navigation_path: /phone-yaml/plants hold_action: action: more-info - - entity: plant.fineoffset_wh51_0ce593 + - entity: plant.hasta_soil_sensor name: Hostas tap_action: action: navigate diff --git a/lovelace/view-people.yaml b/lovelace/view-people.yaml index 57dc06b..d25b747 100644 --- a/lovelace/view-people.yaml +++ b/lovelace/view-people.yaml @@ -43,6 +43,7 @@ cards: - type: calendar entities: - calendar.clint + - calendar.wmu_calendar - type: vertical-stack cards: @@ -114,4 +115,5 @@ cards: - type: calendar entities: - calendar.bridget - - calendar.my_custody + - calendar.allegan_public_schools + - calendar.west_ward_elementary diff --git a/www/floorplan/fullsized_floorplan.svg b/www/floorplan/fullsized_floorplan.svg index 45606b5..1a51c07 100644 --- a/www/floorplan/fullsized_floorplan.svg +++ b/www/floorplan/fullsized_floorplan.svg @@ -39,8 +39,8 @@ inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="0.02" - inkscape:cx="48525" - inkscape:cy="32825" + inkscape:cx="56275" + inkscape:cy="10675" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" @@ -49,7 +49,7 @@ showborder="true" inkscape:window-width="1920" inkscape:window-height="1009" - inkscape:window-x="1912" + inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1" showguides="true" @@ -1278,20 +1278,20 @@ transform="translate(-33.504291,-4.0861608)"> + inkscape:label="sensor.kitchen_freezer_thermostat_temperature_2" /> + inkscape:label="sensor.kitchen_fridge_thermostat_temperature_2" /> @@ -3864,7 +3864,7 @@ d="m 720.0222,-17679.003 a 4.5,4.5 0 0 1 4.99225,3.941 4.5,4.5 0 0 1 -3.93422,4.997 4.5,4.5 0 0 1 -5.00204,-3.928 4.5,4.5 0 0 1 3.92178,-5.007" inkscape:label="light.storage_room" sodipodi:arc-type="arc" /> - inkscape:label="light.front_porch_overhead" /> --------- + inkscape:label="plant.hasta_soil_sensor_1" /> + inkscape:label="plant.hasta_soil_sensor_1" /> + inkscape:label="plant.hasta_soil_sensor_1" /> + inkscape:label="plant.hasta_soil_sensor_1" /> + inkscape:label="plant.hasta_soil_sensor_2" />