Skip to content

VRChatでExpression MenuからSwitchBotデバイスを操作するやつ。

License

Notifications You must be signed in to change notification settings

conarin/v-suitch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

v-suitch

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

graph LR
    A[VRChat Expression Menu]-->|OSC|B["Bun(TypeScript)"]-->|HTTPS|C[SwitchBot API]
Loading

利用手順

  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から照明を点滅できる!

環境変数

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は有効にすることを推奨

About

VRChatでExpression MenuからSwitchBotデバイスを操作するやつ。

Resources

License

Stars

Watchers

Forks