SMS w Home Assistant z własnego numeru: alarmy i komendy
Sprawdzone z dokumentacją:
Home Assistant wysyła SMS przez rest_command: w configuration.yaml definiujesz POST na https://smsportal.app/api/v1/gateway/send-sms z nagłówkiem x-api-key, a automatyzacja wywołuje akcję rest_command.send_sms. SMS wychodzi z Twojego telefonu z Androidem. SMS-y przychodzące odbiera automatyzacja z wyzwalaczem webhook, do której smsportal wysyła zdarzenie MESSAGE_RECEIVED.
Czego potrzebujesz
- Home Assistant 2024.10 lub nowszy (składnia
triggers:iaction:; starsze wersje używająplatform:iservice:). - Dostęp do plików
configuration.yamlisecrets.yaml(np. dodatek File editor albo Studio Code Server). - Konto smsportal z podłączonym telefonem z Androidem i kartą SIM oraz klucz API (Klucze API → Wygeneruj klucz API).
- Do odbioru SMS-ów: Home Assistant dostępny z internetu po HTTPS (Home Assistant Cloud od Nabu Casa albo reverse proxy).
Jak wysłać SMS z Home Assistant
Dodaj klucz i polecenie REST
Klucz API wpisz do
secrets.yaml, a wconfiguration.yamldodajrest_commando nazwiesend_sms. Filtrto_jsonzamienia listę numerów i treść na poprawny JSON, więc cudzysłów albo polski znak w wiadomości nie zepsuje żądania. Nagłówek tox-api-key, nieAuthorization.secrets.yaml i configuration.yaml# secrets.yaml smsportal_api_key: "TWOJ_KLUCZ_API" # configuration.yaml rest_command: send_sms: url: "https://smsportal.app/api/v1/gateway/send-sms" method: post headers: x-api-key: !secret smsportal_api_key content_type: "application/json" payload: '{"recipients": {{ recipients | to_json }}, "message": {{ message | to_json }}}' timeout: 15Sprawdź konfigurację i zrestartuj
W Developer tools otwórz zakładkę YAML, kliknij Check configuration, a potem zrestartuj Home Assistant. Po restarcie pojawi się akcja
rest_command.send_sms.Wyślij SMS testowy
W Developer tools → Actions przełącz na tryb YAML, wklej poniższy kod i kliknij Perform action. Odpowiedź ze
status: 200oznacza, że wiadomość trafiła do kolejki telefonu. Numer podawaj z kierunkowym kraju.Akcja testowaaction: rest_command.send_sms data: recipients: ["+48600100200"] message: "Test z Home Assistant"Podepnij SMS pod automatyzację
Przykład wysyła SMS, gdy czujnik drzwi zmieni stan na otwarte przy uzbrojonym alarmie.
response_variablezapisuje odpowiedź API: przy statusie 400 i wyżej (zły klucz, brak telefonu, wyczerpany limit) dostaniesz powiadomienie w Home Assistant. Podmień nazwy encji na swoje.Automatyzacja: alarm i drzwi# automations.yaml (w edytorze: menu ⋮ → Edit in YAML, bez myślnika na początku) - id: "sms_drzwi_alarm" alias: "SMS: drzwi otwarte przy uzbrojonym alarmie" triggers: - trigger: state entity_id: binary_sensor.drzwi_wejsciowe to: "on" conditions: - condition: state entity_id: alarm_control_panel.dom state: armed_away actions: - action: rest_command.send_sms data: recipients: ["+48600100200"] message: "Alarm: otwarte drzwi wejściowe o {{ now().strftime('%H:%M') }}" response_variable: sms - if: - condition: template value_template: "{{ sms['status'] >= 400 }}" then: - action: persistent_notification.create data: title: "SMS nie wyszedł" message: "smsportal odpowiedział {{ sms['status'] }}: {{ sms['content'] }}"
Jak sterować domem SMS-em (komenda STATUS)
Gdy telefon odbierze SMS, smsportal wysyła JSON na adres webhooka Home Assistant. W automatyzacji masz go w trigger.json: trigger.json.sender to numer nadawcy, trigger.json.message to treść. Home Assistant nie umie sprawdzić podpisu X-Signature, więc hasłem jest sam webhook_id: użyj długiego losowego ciągu (np. openssl rand -hex 16) i nikomu go nie pokazuj.
- Zapewnij publiczny adres HTTPS. Z Home Assistant Cloud włączasz webhook automatyzacji w ustawieniach chmury i dostajesz adres w domenie Nabu Casa (wtedy
local_onlymoże zostaćtrue). Przy własnym reverse proxy ustawlocal_only: false. - Dodaj automatyzację z kodu poniżej. Zmień
webhook_idna własny losowy ciąg i wpisz na liście numery, którym wolno wydawać komendy. - W panelu smsportal otwórz Webhooki → Utwórz webhook, wklej adres
https://twoj-dom.example.com/api/webhook/<webhook_id>, wpisz sekret podpisu (co najmniej 20 znaków; Home Assistant go nie sprawdza, ale pole jest wymagane) i zaznaczMESSAGE_RECEIVED. - Wyślij słowo
statusz numeru z listy na numer telefonu-bramki. Odpowiedź przyjdzie po kilku sekundach.
- id: "sms_komenda_status"
alias: "SMS: komenda STATUS"
mode: queued
triggers:
- trigger: webhook
webhook_id: "sms-c4f1e9a27b8d4e3f96a05b1d2e7c8f40"
allowed_methods: [POST]
local_only: false
conditions:
- condition: template
value_template: >-
{{ trigger.json.webhookEvent == 'MESSAGE_RECEIVED'
and trigger.json.sender in ['+48600100200', '+48600100201']
and (trigger.json.message | trim | lower) == 'status' }}
actions:
- action: rest_command.send_sms
data:
recipients: ["{{ trigger.json.sender }}"]
message: >-
Alarm: {{ states('alarm_control_panel.dom') }},
drzwi: {{ states('binary_sensor.drzwi_wejsciowe') }},
salon: {{ states('sensor.salon_temperatura') }} CGotowe scenariusze
Alarm i czujnik drzwi
Czujnik otwarcia albo ruchu przy uzbrojonym alarmie wysyła SMS na Twój numer i numer domownika (
recipientsprzyjmuje listę). SMS dotrze nawet wtedy, gdy telefon nie ma internetu, a powiadomienia push z aplikacji nie przyjdą.Komenda SMS do domu
SMS
statusz numeru z listy zwraca stan alarmu, drzwi i temperaturę. Numer nadawcy da się podrobić, więc SMS-em tylko odczytuj stan albo włączaj rzeczy bezpieczne, jak ogrzewanie. Nie rozbrajaj alarmu i nie otwieraj bramy SMS-em.Zanik prądu
Gdy integracja UPS zgłosi pracę na baterii, automatyzacja wysyła SMS. Żądanie idzie z Home Assistant przez internet do smsportal, więc serwer Home Assistant i router muszą być na UPS. Telefon-bramka działa na baterii i danych komórkowych, więc nie potrzebuje domowego Wi-Fi.
Błędy i rozwiązania
- Brak akcji
rest_command.send_sms - Przyczyna: Home Assistant nie wczytał nowej sekcji
rest_commandalbo YAML ma błąd wcięcia. - Co zrobić: Uruchom Check configuration w Developer tools → YAML, popraw błąd i zrestartuj Home Assistant.
- W logu
Error. Url: ... Status code 401 - Przyczyna: Brak nagłówka
x-api-key, literówka wsecrets.yamlalbo nagłówekAuthorizationzamiastx-api-key. - Co zrobić: Sprawdź nazwę klucza w
secrets.yamli w!secret. Wygeneruj nowy klucz w panelu, jeśli stary został usunięty. - Status 400
- Przyczyna: Niepoprawny JSON (treść wklejona bez
to_json), brak włączonego telefonu albo niezweryfikowany e-mail konta. - Co zrobić: Użyj
payloadz przepisu, z filtremto_json. W panelu sprawdź, czy telefon jest włączony i czy e-mail jest potwierdzony. - Webhook nie uruchamia automatyzacji
- Przyczyna: Adres z
localhostalbo z sieci domowej,local_only: trueprzy reverse proxy albo innywebhook_idw panelu niż w automatyzacji. - Co zrobić: Wklej publiczny adres HTTPS z
/api/webhook/<webhook_id>. Przy reverse proxy ustawlocal_only: false. Ślady automatyzacji (Traces) pokażą, czy żądanie dotarło. - Komenda przychodzi, ale nic się nie dzieje
- Przyczyna: Numer na liście jest zapisany inaczej niż
sender(np. bez+48) albo treść ma dodatkowe słowa. - Co zrobić: Zapisuj numery w formacie
+48600100200. Sprawdź w Traces automatyzacji, co przyszło wtrigger.json.
Najczęstsze pytania
Czy smsportal ma integrację w Home Assistant?
Nie ma osobnej integracji. Wbudowane `rest_command` do wysyłki i wyzwalacz `webhook` do odbioru wystarczą i nie wymagają instalowania niczego z HACS.
Czy SMS przyjdzie, gdy w domu nie ma internetu?
Nie, jeśli nie ma go Home Assistant. Żądanie wysyłki idzie z Home Assistant przez internet do smsportal, a dopiero stamtąd do telefonu. Router i serwer na UPS z zapasowym łączem komórkowym rozwiązują ten problem.
Jak szybko dochodzi SMS?
Zwykle w kilka sekund. Telefon wysyła wiadomości po kolei, domyślnie z 5-sekundową przerwą. Jeśli jest offline, SMS czeka w kolejce do 72 godzin, a potem wygasa. Stan telefonu sprawdzisz w panelu.
Czy mogę sprawdzić podpis webhooka w Home Assistant?
Nie. Wyzwalacz `webhook` nie liczy HMAC, więc `X-Signature` zostaje niesprawdzony. Chroni Cię długi, losowy `webhook_id` i lista dozwolonych numerów w warunku. Jeśli potrzebujesz weryfikacji podpisu, odbierz webhook w n8n i dopiero stamtąd wywołaj Home Assistant.
Czy to zastąpi powiadomienia push z aplikacji?
Uzupełni je. SMS dochodzi bez internetu w telefonie odbiorcy i bez aplikacji, więc nadaje się do alarmów. Codzienne informacje zostaw w powiadomieniach push.
Źródła
- Home Assistant: RESTful Command
- Home Assistant: wyzwalacze automatyzacji (Webhook trigger)
- Home Assistant: przechowywanie sekretów
- smsportal: dokumentacja API
Więcej w poradnikach
Wyślij pierwszego SMS-a jeszcze dziś
Załóż darmowe konto, podłącz telefon i sprawdź, jak klienci reagują na wiadomości z Twojego numeru.