irukakun859
02/27/2025, 10:00 AMhi03
03/05/2025, 1:55 PMjs
var isOldVer = Packages.jp.ngt.rtm.RTMCore.VERSION.indexOf("1.7.10") !== -1;
var entity = su.getEntity();
var dataMap = entity.getResourceState().getDataMap();
var config = null;
if (isOldVer) config = entity.getModelSet().getConfig();//configを取得(1.7.10)
else config = entity.getResourceState().getResourceSet().getConfig();//configを取得(1.12)
var customButtons = Java.from(config.customButtons);//jsonのcustomButtonsを取得 & Java配列からjs配列に変換
//Button0の中身(jsonでの定義)を取得する
var button0 = customButtons[0];
//現在表示しているボタンの内容をbutton0から取得する
var button0Index = dataMap.getInt("Button0");//現在選択してるボタンのインデックスを取得
var announceData = button0[button0Index];//配列とインデックスから内容を取得
動作実証はしてませんがおそらくこんな感じかなと思います。irukakun859
03/08/2025, 12:13 AMpiposen_0801
03/08/2025, 1:15 AMhi03
03/08/2025, 4:02 AMhiranuma1441
03/08/2025, 11:07 AMirukakun859
04/30/2025, 12:20 PMhi03
04/30/2025, 12:53 PMirukakun859
04/30/2025, 1:14 PMirukakun859
05/02/2025, 11:26 AMhi03
05/03/2025, 3:59 PMjs
function onUpdate(su) {
var entity = su.getEntity();
var dataMap = entity.getResourceState().getDataMap();
var announceReceive = dataMap.getString("announceReceive");//キー: announceReceive で受信
var playedAnnounceName = dataMap.getString("playedAnnounceName");//直前に再生した音声
if (announceReceive !== playedAnnounceName) {//最後に再生した音声名と受信した音声名が違うとき
dataMap.setString("playedAnnounceName", announceReceive, 0);//保存
var soundData = announceReceive.split(":");// ":" でドメイン名と音声名を分離 ※dataMapでは "sound_◯◯:soundname" を流す
su.stopSound(soundData[0], soundData[1]);//すでに再生されてると再生できないので停止する
su.playSound(soundData[0], soundData[1], 1.0, 1.0, false);//1度だけ再生
}
}
IFTTT側ではTrainDataMapでDataType:String、Key:announceReceive、Valueに流したい音声の名前をドメイン付きで指定(例えば sound_hi03nex:e259.nexChime )をすれば流れるかなと思います(動作未検証)
・Customボタンのjson登録について
下記のとおりです。ただし、純正RTM1.7.10ではカスタムボタン未実装になります(1.12及びKaizPatchでのみ使用可能)。
json
"customButtons":
[
["Time:MC","Time:Real"],
["typeA", "typeB", "typeC", "typeD"]
]
getInt("Button◯◯")の返り値は選択しているボタンのインデックス番号(0から数える)になります。hi03
05/03/2025, 4:05 PMirukakun859
05/04/2025, 10:56 AMirukakun859
05/05/2025, 12:19 AMhi03
05/05/2025, 1:01 AMirukakun859
05/05/2025, 2:26 AMhi03
05/05/2025, 1:24 PMjs
function onUpdate(su) {
var entity = su.getEntity();
var dataMap = entity.getResourceState().getDataMap();
var announceReceive = dataMap.getString("announceReceive");//キー: announceReceive で受信
var playedAnnounceName = dataMap.getString("playedAnnounceName");//直前に再生した音声
var soundData = announceReceive.split(":");// ":" でドメイン名/音声名/識別番号を分離 ※dataMapでは "sound_◯◯:soundname" を流す
var receivedTrainType = soundData[2];//受信した識別番号を取得
//var trainType = entity.getTrainStateData(8);//方向幕IDをtrainTypeにする
//var trainType = entity.getTrainStateData(9);//放送IDをtrainTypeにする
//var trainType = dataMap.getInt("Button0");//カスタムボタン(Button0)をtrainTypeにする
if (announceReceive !== playedAnnounceName && trainType === receivedTrainType) {//最後に再生した音声名と受信した音声名が違うとき && trainTypeとreceivedTrainTypeが一致したとき
dataMap.setString("playedAnnounceName", announceReceive, 0);//保存
su.stopSound(soundData[0], soundData[1]);//すでに再生されてると再生できないので停止する
su.playSound(soundData[0], soundData[1], 1.0, 1.0, false);//1度だけ再生
}
}
trainTypeのコメントアウトは必要に応じて解除してください
それから、スクリプトを書くにも私の時間を割くため、これからは部分的にでもいいので、できればご自身で書いていただければと思います(ここはスクリプトを発注する場では無いので)。
書いていく上でこういう処理をやりたいのだけど、どのように参照したらいいか?とか、こういう機能はありますか?とか、スクリプトがうまく動作しないので見てほしい、とかそういった質問であれば歓迎です。irukakun859
05/05/2025, 1:27 PM