初台ラボ デジタルツインプロジェクト
前回はNode-REDから”ON”や”OFF”をおくると、PlayCanvasのSpotLightがON/OFFするようにしました。
今回は、Node-REDからどの器具情報と点灯情報の2つをおくることで、複数の器具があっても対応できるようにします。
目次
SpotLightをDuplicateして2つ作る
SpotLightをDuplicateして2つにします。
EntityからnameをSpotLight1、SpotLight2にします。
それぞれ、Positionをいじって見やすいところに移動させてください。
いろいろ整理
LightのEntityでEnableのチェックを外して全体の光をなくします。
今はCameraが斜め上からみてるようなかんじなので、Entityをいじって正面にします。
こんな感じにすると
いい感じです。
manage.jsの修正
このように修正して、SpotLight1だけが操作できるか確認します。
SpotLight1をNode-REDからON/OFFできました。
SpotLight1とSpotLight2のON/OFFをNode-REDから送る
Node-REDのInjectノードをJSONで器具情報とON/OFF情報を送れるようにします。
Injectノードの中身はこんな感じ。
SpotLight1とSpotLight2それぞれに対してON/OFFを作ります。
manage.jsを修正してconsole.logで確認
manage.jsを修正。
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はこのようになります。
動作確認
これで、Node-REDから器具を指定してON/OFFできるようになりました。