0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Re:Zero2Wから始めるHomeAssistant生活 その④SlackからHomeAssistantを操作するよ!

0
Last updated at Posted at 2026-10-01

いつもの

いつもの自分の備忘録用デス。

外からHomeassistantを操作したいけどポート開けたりするのが面倒だったりできなかったり・・・
そこで思いついたSlackからHomeaAsistantをキーワードで操作できたらよくね?
ということでChatGPTさんにお伺いしたところ割と簡単にできたので記載しときます。
supervised用の内容になってますが、HomeAssistantOSでもできるかは不明。
動かなかったら、どこが悪いかChatGPTさんに聞いてみてください。

1.Slack Appを作成

Slack APIからYourApps→CreateNewApp→Blankappに移動

・SocketmodをONにしてApp-Level Tokenを作成、Scopeに"connections:write"を追加してxapp-...のトークンを保存
・OAuth&Permissions→BotTokenScopesでScopeに"chat:write"と"channels:history"を追加して
・Workspaceにインストールし、xoxb-...のトークンを保存
・EventSubscriptionsをONにしてSubscribetoboteventsに"message.channels"を追加
・SaveChangesで保存した後にslackの任意のチャンネルにBotを招待する。

2. Raspberry Piの準備

ターミナルでつないで下記入力。 HomeAssistant上のターミナルではなく、RaspberrPiOSに接続してください。
sudo apt update
sudo apt install -y python3-venv

mkdir ~/slack-ha
cd ~/slack-ha

python3 -m venv venv
source venv/bin/activate

pip install slack-bolt requests python-dotenv

Homeassistantにつないで、左下のアカウント名→セキュリティ→下のほうにある
長期間有効なアクセストークンを作成して保存。
.envに各種トークンとHomeAssistantのIPアドレスを設定。

nano ~/slack-ha/.env
.envの内容
SLACK_BOT_TOKEN=xoxb-xxxxx
SLACK_APP_TOKEN=xapp-xxxxx

HA_URL=http://192.168.1.xxx:8123
HA_TOKEN=HomeAssistantの長期間有効なアクセストークン

トークン関係はほかの人に渡ると操作いろいろされちゃうかもなので扱い注意。
次にメインの実行ファイルを作成します。
HomeAssistantで実行させたいスクリプト番号をメモって下さい。
main.pyのCOMMANDS=の部分にスクリプトを起動させるキーワードと一緒に記載します。
もっとコマンド数増やしたい場合はここの行を追加してあげてください。
IFTTTやwebhookなどのBOTからのメッセージでも起動するようにしているので、
無限ループしないように気を付けてください。

nano ~/slack-ha/main.py
main.pyの内容
import os
import requests

from dotenv import load_dotenv
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler

load_dotenv()

SLACK_BOT_TOKEN = os.environ["SLACK_BOT_TOKEN"]
SLACK_APP_TOKEN = os.environ["SLACK_APP_TOKEN"]

HA_URL = os.environ["HA_URL"]
HA_TOKEN = os.environ["HA_TOKEN"]

app = App(token=SLACK_BOT_TOKEN)


# Slackの投稿内容 → Home AssistantのScript
COMMANDS = {
    "キーワード1": "script.xxxxx",
    "キーワード2": "script.xxxxx",
    "キーワード3": "script.xxxxx",
}


def run_ha_script(entity_id):

    url = f"{HA_URL}/api/services/script/turn_on"

    headers = {
        "Authorization": f"Bearer {HA_TOKEN}",
        "Content-Type": "application/json",
    }

    data = {
        "entity_id": entity_id
    }

    response = requests.post(
        url,
        headers=headers,
        json=data,
        timeout=10
    )

    response.raise_for_status()


@app.event("message")
def handle_message(body, say, logger):
    event = body.get("event", {})

    text = event.get("text", "").strip()

    if not text and event.get("subtype") == "bot_message":
        attachments = event.get("attachments", [])
        if attachments:
            text = attachments[0].get("pretext", "").strip()

    print(f"TEXT: {repr(text)}", flush=True)
    print(f"SUBTYPE: {event.get('subtype')}", flush=True)

    if text in COMMANDS:
        try:
            run_ha_script(COMMANDS[text])
            say(f"「{text}」を実行しました")
        except Exception as e:
            print(f"ERROR: {e}", flush=True)
            say("Home Assistantの操作に失敗しました")



print("Slack → Home Assistant 起動")

handler = SocketModeHandler(
    app,
    SLACK_APP_TOKEN
)

handler.start()

自動起動させるのにsystemctlに登録します。

sudo nano /etc/systemd/system/slack-ha.service
slack-ha.serviceの内容
[Unit]
Description=Slack to Home Assistant
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=YOUR_USERNAME
WorkingDirectory=/home/YOUR_USERNAME/slack-ha
ExecStart=/home/YOUR_USERNAME/slack-ha/venv/bin/python /home/YOUR_USERNAME/slack-ha/main.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

YOUR_USERNAMEは環境に合わせてpiとか変更してください。
終わったら下記コマンドで反映させてください。
main.pyを編集した場合もこのコマンドで反映させる必要があります。

sudo systemctl daemon-reload
sudo systemctl enable slack-ha
sudo systemctl start slack-ha

あとはSlackからbotを招待したチャンネルで"キーワード1"のように送信すると、
設定したスクリプトがHomeAssistantで実行されるはずです。

たぶん。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?