質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

解決済

2回答

6296閲覧

node-redで論理演算(andやor)ができない

退会済みユーザー

退会済みユーザー

総合スコア0

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2018/06/13 02:38

node-redに論理演算(andやor)のノードはあるんでしょうか?

raspberry piでnode-redを使用してGPIOの情報を処理しています。
下記のような処理をnode-redで行いたいのですが、わからず困っています。

3つのタクトスイッチが同時にON(TRUE)になった時、TRUEや任意の文字列を出力したいです。
またそれ以外状態では、FALSEまたは任意の文字列を出力したいです。

そのようなAND処理が可能ノードはあるんでしょうか?(公式のライブラリを見ていたのですがわかりませんでした。。。)
またAND処理ができるようなフロー?の書き方があるんでしょうか?

ご教授のほど、お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

質問内容からFunctionノードで自前のコードを書くのは難しいと判断し、
標準のノードでANDとORを作ってみました。
これなら自分で改造して使えるんじゃないでしょうか?

NODERED

1[{"id":"3531db9b.7403f4","type":"rpi-gpio in","z":"5262cfb.5d6fa3","name":"","pin":"11","intype":"tri","debounce":"25","read":false,"x":210,"y":500,"wires":[["5dc9093c.baacf8"]]},{"id":"c447c9c1.1b7c38","type":"rpi-gpio in","z":"5262cfb.5d6fa3","name":"","pin":"13","intype":"tri","debounce":"25","read":false,"x":210,"y":540,"wires":[["a6ee7aa5.8b9fa8"]]},{"id":"b37e74c0.672b08","type":"rpi-gpio in","z":"5262cfb.5d6fa3","name":"","pin":"15","intype":"tri","debounce":"25","read":false,"x":210,"y":580,"wires":[["88dfc93e.887588"]]},{"id":"5dc9093c.baacf8","type":"change","z":"5262cfb.5d6fa3","name":"","rules":[{"t":"set","p":"pin11","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":400,"y":500,"wires":[["2a7b9b91.6fed94"]]},{"id":"a6ee7aa5.8b9fa8","type":"change","z":"5262cfb.5d6fa3","name":"","rules":[{"t":"set","p":"pin13","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":400,"y":540,"wires":[["2a7b9b91.6fed94"]]},{"id":"88dfc93e.887588","type":"change","z":"5262cfb.5d6fa3","name":"","rules":[{"t":"set","p":"pin15","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":400,"y":580,"wires":[["2a7b9b91.6fed94"]]},{"id":"2a7b9b91.6fed94","type":"switch","z":"5262cfb.5d6fa3","name":"pin11","property":"pin11","propertyType":"flow","rules":[{"t":"eq","v":"1","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":590,"y":540,"wires":[["e8946fda.08adf"]]},{"id":"e8946fda.08adf","type":"switch","z":"5262cfb.5d6fa3","name":"pin11","property":"pin13","propertyType":"flow","rules":[{"t":"eq","v":"1","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":710,"y":540,"wires":[["347a3b02.980404"]]},{"id":"347a3b02.980404","type":"switch","z":"5262cfb.5d6fa3","name":"pin11","property":"pin15","propertyType":"flow","rules":[{"t":"eq","v":"1","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":830,"y":540,"wires":[["43c61223.58569c"]]},{"id":"b9924ae9.d74818","type":"comment","z":"5262cfb.5d6fa3","name":"AND","info":"","x":210,"y":460,"wires":[]},{"id":"f318dbe3.139a58","type":"rpi-gpio in","z":"5262cfb.5d6fa3","name":"","pin":"11","intype":"tri","debounce":"25","read":false,"x":210,"y":680,"wires":[["af4bb6ca.d77d08"]]},{"id":"50901400.49179c","type":"rpi-gpio in","z":"5262cfb.5d6fa3","name":"","pin":"13","intype":"tri","debounce":"25","read":false,"x":210,"y":720,"wires":[["9834b179.330f4"]]},{"id":"5b329548.4586fc","type":"rpi-gpio in","z":"5262cfb.5d6fa3","name":"","pin":"15","intype":"tri","debounce":"25","read":false,"x":210,"y":760,"wires":[["2d965d7d.700482"]]},{"id":"af4bb6ca.d77d08","type":"change","z":"5262cfb.5d6fa3","name":"","rules":[{"t":"set","p":"pin11","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":400,"y":680,"wires":[["9db2ce13.d0937"]]},{"id":"9834b179.330f4","type":"change","z":"5262cfb.5d6fa3","name":"","rules":[{"t":"set","p":"pin13","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":400,"y":720,"wires":[["9db2ce13.d0937"]]},{"id":"2d965d7d.700482","type":"change","z":"5262cfb.5d6fa3","name":"","rules":[{"t":"set","p":"pin15","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":400,"y":760,"wires":[["9db2ce13.d0937"]]},{"id":"9db2ce13.d0937","type":"switch","z":"5262cfb.5d6fa3","name":"pin11","property":"pin11","propertyType":"flow","rules":[{"t":"neq","v":"1","vt":"str"},{"t":"eq","v":"1","vt":"str"}],"checkall":"false","repair":false,"outputs":2,"x":590,"y":720,"wires":[["9789539.80f5ab"],["27c40f6c.aa81"]]},{"id":"9789539.80f5ab","type":"switch","z":"5262cfb.5d6fa3","name":"pin11","property":"pin13","propertyType":"flow","rules":[{"t":"neq","v":"1","vt":"str"},{"t":"eq","v":"1","vt":"str"}],"checkall":"false","repair":false,"outputs":2,"x":710,"y":700,"wires":[["d311f1b8.47f1"],["27c40f6c.aa81"]]},{"id":"d311f1b8.47f1","type":"switch","z":"5262cfb.5d6fa3","name":"pin11","property":"pin15","propertyType":"flow","rules":[{"t":"neq","v":"1","vt":"str"},{"t":"eq","v":"1","vt":"str"}],"checkall":"false","repair":false,"outputs":2,"x":830,"y":680,"wires":[[],["27c40f6c.aa81"]]},{"id":"59b717fc.952ea8","type":"comment","z":"5262cfb.5d6fa3","name":"OR","info":"","x":210,"y":640,"wires":[]},{"id":"43c61223.58569c","type":"debug","z":"5262cfb.5d6fa3","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":990,"y":540,"wires":[]},{"id":"27c40f6c.aa81","type":"debug","z":"5262cfb.5d6fa3","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":990,"y":720,"wires":[]}]

それか前の方の回答でもおっしゃってるように論理演算ノードをインストールするかです。

・追記
物理スイッチを直接GPIOにぶら下げている場合、下記のようなチャタリング対策も必要でしょう。

[{"id":"c6143e7b.a2e7e","type":"trigger","z":"5262cfb.5d6fa3","op1":"","op2":"","op1type":"pay","op2type":"nul","duration":"500","extend":false,"units":"ms","reset":"","bytopic":"all","name":"Interval 500ms","x":620,"y":440,"wires":[["ca656ec5.43d09"]]},{"id":"6a9bdb3b.c50624","type":"rpi-gpio in","z":"5262cfb.5d6fa3","name":"","pin":"11","intype":"tri","debounce":"25","read":false,"x":470,"y":440,"wires":[["c6143e7b.a2e7e"]]},{"id":"ca656ec5.43d09","type":"change","z":"5262cfb.5d6fa3","name":"","rules":[{"t":"set","p":"pin11","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":800,"y":440,"wires":[[]]}]

投稿2018/06/14 11:44

編集2018/06/14 11:48
shinobu_osaka

総合スコア456

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/06/15 01:32

標準のノードでandとorができるなんて驚きです・・・ この後、andとorを使用して、改造したいなと考えていたので 上記フローで簡単にできそうです。 チャタリングの件、ありがとうございます。全く考慮していませんでした。 しっかり対策します。 ご回答いただき、ありがとうございました!
shinobu_osaka

2018/06/15 05:41

お役に立てましたようで何よりです、また何かありましたらいつでもどうぞ。
退会済みユーザー

退会済みユーザー

2018/06/22 07:29

こちらこそありがとうございました。 ぜひまたよろしくお願いします。
guest

0

これはあくまでも一例ですが、
flow contextとfunctionノードで実現できるかと思います。

[{"id":"201d81d7.5dcb8e","type":"inject","z":"e0589b74.475528","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":140,"y":100,"wires":[["6d26f473.144844"]]},{"id":"f33a780e.c8daf8","type":"inject","z":"e0589b74.475528","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":140,"y":160,"wires":[["b48c9d9e.c0d4e"]]},{"id":"126157d.e8c2d28","type":"inject","z":"e0589b74.475528","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":140,"y":220,"wires":[["dbfe556b.9f24f8"]]},{"id":"435dda3a.fbcc0c","type":"inject","z":"e0589b74.475528","name":"","topic":"","payload":"","payloadType":"date","repeat":"0.5","crontab":"","once":false,"onceDelay":0.1,"x":150,"y":280,"wires":[["dae43b6d.d14b1"]]},{"id":"dae43b6d.d14b1","type":"function","z":"e0589b74.475528","name":"","func":"if ( flow.get(\"a\") === 1 && flow.get(\"b\") && flow.get(\"c\"))\n{\n node.send({'payload' : \"test\"});\n}","outputs":1,"noerr":0,"x":310,"y":280,"wires":[["ddee8071.fc1278"]]},{"id":"6d26f473.144844","type":"function","z":"e0589b74.475528","name":"gpio1","func":"flow.set(\"a\", 1);\nreturn msg;","outputs":1,"noerr":0,"x":290,"y":100,"wires":[[]]},{"id":"b48c9d9e.c0d4e","type":"function","z":"e0589b74.475528","name":"gpio2","func":"flow.set(\"b\", 1);\nreturn msg;","outputs":1,"noerr":0,"x":290,"y":160,"wires":[[]]},{"id":"dbfe556b.9f24f8","type":"function","z":"e0589b74.475528","name":"gpio3","func":"flow.set(\"c\", 1);\nreturn msg;","outputs":1,"noerr":0,"x":290,"y":220,"wires":[[]]},{"id":"ddee8071.fc1278","type":"debug","z":"e0589b74.475528","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":450,"y":280,"wires":[]},{"id":"ba2e5068.435238","type":"inject","z":"e0589b74.475528","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":true,"onceDelay":0.1,"x":150,"y":40,"wires":[["6493cc35.e3e1ec"]]},{"id":"6493cc35.e3e1ec","type":"function","z":"e0589b74.475528","name":"init","func":"flow.set('a', 0);\nflow.set('b', 0);\nflow.set('c', 0);\nreturn msg;","outputs":1,"noerr":0,"x":290,"y":40,"wires":[[]]}]

pollingする、というあまり綺麗ではない方法なので、より詳しい方の解答を待ってもよいかも・・・。

調べてみたら論理演算のnodeもあるようですね。

https://flows.nodered.org/node/node-red-contrib-boolean-logic
https://flows.nodered.org/node/node-red-contrib-bool-gate

投稿2018/06/14 09:32

miiika

総合スコア88

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/06/15 01:22 編集

添付いただいたノードでできました。ありがとうございます。 また論理演算ノードもやはりあったのですね。 勉強不足でした。ご紹介いただいた論理演算ノードでandとorの実装ができました。 的確なご回答いただきありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問