slack Bolt の実装

slack に投稿された文章を解析して、次のアクションにつなげる部分を作成する。
以下の図の赤枠の部分。

slack には、Bolt という便利なボットツールがあるので、それを活用させてもらいます。
今回もサーバに合わせて、pythonで処理を作成するため、Slack Bolt for Python を使います。

slack Bolt のインストールと基本設定

インストールと基本の設定については、オフィシャルページがかなり詳しいので、そちらを確認ください。
ラズパイ(Rapsberry Pi)に、必要なインストールを行います。

Boltでのデータ取得とアクション操作

基本的には、slackへの投稿を正規表現でチェックして、該当する指示を割出して、それに対するアクション(赤外線リモコンへの指示やwifiでの特定コマンドの送信 など)を呼出す処理を作成する。

<main.py>

import os
from time import sleep
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler

import bravia1
import raspi_remocon2

########
# 定義 #
########
app = App(token=os.environ.get( "SLACK_BOT_TOKEN" ))

###############
## 電気関連
###############
##/ 電気をつける 
@app.message(re.compile("電気.*つけ.*"))
def message_lightON(message, say):

    data = "irdata/light-power.data"
    raspi_remocon.trans( data )
    say(f"light-ON")
    
##/ 電気を消す
@app.message(re.compile("電気.*消.*"))
def message_lightOFF(message, say):

    # 電気のタイプに応じて処理を変える必要あり
    # 電気は、点灯→常夜灯→OFF→点灯 を1ボタンでサイクリック制御のため
    data = "irdata/light-power.data"
    raspi_remocon.trans( data )
    sleep(0.5)
    raspi_remocon.trans( data )
    say(f"light-OFF")
    
##############
# テレビ関係
##############
##/ テレビをつける 消す
@app.message(re.compile("テレビ.*(つけ).*"))
def message_TVON(message, say):
    bravia.send("TV-POWER-ON")
    say("TV-ON")
    
##/ テレビを 消す
@app.message(re.compile("テレビ.*(消し).*"))
def message_TVOFF(message, say):
    bravia.send("TV-POWER-OFF")
    say("TV-OFF")
    
##/ チャンネルを変える 
@app.message(re.compile("チャンネル.*(して|変|し て).*"))
def message_TVch(message, say):
    ch = 0
    sch = re.sub( r"\D", "", message["text"] )  # メッセージから数字を抽出してint に変換
    if ( sch != "" ):
        ch = int( sch ) 
        raspi_remocon.trans(f"irdata/tv-{ch}ch.data")
        say(f"TV-CH-{sch}")
    else:
        raspi_remocon.trans("irdata/tv-ch-up.data")
        say("TV-CH-CHANGE")
    
#-----------------------------------------------------------#
#アプリ起動
if __name__ == "__main__":
    SocketModeHandler( app, os.environ["SLACK_APP_TOKEN"]).start()

これで、slack に「テレビをつけて」と書き込めば、テレビを操作する呼出しが出来るようになりました。
動作確認としては、コマンドの部分をコメントアウトして、slack上で、指示と応答(TV-ON)などのやり取りが出来るところまで確認できたらこのパートはOKです。
目次ページに戻る


  1. 我が家のテレビはブラビアで、電源のON/OFFについてはwifiのコマンドで操作が可能であったため、wifiのコマンドを投げるライブラリを作成しました。ご参考
    おまけ ↩︎
  2. ラズパイの赤外線リモコンツールを操作するためのライブラリです。 ↩︎

コメント

タイトルとURLをコピーしました