diff --git a/automations/rooms/front_room/front_room_not_occupied.yaml b/automations/rooms/front_room/front_room_not_occupied.yaml index 1640ab4..be29402 100644 --- a/automations/rooms/front_room/front_room_not_occupied.yaml +++ b/automations/rooms/front_room/front_room_not_occupied.yaml @@ -13,7 +13,7 @@ trigger: - input_boolean.home_occupied - binary_sensor.front_room_occupied to: 'off' - for: '00:05:00' + for: '00:15:00' # - platform: time_pattern # minutes: "/5" diff --git a/components/binary_sensors/template.yaml b/components/binary_sensors/template.yaml index c019f54..5318997 100644 --- a/components/binary_sensors/template.yaml +++ b/components/binary_sensors/template.yaml @@ -179,7 +179,7 @@ sensors: # delay_off: # seconds: 30 # icon_template: mdi:washing-machine - # availability_template: "{{ states('sensor.pm_laundry_plug_w') not in ['unkown', 'unavailable'] }}" + # availability_template: "{{ states('sensor.pm_laundry_plug_w') not in ['unknown', 'unavailable'] }}" # value_template: "{{ states('sensor.pm_laundry_plug_w')|float(default=0) >= states('input_number.washing_machine_on')|float(default=0) }}" # attribute_templates: # model_number: 'WF45R6100AW/US' @@ -187,14 +187,13 @@ sensors: # power: "{{ states('sensor.pm_laundry_plug_w') | float(default=0)}}" # target: "{{ states('input_number.washing_machine_on') | float(default=0)}}" - # tumble_dryer: # unique_id: binary-sensor-tumble-dryer # friendly_name: Tumble Dryer # delay_off: # seconds: 30 # icon_template: mdi:tumble-dryer - # availability_template: "{{ states('sensor.pm_dryer_w') not in ['unkown', 'unavailable'] }}" + # availability_template: "{{ states('sensor.pm_dryer_w') not in ['unknown', 'unavailable'] }}" # value_template: "{{ states('sensor.pm_dryer_w')|float(default=0) >= states('input_number.tumble_dryer_on')|float(default=0) }}" # attribute_templates: # model_number: 'DVE45R6100W/A3' @@ -210,7 +209,7 @@ sensors: # delay_off: # seconds: 30 # icon_template: mdi:dishwasher - # availability_template: "{{ states('sensor.pm_dishwasher_w') not in ['unkown', 'unavailable'] }}" + # availability_template: "{{ states('sensor.pm_dishwasher_w') not in ['unknown', 'unavailable'] }}" # value_template: "{{ states('sensor.pm_dishwasher_w')|float(default=0) >= states('input_number.dishwasher_on')|float(default=0) }}" # attribute_templates: # model_number: 'MDB6769PAS1' @@ -226,20 +225,19 @@ sensors: value_template: "{{ states('sensor.pm_stove_w') | float(default=0) > states('input_number.stove_on') | float(default=0) }}" icon_template: mdi:stove attribute_templates: - model_number: 'WFE505W0JS3' - serial_number: 'RB4659869' + model_number: "WFE505W0JS3" + serial_number: "RB4659869" power: "{{ states('sensor.pm_stove_w') | float(default=0)}}" oven_temperature: "{{ iif(is_state('sensor.oven_temperature', 'unavailable'), 'unavailable', states('sensor.oven_temperature') | float(default=0)) }}" - microwave: unique_id: binary-sensor-microwave friendly_name: Microwave value_template: "{{ states('sensor.pm_microwave_plug_w') | float(default=0) > states('input_number.microwave_on') | float(default=0) }}" icon_template: mdi:microwave attribute_templates: - model_number: 'testmodel' - serial_number: 'testserial' + model_number: "testmodel" + serial_number: "testserial" power: "{{ states('sensor.pm_microwave_plug_w') | float(default=0)}}" furnace: @@ -248,8 +246,8 @@ sensors: value_template: "{{ states('sensor.pm_furnace_w') | float(default=0) > states('input_number.furnace_on') | float(default=0) }}" icon_template: mdi:radiator attribute_templates: - model_number: 'testmodel' - serial_number: 'testserial' + model_number: "testmodel" + serial_number: "testserial" power: "{{ states('sensor.pm_furnace_w') | float(default=0)}}" heat_pump: @@ -258,8 +256,8 @@ sensors: value_template: "{{ states('sensor.pm_heat_pump_w') | float(default=0) > states('input_number.heat_pump_on') | float(default=0) }}" icon_template: mdi:air-filter attribute_templates: - model_number: 'testmodel' - serial_number: 'testserial' + model_number: "testmodel" + serial_number: "testserial" power: "{{ states('sensor.pm_heat_pump_w') | float(default=0)}}" sump_pump: @@ -268,8 +266,8 @@ sensors: value_template: "{{ states('sensor.pm_sump_pump_plug_w') | float(default=0) > states('input_number.sump_pump_on') | float(default=0) }}" icon_template: mdi:pump attribute_templates: - model_number: 'testmodel' - serial_number: 'testserial' + model_number: "testmodel" + serial_number: "testserial" power: "{{ states('sensor.pm_sump_pump_plug_w') | float(default=0)}}" something_open_hvac_on: @@ -371,7 +369,6 @@ sensors: {{ 'false' }} {% endif %} - # Moved to temperature_management.yaml # Is it more than 5 degrees warmer outside? # warmer_outside: @@ -396,7 +393,6 @@ sensors: # {{ 'false' }} # {% endif %} - is_dark: unique_id: templatebinarysensor.is_dark friendly_name: Is Dark @@ -410,11 +406,11 @@ sensors: is_daylight: unique_id: templatebinarysensor.is_daylight friendly_name: Is Daylight - value_template: "{{ states('sensor.front_porch_light_level') | int(0) >= states('input_number.is_daylight') | int(0) }}" + value_template: "{{ states('sensor.front_porch_light_level') | int(0) >= states('input_number.is_daylight') | int(0) }}" garage_open_nobody_home: unique_id: templatebinarysensor.garage_open_nobody_home - friendly_name: 'Garage Open Nobody Home' + friendly_name: "Garage Open Nobody Home" value_template: >- {% if is_state('cover.garage_door', 'open') %} {% if is_state('input_boolean.home_occupied', 'off') %} @@ -704,7 +700,7 @@ sensors: take_trash_out: unique_id: templatesensor.take_trash_out - friendly_name: 'Take Trash Out' + friendly_name: "Take Trash Out" icon_template: mdi:trash-can value_template: "{{ is_state('calendar.trash_schedule','on') or state_attr('calendar.trash_schedule','offset_reached') and is_state('input_boolean.trash_out','off') }}" @@ -753,4 +749,4 @@ sensors: value_template: "{{is_state('binary_sensor.kitchen_fridge_door_contact','on') }}" icon_template: mdi:fridge-variant delay_on: - minutes: 3 \ No newline at end of file + minutes: 3 diff --git a/components/packages/appliances/dishwasher.yaml b/components/packages/appliances/dishwasher.yaml index e8b4544..72af553 100644 --- a/components/packages/appliances/dishwasher.yaml +++ b/components/packages/appliances/dishwasher.yaml @@ -1,42 +1,42 @@ template: - binary_sensor: - - name: Dishwasher - unique_id: templatebinarysensor.dishwasher - icon: mdi:dishwasher - delay_on: "{{states('input_number.dishwasher_delay_on') | float(default=0) }}" - delay_off: "{{states('input_number.dishwasher_delay_off') | float(default=0) }}" - availability: "{{ states('sensor.pm_dishwasher_w') not in ['unkown', 'unavailable'] }}" - attributes: - model_number: 'MDB6769PAS1' - serial_number: 'F24407234' - power: "{{ states('sensor.pm_dishwasher_w') | float(default=0)}}" - target: "{{ states('input_number.dishwasher_on') | float(default=0)}}" - state: "{{ states('sensor.pm_dishwasher_w')|float(default=0) >= states('input_number.dishwasher_on')|float(default=0) }}" + - name: Dishwasher + unique_id: templatebinarysensor.dishwasher + icon: mdi:dishwasher + delay_on: "{{states('input_number.dishwasher_delay_on') | float(default=0) }}" + delay_off: "{{states('input_number.dishwasher_delay_off') | float(default=0) }}" + availability: "{{ states('sensor.pm_dishwasher_w') not in ['unknown', 'unavailable'] }}" + attributes: + model_number: "MDB6769PAS1" + serial_number: "F24407234" + power: "{{ states('sensor.pm_dishwasher_w') | float(default=0)}}" + target: "{{ states('input_number.dishwasher_on') | float(default=0)}}" + state: "{{ states('sensor.pm_dishwasher_w')|float(default=0) >= states('input_number.dishwasher_on')|float(default=0) }}" - sensor: - - name: Dishwasher - unique_id: templatesensor_dishwasher - state: > - {% if is_state('binary_sensor.dishwasher','on')%} - running - {% elif is_state('binary_sensor.dishwasher','off') and is_state('input_boolean.empty_dishwasher','on') %} - pending - {% else %} - idle - {% endif %} - icon: > - {% if is_state('sensor.dishwasher','idle') %} - mdi:dishwasher-off - {% elif is_state('sensor.dishwasher','pending') %} - mdi:dishwasher-alert - {% else %} - mdi:dishwasher - {% endif %} - attributes: - model_number: 'MDB6769PAS1' - serial_number: 'F24407234' - power: "{{ states('sensor.pm_dishwasher_w') | float(default=0)}}" - target: "{{ states('input_number.dishwasher_on') | float(default=0)}}" + - name: Dishwasher + unique_id: templatesensor_dishwasher + state: > + {% if is_state('binary_sensor.dishwasher','on')%} + running + {% elif is_state('binary_sensor.dishwasher','off') and is_state('input_boolean.empty_dishwasher','on') %} + pending + {% else %} + idle + {% endif %} + icon: > + {% if is_state('sensor.dishwasher','idle') %} + mdi:dishwasher-off + {% elif is_state('sensor.dishwasher','pending') %} + mdi:dishwasher-alert + {% else %} + mdi:dishwasher + {% endif %} + attributes: + model_number: "MDB6769PAS1" + serial_number: "F24407234" + power: "{{ states('sensor.pm_dishwasher_w') | float(default=0)}}" + target: "{{ states('input_number.dishwasher_on') | float(default=0)}}" input_boolean: empty_dishwasher: @@ -46,7 +46,7 @@ input_boolean: input_number: dishwasher_on: # was 4 - name: 'Dishwasher On' + name: "Dishwasher On" icon: mdi:dishwasher min: 0 max: 1000 @@ -55,7 +55,7 @@ input_number: unit_of_measurement: W dishwasher_off: - name: 'Dishwasher Off' + name: "Dishwasher Off" icon: mdi:dishwasher-off min: 0 max: 1000 @@ -64,7 +64,7 @@ input_number: unit_of_measurement: W dishwasher_delay_on: - name: 'Dishwasher Delay On' + name: "Dishwasher Delay On" icon: mdi:clock min: 0 max: 900 @@ -73,7 +73,7 @@ input_number: dishwasher_delay_off: # was 600 - name: 'Dishwasher Delay Off' + name: "Dishwasher Delay Off" icon: mdi:clock-alert min: 0 max: 900 @@ -87,84 +87,84 @@ automation: - id: dishwasher_off platform: state entity_id: binary_sensor.dishwasher - from: 'on' - to: 'off' + from: "on" + to: "off" - id: dishwasher_on platform: state entity_id: binary_sensor.dishwasher - from: 'off' - to: 'on' + from: "off" + to: "on" - id: door_open platform: state entity_id: binary_sensor.dishwasher_door_contact - from: 'off' - to: 'on' + from: "off" + to: "on" for: seconds: 5 condition: [] action: - choose: - - alias: "Dishwasher is running. No need to empty it yet" - conditions: - - condition: trigger - id: dishwasher_on + - alias: "Dishwasher is running. No need to empty it yet" + conditions: + - condition: trigger + id: dishwasher_on - - condition: state - entity_id: input_boolean.empty_dishwasher - state: 'on' - - sequence: - - service: logbook.log - data_template: - name: Empty Dishwasher - Load Started - entity_id: automation.empty_dishwasher - message: Dishwasher just turned on. Turning off input_boolean in case it got left on - - - service: homeassistant.turn_off - target: + - condition: state entity_id: input_boolean.empty_dishwasher + state: "on" - - alias: "Dishwasher finished while door was shut" - conditions: - - condition: trigger - id: dishwasher_off + sequence: + - service: logbook.log + data_template: + name: Empty Dishwasher - Load Started + entity_id: automation.empty_dishwasher + message: Dishwasher just turned on. Turning off input_boolean in case it got left on - - condition: state - entity_id: binary_sensor.dishwasher_door_contact - state: 'off' + - service: homeassistant.turn_off + target: + entity_id: input_boolean.empty_dishwasher - sequence: - - service: logbook.log - data_template: - name: Empty Dishwasher - Load finished - entity_id: automation.empty_dishwasher - message: Dishwasher just turned off while the door was shut. Assuming dishes need to be put away + - alias: "Dishwasher finished while door was shut" + conditions: + - condition: trigger + id: dishwasher_off - - service: homeassistant.turn_on - target: - entity_id: input_boolean.empty_dishwasher + - condition: state + entity_id: binary_sensor.dishwasher_door_contact + state: "off" - - alias: "Door was opened for 30 seconds while dishwasher was off" - conditions: - - condition: trigger - id: door_open + sequence: + - service: logbook.log + data_template: + name: Empty Dishwasher - Load finished + entity_id: automation.empty_dishwasher + message: Dishwasher just turned off while the door was shut. Assuming dishes need to be put away - - condition: state - entity_id: binary_sensor.dishwasher - state: 'off' + - service: homeassistant.turn_on + target: + entity_id: input_boolean.empty_dishwasher - sequence: - - service: logbook.log - data_template: - name: Empty Dishwasher - Dishes put away - entity_id: automation.empty_dishwasher - message: Dishwasher door was opened while the dishwasher was off. Assuming dishes don't need to be put away. + - alias: "Door was opened for 30 seconds while dishwasher was off" + conditions: + - condition: trigger + id: door_open - - service: homeassistant.turn_off - target: - entity_id: input_boolean.empty_dishwasher + - condition: state + entity_id: binary_sensor.dishwasher + state: "off" + + sequence: + - service: logbook.log + data_template: + name: Empty Dishwasher - Dishes put away + entity_id: automation.empty_dishwasher + message: Dishwasher door was opened while the dishwasher was off. Assuming dishes don't need to be put away. + + - service: homeassistant.turn_off + target: + entity_id: input_boolean.empty_dishwasher mode: single diff --git a/components/packages/appliances/tumble_dryer.yaml b/components/packages/appliances/tumble_dryer.yaml index c8b3208..ba9a907 100644 --- a/components/packages/appliances/tumble_dryer.yaml +++ b/components/packages/appliances/tumble_dryer.yaml @@ -1,83 +1,83 @@ template: - trigger: - - platform: state - entity_id: - - sensor.pm_dryer_w - - input_number.tumble_dryer_delay_on - - input_number.tumble_dryer_delay_off - not_to: - - "unknown" - - "unavailable" + - platform: state + entity_id: + - sensor.pm_dryer_w + - input_number.tumble_dryer_delay_on + - input_number.tumble_dryer_delay_off + not_to: + - "unknown" + - "unavailable" - - platform: event - event_type: event_template_reloaded - id: "reload" + - platform: event + event_type: event_template_reloaded + id: "reload" - - platform: homeassistant - event: start + - platform: homeassistant + event: start binary_sensor: - - name: Tumble Dryer - unique_id: binary-sensor-tumble-dryer - delay_on: "{{states('input_number.tumble_dryer_delay_on') | float(default=0)}}" - delay_off: "{{states('input_number.tumble_dryer_delay_off') | float(default=0)}}" - icon: mdi:tumble-dryer - availability: "{{ states('sensor.pm_dryer_w') not in ['unkown', 'unavailable'] }}" - attributes: - model_number: 'DVE45R6100W/A3' - serial_number: '0AY95BBM605793X' - power: "{{ states('sensor.pm_dryer_w') | float(default=0)}}" - target: "{{ states('input_number.tumble_dryer_on') | float(default=0)}}" - state: "{{ states('sensor.pm_dryer_w')|float(default=0) >= states('input_number.tumble_dryer_on')|float(default=0) }}" + - name: Tumble Dryer + unique_id: binary-sensor-tumble-dryer + delay_on: "{{states('input_number.tumble_dryer_delay_on') | float(default=0)}}" + delay_off: "{{states('input_number.tumble_dryer_delay_off') | float(default=0)}}" + icon: mdi:tumble-dryer + availability: "{{ states('sensor.pm_dryer_w') not in ['unknown', 'unavailable'] }}" + attributes: + model_number: "DVE45R6100W/A3" + serial_number: "0AY95BBM605793X" + power: "{{ states('sensor.pm_dryer_w') | float(default=0)}}" + target: "{{ states('input_number.tumble_dryer_on') | float(default=0)}}" + state: "{{ states('sensor.pm_dryer_w')|float(default=0) >= states('input_number.tumble_dryer_on')|float(default=0) }}" - trigger: - - platform: state - entity_id: sensor.pm_dryer_w - not_to: - - "unknown" - - "unavailable" - - platform: state - entity_id: input_number.tumble_dryer_delay_on - not_to: - - "unknown" - - "unavailable" - - platform: state - entity_id: input_number.tumble_dryer_delay_off - not_to: - - "unknown" - - "unavailable" + - platform: state + entity_id: sensor.pm_dryer_w + not_to: + - "unknown" + - "unavailable" + - platform: state + entity_id: input_number.tumble_dryer_delay_on + not_to: + - "unknown" + - "unavailable" + - platform: state + entity_id: input_number.tumble_dryer_delay_off + not_to: + - "unknown" + - "unavailable" - - platform: event - event_type: event_template_reloaded - id: "reload" + - platform: event + event_type: event_template_reloaded + id: "reload" - - platform: homeassistant - event: start + - platform: homeassistant + event: start sensor: - - name: Tumble Dryer - unique_id: templatesensor_tumble_dryer - state: > - {% if is_state('binary_sensor.tumble_dryer','on') %} - running - {% elif is_state('binary_sensor.tumble_dryer','off') and is_state('input_boolean.fold_clothes','on') %} - pending - {% else %} - idle - {% endif %} - icon: > - {% if is_state('sensor.tumble_dryer','idle') %} - mdi:tumble-dryer-off - {% elif is_state('sensor.tumble_dryer','pending') %} - mdi:tumble-dryer-alert - {% else %} - mdi:tumble-dryer - {% endif %} - attributes: - model_number: 'DVE45R6100W/A3' - serial_number: '0AY95BBM605793X' - power: "{{ states('sensor.pm_dryer_w') | float(default=0)}}" - target: "{{ states('input_number.tumble_dryer_on') | float(default=0)}}" + - name: Tumble Dryer + unique_id: templatesensor_tumble_dryer + state: > + {% if is_state('binary_sensor.tumble_dryer','on') %} + running + {% elif is_state('binary_sensor.tumble_dryer','off') and is_state('input_boolean.fold_clothes','on') %} + pending + {% else %} + idle + {% endif %} + icon: > + {% if is_state('sensor.tumble_dryer','idle') %} + mdi:tumble-dryer-off + {% elif is_state('sensor.tumble_dryer','pending') %} + mdi:tumble-dryer-alert + {% else %} + mdi:tumble-dryer + {% endif %} + attributes: + model_number: "DVE45R6100W/A3" + serial_number: "0AY95BBM605793X" + power: "{{ states('sensor.pm_dryer_w') | float(default=0)}}" + target: "{{ states('input_number.tumble_dryer_on') | float(default=0)}}" input_boolean: fold_clothes: @@ -87,7 +87,7 @@ input_boolean: input_number: tumble_dryer_on: # was 10 - name: 'Tumble Dryer On' + name: "Tumble Dryer On" icon: mdi:tumble-dryer min: 0 max: 1000 @@ -96,7 +96,7 @@ input_number: unit_of_measurement: W tumble_dryer_off: - name: 'Tumble Dryer Off' + name: "Tumble Dryer Off" icon: mdi:tumble-dryer-off min: 0 max: 1000 @@ -105,7 +105,7 @@ input_number: unit_of_measurement: W tumble_dryer_delay_on: - name: 'Tumble Dryer Delay On' + name: "Tumble Dryer Delay On" icon: mdi:clock min: 0 max: 900 @@ -114,7 +114,7 @@ input_number: tumble_dryer_delay_off: # was 10 - name: 'Tumble Dryer Delay Off' + name: "Tumble Dryer Delay Off" icon: mdi:clock-alert min: 0 max: 900 @@ -128,88 +128,87 @@ automation: - id: tumble_dryer_off platform: state entity_id: binary_sensor.tumble_dryer - from: 'on' - to: 'off' + from: "on" + to: "off" - id: tumble_dryer_on platform: state entity_id: binary_sensor.tumble_dryer - from: 'off' - to: 'on' + from: "off" + to: "on" - id: door_open platform: state entity_id: binary_sensor.tumble_dryer_door_contact - from: 'off' - to: 'on' + from: "off" + to: "on" for: seconds: 5 condition: [] action: - choose: - - alias: "Dryer is running. No need to fold clothes yet" - conditions: - - condition: trigger - id: tumble_dryer_on + - alias: "Dryer is running. No need to fold clothes yet" + conditions: + - condition: trigger + id: tumble_dryer_on - - condition: state - entity_id: input_boolean.fold_clothes - state: 'on' - sequence: - - service: logbook.log - data_template: - name: Fold Clothes - Load started - entity_id: automation.fold_clothes - message: Dryer turned on. No need to fold clothes yet. Turning off input_boolean in case it got left on - - - - service: homeassistant.turn_off - target: + - condition: state entity_id: input_boolean.fold_clothes + state: "on" + sequence: + - service: logbook.log + data_template: + name: Fold Clothes - Load started + entity_id: automation.fold_clothes + message: Dryer turned on. No need to fold clothes yet. Turning off input_boolean in case it got left on - - alias: "Dryer finished while door was shut" - conditions: - - condition: trigger - id: tumble_dryer_off + - service: homeassistant.turn_off + target: + entity_id: input_boolean.fold_clothes - - condition: state - entity_id: binary_sensor.tumble_dryer_door_contact - state: 'off' + - alias: "Dryer finished while door was shut" + conditions: + - condition: trigger + id: tumble_dryer_off - sequence: - - service: logbook.log - data_template: - name: Fold Clothes - Load finished - entity_id: automation.fold_clothes - message: Dryer just turned off. Assuming clothes need to be folded + - condition: state + entity_id: binary_sensor.tumble_dryer_door_contact + state: "off" - - service: homeassistant.turn_on - target: + sequence: + - service: logbook.log + data_template: + name: Fold Clothes - Load finished + entity_id: automation.fold_clothes + message: Dryer just turned off. Assuming clothes need to be folded + + - service: homeassistant.turn_on + target: + entity_id: input_boolean.fold_clothes + + - alias: "Door was opened while dryer was off" + conditions: + - condition: trigger + id: door_open + + - condition: state + entity_id: binary_sensor.tumble_dryer + state: "off" + + - condition: state entity_id: input_boolean.fold_clothes + state: "on" - - alias: "Door was opened while dryer was off" - conditions: - - condition: trigger - id: door_open + sequence: + - service: logbook.log + data_template: + name: Fold Clothes - Clothes folded + entity_id: automation.fold_clothes + message: Door was opened while dryer was off. Assuming clothes are now folded - - condition: state - entity_id: binary_sensor.tumble_dryer - state: 'off' - - - condition: state - entity_id: input_boolean.fold_clothes - state: 'on' - - sequence: - - service: logbook.log - data_template: - name: Fold Clothes - Clothes folded - entity_id: automation.fold_clothes - message: Door was opened while dryer was off. Assuming clothes are now folded - - - service: homeassistant.turn_off - target: - entity_id: input_boolean.fold_clothes + - service: homeassistant.turn_off + target: + entity_id: input_boolean.fold_clothes mode: single diff --git a/components/packages/appliances/washing_machine.yaml b/components/packages/appliances/washing_machine.yaml index ecf3ae2..f218b58 100644 --- a/components/packages/appliances/washing_machine.yaml +++ b/components/packages/appliances/washing_machine.yaml @@ -1,42 +1,42 @@ template: - binary_sensor: - - name: Washing Machine - unique_id: templatebinarysensor.washing_machine - delay_on: "{{states('input_number.washing_machine_delay_on') | float(default=0)}}" - delay_off: "{{states('input_number.washing_machine_delay_off') | float(default=0)}}" - icon: mdi:washing-machine - availability: "{{ states('sensor.pm_laundry_plug_w') not in ['unkown', 'unavailable'] }}" - attributes: - model_number: 'WF45R6100AW/US' - serial_number: '01FY57AM802740X' - power: "{{ states('sensor.pm_laundry_plug_w') | float(default=0)}}" - target: "{{ states('input_number.washing_machine_on') | float(default=0)}}" - state: "{{ states('sensor.pm_laundry_plug_w')|float(default=0) >= states('input_number.washing_machine_on')|float(default=0) }}" + - name: Washing Machine + unique_id: templatebinarysensor.washing_machine + delay_on: "{{states('input_number.washing_machine_delay_on') | float(default=0)}}" + delay_off: "{{states('input_number.washing_machine_delay_off') | float(default=0)}}" + icon: mdi:washing-machine + availability: "{{ states('sensor.pm_laundry_plug_w') not in ['unknown', 'unavailable'] }}" + attributes: + model_number: "WF45R6100AW/US" + serial_number: "01FY57AM802740X" + power: "{{ states('sensor.pm_laundry_plug_w') | float(default=0)}}" + target: "{{ states('input_number.washing_machine_on') | float(default=0)}}" + state: "{{ states('sensor.pm_laundry_plug_w')|float(default=0) >= states('input_number.washing_machine_on')|float(default=0) }}" - sensor: - - name: Washing Machine - unique_id: templatesensor_washing_machine - state: > - {% if is_state('binary_sensor.washing_machine','on') %} - running - {% elif is_state('binary_sensor.washing_machine','off') and is_state('input_boolean.swap_laundry','on') %} - pending - {% else %} - idle - {% endif %} - icon: > - {% if is_state('sensor.washing_machine','idle') %} - mdi:washing-machine-off - {% elif is_state('sensor.washing_machine','pending') %} - mdi:washing-machine-alert - {% else %} - mdi:washing-machine - {% endif %} - attributes: - model_number: 'WF45R6100AW/US' - serial_number: '01FY57AM802740X' - power: "{{ states('sensor.pm_laundry_plug_w') | float(default=0)}}" - target: "{{ states('input_number.washing_machine_on') | float(default=0)}}" + - name: Washing Machine + unique_id: templatesensor_washing_machine + state: > + {% if is_state('binary_sensor.washing_machine','on') %} + running + {% elif is_state('binary_sensor.washing_machine','off') and is_state('input_boolean.swap_laundry','on') %} + pending + {% else %} + idle + {% endif %} + icon: > + {% if is_state('sensor.washing_machine','idle') %} + mdi:washing-machine-off + {% elif is_state('sensor.washing_machine','pending') %} + mdi:washing-machine-alert + {% else %} + mdi:washing-machine + {% endif %} + attributes: + model_number: "WF45R6100AW/US" + serial_number: "01FY57AM802740X" + power: "{{ states('sensor.pm_laundry_plug_w') | float(default=0)}}" + target: "{{ states('input_number.washing_machine_on') | float(default=0)}}" input_boolean: swap_laundry: @@ -46,7 +46,7 @@ input_boolean: input_number: washing_machine_on: # was 5 - name: 'Washing Machine On' + name: "Washing Machine On" icon: mdi:washing-machine min: 0 max: 20 @@ -55,7 +55,7 @@ input_number: unit_of_measurement: W washing_machine_off: - name: 'Washing Machine Off' + name: "Washing Machine Off" icon: mdi:washing-machine-off min: 0 max: 20 @@ -64,7 +64,7 @@ input_number: unit_of_measurement: W washing_machine_delay_on: - name: 'Washing Machine Delay On' + name: "Washing Machine Delay On" icon: mdi:clock min: 0 max: 900 @@ -73,7 +73,7 @@ input_number: washing_machine_delay_off: # was 10 - name: 'Washing Machine Delay Off' + name: "Washing Machine Delay Off" icon: mdi:clock-alert min: 0 max: 900 @@ -87,86 +87,86 @@ automation: - id: washing_machine_off platform: state entity_id: binary_sensor.washing_machine - from: 'on' - to: 'off' + from: "on" + to: "off" - id: washing_machine_on platform: state entity_id: binary_sensor.washing_machine - from: 'off' - to: 'on' + from: "off" + to: "on" - id: door_open platform: state entity_id: binary_sensor.washing_machine_door_contact - from: 'off' - to: 'on' + from: "off" + to: "on" for: seconds: 5 condition: [] action: - choose: - - alias: "Washing machine is running. No need to swap laundry yet" - conditions: - - condition: trigger - id: washing_machine_on + - alias: "Washing machine is running. No need to swap laundry yet" + conditions: + - condition: trigger + id: washing_machine_on - - condition: state - entity_id: input_boolean.swap_laundry - state: 'on' - sequence: - - service: logbook.log - data_template: - name: Swap Laundry - Load started - entity_id: automation.swap_laundry - message: Washing machine is running. No need to swap laundry yet. Turning off input_boolean.swap_laundry, in case it was left on - - - service: homeassistant.turn_off - target: + - condition: state entity_id: input_boolean.swap_laundry + state: "on" + sequence: + - service: logbook.log + data_template: + name: Swap Laundry - Load started + entity_id: automation.swap_laundry + message: Washing machine is running. No need to swap laundry yet. Turning off input_boolean.swap_laundry, in case it was left on - - alias: "Washing machine finished while door was shut" - conditions: - - condition: trigger - id: washing_machine_off + - service: homeassistant.turn_off + target: + entity_id: input_boolean.swap_laundry - - condition: state - entity_id: binary_sensor.washing_machine_door_contact - state: 'off' + - alias: "Washing machine finished while door was shut" + conditions: + - condition: trigger + id: washing_machine_off - sequence: - - service: logbook.log - data_template: - name: Swap Laundry - Load needs to be swapped - entity_id: automation.swap_laundry - message: Washing machine turned off while the door was shut. Assuming that a load needs to be swapped - - service: homeassistant.turn_on - target: + - condition: state + entity_id: binary_sensor.washing_machine_door_contact + state: "off" + + sequence: + - service: logbook.log + data_template: + name: Swap Laundry - Load needs to be swapped + entity_id: automation.swap_laundry + message: Washing machine turned off while the door was shut. Assuming that a load needs to be swapped + - service: homeassistant.turn_on + target: + entity_id: input_boolean.swap_laundry + + - alias: "Door was opened while washing machine was off" + conditions: + - condition: trigger + id: door_open + + - condition: state + entity_id: binary_sensor.washing_machine + state: "off" + + - condition: state entity_id: input_boolean.swap_laundry + state: "on" - - alias: "Door was opened while washing machine was off" - conditions: - - condition: trigger - id: door_open + sequence: + - service: logbook.log + data_template: + name: Swap Laundry - Load swapped + entity_id: automation.swap_laundry + message: Door was opened while washing machine was off. Assuming a load just got swapped - - condition: state - entity_id: binary_sensor.washing_machine - state: 'off' - - - condition: state - entity_id: input_boolean.swap_laundry - state: 'on' - - sequence: - - service: logbook.log - data_template: - name: Swap Laundry - Load swapped - entity_id: automation.swap_laundry - message: Door was opened while washing machine was off. Assuming a load just got swapped - - - service: homeassistant.turn_off - target: - entity_id: input_boolean.swap_laundry + - service: homeassistant.turn_off + target: + entity_id: input_boolean.swap_laundry mode: single diff --git a/components/packages/automatic_sprinkler_system.yaml b/components/packages/automatic_sprinkler_system.yaml index 53e4111..f188a83 100644 --- a/components/packages/automatic_sprinkler_system.yaml +++ b/components/packages/automatic_sprinkler_system.yaml @@ -247,7 +247,7 @@ template: unique_id: "custom_sensor.sprinkler_total_rain_fallen_plus_expected" icon: mdi:weather-pouring unit_of_measurement: mm - availability: "{{ states('sensor.sprinkler_recent_rain_precipitation') not in ['unkown', 'unavailable'] }}" + availability: "{{ states('sensor.sprinkler_recent_rain_precipitation') not in ['unknown', 'unavailable'] }}" state: > {{ (states('sensor.sprinkler_recent_rain_precipitation') | float + states('sensor.sprinkler_total_expected_precipitation') | float(default=100.0) ) | round(2) }} @@ -293,12 +293,12 @@ template: icon: mdi:clock unit_of_measurement: seconds availability: > - {{ states('sensor.opensprinkler_water_level') not in ['unkown', 'unavailable'] and - states('input_number.front_yard_station_minutes') not in ['unkown', 'unavailable'] and - states('input_number.east_side_station_minutes') not in ['unkown', 'unavailable'] and - states('input_number.back_yard_station_minutes') not in ['unkown', 'unavailable'] and - states('input_number.west_side_station_minutes') not in ['unkown', 'unavailable'] and - states('input_number.sprinkler_repeat_program_amount') not in ['unkown', 'unavailable'] }} + {{ states('sensor.opensprinkler_water_level') not in ['unknown', 'unavailable'] and + states('input_number.front_yard_station_minutes') not in ['unknown', 'unavailable'] and + states('input_number.east_side_station_minutes') not in ['unknown', 'unavailable'] and + states('input_number.back_yard_station_minutes') not in ['unknown', 'unavailable'] and + states('input_number.west_side_station_minutes') not in ['unknown', 'unavailable'] and + states('input_number.sprinkler_repeat_program_amount') not in ['unknown', 'unavailable'] }} state: > {{ states("sensor.opensprinkler_water_level")| float(default=0) | multiply(0.01) | multiply(states("input_number.front_yard_station_minutes") | multiply(60)) | float(default=0) + states("sensor.opensprinkler_water_level")| float(default=0) | multiply(0.01) | multiply(states("input_number.east_side_station_minutes") | multiply(60)) | float(default=0) + @@ -352,22 +352,22 @@ template: device_class: moisture delay_off: minutes: 15 - # availability: "{{ states('sensor.rain_quarter_hourly_precipitation') not in ['unkown', 'unavailable'] }}" + # availability: "{{ states('sensor.rain_quarter_hourly_precipitation') not in ['unknown', 'unavailable'] }}" # state: > # {{ states('sensor.rain_quarter_hourly_precipitation') | float(default=0) > 0.0 }} - availability: "{{ states('binary_sensor.is_raining') not in ['unkown', 'unavailable'] }}" + availability: "{{ states('binary_sensor.is_raining') not in ['unknown', 'unavailable'] }}" state: > {{ states('binary_sensor.is_raining') }} - trigger: - # - platform: homeassistant - # event: start + # - platform: homeassistant + # event: start - # - platform: time - # at: '01:00:00' + # - platform: time + # at: '01:00:00' - # - platform: state - # entity_id: input_boolean.sprinkler_is_winterized + # - platform: state + # entity_id: input_boolean.sprinkler_is_winterized binary_sensor: - name: "Sprinkler: In Season" @@ -378,37 +378,28 @@ template: # - trigger: # - platform: homeassistant # event: start - # - platform: time # at: '01:00:00' - # - platform: state # entity_id: input_boolean.sprinkler_is_winterized - # - platform: event # event_type: event_template_reloaded # id: "reload" - # binary_sensor: # - name: "Sprinkler: Should Winterize" # unique_id: "custom_binary_sensor.sprinkler_should_winterize" # device_class: problem # state: "{{ iif(is_state('binary_sensor.sprinkler_in_season', 'off'), iif(is_state('input_boolean.sprinkler_is_winterized', 'off'), 'on', 'off'), 'off') }}" - # - trigger: # - platform: homeassistant # event: start - # - platform: time # at: '01:00:00' - # - platform: state # entity_id: input_boolean.sprinkler_is_winterized - # - platform: event # event_type: event_template_reloaded # id: "reload" - # binary_sensor: # - name: "Sprinkler: Should Dewinterize" # unique_id: "custom_binary_sensor.sprinkler_should_dewinterize" @@ -444,7 +435,6 @@ automation: data: message: "{{now().strftime('%Y-%m-%d')}}T{{now().strftime('%H:%M:%S.%f')}},{{states('sensor.ecowitt_wh40_21917_precipitation')}},{{states('binary_sensor.is_raining')}},{{state_attr('binary_sensor.is_raining','sample_count')}},{{state_attr('binary_sensor.is_raining','sample_duration')}},{{state_attr('binary_sensor.is_raining','min_gradient')}},{{state_attr('binary_sensor.is_raining','gradient')}}" - - alias: "Log Soil Moisture" id: 362fbc8d-64f1-47dd-a686-e460e9c18690 trigger: @@ -503,7 +493,7 @@ automation: trigger: - platform: state entity_id: sensor.sun_next_dawn - condition: "{{ states('sensor.sun_next_dawn') not in ['unkown', 'unavailable'] }}" + condition: "{{ states('sensor.sun_next_dawn') not in ['unknown', 'unavailable'] }}" action: - service: input_datetime.set_datetime target: @@ -532,7 +522,7 @@ automation: trigger: - platform: state entity_id: binary_sensor.is_raining - to: 'on' + to: "on" condition: condition: or diff --git a/components/packages/camera_ptz/cam14.yaml b/components/packages/camera_ptz/cam14.yaml index 972e8aa..892cafb 100644 --- a/components/packages/camera_ptz/cam14.yaml +++ b/components/packages/camera_ptz/cam14.yaml @@ -178,12 +178,12 @@ automation: - platform: event event_type: automation_reloaded - condition: [] + condition: + - "{{ states('camera.frigate_cam14') not in ['unknown', 'unavailable'] }}" # - alias: "The input_boolean controlling the cycling of cam14 is on" # condition: state # entity_id: input_boolean.cycle_cam14 # state: "on" - # - alias: "No people or animals detected by Frigate for the last 5 seconds" # condition: state # entity_id: binary_sensor.frigate_cam14_all_occupancy @@ -192,7 +192,6 @@ automation: # hours: 0 # minutes: 0 # seconds: 5 - # # Either the camera isn't looking at the deck # # or the camera is looking at the deck and the deck motion sensor has been off for at least 30 seconds # # or the camera is looking at the deck and the patio door has been closed for at least 30 seconds @@ -245,39 +244,39 @@ automation: while: "{{ is_state('input_boolean.cycle_cam14', 'on') }}" sequence: - choose: - # If the camera is looking at the deck and the deck motion sensor is on, then wait 5 seconds. - - conditions: - - condition: state - entity_id: input_select.camera14_preset - state: Deck - - condition: state - entity_id: binary_sensor.deck_motion - state: 'on' - sequence: - - service: input_text.set_value - target: - entity_id: input_text.camera14_status - data: - value: "Deck" - - delay: 5 - - # If a person is not found, cycle to the next preset, then wait 30 seconds. - - conditions: - - condition: template - value_template: "{{ is_state('binary_sensor.frigate_cam14_person_occupancy','off') }}" - sequence: - - service: input_text.set_value - target: - entity_id: input_text.camera14_status - data: - value: "Cycling" - - service: input_select.select_next - data: - cycle: true - target: + # If the camera is looking at the deck and the deck motion sensor is on, then wait 5 seconds. + - conditions: + - condition: state entity_id: input_select.camera14_preset + state: Deck + - condition: state + entity_id: binary_sensor.deck_motion + state: "on" + sequence: + - service: input_text.set_value + target: + entity_id: input_text.camera14_status + data: + value: "Deck" + - delay: 5 - - delay: 30 + # If a person is not found, cycle to the next preset, then wait 30 seconds. + - conditions: + - condition: template + value_template: "{{ is_state('binary_sensor.frigate_cam14_person_occupancy','off') }}" + sequence: + - service: input_text.set_value + target: + entity_id: input_text.camera14_status + data: + value: "Cycling" + - service: input_select.select_next + data: + cycle: true + target: + entity_id: input_select.camera14_preset + + - delay: 30 # If a person is found, check if the person is still present every 5 seconds default: @@ -312,6 +311,8 @@ automation: entity_id: sensor.frigate_cam14_all_count below: 2 + - "{{ states('camera.frigate_cam14') not in ['unknown', 'unavailable'] }}" + action: # We don't need to turn off cycling the back yard camera. # - service: input_boolean.turn_off @@ -331,14 +332,11 @@ automation: entity_id: input_select.camera14_preset # the Cycle cam 14 automation already checks if something is detected. All we need to do is force cam14 to look at the deck - # - delay: "00:00:05" - # - repeat: # while: "{{ is_state('binary_sensor.frigate_cam14_all_occupancy', 'on')}}" # sequence: # - delay: "00:00:05" - # - service: input_boolean.turn_on # target: # entity_id: input_boolean.cycle_cam14 @@ -406,6 +404,9 @@ automation: platform: state entity_id: input_button.cam14_ptz_preset_10 + condition: + - "{{ states('camera.frigate_cam14') not in ['unknown', 'unavailable'] }}" + action: - choose: - conditions: > @@ -486,6 +487,10 @@ automation: event: start - platform: time_pattern minutes: /10 + + condition: + - "{{ states('camera.frigate_cam14') not in ['unknown', 'unavailable'] }}" + action: - choose: - conditions: @@ -552,7 +557,7 @@ template: - binary_sensor: - name: Deck Person Occupancy unique_id: templatebinarysensor.deck_person_occupancy - availability: "{{ states('binary_sensor.possible_deck_person_occupancy') not in ['unkown', 'unavailable'] }}" + availability: "{{ states('binary_sensor.possible_deck_person_occupancy') not in ['unknown', 'unavailable'] }}" state: "{{ is_state('binary_sensor.possible_deck_person_occupancy','on') and is_state('input_select.camera14_preset','Deck') }}" icon: > {% if is_state('binary_sensor.deck_person_occupancy','on') %} @@ -563,14 +568,14 @@ template: - name: Deck Animal Motion unique_id: templatebinarysensor.deck_animal_occupancy - availability: "{{ states('binary_sensor.possible_deck_animal_occupancy') not in ['unkown', 'unavailable'] }}" + availability: "{{ states('binary_sensor.possible_deck_animal_occupancy') not in ['unknown', 'unavailable'] }}" state: "{{ is_state('binary_sensor.possible_deck_animal_occupancy','on') and is_state('input_select.camera14_preset','Deck') }}" icon: mdi:bird - sensor: - name: Deck Person Count unique_id: templatesensor.deck_person_count - availability: "{{ states('sensor.possible_deck_person_count') not in ['unkown', 'unavailable'] }}" + availability: "{{ states('sensor.possible_deck_person_count') not in ['unknown', 'unavailable'] }}" unit_of_measurement: objects state: > {% if is_state('input_select.camera14_preset','Deck') %} @@ -582,7 +587,7 @@ template: - name: Deck Animal Count unique_id: templatesensor.deck_animal_count - availability: "{{ states('sensor.possible_deck_animal_count') not in ['unkown', 'unavailable'] }}" + availability: "{{ states('sensor.possible_deck_animal_count') not in ['unknown', 'unavailable'] }}" unit_of_measurement: objects state: > {% if is_state('input_select.camera14_preset','Deck') %} diff --git a/components/packages/clints_watch.yaml b/components/packages/clints_watch.yaml index a32d647..1304c80 100644 --- a/components/packages/clints_watch.yaml +++ b/components/packages/clints_watch.yaml @@ -1,51 +1,51 @@ template: -# Watch Done Charging + # Watch Done Charging - trigger: - - platform: state - entity_id: sensor.ticwatch_pro_3_gps_charger_type + - platform: state + entity_id: sensor.ticwatch_pro_3_gps_charger_type - - platform: state - entity_id: sensor.ticwatch_pro_3_gps_battery_level + - platform: state + entity_id: sensor.ticwatch_pro_3_gps_battery_level - - platform: event - event_type: event_template_reloaded - id: "reload" + - platform: event + event_type: event_template_reloaded + id: "reload" - - platform: homeassistant - event: start + - platform: homeassistant + event: start binary_sensor: - - name: Clint's Watch Done Charging - unique_id: templatebinarysensor.clints_watch_done_charging - icon: mdi:battery-charging-100 - availability: "{{ states('sensor.ticwatch_pro_3_gps_battery_level') not in ['unkown', 'unavailable'] }}" - state: "{{ states('sensor.ticwatch_pro_3_gps_battery_level')|int(default=0) >= states('input_number.clints_watch_charged')|int(default=0) and is_state('sensor.ticwatch_pro_3_gps_charger_type','ac') }}" + - name: Clint's Watch Done Charging + unique_id: templatebinarysensor.clints_watch_done_charging + icon: mdi:battery-charging-100 + availability: "{{ states('sensor.ticwatch_pro_3_gps_battery_level') not in ['unknown', 'unavailable'] }}" + state: "{{ states('sensor.ticwatch_pro_3_gps_battery_level')|int(default=0) >= states('input_number.clints_watch_charged')|int(default=0) and is_state('sensor.ticwatch_pro_3_gps_charger_type','ac') }}" -# Watch Done Charging + # Watch Done Charging - trigger: - - platform: state - entity_id: sensor.ticwatch_pro_3_gps_charger_type + - platform: state + entity_id: sensor.ticwatch_pro_3_gps_charger_type - - platform: state - entity_id: sensor.ticwatch_pro_3_gps_battery_level + - platform: state + entity_id: sensor.ticwatch_pro_3_gps_battery_level - - platform: event - event_type: event_template_reloaded - id: "reload" + - platform: event + event_type: event_template_reloaded + id: "reload" - - platform: homeassistant - event: start + - platform: homeassistant + event: start binary_sensor: - - name: Clint's Watch Needs to Charge - unique_id: templatebinarysensor.clints_watch_needs_to_charge - icon: mdi:battery-20 - availability: "{{ states('sensor.ticwatch_pro_3_gps_battery_level') not in ['unkown', 'unavailable'] }}" - state: "{{ states('sensor.ticwatch_pro_3_gps_battery_level')|int(default=0) <= states('input_number.clints_watch_low')|int(default=0) and is_state('sensor.ticwatch_pro_3_gps_charger_type','none') }}" + - name: Clint's Watch Needs to Charge + unique_id: templatebinarysensor.clints_watch_needs_to_charge + icon: mdi:battery-20 + availability: "{{ states('sensor.ticwatch_pro_3_gps_battery_level') not in ['unknown', 'unavailable'] }}" + state: "{{ states('sensor.ticwatch_pro_3_gps_battery_level')|int(default=0) <= states('input_number.clints_watch_low')|int(default=0) and is_state('sensor.ticwatch_pro_3_gps_charger_type','none') }}" input_number: clints_watch_charged: - name: 'Clints Watch Charged' + name: "Clints Watch Charged" icon: mdi:battery min: 0 max: 100 @@ -53,9 +53,9 @@ input_number: mode: box clints_watch_low: - name: 'Clints Watch Low' + name: "Clints Watch Low" icon: mdi:battery-20 min: 0 max: 100 step: 1 - mode: box \ No newline at end of file + mode: box diff --git a/components/packages/hacs.yaml b/components/packages/hacs.yaml index 931ce72..1c4dd63 100644 --- a/components/packages/hacs.yaml +++ b/components/packages/hacs.yaml @@ -1,7 +1,7 @@ template: - binary_sensor: - - name: 'HACS Update Available' - unique_id: binary_sensor.hacs_update_available - icon: mdi:alpha-c-box - state: "{{ states('sensor.hacs') | float(default=0) > 0 }}" - availability: "{{ states('sensor.hacs') not in ['unkown', 'unavailable'] }}" + - name: "HACS Update Available" + unique_id: binary_sensor.hacs_update_available + icon: mdi:alpha-c-box + state: "{{ states('sensor.hacs') | float(default=0) > 0 }}" + availability: "{{ states('sensor.hacs') not in ['unknown', 'unavailable'] }}" diff --git a/components/packages/hass_agent/dreambox.yaml b/components/packages/hass_agent/dreambox.yaml index 00e33bb..e6dd83d 100644 --- a/components/packages/hass_agent/dreambox.yaml +++ b/components/packages/hass_agent/dreambox.yaml @@ -11,15 +11,15 @@ notify: template: - trigger: - - platform: homeassistant - event: start + - platform: homeassistant + event: start - - platform: state - entity_id: sensor.dreambox_lastactive + - platform: state + entity_id: sensor.dreambox_lastactive binary_sensor: - - name: DreamBox Recently Active - unique_id: templatebinarysensor.dreambox_recently_active - icon: mdi:desktop-tower-monitor - #availability: "{{ states('sensor.dreambox_lastactive') not in ['unkown', 'unavailable'] }}" - state: " {{ iif( states('sensor.dreambox_lastactive') == 'unknown' or is_state('sensor.dreambox_lastactive', 'unavailable'), false, as_timestamp(now()) - as_timestamp(states('sensor.dreambox_lastactive'),0) < 180 or is_state('sensor.dreambox_usernotification','Busy'))}}" + - name: DreamBox Recently Active + unique_id: templatebinarysensor.dreambox_recently_active + icon: mdi:desktop-tower-monitor + #availability: "{{ states('sensor.dreambox_lastactive') not in ['unknown', 'unavailable'] }}" + state: " {{ iif( states('sensor.dreambox_lastactive') == 'unknown' or is_state('sensor.dreambox_lastactive', 'unavailable'), false, as_timestamp(now()) - as_timestamp(states('sensor.dreambox_lastactive'),0) < 180 or is_state('sensor.dreambox_usernotification','Busy'))}}" diff --git a/components/packages/hass_agent/dreamsurface.yaml b/components/packages/hass_agent/dreamsurface.yaml index 0d8275d..a78095c 100644 --- a/components/packages/hass_agent/dreamsurface.yaml +++ b/components/packages/hass_agent/dreamsurface.yaml @@ -3,7 +3,6 @@ notify: platform: hass_agent_notifier resource: !secret dreamsurface_hassagent - mqtt: light: - name: "DreamSurface: Screen Brightness" @@ -13,7 +12,7 @@ mqtt: brightness_command_topic: "homeassistant/light/HASSAGENT/dreamsurface_monitor_brightness/action" brightness_command_template: "%PROGRAMFILES(X86)%\\Monitorian\\Monitorian.exe /set {{ value }}" brightness_scale: 100 - on_command_type: 'brightness' + on_command_type: "brightness" icon: mdi:monitor-shimmer # media_player: @@ -24,15 +23,15 @@ mqtt: template: - trigger: - - platform: homeassistant - event: start + - platform: homeassistant + event: start - - platform: state - entity_id: sensor.dreamsurface_lastactive + - platform: state + entity_id: sensor.dreamsurface_lastactive binary_sensor: - - name: DreamSurface Recently Active - unique_id: templatebinarysensor.dreamsurface_recently_active - icon: mdi:tablet - #availability: "{{ states('sensor.dreamsurface_lastactive') not in ['unkown', 'unavailable'] }}" - state: " {{ iif( states('sensor.dreamsurface_lastactive') == 'unknown' or is_state('sensor.dreamsurface_lastactive', 'unavailable'), false, as_timestamp(now()) - as_timestamp(states('sensor.dreamsurface_lastactive'),0) < 180 or is_state('sensor.dreamsurface_usernotification','Busy'))}}" + - name: DreamSurface Recently Active + unique_id: templatebinarysensor.dreamsurface_recently_active + icon: mdi:tablet + #availability: "{{ states('sensor.dreamsurface_lastactive') not in ['unknown', 'unavailable'] }}" + state: " {{ iif( states('sensor.dreamsurface_lastactive') == 'unknown' or is_state('sensor.dreamsurface_lastactive', 'unavailable'), false, as_timestamp(now()) - as_timestamp(states('sensor.dreamsurface_lastactive'),0) < 180 or is_state('sensor.dreamsurface_usernotification','Busy'))}}" diff --git a/components/packages/hvac_details.yaml b/components/packages/hvac_details.yaml index ceb9845..d8576ee 100644 --- a/components/packages/hvac_details.yaml +++ b/components/packages/hvac_details.yaml @@ -18,7 +18,7 @@ template: unique_id: "custom_binary_sensor.hvac_aux" icon: mdi:fire device_class: running - availability: "{{ states('climate.thermostat') not in ['unkown', 'unavailable'] }}" + availability: "{{ states('climate.thermostat') not in ['unknown', 'unavailable'] }}" state: > {% if 'aux' in state_attr('climate.thermostat','equipment_running') %}{{'true'}}{% else %}{{'false'}}{% endif %} @@ -41,7 +41,7 @@ template: unique_id: "custom_binary_sensor.hvac_fan" icon: mdi:fan device_class: running - availability: "{{ states('climate.thermostat') not in ['unkown', 'unavailable'] }}" + availability: "{{ states('climate.thermostat') not in ['unknown', 'unavailable'] }}" state: > {% if 'fan' in state_attr('climate.thermostat','equipment_running') %}{{'true'}}{% else %}{{'false'}}{% endif %} @@ -64,6 +64,6 @@ template: unique_id: "custom_binary_sensor.hvac_heatpump" icon: mdi:hvac device_class: running - availability: "{{ states('climate.thermostat') not in ['unkown', 'unavailable'] }}" + availability: "{{ states('climate.thermostat') not in ['unknown', 'unavailable'] }}" state: > - {% if 'heatPump' in state_attr('climate.thermostat','equipment_running') %}{{'true'}}{% else %}{{'false'}}{% endif %} \ No newline at end of file + {% if 'heatPump' in state_attr('climate.thermostat','equipment_running') %}{{'true'}}{% else %}{{'false'}}{% endif %} diff --git a/components/packages/meterologisk_templates.yaml b/components/packages/meterologisk_templates.yaml new file mode 100644 index 0000000..ece1d85 --- /dev/null +++ b/components/packages/meterologisk_templates.yaml @@ -0,0 +1,118 @@ +# TODO +# Update to account for new get_weather_forcats BS a + +template: + # - binary_sensor: + # - name: Precipitation Likely Soon + # unique_id: templatebinarysensor.precipitation_likely_soon + # icon: mdi:weather-rainy + # availability: "{{ states('sensor.openweathermap_hourly_forecast_precipitation_probability') not in ['unknown', 'unavailable'] }}" + # state: "{{ states('sensor.openweathermap_hourly_forecast_precipitation_probability')|float(default=0) >= 50.0 }}" + + # - name: Precipitation Likely + # unique_id: templatebinarysensor.precipitation_likely + # icon: mdi:weather-rainy + # availability: "{{ states('sensor.openweathermap_daily_forecast_precipitation_probability') not in ['unknown', 'unavailable'] }}" + # state: "{{ states('sensor.openweathermap_daily_forecast_precipitation_probability')|float(default=0) >= 50.0 }}" + + - trigger: + - platform: time_pattern + hours: /1 + + - platform: event + event_type: event_template_reloaded + id: "reload" + + - platform: homeassistant + event: start + + action: + - service: weather.get_forecasts + data: + type: daily + target: + entity_id: weather.forecast_home + response_variable: daily + + - service: weather.get_forecasts + data: + type: hourly + target: + entity_id: weather.forecast_home + response_variable: hourly + + binary_sensor: + - name: "Impending Rain" + unique_id: templatebinarysensor.impending_rain + availability: "{{ states('weather.forecast_home') not in ['unknown', 'unavailable'] }}" + icon: mdi:weather-rainy + # This looks too far into the future. Cutting it down a bit + state: >- + {%- set totalprecipitation = 0 | float -%} + {%- set upcoming_precipitation = 0 | float -%} + {%- set ns = namespace() -%} + {%- set ns.totalprecipitation = 0 -%} + {%- for daypart in range(0, 8) -%} + {%- set precipitation = hourly['weather.forecast_home'].forecast[daypart].precipitation -%} + {%- set wind_speed = hourly['weather.forecast_home'].forecast[daypart].wind_speed -%} + {% if wind_speed > states('input_number.wind_speed_blowing_rain') |float(default=0) %} + {%- set upcoming_precipitation = precipitation -%} + {%- endif -%} + {%- set ns.totalprecipitation = ns.totalprecipitation + upcoming_precipitation -%} + {%- endfor %} + {{ ns.totalprecipitation / 100 | float | round(0) > 0.99 }} + + sensor: + - name: "Sprinkler: Total Expected Precipitation" + unique_id: "custom_sensor.sprinkler_total_expected_precipitation" + icon: mdi:weather-pouring + unit_of_measurement: mm + availability: "{{ states('weather.forecast_home') not in ['unknown', 'unavailable'] }}" + state: > + {%- set totalprecipitation = 0 | float -%} + {%- set upcoming_precipitation = 0 | float -%} + {%- set ns = namespace() -%} + {%- set ns.totalprecipitation = 0 -%} + {%- for daypart in range(0, 5) -%} + {%- set precipitation = daily['weather.forecast_home'].forecast[daypart].precipitation * 25.4 -%} + {%- set upcoming_precipitation = precipitation -%} + {%- set ns.totalprecipitation = ns.totalprecipitation + upcoming_precipitation -%} + {%- endfor %} + {{ ns.totalprecipitation | float | round(0) }} + + - name: "Today's Low Temperature" + unique_id: templatesensor.templow_today + unit_of_measurement: °F + availability: "{{ states('weather.forecast_home') not in ['unknown', 'unavailable'] }}" + state: "{{ daily['weather.forecast_home'].forecast[0].templow }}" + + - name: "Today's High Temperature" + unique_id: templatesensor.temphigh_today + unit_of_measurement: °F + availability: "{{ states('weather.forecast_home') not in ['unknown', 'unavailable'] }}" + state: "{{ daily['weather.forecast_home'].forecast[0].temperature}}" + + # - name: "Today's Chance of Precipitation" + # unique_id: templatesensor.precip_chance_today + # icon: mdi:cloud-percent + # unit_of_measurement: '%' + # availability: "{{ states('weather.forecast_home') not in ['unknown', 'unavailable'] }}" + # state: "{{ daily['weather.forecast_home'].forecast[0].precipitation_probability}}" + + - name: "Tomorrow's Low Temperature" + unique_id: templatesensor.templow_tomorrow + unit_of_measurement: °F + availability: "{{ states('weather.forecast_home') not in ['unknown', 'unavailable'] }}" + state: "{{ daily['weather.forecast_home'].forecast[1].templow}}" + + - name: "Tomorrow's High Temperature" + unique_id: templatesensor.temphigh_tomorrow + unit_of_measurement: °F + availability: "{{ states('weather.forecast_home') not in ['unknown', 'unavailable'] }}" + state: "{{ daily['weather.forecast_home'].forecast[1].temperature}}" + # - name: "Tomorrow's Chance of Precipitation" + # unique_id: templatesensor.precip_chance_tomorrow + # icon: mdi:cloud-percent + # unit_of_measurement: '%' + # availability: "{{ states('weather.forecast_home') not in ['unknown', 'unavailable'] }}" + # state: "{{ daily['weather.forecast_home'].forecast[1].precipitation_probability}}" diff --git a/components/packages/naturally_lit_rooms.yaml b/components/packages/naturally_lit_rooms.yaml index e8e1ab9..b012ef9 100644 --- a/components/packages/naturally_lit_rooms.yaml +++ b/components/packages/naturally_lit_rooms.yaml @@ -1,13 +1,13 @@ template: - trigger: - - platform: homeassistant - event: start + - platform: homeassistant + event: start - - platform: state - entity_id: input_number.blue_room_light_level_trigger + - platform: state + entity_id: input_number.blue_room_light_level_trigger - - platform: state - entity_id: sensor.blue_room_multisensor_illuminance + - platform: state + entity_id: sensor.blue_room_multisensor_illuminance binary_sensor: - name: "Blue Room Naturally Lit" @@ -29,14 +29,14 @@ template: trigger: "{{ states('input_number.blue_room_light_level_trigger') | float(default=0) }}" - trigger: - - platform: homeassistant - event: start + - platform: homeassistant + event: start - - platform: state - entity_id: input_number.computer_area_light_level_trigger + - platform: state + entity_id: input_number.computer_area_light_level_trigger - - platform: state - entity_id: sensor.computer_area_multisensor_illuminance + - platform: state + entity_id: sensor.computer_area_multisensor_illuminance binary_sensor: - name: "Computer Area Naturally Lit" @@ -58,14 +58,14 @@ template: trigger: "{{ states('input_number.computer_area_light_level_trigger') | float(default=0) }}" - trigger: - - platform: homeassistant - event: start + - platform: homeassistant + event: start - - platform: state - entity_id: input_number.deck_light_level_trigger + - platform: state + entity_id: input_number.deck_light_level_trigger - - platform: state - entity_id: sensor.deck_light_level + - platform: state + entity_id: sensor.deck_light_level binary_sensor: - name: "Deck Naturally Lit" @@ -87,23 +87,23 @@ template: trigger: "{{ states('input_number.deck_light_level_trigger') | float(default=0) }}" - trigger: - - platform: homeassistant - event: start + - platform: homeassistant + event: start - - platform: state - entity_id: input_number.dining_room_light_level_trigger + - platform: state + entity_id: input_number.dining_room_light_level_trigger - - platform: state - entity_id: sensor.dining_room_multisensor_illuminance - to: + - platform: state + entity_id: sensor.dining_room_multisensor_illuminance + to: - - platform: event - event_type: event_template_reloaded + - platform: event + event_type: event_template_reloaded binary_sensor: - name: "Dining Room Naturally Lit" unique_id: templatebinarysensor_diningroomnaturallylit - availability: "{{ states('sensor.dining_room_multisensor_illuminance') not in ['unkown', 'unavailable'] }}" + availability: "{{ states('sensor.dining_room_multisensor_illuminance') not in ['unknown', 'unavailable'] }}" delay_on: seconds: 3 delay_off: @@ -121,14 +121,14 @@ template: trigger: "{{ states('input_number.dining_room_light_level_trigger') | float(default=0) }}" - trigger: - - platform: homeassistant - event: start + - platform: homeassistant + event: start - - platform: state - entity_id: input_number.entryway_light_level_trigger + - platform: state + entity_id: input_number.entryway_light_level_trigger - - platform: state - entity_id: sensor.entryway_light_level + - platform: state + entity_id: sensor.entryway_light_level binary_sensor: - name: "Entryway Naturally Lit" @@ -150,14 +150,14 @@ template: trigger: "{{ states('input_number.entryway_light_level_trigger') | float(default=0) }}" - trigger: - - platform: homeassistant - event: start + - platform: homeassistant + event: start - - platform: state - entity_id: input_number.front_porch_light_level_trigger + - platform: state + entity_id: input_number.front_porch_light_level_trigger - - platform: state - entity_id: sensor.front_porch_light_level + - platform: state + entity_id: sensor.front_porch_light_level binary_sensor: - name: "Front Porch Naturally Lit" @@ -179,14 +179,14 @@ template: trigger: "{{ states('input_number.front_porch_light_level_trigger') | float(default=0) }}" - trigger: - - platform: homeassistant - event: start + - platform: homeassistant + event: start - - platform: state - entity_id: input_number.front_room_light_level_trigger + - platform: state + entity_id: input_number.front_room_light_level_trigger - - platform: state - entity_id: sensor.front_room_light_level + - platform: state + entity_id: sensor.front_room_light_level binary_sensor: - name: "Front Room Naturally Lit" @@ -208,14 +208,14 @@ template: trigger: "{{ states('input_number.front_room_light_level_trigger') | float(default=0) }}" - trigger: - - platform: homeassistant - event: start + - platform: homeassistant + event: start - - platform: state - entity_id: input_number.garage_overhead_light_level_trigger + - platform: state + entity_id: input_number.garage_overhead_light_level_trigger - - platform: state - entity_id: sensor.garage_multisensor_illuminance + - platform: state + entity_id: sensor.garage_multisensor_illuminance binary_sensor: - name: "Garage Naturally Lit" @@ -237,14 +237,14 @@ template: trigger: "{{ states('input_number.garage_overhead_light_level_trigger') | float(default=0) }}" - trigger: - - platform: homeassistant - event: start + - platform: homeassistant + event: start - - platform: state - entity_id: input_number.great_room_light_level_trigger + - platform: state + entity_id: input_number.great_room_light_level_trigger - - platform: state - entity_id: sensor.great_room_multisensor_illuminance + - platform: state + entity_id: sensor.great_room_multisensor_illuminance binary_sensor: - name: "Great Room Naturally Lit" @@ -266,14 +266,14 @@ template: trigger: "{{ states('input_number.great_room_light_level_trigger') | float(default=0) }}" - trigger: - - platform: homeassistant - event: start + - platform: homeassistant + event: start - - platform: state - entity_id: input_number.kitchen_light_level_trigger + - platform: state + entity_id: input_number.kitchen_light_level_trigger - - platform: state - entity_id: sensor.kitchen_multisensor_illuminance + - platform: state + entity_id: sensor.kitchen_multisensor_illuminance binary_sensor: - name: "Kitchen Naturally Lit" @@ -295,13 +295,13 @@ template: trigger: "{{ states('input_number.kitchen_light_level_trigger') | float(default=0) }}" - trigger: - - platform: homeassistant - event: start + - platform: homeassistant + event: start - - platform: state - entity_id: - - input_number.master_bedroom_light_level_trigger - - sensor.master_bedroom_multisensor_illuminance + - platform: state + entity_id: + - input_number.master_bedroom_light_level_trigger + - sensor.master_bedroom_multisensor_illuminance binary_sensor: - name: "Master Bedroom Naturally Lit" @@ -323,13 +323,13 @@ template: trigger: "{{ states('input_number.master_bedroom_light_level_trigger') | float(default=0) }}" - trigger: - - platform: homeassistant - event: start + - platform: homeassistant + event: start - - platform: state - entity_id: - - input_number.nursery_light_level_trigger - - sensor.nursery_multisensor_illuminance + - platform: state + entity_id: + - input_number.nursery_light_level_trigger + - sensor.nursery_multisensor_illuminance binary_sensor: - name: "Nursery Naturally Lit" @@ -433,4 +433,4 @@ input_number: icon: mdi:brightness-auto min: 0 max: 50000 - mode: box \ No newline at end of file + mode: box diff --git a/components/packages/openweathermap_templates.yaml b/components/packages/openweathermap_templates.yaml index ff5d5d1..74d5021 100644 --- a/components/packages/openweathermap_templates.yaml +++ b/components/packages/openweathermap_templates.yaml @@ -1,127 +1,127 @@ -# TODO -# Update to account for new get_weather_forcats BS a +# # TODO +# # Update to account for new get_weather_forcats BS a -template: - - binary_sensor: - - name: Precipitation Likely Soon - unique_id: templatebinarysensor.precipitation_likely_soon - icon: mdi:weather-rainy - availability: "{{ states('sensor.openweathermap_hourly_forecast_precipitation_probability') not in ['unkown', 'unavailable'] }}" - state: "{{ states('sensor.openweathermap_hourly_forecast_precipitation_probability')|float(default=0) >= 50.0 }}" +# template: +# - binary_sensor: +# - name: Precipitation Likely Soon +# unique_id: templatebinarysensor.precipitation_likely_soon +# icon: mdi:weather-rainy +# availability: "{{ states('sensor.openweathermap_hourly_forecast_precipitation_probability') not in ['unknown', 'unavailable'] }}" +# state: "{{ states('sensor.openweathermap_hourly_forecast_precipitation_probability')|float(default=0) >= 50.0 }}" - - name: Precipitation Likely - unique_id: templatebinarysensor.precipitation_likely - icon: mdi:weather-rainy - availability: "{{ states('sensor.openweathermap_daily_forecast_precipitation_probability') not in ['unkown', 'unavailable'] }}" - state: "{{ states('sensor.openweathermap_daily_forecast_precipitation_probability')|float(default=0) >= 50.0 }}" +# - name: Precipitation Likely +# unique_id: templatebinarysensor.precipitation_likely +# icon: mdi:weather-rainy +# availability: "{{ states('sensor.openweathermap_daily_forecast_precipitation_probability') not in ['unknown', 'unavailable'] }}" +# state: "{{ states('sensor.openweathermap_daily_forecast_precipitation_probability')|float(default=0) >= 50.0 }}" - - trigger: +# - trigger: - - platform: time_pattern - hours: /1 +# - platform: time_pattern +# hours: /1 - - platform: event - event_type: event_template_reloaded - id: "reload" +# - platform: event +# event_type: event_template_reloaded +# id: "reload" - - platform: homeassistant - event: start +# - platform: homeassistant +# event: start - action: - - service: weather.get_forecasts - data: - type: daily - target: - entity_id: weather.openweathermap_daily - response_variable: daily +# action: +# - service: weather.get_forecasts +# data: +# type: daily +# target: +# entity_id: weather.openweathermap_daily +# response_variable: daily - - service: weather.get_forecasts - data: - type: hourly - target: - entity_id: weather.openweathermap_hourly - response_variable: hourly +# - service: weather.get_forecasts +# data: +# type: hourly +# target: +# entity_id: weather.openweathermap_hourly +# response_variable: hourly - binary_sensor: - - name: "Impending Rain" - unique_id: templatebinarysensor.impending_rain - availability: "{{ states('weather.openweathermap_hourly') not in ['unkown', 'unavailable'] }}" - icon: mdi:weather-rainy - # This looks too far into the future. Cutting it down a bit - state: >- - {%- set totalprecipitation = 0 | float -%} - {%- set upcoming_precipitation = 0 | float -%} - {%- set ns = namespace() -%} - {%- set ns.totalprecipitation = 0 -%} - {%- for daypart in range(0, 8) -%} - {%- set precipitation = hourly['weather.openweathermap_hourly'].forecast[daypart].precipitation -%} - {%- set wind_speed = hourly['weather.openweathermap_hourly'].forecast[daypart].wind_speed -%} - {%- set precipitation_probability = hourly['weather.openweathermap_hourly'].forecast[daypart].precipitation_probability %} +# binary_sensor: +# - name: "Impending Rain" +# unique_id: templatebinarysensor.impending_rain +# availability: "{{ states('weather.openweathermap_hourly') not in ['unknown', 'unavailable'] }}" +# icon: mdi:weather-rainy +# # This looks too far into the future. Cutting it down a bit +# state: >- +# {%- set totalprecipitation = 0 | float -%} +# {%- set upcoming_precipitation = 0 | float -%} +# {%- set ns = namespace() -%} +# {%- set ns.totalprecipitation = 0 -%} +# {%- for daypart in range(0, 8) -%} +# {%- set precipitation = hourly['weather.openweathermap_hourly'].forecast[daypart].precipitation -%} +# {%- set wind_speed = hourly['weather.openweathermap_hourly'].forecast[daypart].wind_speed -%} +# {%- set precipitation_probability = hourly['weather.openweathermap_hourly'].forecast[daypart].precipitation_probability %} - {% if precipitation_probability > 0 -%} - {% if wind_speed > states('input_number.wind_speed_blowing_rain') |float(default=0) %} - {%- set upcoming_precipitation = precipitation * precipitation_probability -%} - {%- endif -%} - {%- endif -%} - {%- set ns.totalprecipitation = ns.totalprecipitation + upcoming_precipitation -%} - {%- endfor %} - {{ ns.totalprecipitation / 100 | float | round(0) > 0.99 }} +# {% if precipitation_probability > 0 -%} +# {% if wind_speed > states('input_number.wind_speed_blowing_rain') |float(default=0) %} +# {%- set upcoming_precipitation = precipitation * precipitation_probability -%} +# {%- endif -%} +# {%- endif -%} +# {%- set ns.totalprecipitation = ns.totalprecipitation + upcoming_precipitation -%} +# {%- endfor %} +# {{ ns.totalprecipitation / 100 | float | round(0) > 0.99 }} - sensor: - - name: "Sprinkler: Total Expected Precipitation" - unique_id: "custom_sensor.sprinkler_total_expected_precipitation" - icon: mdi:weather-pouring - unit_of_measurement: mm - availability: "{{ states('weather.openweathermap_daily') not in ['unkown', 'unavailable'] }}" - state: > - {%- set totalprecipitation = 0 | float -%} - {%- set upcoming_precipitation = 0 | float -%} - {%- set ns = namespace() -%} - {%- set ns.totalprecipitation = 0 -%} - {%- for daypart in range(0, 8) -%} - {%- set precipitation = daily['weather.openweathermap_daily'].forecast[daypart].precipitation * 25.4 -%} - {%- set precipitation_probability = daily['weather.openweathermap_daily'].forecast[daypart].precipitation_probability / 100 %} - {% if precipitation_probability >0 -%} - {%- set upcoming_precipitation = precipitation * precipitation_probability -%} - {%- endif -%} - {%- set ns.totalprecipitation = ns.totalprecipitation + upcoming_precipitation -%} - {%- endfor %} - {{ ns.totalprecipitation | float | round(0) }} +# sensor: +# - name: "Sprinkler: Total Expected Precipitation" +# unique_id: "custom_sensor.sprinkler_total_expected_precipitation" +# icon: mdi:weather-pouring +# unit_of_measurement: mm +# availability: "{{ states('weather.openweathermap_daily') not in ['unknown', 'unavailable'] }}" +# state: > +# {%- set totalprecipitation = 0 | float -%} +# {%- set upcoming_precipitation = 0 | float -%} +# {%- set ns = namespace() -%} +# {%- set ns.totalprecipitation = 0 -%} +# {%- for daypart in range(0, 8) -%} +# {%- set precipitation = daily['weather.openweathermap_daily'].forecast[daypart].precipitation * 25.4 -%} +# {%- set precipitation_probability = daily['weather.openweathermap_daily'].forecast[daypart].precipitation_probability / 100 %} +# {% if precipitation_probability >0 -%} +# {%- set upcoming_precipitation = precipitation * precipitation_probability -%} +# {%- endif -%} +# {%- set ns.totalprecipitation = ns.totalprecipitation + upcoming_precipitation -%} +# {%- endfor %} +# {{ ns.totalprecipitation | float | round(0) }} - - name: "Today's Low Temperature" - unique_id: templatesensor.templow_today - unit_of_measurement: °F - availability: "{{ states('weather.openweathermap_daily') not in ['unkown', 'unavailable'] }}" - state: "{{ daily['weather.openweathermap_daily'].forecast[0].templow }}" +# - name: "Today's Low Temperature" +# unique_id: templatesensor.templow_today +# unit_of_measurement: °F +# availability: "{{ states('weather.openweathermap_daily') not in ['unknown', 'unavailable'] }}" +# state: "{{ daily['weather.openweathermap_daily'].forecast[0].templow }}" - - name: "Today's High Temperature" - unique_id: templatesensor.temphigh_today - unit_of_measurement: °F - availability: "{{ states('weather.openweathermap_daily') not in ['unkown', 'unavailable'] }}" - state: "{{ daily['weather.openweathermap_daily'].forecast[0].temperature}}" +# - name: "Today's High Temperature" +# unique_id: templatesensor.temphigh_today +# unit_of_measurement: °F +# availability: "{{ states('weather.openweathermap_daily') not in ['unknown', 'unavailable'] }}" +# state: "{{ daily['weather.openweathermap_daily'].forecast[0].temperature}}" - - name: "Today's Chance of Precipitation" - unique_id: templatesensor.precip_chance_today - icon: mdi:cloud-percent - unit_of_measurement: '%' - availability: "{{ states('weather.openweathermap_daily') not in ['unkown', 'unavailable'] }}" - state: "{{ daily['weather.openweathermap_daily'].forecast[0].precipitation_probability}}" +# - name: "Today's Chance of Precipitation" +# unique_id: templatesensor.precip_chance_today +# icon: mdi:cloud-percent +# unit_of_measurement: '%' +# availability: "{{ states('weather.openweathermap_daily') not in ['unknown', 'unavailable'] }}" +# state: "{{ daily['weather.openweathermap_daily'].forecast[0].precipitation_probability}}" - - name: "Tomorrow's Low Temperature" - unique_id: templatesensor.templow_tomorrow - unit_of_measurement: °F - availability: "{{ states('weather.openweathermap_daily') not in ['unkown', 'unavailable'] }}" - state: "{{ daily['weather.openweathermap_daily'].forecast[1].templow}}" +# - name: "Tomorrow's Low Temperature" +# unique_id: templatesensor.templow_tomorrow +# unit_of_measurement: °F +# availability: "{{ states('weather.openweathermap_daily') not in ['unknown', 'unavailable'] }}" +# state: "{{ daily['weather.openweathermap_daily'].forecast[1].templow}}" - - name: "Tomorrow's High Temperature" - unique_id: templatesensor.temphigh_tomorrow - unit_of_measurement: °F - availability: "{{ states('weather.openweathermap_daily') not in ['unkown', 'unavailable'] }}" - state: "{{ daily['weather.openweathermap_daily'].forecast[1].temperature}}" +# - name: "Tomorrow's High Temperature" +# unique_id: templatesensor.temphigh_tomorrow +# unit_of_measurement: °F +# availability: "{{ states('weather.openweathermap_daily') not in ['unknown', 'unavailable'] }}" +# state: "{{ daily['weather.openweathermap_daily'].forecast[1].temperature}}" - - name: "Tomorrow's Chance of Precipitation" - unique_id: templatesensor.precip_chance_tomorrow - icon: mdi:cloud-percent - unit_of_measurement: '%' - availability: "{{ states('weather.openweathermap_daily') not in ['unkown', 'unavailable'] }}" - state: "{{ daily['weather.openweathermap_daily'].forecast[1].precipitation_probability}}" \ No newline at end of file +# - name: "Tomorrow's Chance of Precipitation" +# unique_id: templatesensor.precip_chance_tomorrow +# icon: mdi:cloud-percent +# unit_of_measurement: '%' +# availability: "{{ states('weather.openweathermap_daily') not in ['unknown', 'unavailable'] }}" +# state: "{{ daily['weather.openweathermap_daily'].forecast[1].precipitation_probability}}" diff --git a/components/packages/pixel_7_coordinates.yaml b/components/packages/pixel_7_coordinates.yaml index 20363ec..803237e 100644 --- a/components/packages/pixel_7_coordinates.yaml +++ b/components/packages/pixel_7_coordinates.yaml @@ -33,6 +33,8 @@ automation: state: "on" action: - - service: notify.pixel_7_coordinates + - service: notify.send_message + target: + entity_id: notify.pixel_7_coordinates data: message: "{{now().strftime('%Y-%m-%d')}}T{{now().strftime('%H:%M:%S.%f')}},{{states('device_tracker.pixel_7')}},{{state_attr('device_tracker.pixel_7','latitude')}},{{state_attr('device_tracker.pixel_7','longitude')}}" \ No newline at end of file diff --git a/components/packages/temperature_management.yaml b/components/packages/temperature_management.yaml index 66ac588..68762f9 100644 --- a/components/packages/temperature_management.yaml +++ b/components/packages/temperature_management.yaml @@ -15,243 +15,242 @@ input_number: template: - binary_sensor: - # This is ON when it is warmer outside than it is inside, as defined by input_number.warmer_outside_difference_trigger - - name: Warmer Outside - unique_id: templatebinarysensor.warmer_outside - icon: mdi:sun-snowflake-variant - device_class: heat - delay_on: - seconds: 15 - delay_off: - seconds: 15 - availability: "{{ (states('sensor.upstairs_mean_temperature') not in ['unkown', 'unavailable']) and (states('sensor.outdoors_mean_temperature') not in ['unkown', 'unavailable']) }}" - state: "{{ iif(states('sensor.outdoors_mean_temperature') | float(default=0) - states('input_number.warmer_outside_difference_trigger') | float(default=0) > states('sensor.upstairs_mean_temperature') | float(default=0) ) }}" - attributes: - indoors: "{{ states('sensor.upstairs_mean_temperature') | float(default=0) }}" - outdoors: "{{ states('sensor.outdoors_mean_temperature') | float(default=0) }}" - trigger: "{{ states('input_number.warmer_outside_difference_trigger') | float(default=0) }}" + # This is ON when it is warmer outside than it is inside, as defined by input_number.warmer_outside_difference_trigger + - name: Warmer Outside + unique_id: templatebinarysensor.warmer_outside + icon: mdi:sun-snowflake-variant + device_class: heat + delay_on: + seconds: 15 + delay_off: + seconds: 15 + availability: "{{ (states('sensor.upstairs_mean_temperature') not in ['unknown', 'unavailable']) and (states('sensor.outdoors_mean_temperature') not in ['unknown', 'unavailable']) }}" + state: "{{ iif(states('sensor.outdoors_mean_temperature') | float(default=0) - states('input_number.warmer_outside_difference_trigger') | float(default=0) > states('sensor.upstairs_mean_temperature') | float(default=0) ) }}" + attributes: + indoors: "{{ states('sensor.upstairs_mean_temperature') | float(default=0) }}" + outdoors: "{{ states('sensor.outdoors_mean_temperature') | float(default=0) }}" + trigger: "{{ states('input_number.warmer_outside_difference_trigger') | float(default=0) }}" - # This is ON when it is cooler outside than it is inside, as defined by input_number.cooler_outside_difference_trigger - - name: Cooler Outside - unique_id: templatebinarysensor.cooler_outside - icon: mdi:sun-snowflake-variant - device_class: cold - delay_on: - seconds: 15 - delay_off: - seconds: 15 - availability: "{{ (states('sensor.upstairs_mean_temperature') not in ['unkown', 'unavailable']) and (states('sensor.outdoors_mean_temperature') not in ['unkown', 'unavailable']) }}" - state: "{{ iif(states('sensor.outdoors_mean_temperature') | float(default=0) + states('input_number.cooler_outside_difference_trigger') | float(default=0) < states('sensor.upstairs_mean_temperature') | float(default=0) ) }}" - attributes: - indoors: "{{ states('sensor.upstairs_mean_temperature') | float(default=0)}}" - outdoors: "{{ states('sensor.outdoors_mean_temperature') | float(default=0)}}" - trigger: "{{ states('input_number.cooler_outside_difference_trigger') | float(default=0) }}" + # This is ON when it is cooler outside than it is inside, as defined by input_number.cooler_outside_difference_trigger + - name: Cooler Outside + unique_id: templatebinarysensor.cooler_outside + icon: mdi:sun-snowflake-variant + device_class: cold + delay_on: + seconds: 15 + delay_off: + seconds: 15 + availability: "{{ (states('sensor.upstairs_mean_temperature') not in ['unknown', 'unavailable']) and (states('sensor.outdoors_mean_temperature') not in ['unknown', 'unavailable']) }}" + state: "{{ iif(states('sensor.outdoors_mean_temperature') | float(default=0) + states('input_number.cooler_outside_difference_trigger') | float(default=0) < states('sensor.upstairs_mean_temperature') | float(default=0) ) }}" + attributes: + indoors: "{{ states('sensor.upstairs_mean_temperature') | float(default=0)}}" + outdoors: "{{ states('sensor.outdoors_mean_temperature') | float(default=0)}}" + trigger: "{{ states('input_number.cooler_outside_difference_trigger') | float(default=0) }}" - # This is ON when the temperature outside is hotter than the temp_high configured as part of the climate platform - - name: Too Hot Outside - unique_id: templatebinarysensor.too_hot_outside - icon: mdi:weather-sunny - device_class: heat - delay_on: - seconds: 15 - delay_off: - seconds: 15 - availability: "{{ (states('climate.thermostat') not in ['unkown', 'unavailable']) and (states('sensor.outdoors_mean_temperature') not in ['unkown', 'unavailable']) }}" - state: "{{states('sensor.outdoors_mean_temperature') | float(default=0) > states('sensor.hvac_target_temp_high') | float(default=0) - (states('input_number.warmer_outside_difference_trigger') | float(default=0) / 2) }}" - attributes: - outdoor_temp: "{{ states('sensor.outdoors_mean_temperature') | float(default=0)}}" - target_temp_high: "{{ state_attr('climate.thermostat','target_temp_high') | float(default=0)}}" + # This is ON when the temperature outside is hotter than the temp_high configured as part of the climate platform + - name: Too Hot Outside + unique_id: templatebinarysensor.too_hot_outside + icon: mdi:weather-sunny + device_class: heat + delay_on: + seconds: 15 + delay_off: + seconds: 15 + availability: "{{ (states('climate.thermostat') not in ['unknown', 'unavailable']) and (states('sensor.outdoors_mean_temperature') not in ['unknown', 'unavailable']) }}" + state: "{{states('sensor.outdoors_mean_temperature') | float(default=0) > states('sensor.hvac_target_temp_high') | float(default=0) - (states('input_number.warmer_outside_difference_trigger') | float(default=0) / 2) }}" + attributes: + outdoor_temp: "{{ states('sensor.outdoors_mean_temperature') | float(default=0)}}" + target_temp_high: "{{ state_attr('climate.thermostat','target_temp_high') | float(default=0)}}" - # This is ON when the thermostat is hotter than the temp_high configured as part of the climate platform - - name: Too Hot Inside - unique_id: templatebinarysensor.too_hot_inside - icon: mdi:weather-sunny - device_class: heat - availability: "{{ (states('sensor.hvac_target_temp_high') not in ['unkown', 'unavailable']) and (states('sensor.upstairs_mean_temperature') not in ['unkown', 'unavailable']) }}" - state: "{{states('sensor.upstairs_mean_temperature') | float(default=0) > states('sensor.hvac_target_temp_high') | float(default=(state_attr('climate.thermostat','temperature') |float(default=0))) - 1.0 }}" - attributes: - upstairs_mean_temp: "{{ states('sensor.upstairs_mean_temperature') | float(default=0)}}" - target_temp_high: "{{ states('sensor.hvac_target_temp_high') | float(default=0)}}" - target_temperature: "{{ state_attr('climate.thermostat','temperature') |float(default=0) }}" + # This is ON when the thermostat is hotter than the temp_high configured as part of the climate platform + - name: Too Hot Inside + unique_id: templatebinarysensor.too_hot_inside + icon: mdi:weather-sunny + device_class: heat + availability: "{{ (states('sensor.hvac_target_temp_high') not in ['unknown', 'unavailable']) and (states('sensor.upstairs_mean_temperature') not in ['unknown', 'unavailable']) }}" + state: "{{states('sensor.upstairs_mean_temperature') | float(default=0) > states('sensor.hvac_target_temp_high') | float(default=(state_attr('climate.thermostat','temperature') |float(default=0))) - 1.0 }}" + attributes: + upstairs_mean_temp: "{{ states('sensor.upstairs_mean_temperature') | float(default=0)}}" + target_temp_high: "{{ states('sensor.hvac_target_temp_high') | float(default=0)}}" + target_temperature: "{{ state_attr('climate.thermostat','temperature') |float(default=0) }}" - # This is ON when the temperature outside is colder than the temp_low configured as part of the climate platform - - name: Too Cold Outside - unique_id: templatebinarysensor.too_cold_outside - icon: mdi:snowflake - device_class: cold - delay_on: - seconds: 15 - delay_off: - seconds: 15 - availability: "{{ (states('climate.thermostat') not in ['unkown', 'unavailable']) and (states('sensor.outdoors_mean_temperature') not in ['unkown', 'unavailable']) }}" - state: "{{states('sensor.outdoors_mean_temperature') | float(default=0) < states('sensor.hvac_target_temp_low') | float(default=0) - (states('input_number.cooler_outside_difference_trigger') | float(default=0) ) }}" - attributes: - outdoor_temp: "{{ states('sensor.outdoors_mean_temperature') | float(default=0)}}" - target_temp_low: "{{ state_attr('climate.thermostat','target_temp_low') | float(default=0)}}" + # This is ON when the temperature outside is colder than the temp_low configured as part of the climate platform + - name: Too Cold Outside + unique_id: templatebinarysensor.too_cold_outside + icon: mdi:snowflake + device_class: cold + delay_on: + seconds: 15 + delay_off: + seconds: 15 + availability: "{{ (states('climate.thermostat') not in ['unknown', 'unavailable']) and (states('sensor.outdoors_mean_temperature') not in ['unknown', 'unavailable']) }}" + state: "{{states('sensor.outdoors_mean_temperature') | float(default=0) < states('sensor.hvac_target_temp_low') | float(default=0) - (states('input_number.cooler_outside_difference_trigger') | float(default=0) ) }}" + attributes: + outdoor_temp: "{{ states('sensor.outdoors_mean_temperature') | float(default=0)}}" + target_temp_low: "{{ state_attr('climate.thermostat','target_temp_low') | float(default=0)}}" - # This is ON when the thermostat is hotter than the temp_high configured as part of the climate platform - - name: Too Cold Inside - unique_id: templatebinarysensor.too_cold_inside - icon: mdi:snowflake - device_class: cold - availability: "{{ (states('sensor.hvac_target_temp_low') not in ['unkown', 'unavailable']) and (states('sensor.upstairs_mean_temperature') not in ['unkown', 'unavailable']) }}" - state: "{{states('sensor.upstairs_mean_temperature') | float(default=0) < states('sensor.hvac_target_temp_low') | float(default=(state_attr('climate.thermostat','temperature') |float(default=0))) + 1.0 }}" - attributes: - upstairs_mean_temp: "{{ states('sensor.upstairs_mean_temperature') | float(default=0)}}" - target_temp_low: "{{ states('sensor.hvac_target_temp_low') | float(default=0)}}" - target_temperature: "{{ state_attr('climate.thermostat','temperature') |float(default=0) }}" + # This is ON when the thermostat is hotter than the temp_high configured as part of the climate platform + - name: Too Cold Inside + unique_id: templatebinarysensor.too_cold_inside + icon: mdi:snowflake + device_class: cold + availability: "{{ (states('sensor.hvac_target_temp_low') not in ['unknown', 'unavailable']) and (states('sensor.upstairs_mean_temperature') not in ['unknown', 'unavailable']) }}" + state: "{{states('sensor.upstairs_mean_temperature') | float(default=0) < states('sensor.hvac_target_temp_low') | float(default=(state_attr('climate.thermostat','temperature') |float(default=0))) + 1.0 }}" + attributes: + upstairs_mean_temp: "{{ states('sensor.upstairs_mean_temperature') | float(default=0)}}" + target_temp_low: "{{ states('sensor.hvac_target_temp_low') | float(default=0)}}" + target_temperature: "{{ state_attr('climate.thermostat','temperature') |float(default=0) }}" - # This is ON when either the garage door or the exterior garage door is open while the inner garage door is open - - name: Inner Garage Door Open to Outside - unique_id: templatebinarysensor.inner_garage_door_open_to_outside - device_class: door - availability: "{{ (states('binary_sensor.inner_garage_door') not in ['unkown', 'unavailable']) and (states('binary_sensor.garage_door') not in ['unkown', 'unavailable']) and (states('binary_sensor.outer_garage_door') not in ['unkown', 'unavailable']) }}" - state: >- - {% if is_state('binary_sensor.inner_garage_door', 'on') %} - {% if is_state('binary_sensor.garage_door', 'on') or is_state('binary_sensor.outer_garage_door', 'on') %} - {{'true'}} + # This is ON when either the garage door or the exterior garage door is open while the inner garage door is open + - name: Inner Garage Door Open to Outside + unique_id: templatebinarysensor.inner_garage_door_open_to_outside + device_class: door + availability: "{{ (states('binary_sensor.inner_garage_door') not in ['unknown', 'unavailable']) and (states('binary_sensor.garage_door') not in ['unknown', 'unavailable']) and (states('binary_sensor.outer_garage_door') not in ['unknown', 'unavailable']) }}" + state: >- + {% if is_state('binary_sensor.inner_garage_door', 'on') %} + {% if is_state('binary_sensor.garage_door', 'on') or is_state('binary_sensor.outer_garage_door', 'on') %} + {{'true'}} + {% else %} + {{'false'}} + {% endif %} {% else %} {{'false'}} {% endif %} - {% else %} - {{'false'}} - {% endif %} - # This is ON when an exterior door or window has been left open for more than 10 minutes - - name: Something Open - unique_id: templatebinarysensor.something_open - icon: mdi:door-open - device_class: opening - state: "{{ iif(is_state('binary_sensor.patio_door_contact', 'on') or is_state('group.my_exterior_windows', 'on') or is_state('binary_sensor.front_door_contact', 'on') or is_state('binary_sensor.inner_garage_door_open_to_outside', 'on')) }}" + # This is ON when an exterior door or window has been left open for more than 10 minutes + - name: Something Open + unique_id: templatebinarysensor.something_open + icon: mdi:door-open + device_class: opening + state: "{{ iif(is_state('binary_sensor.patio_door_contact', 'on') or is_state('group.my_exterior_windows', 'on') or is_state('binary_sensor.front_door_contact', 'on') or is_state('binary_sensor.inner_garage_door_open_to_outside', 'on')) }}" - - name: Something Open Too Warm or Cold - unique_id: templatebinarysensor.something_open_too_warm_or_cold - device_class: problem - delay_on: - minutes: 2 - state: >- - {% if is_state('binary_sensor.something_open','on') %} - {% if is_state('binary_sensor.too_cold_inside','on') and is_state('binary_sensor.cooler_outside', 'on') and is_state('binary_sensor.getting_warmer_outside', 'off') %} - {{'true'}} - {% elif is_state('binary_sensor.too_hot_inside','on') and is_state('binary_sensor.warmer_outside', 'on') and is_state('binary_sensor.getting_cooler_outside', 'off') %} - {{'true'}} + - name: Something Open Too Warm or Cold + unique_id: templatebinarysensor.something_open_too_warm_or_cold + device_class: problem + delay_on: + minutes: 2 + state: >- + {% if is_state('binary_sensor.something_open','on') %} + {% if is_state('binary_sensor.too_cold_inside','on') and is_state('binary_sensor.cooler_outside', 'on') and is_state('binary_sensor.getting_warmer_outside', 'off') %} + {{'true'}} + {% elif is_state('binary_sensor.too_hot_inside','on') and is_state('binary_sensor.warmer_outside', 'on') and is_state('binary_sensor.getting_cooler_outside', 'off') %} + {{'true'}} + {% else %} + {{'false'}} + {% endif %} {% else %} {{'false'}} {% endif %} - {% else %} - {{'false'}} - {% endif %} - attributes: - outdoor_temp: "{{ states('sensor.outdoors_mean_temperature') | float(default=0)}}" - upstairs_mean_temp: "{{ states('sensor.upstairs_mean_temperature') | float(default=0)}}" - target_temp_high: "{{ state_attr('climate.thermostat','target_temp_high') | float(default=0)}}" - target_temp_low: "{{ state_attr('climate.thermostat','target_temp_low') | float(default=0)}}" - getting_warmer: "{{ states('binary_sensor.getting_warmer_outside') }}" - too_hot_inside: "{{ states('binary_sensor.too_hot_inside') }}" - warmer_outside: "{{ states('binary_sensor.warmer_outside') }}" - too_hot_outside: "{{ states('binary_sensor.too_hot_outside') }}" - getting_cooler: "{{ states('binary_sensor.getting_cooler_outside') }}" - too_cold_inside: "{{ states('binary_sensor.too_cold_inside') }}" - cooler_outside: "{{ states('binary_sensor.cooler_outside') }}" - too_cold_outside: "{{ states('binary_sensor.too_cold_outside') }}" + attributes: + outdoor_temp: "{{ states('sensor.outdoors_mean_temperature') | float(default=0)}}" + upstairs_mean_temp: "{{ states('sensor.upstairs_mean_temperature') | float(default=0)}}" + target_temp_high: "{{ state_attr('climate.thermostat','target_temp_high') | float(default=0)}}" + target_temp_low: "{{ state_attr('climate.thermostat','target_temp_low') | float(default=0)}}" + getting_warmer: "{{ states('binary_sensor.getting_warmer_outside') }}" + too_hot_inside: "{{ states('binary_sensor.too_hot_inside') }}" + warmer_outside: "{{ states('binary_sensor.warmer_outside') }}" + too_hot_outside: "{{ states('binary_sensor.too_hot_outside') }}" + getting_cooler: "{{ states('binary_sensor.getting_cooler_outside') }}" + too_cold_inside: "{{ states('binary_sensor.too_cold_inside') }}" + cooler_outside: "{{ states('binary_sensor.cooler_outside') }}" + too_cold_outside: "{{ states('binary_sensor.too_cold_outside') }}" - - name: Need to Open Something Too Warm or Cold - unique_id: templatebinarysensor.need_to_open_something_too_warm_or_cold - device_class: problem - # delay_on: - # minutes: 5 - state: >- - {% if is_state('binary_sensor.something_open','off') %} - {% if is_state('binary_sensor.too_cold_inside','off') and is_state('binary_sensor.too_hot_inside','off') and is_state('binary_sensor.too_cold_outside','off') and is_state('binary_sensor.too_hot_outside','off') %} - {{'true'}} + - name: Need to Open Something Too Warm or Cold + unique_id: templatebinarysensor.need_to_open_something_too_warm_or_cold + device_class: problem + # delay_on: + # minutes: 5 + state: >- + {% if is_state('binary_sensor.something_open','off') %} + {% if is_state('binary_sensor.too_cold_inside','off') and is_state('binary_sensor.too_hot_inside','off') and is_state('binary_sensor.too_cold_outside','off') and is_state('binary_sensor.too_hot_outside','off') %} + {{'true'}} + {% else %} + {{'false'}} + {% endif %} {% else %} {{'false'}} {% endif %} - {% else %} - {{'false'}} - {% endif %} - attributes: - outdoor_temp: "{{ states('sensor.outdoors_mean_temperature') | float(default=0)}}" - upstairs_mean_temp: "{{ states('sensor.upstairs_mean_temperature') | float(default=0)}}" - target_temp_high: "{{ state_attr('climate.thermostat','target_temp_high') | float(default=0)}}" - target_temp_low: "{{ state_attr('climate.thermostat','target_temp_low') | float(default=0)}}" - getting_warmer: "{{ states('binary_sensor.getting_warmer_outside') }}" - too_hot_inside: "{{ states('binary_sensor.too_hot_inside') }}" - warmer_outside: "{{ states('binary_sensor.warmer_outside') }}" - too_hot_outside: "{{ states('binary_sensor.too_hot_outside') }}" - getting_cooler: "{{ states('binary_sensor.getting_cooler_outside') }}" - too_cold_inside: "{{ states('binary_sensor.too_cold_inside') }}" - cooler_outside: "{{ states('binary_sensor.cooler_outside') }}" - too_cold_outside: "{{ states('binary_sensor.too_cold_outside') }}" - + attributes: + outdoor_temp: "{{ states('sensor.outdoors_mean_temperature') | float(default=0)}}" + upstairs_mean_temp: "{{ states('sensor.upstairs_mean_temperature') | float(default=0)}}" + target_temp_high: "{{ state_attr('climate.thermostat','target_temp_high') | float(default=0)}}" + target_temp_low: "{{ state_attr('climate.thermostat','target_temp_low') | float(default=0)}}" + getting_warmer: "{{ states('binary_sensor.getting_warmer_outside') }}" + too_hot_inside: "{{ states('binary_sensor.too_hot_inside') }}" + warmer_outside: "{{ states('binary_sensor.warmer_outside') }}" + too_hot_outside: "{{ states('binary_sensor.too_hot_outside') }}" + getting_cooler: "{{ states('binary_sensor.getting_cooler_outside') }}" + too_cold_inside: "{{ states('binary_sensor.too_cold_inside') }}" + cooler_outside: "{{ states('binary_sensor.cooler_outside') }}" + too_cold_outside: "{{ states('binary_sensor.too_cold_outside') }}" - sensor: - - name: Outdoor Temperature Gradient - unique_id: templatesensor.outdoor_temperature_gradient - state: "{{ (state_attr('binary_sensor.getting_warmer_outside','gradient') | float(default=0) * 10000) | round(2)}}" - availability: "{{ (states('binary_sensor.getting_warmer_outside') not in ['unkown', 'unavailable']) }}" - icon: mdi:sun-thermometer - state_class: measurement - unit_of_measurement: p - attributes: - outdoor_temp: "{{ states('sensor.outdoors_mean_temperature') | float(default=0)}}" - target_temp_high: "{{ state_attr('climate.thermostat','target_temp_high') | float(default=0)}}" - target_temp_low: "{{ state_attr('climate.thermostat','target_temp_low') | float(default=0)}}" - getting_warmer: "{{ states('binary_sensor.getting_warmer_outside') }}" - warmer_outside: "{{ states('binary_sensor.warmer_outside') }}" - too_hot_outside: "{{ states('binary_sensor.too_hot_outside') }}" - getting_cooler: "{{ states('binary_sensor.getting_cooler_outside') }}" - cooler_outside: "{{ states('binary_sensor.cooler_outside') }}" - too_cold_outside: "{{ states('binary_sensor.too_cold_outside') }}" + - name: 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']) }}" + icon: mdi:sun-thermometer + state_class: measurement + unit_of_measurement: p + attributes: + outdoor_temp: "{{ states('sensor.outdoors_mean_temperature') | float(default=0)}}" + target_temp_high: "{{ state_attr('climate.thermostat','target_temp_high') | float(default=0)}}" + target_temp_low: "{{ state_attr('climate.thermostat','target_temp_low') | float(default=0)}}" + getting_warmer: "{{ states('binary_sensor.getting_warmer_outside') }}" + warmer_outside: "{{ states('binary_sensor.warmer_outside') }}" + too_hot_outside: "{{ states('binary_sensor.too_hot_outside') }}" + getting_cooler: "{{ states('binary_sensor.getting_cooler_outside') }}" + cooler_outside: "{{ states('binary_sensor.cooler_outside') }}" + too_cold_outside: "{{ states('binary_sensor.too_cold_outside') }}" - - name: HVAC Target Temp Low - unique_id: templatesensor_hvac_target_temp_low - state: "{{state_attr('climate.thermostat','target_temp_low')}}" - availability: "{{ (states('climate.thermostat') not in ['unkown', 'unavailable']) }}" - device_class: temperature - unit_of_measurement: "°F" - attributes: - hvac_action: "{{state_attr('climate.thermostat','hvac_action')}}" - preset_mode: "{{state_attr('climate.thermostat','preset_mode')}}" - climate_mode_mode: "{{state_attr('climate.thermostat','climate_mode')}}" + - name: HVAC Target Temp Low + unique_id: templatesensor_hvac_target_temp_low + state: "{{state_attr('climate.thermostat','target_temp_low')}}" + availability: "{{ (states('climate.thermostat') not in ['unknown', 'unavailable']) }}" + device_class: temperature + unit_of_measurement: "°F" + attributes: + hvac_action: "{{state_attr('climate.thermostat','hvac_action')}}" + preset_mode: "{{state_attr('climate.thermostat','preset_mode')}}" + climate_mode_mode: "{{state_attr('climate.thermostat','climate_mode')}}" - - name: HVAC Target Temp High - unique_id: templatesensor_hvac_target_temp_high - state: "{{state_attr('climate.thermostat','target_temp_high')}}" - availability: "{{ (states('climate.thermostat') not in ['unkown', 'unavailable']) }}" - device_class: temperature - unit_of_measurement: "°F" - attributes: - hvac_action: "{{state_attr('climate.thermostat','hvac_action')}}" - preset_mode: "{{state_attr('climate.thermostat','preset_mode')}}" - climate_mode_mode: "{{state_attr('climate.thermostat','climate_mode')}}" + - name: HVAC Target Temp High + unique_id: templatesensor_hvac_target_temp_high + state: "{{state_attr('climate.thermostat','target_temp_high')}}" + availability: "{{ (states('climate.thermostat') not in ['unknown', 'unavailable']) }}" + device_class: temperature + unit_of_measurement: "°F" + attributes: + hvac_action: "{{state_attr('climate.thermostat','hvac_action')}}" + preset_mode: "{{state_attr('climate.thermostat','preset_mode')}}" + climate_mode_mode: "{{state_attr('climate.thermostat','climate_mode')}}" - - name: HVAC Target Temperature - unique_id: templatesensor_hvac_target_temperature - state: "{{state_attr('climate.thermostat','temperature')}}" - availability: "{{ (states('climate.thermostat') not in ['unkown', 'unavailable']) }}" - device_class: temperature - unit_of_measurement: "°F" - attributes: - hvac_action: "{{state_attr('climate.thermostat','hvac_action')}}" - preset_mode: "{{state_attr('climate.thermostat','preset_mode')}}" - climate_mode_mode: "{{state_attr('climate.thermostat','climate_mode')}}" + - name: HVAC Target Temperature + unique_id: templatesensor_hvac_target_temperature + state: "{{state_attr('climate.thermostat','temperature')}}" + availability: "{{ (states('climate.thermostat') not in ['unknown', 'unavailable']) }}" + device_class: temperature + unit_of_measurement: "°F" + attributes: + hvac_action: "{{state_attr('climate.thermostat','hvac_action')}}" + preset_mode: "{{state_attr('climate.thermostat','preset_mode')}}" + climate_mode_mode: "{{state_attr('climate.thermostat','climate_mode')}}" - - name: HVAC Current Temperature - unique_id: templatesensor_hvac_current_temperature - icon: mdi:fan-clock - state: "{{state_attr('climate.thermostat','current_temperature')}}" - availability: "{{ (states('climate.thermostat') not in ['unkown', 'unavailable']) }}" - device_class: temperature - unit_of_measurement: "°F" - attributes: - hvac_action: "{{state_attr('climate.thermostat','hvac_action')}}" - preset_mode: "{{state_attr('climate.thermostat','preset_mode')}}" - climate_mode_mode: "{{state_attr('climate.thermostat','climate_mode')}}" + - name: HVAC Current Temperature + unique_id: templatesensor_hvac_current_temperature + icon: mdi:fan-clock + state: "{{state_attr('climate.thermostat','current_temperature')}}" + availability: "{{ (states('climate.thermostat') not in ['unknown', 'unavailable']) }}" + device_class: temperature + unit_of_measurement: "°F" + attributes: + hvac_action: "{{state_attr('climate.thermostat','hvac_action')}}" + preset_mode: "{{state_attr('climate.thermostat','preset_mode')}}" + climate_mode_mode: "{{state_attr('climate.thermostat','climate_mode')}}" - - name: HVAC Fan Min On Time - unique_id: templatesensor_hvac_fan_min_on_time - state: "{{state_attr('climate.thermostat','fan_min_on_time')}}" - availability: "{{ (states('climate.thermostat') not in ['unkown', 'unavailable']) }}" - device_class: duration - unit_of_measurement: min + - name: HVAC Fan Min On Time + unique_id: templatesensor_hvac_fan_min_on_time + state: "{{state_attr('climate.thermostat','fan_min_on_time')}}" + availability: "{{ (states('climate.thermostat') not in ['unknown', 'unavailable']) }}" + device_class: duration + unit_of_measurement: min diff --git a/components/packages/utility_meter/total.yaml b/components/packages/utility_meter/total.yaml index 54bfeb2..2dff0ed 100644 --- a/components/packages/utility_meter/total.yaml +++ b/components/packages/utility_meter/total.yaml @@ -43,183 +43,182 @@ utility_meter: template: - sensor: + - unique_id: templatebinarysensor.hourly_energy_non_summer_cost + name: Hourly Energy Non-Summer Total Cost + device_class: monetary + state_class: total + unit_of_measurement: "$" + icon: mdi:currency-usd + availability: "{{ states('sensor.hourly_energy_non_summer') not in ['unknown', 'unavailable'] and states('sensor.nonsummer_per_kwh') not in ['unknown', 'unavailable'] }}" + state: "{{ states('sensor.hourly_energy_non_summer')|float(default=0) * states('sensor.nonsummer_per_kwh')|float(default=0) }}" - - unique_id: templatebinarysensor.hourly_energy_non_summer_cost - name: Hourly Energy Non-Summer Total Cost - device_class: monetary - state_class: total - unit_of_measurement: '$' - icon: mdi:currency-usd - availability: "{{ states('sensor.hourly_energy_non_summer') not in ['unkown', 'unavailable'] and states('sensor.nonsummer_per_kwh') not in ['unkown', 'unavailable'] }}" - state: "{{ states('sensor.hourly_energy_non_summer')|float(default=0) * states('sensor.nonsummer_per_kwh')|float(default=0) }}" + - unique_id: templatebinarysensor.hourly_energy_summer_peak_cost + name: Hourly Energy Summer Peak Total Cost + device_class: monetary + state_class: total + unit_of_measurement: "$" + icon: mdi:currency-usd + availability: "{{ states('sensor.hourly_energy_summer_peak') not in ['unknown', 'unavailable'] and states('sensor.summerpeak_per_kwh') not in ['unknown', 'unavailable'] }}" + state: "{{ states('sensor.hourly_energy_summer_peak')|float(default=0) * states('sensor.summerpeak_per_kwh')|float(default=0) }}" - - unique_id: templatebinarysensor.hourly_energy_summer_peak_cost - name: Hourly Energy Summer Peak Total Cost - device_class: monetary - state_class: total - unit_of_measurement: '$' - icon: mdi:currency-usd - availability: "{{ states('sensor.hourly_energy_summer_peak') not in ['unkown', 'unavailable'] and states('sensor.summerpeak_per_kwh') not in ['unkown', 'unavailable'] }}" - state: "{{ states('sensor.hourly_energy_summer_peak')|float(default=0) * states('sensor.summerpeak_per_kwh')|float(default=0) }}" + - unique_id: templatebinarysensor.hourly_energy_summer_non_peak_cost + name: Hourly Energy Summer Non-Peak Total Cost + device_class: monetary + state_class: total + unit_of_measurement: "$" + icon: mdi:currency-usd + availability: "{{ states('sensor.hourly_energy_summer_non_peak') not in ['unknown', 'unavailable'] and states('sensor.summernonpeak_per_kwh') not in ['unknown', 'unavailable'] }}" + state: "{{ states('sensor.hourly_energy_summer_non_peak')|float(default=0) * states('sensor.summernonpeak_per_kwh')|float(default=0) }}" - - unique_id: templatebinarysensor.hourly_energy_summer_non_peak_cost - name: Hourly Energy Summer Non-Peak Total Cost - device_class: monetary - state_class: total - unit_of_measurement: '$' - icon: mdi:currency-usd - availability: "{{ states('sensor.hourly_energy_summer_non_peak') not in ['unkown', 'unavailable'] and states('sensor.summernonpeak_per_kwh') not in ['unkown', 'unavailable'] }}" - state: "{{ states('sensor.hourly_energy_summer_non_peak')|float(default=0) * states('sensor.summernonpeak_per_kwh')|float(default=0) }}" + - unique_id: templatebinarysensor.daily_energy_non_summer_cost + name: Daily Energy Non-Summer Total Cost + device_class: monetary + state_class: total + unit_of_measurement: "$" + icon: mdi:currency-usd + availability: "{{ states('sensor.daily_energy_non_summer') not in ['unknown', 'unavailable'] and states('sensor.nonsummer_per_kwh') not in ['unknown', 'unavailable'] }}" + state: "{{ states('sensor.daily_energy_non_summer')|float(default=0) * states('sensor.nonsummer_per_kwh')|float(default=0) }}" - - unique_id: templatebinarysensor.daily_energy_non_summer_cost - name: Daily Energy Non-Summer Total Cost - device_class: monetary - state_class: total - unit_of_measurement: '$' - icon: mdi:currency-usd - availability: "{{ states('sensor.daily_energy_non_summer') not in ['unkown', 'unavailable'] and states('sensor.nonsummer_per_kwh') not in ['unkown', 'unavailable'] }}" - state: "{{ states('sensor.daily_energy_non_summer')|float(default=0) * states('sensor.nonsummer_per_kwh')|float(default=0) }}" + - unique_id: templatebinarysensor.daily_energy_summer_peak_cost + name: Daily Energy Summer Peak Total Cost + device_class: monetary + state_class: total + unit_of_measurement: "$" + icon: mdi:currency-usd + availability: "{{ states('sensor.daily_energy_summer_peak') not in ['unknown', 'unavailable'] and states('sensor.summerpeak_per_kwh') not in ['unknown', 'unavailable'] }}" + state: "{{ states('sensor.daily_energy_summer_peak')|float(default=0) * states('sensor.summerpeak_per_kwh')|float(default=0) }}" - - unique_id: templatebinarysensor.daily_energy_summer_peak_cost - name: Daily Energy Summer Peak Total Cost - device_class: monetary - state_class: total - unit_of_measurement: '$' - icon: mdi:currency-usd - availability: "{{ states('sensor.daily_energy_summer_peak') not in ['unkown', 'unavailable'] and states('sensor.summerpeak_per_kwh') not in ['unkown', 'unavailable'] }}" - state: "{{ states('sensor.daily_energy_summer_peak')|float(default=0) * states('sensor.summerpeak_per_kwh')|float(default=0) }}" + - unique_id: templatebinarysensor.daily_energy_summer_non_peak_cost + name: Daily Energy Summer Non-Peak Total Cost + device_class: monetary + state_class: total + unit_of_measurement: "$" + icon: mdi:currency-usd + availability: "{{ states('sensor.daily_energy_summer_non_peak') not in ['unknown', 'unavailable'] and states('sensor.summernonpeak_per_kwh') not in ['unknown', 'unavailable'] }}" + state: "{{ states('sensor.daily_energy_summer_non_peak')|float(default=0) * states('sensor.summernonpeak_per_kwh')|float(default=0) }}" - - unique_id: templatebinarysensor.daily_energy_summer_non_peak_cost - name: Daily Energy Summer Non-Peak Total Cost - device_class: monetary - state_class: total - unit_of_measurement: '$' - icon: mdi:currency-usd - availability: "{{ states('sensor.daily_energy_summer_non_peak') not in ['unkown', 'unavailable'] and states('sensor.summernonpeak_per_kwh') not in ['unkown', 'unavailable'] }}" - state: "{{ states('sensor.daily_energy_summer_non_peak')|float(default=0) * states('sensor.summernonpeak_per_kwh')|float(default=0) }}" + - unique_id: templatebinarysensor.weekly_energy_non_summer_cost + name: Weekly Energy Non-Summer Total Cost + device_class: monetary + state_class: total + unit_of_measurement: "$" + icon: mdi:currency-usd + availability: "{{ states('sensor.weekly_energy_non_summer') not in ['unknown', 'unavailable'] and states('sensor.nonsummer_per_kwh') not in ['unknown', 'unavailable'] }}" + state: "{{ states('sensor.weekly_energy_non_summer')|float(default=0) * states('sensor.nonsummer_per_kwh')|float(default=0) }}" - - unique_id: templatebinarysensor.weekly_energy_non_summer_cost - name: Weekly Energy Non-Summer Total Cost - device_class: monetary - state_class: total - unit_of_measurement: '$' - icon: mdi:currency-usd - availability: "{{ states('sensor.weekly_energy_non_summer') not in ['unkown', 'unavailable'] and states('sensor.nonsummer_per_kwh') not in ['unkown', 'unavailable'] }}" - state: "{{ states('sensor.weekly_energy_non_summer')|float(default=0) * states('sensor.nonsummer_per_kwh')|float(default=0) }}" + - unique_id: templatebinarysensor.weekly_energy_summer_peak_cost + name: Weekly Energy Summer Peak Total Cost + device_class: monetary + state_class: total + unit_of_measurement: "$" + icon: mdi:currency-usd + availability: "{{ states('sensor.weekly_energy_summer_peak') not in ['unknown', 'unavailable'] and states('sensor.summerpeak_per_kwh') not in ['unknown', 'unavailable'] }}" + state: "{{ states('sensor.weekly_energy_summer_peak')|float(default=0) * states('sensor.summerpeak_per_kwh')|float(default=0) }}" - - unique_id: templatebinarysensor.weekly_energy_summer_peak_cost - name: Weekly Energy Summer Peak Total Cost - device_class: monetary - state_class: total - unit_of_measurement: '$' - icon: mdi:currency-usd - availability: "{{ states('sensor.weekly_energy_summer_peak') not in ['unkown', 'unavailable'] and states('sensor.summerpeak_per_kwh') not in ['unkown', 'unavailable'] }}" - state: "{{ states('sensor.weekly_energy_summer_peak')|float(default=0) * states('sensor.summerpeak_per_kwh')|float(default=0) }}" + - unique_id: templatebinarysensor.weekly_energy_summer_non_peak_cost + name: Weekly Energy Summer Non-Peak Total Cost + device_class: monetary + state_class: total + unit_of_measurement: "$" + icon: mdi:currency-usd + availability: "{{ states('sensor.weekly_energy_summer_non_peak') not in ['unknown', 'unavailable'] and states('sensor.summernonpeak_per_kwh') not in ['unknown', 'unavailable'] }}" + state: "{{ states('sensor.weekly_energy_summer_non_peak')|float(default=0) * states('sensor.summernonpeak_per_kwh')|float(default=0) }}" - - unique_id: templatebinarysensor.weekly_energy_summer_non_peak_cost - name: Weekly Energy Summer Non-Peak Total Cost - device_class: monetary - state_class: total - unit_of_measurement: '$' - icon: mdi:currency-usd - availability: "{{ states('sensor.weekly_energy_summer_non_peak') not in ['unkown', 'unavailable'] and states('sensor.summernonpeak_per_kwh') not in ['unkown', 'unavailable'] }}" - state: "{{ states('sensor.weekly_energy_summer_non_peak')|float(default=0) * states('sensor.summernonpeak_per_kwh')|float(default=0) }}" + - unique_id: templatebinarysensor.monthly_energy_non_summer_cost + name: Monthly Energy Non-Summer Total Cost + device_class: monetary + state_class: total + unit_of_measurement: "$" + icon: mdi:currency-usd + availability: "{{ states('sensor.monthly_energy_non_summer') not in ['unknown', 'unavailable'] and states('sensor.nonsummer_per_kwh') not in ['unknown', 'unavailable'] }}" + state: "{{ states('sensor.monthly_energy_non_summer')|float(default=0) * states('sensor.nonsummer_per_kwh')|float(default=0) }}" - - unique_id: templatebinarysensor.monthly_energy_non_summer_cost - name: Monthly Energy Non-Summer Total Cost - device_class: monetary - state_class: total - unit_of_measurement: '$' - icon: mdi:currency-usd - availability: "{{ states('sensor.monthly_energy_non_summer') not in ['unkown', 'unavailable'] and states('sensor.nonsummer_per_kwh') not in ['unkown', 'unavailable'] }}" - state: "{{ states('sensor.monthly_energy_non_summer')|float(default=0) * states('sensor.nonsummer_per_kwh')|float(default=0) }}" + - unique_id: templatebinarysensor.monthly_energy_summer_peak_cost + name: Monthly Energy Summer Peak Total Cost + device_class: monetary + state_class: total + unit_of_measurement: "$" + icon: mdi:currency-usd + availability: "{{ states('sensor.monthly_energy_summer_peak') not in ['unknown', 'unavailable'] and states('sensor.summerpeak_per_kwh') not in ['unknown', 'unavailable'] }}" + state: "{{ states('sensor.monthly_energy_summer_peak')|float(default=0) * states('sensor.summerpeak_per_kwh')|float(default=0) }}" - - unique_id: templatebinarysensor.monthly_energy_summer_peak_cost - name: Monthly Energy Summer Peak Total Cost - device_class: monetary - state_class: total - unit_of_measurement: '$' - icon: mdi:currency-usd - availability: "{{ states('sensor.monthly_energy_summer_peak') not in ['unkown', 'unavailable'] and states('sensor.summerpeak_per_kwh') not in ['unkown', 'unavailable'] }}" - state: "{{ states('sensor.monthly_energy_summer_peak')|float(default=0) * states('sensor.summerpeak_per_kwh')|float(default=0) }}" + - unique_id: templatebinarysensor.monthly_energy_summer_non_peak_cost + name: Monthly Energy Summer Non-Peak Total Cost + device_class: monetary + state_class: total + unit_of_measurement: "$" + icon: mdi:currency-usd + availability: "{{ states('sensor.monthly_energy_summer_non_peak') not in ['unknown', 'unavailable'] and states('sensor.summernonpeak_per_kwh') not in ['unknown', 'unavailable'] }}" + state: "{{ states('sensor.monthly_energy_summer_non_peak')|float(default=0) * states('sensor.summernonpeak_per_kwh')|float(default=0) }}" - - unique_id: templatebinarysensor.monthly_energy_summer_non_peak_cost - name: Monthly Energy Summer Non-Peak Total Cost - device_class: monetary - state_class: total - unit_of_measurement: '$' - icon: mdi:currency-usd - availability: "{{ states('sensor.monthly_energy_summer_non_peak') not in ['unkown', 'unavailable'] and states('sensor.summernonpeak_per_kwh') not in ['unkown', 'unavailable'] }}" - state: "{{ states('sensor.monthly_energy_summer_non_peak')|float(default=0) * states('sensor.summernonpeak_per_kwh')|float(default=0) }}" + - unique_id: templatebinarysensor.hourly_energy_total_cost + name: Hourly Energy Total Cost + device_class: monetary + state_class: total + unit_of_measurement: "$" + icon: mdi:currency-usd + availability: "{{ states('sensor.hourly_energy_non_summer_total_cost') not in ['unknown', 'unavailable'] and states('sensor.hourly_energy_summer_non_peak_total_cost') not in ['unknown', 'unavailable'] and states('sensor.hourly_energy_summer_peak_total_cost') not in ['unknown', 'unavailable'] }}" + state: "{{ states('sensor.hourly_energy_non_summer_total_cost')|float(default=0) + states('sensor.hourly_energy_summer_non_peak_total_cost')|float(default=0) + states('sensor.hourly_energy_summer_peak_total_cost')|float(default=0) }}" - - unique_id: templatebinarysensor.hourly_energy_total_cost - name: Hourly Energy Total Cost - device_class: monetary - state_class: total - unit_of_measurement: '$' - icon: mdi:currency-usd - availability: "{{ states('sensor.hourly_energy_non_summer_total_cost') not in ['unkown', 'unavailable'] and states('sensor.hourly_energy_summer_non_peak_total_cost') not in ['unkown', 'unavailable'] and states('sensor.hourly_energy_summer_peak_total_cost') not in ['unkown', 'unavailable'] }}" - state: "{{ states('sensor.hourly_energy_non_summer_total_cost')|float(default=0) + states('sensor.hourly_energy_summer_non_peak_total_cost')|float(default=0) + states('sensor.hourly_energy_summer_peak_total_cost')|float(default=0) }}" + - unique_id: templatebinarysensor.daily_energy_total_cost + name: Daily Energy Total Cost + device_class: monetary + state_class: total + unit_of_measurement: "$" + icon: mdi:currency-usd + availability: "{{ states('sensor.daily_energy_non_summer_total_cost') not in ['unknown', 'unavailable'] and states('sensor.daily_energy_summer_non_peak_total_cost') not in ['unknown', 'unavailable'] and states('sensor.daily_energy_summer_peak_total_cost') not in ['unknown', 'unavailable'] }}" + state: "{{ states('sensor.daily_energy_non_summer_total_cost')|float(default=0) + states('sensor.daily_energy_summer_non_peak_total_cost')|float(default=0) + states('sensor.daily_energy_summer_peak_total_cost')|float(default=0) }}" - - unique_id: templatebinarysensor.daily_energy_total_cost - name: Daily Energy Total Cost - device_class: monetary - state_class: total - unit_of_measurement: '$' - icon: mdi:currency-usd - availability: "{{ states('sensor.daily_energy_non_summer_total_cost') not in ['unkown', 'unavailable'] and states('sensor.daily_energy_summer_non_peak_total_cost') not in ['unkown', 'unavailable'] and states('sensor.daily_energy_summer_peak_total_cost') not in ['unkown', 'unavailable'] }}" - state: "{{ states('sensor.daily_energy_non_summer_total_cost')|float(default=0) + states('sensor.daily_energy_summer_non_peak_total_cost')|float(default=0) + states('sensor.daily_energy_summer_peak_total_cost')|float(default=0) }}" + - unique_id: templatebinarysensor.weekly_energy_total_cost + name: Weekly Energy Total Cost + device_class: monetary + state_class: total + unit_of_measurement: "$" + icon: mdi:currency-usd + availability: "{{ states('sensor.weekly_energy_non_summer_total_cost') not in ['unknown', 'unavailable'] and states('sensor.weekly_energy_summer_non_peak_total_cost') not in ['unknown', 'unavailable'] and states('sensor.weekly_energy_summer_peak_total_cost') not in ['unknown', 'unavailable'] }}" + state: "{{ states('sensor.weekly_energy_non_summer_total_cost')|float(default=0) + states('sensor.weekly_energy_summer_non_peak_total_cost')|float(default=0) + states('sensor.weekly_energy_summer_peak_total_cost')|float(default=0) }}" - - unique_id: templatebinarysensor.weekly_energy_total_cost - name: Weekly Energy Total Cost - device_class: monetary - state_class: total - unit_of_measurement: '$' - icon: mdi:currency-usd - availability: "{{ states('sensor.weekly_energy_non_summer_total_cost') not in ['unkown', 'unavailable'] and states('sensor.weekly_energy_summer_non_peak_total_cost') not in ['unkown', 'unavailable'] and states('sensor.weekly_energy_summer_peak_total_cost') not in ['unkown', 'unavailable'] }}" - state: "{{ states('sensor.weekly_energy_non_summer_total_cost')|float(default=0) + states('sensor.weekly_energy_summer_non_peak_total_cost')|float(default=0) + states('sensor.weekly_energy_summer_peak_total_cost')|float(default=0) }}" + - unique_id: templatebinarysensor.monthly_energy_total_cost + name: Monthly Energy Total Cost + device_class: monetary + state_class: total + unit_of_measurement: "$" + icon: mdi:currency-usd + availability: "{{ states('sensor.monthly_energy_non_summer_total_cost') not in ['unknown', 'unavailable'] and states('sensor.monthly_energy_summer_non_peak_total_cost') not in ['unknown', 'unavailable'] and states('sensor.monthly_energy_summer_peak_total_cost') not in ['unknown', 'unavailable'] }}" + state: "{{ states('sensor.monthly_energy_non_summer_total_cost')|float(default=0) + states('sensor.monthly_energy_summer_non_peak_total_cost')|float(default=0) + states('sensor.monthly_energy_summer_peak_total_cost')|float(default=0) }}" - - unique_id: templatebinarysensor.monthly_energy_total_cost - name: Monthly Energy Total Cost - device_class: monetary - state_class: total - unit_of_measurement: '$' - icon: mdi:currency-usd - availability: "{{ states('sensor.monthly_energy_non_summer_total_cost') not in ['unkown', 'unavailable'] and states('sensor.monthly_energy_summer_non_peak_total_cost') not in ['unkown', 'unavailable'] and states('sensor.monthly_energy_summer_peak_total_cost') not in ['unkown', 'unavailable'] }}" - state: "{{ states('sensor.monthly_energy_non_summer_total_cost')|float(default=0) + states('sensor.monthly_energy_summer_non_peak_total_cost')|float(default=0) + states('sensor.monthly_energy_summer_peak_total_cost')|float(default=0) }}" + - unique_id: templatebinarysensor.hourly_energy_total + name: Hourly Energy Total + device_class: energy + state_class: total + unit_of_measurement: kWh + icon: mdi:flash + availability: "{{ states('sensor.hourly_energy_non_summer') not in ['unknown', 'unavailable'] and states('sensor.hourly_energy_summer_non_peak') not in ['unknown', 'unavailable'] and states('sensor.hourly_energy_summer_peak') not in ['unknown', 'unavailable'] }}" + state: "{{ states('sensor.hourly_energy_non_summer')|float(default=0) + states('sensor.hourly_energy_summer_non_peak')|float(default=0) + states('sensor.hourly_energy_summer_peak')|float(default=0) }}" - - unique_id: templatebinarysensor.hourly_energy_total - name: Hourly Energy Total - device_class: energy - state_class: total - unit_of_measurement: kWh - icon: mdi:flash - availability: "{{ states('sensor.hourly_energy_non_summer') not in ['unkown', 'unavailable'] and states('sensor.hourly_energy_summer_non_peak') not in ['unkown', 'unavailable'] and states('sensor.hourly_energy_summer_peak') not in ['unkown', 'unavailable'] }}" - state: "{{ states('sensor.hourly_energy_non_summer')|float(default=0) + states('sensor.hourly_energy_summer_non_peak')|float(default=0) + states('sensor.hourly_energy_summer_peak')|float(default=0) }}" + - unique_id: templatebinarysensor.daily_energy_total + name: Daily Energy Total + device_class: energy + state_class: total + unit_of_measurement: kWh + icon: mdi:flash + availability: "{{ states('sensor.daily_energy_non_summer') not in ['unknown', 'unavailable'] and states('sensor.daily_energy_summer_non_peak') not in ['unknown', 'unavailable'] and states('sensor.daily_energy_summer_peak') not in ['unknown', 'unavailable'] }}" + state: "{{ states('sensor.daily_energy_non_summer')|float(default=0) + states('sensor.daily_energy_summer_non_peak')|float(default=0) + states('sensor.daily_energy_summer_peak')|float(default=0) }}" - - unique_id: templatebinarysensor.daily_energy_total - name: Daily Energy Total - device_class: energy - state_class: total - unit_of_measurement: kWh - icon: mdi:flash - availability: "{{ states('sensor.daily_energy_non_summer') not in ['unkown', 'unavailable'] and states('sensor.daily_energy_summer_non_peak') not in ['unkown', 'unavailable'] and states('sensor.daily_energy_summer_peak') not in ['unkown', 'unavailable'] }}" - state: "{{ states('sensor.daily_energy_non_summer')|float(default=0) + states('sensor.daily_energy_summer_non_peak')|float(default=0) + states('sensor.daily_energy_summer_peak')|float(default=0) }}" + - unique_id: templatebinarysensor.weekly_energy_total + name: Weekly Energy Total + device_class: energy + state_class: total + unit_of_measurement: kWh + icon: mdi:flash + availability: "{{ states('sensor.weekly_energy_non_summer') not in ['unknown', 'unavailable'] and states('sensor.weekly_energy_summer_non_peak') not in ['unknown', 'unavailable'] and states('sensor.weekly_energy_summer_peak') not in ['unknown', 'unavailable'] }}" + state: "{{ states('sensor.weekly_energy_non_summer')|float(default=0) + states('sensor.weekly_energy_summer_non_peak')|float(default=0) + states('sensor.weekly_energy_summer_peak')|float(default=0) }}" - - unique_id: templatebinarysensor.weekly_energy_total - name: Weekly Energy Total - device_class: energy - state_class: total - unit_of_measurement: kWh - icon: mdi:flash - availability: "{{ states('sensor.weekly_energy_non_summer') not in ['unkown', 'unavailable'] and states('sensor.weekly_energy_summer_non_peak') not in ['unkown', 'unavailable'] and states('sensor.weekly_energy_summer_peak') not in ['unkown', 'unavailable'] }}" - state: "{{ states('sensor.weekly_energy_non_summer')|float(default=0) + states('sensor.weekly_energy_summer_non_peak')|float(default=0) + states('sensor.weekly_energy_summer_peak')|float(default=0) }}" - - - unique_id: templatebinarysensor.monthly_energy_total - name: Monthly Energy Total - device_class: energy - state_class: total - unit_of_measurement: kWh - icon: mdi:flash - availability: "{{ states('sensor.monthly_energy_non_summer') not in ['unkown', 'unavailable'] and states('sensor.monthly_energy_summer_non_peak') not in ['unkown', 'unavailable'] and states('sensor.monthly_energy_summer_peak') not in ['unkown', 'unavailable'] }}" - state: "{{ states('sensor.monthly_energy_non_summer')|float(default=0) + states('sensor.monthly_energy_summer_non_peak')|float(default=0) + states('sensor.monthly_energy_summer_peak')|float(default=0) }}" \ No newline at end of file + - unique_id: templatebinarysensor.monthly_energy_total + name: Monthly Energy Total + device_class: energy + state_class: total + unit_of_measurement: kWh + icon: mdi:flash + availability: "{{ states('sensor.monthly_energy_non_summer') not in ['unknown', 'unavailable'] and states('sensor.monthly_energy_summer_non_peak') not in ['unknown', 'unavailable'] and states('sensor.monthly_energy_summer_peak') not in ['unknown', 'unavailable'] }}" + state: "{{ states('sensor.monthly_energy_non_summer')|float(default=0) + states('sensor.monthly_energy_summer_non_peak')|float(default=0) + states('sensor.monthly_energy_summer_peak')|float(default=0) }}" diff --git a/lovelace/details/view-weather.yaml b/lovelace/details/view-weather.yaml index 1817487..0bf2e72 100644 --- a/lovelace/details/view-weather.yaml +++ b/lovelace/details/view-weather.yaml @@ -34,14 +34,14 @@ cards: - type: weather-forecast - entity: weather.openweathermap_hourly + entity: weather.forecast_home name: Next 5 Hours show_current: true show_forecast: true forecast_type: hourly - type: weather-forecast - entity: weather.openweathermap_daily + entity: weather.forecast_home name: Next 5 Days show_current: true show_forecast: true diff --git a/lovelace/phone/home.yaml b/lovelace/phone/home.yaml index a125d9f..a8563a9 100644 --- a/lovelace/phone/home.yaml +++ b/lovelace/phone/home.yaml @@ -201,7 +201,7 @@ cards: Good morning, {{user}}! {%endif%} secondary: |- - Today should be {{states('sensor.openweathermap_daily_forecast_condition')}}, with a high of {{states('sensor.openweathermap_daily_forecast_temperature')|float(0)|round(0)}} and a low of {{states('sensor.openweathermap_daily_forecast_temperature_low')|float(0)|round(0)}}. + Today should be {{states('weather.forecast_home')}}, with a high of {{states('sensor.temphigh_today')|float(0)|round(0)}} and a low of {{states('sensor.templow_today')|float(0)|round(0)}}. - type: vertical-stack cards: - type: horizontal-stack diff --git a/lovelace/templates/radar-camera.yaml b/lovelace/templates/radar-camera.yaml index fdb8695..4634932 100644 --- a/lovelace/templates/radar-camera.yaml +++ b/lovelace/templates/radar-camera.yaml @@ -1,17 +1,12 @@ type: vertical-stack cards: - - type: conditional - conditions: - - entity: binary_sensor.precipitation_likely - state: 'on' - card: - type: iframe - url: >- - https://embed.windy.com/embed2.html?lat=42.534&lon=-85.842&detailLat=42.439&detailLon=-85.838&width=650&height=450&zoom=9&level=surface&overlay=radar&product=radar&menu=&message=&marker=&calendar=now&pressure=&type=map&location=coordinates&detail=&metricWind=default&metricTemp=default&radarRange=-1 - aspect_ratio: 75% - # show_state: false - # show_name: false - # camera_view: live - # type: picture-entity - # entity: camera.wunderground_radar - # camera_image: camera.wunderground_radar + - type: iframe + url: >- + https://embed.windy.com/embed2.html?lat=42.534&lon=-85.842&detailLat=42.439&detailLon=-85.838&width=650&height=450&zoom=9&level=surface&overlay=radar&product=radar&menu=&message=&marker=&calendar=now&pressure=&type=map&location=coordinates&detail=&metricWind=default&metricTemp=default&radarRange=-1 + aspect_ratio: 75% + # show_state: false + # show_name: false + # camera_view: live + # type: picture-entity + # entity: camera.wunderground_radar + # camera_image: camera.wunderground_radar diff --git a/lovelace/view-overview.yaml b/lovelace/view-overview.yaml index a2f18dc..e3efe42 100644 --- a/lovelace/view-overview.yaml +++ b/lovelace/view-overview.yaml @@ -9,7 +9,7 @@ badges: alignment: center chips: - type: weather - entity: weather.openweathermap_daily + entity: weather.forecast_home show_conditions: true show_temperature: true tap_action: @@ -774,16 +774,16 @@ badges: - "extremely_uncomfortable" - "severely_high" - - type: entity-filter - entities: - - entity: sensor.openweathermap_hourly_forecast_precipitation_probability - name: Precip % - tap_action: - action: navigate - navigation_path: /details-yml/weather - state_filter: - - operator: ">" - value: 30 + # - type: entity-filter + # entities: + # - entity: sensor.openweathermap_hourly_forecast_precipitation_probability + # name: Precip % + # tap_action: + # action: navigate + # navigation_path: /details-yml/weather + # state_filter: + # - operator: ">" + # value: 30 - type: entity-filter entities: @@ -1524,13 +1524,13 @@ cards: camera_entity: camera.mail_usps_camera - type: custom:hourly-weather - entity: weather.openweathermap_hourly + entity: weather.forecast_home icons: true name: "" hide_hours: false - type: custom:clock-weather-card - entity: weather.openweathermap_daily + entity: weather.forecast_home weather_icon_type: fill time_format: 12 date_pattern: DDDD