v-suitch
VRChatでExpression MenuからSwitchBotデバイスを操作するやつ。
V睡用にVRChat内から照明を点滅できたらいいなと思い作成。
V睡用と言いつつSwitchBot APIを叩いているだけなので、SwitchBotでできることであれば大体は可能。
利用手順
- Bunをインストールする
powershell -c "irm bun.sh/install.ps1 | iex" - 本リポジトリを任意のディレクトリにクローンする
Gitがインストールされていなければインストールするか、右上の<> Code ▼->Download ZIPからダウンロードして解凍するgit clone https://github.com/conarin/v-suitch.git v-suitchディレクトリに移動するcd v-suitch- 依存パッケージをインストールする
bun install - 環境変数を設定する
cp .env.sample .env
# お好きなエディタで編集する - アバターのExpression Parametersに、任意の名前のパラメータをBool型で追加する
Savedにチェックを入れる - アバターのExpression Menuに、先ほど追加したパラメータのトグルスイッチを追加する
- アバターをアップロード後、Expression Menuの
オプション->OSCへ移動してOSCを有効にする
OSCが既に有効になっている場合は設定をリセットを押す - 実行する
bun run start - Expression Menuから照明を点滅できる!
環境変数
| Key | Value |
|---|---|
| SWITCH_BOT_TOKEN | SwitchBotのトークン。 取得方法は公式サイトを確認。 |
| SWITCH_BOT_SECRET | SwitchBotのクライアントシークレット。 取得方法は公式サイトを確認。 |
| SLEEP_SCENE_ID | 就寝時(パラメータがtrueのとき)に実行させるシーンのID。シーンIDは .fetchScenes()メソッドで取得可能。 |
| WAKE_UP_SCENE_ID | 起床時(パラメータがfalseのとき)に実行させるシーンのID。シーンIDは .fetchScenes()メソッドで取得可能。 |
| PARAMETER_NAME | Expression Parametersに設定したパラメータ名。 |
| HOST | VRChatを起動しているホスト。 デフォルトは 127.0.0.1。 |
| IN_PORT | OSCの受信ポート(VRChat側の送信ポート)。 デフォルトは 9001。 |
| OUT_PORT | OSCの送信ポート(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は有効にすることを推奨