初台ラボ・デジタルツイン・チュートリアル6

初台ラボ デジタルツインプロジェクト

前回はNode-REDから”ON”や”OFF”をおくると、PlayCanvasのSpotLightがON/OFFするようにしました。
今回は、Node-REDからどの器具情報と点灯情報の2つをおくることで、複数の器具があっても対応できるようにします。

SpotLightをDuplicateして2つ作る

UntitledImage

SpotLightをDuplicateして2つにします。

UntitledImage

EntityからnameをSpotLight1、SpotLight2にします。

UntitledImage

UntitledImage

それぞれ、Positionをいじって見やすいところに移動させてください。

いろいろ整理

UntitledImage

LightのEntityでEnableのチェックを外して全体の光をなくします。

UntitledImage

今はCameraが斜め上からみてるようなかんじなので、Entityをいじって正面にします。

UntitledImage

こんな感じにすると

UntitledImage

いい感じです。

manage.jsの修正

UntitledImage

このように修正して、SpotLight1だけが操作できるか確認します。

UntitledImage

SpotLight1をNode-REDからON/OFFできました。

SpotLight1とSpotLight2のON/OFFをNode-REDから送る

UntitledImage

Node-REDのInjectノードをJSONで器具情報とON/OFF情報を送れるようにします。

UntitledImage

UntitledImage

Injectノードの中身はこんな感じ。

SpotLight1とSpotLight2それぞれに対してON/OFFを作ります。

manage.jsを修正してconsole.logで確認

UntitledImage

manage.jsを修正。

UntitledImage

PlayCanvas側で確認。無事にJSONで表示されました。

manage.jsを修正して器具を選択

var Manage = pc.createScript('manage');

// initialize code called once per entity
Manage.prototype.initialize = function() {

    // mqtt clientを作成
    let client = mqtt.connect('wss://public:public@public.cloud.shiftr.io:443');
 
    //let topic = "mqtttest";
    let topic = "toPlayCanvas";
 
    // Subscribeする
    client.subscribe(topic);
    
    // プロジェクト全体で使えるようにする
    this.app.client = client;
 
};

Manage.prototype.control = function (message) {

    // appの準備
    var app = this.app; 

    // MQTTから受信したデータ(buffer)を文字列にする
    var data = message.toString();

     // JSON形式にパース
    data = JSON.parse(data);

    var fixture = data['fixture'];
    var lightStatus = data['light'];

    this.spot = app.root.findByName(fixture);

    if ( lightStatus == "ON" ) {
        this.spot.light.enabled = true;
    }

    if ( lightStatus == "OFF") {
        this.spot.light.enabled = false;
    }
}

// update code called every frame
Manage.prototype.update = function(dt) {
};

manage.jsはこのようになります。

動作確認

UntitledImage

これで、Node-REDから器具を指定してON/OFFできるようになりました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です