ClusterM

Детектор пердежа

Feb 20th, 2022 (edited)
1,616
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
YAML 6.73 KB | None | 0 0
  1. alias: Запах в спальне
  2. description: ''
  3. trigger:
  4.   - platform: numeric_state
  5.     entity_id: sensor.air_quality2_voc
  6.     for:
  7.       hours: 0
  8.       minutes: 0
  9.       seconds: 0
  10.     above: '1'
  11. action:
  12.   - alias: Стыдим человека, сообщая, что мы заметили вонь
  13.     service: script.important_announce
  14.     data:
  15.       station: media_player.yandex_lite
  16.       message: Фу! Навоняли!
  17.       volume: 0.5
  18.       local: 1
  19.   - alias: Обнуляем переменные
  20.     service: input_number.set_value
  21.     target:
  22.       entity_id:
  23.        - input_number.current_max_voc_bedroom
  24.         - input_number.clean_air_time_bedroom
  25.     data:
  26.       value: 0
  27.   - repeat:
  28.       while:
  29.         - condition: template
  30.           value_template: '{{ states("input_number.clean_air_time_bedroom")|int < 30 }}'
  31.       sequence:
  32.         - alias: Обновляем максимальное значение вони, если оно выросло
  33.           choose:
  34.             - conditions:
  35.                 - condition: template
  36.                   value_template: >-
  37.                     {{ (states("sensor.air_quality2_voc")|int) >
  38.                    (states("input_number.current_max_voc_bedroom")|int) }}
  39.               sequence:
  40.                 - alias: Значение вони выросло!
  41.                   service: input_number.set_value
  42.                   target:
  43.                     entity_id: input_number.current_max_voc_bedroom
  44.                   data:
  45.                     value: '{{ states("sensor.air_quality2_voc") }}'
  46.           default: []
  47.         - alias: Небольшая задержка, ждём
  48.           delay:
  49.             hours: 0
  50.             minutes: 0
  51.             seconds: 1
  52.             milliseconds: 0
  53.         - alias: Увеличиваем счётчик времени, если не пахнет, иначе обнуляем
  54.           choose:
  55.             - conditions:
  56.                 - condition: template
  57.                   value_template: '{{ states("sensor.air_quality2_voc")|int == 0 }}'
  58.               sequence:
  59.                 - alias: В спальне не пахнет, увеличивает счётчик
  60.                   service: input_number.set_value
  61.                   target:
  62.                     entity_id: input_number.clean_air_time_bedroom
  63.                   data:
  64.                     value: >-
  65.                       {{ states("input_number.clean_air_time_bedroom")|int + 1
  66.                       }}
  67.           default:
  68.             - alias: Всё ещё пахнет, обнуляем счётчик
  69.               service: input_number.set_value
  70.               target:
  71.                 entity_id: input_number.clean_air_time_bedroom
  72.               data:
  73.                 value: 0
  74.   - alias: >-
  75.       Говорим на всю квартиру, что проветривание завершено, сообщаем полученные
  76.       баллы вони
  77.     choose:
  78.       - alias: Проверяем, не был ли побит рекорд
  79.         conditions:
  80.           - condition: template
  81.             value_template: >-
  82.               {{ (states("input_number.voc_record")|int) <
  83.               (states("input_number.current_max_voc_bedroom")|int) }}
  84.         sequence:
  85.           - alias: Обновляем рекорд
  86.             service: input_number.set_value
  87.             target:
  88.               entity_id: input_number.voc_record
  89.             data:
  90.               value: '{{ states("input_number.current_max_voc_bedroom")|int }}'
  91.           - alias: Поздравляем с апплодисментами и детским смехом
  92.             service: script.important_announce
  93.             data:
  94.               station: media_player.yandex_lite
  95.               message: >-
  96.                 <speaker audio="alice-sounds-human-crowd-2.opus">  <speaker
  97.                 audio="alice-sounds-human-crowd-3.opus"> Поздравляю! Это новый
  98.                 рекорд вони. sil <[500]> {% set value = {
  99.                   "number": states("input_number.voc_record")|int,
  100.                   "nominativ": "балл",
  101.                   "genetiv": "балла",
  102.                   "plural": "баллов"
  103.                 } %} {% set num1 = value.number % 10 %} {% set num2 =
  104.                 value.number % 100 %} {% if num2 >= 10 and num2 <= 20 %}
  105.                   {% set declension = value.plural %}
  106.                 {% else %}
  107.                   {% if num1 == 1 %}
  108.                      {% set declension = value.nominativ %}
  109.                   {% elif num1 >= 2 and num1 <= 4 %}
  110.                      {% set declension = value.genetiv %}
  111.                   {% else %}
  112.                     {% set declension = value.plural %}
  113.                   {% endif %}
  114.                 {% endif %} {{ value.number }} {{ declension }}. sil <[500]>
  115.                 <speaker audio="alice-sounds-human-laugh-5.opus">
  116.               volume: 0.5
  117.               local: 0
  118.           - alias: >-
  119.               Рассылаем уведомления, о том, что кто-то установил новый рекорд
  120.               пердежа
  121.             service: script.send_notifications
  122.             data:
  123.               title: Пердёж
  124.               message: >-
  125.                 Новый рекорд (спальня): {{ states("input_number.voc_record")|int
  126.                 }}
  127.               priority: -1
  128.     default:
  129.       - alias: Говорим без рекорда
  130.         service: media_player.play_media
  131.         data:
  132.           media_content_type: text
  133.           media_content_id: >-
  134.             {% set value = {
  135.               "number": states("input_number.current_max_voc_bedroom")|int,
  136.               "nominativ": "балл",
  137.               "genetiv": "балла",
  138.               "plural": "баллов"
  139.             } %} {% set num1 = value.number % 10 %} {% set num2 = value.number %
  140.             100 %} {% if num2 >= 10 and num2 <= 20 %}
  141.               {% set declension = value.plural %}
  142.             {% else %}
  143.               {% if num1 == 1 %}
  144.                  {% set declension = value.nominativ %}
  145.               {% elif num1 >= 2 and num1 <= 4 %}
  146.                  {% set declension = value.genetiv %}
  147.               {% else %}
  148.                 {% set declension = value.plural %}
  149.               {% endif %}
  150.             {% endif %} Больше не пахнет. Воняло на {{ value.number }} {{
  151.             declension }}.
  152.         target:
  153.           entity_id: media_player.yandex_lite
  154.   - alias: Обнуляем переменные
  155.     service: input_number.set_value
  156.     target:
  157.       entity_id:
  158.        - input_number.current_max_voc_bedroom
  159.         - input_number.clean_air_time_bedroom
  160.     data:
  161.       value: 0
  162. mode: single
  163.  
Add Comment
Please, Sign In to add comment