Home Assistant restart via Telegram – Versie 1.0

Status: Dit is de laatste versie van deze automatisering.

Introductie

Stel je bent niet thuis, je ontvangt notificaties van jouw Home Assistant, maar via de app op je telefoon of tablet (op Android of IOS) krijg je geen verbinding via Home Assistant Cloud… Gisteren gebeurde mij dit, en mijn eerste gedachte was, even Home Assistant een restart geven. Alleen, ik was dus niet thuis, dus daar kon ik niet zo maar bij.

Eenmaal thuis kon ik lokaal prima bij Home Assistant en even restarten verhielp inderdaad eenvoudig het probleem. Toch kon ik het niet laten om een oplossing in elkaar te knutselen via Telegram en een paar eenvoudige automatiseringen. Vandaar dus deze nieuwe Home Assistant blog.

Telegram-integratie

Voor diverse type notificaties maak ik al langere tijd gebruik van de Telegram-integratie van Home Assistant. Naast het ontvangen van notificaties, biedt deze je namelijk ook de mogelijkheid om interacties te doen met Home Assistant. Mocht je deze dus nog niet geïnstalleerd hebben, dan heb je deze in ieder geval nodig voor mijn Home Assitant restart oplossing.

Scenario

Wat ik wilde bereiken was via een eenvoudig commando in Telegram een volledige restart van het Home Assistant systeem kunnen initiëren. Dus niet een onderdeel, maar volledig, inclusief het OS. Een beetje drastisch, maar in situaties zoals hierboven omschreven, wel doeltreffend. Ik wilde hierin echter wel een veiligheidsstap hebben, zodat je niet per ongelukt deze volledige restart initiëerd.

Uiteindelijk ben ik daarbij uitgekomen op het geven van een eerste start commando /restart, waarop een bevestigingsvraag terugkomt, welke je met een volgend commando /restartnu dient te beantwoorden. Alleen de combinatie van deze twee, in de juiste volgorde, zorgt voor de volledige restart.

Qua interactie ziet dat er alsvolgt uit (met hier dus dus eerst een foutief eerste commando);

Opbouw

Helper schakelaar

Omdat ik de restart in twee stappen opbouw, heb ik een helper nodig die bijhoudt of stap 1 als is afgetrapt. Hiervoor heb ik een nieuwe helper aangemaakt van het type schakelaar. Ik heb deze Restart via Telegram genoemd.

In de eerste automatisering (ik gebruik er uiteindelijk 3) laat ik bij het eerste commando (/restart) de schakelaar aanzetten. In de tweede automatisering, t.b.v. het tweede commando, zit de voorwaarde dat de schakelaar aanstaat, anders wordt de restart alsnog niet geïnitieerd.

In de eerste automatisering (t.b.v. /restart dus) heb ik wel ingesteld dat na 60 seconde de schakelaar weer wordt uitgezet. M.a.w. je hebt maximaal 1 minuut om het tweede commando /restartnu te geven.

Automatisering 1: Telegram restart stap 1

Ik ben uitgekomen op drie losse automatiseringen. De eerste wordt getriggerd door het commando /restart in de Telegram chat. Deze voert vervolgens 4 stappen uit;

  1. Schakelaar Restart via Telegram aan zetten.
  2. Een eerste bericht terugsturen via Telegram: Weet je dat wel zeker?
  3. 1 minuut wachten.
  4. En tot slot wordt de schakelaar Restart via Telegram weer uitgezet.

Yaml code:

alias: Telegram restart stap 1
description: ""
trigger:
  - platform: event
    event_type: telegram_command
    event_data:
      command: /restart
condition: []
action:
  - service: homeassistant.turn_on
    data: {}
    target:
      entity_id: input_boolean.restart_via_telegram
  - service: notify.telegram
    data:
      message: Weet je dat wel zeker?
  - delay:
      hours: 0
      minutes: 1
      seconds: 0
      milliseconds: 0
  - service: homeassistant.turn_off
    data: {}
    target:
      entity_id: input_boolean.restart_via_telegram
mode: single

Automatisering 2: Telegram restart stap 2

De tweede automatisering wordt getriggerd door het commondo /restartnu in de Telegram chat. Er wordt als eerste de check gedaan of de schakelaar Restart via Telegram aan staat. Is dat het geval dan volgen er twee stappen;

  1. Het bevestigingsbericht wordt via Telegram teruggestuurd: Restart geïnitieerd…
  2. De daadwerkelijke restart wordt uitgevoerd via hassio.host_reboot

Staat de schakelaar echter niet aan, dan wordt alleen het bericht teruggestuurd Restart niet geïnitieerd… stap 1 vergeten of timed out.

Yaml code:

alias: Telegram restart stap 2
description: ""
trigger:
  - platform: event
    event_type: telegram_command
    event_data:
      command: /restartnu
condition: []
action:
  - if:
      - condition: state
        entity_id: input_boolean.restart_via_telegram
        state: "on"
    then:
      - service: notify.telegram
        data:
          message: Restart geïnitieerd...
      - service: hassio.host_reboot
        data: {}
    else:
      - service: notify.telegram
        data:
          message: Restart niet geïnitieerd... stap 1 vergeten of timed out.
mode: single

Automatisering 3: Telegram restart stap 3

Deze laatste automatisering is niet per sé nodig, maar wel handig, aangezien het handig is om een bevestiging te ontvangen als de restart is afgerond. Deze automatisering wordt getriggerd door de opstart van Home Assistant en controleerd of de schakelaar Restart via Telegram aanstaat. Als dat het geval is, dan worden worden twee acties uitgevoerd;

  1. De schakelaar wordt uitgezet.
  2. Het laatste bericht wordt via Telegram verstuurd: Restart afgerond.

Yaml code:

alias: Telegram restart stap 3
description: ""
trigger:
  - platform: homeassistant
    event: start
condition:
  - condition: state
    entity_id: input_boolean.restart_via_telegram
    state: "on"
action:
  - service: homeassistant.turn_off
    data: {}
    target:
      entity_id: input_boolean.restart_via_telegram
  - service: notify.telegram
    data:
      message: Restart afgerond.
mode: single

Tot slot

Ik heb deze setup gisteravond een aantal keer uitgeprobeerd en deze lijkt het prima te doen. Mocht je geïnspireerd zijn en deze setup ook zijn gaan gebruiken, laat dan vooral ook even jouw ervaringen weten via een berichtje hieronder. En mocht je vragen hebben, dan zijn die uiteraard ook van harte welkom!

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Deze site gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.