diff --git a/packages/pack/aspiradora.yaml b/packages/pack/aspiradora.yaml new file mode 100644 index 0000000..d91f758 --- /dev/null +++ b/packages/pack/aspiradora.yaml @@ -0,0 +1,483 @@ +######################################################################## +### Vacuum +######################################################################## +vacuum: + - platform: xiaomi_miio + host: !secret xiaomi_vacuum_ip + token: !secret xiaomi_vacuum_token + name: Xiaomi Vacuum +######################################################################## +### Sensor +######################################################################## +sensor: + - platform: template + sensors: + vacuum_cleaned_area: + friendly_name: "Área Limpia" + unit_of_measurement: 'm2' + value_template: "{{ state_attr('vacuum.xiaomi_vacuum', 'cleaned_area') }}" + vacuum_cleaning_time: + friendly_name: "Tiempo Limpiando" + unit_of_measurement: 'min' + value_template: "{{ state_attr('vacuum.xiaomi_vacuum', 'cleaning_time') }}" + xiaomi_vacuum_ip: + value_template: !secret xiaomi_vacuum_ip + vacuum_start_time_weekdays: + friendly_name: 'Start Time (weekdays)' + value_template: '{{ "%0.02d:%0.02d" | format(states("input_number.vacuum_start_hour_weekdays") | int, states("input_number.vacuum_start_minutes_weekdays") | int) }}' + entity_id: input_number.vacuum_start_hour_weekdays + vacuum_start_time_weekend: + friendly_name: 'Start Time (weekend)' + value_template: '{{ "%0.02d:%0.02d" | format(states("input_number.vacuum_start_hour_weekend") | int, states("input_number.vacuum_start_minutes_weekend") | int) }}' + entity_id: input_number.vacuum_start_hour_weekend + vacuum_status: + friendly_name: "Vacuum - State" + value_template: "State: {{ states.vacuum.xiaomi_vacuum.attributes.status }}" + entity_id: vacuum.xiaomi_vacuum + vacuum_weekdays: + friendly_name: "Vacuum - Weekdays" + value_template: "" + vacuum_weekend: + friendly_name: "Vacuum - Weekend" + value_template: "" + vacuum_battery: + friendly_name: "Vacuum - Battery" + value_template: "Battery: {{ states.vacuum.xiaomi_vacuum.attributes.battery_level | float | int }}" + icon_template: '{{ states.vacuum.xiaomi_vacuum.attributes.battery_icon }}' + device_class: battery + unit_of_measurement: '%' + entity_id: vacuum.xiaomi_vacuum + vacuum_accessories: + friendly_name: "Vacuum - Consumption" + value_template: "Consumption" + vacuum_operation: + friendly_name: "Vacuum - Operations" + value_template: "Operations" + vacuum_main_brush: + friendly_name: "Vacuum - Main Brush" + value_template: "Main Brush: {{ states.vacuum.xiaomi_vacuum.attributes.main_brush_left }} h" + entity_id: vacuum.xiaomi_vacuum + vacuum_side_brush: + friendly_name: "Vacuum - Side Brush" + value_template: "Side Brush: {{ states.vacuum.xiaomi_vacuum.attributes.side_brush_left }} h" + entity_id: vacuum.xiaomi_vacuum + vacuum_filter: + friendly_name: "Vacuum - Filter" + value_template: "Filter: {{ states.vacuum.xiaomi_vacuum.attributes.filter_left }} h" + entity_id: vacuum.xiaomi_vacuum + vacuum_sensor: + friendly_name: "Vacuum - Drawer" + value_template: "Drawer: {{ states.vacuum.xiaomi_vacuum.attributes.sensor_dirty_left }} h" + entity_id: vacuum.xiaomi_vacuum + vacuum_fan_speed: + friendly_name: "Vacuum - Power" + value_template: "Power: {{ states.vacuum.xiaomi_vacuum.attributes.fan_speed }}" + entity_id: vacuum.xiaomi_vacuum + vacuum_cleaning_time: + friendly_name: "Cleaning - Time" + value_template: "Cleaning Time: {{ states.vacuum.xiaomi_vacuum.attributes.cleaning_time }}" + entity_id: vacuum.xiaomi_vacuum + vacuum_cleaned_area: + friendly_name: Cleaned Area + unit_of_measurement: 'm ²' + value_template: "Cleaned - Area {{ states.vacuum.xiaomi_vacuum.attributes.cleaned_area }}" + entity_id: vacuum.xiaomi_vacuum + + vacuum_fan_speed_list: + friendly_name: "Vacuum - Fan Speed List" + value_template: "{{ states.vacuum.xiaomi_vacuum.attributes.fan_speed_list }}" + entity_id: vacuum.xiaomi_vacuum + +# - platform: rest +# resource: !secret xiaomi_vacuum_resource_map +# name: Vacuum Map url +# value_template: 'http://{{states("sensor.xiaomi_vacuum_ip")}}{{value_json.mapsrc}}' + +################################################################# +# # +# Switch # +# # +################################################################# +switch: + - platform: template + switches: + vacuum: + friendly_name: "Vacuum" + value_template: "{% if is_state('vacuum.xiaomi_vacuum', 'cleaning') %}on{% else %}off{% endif %}" + turn_on: + service: input_select.select_option + entity_id: input_select.vacuum_zone + data_template: + option: "Home" + turn_off: + service: vacuum.return_to_base + data: + entity_id: vacuum.xiaomi_vacuum + icon_template: mdi:robot-vacuum + +################################################################# +# # +# input Select # +# # +################################################################# + +input_select: + vacuum_fan_speed_list: + name: Type of aspiration + options: + - Silent + - Balanced + - Turbo + - Maximum power + + vacuum_zone: + name: Which area to clean? + options: + - Choose the area + - Kitchen #מטבח + - Bedroom #פרוזדור + - Dining Room ## פינת אוכל + - Home #כל הבית + - living Room #סלון + - Guestroom # אזור הכלבים + +################################################################# +# # +# input Boolean # +# # +################################################################# + +input_boolean: + vacuum_zone_settings: + name: zone settings + initial: false + + +################################################################# +# # +# input Number # +# # +################################################################# + +input_number: + vacuum_passes: + name: How many times? + initial: 1 + min: 1 + max: 3 + step: 1 + vacuum_start_minutes_weekend: + name: Start minute + initial: 0 + min: 0 + max: 59 + step: 1 + mode: slider + vacuum_start_hour_weekend: + name: Start hour + initial: 13 + min: 0 + max: 23 + step: 1 + mode: slider + vacuum_start_minutes_weekdays: + name: Start minute + initial: 0 + min: 0 + max: 59 + step: 1 + mode: slider + vacuum_start_hour_weekdays: + name: Start hour + initial: 15 + min: 0 + max: 23 + step: 1 + mode: slider + +################################################################# +# # +# Automation # +# # +################################################################# +automation: + + - alias: Vacuum - Suction speed + initial_state: 'on' + trigger: + platform: state + entity_id: input_select.vacuum_fan_speed_list + action: + - service_template: > + {% if trigger.to_state.state == 'Silent' %} + script.vacuum_set_quiet + {% elif trigger.to_state.state == 'Balanced' %} + script.vacuum_set_balanced + {% elif trigger.to_state.state == 'Turbo' %} + script.vacuum_set_turbo + {% elif trigger.to_state.state == 'Maximum power' %} + script.vacuum_set_max + {% endif %} + + - alias: Vacuum - Selection of the area + initial_state: 'on' + hide_entity: True + trigger: + platform: state + entity_id: input_select.vacuum_zone + from: 'Choose the area' + action: + - service_template: > + {% if states.input_select.vacuum_zone.state == "Home" %} #כל הבית + script.vacuum_home + {% elif states.input_select.vacuum_zone.state == "Kitchen" %} #מטבח + script.vacuum_kitchen + {% elif states.input_select.vacuum_zone.state == "Bedroom" %} ## פרוזדור + script.vacuum_bedroom + {% elif states.input_select.vacuum_zone.state == "Dining Room" %} ## פינת אוכל # + script.vacuum_dining_room + {% elif states.input_select.vacuum_zone.state == "Living Room" %} ## סלון ## + script.vacuum_living_room + {% elif states.input_select.vacuum_zone.state == "Guestroom" %} #אזור הכלבים + script.vacuum_guestroom + {% else %} + {% endif %} + - delay: 00:01:00 + - wait_template: "{{is_state('vacuum.xiaomi_vacuum', 'docked')}}" + - delay: 00:00:15 + - service: input_select.select_option + entity_id: input_select.vacuum_zone + data_template: + option: "Choose the area" + - service: input_select.select_option + entity_id: input_select.vacuum_fan_speed_list + data_template: + option: "Turbo" + + - alias: Vacuum Notices + initial_state: 'on' + trigger: + - platform: state + entity_id: vacuum.xiaomi_vacuum + to: 'paused' + for: + hours: 0 + minutes: 0 + seconds: 30 + - platform: state + entity_id: vacuum.xiaomi_vacuum + to: 'docked' + - platform: state + entity_id: vacuum.xiaomi_vacuum + to: 'error' + action: + - service_template: > + {% if trigger.to_state.state == 'paused' %} + script.vacuum_alert_pause + {% elif trigger.to_state.state == 'docked' %} + script.vacuum_alert_charging + {% elif trigger.to_state.state == 'error' %} + script.vacuum_alert_error + {% endif %} + + - id: vacuum_cleaning_timer_weekdays + initial_state: 'off' + alias: Vacuum Schedule cleaning on weekdays + trigger: + - platform: template + value_template: '{{ states.sensor.vacuum_start_time_weekdays.state == states.sensor.time.state }}' + condition: + - condition: time + weekday: + - sun + - mon + - tue + - wed + - thu + + action: + - data: + entity_id: vacuum.xiaomi_vacuum + service: vacuum.start + - id: Vacuum_cleaning_timer_weekend + initial_state: 'off' + alias: Vacuum Schedule cleaning on weekends + trigger: + - platform: template + value_template: '{{ states.sensor.vacuum_start_time_weekend.state == states.sensor.time.state }}' + condition: + - condition: time + weekday: + - fri + - sat + action: + - data: + entity_id: vacuum.xiaomi_vacuum + service: vacuum.start + +################################################################# +# # +# Script # +# # +################################################################# +script: + vacuum_set_quiet: + sequence: + service: vacuum.set_fan_speed + data: + entity_id: vacuum.xiaomi_vacuum + fan_speed: Quiet + + vacuum_set_balanced: + sequence: + service: vacuum.set_fan_speed + data: + entity_id: vacuum.xiaomi_vacuum + fan_speed: Balanced + + vacuum_set_turbo: + sequence: + service: vacuum.set_fan_speed + data: + entity_id: vacuum.xiaomi_vacuum + fan_speed: Turbo + + vacuum_set_max: + sequence: + service: vacuum.set_fan_speed + data: + entity_id: vacuum.xiaomi_vacuum + fan_speed: Max + +################################################################# +# ZONE # +################################################################# + vacuum_home: + sequence: + - service: vacuum.xiaomi_clean_zone + data: + entity_id: vacuum.xiaomi_vacuum + repeats_template: '{{states.input_number.vacuum_passes.state|int}}' + zone: [[23341,19451,32741,30201]] #כל הבית + - service: script.vacuum_alert_start + + vacuum_cocina: + sequence: + - service: vacuum.xiaomi_clean_zone + data: + entity_id: vacuum.xiaomi_vacuum + repeats_template: '{{states.input_number.vacuum_passes.state|int}}' + zone: !secret vacuum_cocina + - service: script.vacuum_alert_start + + vacuum_bedroom: + sequence: + - service: vacuum.xiaomi_clean_zone + data: + entity_id: vacuum.xiaomi_vacuum + repeats_template: '{{states.input_number.vacuum_passes.state|int}}' + zone: [[28489,22014,30139,26214,1]] #פרוזדור + - service: script.vacuum_alert_start + + vacuum_dining_room: + sequence: + - service: vacuum.xiaomi_clean_zone + data: + entity_id: vacuum.xiaomi_vacuum + repeats_template: '{{states.input_number.vacuum_passes.state|int}}' + zone: [[26253,21948,28503,25948]] #פינת אוכל + - service: script.vacuum_alert_start + + vacuum_living_room: + sequence: + - service: vacuum.xiaomi_clean_zone + data: + entity_id: vacuum.xiaomi_vacuum + repeats_template: '{{states.input_number.vacuum_passes.state|int}}' + zone: [[23327,21890,26077,26040]] #סלון + - service: script.vacuum_alert_start + + vacuum_entrada: + sequence: + - service: vacuum.xiaomi_clean_zone + data: + entity_id: vacuum.xiaomi_vacuum + repeats_template: '{{states.input_number.vacuum_passes.state|int}}' + zone: !secret vacuum_entrada + - service: script.vacuum_alert_start + + +################################################################# +# Alerts # +################################################################# + vacuum_alert_start: + alias: Vacuum alert start + sequence: + - service: notify.telegram_diego + data_template: + title: "House alert" + message: "The robot has started cleaning the area: {{ states.input_select.vacuum_zone.state | lower }}." + - service: notify.telegram_diego + data: + title: "House alert ({{now().strftime('%H:%M')}})" + message: "The robot has started cleaning the area: {{ states.input_select.vacuum_zone.state | lower }}" + + vacuum_alert_pause: + alias: Vacuum alert pausa + sequence: + - service: notify.telegram_diego + data_template: + title: "House alert" + message: "The vacuum cleaner has stopped cleaning the area: {{ states.input_select.vacuum_zone.state | lower }}. {% if 'error' in states.vacuum.xiaomi_vacuum.state %}Error code: {{ states.vacuum.xiaomi_vacuum.attributes.error }}.{% else %}{% endif %}" + - service: notify.telegram_diego + data: + title: "House alert ({{now().strftime('%H:%M')}})" + message: "The vacuum cleaner has stopped cleaning the area: {{ states.input_select.vacuum_zone.state | lower }}. {% if 'error' in states.vacuum.xiaomi_vacuum.state %}Error code: {{ states.vacuum.xiaomi_vacuum.attributes.error }}.{% else %}{% endif %}" + + vacuum_alert_back_to_home: + alias: Vacuum alert back to home + sequence: + - condition: template + value_template: "{% if is_state('input_select.vacuum_zone', 'Choose the area') %}False{% else %}True{% endif %}" + - service: notify.telegram_diego + data_template: + title: "House alert" + message: "The robot has finished cleaning the area {{ states.input_select.vacuum_zone.state | lower }}. cleaned {{ states.vacuum.xiaomi_vacuum.attributes.cleaned_area }} square meters in {{ states.vacuum.xiaomi_vacuum.attributes.cleaning_time }} minutes and now it is loading" + - service: notify.avitelegram + data: + title: "House alert ({{now().strftime('%H:%M')}})" + message: "The robot has finished cleaning the area {{ states.input_select.vacuum_zone.state | lower }}. cleaned {{ states.vacuum.xiaomi_vacuum.attributes.cleaned_area }} square meters in {{ states.vacuum.xiaomi_vacuum.attributes.cleaning_time }} minutes and now it is loading." + + vacuum_alert_error: + alias: Vacuum alert error + sequence: + - service: notify.telegram_diego + data_template: + title: "House alert" + message: "The vacuum cleaner stopped and reported an error while cleaning the area {{ states.input_select.vacuum_zone.state | lower }}." + - service: notify.telegram_diego + data: + title: "House alert ({{now().strftime('%H:%M')}})" + message: "The vacuum cleaner stopped and reported an error while cleaning the area {{ states.input_select.vacuum_zone.state | lower }}." + +################################################################# +# # +# Customize # +# # +################################################################# + +homeassistant: + customize: + + switch.vacuum: + icon: mdi:robot-vacuum + + input_select.vacuum_fan_speed_list: + icon: mdi:speedometer + + input_select.vacuum_zone: + icon: mdi:map-marker + + input_number.vacuum_passes: + name: Pass + icon: mdi:shuffle-disabled diff --git a/www/devices/xiaomi_vacuum.jpeg b/www/devices/xiaomi_vacuum.jpeg new file mode 100644 index 0000000..54fb80e Binary files /dev/null and b/www/devices/xiaomi_vacuum.jpeg differ diff --git a/www/devices/xiaomi_vacuum.png b/www/devices/xiaomi_vacuum.png new file mode 100644 index 0000000..cb19b61 Binary files /dev/null and b/www/devices/xiaomi_vacuum.png differ diff --git a/www/lovelace/home/xiaomi_vacuum_01.jpg b/www/lovelace/home/xiaomi_vacuum_01.jpg new file mode 100644 index 0000000..2b4d809 Binary files /dev/null and b/www/lovelace/home/xiaomi_vacuum_01.jpg differ