メインコンテンツまでスキップ

v-suitch

リポジトリはこちら

VRChatでExpression MenuからSwitchBotデバイスを操作するやつ。
V睡用にVRChat内から照明を点滅できたらいいなと思い作成。
V睡用と言いつつSwitchBot APIを叩いているだけなので、SwitchBotでできることであれば大体は可能。

利用手順

  1. Bunをインストールする
    powershell -c "irm bun.sh/install.ps1 | iex"
  2. 本リポジトリを任意のディレクトリにクローンする
    Gitがインストールされていなければインストールするか、右上の<> Code ▼->Download ZIPからダウンロードして解凍する
    git clone https://github.com/conarin/v-suitch.git
  3. v-suitchディレクトリに移動する
    cd v-suitch
  4. 依存パッケージをインストールする
    bun install
  5. 環境変数を設定する
    cp .env.sample .env
    # お好きなエディタで編集する
  6. アバターのExpression Parametersに、任意の名前のパラメータをBool型で追加する
    Savedにチェックを入れる
  7. アバターのExpression Menuに、先ほど追加したパラメータのトグルスイッチを追加する
  8. アバターをアップロード後、Expression Menuのオプション->OSCへ移動してOSCを有効にする
    OSCが既に有効になっている場合は設定をリセットを押す
  9. 実行する
    bun run start
  10. Expression Menuから照明を点滅できる!

環境変数

KeyValue
SWITCH_BOT_TOKENSwitchBotのトークン。
取得方法は公式サイトを確認。
SWITCH_BOT_SECRETSwitchBotのクライアントシークレット。
取得方法は公式サイトを確認。
SLEEP_SCENE_ID就寝時(パラメータがtrueのとき)に実行させるシーンのID。
シーンIDは.fetchScenes()メソッドで取得可能。
WAKE_UP_SCENE_ID起床時(パラメータがfalseのとき)に実行させるシーンのID。
シーンIDは.fetchScenes()メソッドで取得可能。
PARAMETER_NAMEExpression Parametersに設定したパラメータ名。
HOSTVRChatを起動しているホスト。
デフォルトは127.0.0.1
IN_PORTOSCの受信ポート(VRChat側の送信ポート)。
デフォルトは9001
OUT_PORTOSCの送信ポート(VRChat側の受信ポート)。
デフォルトは9000

SwitchBotクラスの使い方

import SwitchBot from './switchBot';

const switchBot = new SwitchBot('TOKEN', 'SECRET');

// 物理デバイスと仮想デバイスの一覧を取得する
const devices = await switchBot.fetchDevices();
console.dir(devices, {depth: null});

// 物理デバイスのステータスを取得する
const deviceStatus = await switchBot.fetchDeviceStatus('deviceId');
console.dir(deviceStatus, {depth: null});

// 物理デバイスまたは仮想デバイスに制御コマンドを送信する
const commandResult = await switchBot.sendCommand('deviceId', {
commandType: 'commandType',
parameter: 'parameter',
command: 'command',
});
console.dir(commandResult, {depth: null});

// シーンの一覧を取得する
const scenes = await switchBot.fetchScenes();
console.dir(scenes, {depth: null});

// シーンを実行する
const executionResult = await switchBot.executeScene('sceneId');
console.dir(executionResult, {depth: null});

備忘録

  • OSCが既に有効になっている場合、アバターを更新してもC:\Users\<UserName>\AppData\LocalLow\VRChat\VRChat\OSC\<userId>\Avatars\<avatarId>.jsonファイルは更新されない。OSCメニューから設定をリセット、または手動で削除して生成し直す必要がある
  • 稀に500 Internal Server Errorを返してくるので、その時はやり直す
  • ワールドを移動すると再実行される仕様のため、パラメータのSavedは有効にすることを推奨