☑️ Запись в secrets.yaml
reserve_secret_token: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ79yvHbEASI4ZTMTY1ODIzMzQ1NiwiZXhypcofi472ZjMwMzg0MjwIjoxOTczNTkzNDU2fQ.JK5IPXYkEvk0ZjRkODR9.eyJpc3MiOiTHV_TuKUCqGF1ClNGEzMGJmNWE4YTY2MCIsImlhdCI6MFM
☑️ Запись в configuration.yaml
В разделе homeassistant:
(если не объявлен, то создаем)
auth_providers:
- type: homeassistant
☑️ Код Rest сенсора, который получает данные из sensor.online_custom
sensor:
- platform: rest
resource: http://192.168.0.61:8123/api/states/sensor.online_custom
name: reserve_state
force_update: true
headers:
Authorization: !secret reserve_secret_token
content-type: 'application/json'
value_template: '{{ value_json.state }}'
☑️ Код Template сенсора sensor.online_custom
- время от последней перезагрузки
## Штатный сенсор времени с последней перезагрузки
sensor:
- platform: uptime
name: online
## Преобразование в удобный формат
template:
- sensor:
- name: online_custom
state: >
{% set s = as_timestamp (now()) | int -as_timestamp(states('sensor.online')) | int %}
{{ '{:d} дн. {:02d}:{:02d}:{:02d}'.format (s // 86400, s % 86400 // 3600, s % 3600 // 60, s % 60) }}
☑️ Код Template сенсора sensor.server_telemetry
- уровень отказа
template:
- sensor:
- name: server_telemetry
state: >
{% set light = (states('sensor.count_light_unavailable') | int) *20 %}
{% set switch = (states('sensor.count_switch_unavailable') | int) *20 %}
{% set sensor = (states('sensor.count_sensor_unavailable') | int) *5 %}
{% set binary_sensor = (states('sensor.count_binary_sensor_unavailable') | int) *5 %}
{{light + switch + sensor + binary_sensor}}
☑️ Код Rest сенсора, который получает данные из sensor.server_telemetry
- platform: rest
resource: http://192.168.0.61:8123/api/states/sensor.server_telemetry
name: reserve_telemetry
force_update: true
headers:
Authorization: !secret reserve_secret_token
content-type: 'application/json'
value_template: '{{ value_json.state }}'
☑️ Автоматизация резервного сервера
automation:
- id: Переключение режима работы
alias: main_control
initial_state: true
trigger:
# Сенсор состояния основного сервера
- platform: state
entity_id: sensor.main_telemetry
condition:
# Режима работы сервера выключен
- condition: state
entity_id: switch.control_mode
state: 'off'
action:
- choose:
- conditions:
- condition: state
entity_id: sensor.main_telemetry
state: 'unavailable'
sequence:
- service: telegram_bot.send_message
data_template:
target:
- !secret chat_id_group_tech
message: |
*Луиджи нас покинул. Время события {{ states('sensor.time_date') }} *
*Джованни теперь главный*
- service: switch.turn_on
entity_id: switch.control_mode
- conditions:
- condition: template
value_template: "{{ (states('sensor.main_telemetry')|int) >= 100 }}"
- condition: template
value_template: "{{ (states('sensor.server_telemetry')|int) < (states('sensor.main_telemetry')|int) }}"
sequence:
- service: telegram_bot.send_message
data_template:
target:
- !secret chat_id_group_tech
message: |
*У Луиджи проблемы, уровень сбоя {{ states('sensor.main_telemetry') }} время события {{ states('sensor.time_date') }} *
*Джованни немного порулит системой*
- service: switch.turn_on
entity_id: switch.control_mode
☑️ Автоматизации основного сервера
automation:
- id: Возврат режима работы
alias: main_control
initial_state: true
trigger:
# Сенсор состояния основного сервера
- platform: state
entity_id: sensor.server_telemetry
# Сенсор состояния резервного сервера
- platform: state
entity_id: sensor.reserve_telemetry
to: 'unavailable'
condition:
# Режима работы сервера выключен
- condition: state
entity_id: switch.control_mode
state: 'off'
- condition: template
value_template: "{{ (states('sensor.server_telemetry')|int) < 100 }}"
- condition: template
value_template: "{{ (states('sensor.server_telemetry')|int) <= (states('sensor.reserve_telemetry')|int) }}"
action:
- service: telegram_bot.send_message
data_template:
target:
- !secret chat_id_group_tech
message: |
*Луиджи возвращает себе управление в {{ states('sensor.time_date') }} *
- service: switch.turn_on
entity_id: switch.control_mode
- id: Уведомление о сбое резервного сервера
alias: reserve_notification
initial_state: true
trigger:
- platform: state
entity_id: sensor.reserve_telemetry
to: 'unavailable'
condition:
# Режима работы сервера выключен
- condition: state
entity_id: switch.control_mode
state: 'on'
action:
- service: telegram_bot.send_message
data_template:
target:
- !secret chat_id_group_tech
message: |
*Джованни покинул нас в {{ states('sensor.time_date') }} *
*Контроль у Луиджи*
- Webmoney - Z243592584952
- BTC - 1Gzr7WQugfnPuWVawu47EiCMTDUBqCAshj
- ETH - 0xa0ce3E29Cf537013649Ae9cdbc08C4853fF91FAc
- LTC - ltc1qs493yk2wk9ywx5h6aruk4p9zm75hx42ekv4ym2
- TRX - TFTCLqvS1tMBwokRHBwz1TCDJ4oD1Z5zPk