Last active
October 17, 2025 14:04
-
-
Save smirnowegor/1587a94b59094986f2f3985b62357748 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| blueprint: | |
| name: "Проверка тарифа на газ (Telegram — надёжный MarkdownV2 / HTML)" | |
| description: | | |
| **Проверка тарифа на газ — автоматизированный Blueprint** | |
| ВАЖНО!!! Работает с интеграцией https://github.com/alryaz/hass-mosoblgaz в которой есть атрибуты last_cost. | |
| Этот Blueprint позволяет: | |
| - Проверять актуальную цену газа (атрибут `last_cost` выбранного сенсора) | |
| - Сохранять последнюю цену в `input_number` для сравнения | |
| - Отправлять уведомления в Telegram (через `telegram_bot.send_message`) с подробностями: | |
| — текущая цена, предыдущая цена, изменение, дата, показания счётчика | |
| - Работать в режиме **HTML** или **MarkdownV2**: | |
| — HTML: используется форматирование с `<b>`, `<code>` | |
| — MarkdownV2: сообщение помещается внутри code-блока (```) — исключает ошибки парсинга | |
| - Запускаться автоматически по расписанию, при изменении тарифа или вручную через кнопку | |
| ⏱ **Триггеры**: | |
| - В заданное время (daily_time) | |
| - При изменении атрибута `last_cost` сенсора | |
| - При нажатии кнопки `input_button` | |
| 📊 **Параметры**: | |
| - `gas_sensor`: сенсор газа | |
| - `price_input`: `input_number` для хранения предыдущей цены | |
| - `manual_button`: кнопка запуска | |
| - `send_telegram`: включение/отключение отправки уведомлений | |
| - `telegram_parse_mode`: выбор формата — HTML или MarkdownV2 | |
| - `min_change`: минимальное изменение для уведомления | |
| - `daily_time`: время ежедневной проверки | |
| 🛠 **Как работает**: | |
| 1. При срабатывании триггера вычисляются `old_price`, `new_price`, `price_change` | |
| 2. Если ручной запуск — записывается новая цена и отправляется уведомление (если включён) | |
| 3. Если автоматический запуск — проверяется, превысила ли разница `min_change` | |
| — если да — записывается новая цена и отправляется уведомление | |
| 4. Формат уведомления зависит от `telegram_parse_mode`: | |
| — HTML → красивое форматирование | |
| — MarkdownV2 → отправка как блок кода | |
| 📌 **Автор и поддержка**: | |
| https://t.me/u2smart4home | |
| https://www.youtube.com/@udobni_dom | |
| https://dzen.ru/id/5e32d0969929ba40059b5892 | |
| domain: automation | |
| input: | |
| gas_sensor: | |
| name: "Сенсор газа" | |
| description: "Сенсор с атрибутами last_cost, last_value, last_charged, collected_at" | |
| selector: | |
| entity: | |
| domain: sensor | |
| price_input: | |
| name: "Input number для хранения цены" | |
| selector: | |
| entity: | |
| domain: input_number | |
| manual_button: | |
| name: "Кнопка для ручной проверки" | |
| selector: | |
| entity: | |
| domain: input_button | |
| send_telegram: | |
| name: "Отправлять в Telegram" | |
| description: "Включить/отключить отправку уведомлений в Telegram" | |
| default: true | |
| selector: | |
| boolean: {} | |
| telegram_parse_mode: | |
| name: "Формат парсинга сообщения Telegram" | |
| description: "Выберите между HTML и MarkdownV2 (код-блок)" | |
| default: "html" | |
| selector: | |
| select: | |
| options: | |
| - value: "html" | |
| label: "HTML" | |
| - value: "markdown_v2" | |
| label: "MarkdownV2 (код-блок)" | |
| min_change: | |
| name: "Минимальное изменение для оповещения (₽)" | |
| default: 0.0001 | |
| selector: | |
| number: | |
| min: 0 | |
| max: 10000 | |
| daily_time: | |
| name: "Время ежедневной проверки" | |
| default: "10:00:00" | |
| selector: | |
| time: {} | |
| trigger: | |
| - platform: time | |
| at: !input daily_time | |
| - platform: state | |
| entity_id: !input gas_sensor | |
| attribute: last_cost | |
| - platform: state | |
| entity_id: !input manual_button | |
| mode: single | |
| action: | |
| - variables: | |
| gas: !input gas_sensor | |
| stored: !input price_input | |
| button: !input manual_button | |
| min_ch: !input min_change | |
| send_telegram_flag: !input send_telegram | |
| parse_mode_input: !input telegram_parse_mode | |
| old_price: "{{ states(stored) | float(0) }}" | |
| new_price: "{{ state_attr(gas, 'last_cost') | float(0) }}" | |
| name: "{{ state_attr(gas, 'friendly_name') }}" | |
| last_value: "{{ state_attr(gas, 'last_value') }}" | |
| collected_at: > | |
| {{ (state_attr(gas, 'collected_at') | default(0)) | |
| | as_timestamp | timestamp_custom('%d %B %Y', true) }} | |
| last_charged: "{{ state_attr(gas, 'last_charged') | float(0) }}" | |
| price_change: "{{ new_price - old_price }}" | |
| - choose: | |
| - conditions: | |
| - condition: template | |
| value_template: > | |
| {{ trigger.platform == 'state' and trigger.entity_id == (button) }} | |
| sequence: | |
| - service: homeassistant.update_entity | |
| target: | |
| entity_id: !input gas_sensor | |
| - wait_template: "{{ state_attr(gas, 'last_cost') | float(0) > 0 }}" | |
| timeout: "00:00:20" | |
| continue_on_timeout: true | |
| - if: | |
| - condition: template | |
| value_template: "{{ new_price > 0 }}" | |
| then: | |
| - service: input_number.set_value | |
| target: | |
| entity_id: !input price_input | |
| data: | |
| value: "{{ new_price | round(4) }}" | |
| - condition: template | |
| value_template: "{{ send_telegram_flag }}" | |
| - service: telegram_bot.send_message | |
| data: | |
| parse_mode: "{{ 'HTML' if parse_mode_input == 'html' else 'MarkdownV2' }}" | |
| message: | | |
| {% if parse_mode_input == 'html' %} | |
| ⛽️ <b>Проверка тарифа на газ</b> #газтариф | |
| 💰 <b>Цена:</b> | |
| ┣ Текущая: <code>{{ new_price | round(4) }} ₽</code> | |
| ┗ Предыдущая: <code>{{ old_price | round(4) }} ₽</code> | |
| {% set price_change = new_price - old_price %} | |
| 📈 <b>Изменение:</b> | |
| {% if price_change | abs > 0.0001 %} | |
| {% if price_change > 0 %} | |
| ┗ ⬆️ Рост: <code>+{{ price_change | round(4) }} ₽</code> | |
| {% else %} | |
| ┗ ⬇️ Снижение: <code>{{ price_change | round(4) }} ₽</code> | |
| {% endif %} | |
| {% else %} | |
| ┗ ↔️ Без изменений | |
| {% endif %} | |
| 🔢 <b>Счетчик:</b> | |
| ┣ Последнее показание: <code>{{ last_value }} m³</code> | |
| ┣ Начислено: <code>{{ last_charged | round(2) }} ₽</code> | |
| ┗ Дата показаний: <code>{{ collected_at }}</code> | |
| {% else %} | |
| ``` | |
| ⛽️ Проверка тарифа на газ #газtариф | |
| 💰 Цена: | |
| ┣ Текущая: {{ new_price | round(4) }} ₽ | |
| ┗ Предыдущая: {{ old_price | round(4) }} ₽ | |
| {% set price_change = new_price - old_price %} | |
| 📈 Изменение: | |
| {% if price_change | abs > 0.0001 %} | |
| {% if price_change > 0 %} | |
| ┗ ⬆️ Рост: +{{ price_change | round(4) }} ₽ | |
| {% else %} | |
| ┗ ⬇️ Снижение: {{ price_change | round(4) }} ₽ | |
| {% endif %} | |
| {% else %} | |
| ┗ ↔️ Без изменений | |
| {% endif %} | |
| 🔢 Счетчик: | |
| ┣ Последнее показание: {{ last_value }} m³ | |
| ┣ Начислено: {{ last_charged | round(2) }} ₽ | |
| ┗ Дата показаний: {{ collected_at }} | |
| ``` | |
| {% endif %} | |
| - conditions: | |
| - condition: template | |
| value_template: > | |
| {{ new_price > 0 and (new_price - old_price) | abs > (min_ch | float) }} | |
| sequence: | |
| - service: input_number.set_value | |
| target: | |
| entity_id: !input price_input | |
| data: | |
| value: "{{ new_price | round(4) }}" | |
| - condition: template | |
| value_template: "{{ send_telegram_flag }}" | |
| - service: telegram_bot.send_message | |
| data: | |
| parse_mode: "{{ 'HTML' if parse_mode_input == 'html' else 'MarkdownV2' }}" | |
| message: | | |
| {% if parse_mode_input == 'html' %} | |
| 🔔 <b>Тариф на газ изменился!</b> #газtариф | |
| 💰 <b>Цена:</b> | |
| ┣ Новая: <code>{{ new_price | round(4) }} ₽</code> | |
| ┗ Старая: <code>{{ old_price | round(4) }} ₽</code> | |
| {% set price_change = new_price - old_price %} | |
| 📈 <b>Изменение:</b> | |
| {% if price_change > 0 %} | |
| ┗ ⬆️ Рост: <code>+{{ price_change | round(4) }} ₽</code> | |
| {% else %} | |
| ┗ ⬇️ Снижение: <code>{{ price_change | round(4) }} ₽</code> | |
| {% endif %} | |
| 🔢 <b>Счетчик:</b> | |
| ┣ Последнее показание: <code>{{ last_value }} m³</code> | |
| ┣ Начислено: <code>{{ last_charged | round(2) }} ₽</code> | |
| ┗ Дата показаний: <code>{{ collected_at }}</code> | |
| {% else %} | |
| ``` | |
| 🔔 Тариф на газ изменился! #газtариф | |
| 💰 Цена: | |
| ┣ Новая: {{ new_price | round(4) }} ₽ | |
| ┗ Старая: {{ old_price | round(4) }} ₽ | |
| {% set price_change = new_price - old_price %} | |
| 📈 Изменение: | |
| {% if price_change > 0 %} | |
| ┗ ⬆️ Рост: +{{ price_change | round(4) }} ₽ | |
| {% else %} | |
| ┗ ⬇️ Снижение: {{ price_change | round(4) }} ₽ | |
| {% endif %} | |
| 🔢 Счетчик: | |
| ┣ Последнее показание: {{ last_value }} m³ | |
| ┣ Начислено: {{ last_charged | round(2) }} ₽ | |
| ┗ Дата показаний: {{ collected_at }} | |
| ``` | |
| {% endif %} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment