0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

電子工作ガチ初心者がラズパイゼロでエアコン制御してみた 2(slackへの実装、ショートカット作成)

0
Posted at

経緯

前回記事の続きです。

前回はラズパイのセットアップ、回路の組み立て、エアコンの赤外線受信から送信までを行いました。
今回はslackにメッセージを送るだけでエアコンを付けられるようにします。また、それもめんどくせェのでiPhoneのショートカットアプリを用いてボタンを押すだけで付くようにします。スマホの中にリモコンを飼うことができるので、電池切れの心配とは無縁になります。

slackへの実装

botアプリの作成

slackでbotアプリを作成します。まずは、slackのワークスペースを追加しておきます。次に、slackapi のページにアクセスし、「Create New App」から「From scratch」を選択し、「App Name」を入力し、先ほど作成したワークスペースを追加して「Create App」をクリックします。

スクリーンショット (34).png

権限設定

「OAuth & Permissions」を選択します。

画像12.png

下にスクロールして「スコープ」の「ボットトークンのスコープ」に以下のものを追加します。(この写真ではユーザートークンのスコープも追加していますが、必要ありません)

スクリーンショット 2026-03-28 153132.png

「App Home」で「Edit」をクリック、「Display Name (Bot Name)」と「Default username」を入力します。

画像2.png

「OAuth & Permissions」に戻り、「install to ワークスペース名」をクリックします。

画像3.png

「許可する」をクリックしてbotに権限を付与します。

画像13.png

「xoxb-」から始まるBot User OAuth Tokenを覚えておきます。

画像5.png

ソケットモード設定

「Socket Mode」の「Enable Socket Mode」をオンにします。

画像8.png

「Token Name」は適当な名前を入力し、Generateをクリックします。

スクリーンショット (42).png

「xapp-」から始まるTokenを覚えておきます。

画像9.png

Event Subscriptions

「Event Subscriptions」の「Enable Events」をオンにします。

画像10.png

「Subscribe to bot events」で「app_mention」と「message.im」を追加します。これでbotがメンションされた場合とダイレクトメッセージで送られた場合、共に対応できるようになりました。

画像11.png

ラズパイの設定

前回に引き続き、ssh接続してラズパイを操作します。
まず、slack_aircon.pyというファイルを作ります。

nano slack_aircon.py

出てきた画面に以下のコードを入力します。

from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler
import subprocess

#このtokenを持つbotに指示を与える
app = App(token="xoxbから始まるBot User OAuth Tokenを入力")

#赤外線コマンド実行とslackに返信
def process_command(text, say):

    if "つけて" in text:
        #gpio22からファイル名codesの中のpower:onを実行するコマンド
        subprocess.run([
            "python3","irrp.py","-p","-g22","-f","codes","power:on"
        ]) 
        say("エアコンをつけました")

    elif "消して" in text:
        subprocess.run([
            "python3","irrp.py","-p","-g22","-f","codes","power:off"
        ])
        say("エアコンを消しました")

    else:
        say("無効なメッセージです")

#チャンネルでメンションされた時に実行
@app.event("app_mention")
def handle_mention(body, say):
    text = body["event"]["text"]
    process_command(text, say)

#DMで送った時に実行
@app.message("")
def handle_dm(message, say):

    # Bot自身のメッセージを無視(無限ループ防止)
    if "subtype" in message:
        return

    text = message["text"]
    process_command(text, say)

if __name__ == "__main__":
    #appトークンを用いてソケットモードで接続
    handler = SocketModeHandler(app, "xapp-から始まるTokenを入力")
    handler.start()

入力したら、Ctrl + Oで書き込み、Enterを押して保存します。Ctrl + Xで閉じます。
では、今のコードを起動してみます。以下でslack_airconを実行します。

python3 slack_aircon.py

次のように表示されます。

スクリーンショット 2026-03-28 222545.png

slackのgeneralでbotをメンションし、「つけて」と送るとエアコンがつくと思います。さらに、返信まで返してきてくれます。「消して」と送ればエアコンが消えます。

スクリーンショット 2026-03-28 225233.png

アイコンとメッセージをいじれば禪院真希の気持ちを味わうことができます。

スクリーンショット (50).png

ラズパイ起動時に自動でbotを起動

先ほどまでは「python3 slack_aircon.py」を入力してプログラムを実行していました。しかし、それではエアコンを操作するたびにちまちま入力する必要があるので、ラズパイを起動したら自動的にそのプログラムが実行されるようにしたいです。
以下を入力してラズパイを起動した際に自動的にslack待ちになるようにサービスファルを作ります。

sudo nano /etc/systemd/system/airconbot.service

表示された画面に以下を入力して、Ctrl + Oで書き込み、Enterを押して保存します。Ctrl + Xで閉じます。ユーザー名は自身のものに変更してください。

[Unit]
#ここは好きな名前
Description=Slack Aircon Bot
After=network.target

[Service]
#ユーザー名はラズパイに登録したものを使用
User=norio
#ここも「norio」を自身のユーザー名に変更
WorkingDirectory=/home/norio
#ここも「norio」を自身のユーザー名に変更
#slack_aircon.pyを実行
ExecStart=/usr/bin/python3 /home/norio/slack_aircon.py
Restart=always

[Install]
WantedBy=multi-user.target

「sudo nano /etc/systemd/system/airconbot.service」で「airconbot」という名前を付けたので、以下で設定ファイルを読み込ませます。

sudo systemctl enable airconbot

自動でプログラムが起動されるようにします。

sudo systemctl enable airconbot

今すぐスタートさせます。

sudo systemctl start airconbot

これでちまちま入力せずに、ラズパイを起動させただけでプログラムが実行されるようになりました。

iPhoneのショートカット作成

Webhook URLの取得

最後にiPhoneのショートカットを作成します。先ほどまではslackにいちいち「つけて」や「消して」を送る必要がありました。これはものすごくめんどくせェのでショートカットにして楽をします。
slackapi のページにアクセスし、「Incoming Webhooks」の「Activate Incoming Webhooks」をONにし、「Add New Webhook」をクリックします。

画像16.png

Workspaceとチャンネルは作成したbotが入っているところに設定し、「許可する」をクリックします。

画像17.png

「Webhook URL」をコピーします。あとで使います。

画像18.png

botのメンバーID取得

slackアプリ上で作成したbotをクリックしてメンバーIDを取得しておきます。

画像19.png
画像20.png

iPhoneのショートカット作成

新規ショートカットを開き、メニューから選択をクリックします。

名前をONとOFFにします。

URLの内容を取得を選び、ONの下に配置します。

先ほどコピーしておいたWebhook URLを貼り付けます。
方法「POST」、本文を要求を「JSON」にします。

「新規フィールドを追加」から「テキスト」を選択し、「キー」を「text」にします。「テキスト」には先ほど取得したbotのメンバーIDを用いて「<@メンバーID>つけて」と入力します。
これで、そのメンバーIDを持つbotをメンションして「つけて」と送ることができます。

OFFの場合も同様に同じURLを貼り付け、テキストに「<@メンバーID>消して」と入力します。

アイコンをホーム画面に追加し、タップすると、このようにONとOFFが選択できます。どちらかをタップすればエアコンが操作できます。

まとめ

今回はslackにメッセージを送ればエアコン制御ができ、さらにiPhoneのショートカットを導入することで、エアコンリモコンをスマホの中で飼うことができるようになりました。
今回は1種類の温度と消すことの2つの信号を学習させました。他にも、温度を上げたり風向を変更したものを学習させることにより、より快適なエアコン制御ができると思います。

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?