2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Node-REDでできること part4 (自作ノード編)

Last updated at Posted at 2019-02-13

はじめに

やりたいこと

  • Node-REDでどんなことがどこまでできるのかを調べる
  • part4(自作ノード編)では、ノードを自作する方法を検証しました
  • 今回はchoiceというランダムにくじを引く機能ノードを作成します
    • ローカルインストールのみを行い、ライブラリへの公開は行いません

Node-REDのまとめ記事

参考にさせて頂いた記事

動作環境

  • OS : CentOS Linux release 7.5.1804 (Core)
  • Node-RED : v0.19.5
  • docker : 18.09.1
    • Node-REDイメージ : nodere/node-red-docker (IMAGE ID/d4f07b39b24d)
    • Dockerを使いますが、ホストに立てても大丈夫かと思います。

免責事項

  • 検証をして確実と思われる情報を載せておりますが、誤っている可能性もゼロではないので、参考程度にご利用ください
  • 本来はコードと実行結果のコンソールログも載せるべきなのですが、数と量が多いので、一旦は画面イメージまでとさせてください。

調査結果

ローカルインストールの流れ

  1. settings.jsに読み込むノード用フォルダを追記する
  2. オリジナルノード用にhtmlとjsファイルを作成する
  3. Node-REDを再起動する

settings.jsの設定

  • 以下の設定ファイルの個所にノード用フォルダを追加する
// settings.js
// XXXにノード用フォルダのパスを記載する

// Node-RED scans the `nodes` directory in the install directory to find nodes.
// The following property can be used to specify an additional directory to scan.
nodesDir: 'XXX',

新規ノードの作成

htmlファイル

  • 外見や入出力のポートの数、ヘルプのメッセージを決める
<script type="text/javascript">
    RED.nodes.registerType('Choice',{
        category: 'function', //functionノードとして登録
        color: '#a6bbcf', // 色
        defaults: {
            name: {value:""} // プロパティ
        },
        inputs:1, // 入力端子数
        outputs:1, // 出力端子数
        icon: "file.png", // アイコン
        label: function() {
            return this.name||"Choice"; // ラベル
        }
    });
</script>

<script type="text/x-red" data-template-name="Choice">
    <div class="form-row">
        <label for="node-input-name"><i class="icon-tag"></i> Name</label>
        <input type="text" id="node-input-name" placeholder="Name">
    </div>
</script>

<script type="text/x-red" data-help-name="Choice">
    <p>くじを引く</p> // ヘルプのメッセージ
</script>

jsファイル

  • 処理の実体を記述する
module.exports = function(RED) {
    function ChoiceNode(config) { //関数の定義
        RED.nodes.createNode(this,config);
        var node = this;
        this.on('input', function(msg) { // インプットに対応するイベント
	// ここからくじ引きのロジックの本体
	var result = "???"
	var val = Math.floor( Math.random() * 4); 
	switch (val){
	case 0:
	     result = "はずれ";
	     break;
	case 1:
	     result = "10点が当たりました"
	     break;
	case 2:
	     result = "50点が当たりました"
             break;
	case 3:
	     result = "100点が当たりました"
	     break;
	default:
     	     result = "はずれ";
	     break;
	}
	    msg.payload = result;
            node.send(msg);
        });
    }
    RED.nodes.registerType("Choice",ChoiceNode); // イベントの登録
}

画面イメージ
origin.jpg

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?