ましろの興味が書く

UnityとかVRChatとかプログラミングとか電子工作とかロマンあふれるガジェットに興味があるぞ

部屋の明かり(VRChat内実家と現実の実家)をOK,Googleでつけられるようにするまで.

 

一つの記事を見たところから始まった

この記事には外部世界と仮想世界のつなげ方(の概要)が書いてあるので興味が湧いた.

是非見て来てください!!(頭に入りやすくなる)

qiita.com

作った

実装

前提

 私の家にはGoogleHomeやamazon echoなどのデバイスがないので今回は自分のスマホ(android)についているGoogleアシスタントの機能を使い作成した.

GoogleHomeでも同じやり方でできそう.

実装の方法が随分と回りくどいのでご了承ください(自分で改良して♡)

全体像

OK,Google(andro)

{IFTTT使用  Google Assistantで拾い →Webhookで送る}

DiscordのWebhookで拾い →DiscoのBotに渡す

OSC(仮想世界用のスイッチ)とwebhook(電子工作でリモコン式の照明を消せるやつのスイッチ)を送る

いい感じに照明がつけられる

 IFTTTからDiscordへ

ifttt.com

 アクセス→Make your own Applets from scratch +

IFにGoogle assistantを追加

「Say a simple phrase」かんたんなフレーズ対応用

「What do you want to say」なんて言ったときに?

電気つけて(自由でいいです

f:id:masiroiizo:20191023190450p:plain

「What do you want the Assistant to say in response」なんて返答すればいいの

「creat」

 

That にwebhooksを

Discordのサーバー設定から

URLにDiscordのWebhookのURLをコピー

f:id:masiroiizo:20191023191158j:plain

f:id:masiroiizo:20191023191025p:plain

f:id:masiroiizo:20191023191405j:plain

IFTTTのWebhoockの「method」をPOSTへ

「Content Type」をapplication/json

「Body」を{ "content": "tukeruo" }へ(tukeruoの部分は何でもいいお

FINISH!!

 

OK,Google 「電気つけて」して試してみましょう!

しっかりとDiscordへ「tukeruo」と返ってきたらここまでは完璧です!

Discord BotとOSCと現実のライト用のWebhockのプログラム

参考

qiita.com

OSCメッセージでVRChatのアクションを実行する - じぇしかめも

 

ここからはPythonで作っていきます.

環境を書いておきます.

python 3.6.2

・pip 19.0.3

・discord.py 1.2.4

まずは pip install discord.py でdiscordのBotを利用するライブラリをインスコします.

その次に pip install python-osc でpythonoscパッケージをインスコします.

(OSCメッセージを利用するためのものです)

 

注意点

現実のライト用のコードはESP-32をBlynkにつなげてWebhookしたものになります.

つまりここのコードは準備ができたら書いてください(ESP-32を買う,赤外線LEDを買う,赤外線センサーを買う,Blynk用のソースを書く,Webhookでつなげる)

つまりdef ie_light():のところをコメントアウトしておいて.

ここの参考もおいておきます.

www.mgo-tec.com

 Bot作ってきて

qiita.com

 TOKENのところで少し解釈を間違ったので注意.(Client Secretの方をコピーしていたw)

f:id:masiroiizo:20191023204119j:plain

import discord
from pythonosc import udp_client
from pythonosc.osc_message_builder import OscMessageBuilder
import requests


def main(a):
    messe = ['/cube/activate', a]
    # 受信先のVRChat
    IP = '127.0.0.1'
    PORT = 9000

    # OSCメッセージ情報の読み込み
    address = messe[0]
    arg = messe[1]

    print(address)
    print(arg)

    # OSCメッセージの構築
    client = udp_client.UDPClient(IP, PORT)
    msg = OscMessageBuilder(address=address)
    msg.add_arg(arg)
    m = msg.build()

    # OSCメッセージの送信
    client.send(m)


def ie_light():
    url ='現実のライト用のWebhook'

    response = requests.get(url)

    print(requests)
    print(type(response))


# 自分のBotのアクセストークンに置き換えてください
TOKEN = 'DiscordのBotのアクセストークン'

# 接続に必要なオブジェクトを生成
client = discord.Client()

# 起動時に動作する処理
@client.event
async def on_ready():
    # 起動したらターミナルにログイン通知が表示される
    print('ログインしました')

# メッセージ受信時に動作する処理
@client.event
async def on_message(message):
    if message.content == 'tukeruo':
        main(1)
        ie_light()

    if message.content == 'kesuo':
        main(0)
        ie_light()
client.run(TOKEN)

 ここまでは全くUnityをいじっていません.

ジェシカさんのところのやり方を参考にしているのでUnityでの設定箇所はそちらをご覧ください(https://jscmla1118.hatenablog.com/entry/2018/11/10/184833)

 

すごい丸投げ