<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5587841204043490178</id><updated>2026-04-28T17:21:45.311+09:00</updated><category term="Android"/><category term="node-red"/><category term="SendGrid"/><category term="SmartTraining"/><category term="Ruby"/><category term="ANT+"/><category term="SyncAdapter"/><category term="ACE"/><category term="Palm Pre"/><category term="Azure"/><category term="Facebook"/><category term="Honeycomb"/><category term="IS03"/><category term="Java"/><category term="LiveView"/><category term="MashupAwards"/><category term="Neo4j"/><category term="NyARToolkit"/><category term="RSpec"/><category term="SMTP"/><category term="Sinatra"/><category term="Travis-CI"/><category term="Xperia"/><category term="ググれカス"/><category term="ASP.NET"/><category term="AWS"/><category term="Arc"/><category term="BeautyAlbum"/><category term="C#"/><category term="Docker"/><category term="DocumentDB"/><category term="Fusion Table"/><category term="Galaxy Tab"/><category term="Google Apps Device Policy"/><category term="Google Fusion Table API"/><category term="Google Fusion Tables API"/><category term="Google Maps Data API"/><category term="HT-03A"/><category term="Heroku"/><category term="JSONata"/><category term="LibAndrotranslation"/><category term="Mixi"/><category term="MongoDB"/><category term="MongoHQ"/><category term="Pebble"/><category term="RKBJ"/><category term="Security"/><category term="Twilio"/><category term="Webhook"/><category term="Xperia mini"/><category term="hacktoberfest"/><category term="kintone"/><category term="node.js"/><category term="nvm"/><category term="open cola"/><category term="reflector.io"/><category term="skyhook"/><category term="その他"/><category term="イベント"/><category term="リク美女カレンダー"/><title type='text'>なにがでるか</title><subtitle type='html'>モバイルがらみを中心としてコンピュータ関連のネタその他諸々を不定期で更新。</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://awwa500.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://awwa500.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>あわ</name><uri>http://www.blogger.com/profile/08571636318581967838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>199</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5587841204043490178.post-8739061930472663353</id><published>2022-10-29T12:36:00.001+09:00</published><updated>2022-10-29T12:39:48.688+09:00</updated><title type='text'>電話番号登録しているものとは別のdアカウントでスマートフォンのdアニメストアにログインする手順</title><content type='html'>&lt;h2 style=&quot;text-align: left;&quot;&gt;&amp;nbsp;はじめに&lt;/h2&gt;&lt;p&gt;dアニメストアを使い始めて2年ほどになりますが、表題のケースでログインする手順を毎回忘れてしまって困っていたのでまとめます。&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;前提条件とやりたいことの整理&lt;/h2&gt;&lt;div&gt;この記事で紹介する手順が必要になる前提条件とやりたいことを整理します。&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;利用する端末はスマートフォン（Android）&lt;/li&gt;&lt;li&gt;そのスマートフォンの電話番号はdアカウントAと紐付いている&lt;/li&gt;&lt;li&gt;電話番号と紐付いていないdアカウントBでdアニメストアにログインしたい&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;dアニメストアを使わずにしばらく放置しておくと、自動的にログイン状態が解除されてしまいます。この状態から復旧するのが目的です。なお、電話番号に紐付いたdアカウントでログインする場合は、何も考えず自動ログインできるので、この記事の手順は不要です。&lt;/div&gt;&lt;h2&gt;手順&lt;/h2&gt;&lt;div style=&quot;text-align: left;&quot;&gt;1. dアニメストアアプリ設定のリセット&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;はじめに、dアニメストアアプリの画面右上のメニューから「&lt;b&gt;アプリ設定 &amp;gt; ユーザーデータリセット&lt;/b&gt;」を選択して設定をリセットします。ここでdアニメストアアプリが自動的に終了します。&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjk0cDILYuNoNZ4ZC1mSOFaRTH3V2XGhQYMhJWfRDS64kqcvymwi345mVsicR9-gHvhyewxbd1uhx8ELCgAfenjUKyz3MnbdX9CUmH6OYr-_tH8zJBR2p7NPZt0gpv6SrSXabO1JLkZealSvCqUh1FpJ1fbsL-te3YZM3CrSdsUjo_vZUotjPcbQwBz/s1188/Screenshot_20221029-102205.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1188&quot; data-original-width=&quot;1096&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjk0cDILYuNoNZ4ZC1mSOFaRTH3V2XGhQYMhJWfRDS64kqcvymwi345mVsicR9-gHvhyewxbd1uhx8ELCgAfenjUKyz3MnbdX9CUmH6OYr-_tH8zJBR2p7NPZt0gpv6SrSXabO1JLkZealSvCqUh1FpJ1fbsL-te3YZM3CrSdsUjo_vZUotjPcbQwBz/s320/Screenshot_20221029-102205.png&quot; width=&quot;295&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOO20YuqKYIiIua7qvYvWdNF0oVUeqtTTltvEF1f29oYROfW0wjhVbu30KUm-cdtXT2IkkxzsTvzktziJN76e9Jt78H8TnBjq2UQGe0x_DckeFAcwQxloiOVjPLXZyhCgDeeUBt33nDH3r87HBY50PtwddQ9O7WVHANJKiJ99R3PyzUu8s6OQoT4kd/s1096/Screenshot_20221029-102211.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;968&quot; data-original-width=&quot;1096&quot; height=&quot;283&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOO20YuqKYIiIua7qvYvWdNF0oVUeqtTTltvEF1f29oYROfW0wjhVbu30KUm-cdtXT2IkkxzsTvzktziJN76e9Jt78H8TnBjq2UQGe0x_DckeFAcwQxloiOVjPLXZyhCgDeeUBt33nDH3r87HBY50PtwddQ9O7WVHANJKiJ99R3PyzUu8s6OQoT4kd/s320/Screenshot_20221029-102211.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;div&gt;2. dアニメストアを起動&lt;/div&gt;&lt;div&gt;次に、dアニメストアアプリを起動して「&lt;b&gt;規約に同意して利用を開始&lt;/b&gt;」を選択します。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguFbERd1tNhzoUyWT-aXFOYtfCLtiOzY55bipn-uuokdcPcfjy9fKoyk8oSlRRc8GKpzIstobwWCwFDJ95VyLTmHjwJpqeuwlKeqXJzvwKdltleGklyQArRv8-ubalLFKCixc9q5BEi0Sxzi1ArBS6EtDCgNFMQ6125kd0ODgT2ODbrpNnoB9idMlv/s2560/Screenshot_20221029-095806.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;2560&quot; data-original-width=&quot;1096&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguFbERd1tNhzoUyWT-aXFOYtfCLtiOzY55bipn-uuokdcPcfjy9fKoyk8oSlRRc8GKpzIstobwWCwFDJ95VyLTmHjwJpqeuwlKeqXJzvwKdltleGklyQArRv8-ubalLFKCixc9q5BEi0Sxzi1ArBS6EtDCgNFMQ6125kd0ODgT2ODbrpNnoB9idMlv/w274-h640/Screenshot_20221029-095806.png&quot; width=&quot;274&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;このタイミングで、電話番号と紐付いているdアカウントAで自動的にログインされてしまいます。最初はここでうろたえますが、大丈夫です。&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiInCMzDBZI-51bnFuU1gN3336VhW8ANurgZrhCh9rPnDIfCtInN-U8KmCNQa3GsttA03cEJlCrBSaKdrhUOHkqtYe6o-L_rbSmH_voKScbg_vWpQ_yiSwSFj68EkfGyypshF7TK2GAzfnRMaWFes_7WlAtB4tI7xABS-K4yg9tgjqx3nLbsYnzR9yT/s1216/Screenshot_20221029-095845.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1216&quot; data-original-width=&quot;1092&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiInCMzDBZI-51bnFuU1gN3336VhW8ANurgZrhCh9rPnDIfCtInN-U8KmCNQa3GsttA03cEJlCrBSaKdrhUOHkqtYe6o-L_rbSmH_voKScbg_vWpQ_yiSwSFj68EkfGyypshF7TK2GAzfnRMaWFes_7WlAtB4tI7xABS-K4yg9tgjqx3nLbsYnzR9yT/s320/Screenshot_20221029-095845.png&quot; width=&quot;287&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3. ログアウト&lt;/div&gt;&lt;div&gt;そのまま同じ画面で一番下までスクロールして「&lt;b&gt;dアカウント ログアウト&lt;/b&gt;」を選択します。ここが第一関門です。ログアウトのメニューを見つける難易度が高い。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5qU_mF8ZlgQbF422I2MszW-zhBL9alq_ManBPsKVS1c3zdM6dM9OjYfAwD5pyO_CcumIkqNDmZTv4EtMZkuQU80ZJgvH-HAudIr7KKPXIThW8id6tuEy1A_EDB2TVfmR0gw2Nd3oygKI5P6nRhaVcVyvq7n2nVEeHc1TfiNgdD7_jO-2owb9r93so/s1474/Screenshot_20221029-104751.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1474&quot; data-original-width=&quot;1092&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5qU_mF8ZlgQbF422I2MszW-zhBL9alq_ManBPsKVS1c3zdM6dM9OjYfAwD5pyO_CcumIkqNDmZTv4EtMZkuQU80ZJgvH-HAudIr7KKPXIThW8id6tuEy1A_EDB2TVfmR0gw2Nd3oygKI5P6nRhaVcVyvq7n2nVEeHc1TfiNgdD7_jO-2owb9r93so/s320/Screenshot_20221029-104751.png&quot; width=&quot;237&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ログアウトが完了したら画面に表示される「&lt;b&gt;dアニメストア TOP&lt;/b&gt;」を選択してdアニメストアアプリのホーム画面が表示されることを確認します。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3nXYkdW1z3v1Gt9vkYPIOYm220LMu0xk9QEaKOer9pzhh4zWx_X9-wR9zMqK6x6g0TN6pBtkrpIRhD25T3BzDX7kuqlG6rxiawLjxG9kbXN1qw0LEqS_QId-hkdGRznONzOl-rt8-MMVO0TyjmztGo5DXF6a0M-PwQzB7J_TVItgVsmFW8hR3Iy5F/s1094/Screenshot_20221029-095859.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;916&quot; data-original-width=&quot;1094&quot; height=&quot;268&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3nXYkdW1z3v1Gt9vkYPIOYm220LMu0xk9QEaKOer9pzhh4zWx_X9-wR9zMqK6x6g0TN6pBtkrpIRhD25T3BzDX7kuqlG6rxiawLjxG9kbXN1qw0LEqS_QId-hkdGRznONzOl-rt8-MMVO0TyjmztGo5DXF6a0M-PwQzB7J_TVItgVsmFW8hR3Iy5F/s320/Screenshot_20221029-095859.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;4. 別のアカウントでログインしなおす&lt;/div&gt;&lt;/div&gt;&lt;div&gt;dアカウントBでログインするため、dアニメストアアプリホーム右上にある「&lt;b&gt;ご利用可能ポイント&lt;/b&gt;」を選択します。ここが第二関門です。「dアカウント ログイン/発行する」を選択してはいけません。そちらを選択すると自動ログインが発動してしまい、最初からやり直しです。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi66WJB1aMkeCnAAbknmkF7n_Ov2ILHHpLcuPU1KwKSX9RSMu4159_iE28VUAOR6s1kvCBIJ7R7Ht_LEf-9h8FkNXc6wa7QiGPd9rf7X5j83pnyi3JvaAlVAGejUg5M-1-OpHv6OeoXBiJ-XK6EBjWYHJt0LbuQ6UgcCK9XeyHGaEI-LYbfBUrGE2aU/s1190/Screenshot_20221029-095915.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1190&quot; data-original-width=&quot;1096&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi66WJB1aMkeCnAAbknmkF7n_Ov2ILHHpLcuPU1KwKSX9RSMu4159_iE28VUAOR6s1kvCBIJ7R7Ht_LEf-9h8FkNXc6wa7QiGPd9rf7X5j83pnyi3JvaAlVAGejUg5M-1-OpHv6OeoXBiJ-XK6EBjWYHJt0LbuQ6UgcCK9XeyHGaEI-LYbfBUrGE2aU/s320/Screenshot_20221029-095915.png&quot; width=&quot;295&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;次に「&lt;b&gt;dアカウント アカウントA&lt;/b&gt;」の部分を選択します。ここが第三関門で、すでにログアウトしているはずなのに古いログイン情報が残っており、自分が一体何をしていたのかわからなくなります。精神を落ち着けて状況を想像するに、dマーケット側はまだログアウトされていないようです（理解した風なことを書いていますが、dマーケット側ってなんだよ、とサービスの構造を知らない私の頭の中は疑問符だらけです）。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEingzRX41bCzS99aPTGX6XDiL8X3DSdsWd3qNHBw6ymZaMMSDYZ4g5EQ5bWOQq2GLiu4OJgiRToyyCznadn_OGDA3_QfY4BMyAQKQkXdpRZSySwAH6Pq-vslDfrGU0TY23aaUm8Of9UiZ-K8GqC7EAmHq3wVH0iVkmRqv7fQoawt-Hyl2z0duHvVWw7/s1100/Screenshot_20221029-095931.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1100&quot; data-original-width=&quot;1096&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEingzRX41bCzS99aPTGX6XDiL8X3DSdsWd3qNHBw6ymZaMMSDYZ4g5EQ5bWOQq2GLiu4OJgiRToyyCznadn_OGDA3_QfY4BMyAQKQkXdpRZSySwAH6Pq-vslDfrGU0TY23aaUm8Of9UiZ-K8GqC7EAmHq3wVH0iVkmRqv7fQoawt-Hyl2z0duHvVWw7/s320/Screenshot_20221029-095931.png&quot; width=&quot;319&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;次の画面で「&lt;b&gt;別のdアカウントでログイン&lt;/b&gt;」を選択します。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwRZncZ6EOSlrZ8KDNL0xejZSrXsetb2GjPLZoDCLWD-z6eQcntsljgcpDwHb0Qnlt6m7uJzpreVNvo9pg7fBOM7kfVA-Mu9E7UPEu70oLjAw33jhBadzwT8pOST0vMVqMeHPhWs3djiH2vVi5GpqODeP6wk-xkF1WbiLvYN3Df_wN7Oy-aAJ-xqoR/s1220/Screenshot_20221029-095938.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1220&quot; data-original-width=&quot;1096&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwRZncZ6EOSlrZ8KDNL0xejZSrXsetb2GjPLZoDCLWD-z6eQcntsljgcpDwHb0Qnlt6m7uJzpreVNvo9pg7fBOM7kfVA-Mu9E7UPEu70oLjAw33jhBadzwT8pOST0vMVqMeHPhWs3djiH2vVi5GpqODeP6wk-xkF1WbiLvYN3Df_wN7Oy-aAJ-xqoR/s320/Screenshot_20221029-095938.png&quot; width=&quot;287&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;「&lt;b&gt;dアカウントのID&lt;/b&gt;」を入力し、「&lt;b&gt;次へ&lt;/b&gt;」を選択します。もうおわかりかと思いますが、「かんたんログイン」を選択してはいけません。自動ログインが発動してしまい、最初からやり直しです。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizfbib5o1G-BYjJ-C3hGvm7MCLpFliuP5arxG8jiUTvIrwurlYAsZo655UvKJxGtMGl6TJhO3_EUdu75IhroDSf6z6XippMBMApPukezNflEY_scm9mhMq7T6okYqhf4iArCb4s79mmWqnXapVrDROlVaYqlork1LJMXWQOja8crZtUxwPRWKBU7qi/s1880/Screenshot_20221029-111544.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1880&quot; data-original-width=&quot;1094&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizfbib5o1G-BYjJ-C3hGvm7MCLpFliuP5arxG8jiUTvIrwurlYAsZo655UvKJxGtMGl6TJhO3_EUdu75IhroDSf6z6XippMBMApPukezNflEY_scm9mhMq7T6okYqhf4iArCb4s79mmWqnXapVrDROlVaYqlork1LJMXWQOja8crZtUxwPRWKBU7qi/w233-h400/Screenshot_20221029-111544.png&quot; width=&quot;233&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;パスワードとSMSで送られてくるセキュリティコードを入力して「&lt;b&gt;ログイン&lt;/b&gt;」を選択します。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtNhXD7nwbp4w5eB_Ha-hPNG_fXLfeqeZ5-pco9d-pidIk2fYBHgTF5TTympUbCc9PCcFj5JnVW1hTb0JjA_cSj0iz4ZkCog94oH_y2ad4JvasFlmn0Ojst2OccArPXtaNFJVkZ58oCOlSn7aVXbaq62CynL09tpuFLnEDs_d0g9mldp_vcsSe9B41/s1238/Screenshot_20221029-100131.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1238&quot; data-original-width=&quot;1094&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtNhXD7nwbp4w5eB_Ha-hPNG_fXLfeqeZ5-pco9d-pidIk2fYBHgTF5TTympUbCc9PCcFj5JnVW1hTb0JjA_cSj0iz4ZkCog94oH_y2ad4JvasFlmn0Ojst2OccArPXtaNFJVkZ58oCOlSn7aVXbaq62CynL09tpuFLnEDs_d0g9mldp_vcsSe9B41/s320/Screenshot_20221029-100131.png&quot; width=&quot;283&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;無事アカウントBでログインできました。でも、まだ罠があるので要注意です。すぐ下の各サービス一覧から「&lt;b&gt;dアニメストア&lt;/b&gt;」を選択します。&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0g66Taei_GdZkJoPIqTYUNsXTOiJ2TNIZNgeCWUED_HB925e5n8pRlawu4QD5gmPstva8VPEF6AhOZ3XwE8LBnKWyBs845iaMU5rIMR-2SvNbvSmG5lOk47U6EGrQYWyJR_kjoYkoKLwVzU0zKDGHRMA6c8dSml_o3Y_NFYIpXKhVNNZoOhQm9ZCN/s2560/Screenshot_20221029-093806.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;2560&quot; data-original-width=&quot;1096&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0g66Taei_GdZkJoPIqTYUNsXTOiJ2TNIZNgeCWUED_HB925e5n8pRlawu4QD5gmPstva8VPEF6AhOZ3XwE8LBnKWyBs845iaMU5rIMR-2SvNbvSmG5lOk47U6EGrQYWyJR_kjoYkoKLwVzU0zKDGHRMA6c8dSml_o3Y_NFYIpXKhVNNZoOhQm9ZCN/w274-h640/Screenshot_20221029-093806.png&quot; width=&quot;274&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;dアニメストアアプリのホーム画面が表示されたら「&lt;b&gt;dアカウント ログイン/発行する&lt;/b&gt;」を選択します。ここが第四関門です。すでにdアカウントBでログインしなおしたはずなのにdアニメストアには反映されていません。実は先ほど「dアカウント ログイン/発行する」を選択すると自動ログインが発動すると説明しましたが、dマーケット側がログイン状態であれば「dアカウント ログイン/発行する」を選択しても自動ログインは発動しません。ユーザーが知り得ない状態によって同じメニューの動作が異なるため混乱します。&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC5SzFlfisfu1Uo8FggeWYSf6e2Ku4NJOxwRXdMl0IM3CowTKr3asmASpHrTkU2dEmSckH-9fDkVeOzaGGUU1YlWThgKrKYA3BF9cIYJBK9r8RmNi4JxtKN2U5LGPERhwh-4gxJdB2oCkjjrabciJswdPqgEB34N6jCAbvW1webhgps-0WuUEmZm5O/s1200/Screenshot_20221029-100155.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1200&quot; data-original-width=&quot;1096&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC5SzFlfisfu1Uo8FggeWYSf6e2Ku4NJOxwRXdMl0IM3CowTKr3asmASpHrTkU2dEmSckH-9fDkVeOzaGGUU1YlWThgKrKYA3BF9cIYJBK9r8RmNi4JxtKN2U5LGPERhwh-4gxJdB2oCkjjrabciJswdPqgEB34N6jCAbvW1webhgps-0WuUEmZm5O/s320/Screenshot_20221029-100155.png&quot; width=&quot;292&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;無事、dアニメストアアプリにアカウントBでログインできました。&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGE-V_OaTmQTtpAazfS_L6mKgTGnmTe_GFsQ7MC2zsDR7mIamWAH01ZO3U0gt1PcKNUJ5GCIrn-c35VaJ9sF3HGeu1lB88jPMYXSBZlSO-w4GeQVqI39sjOIa9UyjWLVIluoJaR1YRnHF-8EFK_C_YDN7a6dkYXox8HAlzDQ0N1I0e89rgHXvhCXeb/s1202/Screenshot_20221029-100202.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1202&quot; data-original-width=&quot;1094&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGE-V_OaTmQTtpAazfS_L6mKgTGnmTe_GFsQ7MC2zsDR7mIamWAH01ZO3U0gt1PcKNUJ5GCIrn-c35VaJ9sF3HGeu1lB88jPMYXSBZlSO-w4GeQVqI39sjOIa9UyjWLVIluoJaR1YRnHF-8EFK_C_YDN7a6dkYXox8HAlzDQ0N1I0e89rgHXvhCXeb/s320/Screenshot_20221029-100202.png&quot; width=&quot;291&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;問題の原因&lt;/h2&gt;&lt;div&gt;罠がたくさんありましたが、整理してみます。&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;自動ログインが発動する状況がユーザから判別がつかない&lt;/li&gt;&lt;li&gt;dアニメストアとdマーケットのログイン状態が分離している&lt;/li&gt;&lt;li&gt;画面の構成がわかりにくい&lt;/li&gt;&lt;li&gt;画面の表記が不親切で、やりたいことがガイドできていない&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;さいごに&lt;/h2&gt;&lt;div&gt;この記事で紹介した手順にたどり着くのにまる2日かかりました。それまでは、なんとなく画面をたどって復旧させていましたが、手順が複雑すぎて毎回忘れてしまっていました。&lt;/div&gt;&lt;div&gt;電話番号と紐付いたdアカウントを利用する場合は、こんな苦労をする必要がないので、特殊なケースかと思いますが、もう少しなんとかしてほしいものです。この記事を書いていてダメなUI実装を集めた&lt;a href=&quot;https://userinyerface.com/&quot; target=&quot;_blank&quot;&gt;このサイト&lt;/a&gt;を思い出しました。&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://awwa500.blogspot.com/feeds/8739061930472663353/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://awwa500.blogspot.com/2022/10/das.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/8739061930472663353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/8739061930472663353'/><link rel='alternate' type='text/html' href='http://awwa500.blogspot.com/2022/10/das.html' title='電話番号登録しているものとは別のdアカウントでスマートフォンのdアニメストアにログインする手順'/><author><name>あわ</name><uri>http://www.blogger.com/profile/08571636318581967838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjk0cDILYuNoNZ4ZC1mSOFaRTH3V2XGhQYMhJWfRDS64kqcvymwi345mVsicR9-gHvhyewxbd1uhx8ELCgAfenjUKyz3MnbdX9CUmH6OYr-_tH8zJBR2p7NPZt0gpv6SrSXabO1JLkZealSvCqUh1FpJ1fbsL-te3YZM3CrSdsUjo_vZUotjPcbQwBz/s72-c/Screenshot_20221029-102205.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5587841204043490178.post-8991082455965398938</id><published>2022-05-26T12:54:00.000+09:00</published><updated>2022-05-26T12:54:10.074+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="node-red"/><title type='text'>Batchノードを使う（その2）</title><content type='html'>&lt;p&gt;&amp;nbsp;ここのところずっと&lt;a href=&quot;https://nodered.org/&quot; target=&quot;_blank&quot;&gt;Node-RED&lt;/a&gt;のサンプルを見ながら各ノードの使い方を確認しています。&lt;a href=&quot;/2021/09/node-red-start.html&quot; target=&quot;_blank&quot;&gt;頭出しの記事はこちら&lt;/a&gt;をご確認ください。今回はBatchノードの第2回目です。&lt;/p&gt;&lt;div&gt;確認するサンプルは、「&lt;b&gt;読み込み &amp;gt; サンプル &amp;gt; flows &amp;gt; node-red &amp;gt; sequence &amp;gt; batch &amp;gt; 02 - Time based group mode&lt;/b&gt;」です。時間ベースでメッセージをグループ化できるみたいです。&lt;/div&gt;&lt;div&gt;&lt;h2&gt;時間ベースでメッセージをグループ化する&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;ざっくりとした流れは以下のとおりです。&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Functionノードがバラバラのメッセージを送信する&lt;/li&gt;&lt;li&gt;Delayノードが流量制限を行い、1秒1メッセージ流すようにする&lt;/li&gt;&lt;li&gt;Batchノードが指定した時間間隔ごとにグループ化（partsプロパティに自動生成した値を設定）する&lt;/li&gt;&lt;li&gt;Joinノードが同じpartsプロパティの値ごとに1つのメッセージにまとめる&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjddE0ADwgpUKoL0IDEMcJou4l0oh9hfIMqFzan-5w3ewnDetEofE_RAJ05fwm5p3QYFo9zba6vSzBkhpnUpjsg9PtXLohvBsI0JfUSNwoBHMp6BiCk8h2zXaPj7-Vo3iUAIwxqAJGzQ-lfAwBf4oLNeYp6KmjzKKqUmHCTZufhZCGTF39LaTYhwpL5/s1568/Node-RED344.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;690&quot; data-original-width=&quot;1568&quot; height=&quot;282&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjddE0ADwgpUKoL0IDEMcJou4l0oh9hfIMqFzan-5w3ewnDetEofE_RAJ05fwm5p3QYFo9zba6vSzBkhpnUpjsg9PtXLohvBsI0JfUSNwoBHMp6BiCk8h2zXaPj7-Vo3iUAIwxqAJGzQ-lfAwBf4oLNeYp6KmjzKKqUmHCTZufhZCGTF39LaTYhwpL5/w640-h282/Node-RED344.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;上流から順にノードの設定を見ていきます。入力データを生成するFunctionノードでは、0〜29の値をPayloadに持つメッセージを送信しています。ここは&lt;a href=&quot;/2022/05/node-red-batch1.html&quot; target=&quot;_blank&quot;&gt;前回の記事&lt;/a&gt;と同じです。&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpzQEdn8Y_qP1t-Pl1aK2BkU5gGW5wTZCX0iRGPlAuYavY2G7veAr-f0R77uaogLFGlV4XPJhXnYaOORwcTLk7zP9SxU049emtJ6AOQauEU_Jld6bPa45jETEk32UEphUVG-hYGHEi2zrZSr-aiA60qJdWuQ_zHX_OOvmNYCJqGFSZwgZ2hHarTFxs/s1280/Node-RED3389.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;562&quot; data-original-width=&quot;1280&quot; height=&quot;282&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpzQEdn8Y_qP1t-Pl1aK2BkU5gGW5wTZCX0iRGPlAuYavY2G7veAr-f0R77uaogLFGlV4XPJhXnYaOORwcTLk7zP9SxU049emtJ6AOQauEU_Jld6bPa45jETEk32UEphUVG-hYGHEi2zrZSr-aiA60qJdWuQ_zHX_OOvmNYCJqGFSZwgZ2hHarTFxs/w640-h282/Node-RED3389.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;続いて、Delayノードで流量制限を行います。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjD0Bo5qZuiskNcT99hLRiC6U0VsppQN_dQMfcrLXrFOEpUl8DvUhGDZCMmLYsczji0ZsdN3lxRRVhAW1QEhyx7xNQHb1hThBRxEqj9TymLtXu6K_uK8Afl3CuVChBMNXw2W1d7SIJT6mtEejdBMNI_7_UPzcLGYRYFfkpbgLFsno9v4aoB4hyhDav3/s1002/Node-RED345.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;772&quot; data-original-width=&quot;1002&quot; height=&quot;494&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjD0Bo5qZuiskNcT99hLRiC6U0VsppQN_dQMfcrLXrFOEpUl8DvUhGDZCMmLYsczji0ZsdN3lxRRVhAW1QEhyx7xNQHb1hThBRxEqj9TymLtXu6K_uK8Afl3CuVChBMNXw2W1d7SIJT6mtEejdBMNI_7_UPzcLGYRYFfkpbgLFsno9v4aoB4hyhDav3/w640-h494/Node-RED345.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;続いて、Batchノードで指定した時間間隔ごとにグループ化します。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUJR4bMsJ18f1RJqAUZZSqsyDsG9XvGtzFp0CpKsd_3exJ3FXVQmaS3uHMBODQ55GP3rFi9R-0F1QoBrwf9U4w4S53A3806S1H5g3w-sBacVoKpRItoXbpL_Qj1566I3T-RUGRVfAxtSG2G4TKPRmuCFSXuSG_hWiR4xBYHD82bKm8teCcxFrcj4lL/s1012/Node-RED346.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;602&quot; data-original-width=&quot;1012&quot; height=&quot;380&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUJR4bMsJ18f1RJqAUZZSqsyDsG9XvGtzFp0CpKsd_3exJ3FXVQmaS3uHMBODQ55GP3rFi9R-0F1QoBrwf9U4w4S53A3806S1H5g3w-sBacVoKpRItoXbpL_Qj1566I3T-RUGRVfAxtSG2G4TKPRmuCFSXuSG_hWiR4xBYHD82bKm8teCcxFrcj4lL/w640-h380/Node-RED346.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;続いて、Joinノードで複数メッセージをまとめます。動作が自動なので、partsプロパティの値ごとにまとめます。ここも&lt;a href=&quot;/2022/05/node-red-batch1.html&quot; target=&quot;_blank&quot;&gt;前回の記事&lt;/a&gt;と同じです。&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzWWmIfjDieDZXruum0h0GmesDRmdQQeMEYFnIMaM49EItzF9Y4Wh_eBtRdlRQTgPkmveaTf7o-lE57JbfShv4D1l6MIVhfQRp4oOZ5NpLUyK3ELnj9HIHwHZB72w0jNjDAKEHIo-hZZZwF3VEam5iRDADpFMAuD2ZbSLElW4585Bl37Gw3w8V8h8w/s1016/Node-RED340.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;572&quot; data-original-width=&quot;1016&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzWWmIfjDieDZXruum0h0GmesDRmdQQeMEYFnIMaM49EItzF9Y4Wh_eBtRdlRQTgPkmveaTf7o-lE57JbfShv4D1l6MIVhfQRp4oOZ5NpLUyK3ELnj9HIHwHZB72w0jNjDAKEHIo-hZZZwF3VEam5iRDADpFMAuD2ZbSLElW4585Bl37Gw3w8V8h8w/w640-h360/Node-RED340.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;実行すると、以下のログが出力されます。画面キャプチャからは読み取れませんが、ログは約5秒毎に出力されます。流量制限したメッセージがグループ化されるのに時間がかかるんでしょうね。&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3M3r4xynK7eaEeVmhm0tWW33JSe_9cty8j17UuBcVSKZKEhbxzJnduaKqLsYWYdwhL_mxhfmurLBDOGPnXijyIVwOutgVbYeTdCaXBtHBF9XAfFeITR0ZGZnBFENPs8eBetfuBjtfzFOC1pLPs8ubomFIx-iu9AOkjMBo_mi65xyioPjzckzTpIcY/s1168/Node-RED347.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1168&quot; data-original-width=&quot;614&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3M3r4xynK7eaEeVmhm0tWW33JSe_9cty8j17UuBcVSKZKEhbxzJnduaKqLsYWYdwhL_mxhfmurLBDOGPnXijyIVwOutgVbYeTdCaXBtHBF9XAfFeITR0ZGZnBFENPs8eBetfuBjtfzFOC1pLPs8ubomFIx-iu9AOkjMBo_mi65xyioPjzckzTpIcY/w336-h640/Node-RED347.png&quot; width=&quot;336&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;まとめ&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;まとめます。&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;複数メッセージを時間ベースでグループ化できます&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;Batchノードシリーズはもう少し続きます。&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://awwa500.blogspot.com/feeds/8991082455965398938/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://awwa500.blogspot.com/2022/05/node-red-batch2.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/8991082455965398938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/8991082455965398938'/><link rel='alternate' type='text/html' href='http://awwa500.blogspot.com/2022/05/node-red-batch2.html' title='Batchノードを使う（その2）'/><author><name>あわ</name><uri>http://www.blogger.com/profile/08571636318581967838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjddE0ADwgpUKoL0IDEMcJou4l0oh9hfIMqFzan-5w3ewnDetEofE_RAJ05fwm5p3QYFo9zba6vSzBkhpnUpjsg9PtXLohvBsI0JfUSNwoBHMp6BiCk8h2zXaPj7-Vo3iUAIwxqAJGzQ-lfAwBf4oLNeYp6KmjzKKqUmHCTZufhZCGTF39LaTYhwpL5/s72-w640-h282-c/Node-RED344.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5587841204043490178.post-8123075570074323165</id><published>2022-05-23T13:03:00.002+09:00</published><updated>2022-05-23T13:03:00.129+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="node-red"/><title type='text'>Batchノードを使う（その1）</title><content type='html'>&lt;p&gt;ここのところずっと&lt;a href=&quot;https://nodered.org/&quot; target=&quot;_blank&quot;&gt;Node-RED&lt;/a&gt;のサンプルを見ながら各ノードの使い方を確認しています。&lt;a href=&quot;/2021/09/node-red-start.html&quot; target=&quot;_blank&quot;&gt;頭出しの記事はこちら&lt;/a&gt;をご確認ください。今回はBatchノードの第一回目です。&lt;/p&gt;&lt;div&gt;確認するサンプルは、「&lt;b&gt;読み込み &amp;gt; サンプル &amp;gt; flows &amp;gt; node-red &amp;gt; sequence &amp;gt; batch &amp;gt; 01 - Number based group mode&lt;/b&gt;」です。サンプルを見る限りBatchノードを利用すると指定した条件ごとにメッセージをグループ化できるようです。「グループ化」って言葉だけを見ても何をするのか想像がつきませんが、「メッセージにpartsプロパティを付加する」のがより詳細な挙動の説明になると理解しました。複数のメッセージをまとめるのはJoinノードが実施しますが、そのJoinノードが動くために、複数のメッセージに同じpartsプロパティを付与するのがBatchノードの役割です。&lt;/div&gt;&lt;div&gt;&lt;h2&gt;バラバラのメッセージを指定した数ずつまとめる&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;最初に確認するのは1段目です。ざっくりとした流れは以下のとおりです。&lt;/div&gt;&lt;div&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Functionノードがバラバラのメッセージを送信する&lt;/li&gt;&lt;li&gt;Batchノードが指定した数ごとにグループ化（partsプロパティに自動生成した値を設定）する&lt;/li&gt;&lt;li&gt;Joinノードが同じpartsプロパティの値ごとに1つのメッセージにまとめる&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgarCz0uVfXDrykQV1PSTiAFZDk3QjGpDbpfYZc3N2l2CoNX_9nY0KBGhk-DDU3zyzgVbmhScR1dFwMMzm6rIeKjp2ejSmsQdfsR5GioOKCe-k0Eb3HJz5DX3JjyoV5rNz0dBpVfirSTXlCuUPl6ymTB96ZSzSOPwH7MOxjZJXEvis_geB40ieQtopE/s1612/Node-RED338.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;632&quot; data-original-width=&quot;1612&quot; height=&quot;250&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgarCz0uVfXDrykQV1PSTiAFZDk3QjGpDbpfYZc3N2l2CoNX_9nY0KBGhk-DDU3zyzgVbmhScR1dFwMMzm6rIeKjp2ejSmsQdfsR5GioOKCe-k0Eb3HJz5DX3JjyoV5rNz0dBpVfirSTXlCuUPl6ymTB96ZSzSOPwH7MOxjZJXEvis_geB40ieQtopE/w640-h250/Node-RED338.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;上流から順にノードの設定を見ていきます。入力データを生成するFunctionノードでは、0〜29の値をPayloadに持つメッセージを送信しています。&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpzQEdn8Y_qP1t-Pl1aK2BkU5gGW5wTZCX0iRGPlAuYavY2G7veAr-f0R77uaogLFGlV4XPJhXnYaOORwcTLk7zP9SxU049emtJ6AOQauEU_Jld6bPa45jETEk32UEphUVG-hYGHEi2zrZSr-aiA60qJdWuQ_zHX_OOvmNYCJqGFSZwgZ2hHarTFxs/s1280/Node-RED3389.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;562&quot; data-original-width=&quot;1280&quot; height=&quot;282&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpzQEdn8Y_qP1t-Pl1aK2BkU5gGW5wTZCX0iRGPlAuYavY2G7veAr-f0R77uaogLFGlV4XPJhXnYaOORwcTLk7zP9SxU049emtJ6AOQauEU_Jld6bPa45jETEk32UEphUVG-hYGHEi2zrZSr-aiA60qJdWuQ_zHX_OOvmNYCJqGFSZwgZ2hHarTFxs/w640-h282/Node-RED3389.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;続いて、Batchノードで指定したメッセージ数ごとにグループ化します。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5FapUtG1PZMcbMAbeaERt-1jnJpInHaLI3_muw1qLFfSYAyH9TxpMctolx01r5MUJOE5b_0j7jzqGM9QtswVjmViuyfo3oMVKnRjtBAlEu-MjiNHLf43iTYaX1pC8dgXBa4QbR0LUBapGB8iWSTPZ_mLVY-UeSEsbIA48ZcSUa4EDqnftWjtTSOar/s1004/Node-RED339.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;634&quot; data-original-width=&quot;1004&quot; height=&quot;404&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5FapUtG1PZMcbMAbeaERt-1jnJpInHaLI3_muw1qLFfSYAyH9TxpMctolx01r5MUJOE5b_0j7jzqGM9QtswVjmViuyfo3oMVKnRjtBAlEu-MjiNHLf43iTYaX1pC8dgXBa4QbR0LUBapGB8iWSTPZ_mLVY-UeSEsbIA48ZcSUa4EDqnftWjtTSOar/w640-h404/Node-RED339.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;続いて、Joinノードで複数メッセージをまとめます。動作が自動なので、partsプロパティの値ごとにまとめます。&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzWWmIfjDieDZXruum0h0GmesDRmdQQeMEYFnIMaM49EItzF9Y4Wh_eBtRdlRQTgPkmveaTf7o-lE57JbfShv4D1l6MIVhfQRp4oOZ5NpLUyK3ELnj9HIHwHZB72w0jNjDAKEHIo-hZZZwF3VEam5iRDADpFMAuD2ZbSLElW4585Bl37Gw3w8V8h8w/s1016/Node-RED340.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;572&quot; data-original-width=&quot;1016&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzWWmIfjDieDZXruum0h0GmesDRmdQQeMEYFnIMaM49EItzF9Y4Wh_eBtRdlRQTgPkmveaTf7o-lE57JbfShv4D1l6MIVhfQRp4oOZ5NpLUyK3ELnj9HIHwHZB72w0jNjDAKEHIo-hZZZwF3VEam5iRDADpFMAuD2ZbSLElW4585Bl37Gw3w8V8h8w/w640-h360/Node-RED340.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;実行すると、以下のログが出力されます。5ずつまとめられていますね。なお、Batchノードの出力にDebugノードをつなげて出力メッセージ全体を確認するとpartsプロパティに自動生成した値が設定されているのが確認できるはずです。&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjm3IGt6VZw1ijcv21eloy_zR1lWvufMGLhjaa24FOATG1ml7VceCY6Aa6dIZADnbUHMtL7O0yOFejRrrtjc-f3x8vXXW4oLbsJDO0pixnAZcBVFb7xVC-74bADXW4UkXertq4xZ7jrykRZPXO8-5mexGN98gdCvmoF-OkQIWBv3eh3WEoDZUNehuuJ/s1028/Node-RED341.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1028&quot; data-original-width=&quot;612&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjm3IGt6VZw1ijcv21eloy_zR1lWvufMGLhjaa24FOATG1ml7VceCY6Aa6dIZADnbUHMtL7O0yOFejRrrtjc-f3x8vXXW4oLbsJDO0pixnAZcBVFb7xVC-74bADXW4UkXertq4xZ7jrykRZPXO8-5mexGN98gdCvmoF-OkQIWBv3eh3WEoDZUNehuuJ/w239-h400/Node-RED341.png&quot; width=&quot;239&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;要素をオーバーラップする&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;Batchノードでは、グループ化する要素を一部オーバーラップさせることができます。この説明だけで伝わると思えないので詳しく説明します。確認するサンプルは2段目です。基本的な流れは一つ前のサンプルと同じで、違うのはBatchノードのオーバーラップ設定のみです。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgA78cwNyxsKfx87LEVAcV3PCT1VmoHLbxovHogHfWnCxcfnOwsH_GUIqXdYyqNYI07vkZuTdJhf_dFEqkYGfO5Hk8t3wpVrK_RsYT665YaCfX2faHeuutbZ0aYUSBljgIZ4fv2zstGOwWDAICSBfqI55yO6wu2dFv2Y0ekRqok85SDcEVu1qV8q_lF/s998/Node-RED342.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;622&quot; data-original-width=&quot;998&quot; height=&quot;398&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgA78cwNyxsKfx87LEVAcV3PCT1VmoHLbxovHogHfWnCxcfnOwsH_GUIqXdYyqNYI07vkZuTdJhf_dFEqkYGfO5Hk8t3wpVrK_RsYT665YaCfX2faHeuutbZ0aYUSBljgIZ4fv2zstGOwWDAICSBfqI55yO6wu2dFv2Y0ekRqok85SDcEVu1qV8q_lF/w640-h398/Node-RED342.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;これを実行すると以下の出力になります。最初と最後の要素がオーバーラップしていますね。何に使うかはわかりませんが、こういうこともできると覚えておきます。&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQdbEpRTkt5SP9iLsJswexLBKlfFEdurz381XKw_9--o7QA-L3fS4pp4f8FPCRAosfwEHWLtF90Wl-_Hi5JP2XeQ5xDWl2TcK-32FLgBtFrpNvHY3fMtg2LCKIMGFViGX6xdafS_MVgTxc-e9XdggqEk0RVArIC0KIiTxVVwWBDSmrBasgIgLpVGrw/s1256/Node-RED343.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1256&quot; data-original-width=&quot;618&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQdbEpRTkt5SP9iLsJswexLBKlfFEdurz381XKw_9--o7QA-L3fS4pp4f8FPCRAosfwEHWLtF90Wl-_Hi5JP2XeQ5xDWl2TcK-32FLgBtFrpNvHY3fMtg2LCKIMGFViGX6xdafS_MVgTxc-e9XdggqEk0RVArIC0KIiTxVVwWBDSmrBasgIgLpVGrw/w314-h640/Node-RED343.png&quot; width=&quot;314&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;まとめ&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;まとめます。&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Batchノードを利用することでメッセージをグループ化できます&lt;/li&gt;&lt;li&gt;Batchノードは単にmsg.partsプロパティに値を付与するだけです&lt;/li&gt;&lt;ul&gt;&lt;li&gt;メッセージをまとめるのはJoinノードがやります&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;要素をオーバーラップさせることができます&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;Batchノードシリーズはもう少し続きます。&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://awwa500.blogspot.com/feeds/8123075570074323165/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://awwa500.blogspot.com/2022/05/node-red-batch1.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/8123075570074323165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/8123075570074323165'/><link rel='alternate' type='text/html' href='http://awwa500.blogspot.com/2022/05/node-red-batch1.html' title='Batchノードを使う（その1）'/><author><name>あわ</name><uri>http://www.blogger.com/profile/08571636318581967838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgarCz0uVfXDrykQV1PSTiAFZDk3QjGpDbpfYZc3N2l2CoNX_9nY0KBGhk-DDU3zyzgVbmhScR1dFwMMzm6rIeKjp2ejSmsQdfsR5GioOKCe-k0Eb3HJz5DX3JjyoV5rNz0dBpVfirSTXlCuUPl6ymTB96ZSzSOPwH7MOxjZJXEvis_geB40ieQtopE/s72-w640-h250-c/Node-RED338.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5587841204043490178.post-887824236173697357</id><published>2022-05-09T12:51:00.001+09:00</published><updated>2022-05-09T12:51:32.063+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="node-red"/><title type='text'>Sortノードを使う（その3）</title><content type='html'>&lt;p&gt;ここのところずっと&lt;a href=&quot;https://nodered.org/&quot; target=&quot;_blank&quot;&gt;Node-RED&lt;/a&gt;のサンプルを見ながら各ノードの使い方を確認しています。&lt;a href=&quot;/2021/09/node-red-start.html&quot; target=&quot;_blank&quot;&gt;頭出しの記事はこちら&lt;/a&gt;をご確認ください。今回はSortノードシリーズの3回目です。&lt;/p&gt;&lt;div&gt;確認するサンプルは、前回に引き続き「&lt;b&gt;読み込み &amp;gt; サンプル &amp;gt; flows &amp;gt; node-red &amp;gt; sequence &amp;gt; sort &amp;gt; 02 - Sort message sequence&lt;/b&gt;」です。前回紹介したサンプルとの違いは、Payloadを直接ソートするのではなく、複数メッセージをソート対象にしている点です。ソート対象の入力メッセージとソート後の出力ともに複数のメッセージのまま取り扱っているのがポイントです（前回紹介したサンプルは単一のメッセージ内でのソートでした）。それを再現するため、Sortノードの前にSplitノードを経由してメッセージをバラバラにしています。実運用ではわざわざSplitノードを利用することはなく、元々独立したメッセージをソートできることを示したいのだと思います。たぶん。&lt;/div&gt;&lt;div&gt;&lt;h2&gt;バラバラのメッセージをソートする&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;確認するのは1段目です。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXrihGlKoRkfEnBi0SaL1eynKkqiGuB8OGkZz7dlVgk-AL7TiuIOncrtbrDrqC2MiTkU1HzuvyjzuU45AbQwPoO6C4RONtXtMGAPyxYt5KIObA-KLvzkn71g1xwArt03ETTWPol6HAQSkVb8IMj375c892EUBQGRtYNqe_JPte6BL26yaTSR8M9pMs/s1576/Node-RED329.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;304&quot; data-original-width=&quot;1576&quot; height=&quot;124&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXrihGlKoRkfEnBi0SaL1eynKkqiGuB8OGkZz7dlVgk-AL7TiuIOncrtbrDrqC2MiTkU1HzuvyjzuU45AbQwPoO6C4RONtXtMGAPyxYt5KIObA-KLvzkn71g1xwArt03ETTWPol6HAQSkVb8IMj375c892EUBQGRtYNqe_JPte6BL26yaTSR8M9pMs/w640-h124/Node-RED329.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;入力データを生成するTemplateノードでは、単純な文字列配列を指定しています。&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNBYaXUWsPZmADmLtvrFCpB1lXcfSiJ0UJX2B_08NqZdJgyKsZCaSFK0GlQJ3Xi1q4dDmFZWXzeEhj0Laax68XkiagwwDYQQLhxcNMjQQX3xB6_PCh-c-1Tc1f-5ZoE8YSwB8_Ns_ANNBsMSJYeznLj4iC6TAB2_h9Xgq70hboTI_UZLJcOYSz0p9B/s990/Node-RED330.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;746&quot; data-original-width=&quot;990&quot; height=&quot;482&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNBYaXUWsPZmADmLtvrFCpB1lXcfSiJ0UJX2B_08NqZdJgyKsZCaSFK0GlQJ3Xi1q4dDmFZWXzeEhj0Laax68XkiagwwDYQQLhxcNMjQQX3xB6_PCh-c-1Tc1f-5ZoE8YSwB8_Ns_ANNBsMSJYeznLj4iC6TAB2_h9Xgq70hboTI_UZLJcOYSz0p9B/w640-h482/Node-RED330.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;こいつをSplitノードでバラバラにしています。入力が配列なので固定長1でバラしてます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVVGskTCSrmYsBLbG0YQ0XEYzTwIDOaOtlv3sbIjxPAxXB71Pt1XfoPnQNrPuUrXRp8FHpDKphfRgoB9Ieu_LW6K00xMClO_G_PXxnLvHpdtpBD-vbkGQFsNOl7Js1Y5a_VA0Ohi_tWU9YB_bdBaHszVdN1gNkJGwVSQZ8llrFVAXvuXj9JoCA0CUo/s1002/Node-RED331.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;912&quot; data-original-width=&quot;1002&quot; height=&quot;582&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVVGskTCSrmYsBLbG0YQ0XEYzTwIDOaOtlv3sbIjxPAxXB71Pt1XfoPnQNrPuUrXRp8FHpDKphfRgoB9Ieu_LW6K00xMClO_G_PXxnLvHpdtpBD-vbkGQFsNOl7Js1Y5a_VA0Ohi_tWU9YB_bdBaHszVdN1gNkJGwVSQZ8llrFVAXvuXj9JoCA0CUo/w640-h582/Node-RED331.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Sortノードはmsg.payloadで昇順ソートするよう指定してあります。いたってシンプル。&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0MpwM3cjNnn85fKt11xTTrgl6xSXxlY-vQpG6zhdbJ-OgPvRYIMbqX6g1s68ssoimppy6OMBRXEoMxqEZZiJNPXjbRJvJ8yTQOjkvo-40SvNw2n2qaysStBo-hsNR0Ugnd1_nfxHmYks-ILMhpDELi79-fAMKMd0Ti6siOZ70wNAPpDwa_z65hISj/s1000/Node-RED332.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;690&quot; data-original-width=&quot;1000&quot; height=&quot;442&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0MpwM3cjNnn85fKt11xTTrgl6xSXxlY-vQpG6zhdbJ-OgPvRYIMbqX6g1s68ssoimppy6OMBRXEoMxqEZZiJNPXjbRJvJ8yTQOjkvo-40SvNw2n2qaysStBo-hsNR0Ugnd1_nfxHmYks-ILMhpDELi79-fAMKMd0Ti6siOZ70wNAPpDwa_z65hISj/w640-h442/Node-RED332.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;実行すると、以下のログが出力されます。一度バラされた複数メッセージのmsg.payloadの値で昇順ソートされています。&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_ISGpc5jdlYHsgOCXsJzBrb4Nj-pr4I4ouBAgGodwOw8kDSrCGEJb1qOaiysNhpCCB5R_01w2HDf6TtFbY_DcocWcSQIxGdyuYIRN9n276kLsunLPMRmQz2u_M8Gz7yKlN8D2NcysHhHB88gjnhjcepdMLYHXzfzukrykkwyj6W7D0Q52R3uNDzj7/s894/Node-RED333.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;894&quot; data-original-width=&quot;588&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_ISGpc5jdlYHsgOCXsJzBrb4Nj-pr4I4ouBAgGodwOw8kDSrCGEJb1qOaiysNhpCCB5R_01w2HDf6TtFbY_DcocWcSQIxGdyuYIRN9n276kLsunLPMRmQz2u_M8Gz7yKlN8D2NcysHhHB88gjnhjcepdMLYHXzfzukrykkwyj6W7D0Q52R3uNDzj7/w421-h640/Node-RED333.png&quot; width=&quot;421&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;ちなみに、2段目のサンプルは降順ソートです。3段目、4段目も文字列ソートに関するものです。これらは説明不要だと思うのでスキップします。&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br style=&quot;text-align: left;&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;バラバラのメッセージに指定されたJSONオブジェクトのプロパティ値でソートする&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;続いて確認するサンプルは5段目です。フローの見た目は最初に確認したものと同じに見えますが、バラバラに飛んでくるJSONオブジェクトのプロパティ値でソートします。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWMaggwZ-uTVqd8m5FOAfYfl2sldh3Ped5fxULDUjpwpVbsxm1dhAPf6B81ydAK-InL2LsPtO5o8PSjRd2SYAJhUlUVEPeIHw-DAYUc5xhMALDLj60AGpNl92v10-59VFDLt7devzCBZ82XeO1HHaJ8E6RDPABuveiYDbXvPJcz9Ban9I71LMlJ1xX/s1522/Node-RED334.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;318&quot; data-original-width=&quot;1522&quot; height=&quot;134&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWMaggwZ-uTVqd8m5FOAfYfl2sldh3Ped5fxULDUjpwpVbsxm1dhAPf6B81ydAK-InL2LsPtO5o8PSjRd2SYAJhUlUVEPeIHw-DAYUc5xhMALDLj60AGpNl92v10-59VFDLt7devzCBZ82XeO1HHaJ8E6RDPABuveiYDbXvPJcz9Ban9I71LMlJ1xX/w640-h134/Node-RED334.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;入力データを生成しているTemplateノードでは、JSONオブジェクト配列を生成しています。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggKCpOUsdoEK-UJZ7aq9eRNfCFq9BMkKH_rYHz3uIIW2euFeKDRenuJISlkWPU7mdqp0xV1oAhHxiFi-pLajcFkXWlB_FUd-G0vow0qd3YhGyVWtpMVY0gLc3L8b4rc1NwMZzilCRU3TlZZqEEbKNRApPrBi32nsEnh-Ot4wcjhyrUIk1lVUysmmBP/s992/Node-RED335.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;966&quot; data-original-width=&quot;992&quot; height=&quot;624&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggKCpOUsdoEK-UJZ7aq9eRNfCFq9BMkKH_rYHz3uIIW2euFeKDRenuJISlkWPU7mdqp0xV1oAhHxiFi-pLajcFkXWlB_FUd-G0vow0qd3YhGyVWtpMVY0gLc3L8b4rc1NwMZzilCRU3TlZZqEEbKNRApPrBi32nsEnh-Ot4wcjhyrUIk1lVUysmmBP/w640-h624/Node-RED335.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;これをSplitノードで配列要素ごとにPayloadを分割します。Splitノードの内容は一つ前のサンプルと同じなので省略します。さらにSortノードではキー「&lt;b&gt;payload.price&lt;/b&gt;」でソートしています。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiALpb-CHoP99KF1asOzVyfP4wNQg4gcfvrP3SN08EfBNiWxgB-_VeEODvev6LmIWs8BpLnPeeoXY8qb5aF9TPZxmtlXdFWS_88Ul6ZOeSFW9pFprJROWvGH7QfJGHjBdAh3kLWvkwuXh6gU1aqQlysHX-w1vZsR6li3A7AfF4C4PYtCiLD13ZGOd1X/s1008/Node-RED336.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;684&quot; data-original-width=&quot;1008&quot; height=&quot;434&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiALpb-CHoP99KF1asOzVyfP4wNQg4gcfvrP3SN08EfBNiWxgB-_VeEODvev6LmIWs8BpLnPeeoXY8qb5aF9TPZxmtlXdFWS_88Ul6ZOeSFW9pFprJROWvGH7QfJGHjBdAh3kLWvkwuXh6gU1aqQlysHX-w1vZsR6li3A7AfF4C4PYtCiLD13ZGOd1X/w640-h434/Node-RED336.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;結果は以下の通り、priceの値でソートされました。出力もバラバラのメッセージです。&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyxin_8nUczGuC0DMmt5C-biVHAwO2l4UHPzg4SZZzMxBccnJ6MEmWtIjBA3RB8cGuLahqxM43Cqnikv_3Dc3WTrh2p-fdss8oB7vSES_G1AxBB1WFU8MHcb4AqBnwUQjyyZMRm-NaAuFxtDTE_NV4TzI7JSzkjvDSQjA93rj7v-GJGDKYCNmwYn6a/s886/Node-RED337.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;886&quot; data-original-width=&quot;610&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyxin_8nUczGuC0DMmt5C-biVHAwO2l4UHPzg4SZZzMxBccnJ6MEmWtIjBA3RB8cGuLahqxM43Cqnikv_3Dc3WTrh2p-fdss8oB7vSES_G1AxBB1WFU8MHcb4AqBnwUQjyyZMRm-NaAuFxtDTE_NV4TzI7JSzkjvDSQjA93rj7v-GJGDKYCNmwYn6a/w440-h640/Node-RED337.png&quot; width=&quot;440&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;複数のプロパティを条件に組み込んでバラバラのメッセージに指定されたJSONオブジェクトのプロパティ値でソートする&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;最後に確認するサンプルは6段目です。基本的に&lt;a href=&quot;/2022/03/node-red-sort2.html&quot; target=&quot;_blank&quot;&gt;前回の記事&lt;/a&gt;の「&lt;b&gt;複数のプロパティを条件に組み込んでソートする&lt;/b&gt;」と同じですが、入出力ともにバラバラのメッセージを対象にしているのがポイントです。ってことで、細かいことは全部省略します。&lt;/div&gt;&lt;h2&gt;まとめ&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;まとめます。&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;バラバラのメッセージを対象にしてソートできる&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;以上、Sortノードシリーズ完了です。&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://awwa500.blogspot.com/feeds/887824236173697357/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://awwa500.blogspot.com/2022/05/node-red-sort3.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/887824236173697357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/887824236173697357'/><link rel='alternate' type='text/html' href='http://awwa500.blogspot.com/2022/05/node-red-sort3.html' title='Sortノードを使う（その3）'/><author><name>あわ</name><uri>http://www.blogger.com/profile/08571636318581967838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXrihGlKoRkfEnBi0SaL1eynKkqiGuB8OGkZz7dlVgk-AL7TiuIOncrtbrDrqC2MiTkU1HzuvyjzuU45AbQwPoO6C4RONtXtMGAPyxYt5KIObA-KLvzkn71g1xwArt03ETTWPol6HAQSkVb8IMj375c892EUBQGRtYNqe_JPte6BL26yaTSR8M9pMs/s72-w640-h124-c/Node-RED329.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5587841204043490178.post-7486549682273825223</id><published>2022-03-22T22:47:00.004+09:00</published><updated>2022-03-22T22:47:54.221+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="node-red"/><title type='text'>Sortノードを使う（その2）</title><content type='html'>&lt;p&gt;ここのところずっと&lt;a href=&quot;https://nodered.org/&quot; target=&quot;_blank&quot;&gt;Node-RED&lt;/a&gt;のサンプルを見ながら各ノードの使い方を確認しています。&lt;a href=&quot;/2021/09/node-red-start.html&quot; target=&quot;_blank&quot;&gt;頭出しの記事はこちら&lt;/a&gt;をご確認ください。今回はSortノードシリーズの2回目です。&lt;/p&gt;&lt;div&gt;確認するサンプルは、前回に引き続き「&lt;b&gt;読み込み &amp;gt; サンプル &amp;gt; flows &amp;gt; node-red &amp;gt; sequence &amp;gt; sort &amp;gt; 01 - Sort array payload&lt;/b&gt;」です。&lt;/div&gt;&lt;div&gt;&lt;h2&gt;シンプルなJSONata式でJSON配列をソートする&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;確認するのは5段目です。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4lj2xLLlt8Ez8MEm9tZP7y8UlLKkthjB0_ABYOcPTqtQS6yPJHiTpMKGQ-2K6Tzv8XzG9xVYRGiQFN8099RgEhKKNIebRb8U8OM_LlsOLPqhGn17oo_MfpqXx88d5yYcHS0YH5OWJjB8cWYThy5D6E6v6ttUHaIlJWCSX8xM5CUM6zQ3Xfc43QoDr/s1446/Node-RED320.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;332&quot; data-original-width=&quot;1446&quot; height=&quot;146&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4lj2xLLlt8Ez8MEm9tZP7y8UlLKkthjB0_ABYOcPTqtQS6yPJHiTpMKGQ-2K6Tzv8XzG9xVYRGiQFN8099RgEhKKNIebRb8U8OM_LlsOLPqhGn17oo_MfpqXx88d5yYcHS0YH5OWJjB8cWYThy5D6E6v6ttUHaIlJWCSX8xM5CUM6zQ3Xfc43QoDr/w640-h146/Node-RED320.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;　入力データを生成するTemplateノードでは、name（文字列）とprice（数値）をプロパティに持つJSON配列を指定しています。&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkV97wFTJGTfw6JDu6fL0HIn2f-WLWtHFOUn-RfWHwSmFNlU5I74_OIZE7kEY4R-BD_AepMO1FfiNv7rYFEQDwEk9-GGUPeg78KU2D-81o1ql7WLzrczbc4XptF6DeO017F5hysHqO1doOIc0TMpzpKksg1J6G3qmNYg-ivR4F-W2cNeOyRunb2M9r/s1338/Node-RED321.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1338&quot; data-original-width=&quot;1002&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkV97wFTJGTfw6JDu6fL0HIn2f-WLWtHFOUn-RfWHwSmFNlU5I74_OIZE7kEY4R-BD_AepMO1FfiNv7rYFEQDwEk9-GGUPeg78KU2D-81o1ql7WLzrczbc4XptF6DeO017F5hysHqO1doOIc0TMpzpKksg1J6G3qmNYg-ivR4F-W2cNeOyRunb2M9r/w480-h640/Node-RED321.png&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;SortノードではJSONata式でキー「price」で昇順ソートするよう指定してあります。&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-jdK1IF09ftdFyEWxEud9ypDD11eG30ds0M2A25baz8FVRsZQpuxpgoP30tVr84_KSQjyVfRzxCxm6bfyG-wK88yU1SkSbTiMKA8MJc9ayni41mEgA1F4bYvWvjyFevcJMbwoKpG4iCKhz159wxKrbDvRE_XIp8p3YFnsGSf-v0omayHkYYfo9fm7/s1010/Node-RED322.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;688&quot; data-original-width=&quot;1010&quot; height=&quot;436&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-jdK1IF09ftdFyEWxEud9ypDD11eG30ds0M2A25baz8FVRsZQpuxpgoP30tVr84_KSQjyVfRzxCxm6bfyG-wK88yU1SkSbTiMKA8MJc9ayni41mEgA1F4bYvWvjyFevcJMbwoKpG4iCKhz159wxKrbDvRE_XIp8p3YFnsGSf-v0omayHkYYfo9fm7/w640-h436/Node-RED322.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;実行すると、以下のログが出力されます。msg.payload.priceの値で昇順ソートされていますね。特に説明の必要はないと思います。&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgUD2ZsCrDWiUmmmpoLtpHZDWtRiNjQsilUq0yBkQKlgAKH5aMDSmiGkcQrQg1J7Q_0abDJF45HiBCuqxuJu5kVG-Od5Dk7h9HHyffobBSMXqJUzKAaWWboufvLNsA9vCjwToPfCJIhXwTspGYuaBKCqb1KyIGirxIUcWu87kfH2X5CBj7HQieY1ob/s994/Node-RED323.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;994&quot; data-original-width=&quot;624&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgUD2ZsCrDWiUmmmpoLtpHZDWtRiNjQsilUq0yBkQKlgAKH5aMDSmiGkcQrQg1J7Q_0abDJF45HiBCuqxuJu5kVG-Od5Dk7h9HHyffobBSMXqJUzKAaWWboufvLNsA9vCjwToPfCJIhXwTspGYuaBKCqb1KyIGirxIUcWu87kfH2X5CBj7HQieY1ob/w402-h640/Node-RED323.png&quot; width=&quot;402&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;複数のプロパティを条件に組み込んでソートする&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;最後は6段目です。先ほどより少し複雑なJSONata式を利用して複数プロパティの値を条件に組み込んでソートします。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEii-3imdbSgTRwcqhPIsD8WJGy4vx_NKx6ascCm1l5-r3QlHYwSex1KU40EhI-Kkqc4QzL6LImbGdpFjt4AjBEDDrT1ldjIynrt_vCDX0wPYEkAisqqCcIL3sSv6jthBiCIAiNz_jqHzJ-q_cs6XRqXgWQXCTd2k_SXTjBsJZvXKwvdrM7CGT3uu1YI/s1704/Node-RED324.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;316&quot; data-original-width=&quot;1704&quot; height=&quot;118&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEii-3imdbSgTRwcqhPIsD8WJGy4vx_NKx6ascCm1l5-r3QlHYwSex1KU40EhI-Kkqc4QzL6LImbGdpFjt4AjBEDDrT1ldjIynrt_vCDX0wPYEkAisqqCcIL3sSv6jthBiCIAiNz_jqHzJ-q_cs6XRqXgWQXCTd2k_SXTjBsJZvXKwvdrM7CGT3uu1YI/w640-h118/Node-RED324.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;入力データを生成しているTemplateノードでは、先程と同様JSON配列を指定していますが、今度は複数の要素で同じ値のpriceを持っています。このサンプルではnameの値も考慮に入れてソートを行っています。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirtPE6xeXLbOQjEYOhBaNxDur7Fxsqpj5QTwZfMidVXqI5kQ5R8jkCGQotXg9ymtym1XrSk3UHnom3eWN3xT8icTMJzgVQJ2silKrY4pm0xCFwj4af9F0dqgq56aL69NvABdwOE_2ETmxRB42PzBEK1HgkVFrSdxcbP8OsL0R0vBEdjcVNpI8tIV28/s1340/Node-RED325.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1340&quot; data-original-width=&quot;1004&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirtPE6xeXLbOQjEYOhBaNxDur7Fxsqpj5QTwZfMidVXqI5kQ5R8jkCGQotXg9ymtym1XrSk3UHnom3eWN3xT8icTMJzgVQJ2silKrY4pm0xCFwj4af9F0dqgq56aL69NvABdwOE_2ETmxRB42PzBEK1HgkVFrSdxcbP8OsL0R0vBEdjcVNpI8tIV28/w480-h640/Node-RED325.png&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Sortノードを開くと、キーに何やら長ったらしいJSONata式が設定されています。このままだと見づらいので、右側の「...」ボタンを選択します。&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipmrXDQr3UY70U9sDirZvVHD2-mqcywbzbK9cVt7m2FDToVtO0QE0Hct1J4H2LC0VQgtWq283JimKJVMsNvNjcfWjn8dx8axiea9mJjhBB7SKm8DJkUf0vqu6nx3TKIj-r3h8mAz1GkJGjNdLinulRg9rOFiTzY3bLlqPp9arIuerhDJdzGXP7SI_X/s1004/Node-RED326.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;694&quot; data-original-width=&quot;1004&quot; height=&quot;442&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipmrXDQr3UY70U9sDirZvVHD2-mqcywbzbK9cVt7m2FDToVtO0QE0Hct1J4H2LC0VQgtWq283JimKJVMsNvNjcfWjn8dx8axiea9mJjhBB7SKm8DJkUf0vqu6nx3TKIj-r3h8mAz1GkJGjNdLinulRg9rOFiTzY3bLlqPp9arIuerhDJdzGXP7SI_X/w640-h442/Node-RED326.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;SONata式の全体像が確認できます。この内容を言葉で表現すると以下のようになります。&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;priceの値を4桁のゼロ埋めした文字列を生成して、nameの値と文字列結合する&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;「&lt;b&gt;テスト&lt;/b&gt;」タブを選択して、「&lt;b&gt;メッセージ例&lt;/b&gt;」に&lt;b&gt;name&lt;/b&gt;と&lt;b&gt;price&lt;/b&gt;プロパティを持つJSONオブジェクトを指定すると、「&lt;b&gt;結果&lt;/b&gt;」欄でこの式の動作を確認できます。この文字列でソートを実行します。&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKtov8oKSnA-AJAVZMNo7OY-sDj3V7js3d99_X8YhjazCVyWCiwJi56i7zLB4RTgayvsOtxCSrAlJ6WU2gJCiTD87AU0A-eMBPBGMjgvdLySVN_fcxLDtkIrUqztQWnJeQ7yfKTogv7k-xJZOgj12beHFIiot4c4Shah1V5cFtvsHNE8aK9A6j9OGo/s1194/Node-RED327.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1194&quot; data-original-width=&quot;1008&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKtov8oKSnA-AJAVZMNo7OY-sDj3V7js3d99_X8YhjazCVyWCiwJi56i7zLB4RTgayvsOtxCSrAlJ6WU2gJCiTD87AU0A-eMBPBGMjgvdLySVN_fcxLDtkIrUqztQWnJeQ7yfKTogv7k-xJZOgj12beHFIiot4c4Shah1V5cFtvsHNE8aK9A6j9OGo/w540-h640/Node-RED327.png&quot; width=&quot;540&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;結果は以下の通り、priceの値が同じ場合、nameの値でソートされました。&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDphvn6E2DpGwQ_d8zynYc3fkdKWdxICVo9UBTJH6TbD4NpG6YH9yQWRib71PYLK0eqIeArWjlrUC8NhsV307QNVxTn2-grRIovNvhUevh1xV29N8LkyCj2fE_F_874Jf2KTey9eqHMowFCLlf74cSAHnYW57-y5gkquqHyxNE0dBPiKVS0ozYX28B/s992/Node-RED328.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;992&quot; data-original-width=&quot;618&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDphvn6E2DpGwQ_d8zynYc3fkdKWdxICVo9UBTJH6TbD4NpG6YH9yQWRib71PYLK0eqIeArWjlrUC8NhsV307QNVxTn2-grRIovNvhUevh1xV29N8LkyCj2fE_F_874Jf2KTey9eqHMowFCLlf74cSAHnYW57-y5gkquqHyxNE0dBPiKVS0ozYX28B/w398-h640/Node-RED328.png&quot; width=&quot;398&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;まとめ&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;まとめます。&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;ソート条件にJSONata式を利用すると複雑な動作を実現できる&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;Sortノードシリーズはまだまだ続きます。&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://awwa500.blogspot.com/feeds/7486549682273825223/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://awwa500.blogspot.com/2022/03/node-red-sort2.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/7486549682273825223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/7486549682273825223'/><link rel='alternate' type='text/html' href='http://awwa500.blogspot.com/2022/03/node-red-sort2.html' title='Sortノードを使う（その2）'/><author><name>あわ</name><uri>http://www.blogger.com/profile/08571636318581967838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4lj2xLLlt8Ez8MEm9tZP7y8UlLKkthjB0_ABYOcPTqtQS6yPJHiTpMKGQ-2K6Tzv8XzG9xVYRGiQFN8099RgEhKKNIebRb8U8OM_LlsOLPqhGn17oo_MfpqXx88d5yYcHS0YH5OWJjB8cWYThy5D6E6v6ttUHaIlJWCSX8xM5CUM6zQ3Xfc43QoDr/s72-w640-h146-c/Node-RED320.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5587841204043490178.post-7615501605939462598</id><published>2022-03-14T22:13:00.003+09:00</published><updated>2022-03-14T22:13:30.388+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="node-red"/><title type='text'>Sortノードを使う（その1）</title><content type='html'>&lt;p&gt;ここのところずっと&lt;a href=&quot;https://nodered.org/&quot; target=&quot;_blank&quot;&gt;Node-RED&lt;/a&gt;のサンプルを見ながら各ノードの使い方を確認しています。&lt;a href=&quot;/2021/09/node-red-start.html&quot; target=&quot;_blank&quot;&gt;頭出しの記事はこちら&lt;/a&gt;をご確認ください。今回からSortノードを見ていきます。&lt;/p&gt;&lt;div&gt;確認するサンプルは、「&lt;b&gt;読み込み &amp;gt; サンプル &amp;gt; flows &amp;gt; node-red &amp;gt; sequence &amp;gt; sort &amp;gt; 01 - Sort array payload&lt;/b&gt;」です。配列をソートするってことですかね。内容はシンプルなのでサクサク見ていきます。&lt;/div&gt;&lt;div&gt;&lt;h2&gt;文字列配列を昇順にソートする&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;内容は見出しの通りです。&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi8Db2B8bBCGGeULWWbkkJbn9tnwoM9dyvk3ZEN0nuJpn__KHsVTM2ksv5feZHBxwiOACEsNwaWdi5-9RvYctGebE-jwCZ3ZdwttFWfLXDkt3zar3TvBkYhEJu3hhZ0MglFU4sxGhQ6wvXJZmaNGEcJVRh6DHkQrk5XP2lETyk45g73kOuTFfSw0xi-=s1546&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;316&quot; data-original-width=&quot;1546&quot; height=&quot;130&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi8Db2B8bBCGGeULWWbkkJbn9tnwoM9dyvk3ZEN0nuJpn__KHsVTM2ksv5feZHBxwiOACEsNwaWdi5-9RvYctGebE-jwCZ3ZdwttFWfLXDkt3zar3TvBkYhEJu3hhZ0MglFU4sxGhQ6wvXJZmaNGEcJVRh6DHkQrk5XP2lETyk45g73kOuTFfSw0xi-=w640-h130&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Templateノードでmsg.payloadに文字列配列を設定する&lt;/li&gt;&lt;li&gt;要素の値をキーにして昇順でソート&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiHGHzcmewQUS3woU1alO3oGYOBg_8Z89HKMG0nZoOzb0XK2Jswg9_eX07f7FC4H12OTNl3NjNYan-oy3_QjwnxaxsK0Vbc5prdK-mtuaVyfYho63jCSTrJbudui8GWA4zg3_Hrvdpkmg8iHFBdlL7pflaokAy_q2LvcPgX47v6eYgJAjABU8v-Kuis=s996&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;756&quot; data-original-width=&quot;996&quot; height=&quot;486&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiHGHzcmewQUS3woU1alO3oGYOBg_8Z89HKMG0nZoOzb0XK2Jswg9_eX07f7FC4H12OTNl3NjNYan-oy3_QjwnxaxsK0Vbc5prdK-mtuaVyfYho63jCSTrJbudui8GWA4zg3_Hrvdpkmg8iHFBdlL7pflaokAy_q2LvcPgX47v6eYgJAjABU8v-Kuis=w640-h486&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh4wnoCWMoPHoJmPdnWhN0GTveWEl3rQTgU1VIErDQoXI_Ql2Ut7wE27JgkeQYtcF8Fu2qLIfC_hgZJZWUzTB04ntMqPIKQNaJcDM4w-5gLGGf-DYnvGFnO-0IDm_QKuKbizE5meKt-tUa8NRufU-_BfTlW0pHbO0hy7oxz419R9zlc_z3DPjrZvqU6=s1006&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;684&quot; data-original-width=&quot;1006&quot; height=&quot;436&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh4wnoCWMoPHoJmPdnWhN0GTveWEl3rQTgU1VIErDQoXI_Ql2Ut7wE27JgkeQYtcF8Fu2qLIfC_hgZJZWUzTB04ntMqPIKQNaJcDM4w-5gLGGf-DYnvGFnO-0IDm_QKuKbizE5meKt-tUa8NRufU-_BfTlW0pHbO0hy7oxz419R9zlc_z3DPjrZvqU6=w640-h436&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;結果は以下の通り、文字列配列の要素が昇順でソートされました。予想通りかと思います。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhluM5J685enRC2K5HMlCL-RUEFd2I_0s7IHfUpzbDY4_OPJOSDKADaXjvoCP3mU44iF1_QTio4n_XjtuXzdcF-5OPJAK3IPw8G2O71t1CRh7LJLRPbZtuMcaNXGgp_kD4Vr_o24KYCjodtiJH7mhgi2ik3P4E1tvkJrXCsVwrKkWWp4snWHQ6hr1H2=s612&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;542&quot; data-original-width=&quot;612&quot; height=&quot;354&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhluM5J685enRC2K5HMlCL-RUEFd2I_0s7IHfUpzbDY4_OPJOSDKADaXjvoCP3mU44iF1_QTio4n_XjtuXzdcF-5OPJAK3IPw8G2O71t1CRh7LJLRPbZtuMcaNXGgp_kD4Vr_o24KYCjodtiJH7mhgi2ik3P4E1tvkJrXCsVwrKkWWp4snWHQ6hr1H2=w400-h354&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;文字列配列を降順にソートする&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;続いて2段目は降順ソートです。先ほどとの違いはSortノードの順序設定のみ。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiAaSxHZWkRpGT7e5Y1V-geitRj6ITqaHcVDmGJ0st7mChOuhmuQui6KwT0QAs9yHyuXrdhoE3176VSzz_-WxFNi9R1MyePBe6t-E26dVswPk-LFyGB1LjYcCtTOStwE1d51qOQMpYABL0VNtuH04rm_rEat0GS4Hv3cnEFdH0TmjPb9cWNCNK3F-Ku=s1008&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;682&quot; data-original-width=&quot;1008&quot; height=&quot;434&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiAaSxHZWkRpGT7e5Y1V-geitRj6ITqaHcVDmGJ0st7mChOuhmuQui6KwT0QAs9yHyuXrdhoE3176VSzz_-WxFNi9R1MyePBe6t-E26dVswPk-LFyGB1LjYcCtTOStwE1d51qOQMpYABL0VNtuH04rm_rEat0GS4Hv3cnEFdH0TmjPb9cWNCNK3F-Ku=w640-h434&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;結果は以下の通り、先ほどとは逆順になりました。&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEju8e3VBMdFMAzLqiojc-PKjrKgrv-x5CAEykK15_yrk65l3-vK4CtGD6vkwd3cBqN4gpQjSJluRzZhIsuzVhrVJGtQU5Es2fD3ktqJXrgcQNPKOep1k10LywnyIMnxt0zR1a4alW8dz-OycQ69ZxXgMjFH5LpVsaw_PppW46YHzGS2JkeazBTiCjiF=s614&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;538&quot; data-original-width=&quot;614&quot; height=&quot;350&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEju8e3VBMdFMAzLqiojc-PKjrKgrv-x5CAEykK15_yrk65l3-vK4CtGD6vkwd3cBqN4gpQjSJluRzZhIsuzVhrVJGtQU5Es2fD3ktqJXrgcQNPKOep1k10LywnyIMnxt0zR1a4alW8dz-OycQ69ZxXgMjFH5LpVsaw_PppW46YHzGS2JkeazBTiCjiF=w400-h350&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;文字列配列を昇順ソートする再び&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;続いて3段目は1段目と同じく昇順ソートのサンプルですが、入力するデータが数値っぽい文字列です。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjR_P7UR8XNqSzzw0RbelP0RhZR9Ng7PXZ9ofUtPsBJV4ZLqMrruNiDa1X5HnmXCzFV1wUThzFl2Ok9XRXTCF67Lljyd3wIQkoCcHAfhx9VfTKGf9ckkrNdhy4OmE7zCFa31hnVRzdGEQPA6pY9-aJ_2I_g7jxD6wpQ6XI6doPyqPUQP2CzciA9Y5Ql=s998&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;750&quot; data-original-width=&quot;998&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjR_P7UR8XNqSzzw0RbelP0RhZR9Ng7PXZ9ofUtPsBJV4ZLqMrruNiDa1X5HnmXCzFV1wUThzFl2Ok9XRXTCF67Lljyd3wIQkoCcHAfhx9VfTKGf9ckkrNdhy4OmE7zCFa31hnVRzdGEQPA6pY9-aJ_2I_g7jxD6wpQ6XI6doPyqPUQP2CzciA9Y5Ql=w640-h480&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;文字列として昇順ソートされましたね。特に説明は必要ないかと思います。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhP08wuDyyY_d_oOehyKP2mS5IP06ydWxGHc2YAvPNZeQipggGvSJES9y5-Y9yxP2wXsgulkigtJE0ly-ozN1DxawsMUEoPqJxisdvg4rkBPbESkHv5wo9vAozn29RcycC63JH8LNfAbC4jiMHs5tSdDwbpxVc4P62pJp_YUmVfl7EyYYGuW3LYzEfr=s612&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;536&quot; data-original-width=&quot;612&quot; height=&quot;350&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhP08wuDyyY_d_oOehyKP2mS5IP06ydWxGHc2YAvPNZeQipggGvSJES9y5-Y9yxP2wXsgulkigtJE0ly-ozN1DxawsMUEoPqJxisdvg4rkBPbESkHv5wo9vAozn29RcycC63JH8LNfAbC4jiMHs5tSdDwbpxVc4P62pJp_YUmVfl7EyYYGuW3LYzEfr=w400-h350&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;文字列配列を数値として昇順ソートする&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;4段目は3段目と入力データは同じですが、数値として昇順ソートします。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEj-gkznTT6l5bItTyGYnprFcstrlC5oSwg6eNhhe9wBlaXhLKn7h9eueU0gorF0qPqCfcWAAAW4Jd7XepUlbQUE5vlb98MEY0qMV-WO6eb3R1nYy_Eji14MfUuur9wI98iOkijrmAVc5kM761eyKZ707V-LevCHT4nhNvHONzjRIz5pGyT1C7zuGoZT=s1010&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;688&quot; data-original-width=&quot;1010&quot; height=&quot;436&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEj-gkznTT6l5bItTyGYnprFcstrlC5oSwg6eNhhe9wBlaXhLKn7h9eueU0gorF0qPqCfcWAAAW4Jd7XepUlbQUE5vlb98MEY0qMV-WO6eb3R1nYy_Eji14MfUuur9wI98iOkijrmAVc5kM761eyKZ707V-LevCHT4nhNvHONzjRIz5pGyT1C7zuGoZT=w640-h436&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;文字列なのに数値として昇順ソートできました。いちいち数値に変換しなくていいので、これは意外と便利かもしれない。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEitZsB9s2zFGlHVX0jWJ0MF-sxdTCHS1NqjidYrYoYFHTgvX_PLaxl2kWKBScMizL01WiS9ZJRSm3cf_rBrg0grCrCYT5xNN2wVUNaJyGieXKPgg6xLXvifVYf9wGRKNz0mLV1zGkxPsCUtn45wqKlznk05scJDoHm2wpEMsRJpYOa1QeR-NZk-RGyO=s618&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;542&quot; data-original-width=&quot;618&quot; height=&quot;351&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEitZsB9s2zFGlHVX0jWJ0MF-sxdTCHS1NqjidYrYoYFHTgvX_PLaxl2kWKBScMizL01WiS9ZJRSm3cf_rBrg0grCrCYT5xNN2wVUNaJyGieXKPgg6xLXvifVYf9wGRKNz0mLV1zGkxPsCUtn45wqKlznk05scJDoHm2wpEMsRJpYOa1QeR-NZk-RGyO=w400-h351&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;まとめ&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;いったんここらでまとめます。&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;基本的に配列は文字列としてソートします&lt;/li&gt;&lt;li&gt;入力が文字列であっても、数値としてソートすることもできます&lt;/li&gt;&lt;li&gt;順序は昇順と降順から選択できます&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;Sortノードシリーズは続きます。&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://awwa500.blogspot.com/feeds/7615501605939462598/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://awwa500.blogspot.com/2022/03/node-red-sort1.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/7615501605939462598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/7615501605939462598'/><link rel='alternate' type='text/html' href='http://awwa500.blogspot.com/2022/03/node-red-sort1.html' title='Sortノードを使う（その1）'/><author><name>あわ</name><uri>http://www.blogger.com/profile/08571636318581967838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEi8Db2B8bBCGGeULWWbkkJbn9tnwoM9dyvk3ZEN0nuJpn__KHsVTM2ksv5feZHBxwiOACEsNwaWdi5-9RvYctGebE-jwCZ3ZdwttFWfLXDkt3zar3TvBkYhEJu3hhZ0MglFU4sxGhQ6wvXJZmaNGEcJVRh6DHkQrk5XP2lETyk45g73kOuTFfSw0xi-=s72-w640-h130-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5587841204043490178.post-6053196425300967126</id><published>2022-03-05T08:28:00.004+09:00</published><updated>2022-03-05T08:28:49.612+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="node-red"/><title type='text'>Joinノードを使う（その4）</title><content type='html'>&lt;p&gt;ここのところずっと&lt;a href=&quot;https://nodered.org/&quot; target=&quot;_blank&quot;&gt;Node-RED&lt;/a&gt;のサンプルを見ながら各ノードの使い方を確認しています。&lt;a href=&quot;/2021/09/node-red-start.html&quot; target=&quot;_blank&quot;&gt;頭出しの記事はこちら&lt;/a&gt;をご確認ください。今回はJoinノードの4回目です。終わらねぇ。&lt;/p&gt;&lt;div&gt;確認するサンプルは、&lt;a href=&quot;/2022/02/node-red-join3.html&quot; target=&quot;_blank&quot;&gt;前回&lt;/a&gt;に引き続き「&lt;b&gt;読み込み &amp;gt; サンプル &amp;gt; flows &amp;gt; node-red &amp;gt; sequence &amp;gt; join &amp;gt; 02 - Manual join mode&lt;/b&gt;」です。&lt;/div&gt;&lt;div&gt;&lt;h2&gt;メッセージを結合してkey/valueオブジェクトにする&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiYjkPfb960044axKKW9DFpB8Icq7jna36jq_crWZbrFmVzoR7cF3IA8dCiwlHtXMN8OtR_EHIKKzZ11arpkcpXd3GB0iRsr83i3P-gahfZMHj3JPs8kmhDYXM--5ocZSHNzi0FaeDH2CIrUIgd4ZFioKq9S56TjGMKXBL7mlYA8IJ0-Q4hoa4b7JtN=s2176&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;454&quot; data-original-width=&quot;2176&quot; height=&quot;134&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiYjkPfb960044axKKW9DFpB8Icq7jna36jq_crWZbrFmVzoR7cF3IA8dCiwlHtXMN8OtR_EHIKKzZ11arpkcpXd3GB0iRsr83i3P-gahfZMHj3JPs8kmhDYXM--5ocZSHNzi0FaeDH2CIrUIgd4ZFioKq9S56TjGMKXBL7mlYA8IJ0-Q4hoa4b7JtN=w640-h134&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;5段目のフローから見ていきます。ざっくりとした流れは以下のとおりです。&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;DataノードでCSVデータを送信する&lt;/li&gt;&lt;li&gt;CsvノードでCSVデータをJSONオブジェクトに変換する&lt;/li&gt;&lt;ul&gt;&lt;li&gt;msg.payloadには以下のような値が指定されたメッセージ4つに分解される&lt;/li&gt;&lt;ul&gt;&lt;li&gt;{ name: &quot;Apple&quot;, price: 100 }&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;Changeノードでmsg.payload内の値を以下のプロパティに設定する&lt;/li&gt;&lt;ul&gt;&lt;li&gt;msg.topic = &quot;Apple&quot;（msg.payload.nameの値）&lt;/li&gt;&lt;li&gt;msg.payload = 100（msg.payload.priceの値）&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Joinノードで、2個の受信メッセージごとにmsg.topicの値をキーとしてkey/valueオブジェクトに結合して送信する&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjCWCc8TZqLH7EVOCuU8nKLbuhBhzP4q9Ren-GL3jTKHRdIOF4uCwbrcZMiu14rPpK-pQ9sTFIKNgdrvmiAbidutDpgGH5S9MB0eOh1ETuLSHdIMIqCG-mcvO890i-hxjsLX0eR28iTPeisCTOnY6x0LpQbKnrW_1TFqUiRWdvTaP5tYMihLwo4uztG=s1018&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;684&quot; data-original-width=&quot;1018&quot; height=&quot;430&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjCWCc8TZqLH7EVOCuU8nKLbuhBhzP4q9Ren-GL3jTKHRdIOF4uCwbrcZMiu14rPpK-pQ9sTFIKNgdrvmiAbidutDpgGH5S9MB0eOh1ETuLSHdIMIqCG-mcvO890i-hxjsLX0eR28iTPeisCTOnY6x0LpQbKnrW_1TFqUiRWdvTaP5tYMihLwo4uztG=w640-h430&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgL26C_K6SFhH354l6H6gofZ7MU7-uCtwWSoEVIZ2vRsXu3W41AEO7cBdzqUt1is-qvmyUGLiTBBYpoSsmQuKIf7XdqmadzA9NOxm-1ToLt05VJhzoCDzKrToIQbOTdS4dlcgGchsBeTPVqoYCD1Fja9oIQ1LMjkbVJ0KTZmhfrZ564qqGP3xrfPX-n=s1354&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1354&quot; data-original-width=&quot;1010&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgL26C_K6SFhH354l6H6gofZ7MU7-uCtwWSoEVIZ2vRsXu3W41AEO7cBdzqUt1is-qvmyUGLiTBBYpoSsmQuKIf7XdqmadzA9NOxm-1ToLt05VJhzoCDzKrToIQbOTdS4dlcgGchsBeTPVqoYCD1Fja9oIQ1LMjkbVJ0KTZmhfrZ564qqGP3xrfPX-n=w478-h640&quot; width=&quot;478&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEieJZxRE5jIARmZ6r32sM4TGHSpEocGQac4bb8kpEH5NP4SvmZxdYUUXSuvF7xgS0e_d2-xqhymHDZho-z_nyhDD7DKXbIEq4IrSvRIlo8dps3UZ6hQcpcMsJXN1eHCSVoWYFnHL4DtZl13aDQsCcfJMDf2JL6vtwK6wDNBZRgkEdRAvuWQz0kQCW-8=s1012&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;788&quot; data-original-width=&quot;1012&quot; height=&quot;498&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEieJZxRE5jIARmZ6r32sM4TGHSpEocGQac4bb8kpEH5NP4SvmZxdYUUXSuvF7xgS0e_d2-xqhymHDZho-z_nyhDD7DKXbIEq4IrSvRIlo8dps3UZ6hQcpcMsJXN1eHCSVoWYFnHL4DtZl13aDQsCcfJMDf2JL6vtwK6wDNBZRgkEdRAvuWQz0kQCW-8=w640-h498&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhMiHRjECVSZTC5_QSaidB9yPZT9TcNQ4wYkWQ8pkZjokBq4-7TLo4IprTXmDg3WJyp1Hm9r7xPK2WrETmj-v7Iyv6KG0_gKjoYscn0qEXaGFDfb317xsEjUx5EppvpAYUt5dFpmdeF_nAgl52FAhKiQVqMnIYkYQpBXNLe1iMAknHW_G4qVs_l5sxN=s1038&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1038&quot; data-original-width=&quot;1026&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhMiHRjECVSZTC5_QSaidB9yPZT9TcNQ4wYkWQ8pkZjokBq4-7TLo4IprTXmDg3WJyp1Hm9r7xPK2WrETmj-v7Iyv6KG0_gKjoYscn0qEXaGFDfb317xsEjUx5EppvpAYUt5dFpmdeF_nAgl52FAhKiQVqMnIYkYQpBXNLe1iMAknHW_G4qVs_l5sxN=w632-h640&quot; width=&quot;632&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;これを実行すると、以下のようにmsg.payloadにJSONオブジェクトが指定されていることを確認できます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEghhR_0XxTPcNm_JHnM_4n7hdfKJUDO8YU74hjTqnSnOB8aW3vHHDRdRzRL0Ck88gI7vfhxTJab9BxBKPYRYmNu7sMg4tR7nG6_SoGipfUal8Txvh_J1FkHsn3-g5v9jHnAELyw9tYfRG7CfRtJecSNtKs9YmIyQngx_-1DbUg1rrU8M4NUzIR6NQkn=s640&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;640&quot; data-original-width=&quot;618&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEghhR_0XxTPcNm_JHnM_4n7hdfKJUDO8YU74hjTqnSnOB8aW3vHHDRdRzRL0Ck88gI7vfhxTJab9BxBKPYRYmNu7sMg4tR7nG6_SoGipfUal8Txvh_J1FkHsn3-g5v9jHnAELyw9tYfRG7CfRtJecSNtKs9YmIyQngx_-1DbUg1rrU8M4NUzIR6NQkn=w386-h400&quot; width=&quot;386&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;メッセージを結合して結合オブジェクトにする&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjLkUbN2kfIv0P9bCWPd758A7qF2gUm2gx4BXtn2sb4B3EVNTAK7S8-S-Gg9BomeoZCLX336ix5GPYrbhc_QDFX10O4Mh8QOyz5uaAO2cr3O6yKWqw4nlUKuV_ovF8M89Qq82pSdXQC3fJ0DnxlfxYrVOe_siBmlj8JFACWPenw3voWl1TP8Rydv8FH=s1804&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;366&quot; data-original-width=&quot;1804&quot; height=&quot;130&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjLkUbN2kfIv0P9bCWPd758A7qF2gUm2gx4BXtn2sb4B3EVNTAK7S8-S-Gg9BomeoZCLX336ix5GPYrbhc_QDFX10O4Mh8QOyz5uaAO2cr3O6yKWqw4nlUKuV_ovF8M89Qq82pSdXQC3fJ0DnxlfxYrVOe_siBmlj8JFACWPenw3voWl1TP8Rydv8FH=w640-h130&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;先ほどは結合した値がkey/valueオブジェクトでしたが、6段目のフローでは単純にオブジェクト結合します。ざっくりとした流れは以下のとおりです。&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;DataノードでJSON配列を送信する&lt;/li&gt;&lt;ul&gt;&lt;li&gt;nameをキーに持つオブジェクトとpriceをキーに持つオブジェクトを交互に含んでいます（実際、こんなに都合の良いデータが生成されることはあるんだろうか）&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Splitノードで配列データを個別のメッセージに分割します&lt;/li&gt;&lt;li&gt;Joinノードで、2個の受信メッセージごとにオブジェクトに結合して送信する&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjtX3tTHkQaL_jhDG8oiMBaa38d0aGddDWgJEhlwsHkNcdaDyLirmA9uUEy-EJq2x0HOyUjpCfLq9-RMFAvU3HNPl3yKwr4hx0mI2OhmflBoD_ZoBmPfyRjO3ehva7lrT8KH4E1Ig1KE8KZpFtbIVIS60rpFGMuoQas4l5b_ZQA0jid5cD2J5dj-Lwc=s1010&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;846&quot; data-original-width=&quot;1010&quot; height=&quot;536&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjtX3tTHkQaL_jhDG8oiMBaa38d0aGddDWgJEhlwsHkNcdaDyLirmA9uUEy-EJq2x0HOyUjpCfLq9-RMFAvU3HNPl3yKwr4hx0mI2OhmflBoD_ZoBmPfyRjO3ehva7lrT8KH4E1Ig1KE8KZpFtbIVIS60rpFGMuoQas4l5b_ZQA0jid5cD2J5dj-Lwc=w640-h536&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhHPOB73nHiVGWyBi3Md4-9FJIwGh75_42VMHYyn92vBd_UOoL429sEEwwSR7UbOm3cpjwAExzZvFQMDwDX0FTwnfWMJSlD68-DpnU9H_51p4gfG6AL490uiJxTlP-IvU4s1BwutS4wiPEDqaFzb_3V5Q8oYTuK6C7udZtgCaE74sO_nAIvC-savTNI=s1002&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;928&quot; data-original-width=&quot;1002&quot; height=&quot;592&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhHPOB73nHiVGWyBi3Md4-9FJIwGh75_42VMHYyn92vBd_UOoL429sEEwwSR7UbOm3cpjwAExzZvFQMDwDX0FTwnfWMJSlD68-DpnU9H_51p4gfG6AL490uiJxTlP-IvU4s1BwutS4wiPEDqaFzb_3V5Q8oYTuK6C7udZtgCaE74sO_nAIvC-savTNI=w640-h592&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi48n9WQNCI_9cHHbJUhQ_6DLLBJyD7Sn6rPOf7wznC-P2D2eQaBRioNFeuZxCftpzXnukg-XdkdjF6881IkEm2aEVnC9Xh3agKjh2_hcjmXXsvPAR_JPD_VHqzk_-61NUSSfKGTiix38Z4JuFuKmNlIm2NPwI5g3lsrOCg1x4_SSICEc6RO-VbdfPN=s1016&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;834&quot; data-original-width=&quot;1016&quot; height=&quot;526&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi48n9WQNCI_9cHHbJUhQ_6DLLBJyD7Sn6rPOf7wznC-P2D2eQaBRioNFeuZxCftpzXnukg-XdkdjF6881IkEm2aEVnC9Xh3agKjh2_hcjmXXsvPAR_JPD_VHqzk_-61NUSSfKGTiix38Z4JuFuKmNlIm2NPwI5g3lsrOCg1x4_SSICEc6RO-VbdfPN=w640-h526&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;これを実行すると、以下のようにmsg.payloadに2個ずつのオブジェクトがJSONオブジェクトに結合されたものが指定されていることを確認できます。ちなみに、Joinノードで結合するオブジェクトのキーが被っていると結合対象のメッセージは破棄されるようです（Templateノードで指定している配列要素の2個めのキーをpriceからnameに変更すると確認できます）。このサンプルではTemplateノードで指定したデータのkeyが結合後に被らないようにしてあるので、こんな感じで単純結合できるんですね。&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhQFZZzTxGH_my27b2nP0SES6Mvw95hUzG9HqsP_TFpPbVhP8Zx3LTRLWZWKyWqvCEZqXZ1Gm_yNLpwWoW0_8rNeACLbgyHzgq0hZVifvDaDlVHDZYeMcLovq2x-i9Jul9-dKZghq_IE51AQIC4qAdPR4HZnxKa9ht91ewo5uBoyq2rRKeGm3t_UCDW=s828&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;828&quot; data-original-width=&quot;626&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhQFZZzTxGH_my27b2nP0SES6Mvw95hUzG9HqsP_TFpPbVhP8Zx3LTRLWZWKyWqvCEZqXZ1Gm_yNLpwWoW0_8rNeACLbgyHzgq0hZVifvDaDlVHDZYeMcLovq2x-i9Jul9-dKZghq_IE51AQIC4qAdPR4HZnxKa9ht91ewo5uBoyq2rRKeGm3t_UCDW=w485-h640&quot; width=&quot;485&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;指定した数に達するまでに受信したメッセージを保持して、後続のメッセージを差し替えて結合オブジェクトにする&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjG6O24QIfoEwwzeN24bdZbs7DXERNmau3JFBM6r9jFDKqvnN42p6ZkReX6SHCLhlltnLPT8mSReaQTnt3WmdhgKkDboFeZNqpHXhyPhDYHFyOqJwyQ2vZfxYTljDm45c3VLnwkp_R83ZaSAOTW0v50HDikr4STN8y20hXBFqYEbagMLqlKX8xhsHh2=s1788&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;346&quot; data-original-width=&quot;1788&quot; height=&quot;124&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjG6O24QIfoEwwzeN24bdZbs7DXERNmau3JFBM6r9jFDKqvnN42p6ZkReX6SHCLhlltnLPT8mSReaQTnt3WmdhgKkDboFeZNqpHXhyPhDYHFyOqJwyQ2vZfxYTljDm45c3VLnwkp_R83ZaSAOTW0v50HDikr4STN8y20hXBFqYEbagMLqlKX8xhsHh2=w640-h124&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;7段目のフローも結合オブジェクトにしますが、文章にするととてもややこしい動きをします。ざっくりとした流れは以下のとおりです。&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;DataノードでJSON配列を送信する&lt;/li&gt;&lt;ul&gt;&lt;li&gt;配列の先頭2つの要素はそれぞれnameとpriceをキーに持つオブジェクトで、その後はorderをキーに持つオブジェクトです&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Splitノードで配列データを個別のメッセージに分割します&lt;/li&gt;&lt;li&gt;Joinノードで、3個のメッセージを受信したらオブジェクトに結合して送信します&lt;/li&gt;&lt;ul&gt;&lt;li&gt;最初に受信した2つのメッセージの内容はそのまま保持して、その後受信した後続のメッセージを1つ受信したら3つ目のメッセージを受信したメッセージ差し替えて送信します&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjinxq6j_KCBGcdaxLboLMuJkgI0pSwYL0DkqZVW5Yjm5y90m02l78ameOBgFvXtugix-aM58YiGw_C_Dz0bJQgl0FXVo0mKOmqxvs_xdBxikzEF0IHRjNEQXr3wR3m5R6L0Tj10D5KFuUuQDI2I4wP9-M-pp2oL3FSNerhrJIKCLMs5lvCGbXo_13O=s1022&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;762&quot; data-original-width=&quot;1022&quot; height=&quot;478&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjinxq6j_KCBGcdaxLboLMuJkgI0pSwYL0DkqZVW5Yjm5y90m02l78ameOBgFvXtugix-aM58YiGw_C_Dz0bJQgl0FXVo0mKOmqxvs_xdBxikzEF0IHRjNEQXr3wR3m5R6L0Tj10D5KFuUuQDI2I4wP9-M-pp2oL3FSNerhrJIKCLMs5lvCGbXo_13O=w640-h478&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhHPOB73nHiVGWyBi3Md4-9FJIwGh75_42VMHYyn92vBd_UOoL429sEEwwSR7UbOm3cpjwAExzZvFQMDwDX0FTwnfWMJSlD68-DpnU9H_51p4gfG6AL490uiJxTlP-IvU4s1BwutS4wiPEDqaFzb_3V5Q8oYTuK6C7udZtgCaE74sO_nAIvC-savTNI=s1002&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;928&quot; data-original-width=&quot;1002&quot; height=&quot;592&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhHPOB73nHiVGWyBi3Md4-9FJIwGh75_42VMHYyn92vBd_UOoL429sEEwwSR7UbOm3cpjwAExzZvFQMDwDX0FTwnfWMJSlD68-DpnU9H_51p4gfG6AL490uiJxTlP-IvU4s1BwutS4wiPEDqaFzb_3V5Q8oYTuK6C7udZtgCaE74sO_nAIvC-savTNI=w640-h592&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi0wBhj_SF9dtOHtlwx1GAyPOuwQFreAzWywtM1VLJB5VjQKKeaeOem67IMrOvPjlAQBay5o10jYN71KwewYZZsw04mWEbOZxiVJdExo4EheORVwddUN8k_ibESPy1vMjL_stchX9puwjDGVSQno3o_3tLOck6OG5qrikrvRdCivGKkB1U_jCa__UIh=s1006&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;840&quot; data-original-width=&quot;1006&quot; height=&quot;534&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi0wBhj_SF9dtOHtlwx1GAyPOuwQFreAzWywtM1VLJB5VjQKKeaeOem67IMrOvPjlAQBay5o10jYN71KwewYZZsw04mWEbOZxiVJdExo4EheORVwddUN8k_ibESPy1vMjL_stchX9puwjDGVSQno3o_3tLOck6OG5qrikrvRdCivGKkB1U_jCa__UIh=w640-h534&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;これを実行すると、以下のようにmsg.payloadに最初の3個のオブジェクトがJSONオブジェクトに結合されたものが指定されていることを確認できます。その後は、最初の2個のオブジェクトは固定で、4つ目以降のオブジェクトが差し替えられて指定されています。&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi9KfsKHd_mzjnd06jOf7OXCO2oPxgJ1CISOJSkrcKehhigw4BREWJG7d118sS-GMwHLvXfRgr5SGzQPiXKx0tOi1CzXatmad-F7dRPhEiXdNcZXF2-MQrTmamP-XxUseYw4P1qyIOr-_mnleGeHp50DnVhMm-hZ7dyBr_qsJegxTjMgCnw8dQrQOMx=s800&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;800&quot; data-original-width=&quot;614&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi9KfsKHd_mzjnd06jOf7OXCO2oPxgJ1CISOJSkrcKehhigw4BREWJG7d118sS-GMwHLvXfRgr5SGzQPiXKx0tOi1CzXatmad-F7dRPhEiXdNcZXF2-MQrTmamP-XxUseYw4P1qyIOr-_mnleGeHp50DnVhMm-hZ7dyBr_qsJegxTjMgCnw8dQrQOMx=w492-h640&quot; width=&quot;492&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;結果を見るとなんとなく挙動は理解できますが、実際こんなサンプルを利用しなきゃいけない場面はあるのだろうか。&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;まとめ&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;ようやく全部見終えたのでまとめます。&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;特定のプロパティを指定してkey/valueオブジェクトに結合できます&lt;/li&gt;&lt;li&gt;単純にオブジェクトに結合できます&lt;/li&gt;&lt;ul&gt;&lt;li&gt;結合対象のキーが被るとそのデータは破棄されます&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;指定した数に達するまでに受信したオブジェクトを固定し、その後受信したメッセージを差し替えて結合できます&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;長く続いたJoinノードシリーズがようやく終焉を迎えました。&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://awwa500.blogspot.com/feeds/6053196425300967126/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://awwa500.blogspot.com/2022/03/node-red-join4.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/6053196425300967126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/6053196425300967126'/><link rel='alternate' type='text/html' href='http://awwa500.blogspot.com/2022/03/node-red-join4.html' title='Joinノードを使う（その4）'/><author><name>あわ</name><uri>http://www.blogger.com/profile/08571636318581967838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEiYjkPfb960044axKKW9DFpB8Icq7jna36jq_crWZbrFmVzoR7cF3IA8dCiwlHtXMN8OtR_EHIKKzZ11arpkcpXd3GB0iRsr83i3P-gahfZMHj3JPs8kmhDYXM--5ocZSHNzi0FaeDH2CIrUIgd4ZFioKq9S56TjGMKXBL7mlYA8IJ0-Q4hoa4b7JtN=s72-w640-h134-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5587841204043490178.post-8048733703502344410</id><published>2022-03-04T22:39:00.000+09:00</published><updated>2022-03-04T22:39:13.866+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="hacktoberfest"/><category scheme="http://www.blogger.com/atom/ns#" term="node-red"/><title type='text'>Hacktoberfest 2021に参加したらTシャツもらえました</title><content type='html'>&lt;p&gt;&amp;nbsp;昨年10月、Hacktoberfest 2021に参加しました。具体的には、Node-REDの標準ノードの翻訳に参加して4つのコントリビュートがマージされました。タイミング的にギリギリだったので、ダメかなと諦めていたのですが、先日Tシャツが届きました。ステッカーもたくさん同梱されていました。なんか嬉しいです。&lt;/p&gt;&lt;p&gt;レビュアーの皆様、ありがとうございました。また何か機会があればよろしくお願いします。&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgAYEb0bhl9vCzL1bZotAy8AeIfDUtrCWj-dxKXGfmU8Nq_RH49WdZX3-8nkx63GhbxEddBolH1SWGmFpQhtuMVHTAukH_TFm2Szlm4uvkU0VH93Q5upk7zTiZvS52j8I2j_D7iGJ6h0_e3IGThDt8uiVle12KZdxCoefwRB0o7QnXbecyIYOrgB9DH=s4032&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;2268&quot; data-original-width=&quot;4032&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgAYEb0bhl9vCzL1bZotAy8AeIfDUtrCWj-dxKXGfmU8Nq_RH49WdZX3-8nkx63GhbxEddBolH1SWGmFpQhtuMVHTAukH_TFm2Szlm4uvkU0VH93Q5upk7zTiZvS52j8I2j_D7iGJ6h0_e3IGThDt8uiVle12KZdxCoefwRB0o7QnXbecyIYOrgB9DH=w640-h360&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjT4zTy9CHyqsoM1OIh6fv-BSiFtjU_icvapcpYYJtpaum6aiXogWOzonUgk0TdYUw3jfA_jrOeJXpLWbotwCxeF7pU4MDSdCy7dql6jpm9hXs4CxjVPxtJBeb3kSkGy1ybXT_K6AU5CBF4zrMVV7HAijhzOQTsquYZV7vXW_iFgR-VxWevZbjjAXG1=s4032&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;2268&quot; data-original-width=&quot;4032&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjT4zTy9CHyqsoM1OIh6fv-BSiFtjU_icvapcpYYJtpaum6aiXogWOzonUgk0TdYUw3jfA_jrOeJXpLWbotwCxeF7pU4MDSdCy7dql6jpm9hXs4CxjVPxtJBeb3kSkGy1ybXT_K6AU5CBF4zrMVV7HAijhzOQTsquYZV7vXW_iFgR-VxWevZbjjAXG1=w640-h360&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://awwa500.blogspot.com/feeds/8048733703502344410/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://awwa500.blogspot.com/2022/03/hacktoberfest-2021.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/8048733703502344410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/8048733703502344410'/><link rel='alternate' type='text/html' href='http://awwa500.blogspot.com/2022/03/hacktoberfest-2021.html' title='Hacktoberfest 2021に参加したらTシャツもらえました'/><author><name>あわ</name><uri>http://www.blogger.com/profile/08571636318581967838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEgAYEb0bhl9vCzL1bZotAy8AeIfDUtrCWj-dxKXGfmU8Nq_RH49WdZX3-8nkx63GhbxEddBolH1SWGmFpQhtuMVHTAukH_TFm2Szlm4uvkU0VH93Q5upk7zTiZvS52j8I2j_D7iGJ6h0_e3IGThDt8uiVle12KZdxCoefwRB0o7QnXbecyIYOrgB9DH=s72-w640-h360-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5587841204043490178.post-8397905421854955811</id><published>2022-02-25T22:39:00.001+09:00</published><updated>2022-02-25T22:39:10.186+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="node-red"/><title type='text'>Joinノードを使う（その3）</title><content type='html'>&lt;p&gt;ここのところずっと&lt;a href=&quot;https://nodered.org/&quot; target=&quot;_blank&quot;&gt;Node-RED&lt;/a&gt;のサンプルを見ながら各ノードの使い方を確認しています。&lt;a href=&quot;/2021/09/node-red-start.html&quot; target=&quot;_blank&quot;&gt;頭出しの記事はこちら&lt;/a&gt;をご確認ください。今回はJoinノードの3回目です。&lt;/p&gt;&lt;div&gt;確認するサンプルは、前回に引き続き「&lt;b&gt;読み込み &amp;gt; サンプル &amp;gt; flows &amp;gt; node-red &amp;gt; sequence &amp;gt; join &amp;gt; 02 - Manual join mode&lt;/b&gt;」です。&lt;/div&gt;&lt;div&gt;&lt;h2&gt;msg.completeを使って結合する&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhFYE8IPlSreTXgsw51cGuu1Kssv0v5cW1EMoVRm7aJgDCcPv2jeuY37IZ2FHJ1j4odNFxqyaAcCzhM2eKkC2ugDhwlF-_owPWvfwZb2zEcz14Aeg6_p2Zu5z44SX7kH3KoMWoHYRqxBkCKOAHX9H_Urbtc7XXout31u6HQOMpGyxqQHwzNWF-b_ERp=s2304&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;374&quot; data-original-width=&quot;2304&quot; height=&quot;104&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhFYE8IPlSreTXgsw51cGuu1Kssv0v5cW1EMoVRm7aJgDCcPv2jeuY37IZ2FHJ1j4odNFxqyaAcCzhM2eKkC2ugDhwlF-_owPWvfwZb2zEcz14Aeg6_p2Zu5z44SX7kH3KoMWoHYRqxBkCKOAHX9H_Urbtc7XXout31u6HQOMpGyxqQHwzNWF-b_ERp=w640-h104&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3段目のフローから見ていきます。ざっくりとした流れは以下のとおりです。&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Templateノードで「&lt;b&gt;msg.payload&lt;/b&gt;」に改行区切りの文字列を指定する&lt;/li&gt;&lt;li&gt;Splitノードでmsg.payloadの文字列を改行で区切って複数のメッセージに分離する&lt;/li&gt;&lt;li&gt;Functionノードでは、受信したメッセージが特定の条件を満たしていた場合に「&lt;b&gt;msg.complete&lt;/b&gt;」に「&lt;b&gt;true&lt;/b&gt;」を指定する&lt;/li&gt;&lt;ul&gt;&lt;li&gt;条件：msg.payloadにBananaまたはKiwiが指定されていたら&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Joinノードでは、受信したメッセージの&lt;b&gt;msg.completeプロパティが設定されていたらメッセージを送信&lt;/b&gt;する（それまでに受信したメッセージはカンマで区切って文字列結合する）&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiL48Pj7vv5I_bweTf6VQOxVQley-oduALyJrI9PatGOJe5uLkxNY0XshwrUAWrQSwLeB3JpNTBwsSf9p276lXsOGN89LDqrnledGn_-8il3E-aVSmVutMCHjwYqswYR06YI24BIzfMxmG_KdJJS394p69DlQ3QKVtOUnHiufnx6dzkZXsDAPMnuUf5=s1004&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;660&quot; data-original-width=&quot;1004&quot; height=&quot;420&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiL48Pj7vv5I_bweTf6VQOxVQley-oduALyJrI9PatGOJe5uLkxNY0XshwrUAWrQSwLeB3JpNTBwsSf9p276lXsOGN89LDqrnledGn_-8il3E-aVSmVutMCHjwYqswYR06YI24BIzfMxmG_KdJJS394p69DlQ3QKVtOUnHiufnx6dzkZXsDAPMnuUf5=w640-h420&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Templateノード&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgpy5U6fQFR9brUKrP4V-vEow4V4K5pb7a1xo_49JGRkaHsUl1F3lYeK4jD10NGZ0EgvGJTR34UqVvacfRuKtJHCt_Z4wrJ3KMV9XqAY0kiXGRWGxOOx4Snpg6_sKjbp1glRT_5LFdeRNYxQ5mRVldhGCXgfZ3mYk98TS6nGERxkUCEBHm05Mp2K1Dv=s1076&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1076&quot; data-original-width=&quot;1018&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgpy5U6fQFR9brUKrP4V-vEow4V4K5pb7a1xo_49JGRkaHsUl1F3lYeK4jD10NGZ0EgvGJTR34UqVvacfRuKtJHCt_Z4wrJ3KMV9XqAY0kiXGRWGxOOx4Snpg6_sKjbp1glRT_5LFdeRNYxQ5mRVldhGCXgfZ3mYk98TS6nGERxkUCEBHm05Mp2K1Dv=w606-h640&quot; width=&quot;606&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Splitノード&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjWQ0HPoEkd5Mi8_5DnLQFbOdBiGM_gd0oBDE_MZ7LeHPbnV46EGlcJLLg1K1z_X_HU9CjvDP8q-rzixmTOcvsRAe5nMBfKOq_GdfiQyLPH9fDbHYa9h0xpLB6fYQ1wbrJfYR1aXmXvPImoe7hH0Rj8w4SzTbACaTY-LtlLSjgTrDH9MkOFl1Jne4YI=s1024&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;974&quot; data-original-width=&quot;1024&quot; height=&quot;608&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjWQ0HPoEkd5Mi8_5DnLQFbOdBiGM_gd0oBDE_MZ7LeHPbnV46EGlcJLLg1K1z_X_HU9CjvDP8q-rzixmTOcvsRAe5nMBfKOq_GdfiQyLPH9fDbHYa9h0xpLB6fYQ1wbrJfYR1aXmXvPImoe7hH0Rj8w4SzTbACaTY-LtlLSjgTrDH9MkOFl1Jne4YI=w640-h608&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Joinノード&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;実行すると、msg.completeプロパティが指定されるまでに受信したメッセージが結合されたログが出力されます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi3Qkr6UTDrMy-BPcwqCR1QKOYPQ3g5k7gYLL6AbJcTIDLkNHJlIril0RmjnkEEB8oEgAa0TA9vgeKCBoy4ok2pTOuTYkthkGMkBj2zjvXuWhU_70DJwAdYjRhfoCs4lNeFb120s26VOfwYQqYQ0q71MVILGn5mHORBMaPFQbUmcuzLJy4uf_UXgubt=s600&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;456&quot; data-original-width=&quot;600&quot; height=&quot;304&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi3Qkr6UTDrMy-BPcwqCR1QKOYPQ3g5k7gYLL6AbJcTIDLkNHJlIril0RmjnkEEB8oEgAa0TA9vgeKCBoy4ok2pTOuTYkthkGMkBj2zjvXuWhU_70DJwAdYjRhfoCs4lNeFb120s26VOfwYQqYQ0q71MVILGn5mHORBMaPFQbUmcuzLJy4uf_UXgubt=w400-h304&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;メッセージを結合して配列にする&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhRhH941UynhOGRstjA7pNmYiMo6uNKjZPn4p23Dx4S17GrSoRbODNdQCy8XJP1JKApxj9ThBKTCtdLPNyzjZkzbGlZWmqru6oDxGmxBkOxDDFHOVNSffAQCTHPGQVhoSHJyxHxfsPDTYKLHYLiWdu1ABvC5Lgq0ZvQsaQTPgy7K28oLvvGndd9zXka=s1738&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;322&quot; data-original-width=&quot;1738&quot; height=&quot;118&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhRhH941UynhOGRstjA7pNmYiMo6uNKjZPn4p23Dx4S17GrSoRbODNdQCy8XJP1JKApxj9ThBKTCtdLPNyzjZkzbGlZWmqru6oDxGmxBkOxDDFHOVNSffAQCTHPGQVhoSHJyxHxfsPDTYKLHYLiWdu1ABvC5Lgq0ZvQsaQTPgy7K28oLvvGndd9zXka=w640-h118&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ここまでは結合した値が文字列でしたが、4段目のフローでは配列にします。TemplateノードとSplitノードは上述のサンプルと同じなので省略します。ポイントはJoinノードの出力が「&lt;b&gt;配列&lt;/b&gt;」に設定されている点です。&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEijZwdlz3crOYbF67-yVMeTqyFboXprQjAnOZNM4qITpISUv8F_eeZJNu9hn41b-wOIEprdWMVyFJzQO-fHQjivABQoimDUFfRyHZWGXbLMy1a12O8EAcFIMG9KQGFsJaKo6kKYMLspXEJIRBhm-3lPmlBAPMngDjNlaJqzwVE8cwOMehvZaBmAj5ct=s1024&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;886&quot; data-original-width=&quot;1024&quot; height=&quot;554&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEijZwdlz3crOYbF67-yVMeTqyFboXprQjAnOZNM4qITpISUv8F_eeZJNu9hn41b-wOIEprdWMVyFJzQO-fHQjivABQoimDUFfRyHZWGXbLMy1a12O8EAcFIMG9KQGFsJaKo6kKYMLspXEJIRBhm-3lPmlBAPMngDjNlaJqzwVE8cwOMehvZaBmAj5ct=w640-h554&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;これを実行すると、以下のようにmsg.payloadに文字列配列が指定されていることを確認できます。&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjuSZ-Y7cuc07Mzz-xyNgYK0ns-jECq0ZB6V2hcxAIu_eG15meFJMOuiG-K6apw6P5NNv_hludascD6Sz0JdfSdcRql5y-bH69UTGHut17y6zqtYe1qpfY1nFOK0YPMkgaLVCWzMrbPOiZFJR6YMuz6LAevqzNgEfuw73MWm_NRrYU9mE7pDDpHryBz=s630&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;630&quot; data-original-width=&quot;582&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjuSZ-Y7cuc07Mzz-xyNgYK0ns-jECq0ZB6V2hcxAIu_eG15meFJMOuiG-K6apw6P5NNv_hludascD6Sz0JdfSdcRql5y-bH69UTGHut17y6zqtYe1qpfY1nFOK0YPMkgaLVCWzMrbPOiZFJR6YMuz6LAevqzNgEfuw73MWm_NRrYU9mE7pDDpHryBz=w370-h400&quot; width=&quot;370&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;まとめ&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;このへんで一旦まとめておきます。&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;手動モードでは「msg.complete」プロパティを指定するとメッセージの結合を区切ることができます&lt;/li&gt;&lt;li&gt;「msg.complete」を指定するまでに入力されたメッセージが結合されます&lt;/li&gt;&lt;li&gt;結合後のデータ型は文字列の他に配列が指定できます&lt;/li&gt;&lt;ul&gt;&lt;li&gt;たぶん、この後のサンプルで紹介することになると思いますが、データ型は他にも選択肢があります&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;Joinノードシリーズはもう少し続きます。&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://awwa500.blogspot.com/feeds/8397905421854955811/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://awwa500.blogspot.com/2022/02/node-red-join3.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/8397905421854955811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/8397905421854955811'/><link rel='alternate' type='text/html' href='http://awwa500.blogspot.com/2022/02/node-red-join3.html' title='Joinノードを使う（その3）'/><author><name>あわ</name><uri>http://www.blogger.com/profile/08571636318581967838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEhFYE8IPlSreTXgsw51cGuu1Kssv0v5cW1EMoVRm7aJgDCcPv2jeuY37IZ2FHJ1j4odNFxqyaAcCzhM2eKkC2ugDhwlF-_owPWvfwZb2zEcz14Aeg6_p2Zu5z44SX7kH3KoMWoHYRqxBkCKOAHX9H_Urbtc7XXout31u6HQOMpGyxqQHwzNWF-b_ERp=s72-w640-h104-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5587841204043490178.post-8693709511086957136</id><published>2022-02-24T22:00:00.002+09:00</published><updated>2022-02-24T22:09:07.725+09:00</updated><title type='text'>痩せてみた</title><content type='html'>&lt;h2 style=&quot;text-align: left;&quot;&gt;はじめに&lt;/h2&gt;&lt;p&gt;ここ10ヶ月ほど、体重のコントロールに取り組み、安定的に運用できるようになりました。しかしながら、何かのきっかけでリバウンドしてしまう可能性はあります。いつの日か、リバウンドしてしまった際に再度コントロールを取り戻せるようここにメモを残しておきます。&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;成果&lt;/h2&gt;&lt;p&gt;ダイエットを本格的に開始したのは2021年4月1日です。当時と今を比較してみます。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Before：2021年4月1日&lt;/li&gt;&lt;ul&gt;&lt;li&gt;体重：70.8kg&lt;/li&gt;&lt;li&gt;胴囲：85.7cm&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;After：2022年1月18日&lt;/li&gt;&lt;ul&gt;&lt;li&gt;体重：58.5kg&lt;/li&gt;&lt;li&gt;胴囲：70.5cm&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhRqUWp3epJSd0umaBN62sfqEdf4kkEfnaJfrRMpGldXzrAjQDdEUT_QOSH7ptn58s5uG2gbFUOnmP4kEwSnZ_MITe08h80sA47MVvJOaKQBSEgex_bk722diaGJar7qjJQni7KaDMo7I_EoBDqVlL6zRIHkuMLoKrty381O3nftCDeY71eUdfAS1Mt=s2802&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1200&quot; data-original-width=&quot;2802&quot; height=&quot;274&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhRqUWp3epJSd0umaBN62sfqEdf4kkEfnaJfrRMpGldXzrAjQDdEUT_QOSH7ptn58s5uG2gbFUOnmP4kEwSnZ_MITe08h80sA47MVvJOaKQBSEgex_bk722diaGJar7qjJQni7KaDMo7I_EoBDqVlL6zRIHkuMLoKrty381O3nftCDeY71eUdfAS1Mt=w640-h274&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgVjkPaGp1da0X3_U2zkQMp0hO0fWgUy-Ce42ngPRjvdcsBiDQeuF0w1p5Pfx6v3NYKApFjGQ-oC417HsQhJlH9koxKIp2pxuBx97yYnkS82I1ICZLk3q0bz28MTJxD7A1BiccsPu7K8BzqTdUOcArQFW8q6IGS7bSye2WODpW6LP6QnDh2rUtt0C-l=s2802&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1200&quot; data-original-width=&quot;2802&quot; height=&quot;274&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgVjkPaGp1da0X3_U2zkQMp0hO0fWgUy-Ce42ngPRjvdcsBiDQeuF0w1p5Pfx6v3NYKApFjGQ-oC417HsQhJlH9koxKIp2pxuBx97yYnkS82I1ICZLk3q0bz28MTJxD7A1BiccsPu7K8BzqTdUOcArQFW8q6IGS7bSye2WODpW6LP6QnDh2rUtt0C-l=w640-h274&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;ちなみに身長と標準体重は以下のとおりです。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;身長：176.3cm&lt;/li&gt;&lt;li&gt;標準体重：68.4kg&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;これ以降は、この状態に至るまでに経験したことを記録します。&lt;/div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;きっかけ&lt;/h2&gt;&lt;p style=&quot;text-align: left;&quot;&gt;ちょっと前から、なんとなくお腹が出てきていたことが気になっていました。特に椅子に座った姿勢が顕著でしたが、気のせいだろうと思いこむことにしていました。そんな中、久々に会った方に開口一番「&lt;b&gt;お腹出ましたね&lt;/b&gt;」と言われ、それが気のせいではないことをはっきり自覚しました。&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;やったこと&lt;/h2&gt;&lt;div&gt;翌日から生活習慣を改めることにしました。やったことは極めてありがちなことばかりで、以下のような内容です。問題はこれらを継続できるかどうかでした。&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;毎日体重を測る&lt;/li&gt;&lt;li&gt;夕食のご飯は茶碗1杯まで&lt;/li&gt;&lt;li&gt;間食は控えめに&lt;/li&gt;&lt;li&gt;歩く&lt;/li&gt;&lt;/ul&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;毎日体重を測る&lt;/h3&gt;&lt;/div&gt;&lt;p&gt;どこで仕入れた情報か忘れましたが、&lt;b&gt;ダイエットをするならまずは体重を測れ&lt;/b&gt;というのを思い出してなんとなく始めました。体重をこまめに測ると、その間にやった食事や運動、排泄などの行動がどの程度体重に影響を与えるか見えてきます。見えたらあとは効果のあることを継続するだけです。私は以下のルールで実施しました。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;測定タイミングは少なくとも一日2回&lt;/li&gt;&lt;ul&gt;&lt;li&gt;夕食後寝る前&lt;/li&gt;&lt;li&gt;朝起きた後朝食前&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;測定前にトイレは済ませる&lt;/li&gt;&lt;li&gt;測定は全裸で&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;text-align: left;&quot;&gt;寝る前は一日の中で最も体重が大きく、朝食前は逆に最も小さいタイミングと考えました。測定タイミングを一定にすることで前日と比較ができるようになります。トイレと全裸のルールは体重のブレを生じさせる要素をなるべく減らして自分に言い訳させないのが目的です。&lt;/p&gt;&lt;div&gt;また、細かいことですが、体重計はGoogle Fit対応のものを利用しています。体重計に乗るだけで自動的にスマホ上に記録できるので便利です。&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;夕食のご飯は茶碗1杯まで&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;食事制限によるダイエットは過去に一度失敗していたこともあり、極力避けました。食事を変化させたのは夕食のご飯（ライス）の量のみです。足りない分は、肉なり野菜なりで満たすので、食事制限の辛い感覚はほぼありません。あるとしたら、焼き肉やすき焼きの際のご飯不足くらいでしょうか。全体的な量は1日3食満足する程度に食べます。&lt;/div&gt;&lt;div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;間食は控えめに&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;間食の制限もやりすぎるとモチベーションを下げるので、制限は最低限に抑えました。文字通り「控えめ」程度で、全く食べないわけではありません。気をつけているのは以下の点です。&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;間食でお腹を満たさない&lt;/li&gt;&lt;li&gt;食事までに空腹になるよう量を抑える&lt;/li&gt;&lt;li&gt;タイミングを逃したら食べられなくなるものは食べる（高級◯◯とか、今話題の◯◯とか）&lt;/li&gt;&lt;li&gt;炭酸飲料などの甘い飲み物は避け、味が強くて糖分の無いブラックコーヒーで口寂しさを紛らわせる&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;最初の2、3ヶ月はストイックに間食を避けていましたが、体重の変化を見つつ影響がない程度にルールを緩和していき、この運用に落ち着きました。&lt;/div&gt;&lt;div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;歩く&lt;/h3&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;実は、本格的にダイエットを開始する前から、毎日5kmほど歩いていましたが、体重に変化がないことがわかっていたので、歩く距離を倍の10km〜12kmに増やしました。標高差は20m程度です。ペースは10分〜11分/kmと、ほんのり早足程度。この距離を歩くのに2時間程度かかりますが、生活リズム的に連続で時間を確保するのは難しいので、朝食後と夕食後の2回に分けて歩いています。天気が悪くない限り基本的に毎日歩きますが、なんだかんだ週に1日は天気の悪い日があるので、週6日程度でしょうか。比較的よく歩いた8月は300km程度でした。&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;ただ歩くだけだと退屈なので、ラジオを聞きながら歩くようにしました。これはモチベーションの維持に意外と効果的で最近ではラジオを聞くために歩きに行く状態（いい意味で本末転倒）になっています。&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;体重と同じく運動もGoogle Fitで記録します。スマホを持って歩くだけなのでとても便利です。&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi-I-gMlznwvLR4RDMg5m_UKUW-XMr5lagGyRPiEPcJhiyBzPVzuuDIY2Ui16QQAxv5d_M_tgcPu484plB7mr76CKcc8wZ72ts-WUz_WrBvFXMnORLPWH5_IHjba_sggy3hpay1aPx04hgL0Nhpzj_4YXngLrwXY2sBLS73VjZWaxCbEeMKeBtn5u58=s3840&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3840&quot; data-original-width=&quot;1644&quot; height=&quot;688&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi-I-gMlznwvLR4RDMg5m_UKUW-XMr5lagGyRPiEPcJhiyBzPVzuuDIY2Ui16QQAxv5d_M_tgcPu484plB7mr76CKcc8wZ72ts-WUz_WrBvFXMnORLPWH5_IHjba_sggy3hpay1aPx04hgL0Nhpzj_4YXngLrwXY2sBLS73VjZWaxCbEeMKeBtn5u58=w294-h688&quot; width=&quot;294&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;はじめのうちは1日に2時間も歩くとぐったりと疲れてしまい、翌日まで引きずっていましたが、2週間もすると徐々に慣れてきました。また、体重が減るとともに上り坂での足の運びの軽さを感じられるようになりました。標高差20mを一気に登りきっても特に息が切れることもなく、足が軽く前に出る感覚が強くなります。&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;山手線一周&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;毎日10kmくらい歩いているとだんだん物足りなくなってくるもので、ふと山手線一周（約40km）を歩いてみました。9時間で完歩。そこそこ疲れましたが、良いモチベーションアップになりました。その後も、大江戸線全線制覇（約50km）、銀座線＋副都心線はしご（約40km）をやって、やるたびに身体に対するダメージが少なくなってきています。徐々に自分が強化されるのを感じ取れて楽しいです。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgl4yv_FVjsAy1avW4prtW3AtdM9Vz7k-61vVKgef1rxh5d5GqKUA3qV7iXEHG6k-ffra1iXYCTDiDVmEVhFvj_uhoswMpMEJFXMb_CD3G8UuUonUWrcx3hKIX9KFqRXtmASjuLoXhLKz-ylkH1GRg6lmf9QAq2xuZcjztBmWUYmIiuaZzEkjV6wzkw=s3840&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;3840&quot; data-original-width=&quot;1644&quot; height=&quot;741&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgl4yv_FVjsAy1avW4prtW3AtdM9Vz7k-61vVKgef1rxh5d5GqKUA3qV7iXEHG6k-ffra1iXYCTDiDVmEVhFvj_uhoswMpMEJFXMb_CD3G8UuUonUWrcx3hKIX9KFqRXtmASjuLoXhLKz-ylkH1GRg6lmf9QAq2xuZcjztBmWUYmIiuaZzEkjV6wzkw=w317-h741&quot; width=&quot;317&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;h2&gt;期待はずれだったトクホ&lt;/h2&gt;&lt;p style=&quot;text-align: left;&quot;&gt;多少なりともダイエットの効率をあげようと思い、5月〜6月にかけて「&lt;a href=&quot;https://c.cocacola.co.jp/sukoyakacha/&quot; target=&quot;_blank&quot;&gt;からだすこやか茶W&lt;/a&gt;」を飲み続けました。しかしながら、グラフが示すとおり体重が減るペースに変化はありませんでした。公式ページによるとこのお茶の効果は「脂肪の吸収を抑える」「糖の吸収をおだやかにする」で、一言も体重を減らすとは書いてないんですよね。その表現どおりの効果なのだろうと思います。&lt;/p&gt;&lt;div&gt;一応補足情報を。&lt;a href=&quot;https://j.cocacola.co.jp/info/faq/detail.htm?faq=18288&quot; target=&quot;_blank&quot;&gt;公式情報によると1日3本飲むのが推奨&lt;/a&gt;とのことです。この商品には350mLサイズと1Lサイズのペットボトルがあり、公式情報からはどちらのサイズを3本飲むべきなのかは読み取れませんが、さすがに1日3L飲めって話はないと思うので、350mL×3に相当する量を飲み続けました。&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2&gt;酒を飲むと体重が増える&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;きわめて当たり前のことですが、飲み会が増えると体重が増えます。忘年会が連続した12月と帰省で運動ができなかった正月で2kgほど増えました。その後、生活リズムが元に戻ると体重も戻りました。これはペースを乱すといつでもリバウンドする可能性があることを意味します。&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;さいごに&lt;/h2&gt;&lt;/div&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;継続できなければ元に戻るのは間違いありません。自分には食事制限や辛い運動を継続する精神力はないので、できる範囲で自分なりのルーティンを見つけることができたのが幸いだったと思います。それを見つけるための基礎情報がこまめな体重測定、といったところでしょうか。&lt;/p&gt;&lt;div&gt;今のところ毎日一定の距離を歩かないと物足りなく感じるので心配はありませんが、いつの日かリバウンドからカムバックしたくなったら自分でこの文章を見返して事象を再現させようと思います。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://awwa500.blogspot.com/feeds/8693709511086957136/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://awwa500.blogspot.com/2022/02/diet.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/8693709511086957136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/8693709511086957136'/><link rel='alternate' type='text/html' href='http://awwa500.blogspot.com/2022/02/diet.html' title='痩せてみた'/><author><name>あわ</name><uri>http://www.blogger.com/profile/08571636318581967838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEhRqUWp3epJSd0umaBN62sfqEdf4kkEfnaJfrRMpGldXzrAjQDdEUT_QOSH7ptn58s5uG2gbFUOnmP4kEwSnZ_MITe08h80sA47MVvJOaKQBSEgex_bk722diaGJar7qjJQni7KaDMo7I_EoBDqVlL6zRIHkuMLoKrty381O3nftCDeY71eUdfAS1Mt=s72-w640-h274-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5587841204043490178.post-9129366928237861871</id><published>2022-02-19T14:49:00.002+09:00</published><updated>2022-02-19T14:49:16.900+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="node-red"/><title type='text'>Joinノードを使う（その2）</title><content type='html'>&lt;p&gt;ここのところずっと&lt;a href=&quot;https://nodered.org/&quot; target=&quot;_blank&quot;&gt;Node-RED&lt;/a&gt;のサンプルを見ながら各ノードの使い方を確認しています。&lt;a href=&quot;/2021/09/node-red-start.html&quot; target=&quot;_blank&quot;&gt;頭出しの記事はこちら&lt;/a&gt;をご確認ください。今回はJoinノードの2回目です。&lt;/p&gt;&lt;div&gt;確認するサンプルは、「&lt;b&gt;読み込み &amp;gt; サンプル &amp;gt; flows &amp;gt; node-red &amp;gt; sequence &amp;gt; join &amp;gt; 02 - Manual join mode&lt;/b&gt;」です。今度は「&lt;b&gt;手動モード&lt;/b&gt;」だそうです。7つのフローから構成されています。ちょっと多すぎですが、それだけいろいろな使い方ができるのだと思います。&lt;/div&gt;&lt;div&gt;&lt;h2&gt;指定した個数のメッセージごとに結合する&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjCLvUwMkzhwHqonYKmy7HRK9fH1En9Lb9TcfT4qMNNJxBkE1aQE7x4HGE07u6o7w41SpfhiRHk3uzHvr10lkOfyieZx5j4o8BzpI0OOw25Tkia-I0YpM0uK3CfNnbWPSmMFqcwxxZItNzSBIrzz5N7gq7Hv9OD7mcZq3C7J8SkjbJ_lU7YvwuMsHvb=s2234&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;458&quot; data-original-width=&quot;2234&quot; height=&quot;132&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjCLvUwMkzhwHqonYKmy7HRK9fH1En9Lb9TcfT4qMNNJxBkE1aQE7x4HGE07u6o7w41SpfhiRHk3uzHvr10lkOfyieZx5j4o8BzpI0OOw25Tkia-I0YpM0uK3CfNnbWPSmMFqcwxxZItNzSBIrzz5N7gq7Hv9OD7mcZq3C7J8SkjbJ_lU7YvwuMsHvb=w640-h132&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;一番上の段は、指定した個数のメッセージごと結合するサンプルです。左側のTemplateノードから設定を見ていきます。ここでは「&lt;b&gt;msg.payload&lt;/b&gt;」に改行区切りの文字列を指定しています。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiL48Pj7vv5I_bweTf6VQOxVQley-oduALyJrI9PatGOJe5uLkxNY0XshwrUAWrQSwLeB3JpNTBwsSf9p276lXsOGN89LDqrnledGn_-8il3E-aVSmVutMCHjwYqswYR06YI24BIzfMxmG_KdJJS394p69DlQ3QKVtOUnHiufnx6dzkZXsDAPMnuUf5=s1004&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;660&quot; data-original-width=&quot;1004&quot; height=&quot;420&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiL48Pj7vv5I_bweTf6VQOxVQley-oduALyJrI9PatGOJe5uLkxNY0XshwrUAWrQSwLeB3JpNTBwsSf9p276lXsOGN89LDqrnledGn_-8il3E-aVSmVutMCHjwYqswYR06YI24BIzfMxmG_KdJJS394p69DlQ3QKVtOUnHiufnx6dzkZXsDAPMnuUf5=w640-h420&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;続いて、その右側にあるSplitノードです。msg.payloadには文字列が格納されているので、改行（\n）ごとに個別のmsgオブジェクトに分割します。今回の場合、4つのメッセージに分割されます。&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgpy5U6fQFR9brUKrP4V-vEow4V4K5pb7a1xo_49JGRkaHsUl1F3lYeK4jD10NGZ0EgvGJTR34UqVvacfRuKtJHCt_Z4wrJ3KMV9XqAY0kiXGRWGxOOx4Snpg6_sKjbp1glRT_5LFdeRNYxQ5mRVldhGCXgfZ3mYk98TS6nGERxkUCEBHm05Mp2K1Dv=s1076&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1076&quot; data-original-width=&quot;1018&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgpy5U6fQFR9brUKrP4V-vEow4V4K5pb7a1xo_49JGRkaHsUl1F3lYeK4jD10NGZ0EgvGJTR34UqVvacfRuKtJHCt_Z4wrJ3KMV9XqAY0kiXGRWGxOOx4Snpg6_sKjbp1glRT_5LFdeRNYxQ5mRVldhGCXgfZ3mYk98TS6nGERxkUCEBHm05Mp2K1Dv=w606-h640&quot; width=&quot;606&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;続いて、Joinノードは以下のように設定されています。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh40KHNgv5NVfEtgFlSd3LI7YI3VdtE3MALJStBBrmtCzzutgukOqeUmATvMvBX4t-7Oecl-zQAGk3D56J_skGWN0iSJp9AJdLmMQpIeHuFOLCJX-Rqg8knrFe-zBFDe-hvaGRxomwP6vHxJ25YDcn687xy1ZEgKeBPGhfyEuQCCI5BMw1XZMVhwuf7=s1032&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;990&quot; data-original-width=&quot;1032&quot; height=&quot;614&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh40KHNgv5NVfEtgFlSd3LI7YI3VdtE3MALJStBBrmtCzzutgukOqeUmATvMvBX4t-7Oecl-zQAGk3D56J_skGWN0iSJp9AJdLmMQpIeHuFOLCJX-Rqg8knrFe-zBFDe-hvaGRxomwP6vHxJ25YDcn687xy1ZEgKeBPGhfyEuQCCI5BMw1XZMVhwuf7=w640-h614&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;たくさん設定が見えますが、以下の条件でメッセージを結合して送信するようです。&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;結合対象の入力メッセージのプロパティは「&lt;b&gt;msg.playload&lt;/b&gt;」&lt;/li&gt;&lt;li&gt;出力はカンマ（,）区切りの文字列&lt;/li&gt;&lt;li&gt;msgオブジェクトを2つ受け取るか「&lt;b&gt;msg.complete&lt;/b&gt;」プロパティが設定されたメッセージを受信したタイミングで送信&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;実行すると、4つに分割されていたであろうメッセージが以下のように2つに結合されています。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhENvl1so5J3u4TM8rSdyFdeBFho92avxisbQZoHhgLgXuhImZ6yhBdtxdUUkcjIKgqCHcelmVHEpjWDs40gopX2umKNAGq6sNeg1naZX65TMeADl3K3VM9igaqiHz3Ol_EIcMgjRSWmLqC-KmSG-Hjfnfg_3KqVwm963IJRchza6wnSZy8x8GQ8IDm=s614&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;448&quot; data-original-width=&quot;614&quot; height=&quot;291&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhENvl1so5J3u4TM8rSdyFdeBFho92avxisbQZoHhgLgXuhImZ6yhBdtxdUUkcjIKgqCHcelmVHEpjWDs40gopX2umKNAGq6sNeg1naZX65TMeADl3K3VM9igaqiHz3Ol_EIcMgjRSWmLqC-KmSG-Hjfnfg_3KqVwm963IJRchza6wnSZy8x8GQ8IDm=w400-h291&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;指定した時間内に受信したメッセージを結合する&lt;/h2&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhnK1tlkWtXOZKnuKirYnjdGhvN1fW8eZDgteT7etGAu89055lvXvfdolOPaS-PtIx6yTpE4VgKCt9RmqZXqY76CafDYNnzNGYRnodVM7EXRvoSxzJatrTR3-mseTGQQ4rxaaehALCmlNXyt9p3qPrDzCl8pk3Q7wF7RCp6TOe3qO4NSfk5SH3vYaXq=s2122&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;328&quot; data-original-width=&quot;2122&quot; height=&quot;98&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhnK1tlkWtXOZKnuKirYnjdGhvN1fW8eZDgteT7etGAu89055lvXvfdolOPaS-PtIx6yTpE4VgKCt9RmqZXqY76CafDYNnzNGYRnodVM7EXRvoSxzJatrTR3-mseTGQQ4rxaaehALCmlNXyt9p3qPrDzCl8pk3Q7wF7RCp6TOe3qO4NSfk5SH3vYaXq=w640-h98&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2段目のフローでは、指定した時間内に届いたメッセージを結合します。例によって左から順に設定を見ていきます。TemplateノードとSplitノードは上述のサンプルと同じなので省略します。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;続いて、Delayノードです。Splitノードで分割したメッセージの流量を1メッセージ/秒に制限します。&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEg9ETt4_mfOil1xpKAfa0kAcIypKuBy7EwP_Maz0cplRFV_Ptbhv-vA28YBxA6VAVgfFWLd0ZKTH8x3Buud-xRep1MIDd8C2mj_b49_9buiEy28vpKUIHweaTwJeCAnlxFOb9hG0d7LBCEgPT02ZEvFAaZYd_9kIsciDVNUGKbMtpAs9nuy83F4ykZu=s1008&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;780&quot; data-original-width=&quot;1008&quot; height=&quot;496&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEg9ETt4_mfOil1xpKAfa0kAcIypKuBy7EwP_Maz0cplRFV_Ptbhv-vA28YBxA6VAVgfFWLd0ZKTH8x3Buud-xRep1MIDd8C2mj_b49_9buiEy28vpKUIHweaTwJeCAnlxFOb9hG0d7LBCEgPT02ZEvFAaZYd_9kIsciDVNUGKbMtpAs9nuy83F4ykZu=w640-h496&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;最後に、このフローのポイントとなるJoinノードです。最初のメッセージ受信から2秒経ったらメッセージを出力します。言い換えると、&lt;b&gt;2秒以内に受信したメッセージを結合する&lt;/b&gt;ってことでしょうね。&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhgWPUwgDCGwbH4WyIwxSthgCeeIvXQmWDGi5BETkeRiXY7d93rRthJj82ZBpA6vx4FRw-Shw95OaSE-VQViQKVGXtoxmOS9bcO25TJTqKSKrepXLB3iPOmvElk4Pn9gZ6qWe3DYfY377ilFRmOZBJmlKEYdxEn5cWRcYmIUkzHMZ6C_6EgSKjbo2x7=s1028&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;982&quot; data-original-width=&quot;1028&quot; height=&quot;612&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhgWPUwgDCGwbH4WyIwxSthgCeeIvXQmWDGi5BETkeRiXY7d93rRthJj82ZBpA6vx4FRw-Shw95OaSE-VQViQKVGXtoxmOS9bcO25TJTqKSKrepXLB3iPOmvElk4Pn9gZ6qWe3DYfY377ilFRmOZBJmlKEYdxEn5cWRcYmIUkzHMZ6C_6EgSKjbo2x7=w640-h612&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;これを実行すると、最初に紹介したフロー同じようなログが出力されますが、2件出力されるログのタイムスタンプが2秒空いています。Joinノードから2秒毎に結合されたメッセージが出力されたことがわかります。&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEj7sVLMcIYrnL4PURzOgev-iO1QZ7chsX7fy4FBiGIzfySntLuFauU_NrcOk4LTcqAnqH9BNBFL85CYxSWfiITaDmiURNFfGM7SUTzgRzXps-t_VVOh1PbZNbaRyGrtbkAv0z2df8Jj66X1FiKbLeRy0T74WroAQGP4bw0ZF67C5VjuWVs5X9kxxE17=s626&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;460&quot; data-original-width=&quot;626&quot; height=&quot;470&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEj7sVLMcIYrnL4PURzOgev-iO1QZ7chsX7fy4FBiGIzfySntLuFauU_NrcOk4LTcqAnqH9BNBFL85CYxSWfiITaDmiURNFfGM7SUTzgRzXps-t_VVOh1PbZNbaRyGrtbkAv0z2df8Jj66X1FiKbLeRy0T74WroAQGP4bw0ZF67C5VjuWVs5X9kxxE17=w640-h470&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;まとめ&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;まだまだ先は長そうなので、このへんで一旦まとめておきます。&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Joinノードの手動モードは以下の条件でメッセージを結合して出力できます。&lt;/li&gt;&lt;ul&gt;&lt;li&gt;指定した個数のメッセージごと&lt;/li&gt;&lt;li&gt;指定した時間内に受信したメッセージごと&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;文字列結合する場合、区切り文字を指定できる&lt;/li&gt;&lt;li&gt;結合対象のプロパティを指定できる&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;Joinノードシリーズはもう少し続きます。&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://awwa500.blogspot.com/feeds/9129366928237861871/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://awwa500.blogspot.com/2022/02/node-red-join2.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/9129366928237861871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/9129366928237861871'/><link rel='alternate' type='text/html' href='http://awwa500.blogspot.com/2022/02/node-red-join2.html' title='Joinノードを使う（その2）'/><author><name>あわ</name><uri>http://www.blogger.com/profile/08571636318581967838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEjCLvUwMkzhwHqonYKmy7HRK9fH1En9Lb9TcfT4qMNNJxBkE1aQE7x4HGE07u6o7w41SpfhiRHk3uzHvr10lkOfyieZx5j4o8BzpI0OOw25Tkia-I0YpM0uK3CfNnbWPSmMFqcwxxZItNzSBIrzz5N7gq7Hv9OD7mcZq3C7J8SkjbJ_lU7YvwuMsHvb=s72-w640-h132-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5587841204043490178.post-275878749633311443</id><published>2022-02-18T00:12:00.000+09:00</published><updated>2022-02-18T00:12:04.205+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="node-red"/><title type='text'>Joinノードを使う（その1）</title><content type='html'>&lt;p&gt;ここのところずっと&lt;a href=&quot;https://nodered.org/&quot; target=&quot;_blank&quot;&gt;Node-RED&lt;/a&gt;のサンプルを見ながら各ノードの使い方を確認しています。&lt;a href=&quot;/2021/09/node-red-start.html&quot; target=&quot;_blank&quot;&gt;頭出しの記事はこちら&lt;/a&gt;をご確認ください。今回はJoinノードを見ていきます。その名の通り、複数のメッセージを結合するのが役割です。前回ご紹介したSplitとは逆ですね。&lt;/p&gt;&lt;div&gt;確認するサンプルは、「&lt;b&gt;読み込み &amp;gt; サンプル &amp;gt; flows &amp;gt; node-red &amp;gt; sequence &amp;gt; join &amp;gt; 01 - Automatic join mode&lt;/b&gt;」です。「&lt;b&gt;自動モード&lt;/b&gt;」とやらがポイントのようです。3つのフローから構成されているので順に見ていきます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiBhQm9PPKjTMMs8lzWku8yBeUeg6_YCLocNvuOkXiqhiXuQWtc_5XVosj_Sf-N3OfmWZngQW0_lupGLUCNNR3SUsi8acSUpb-eLRznMyMW-X8rl_ns7-3RrqQx7Ii-Xe8TdJb4NEOARlXVV4X9Asl-MDV57DbWvVqiHVzzb_VvIiTD1D_n95IADh7h=s2312&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1182&quot; data-original-width=&quot;2312&quot; height=&quot;328&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiBhQm9PPKjTMMs8lzWku8yBeUeg6_YCLocNvuOkXiqhiXuQWtc_5XVosj_Sf-N3OfmWZngQW0_lupGLUCNNR3SUsi8acSUpb-eLRznMyMW-X8rl_ns7-3RrqQx7Ii-Xe8TdJb4NEOARlXVV4X9Asl-MDV57DbWvVqiHVzzb_VvIiTD1D_n95IADh7h=w640-h328&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;Splitノードで分割したメッセージをJoinノードの自動モードで結合する&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;一番上の段は、Splitノードで分割したメッセージをJoinノードの自動モードで結合するサンプルです。左側のTemplateノードから設定を見ていきます。ここでは「&lt;b&gt;msg.payload&lt;/b&gt;」に改行区切りの文字列を指定しています。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiL48Pj7vv5I_bweTf6VQOxVQley-oduALyJrI9PatGOJe5uLkxNY0XshwrUAWrQSwLeB3JpNTBwsSf9p276lXsOGN89LDqrnledGn_-8il3E-aVSmVutMCHjwYqswYR06YI24BIzfMxmG_KdJJS394p69DlQ3QKVtOUnHiufnx6dzkZXsDAPMnuUf5=s1004&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;660&quot; data-original-width=&quot;1004&quot; height=&quot;420&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiL48Pj7vv5I_bweTf6VQOxVQley-oduALyJrI9PatGOJe5uLkxNY0XshwrUAWrQSwLeB3JpNTBwsSf9p276lXsOGN89LDqrnledGn_-8il3E-aVSmVutMCHjwYqswYR06YI24BIzfMxmG_KdJJS394p69DlQ3QKVtOUnHiufnx6dzkZXsDAPMnuUf5=w640-h420&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;続いて、その右側にあるSplitノードです。msg.payloadには文字列が格納されているので、改行（\n）ごとに個別のmsgオブジェクトに分割します。&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgpy5U6fQFR9brUKrP4V-vEow4V4K5pb7a1xo_49JGRkaHsUl1F3lYeK4jD10NGZ0EgvGJTR34UqVvacfRuKtJHCt_Z4wrJ3KMV9XqAY0kiXGRWGxOOx4Snpg6_sKjbp1glRT_5LFdeRNYxQ5mRVldhGCXgfZ3mYk98TS6nGERxkUCEBHm05Mp2K1Dv=s1076&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1076&quot; data-original-width=&quot;1018&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgpy5U6fQFR9brUKrP4V-vEow4V4K5pb7a1xo_49JGRkaHsUl1F3lYeK4jD10NGZ0EgvGJTR34UqVvacfRuKtJHCt_Z4wrJ3KMV9XqAY0kiXGRWGxOOx4Snpg6_sKjbp1glRT_5LFdeRNYxQ5mRVldhGCXgfZ3mYk98TS6nGERxkUCEBHm05Mp2K1Dv=w606-h640&quot; width=&quot;606&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;続いて、Joinノードは以下のように設定されています。&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;動作：自動&lt;/li&gt;&lt;ul&gt;&lt;li&gt;このモードでは、本ノードがSplitノードと組となるか、&lt;b&gt;msg.parts&lt;/b&gt;プロパティが設定されたメッセージを受け取ることが前提となります。&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhBfRHws96ge8lyuibSDrVI1RIkZBxWOEfk1CjNi_FqNhSt55Ividdcj_EF8Ggyk0OAo46HpJUUPwt_5f8GJTU2qLkgRBfI4zX7PeifBCeffkBJYbgo_887ro2DnEUyLCUU5aP5TqOuYh5jcS-K0eQuB30Ay1QCEkxx4q8vJTeta3MLRmlWlunEfs2v=s1024&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;568&quot; data-original-width=&quot;1024&quot; height=&quot;356&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhBfRHws96ge8lyuibSDrVI1RIkZBxWOEfk1CjNi_FqNhSt55Ividdcj_EF8Ggyk0OAo46HpJUUPwt_5f8GJTU2qLkgRBfI4zX7PeifBCeffkBJYbgo_887ro2DnEUyLCUU5aP5TqOuYh5jcS-K0eQuB30Ay1QCEkxx4q8vJTeta3MLRmlWlunEfs2v=w640-h356&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;このフローではmsg.partsプロパティは存在しないため、Splitノードと組となることが前提で動作します。実行すると以下のように4つに分割されたであろうメッセージが1つに結合されています。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi4vWiRpAD5XjDESKTmYsRRR70SQkb6Xfguk81TUNfe9kBBRH2sApExCphboy6yU98niAf9CxLKVZBRxjdNDA_6qYBlHryuzgjfD8WjGPp7wySl5HRwlO1UVsrpQIdqSjbUZdU_ub16C1L2R43FOLnPvJPqSqojWjRxTtwJ-7XGvJnzDXwCV87tWVJH=s612&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;292&quot; data-original-width=&quot;612&quot; height=&quot;306&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi4vWiRpAD5XjDESKTmYsRRR70SQkb6Xfguk81TUNfe9kBBRH2sApExCphboy6yU98niAf9CxLKVZBRxjdNDA_6qYBlHryuzgjfD8WjGPp7wySl5HRwlO1UVsrpQIdqSjbUZdU_ub16C1L2R43FOLnPvJPqSqojWjRxTtwJ-7XGvJnzDXwCV87tWVJH=w640-h306&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;これだけ見ると、分割した文字列をものをそのまま結合しただけなので、何が嬉しいのかサッパリ理解できませんが、ここでは基本的な動作はこういうものだと認識するのに留め、次のフローを確認していきます。&lt;div&gt;&lt;h2&gt;CSVデータをJSON配列に変換する&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;続いて2段目のフローでは、CSVデータをJSON配列に変換するサンプルです。結構使える場面が多いのではないでしょうか。例によって左から順に設定を見ていきます。Templateノードではmsg.payloadにCSVデータが指定されています。1列目が「name」で文字列データ、2列目が「price」で数値データ。各レコードは改行（\n）で区切られています。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEg5cB8V5ECybCsrsbl5r86MwkhXuJ07c0rHsraUpT4n_qfO48j3w10cdgQBppji_x9JqdP_GU1d6SZfhDsPTf-kMMb6IoxV7TM2bVBBCkNlGXYJVplgWrambKin8cuhRnN6DK1Gn4dIU331omsQhP6g8ppjQuNlytCNXCjHs9HDyQFXIBIX6tbsCO88=s1000&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;686&quot; data-original-width=&quot;1000&quot; height=&quot;440&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEg5cB8V5ECybCsrsbl5r86MwkhXuJ07c0rHsraUpT4n_qfO48j3w10cdgQBppji_x9JqdP_GU1d6SZfhDsPTf-kMMb6IoxV7TM2bVBBCkNlGXYJVplgWrambKin8cuhRnN6DK1Gn4dIU331omsQhP6g8ppjQuNlytCNXCjHs9HDyQFXIBIX6tbsCO88=w640-h440&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;続いて、csvノードです。CSVデータが入力されるので、以下の赤枠で囲った部分の設定が働きます。&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;CSVをオブジェクトに変換する&lt;/li&gt;&lt;li&gt;1行目に列名を含む&lt;/li&gt;&lt;li&gt;数値を変換する&lt;/li&gt;&lt;li&gt;行ごとにメッセージを分割&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjgKZFiFhS8hdeXugey4M55aEQtbZRAk1mCAL922FBHTC6XOjWQ3_KWfGNwP1AH-zUcGZYzztH4R8ORB5lKWXciu2E-iX12GJ82R9Oo_nhm7ddfvz6RyOrTqxOjDvuLsmoHgT-YYPYburg6zTgA9XMRJ7F_KtXTYeXysXMewW3qVQvY__8O0vQEF41P=s1370&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1370&quot; data-original-width=&quot;1004&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjgKZFiFhS8hdeXugey4M55aEQtbZRAk1mCAL922FBHTC6XOjWQ3_KWfGNwP1AH-zUcGZYzztH4R8ORB5lKWXciu2E-iX12GJ82R9Oo_nhm7ddfvz6RyOrTqxOjDvuLsmoHgT-YYPYburg6zTgA9XMRJ7F_KtXTYeXysXMewW3qVQvY__8O0vQEF41P=w470-h640&quot; width=&quot;470&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;参考までに、Csvノードから出力されるmsgオブジェクト全体をログ出力すると、以下のような内容になっています。先ほどチラっと出てきたmsg.partsプロパティが見えます。どうやらこいつがこの後のJoinノードで利用されるようです（どのメッセージを結合対象とするか判断しているのではないかと思います）。&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEixZTbdMTLyN569Hp3ldV1HJUxwa-E6DOn386Fj6KhLJLseQFGFMP7c_vacnMHLE99JlP2PbemL8Bm1_sc1YmA1rVEwiQZ2F7MdrtRPYpijJ3F-hWia-MUx40PL2cMW50XS9JQS7gsbh-7OvPz7UP4bbtQd1AlWdC5pWmxJBib3SD6mM2wxqJ8WiT5v=s590&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;590&quot; data-original-width=&quot;504&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEixZTbdMTLyN569Hp3ldV1HJUxwa-E6DOn386Fj6KhLJLseQFGFMP7c_vacnMHLE99JlP2PbemL8Bm1_sc1YmA1rVEwiQZ2F7MdrtRPYpijJ3F-hWia-MUx40PL2cMW50XS9JQS7gsbh-7OvPz7UP4bbtQd1AlWdC5pWmxJBib3SD6mM2wxqJ8WiT5v=s320&quot; width=&quot;273&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;最後にJoinノードは最初にご紹介したフローと同じく自動モードになっています（画面キャプチャは省略）。&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;これを実行すると、Csvノードで分割されたメッセージがJSON配列に結合されて出力されます。なんかいい感じです。&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgkkPj2Ggu7mtluD6DxblhwdGIjYSkUfklwk7L71tRtcwN0sL24ve9ezOTqY00CjmVJZee4D5cXuDNNz_aBse5CCJcThtKLgvK84CywfXPf45uiCx505m3ZZBHomElvMT3MVXGF7uarsZ11fZ_7QHA7hKsU88w79JVU5IC1CROzBMeDzuft95BRD3rY=s842&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;842&quot; data-original-width=&quot;618&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgkkPj2Ggu7mtluD6DxblhwdGIjYSkUfklwk7L71tRtcwN0sL24ve9ezOTqY00CjmVJZee4D5cXuDNNz_aBse5CCJcThtKLgvK84CywfXPf45uiCx505m3ZZBHomElvMT3MVXGF7uarsZ11fZ_7QHA7hKsU88w79JVU5IC1CROzBMeDzuft95BRD3rY=w470-h640&quot; width=&quot;470&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;CSVデータから条件を満たさないものを除外してJSON配列に変換する&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;3段目のフローでは、2段目のフローに条件を加えて、指定した条件を満たさないものをJSON配列から除外します。CsvノードとJoinノードの間に挟まっているSwitchノードがポイントです。「msg.payload.price」の値が100を以上のものをポートから出力します。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiNmA2Th_YoMQIk0v4mM4JBdxqQc5h_ah8XeUSdL9n9_qq-5WSk5r4d9J_qj1R6zCml8mkW02yEgqT6q736ALhmL-Aro7pyr5Z3XImqKRlMMk3wArAet62CufMyaRI-gkP8IfvXeI6rQ4JJZat5zUB-qV8wnTAe1WVWx6Z2zXnt420IKruOLT7UKiBL=s1176&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;584&quot; data-original-width=&quot;1176&quot; height=&quot;318&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiNmA2Th_YoMQIk0v4mM4JBdxqQc5h_ah8XeUSdL9n9_qq-5WSk5r4d9J_qj1R6zCml8mkW02yEgqT6q736ALhmL-Aro7pyr5Z3XImqKRlMMk3wArAet62CufMyaRI-gkP8IfvXeI6rQ4JJZat5zUB-qV8wnTAe1WVWx6Z2zXnt420IKruOLT7UKiBL=w640-h318&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;その他は2段目のフローと同じです。これを実行すると以下のようにpriceが100以上のオブジェクトのみ抽出されたログが出力されます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgzEqfznVbfSaz13Rcfh96SZ1jj7AhLCdiUR1nDlj5_vgSCj8Ge2EYijAEYvcJ8nS4bEULBH6OQCtPrXWn5iYiz4Xm6odfvRb9vlnvHf5iw5dhaNKUvtTHzfsFf2nv57e3U5QI-R9zutoaVsZ6BB6OMnvDUSbpNDfmC9tI0F5RtoufQSkz2ermD01md=s586&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;410&quot; data-original-width=&quot;586&quot; height=&quot;448&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgzEqfznVbfSaz13Rcfh96SZ1jj7AhLCdiUR1nDlj5_vgSCj8Ge2EYijAEYvcJ8nS4bEULBH6OQCtPrXWn5iYiz4Xm6odfvRb9vlnvHf5iw5dhaNKUvtTHzfsFf2nv57e3U5QI-R9zutoaVsZ6BB6OMnvDUSbpNDfmC9tI0F5RtoufQSkz2ermD01md=w640-h448&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;まとめ&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;ここまで確認したことをまとめます。&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Joinノードの自動モードはSplitノードとセットで利用する&lt;/li&gt;&lt;li&gt;他に、自動モードはmsg.partsを利用して結合動作を制御できる&lt;/li&gt;&lt;li&gt;CSVデータをJSON配列に変換できる&lt;/li&gt;&lt;ul&gt;&lt;li&gt;ついでにプロパティの値に応じてフィルタできる&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Joinノードシリーズはもう少し続きます。&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://awwa500.blogspot.com/feeds/275878749633311443/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://awwa500.blogspot.com/2022/02/node-red-join1.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/275878749633311443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/275878749633311443'/><link rel='alternate' type='text/html' href='http://awwa500.blogspot.com/2022/02/node-red-join1.html' title='Joinノードを使う（その1）'/><author><name>あわ</name><uri>http://www.blogger.com/profile/08571636318581967838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEiBhQm9PPKjTMMs8lzWku8yBeUeg6_YCLocNvuOkXiqhiXuQWtc_5XVosj_Sf-N3OfmWZngQW0_lupGLUCNNR3SUsi8acSUpb-eLRznMyMW-X8rl_ns7-3RrqQx7Ii-Xe8TdJb4NEOARlXVV4X9Asl-MDV57DbWvVqiHVzzb_VvIiTD1D_n95IADh7h=s72-w640-h328-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5587841204043490178.post-8380428405358479162</id><published>2022-02-13T00:30:00.001+09:00</published><updated>2022-02-13T00:30:29.526+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="node-red"/><title type='text'>Splitノードを使う</title><content type='html'>&lt;p&gt;&amp;nbsp;ここのところずっと&lt;a href=&quot;https://nodered.org/&quot; target=&quot;_blank&quot;&gt;Node-RED&lt;/a&gt;のサンプルを見ながら各ノードの使い方を確認しています。&lt;a href=&quot;/2021/09/node-red-start.html&quot; target=&quot;_blank&quot;&gt;頭出しの記事はこちら&lt;/a&gt;をご確認ください。今回はSplitノードを見ていきます。その名の通り、とにかくいろいろな値を分割するのが役割です。&lt;/p&gt;&lt;div&gt;確認するサンプルは、「&lt;b&gt;読み込み &amp;gt; サンプル &amp;gt; flows &amp;gt; node-red &amp;gt; sequence &amp;gt; split &amp;gt; 01 - Split message payload&lt;/b&gt;」です。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEita9XEgNaxQ4ADdiewkRFUFeoxmZai6CLQZATjQX-L0nXId0Y5ec3Ll5fS6SVwai6leN1h1b6HBLshcofSsd1MMS7LckRJjW1sxKlheshF8vt-z1xHSTb4KTcumz24Wcush9kCcoooyOHN860J5-vdT3sSIN4F4YN7M3J-aoY03kCuSC8r20h7zjjC=s1660&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1228&quot; data-original-width=&quot;1660&quot; height=&quot;474&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEita9XEgNaxQ4ADdiewkRFUFeoxmZai6CLQZATjQX-L0nXId0Y5ec3Ll5fS6SVwai6leN1h1b6HBLshcofSsd1MMS7LckRJjW1sxKlheshF8vt-z1xHSTb4KTcumz24Wcush9kCcoooyOHN860J5-vdT3sSIN4F4YN7M3J-aoY03kCuSC8r20h7zjjC=w640-h474&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;4つのフローから構成されています。順に見ていきます。&lt;/div&gt;&lt;div&gt;&lt;h2&gt;特定の文字で文字列を分割する&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;一番上の段は入力「&lt;b&gt;msg.payload&lt;/b&gt;」内の文字列を、指定した文字列（サンプルでは改行\n）で分割します。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEguC5gV755CMnQeGDlNBVxGpvYZGeyOOhmaXDMdzKbZ1Mhu65jGUI4yYShmZjJvrKD0UFnDNUKeNBYIQMxrnVKapQdPfMrxgHJij8GPZCsYKW6I_yM4gPiN2WqcbtkKGvOWhiVdltPH1JFF2uxOwrodi8KFf5nYtskF-VQZr6N77Nt1D9TOgqP2OW5N=s1004&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;932&quot; data-original-width=&quot;1004&quot; height=&quot;594&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEguC5gV755CMnQeGDlNBVxGpvYZGeyOOhmaXDMdzKbZ1Mhu65jGUI4yYShmZjJvrKD0UFnDNUKeNBYIQMxrnVKapQdPfMrxgHJij8GPZCsYKW6I_yM4gPiN2WqcbtkKGvOWhiVdltPH1JFF2uxOwrodi8KFf5nYtskF-VQZr6N77Nt1D9TOgqP2OW5N=w640-h594&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;msg.payloadには改行（\n）で区切られた文字列が指定されています。&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi-S0FYo1by9RcfrRWqEk7a6-dYB47zpeO4XZS6oWchJ0lokBBsOnZz2YbQlJAhUOXgltJK78Zd-xVvKCq3rgvtLX4DT5DA4oi1kFUswb8mhTEqEzXjp2iHK0nzk098leF4zdNqtPyj_RfKyrldtI7UusjpyMrWyvON_yXWOYS8ODB77BZBwk_7_SCA=s1004&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;606&quot; data-original-width=&quot;1004&quot; height=&quot;386&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi-S0FYo1by9RcfrRWqEk7a6-dYB47zpeO4XZS6oWchJ0lokBBsOnZz2YbQlJAhUOXgltJK78Zd-xVvKCq3rgvtLX4DT5DA4oi1kFUswb8mhTEqEzXjp2iHK0nzk098leF4zdNqtPyj_RfKyrldtI7UusjpyMrWyvON_yXWOYS8ODB77BZBwk_7_SCA=w640-h386&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;実行すると、デバッグパネルに3件のログが出力されます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgbLGvmp2blKE4zlsf8U_H62uFCbS3PAPBLma4ogN4lvJ30ggpm20YVsigpNZBjf52uQbCll7FLY3kAd3iVFcyFioGaWJDKLwL3GKkVeYvO8oOEEyECnuBdQh99SZKwCTzu7Re453GwlzxN6sfThQveScsELcoBBGj6kX9omZxfxoXY91RPN5Dvu7DF=s622&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;594&quot; data-original-width=&quot;622&quot; height=&quot;383&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgbLGvmp2blKE4zlsf8U_H62uFCbS3PAPBLma4ogN4lvJ30ggpm20YVsigpNZBjf52uQbCll7FLY3kAd3iVFcyFioGaWJDKLwL3GKkVeYvO8oOEEyECnuBdQh99SZKwCTzu7Re453GwlzxN6sfThQveScsELcoBBGj6kX9omZxfxoXY91RPN5Dvu7DF=w400-h383&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;一定の文字数ごとに文字列を分割する&lt;/h2&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;続いて2段目のフローでは、入力「&lt;b&gt;msg.payload&lt;/b&gt;」内の文字列を、指定した文字数ごとに分割します。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgis1nEL96_iVAmNKhzTtYR0J5Uq35-2Bg3VmhgLLnYxJ016s70QIur8XWyVFnjL1WeWqWbcyw9b_1-Y69DNkUVpRTHdG6gSM6aTxd7ClTz3w5ebSkhobDSF7syIc_zqScu-uqEflEYOuXSHXpZRotJqWbhO7O3UC3U52RoYGr4dYTvpM4OMCFMzh9W=s998&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;920&quot; data-original-width=&quot;998&quot; height=&quot;590&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgis1nEL96_iVAmNKhzTtYR0J5Uq35-2Bg3VmhgLLnYxJ016s70QIur8XWyVFnjL1WeWqWbcyw9b_1-Y69DNkUVpRTHdG6gSM6aTxd7ClTz3w5ebSkhobDSF7syIc_zqScu-uqEflEYOuXSHXpZRotJqWbhO7O3UC3U52RoYGr4dYTvpM4OMCFMzh9W=w640-h590&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;msg.payloadには先ほどと同じく改行（\n）で区切られた文字列が指定されています。これを実行すると、改行コード含め4文字ごとに分割されてログが出力されます。&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhO8ZQnN52I9XWvhKWcuU85u7bs19_XgQO2HvXqAMUkO4A5of33b3cz64BlJ9LQEeRRIGRikvERPtUPF1UtiXbhGn-UIo3JYH6gPnqVH-FbupaZ4A9VriVnsXNImDTn8SYwKwPYlzVah1ZmstsfzEQSKSWHcgcrZd5ENCRhzaT8txzXVT6l6FI8eTbx=s882&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;882&quot; data-original-width=&quot;610&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhO8ZQnN52I9XWvhKWcuU85u7bs19_XgQO2HvXqAMUkO4A5of33b3cz64BlJ9LQEeRRIGRikvERPtUPF1UtiXbhGn-UIo3JYH6gPnqVH-FbupaZ4A9VriVnsXNImDTn8SYwKwPYlzVah1ZmstsfzEQSKSWHcgcrZd5ENCRhzaT8txzXVT6l6FI8eTbx=w442-h640&quot; width=&quot;442&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;配列を分割する&lt;/h2&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;3段目のフローでは、入力「&lt;b&gt;msg.payload&lt;/b&gt;」内の配列を、指定した要素数（サンプルでは1）ごとに分割します。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhkk2dDthEcA8kLGDS6IIVKHf1QPTMLKM9RTHXw4COJY4nf6ITaOLqOxsdSRLdvn2i4pARfDigwbV6HJwS9xfkyz66ngONLPSEI9YtzfHxYVG8qxwwfI7vWRLuvegjJNj80Juc_7CrHK3ZrBLB1NwvniGzEVQS3TqaJqooV6OcG7hddondlZBUxDCHn=s1004&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;930&quot; data-original-width=&quot;1004&quot; height=&quot;592&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhkk2dDthEcA8kLGDS6IIVKHf1QPTMLKM9RTHXw4COJY4nf6ITaOLqOxsdSRLdvn2i4pARfDigwbV6HJwS9xfkyz66ngONLPSEI9YtzfHxYVG8qxwwfI7vWRLuvegjJNj80Juc_7CrHK3ZrBLB1NwvniGzEVQS3TqaJqooV6OcG7hddondlZBUxDCHn=w640-h592&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;msg.payloadには文字列を要素に持つJSON配列が指定されています。&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhytxR_8QulF12vMVxP4pkXnB4ThUNcdlAV2-eNRD2FZ82NgO4czyNo0xkyOXIx2gSYnxYTDWdmAtmOertm_-T_ns9YFs7rzivV85pGUTxvD0hwCoKCyGtX5wKoHmczepcmdfKVDLUoidpcGTqCxXq-JsaKBATDWQlSXc82xqOBovb2CGXzcVwoKIMq=s1004&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;674&quot; data-original-width=&quot;1004&quot; height=&quot;430&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhytxR_8QulF12vMVxP4pkXnB4ThUNcdlAV2-eNRD2FZ82NgO4czyNo0xkyOXIx2gSYnxYTDWdmAtmOertm_-T_ns9YFs7rzivV85pGUTxvD0hwCoKCyGtX5wKoHmczepcmdfKVDLUoidpcGTqCxXq-JsaKBATDWQlSXc82xqOBovb2CGXzcVwoKIMq=w640-h430&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;これを実行すると、配列の要素ごとにログが出力されます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjctOeDgdbBkfYyllxh2F4E6hOdEKSEhUBgGyYtusYMIgmHLzqKt3p0vrEawVkLz5Jjclc69yXwUK_7KS_ta2-3chOU0_-SOEJSDPkpq7_NyeHcFMKPViSXkUiCBLIhxFy3OVf3g-oBiv89cWUSsLsHUkCtz_8zV2fcSmuAUlNbJlt5ZfsxQLRx7YY3=s608&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;594&quot; data-original-width=&quot;608&quot; height=&quot;391&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjctOeDgdbBkfYyllxh2F4E6hOdEKSEhUBgGyYtusYMIgmHLzqKt3p0vrEawVkLz5Jjclc69yXwUK_7KS_ta2-3chOU0_-SOEJSDPkpq7_NyeHcFMKPViSXkUiCBLIhxFy3OVf3g-oBiv89cWUSsLsHUkCtz_8zV2fcSmuAUlNbJlt5ZfsxQLRx7YY3=w400-h391&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;オブジェクトを分割する&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;最後の4段目のフローでは、入力「&lt;b&gt;msg.payload&lt;/b&gt;」内のJSONオブジェクトをkey/valueの要素ごとに分割します。加えて、分割後のmsgオブジェクトの「&lt;b&gt;msg.topic&lt;/b&gt;」にkeyに相当する文字列を格納します。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhlWeaiTW2T-cD6S3C2kHvM7euPRlro1YS_WfaT7dl6Wq2KhizvsgYD0LSX6CaQGl4qB0U5JvKpjXJ1clY3VtmksvfMQ6yaZAX3kuCsl4dQoXdi-3KpUkzaPdtdsZPUbBedLAMX_iLLqdejZPvrqouAQ1WbH7yMP6ALXlSSl-kxxXa0DwpIO-JqBABu=s992&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;922&quot; data-original-width=&quot;992&quot; height=&quot;594&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhlWeaiTW2T-cD6S3C2kHvM7euPRlro1YS_WfaT7dl6Wq2KhizvsgYD0LSX6CaQGl4qB0U5JvKpjXJ1clY3VtmksvfMQ6yaZAX3kuCsl4dQoXdi-3KpUkzaPdtdsZPUbBedLAMX_iLLqdejZPvrqouAQ1WbH7yMP6ALXlSSl-kxxXa0DwpIO-JqBABu=w640-h594&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;msg.payloadにはJSONオブジェクトが設定されています。&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhTG_qoh0Yk5jHJKTDgY4ZkH0-ei9wl5YwQd6ahJTq1Xdd5bp9TOrRrMuTl-yxAEvlLp67TyYCWnXcISK9OEsx2tnCOdqT4jmmi4t3XX41_2itnVWA_io8ZGP9XKAFcR74N9fkofUEw68HPdPPLoMfCAsXMElHjukwJ-GyMrUnw2sKn0ZX4-VDbMWz9=s996&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;698&quot; data-original-width=&quot;996&quot; height=&quot;448&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhTG_qoh0Yk5jHJKTDgY4ZkH0-ei9wl5YwQd6ahJTq1Xdd5bp9TOrRrMuTl-yxAEvlLp67TyYCWnXcISK9OEsx2tnCOdqT4jmmi4t3XX41_2itnVWA_io8ZGP9XKAFcR74N9fkofUEw68HPdPPLoMfCAsXMElHjukwJ-GyMrUnw2sKn0ZX4-VDbMWz9=w640-h448&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;これを実行すると、要素ごとにログが出力されます。上述のSplitノードの設定通り「&lt;b&gt;msg.topic&lt;/b&gt;」にkeyに相当する文字列が格納されていることと、「&lt;b&gt;msg.payload&lt;/b&gt;」にvalueに相当する数値が格納されていることが確認できます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhs0Wk2rsDDZNynIyHBrbLk6x2-wVayTck0tYNpqXtcYTC94spLj2jfhC2gGXXJwDArCltzdrkUgihC8O1rfpPVpPlz5SpLZhlt7fOOeWqydN5PvxUCVK_roLwicg3peqETXZzAwPcghZQ3IPjO-M8i3D2bNYo3Gb6MS6EqZxyYS6PzuH4NQnYVqcX2=s794&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;794&quot; data-original-width=&quot;624&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhs0Wk2rsDDZNynIyHBrbLk6x2-wVayTck0tYNpqXtcYTC94spLj2jfhC2gGXXJwDArCltzdrkUgihC8O1rfpPVpPlz5SpLZhlt7fOOeWqydN5PvxUCVK_roLwicg3peqETXZzAwPcghZQ3IPjO-M8i3D2bNYo3Gb6MS6EqZxyYS6PzuH4NQnYVqcX2=w502-h640&quot; width=&quot;502&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;まとめ&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;ここまで確認したことをまとめます。&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;msg.payloadに設定されている値の形式によって分割条件を指定できる&lt;/li&gt;&lt;li&gt;分割条件はいろいろある&lt;/li&gt;&lt;ul&gt;&lt;li&gt;文字列なら特定文字列や文字数&lt;/li&gt;&lt;li&gt;配列なら分割する要素数&lt;/li&gt;&lt;li&gt;JSONオブジェクトならオブジェクトの要素ごと&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://awwa500.blogspot.com/feeds/8380428405358479162/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://awwa500.blogspot.com/2022/02/node-red-split.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/8380428405358479162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/8380428405358479162'/><link rel='alternate' type='text/html' href='http://awwa500.blogspot.com/2022/02/node-red-split.html' title='Splitノードを使う'/><author><name>あわ</name><uri>http://www.blogger.com/profile/08571636318581967838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEita9XEgNaxQ4ADdiewkRFUFeoxmZai6CLQZATjQX-L0nXId0Y5ec3Ll5fS6SVwai6leN1h1b6HBLshcofSsd1MMS7LckRJjW1sxKlheshF8vt-z1xHSTb4KTcumz24Wcush9kCcoooyOHN860J5-vdT3sSIN4F4YN7M3J-aoY03kCuSC8r20h7zjjC=s72-w640-h474-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5587841204043490178.post-3127866770541069272</id><published>2022-02-08T17:54:00.000+09:00</published><updated>2022-02-08T17:54:00.614+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="node-red"/><title type='text'>Udpノードを使う</title><content type='html'>&lt;p&gt;ここのところずっと&lt;a href=&quot;https://nodered.org/&quot; target=&quot;_blank&quot;&gt;Node-RED&lt;/a&gt;のサンプルを見ながら各ノードの使い方を確認しています。&lt;a href=&quot;/2021/09/node-red-start.html&quot; target=&quot;_blank&quot;&gt;頭出しの記事はこちら&lt;/a&gt;をご確認ください。今回はUdpノードを見ていきます。構成はほとんどTcpノードのサンプルと同じです。通信プロトコルがUDPを使っているだけで、表面上はTCPノードのサンプルと変わりません。ということで、これ以降全部省略してもいいのですが、サンプルを全部舐めることに意義があるので、儀式的に記事を書きます。&lt;/p&gt;&lt;div&gt;&lt;h2&gt;UDPクライアントからメッセージを送信する&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;確認するサンプルは、「&lt;b&gt;読み込み &amp;gt; サンプル &amp;gt; flows &amp;gt; node-red &amp;gt; network &amp;gt; udp &amp;gt; 01 - Transfer data using UDP protocol&lt;/b&gt;」です。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhwGUgSIfogVsb5lVo4CGuAAlfWbvv5rtwZuEPUUVx1aNz1UnJL71-VQMSoEiVrR4dg46J6VGGEzqpJZAvpDhbv7fRUz8mxTtl_95r9fmn4oWDysDO2rI7cE2PI6rydAsLpIB2wn9sNpusoHGIdy_tSwPqSh8CoLNbtR6QLsaCJR53sYinFhFYBQacj=s910&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;386&quot; data-original-width=&quot;910&quot; height=&quot;272&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhwGUgSIfogVsb5lVo4CGuAAlfWbvv5rtwZuEPUUVx1aNz1UnJL71-VQMSoEiVrR4dg46J6VGGEzqpJZAvpDhbv7fRUz8mxTtl_95r9fmn4oWDysDO2rI7cE2PI6rydAsLpIB2wn9sNpusoHGIdy_tSwPqSh8CoLNbtR6QLsaCJR53sYinFhFYBQacj=w640-h272&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;上段のUdp outノードを確認すると、以下のように設定されています。&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;送信：UDPメッセージ&lt;/li&gt;&lt;li&gt;ポート：1881&lt;/li&gt;&lt;li&gt;アドレス：localhost, ipv4&lt;/li&gt;&lt;li&gt;ローカルポートをランダムに使用&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;localhostのポート番号1881番にipv4上でUDPメッセージを送信するようです。設定によってはブロードキャストメッセージやマルチキャストメッセージも送信できるようです。ipv6も選べます。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiaBvAzV_e8KDS6tL6d24-Q7G7ChvzSUtGTeq8bLhDlq3ssoAIjJD_qfty5Iz4l4LCmBb6Pnyf1fVIsa_lqm6IZidzQUeIZgLQ5y1lueIxU4MSCG2vTAz93GjcSkNUW3aNIWNXgoUe5gDKxtYWhFQpddLorXHYjuOlOGvTGKpfuTI0938wzOsWx0oqt=s1012&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;826&quot; data-original-width=&quot;1012&quot; height=&quot;522&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiaBvAzV_e8KDS6tL6d24-Q7G7ChvzSUtGTeq8bLhDlq3ssoAIjJD_qfty5Iz4l4LCmBb6Pnyf1fVIsa_lqm6IZidzQUeIZgLQ5y1lueIxU4MSCG2vTAz93GjcSkNUW3aNIWNXgoUe5gDKxtYWhFQpddLorXHYjuOlOGvTGKpfuTI0938wzOsWx0oqt=w640-h522&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;続いて、下段のUcp inノードを確認すると、以下のように設定されています。&lt;div&gt;&lt;ul&gt;&lt;li&gt;待ち受け：UDPメッセージ&lt;/li&gt;&lt;li&gt;ポート：1881&lt;/li&gt;&lt;li&gt;種類：ipv4&lt;/li&gt;&lt;li&gt;出力：文字列&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;こちらは、UDPメッセージを待ち受けるようです。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhaZ5b-8SfLCNcHQav9V7SyYbAxTr-bzjEFftjRb6NzH6C0UF538Y5zGTZELRxhcqF64He__73KMxGbiP91XivqrsVNj_dpF-rnA_h39dXSDALCMfsqJfUMWvwA0-52hQTVIo2YxzrCMw6DfhG8VS0Glh0ZeeK4SytjyuVY4KZ9pRu6JJj2zCKXg33d=s1000&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;792&quot; data-original-width=&quot;1000&quot; height=&quot;506&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhaZ5b-8SfLCNcHQav9V7SyYbAxTr-bzjEFftjRb6NzH6C0UF538Y5zGTZELRxhcqF64He__73KMxGbiP91XivqrsVNj_dpF-rnA_h39dXSDALCMfsqJfUMWvwA0-52hQTVIo2YxzrCMw6DfhG8VS0Glh0ZeeK4SytjyuVY4KZ9pRu6JJj2zCKXg33d=w640-h506&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Injectノードを実行すると、デバッグパネルに「&lt;b&gt;Hello, World!&lt;/b&gt;」のログが出力されます。上段のフローで送信したUDPメッセージを下段のフローで受信してログ出力しています。&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjcBFhEbc7p4H--o-erp7JN9ewS7D2OfFYh7uEnEZs8Ue5cUb_NA5kNywB5w71A2cIKN0A977llOWP4lMbRkAt1p4NoCX9qVLwpCQf92uUgXrN-E6HgVvMqERofJ6QHYF52qjPYE6gSvq3Y1HqatRCfU9xnlr4fmfCZw4MP7GOKUyNrB6WUy-B2Z2Fm=s618&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;312&quot; data-original-width=&quot;618&quot; height=&quot;324&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjcBFhEbc7p4H--o-erp7JN9ewS7D2OfFYh7uEnEZs8Ue5cUb_NA5kNywB5w71A2cIKN0A977llOWP4lMbRkAt1p4NoCX9qVLwpCQf92uUgXrN-E6HgVvMqERofJ6QHYF52qjPYE6gSvq3Y1HqatRCfU9xnlr4fmfCZw4MP7GOKUyNrB6WUy-B2Z2Fm=w640-h324&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;一応、動いてはいますが、これだけだとNode−RED内で完結してしまっているのでUDPサーバが動いている実感が湧きません。そこで、netcatコマンドを使ってUDPサーバにメッセージを送信してみます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;pre class=&quot;prettyprint&quot;&gt;$ netcat -u localhost 1881
unko
unko&lt;/pre&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;Node-REDのデバッグパネルを確認するとnetcatから送信した美しいメッセージが表示されています。以上で、UDPクライアントからメッセージを送信できました。&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjvUI82JADvExQJu3Vx4Zf_bGdSZoK3YmWi-O-FwbGSpy0H1Kj4pl5iYavPXel1PTsE8A1wn49wV6t-Rq0S28GcWYZ8kgJGjqUAgk7nxpaGMiKh1kIJQpjoVnJhw8n8tKwqSCcI9aXVCIz8XRtrgARX2HJo_FNelRtm2j8huVvDtWRWcXKYkS5GIVoD=s616&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;454&quot; data-original-width=&quot;616&quot; height=&quot;295&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjvUI82JADvExQJu3Vx4Zf_bGdSZoK3YmWi-O-FwbGSpy0H1Kj4pl5iYavPXel1PTsE8A1wn49wV6t-Rq0S28GcWYZ8kgJGjqUAgk7nxpaGMiKh1kIJQpjoVnJhw8n8tKwqSCcI9aXVCIz8XRtrgARX2HJo_FNelRtm2j8huVvDtWRWcXKYkS5GIVoD=w400-h295&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;まとめ&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;ここまで確認したことをまとめます。&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Udp outノードを利用してUDPメッセージが送信できる&lt;/li&gt;&lt;ul&gt;&lt;li&gt;ブロードキャストやマルチキャストメッセージも送信できるっぽい&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Udp inノードを利用してUDPメッセージを受信できる&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;以上です。&lt;/div&gt;&lt;div&gt;あれ？Node-RED上にメッセージを送信するUDPサーバは構築できない？Udp outノードで待ち受けする設定がないので無理なのかな。&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://awwa500.blogspot.com/feeds/3127866770541069272/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://awwa500.blogspot.com/2022/02/node-red-udp.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/3127866770541069272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/3127866770541069272'/><link rel='alternate' type='text/html' href='http://awwa500.blogspot.com/2022/02/node-red-udp.html' title='Udpノードを使う'/><author><name>あわ</name><uri>http://www.blogger.com/profile/08571636318581967838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEhwGUgSIfogVsb5lVo4CGuAAlfWbvv5rtwZuEPUUVx1aNz1UnJL71-VQMSoEiVrR4dg46J6VGGEzqpJZAvpDhbv7fRUz8mxTtl_95r9fmn4oWDysDO2rI7cE2PI6rydAsLpIB2wn9sNpusoHGIdy_tSwPqSh8CoLNbtR6QLsaCJR53sYinFhFYBQacj=s72-w640-h272-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5587841204043490178.post-4036907961751365759</id><published>2022-02-01T22:24:00.010+09:00</published><updated>2022-02-01T22:31:47.816+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="node-red"/><title type='text'>Tcpノードを使う（その3）</title><content type='html'>&lt;p&gt;ここのところずっと&lt;a href=&quot;https://nodered.org/&quot; target=&quot;_blank&quot;&gt;Node-RED&lt;/a&gt;のサンプルを見ながら各ノードの使い方を確認しています。&lt;a href=&quot;/2021/09/node-red-start.html&quot; target=&quot;_blank&quot;&gt;頭出しの記事はこちら&lt;/a&gt;をご確認ください。今回はTcpノードの最終回です。&lt;a href=&quot;/2022/01/node-red-tcp1.html&quot; target=&quot;_blank&quot;&gt;前々回の記事&lt;/a&gt;では、サーバからクライアントにメッセージを送信しました。&lt;a href=&quot;/2022/01/node-red-tcp1.html&quot; target=&quot;_blank&quot;&gt;前回の記事&lt;/a&gt;では、クライアントからサーバにメッセージを送信しました。今回は、クライアントからサーバにメッセージを送信し、そのコネクション上でサーバからクライアントにメッセージを返信します。普通のTCPクライアントとサーバのやり取りをまるっと実装します。&lt;/p&gt;&lt;div&gt;&lt;h2&gt;TCPクライアントとサーバ間でメッセージを送受信する&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;確認するサンプルは、「&lt;b&gt;読み込み &amp;gt; サンプル &amp;gt; flows &amp;gt; node-red &amp;gt; network &amp;gt; tcp &amp;gt; 03 - Send reply to client of TCP connection&lt;/b&gt;」です。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjkJCzUBWZv5vMWCfLFNoitcWAr4NSj0VzBr8r93VDX2KW519yf8d-mGGQ5GesppvwgEK2M0fKT5k7PFtG6i8F0Qd8EGzXbIT57wtobCLxvmeM6on3c8juAlkCkCQOv91hXnPVXz9SE_v-s7YWZ7sqPMUQu8Mff7FvLNtRm8SRgBvAud8-GcZGZdtr-=s1560&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;528&quot; data-original-width=&quot;1560&quot; height=&quot;216&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjkJCzUBWZv5vMWCfLFNoitcWAr4NSj0VzBr8r93VDX2KW519yf8d-mGGQ5GesppvwgEK2M0fKT5k7PFtG6i8F0Qd8EGzXbIT57wtobCLxvmeM6on3c8juAlkCkCQOv91hXnPVXz9SE_v-s7YWZ7sqPMUQu8Mff7FvLNtRm8SRgBvAud8-GcZGZdtr-=w640-h216&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;上段はサーバに対してリクエストを送信後、サーバからのメッセージの返信を待ち受けるクライアントのフローです。グレーのTcp requestノードを確認すると、以下のように設定されています。&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;サーバ：localhost&lt;/li&gt;&lt;li&gt;ポート：1883&lt;/li&gt;&lt;li&gt;戻り値：指定文字の受信時　\n&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjSQTgHYbCoQ1JQ26Pe2N2WQd7CvrgkXYWStwPd0UNCz88M5XOhYxXckY2aNmdQOJdx3WQ_Z43aE7CDtzLzqAuHzlCdnutMCo3ACwTtc8I8qxPR9YW44LSggOzEMPCW5Zf94HCSCbPX8fx2eRIfJ547RfnYVDaWh2vkKxPBW8eeYP8VkxuEZ-M5-N48=s998&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;528&quot; data-original-width=&quot;998&quot; height=&quot;338&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjSQTgHYbCoQ1JQ26Pe2N2WQd7CvrgkXYWStwPd0UNCz88M5XOhYxXckY2aNmdQOJdx3WQ_Z43aE7CDtzLzqAuHzlCdnutMCo3ACwTtc8I8qxPR9YW44LSggOzEMPCW5Zf94HCSCbPX8fx2eRIfJ547RfnYVDaWh2vkKxPBW8eeYP8VkxuEZ-M5-N48=w640-h338&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Injectノードでは「Hello, World!\n」という文字列をpayloadに指定して送信しています。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;一方、下段は接続を待ち受けるサーバサイドのフローです。Tcp inノードを確認すると、以下のように設定されています。&lt;div&gt;&lt;ul&gt;&lt;li&gt;種類：待ち受け&lt;/li&gt;&lt;li&gt;ポート：1883&lt;/li&gt;&lt;li&gt;出力：ストリーム文字列のペイロード&lt;/li&gt;&lt;li&gt;区切り文字：\n&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhTN0BA0TyWgED2DpZI2zjKmyYLrM0FRJMNtOWxye54ZAiIDplM_2jEm0P-zseO7N0eRUODwiRJyFejoc69uUM_aEQPhB-p975chwCWDFtEPkZg6GGHRacZe2B58jNSfPI2HcmfSLm0QzP_PK2SlNHrA07pvg4u5i77b96mqmZn-oYCsS2ktj5Mrqye=s1006&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;714&quot; data-original-width=&quot;1006&quot; height=&quot;454&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhTN0BA0TyWgED2DpZI2zjKmyYLrM0FRJMNtOWxye54ZAiIDplM_2jEm0P-zseO7N0eRUODwiRJyFejoc69uUM_aEQPhB-p975chwCWDFtEPkZg6GGHRacZe2B58jNSfPI2HcmfSLm0QzP_PK2SlNHrA07pvg4u5i77b96mqmZn-oYCsS2ktj5Mrqye=w640-h454&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;続いて、Changeノードを確認すると、msg.payloadの値を加工して、先頭に「Received: 」、末尾に改行コードを付加しています。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgdgmF2DjlHaNAuAYTsSQoUteTVHyvrmbFG2p8bLDlqyNAGURzY5GKHNsoMEpFPP45SbYLu2MMkARJrvxeRSAlprsIt1aE92ifB2JwqWrlzpc-MdFtIjp-WnAnbaGvjeEGobbfeg-3bWGN5O0ZnIamfI_SEYwhkUoA4yVpWTZz82e-leTRDfL-W3G_o=s1008&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;606&quot; data-original-width=&quot;1008&quot; height=&quot;384&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgdgmF2DjlHaNAuAYTsSQoUteTVHyvrmbFG2p8bLDlqyNAGURzY5GKHNsoMEpFPP45SbYLu2MMkARJrvxeRSAlprsIt1aE92ifB2JwqWrlzpc-MdFtIjp-WnAnbaGvjeEGobbfeg-3bWGN5O0ZnIamfI_SEYwhkUoA4yVpWTZz82e-leTRDfL-W3G_o=w640-h384&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;最後に、Tcp outノードは次のように設定されています。雰囲気的にmsg.payloadの内容をレスポンスとして返すんでしょうね。&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;種類：TCP応答&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEj-Ytfe5JnWX_Jxcwt_B-9vrz480kCZ3_Pm5laz1csTa_T40JrzWyZe4cuYem5-mwfc7zgIiPd3VQAnkFeQ0nCbx8e86BXIxLDwml7qoESSLk32ow-5sDMIN7Q38cF_Z0_FpLMeZJ6WPQK74oZGZa0zGZ4eG5qrKuR_9TtPazm13D7Zdx-yBQiqGoN6=s996&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;506&quot; data-original-width=&quot;996&quot; height=&quot;326&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEj-Ytfe5JnWX_Jxcwt_B-9vrz480kCZ3_Pm5laz1csTa_T40JrzWyZe4cuYem5-mwfc7zgIiPd3VQAnkFeQ0nCbx8e86BXIxLDwml7qoESSLk32ow-5sDMIN7Q38cF_Z0_FpLMeZJ6WPQK74oZGZa0zGZ4eG5qrKuR_9TtPazm13D7Zdx-yBQiqGoN6=w640-h326&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Injectノードを実行すると、デバッグパネルに「&lt;b&gt;Received:&amp;nbsp;Hello, World!\n&lt;/b&gt;」のログが出力されます。&lt;/div&gt;&lt;div&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;上段のフローで「Hello, World!」のメッセージをサーバに送信する&lt;/li&gt;&lt;li&gt;下段のフローでサーバがメッセージを受信し、メッセージを加工してクライアントに返信する&lt;/li&gt;&lt;li&gt;上段のフローでサーバが返したメッセージをクライアントで受信してログ出力する&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;という流れです。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjfqDHGz3DC3nlGWGJWHVhz06SGBfm5dEnFDIPVUf3pE4JkIU9Md4J5v6Mfou47tKcSZm8m7W1-mp8YUOVyVXIQ8S6Spt9b1f4P9NKDAlST0PkB4_0yY8WwUR_JVLRB_AtNMpC13kx5qveiIgDn-ALmjheAIqkyrC6DCs3SnWEJ-EvJtgNT-qiHfHBG=s620&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;320&quot; data-original-width=&quot;620&quot; height=&quot;330&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjfqDHGz3DC3nlGWGJWHVhz06SGBfm5dEnFDIPVUf3pE4JkIU9Md4J5v6Mfou47tKcSZm8m7W1-mp8YUOVyVXIQ8S6Spt9b1f4P9NKDAlST0PkB4_0yY8WwUR_JVLRB_AtNMpC13kx5qveiIgDn-ALmjheAIqkyrC6DCs3SnWEJ-EvJtgNT-qiHfHBG=w640-h330&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;例によって、これでも一応動いてはいますが、Node−RED内で完結してしまっているのでTCPサーバが動いている実感が湧きません。そこで、TelnetクライアントでTCPサーバに接続してメッセージの送受信を行ってみます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;と、その前に、下段のTcp inノードの区切り文字設定を以下のように「&lt;b&gt;\n&lt;/b&gt;」に変更しておきます。これはTelnetクライアントを動かすターミナルの改行コード設定と合わせるのが目的です。この設定が合っていないと、TelnetクライアントでEnterキーを押してもメッセージの送受信がうまく行われません。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxFWa-UH64MJyEjAzQObDs0m1r5m2__z5s2Tixz9t9VNkPIJ2mgDx31QJn4SCzwsvuJ6JMb4gYmYB9tLweK6tqtGMwAQ8-ZHI5w_0DRA_N4bHEnoIVUsqare3DUSpqyKbI1fsRLdSDVSw/s1012/Node-RED253.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;718&quot; data-original-width=&quot;1012&quot; height=&quot;454&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxFWa-UH64MJyEjAzQObDs0m1r5m2__z5s2Tixz9t9VNkPIJ2mgDx31QJn4SCzwsvuJ6JMb4gYmYB9tLweK6tqtGMwAQ8-ZHI5w_0DRA_N4bHEnoIVUsqare3DUSpqyKbI1fsRLdSDVSw/w640-h454/Node-RED253.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;この状態で、Telnetクライアントから「&lt;b&gt;localhost 1883&lt;/b&gt;」に接続して適当な文字列（ここでは「&lt;b&gt;fugo&lt;/b&gt;」）を入力してEnterキーを押下します。&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;pre class=&quot;prettyprint&quot;&gt;$ telnet -a localhost 1883
Trying 127.0.0.1...
Connected to localhost.
Escape character is &#39;^]&#39;.
fugo
Received: fugo
&lt;/pre&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;サーバから「&lt;b&gt;Received: fugo&lt;/b&gt;」と返信が返ってきましたね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;まとめ&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;ここまで確認したことを一旦まとめます。&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Tcp requestノードを利用するとメッセージの送信と返信の受信を行うTCPクライアントになります&lt;/li&gt;&lt;li&gt;Tcp inノードで「&lt;b&gt;待ち受け&lt;/b&gt;」て、Tcp outノードで「&lt;b&gt;TCP応答&lt;/b&gt;」を設定すると、クライアントの接続を待ち受けて、何らかの処理後にメッセージを返信するTCPサーバになります&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;この仕組を拡張すればWebサーバ、SMTPサーバ、FTPサーバなど、TCPベースのサーバは何でも作れそうです（誰もやらないと思いますが）。ということで、以上TCPノードシリーズでした。&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://awwa500.blogspot.com/feeds/4036907961751365759/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://awwa500.blogspot.com/2022/02/node-red-tcp3.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/4036907961751365759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/4036907961751365759'/><link rel='alternate' type='text/html' href='http://awwa500.blogspot.com/2022/02/node-red-tcp3.html' title='Tcpノードを使う（その3）'/><author><name>あわ</name><uri>http://www.blogger.com/profile/08571636318581967838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEjkJCzUBWZv5vMWCfLFNoitcWAr4NSj0VzBr8r93VDX2KW519yf8d-mGGQ5GesppvwgEK2M0fKT5k7PFtG6i8F0Qd8EGzXbIT57wtobCLxvmeM6on3c8juAlkCkCQOv91hXnPVXz9SE_v-s7YWZ7sqPMUQu8Mff7FvLNtRm8SRgBvAud8-GcZGZdtr-=s72-w640-h216-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5587841204043490178.post-5642118119193377951</id><published>2022-01-28T21:50:00.000+09:00</published><updated>2022-01-28T21:50:00.745+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="node-red"/><title type='text'>Tcpノードを使う（その2）</title><content type='html'>&lt;p&gt;ここのところずっと&lt;a href=&quot;https://nodered.org/&quot; target=&quot;_blank&quot;&gt;Node-RED&lt;/a&gt;のサンプルを見ながら各ノードの使い方を確認しています。&lt;a href=&quot;/2021/09/node-red-start.html&quot; target=&quot;_blank&quot;&gt;頭出しの記事はこちら&lt;/a&gt;をご確認ください。今回はTcpノードの続きです。&lt;a href=&quot;/2022/01/node-red-tcp1.html&quot; target=&quot;_blank&quot;&gt;前回の記事&lt;/a&gt;と同様、TCPサーバとクライアントの間でメッセージを送受信しますが、今回はメッセージの流れる方向が逆で、TCPクライアントからサーバにメッセージを送信します。&lt;/p&gt;&lt;div&gt;&lt;h2&gt;TCPクライアントからサーバにメッセージを送信する&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;確認するサンプルは、「&lt;b&gt;読み込み &amp;gt; サンプル &amp;gt; flows &amp;gt; node-red &amp;gt; network &amp;gt; tcp &amp;gt; 02 - Connect to tcp in server&lt;/b&gt;」です。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh5zTenOcTeCvspimeB6Nu8JyffjwrXmeW2UrlaNuiEostO6TIMPpk0x9eonUA82WnIf-4QWSZLpfgM7wTZOhPcFgU7vVVsEVrRaartbIu_Tbo-BepLYTewSM0J0-qpu3k6m4ofobPe5uX4L3i_8hoEhaCH_4_PqyUEG5hafhmEB1niqrCU6Kctz2vg=s982&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;380&quot; data-original-width=&quot;982&quot; height=&quot;248&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh5zTenOcTeCvspimeB6Nu8JyffjwrXmeW2UrlaNuiEostO6TIMPpk0x9eonUA82WnIf-4QWSZLpfgM7wTZOhPcFgU7vVVsEVrRaartbIu_Tbo-BepLYTewSM0J0-qpu3k6m4ofobPe5uX4L3i_8hoEhaCH_4_PqyUEG5hafhmEB1niqrCU6Kctz2vg=w640-h248&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;上段のTcp outノードを確認すると、以下のように設定されています。&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;種類：接続&lt;/li&gt;&lt;li&gt;ホスト：localhost&lt;/li&gt;&lt;li&gt;ポート：1882&lt;/li&gt;&lt;li&gt;メッセージを送信するたびに接続を切断：ON&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;localhostのポート番号1882番に接続してメッセージを送信するクライアントのフローです。メッセージを送信したら接続を切断します。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhJuO0cHNSvD5MimRhzzT1CNjSdDeHnu_3-d_lr26_2C5XZfiOAW2lDuDm7BmK3d6qUT-Q7XUVkwaOsygYdLdmhAeS6bqFh-DapE0RT5NHI8LR-Xt6qO2bECZyO8WT6dDPcLFmD4uPmD8inSL1txgpRgYtb6TYRSFrXCl-szEHiSZW1ocHNVCadc7rg=s1008&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;696&quot; data-original-width=&quot;1008&quot; height=&quot;442&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhJuO0cHNSvD5MimRhzzT1CNjSdDeHnu_3-d_lr26_2C5XZfiOAW2lDuDm7BmK3d6qUT-Q7XUVkwaOsygYdLdmhAeS6bqFh-DapE0RT5NHI8LR-Xt6qO2bECZyO8WT6dDPcLFmD4uPmD8inSL1txgpRgYtb6TYRSFrXCl-szEHiSZW1ocHNVCadc7rg=w640-h442&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;続いて、下段のTcp inノードを確認すると、以下のように設定されています。&lt;div&gt;&lt;ul&gt;&lt;li&gt;種類：待ち受け&lt;/li&gt;&lt;li&gt;ポート：1882&lt;/li&gt;&lt;li&gt;出力：単一文字列のペイロード&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;こちらは、TCPクライアントからの接続を待ち受けるサーバサイドのフローです。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEj-dNx78q3ts3_Lhaou8yfJJo04T9CBaQIzSMKK2BVzYF8VqzDgivT-Zeb_q1-dH0og-0bpd8M05HxRsgWvvzjExOpNUP4eJ9NKccmBhQrgule54PLEwJrdZ0yOGYG1-2NwLtJR40jeDAkRBBUBvvGQU5lHqO-LIjdk1OxLbPzq0zGK7GbfZ_w2JmA2=s1004&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;638&quot; data-original-width=&quot;1004&quot; height=&quot;406&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEj-dNx78q3ts3_Lhaou8yfJJo04T9CBaQIzSMKK2BVzYF8VqzDgivT-Zeb_q1-dH0og-0bpd8M05HxRsgWvvzjExOpNUP4eJ9NKccmBhQrgule54PLEwJrdZ0yOGYG1-2NwLtJR40jeDAkRBBUBvvGQU5lHqO-LIjdk1OxLbPzq0zGK7GbfZ_w2JmA2=w640-h406&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Injectノードを実行すると、デバッグパネルに「&lt;b&gt;Hello World!&lt;/b&gt;」のログが出力されます。上段のフローで実装したクライアントから下段のフローで実装したTCPサーバにメッセージを送信します。サーバが受信したメッセージをログ出力しています。&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjcBFhEbc7p4H--o-erp7JN9ewS7D2OfFYh7uEnEZs8Ue5cUb_NA5kNywB5w71A2cIKN0A977llOWP4lMbRkAt1p4NoCX9qVLwpCQf92uUgXrN-E6HgVvMqERofJ6QHYF52qjPYE6gSvq3Y1HqatRCfU9xnlr4fmfCZw4MP7GOKUyNrB6WUy-B2Z2Fm=s618&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;312&quot; data-original-width=&quot;618&quot; height=&quot;324&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjcBFhEbc7p4H--o-erp7JN9ewS7D2OfFYh7uEnEZs8Ue5cUb_NA5kNywB5w71A2cIKN0A977llOWP4lMbRkAt1p4NoCX9qVLwpCQf92uUgXrN-E6HgVvMqERofJ6QHYF52qjPYE6gSvq3Y1HqatRCfU9xnlr4fmfCZw4MP7GOKUyNrB6WUy-B2Z2Fm=w640-h324&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;一応、動いてはいますが、これだけだとNode−RED内で完結してしまっているのでTCPサーバが動いている実感が湧きません。そこで、TelnetクライアントでTCPサーバに接続してメッセージを送信してみます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;と、その前に、下段のTcp inノードの出力設定を以下のように「ストリーム」に変更しておきます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEho7-JJV2IayXMnVjMdWE12sbbx8aEGqc9WMXxbUNycJKrpv59qPnkKUakDBGWeIC3slzBY4BYwagibWhBKn6Lr5X4i9hcZLUfZKOWH0T4YOTpJLBNzAfDDLTtIDlJFnd45H9w3MxBzJ8vEkwJfCTO1TLpXnaKKHS8zMGzYDcY21-g3CE8Sy3cHu5sp=s1014&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;716&quot; data-original-width=&quot;1014&quot; height=&quot;452&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEho7-JJV2IayXMnVjMdWE12sbbx8aEGqc9WMXxbUNycJKrpv59qPnkKUakDBGWeIC3slzBY4BYwagibWhBKn6Lr5X4i9hcZLUfZKOWH0T4YOTpJLBNzAfDDLTtIDlJFnd45H9w3MxBzJ8vEkwJfCTO1TLpXnaKKHS8zMGzYDcY21-g3CE8Sy3cHu5sp=w640-h452&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;この状態で、Telnetクライアントから「&lt;b&gt;localhost 1882&lt;/b&gt;」に接続して適当な文字列（ここでは「&lt;b&gt;hello tcp!&lt;/b&gt;」）を入力してEnterキーを押下します。&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;pre class=&quot;prettyprint&quot;&gt;$ telnet -a localhost 1882
Trying 127.0.0.1...
Connected to localhost.
Escape character is &#39;^]&#39;.
hello tcp!
&lt;/pre&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;Node-REDのデバッグパネルを確認すると、Telnetで入力したメッセージがログ出力されることが確認できます。&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgF2VohWXWn6lYyiL5KY4EjAam9RxaQ-CerJDrvjwUy1y5OjTMEUQmpA8tDn6fH_xVMaRWDIUPqP0CS2PIV-H6Fb5IRFqZ3lrj4JURJpXvHk4xdh5xQS4hKWF5cbt-VcW_ibqudvl4tHI95_GyRgF48qvsnYVMHlSkp7eebCheaQLvPCXxhI5oFUK8V=s624&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;314&quot; data-original-width=&quot;624&quot; height=&quot;322&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgF2VohWXWn6lYyiL5KY4EjAam9RxaQ-CerJDrvjwUy1y5OjTMEUQmpA8tDn6fH_xVMaRWDIUPqP0CS2PIV-H6Fb5IRFqZ3lrj4JURJpXvHk4xdh5xQS4hKWF5cbt-VcW_ibqudvl4tHI95_GyRgF48qvsnYVMHlSkp7eebCheaQLvPCXxhI5oFUK8V=w640-h322&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;以上で、Telnetクライアントから送信したメッセージをTCPサーバで受信できることが確認できました。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;まとめ&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;ここまで確認したことを一旦まとめます。&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Tcp outノードの種類を「&lt;b&gt;接続&lt;/b&gt;」に設定すると、TCPサーバに接続してメッセージを送信するクライアントになります&lt;/li&gt;&lt;li&gt;Tcp inノードの種類を「&lt;b&gt;待ち受け&lt;/b&gt;」に設定すると、クライアントからメッセージを受信するサーバになります&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Tcpノードシリーズは次回が最終回です。&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://awwa500.blogspot.com/feeds/5642118119193377951/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://awwa500.blogspot.com/2022/01/node-red-tcp2.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/5642118119193377951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/5642118119193377951'/><link rel='alternate' type='text/html' href='http://awwa500.blogspot.com/2022/01/node-red-tcp2.html' title='Tcpノードを使う（その2）'/><author><name>あわ</name><uri>http://www.blogger.com/profile/08571636318581967838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEh5zTenOcTeCvspimeB6Nu8JyffjwrXmeW2UrlaNuiEostO6TIMPpk0x9eonUA82WnIf-4QWSZLpfgM7wTZOhPcFgU7vVVsEVrRaartbIu_Tbo-BepLYTewSM0J0-qpu3k6m4ofobPe5uX4L3i_8hoEhaCH_4_PqyUEG5hafhmEB1niqrCU6Kctz2vg=s72-w640-h248-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5587841204043490178.post-8391843370172140597</id><published>2022-01-24T22:26:00.001+09:00</published><updated>2022-01-24T22:26:34.377+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="node-red"/><title type='text'>Tcpノードを使う（その1）</title><content type='html'>&lt;p&gt;ここのところずっと&lt;a href=&quot;https://nodered.org/&quot; target=&quot;_blank&quot;&gt;Node-RED&lt;/a&gt;のサンプルを見ながら各ノードの使い方を確認しています。&lt;a href=&quot;/2021/09/node-red-start.html&quot; target=&quot;_blank&quot;&gt;頭出しの記事はこちら&lt;/a&gt;をご確認ください。今回からTcpノードを見ていきます。ざっと見た感じ、サンプルフローの構成はWebSocketノード似ており、TCPサーバとクライアント間でメッセージの送受信ができます。&lt;/p&gt;&lt;div&gt;&lt;h2&gt;TCPクライアントにメッセージを送信する&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;確認するサンプルは、「&lt;b&gt;読み込み &amp;gt; サンプル &amp;gt; flows &amp;gt; node-red &amp;gt; network &amp;gt; tcp &amp;gt; 01 - Connect to tcp out server&lt;/b&gt;」です。Node-RED上で動作するTCPサーバからクライアントにメッセージを送信します。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgeHResElBxSsL7GKzQ6oVqAeFo1Pt3KYXG9cneSxTVvfLQ8w4BPsBdVrkVdu5IGnYoLQQ2Ps_V4nTFc8ynnpo6jkrUjxf3Cq6jt1rzMCy-Jx9m276SVdFUL-gWfbPA5ElYkBUbcXyAGB3ptssTPPklZT_cpZKPBashoaLMeN0QLuBL_wukWDLbHW2g=s1008&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;420&quot; data-original-width=&quot;1008&quot; height=&quot;266&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgeHResElBxSsL7GKzQ6oVqAeFo1Pt3KYXG9cneSxTVvfLQ8w4BPsBdVrkVdu5IGnYoLQQ2Ps_V4nTFc8ynnpo6jkrUjxf3Cq6jt1rzMCy-Jx9m276SVdFUL-gWfbPA5ElYkBUbcXyAGB3ptssTPPklZT_cpZKPBashoaLMeN0QLuBL_wukWDLbHW2g=w640-h266&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;上段のTcp outノードを確認すると、以下のように設定されています。&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;種類：待ち受け&lt;/li&gt;&lt;li&gt;ポート：1881&lt;/li&gt;&lt;li&gt;メッセージを送信するたびに接続を切断&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;ポート番号1881番で待ち受けるTCPサーバって感じでしょうか。メッセージを送信したら毎回接続を切断するようです。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgGmzknLr_HyQj_Xn2noezwCFmm03ejFok4off_dPygCtGH7vvfBtkGhtLKN8b8oKwNu9YHmBbfZ7Hp5PziP8zY81RTCjNSMulUMbXACBpSzM7O2gw-ApriP0YNNzPe2KwKdpUhpaRcwPAjaP1UbCOBU46i74_tJ0pKWLKyn2sYDSjbHjxUFi0CNRi7=s996&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;586&quot; data-original-width=&quot;996&quot; height=&quot;376&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgGmzknLr_HyQj_Xn2noezwCFmm03ejFok4off_dPygCtGH7vvfBtkGhtLKN8b8oKwNu9YHmBbfZ7Hp5PziP8zY81RTCjNSMulUMbXACBpSzM7O2gw-ApriP0YNNzPe2KwKdpUhpaRcwPAjaP1UbCOBU46i74_tJ0pKWLKyn2sYDSjbHjxUFi0CNRi7=w640-h376&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;続いて、下段のTcp inノードを確認すると、以下のように設定されています。&lt;div&gt;&lt;ul&gt;&lt;li&gt;種類：接続&lt;/li&gt;&lt;li&gt;ポート：1881&lt;/li&gt;&lt;li&gt;ホスト：localhost&lt;/li&gt;&lt;li&gt;出力：単一文字列のペイロード&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;こちらは、TCPサーバに接続するクライアントサイドのフローでしょうか。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEggUQ3E4-5xXJ6ky23-UAI9gsJG3wkxnDQoNRMjDBP9ky4Vpd3LLmg3Z1Z9qmG8z3S5GPNaY9ySncFx2ll6P31VBxAI_hKAR9gX3ZZaUQ61mYBVJZKEU13zubfOI_BfeIzM2FPjUET3ZZkQ0PmkyDd5mBXqUb0h4RwHxoICWHQP8LvG3zqViRRV9Bys=s1008&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;718&quot; data-original-width=&quot;1008&quot; height=&quot;456&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEggUQ3E4-5xXJ6ky23-UAI9gsJG3wkxnDQoNRMjDBP9ky4Vpd3LLmg3Z1Z9qmG8z3S5GPNaY9ySncFx2ll6P31VBxAI_hKAR9gX3ZZaUQ61mYBVJZKEU13zubfOI_BfeIzM2FPjUET3ZZkQ0PmkyDd5mBXqUb0h4RwHxoICWHQP8LvG3zqViRRV9Bys=w640-h456&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Injectノードを実行すると、デバッグパネルに「&lt;b&gt;Hello World!&lt;/b&gt;」のログが出力されます。上段のフローでポート1881番で待ち受けるTCPサーバにメッセージを送信して、下段のフローで受信したメッセージをログ出力しています。イメージ的には、上下段のフローの間にTCPサーバがいて、Node-REDのフロー上でメッセージの送信と受信ができたということになります。&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjcBFhEbc7p4H--o-erp7JN9ewS7D2OfFYh7uEnEZs8Ue5cUb_NA5kNywB5w71A2cIKN0A977llOWP4lMbRkAt1p4NoCX9qVLwpCQf92uUgXrN-E6HgVvMqERofJ6QHYF52qjPYE6gSvq3Y1HqatRCfU9xnlr4fmfCZw4MP7GOKUyNrB6WUy-B2Z2Fm=s618&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;312&quot; data-original-width=&quot;618&quot; height=&quot;324&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjcBFhEbc7p4H--o-erp7JN9ewS7D2OfFYh7uEnEZs8Ue5cUb_NA5kNywB5w71A2cIKN0A977llOWP4lMbRkAt1p4NoCX9qVLwpCQf92uUgXrN-E6HgVvMqERofJ6QHYF52qjPYE6gSvq3Y1HqatRCfU9xnlr4fmfCZw4MP7GOKUyNrB6WUy-B2Z2Fm=w640-h324&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;一応、動いてはいますが、これだけだとNode−RED内で完結してしまっているのでTCPサーバが動いている実感が湧きません。そこで、TelnetクライアントでTCPサーバが送信するメッセージを受信してみます。Telnetクライアントでlocalhost:1881に接続します。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;
  &lt;div&gt;
    &lt;pre class=&quot;prettyprint&quot;&gt;$ telnet -a localhost 1881
Trying 127.0.0.1...
Connected to localhost.
Escape character is &#39;^]&#39;.&lt;/pre&gt;
  &lt;/div&gt;
  &lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;この状態でさきほどと同様Injectノードを実行すると、以下のようにTelnetクライアント上に「&lt;b&gt;Hello, World!&lt;/b&gt;」の文字列が出力され、接続が切断されます。&lt;/div&gt;
    &lt;div&gt;
    &lt;pre class=&quot;prettyprint&quot;&gt;$ telnet -a localhost 1881
Trying 127.0.0.1...
Connected to localhost.
Escape character is &#39;^]&#39;.
Hello, World!Connection closed by foreign host.
$&lt;/pre&gt;
  &lt;/div&gt;
  &lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;以上で、TCPサーバが送信するメッセージをTelnetクライアントで受信できることが確認できました。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;まとめ&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;ここまで確認したことを一旦まとめます。&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Tcp outノードの種類を「&lt;b&gt;待ち受け&lt;/b&gt;」に設定すると、TCPクライアントの接続を待ち受けるサーバになります&lt;/li&gt;&lt;li&gt;Tcp inノードの種類を「&lt;b&gt;接続&lt;/b&gt;」に設定すると、サーバからメッセージを受信するクライアントになります&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;次回は、TCPクライアントからメッセージを送信してみます。&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://awwa500.blogspot.com/feeds/8391843370172140597/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://awwa500.blogspot.com/2022/01/node-red-tcp1.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/8391843370172140597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/8391843370172140597'/><link rel='alternate' type='text/html' href='http://awwa500.blogspot.com/2022/01/node-red-tcp1.html' title='Tcpノードを使う（その1）'/><author><name>あわ</name><uri>http://www.blogger.com/profile/08571636318581967838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEgeHResElBxSsL7GKzQ6oVqAeFo1Pt3KYXG9cneSxTVvfLQ8w4BPsBdVrkVdu5IGnYoLQQ2Ps_V4nTFc8ynnpo6jkrUjxf3Cq6jt1rzMCy-Jx9m276SVdFUL-gWfbPA5ElYkBUbcXyAGB3ptssTPPklZT_cpZKPBashoaLMeN0QLuBL_wukWDLbHW2g=s72-w640-h266-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5587841204043490178.post-9059818238268808593</id><published>2022-01-18T00:11:00.001+09:00</published><updated>2022-01-18T00:11:45.678+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="node-red"/><title type='text'>WebSocketノードを使う（その2）</title><content type='html'>&lt;p&gt;&amp;nbsp;ここのところずっと&lt;a href=&quot;https://nodered.org/&quot; target=&quot;_blank&quot;&gt;Node-RED&lt;/a&gt;のサンプルを見ながら各ノードの使い方を確認しています。&lt;a href=&quot;/2021/09/node-red-start.html&quot; target=&quot;_blank&quot;&gt;頭出しの記事はこちら&lt;/a&gt;をご確認ください。&lt;a href=&quot;/2022/01/node-red-websocket1.html&quot; target=&quot;_blank&quot;&gt;前回&lt;/a&gt;に続きWebSocketノードを見ていきます。&lt;/p&gt;&lt;div&gt;&lt;h2&gt;WebSocketサーバからメッセージを受信する&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;確認するサンプルは、「&lt;b&gt;読み込み &amp;gt; サンプル &amp;gt; flows &amp;gt; node-red &amp;gt; network &amp;gt; websocket &amp;gt; 02 - Connect to websoket out server&lt;/b&gt;」です。Node-RED上のWebSocketサーバが送信するメッセージをクライアントで受信します。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEihXl1oGQb2BXS-zZnM3KmIf9iinxF2QuTcBMcptdXkBPFpRfFRg-h7pZ4RV5wNnFZQD8ReUc36BoZDv2WERUePio7xglPL36H3i3RjNUVMKeCqiyFSz17qmwgnfvdE8lEeaeWNxBnYK5vX7bhzlDCJhUKoJJHxA6fQAw8EzxBTspAmop9P3GvgyVDw=s1072&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;348&quot; data-original-width=&quot;1072&quot; height=&quot;208&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEihXl1oGQb2BXS-zZnM3KmIf9iinxF2QuTcBMcptdXkBPFpRfFRg-h7pZ4RV5wNnFZQD8ReUc36BoZDv2WERUePio7xglPL36H3i3RjNUVMKeCqiyFSz17qmwgnfvdE8lEeaeWNxBnYK5vX7bhzlDCJhUKoJJHxA6fQAw8EzxBTspAmop9P3GvgyVDw=w640-h208&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;上段のWebSocket outノードを確認すると、以下のように設定されています。&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;種類：待ち受け&lt;/li&gt;&lt;li&gt;URL：/ws2&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;WebSocketサーバ「&lt;b&gt;/ws2&lt;/b&gt;」でクライアントからの接続を待ち受ける、いわゆるサーバサイドのフローです。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhKk2onCToIjfepUVrF8N-G9ob-jXeoACpWOTwijOdvYGD0DQMvefXkImQkTpfZriSEy918D0MV1kMBnCDoof2y_zhLcQcwcbVoUNYzTjHjTpx0bz69kPNJnj9qSeJqoNjzmYO1h8IIsftfvHov56Sa2uC0wgGYZ6lJ3pEC9t4cM1KqI0GayLY-EQEF=s1006&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;514&quot; data-original-width=&quot;1006&quot; height=&quot;326&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhKk2onCToIjfepUVrF8N-G9ob-jXeoACpWOTwijOdvYGD0DQMvefXkImQkTpfZriSEy918D0MV1kMBnCDoof2y_zhLcQcwcbVoUNYzTjHjTpx0bz69kPNJnj9qSeJqoNjzmYO1h8IIsftfvHov56Sa2uC0wgGYZ6lJ3pEC9t4cM1KqI0GayLY-EQEF=w640-h326&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;続いて、下段のWebSocket inノードを確認すると、以下のように設定されています。&lt;div&gt;&lt;ul&gt;&lt;li&gt;種類：接続&lt;/li&gt;&lt;li&gt;パス：ws://localhost:1880/ws2&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;こちらは、「&lt;b&gt;ws://localhost:1880/ws2&lt;/b&gt;」からメッセージを受信するWebSocketのクライアントサイドのフローです。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjJb58_34g4yPHEjkaKxCA9m1KBMb0XAqQJ8Ed8ZwHyvcCZ0qnVJQ9ZYNVl-riwT6zmLuhz4XHq9sQuOK9tpZ0GmZWJtXlXBJlUK8RcnW2uV1eZjpCn1MzQ6eehczTaXMQp28SRC4NS1Mnn1BhRbvuk2_tRxna0zGZXJ9mymXgoKhyCzFUvSWhM-37S=s1006&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;516&quot; data-original-width=&quot;1006&quot; height=&quot;328&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjJb58_34g4yPHEjkaKxCA9m1KBMb0XAqQJ8Ed8ZwHyvcCZ0qnVJQ9ZYNVl-riwT6zmLuhz4XHq9sQuOK9tpZ0GmZWJtXlXBJlUK8RcnW2uV1eZjpCn1MzQ6eehczTaXMQp28SRC4NS1Mnn1BhRbvuk2_tRxna0zGZXJ9mymXgoKhyCzFUvSWhM-37S=w640-h328&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Injectノードを実行すると、デバッグパネルに「&lt;b&gt;Goodbye, World!&lt;/b&gt;」のログが出力されます。上段のフローでクライアントからの接続を待ち受けるWebSocketサーバを起動して、クライアントに対してメッセージを送信します。下段のフローではWebSocketクライアントが接続したサーバが送信したメッセージをログ出力しています。こちらも&lt;a href=&quot;/2022/01/node-red-websocket1.html&quot; target=&quot;_blank&quot;&gt;前回&lt;/a&gt;の記事と同様、イメージ的には、上下段のフローの間にWebSocketサーバがいて、Node-REDのフロー上でメッセージの送信と受信ができたということになります。&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhLD3geqdFG5KSwkprX4sW3k1_ufix0CSutJwUCz3nBtaZ8fT43olVFIcYq74JJz7iUygGGZ2f1VEKZToLCN6K_Hm1Q5pM3E5ZRClHRH-R8akcS-wBNwOV3nB4I3eVdUTGqFIQ5c6S2MfeP80Nh66fjiEkCDYmDAxFBjr3157LptSJzlc8QlkriGsqX=s620&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;310&quot; data-original-width=&quot;620&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhLD3geqdFG5KSwkprX4sW3k1_ufix0CSutJwUCz3nBtaZ8fT43olVFIcYq74JJz7iUygGGZ2f1VEKZToLCN6K_Hm1Q5pM3E5ZRClHRH-R8akcS-wBNwOV3nB4I3eVdUTGqFIQ5c6S2MfeP80Nh66fjiEkCDYmDAxFBjr3157LptSJzlc8QlkriGsqX=w640-h320&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;これで一応、動いてはいますが、これだけだとNode−RED内で完結してしまっているのでWebSocketが動いている実感が湧きません。そこで、ブラウザからWebSocketサーバに接続してメッセージを受信してみます。ということで、さきほど確認したサンプルに以下のフローを加えます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiv6Q4FBoRkflpAW9PWDuLQk_R2VghEUp4iAFxH7f_Noc-2QWp5Z1OIvaGc-3xhT7PbKTpZD4l0NC6UfyG7r2HCI9SlcMdpW6FFEUvpQJP9Lct3EabZ8YT59LwMMrcuolk8Jr9RcJDY3emIe8ncDmOl9TYElw73J_hGgCgYPLaCFedU4ayUxBb0sCqW=s954&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;236&quot; data-original-width=&quot;954&quot; height=&quot;158&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiv6Q4FBoRkflpAW9PWDuLQk_R2VghEUp4iAFxH7f_Noc-2QWp5Z1OIvaGc-3xhT7PbKTpZD4l0NC6UfyG7r2HCI9SlcMdpW6FFEUvpQJP9Lct3EabZ8YT59LwMMrcuolk8Jr9RcJDY3emIe8ncDmOl9TYElw73J_hGgCgYPLaCFedU4ayUxBb0sCqW=w640-h158&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Templateノードは以下のように設定します。違いは接続するWebSocketサーバのURL（ws://localhost/&lt;b&gt;ws2&lt;/b&gt;）のみです。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhPua1f7gBLL8yLtm67Gg4SnB-SMeJJS1PKca9-o4Ov-ecqoJebcBc4i6jD_xeFqtCx9jObP_8Aj44RYd6en2ShejC_hv2i_TWaXurPi7UJDdznz2zZ8-yieQWwtxlsrYnwkfJ5fDPg840aExw0C7iIUawL5z3JwGBejx06TXCbJ-nP_EWICOVAJ31n=s1622&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1336&quot; data-original-width=&quot;1622&quot; height=&quot;528&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhPua1f7gBLL8yLtm67Gg4SnB-SMeJJS1PKca9-o4Ov-ecqoJebcBc4i6jD_xeFqtCx9jObP_8Aj44RYd6en2ShejC_hv2i_TWaXurPi7UJDdznz2zZ8-yieQWwtxlsrYnwkfJ5fDPg840aExw0C7iIUawL5z3JwGBejx06TXCbJ-nP_EWICOVAJ31n=w640-h528&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ブラウザから「&lt;b&gt;http://localhost:1880/hello&lt;/b&gt;」にアクセスすると、ブラウザのコンソール上に「&lt;b&gt;onopen&lt;/b&gt;」のログが出力されています。WebSocketサーバに接続ができているようです。ここで、Node-REDのフロー上でInjectノードを実行すると、WebSocketサーバ「&lt;b&gt;/ws2&lt;/b&gt;」に接続しているすべてのクライアントに対して「&lt;b&gt;Goodbye, World!&lt;/b&gt;」のメッセージを送信します。Node-REDのデバッグパネルを確認すると、「&lt;b&gt;onmessage: Goodbye, World!&lt;/b&gt;」のメッセージが出力されるはずです。これで、Node-RED上のサーバが送信したメッセージをブラウザで受信できることを確認できました。&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;まとめ&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;ここまで確認したことをまとめます。&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;WebSocket outノードの種類を「&lt;b&gt;待ち受け&lt;/b&gt;」に設定すると、WebSocketで接続を待ち受けるサーバになります&lt;/li&gt;&lt;li&gt;WebSocket inノードの種類を「&lt;b&gt;接続&lt;/b&gt;」に設定すると、WebSocketサーバにメッセージを送信するクライアントになります&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;ちょうど前回ご紹介したWebSocket outノードとWebSocket inノードの設定を入れ替えることでメッセージの送信と受信の関係が入れ替わります。&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://awwa500.blogspot.com/feeds/9059818238268808593/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://awwa500.blogspot.com/2022/01/node-red-websocket2.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/9059818238268808593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/9059818238268808593'/><link rel='alternate' type='text/html' href='http://awwa500.blogspot.com/2022/01/node-red-websocket2.html' title='WebSocketノードを使う（その2）'/><author><name>あわ</name><uri>http://www.blogger.com/profile/08571636318581967838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEihXl1oGQb2BXS-zZnM3KmIf9iinxF2QuTcBMcptdXkBPFpRfFRg-h7pZ4RV5wNnFZQD8ReUc36BoZDv2WERUePio7xglPL36H3i3RjNUVMKeCqiyFSz17qmwgnfvdE8lEeaeWNxBnYK5vX7bhzlDCJhUKoJJHxA6fQAw8EzxBTspAmop9P3GvgyVDw=s72-w640-h208-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5587841204043490178.post-4768659868045861898</id><published>2022-01-12T22:03:00.008+09:00</published><updated>2022-01-12T22:04:56.946+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="node-red"/><title type='text'>WebSocketノードを使う（その1）</title><content type='html'>&lt;p&gt;ここのところずっと&lt;a href=&quot;https://nodered.org/&quot; target=&quot;_blank&quot;&gt;Node-RED&lt;/a&gt;のサンプルを見ながら各ノードの使い方を確認しています。&lt;a href=&quot;/2021/09/node-red-start.html&quot; target=&quot;_blank&quot;&gt;頭出しの記事はこちら&lt;/a&gt;をご確認ください。今回からWebSocketノードを見ていきます。&lt;/p&gt;&lt;div&gt;&lt;h2&gt;WebSocketクライアントが送信するメッセージを待ち受ける&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;確認するサンプルは、「&lt;b&gt;読み込み &amp;gt; サンプル &amp;gt; flows &amp;gt; node-red &amp;gt; network &amp;gt; websocket &amp;gt; 01 - Connect to websoket in server&lt;/b&gt;」です。WebSocketクライアントが送信するメッセージをNode-REDで待ち受けます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgvhisdKu0XVGB2EI4tT6RPiTtv6k_dAr_kx_EG3l7ows5x3eyYdV07t2AydcT4H_kIw5rDw9qDY1Cj2eOjRSZoOQUWd3W13K_ZjkW-7QGzxR5yEKE8CCka_EyUAVGPPa5Bw5crfLn2JC08W6CrajliCE5pn1Cu82RxlwB2GZWFBbrVSVEdN9cjUFmt=s1042&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;374&quot; data-original-width=&quot;1042&quot; height=&quot;230&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgvhisdKu0XVGB2EI4tT6RPiTtv6k_dAr_kx_EG3l7ows5x3eyYdV07t2AydcT4H_kIw5rDw9qDY1Cj2eOjRSZoOQUWd3W13K_ZjkW-7QGzxR5yEKE8CCka_EyUAVGPPa5Bw5crfLn2JC08W6CrajliCE5pn1Cu82RxlwB2GZWFBbrVSVEdN9cjUFmt=w640-h230&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;上段のWebSocket outノードを確認すると、以下のように設定されています。&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;種類：接続&lt;/li&gt;&lt;li&gt;URL：ws://localhost:1880/ws1&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;メッセージをWebSocketサーバ「&lt;b&gt;ws://localhost:1880/ws1&lt;/b&gt;」に送信する、いわゆるクライアントサイドのフローです。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgkhET0wG1pkMNfA9GCx04X3ye-wJwxMSXZfJ7gypzZmiVg1WBLzJsXvzQKUh9t4XQBNXS0urpHIGSIUSHdftq-KQ-JwaDKzSqOucvXzNjUaHHDAtfO0y1I7L3uuVS5Cf1bYEDIs3f_5RnABl5US1-y7rQsa6qr6J9T3AGPLSKPt_9SqcTOWFVfZhpR=s1000&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;516&quot; data-original-width=&quot;1000&quot; height=&quot;330&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgkhET0wG1pkMNfA9GCx04X3ye-wJwxMSXZfJ7gypzZmiVg1WBLzJsXvzQKUh9t4XQBNXS0urpHIGSIUSHdftq-KQ-JwaDKzSqOucvXzNjUaHHDAtfO0y1I7L3uuVS5Cf1bYEDIs3f_5RnABl5US1-y7rQsa6qr6J9T3AGPLSKPt_9SqcTOWFVfZhpR=w640-h330&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;続いて、下段のWebSocket inノードを確認すると、以下のように設定されています。&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;種類：待ち受け&lt;/li&gt;&lt;li&gt;パス：/ws1&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;こちらは、「&lt;b&gt;/ws1&lt;/b&gt;」でメッセージを待ち受けるWebSocketのサーバサイドのフローです。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh1-uCVQ_MV6NPUa3xLMFq-SHrv7VDOX8qdRuSL1iCdBGlDc3yQj_U17wreYRciIAfN7bd2VQGn5vBD9ye2_kYiJ7Ov4gzQq20PoNvfsuduGJeP9NyxiR78ncptAvKvHAHtKSkixuxDUsHOfNSwCQZ6iXfj7lpOLoQJTlHdz8nldm_dZizIKfZNKEzI=s1004&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;514&quot; data-original-width=&quot;1004&quot; height=&quot;328&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh1-uCVQ_MV6NPUa3xLMFq-SHrv7VDOX8qdRuSL1iCdBGlDc3yQj_U17wreYRciIAfN7bd2VQGn5vBD9ye2_kYiJ7Ov4gzQq20PoNvfsuduGJeP9NyxiR78ncptAvKvHAHtKSkixuxDUsHOfNSwCQZ6iXfj7lpOLoQJTlHdz8nldm_dZizIKfZNKEzI=w640-h328&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Injectノードを実行すると、デバッグパネルに「&lt;b&gt;Hello World!&lt;/b&gt;」のログが出力されます。上段のフローでWebSocketサーバにメッセージを送信して、下段のフローでWebSocketサーバが受信したメッセージをログ出力しています。イメージ的には、上下段のフローの間にWebSocketサーバがいて、Node-REDのフロー上でメッセージの送信と受信ができたということになります。&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjcBFhEbc7p4H--o-erp7JN9ewS7D2OfFYh7uEnEZs8Ue5cUb_NA5kNywB5w71A2cIKN0A977llOWP4lMbRkAt1p4NoCX9qVLwpCQf92uUgXrN-E6HgVvMqERofJ6QHYF52qjPYE6gSvq3Y1HqatRCfU9xnlr4fmfCZw4MP7GOKUyNrB6WUy-B2Z2Fm=s618&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;312&quot; data-original-width=&quot;618&quot; height=&quot;324&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjcBFhEbc7p4H--o-erp7JN9ewS7D2OfFYh7uEnEZs8Ue5cUb_NA5kNywB5w71A2cIKN0A977llOWP4lMbRkAt1p4NoCX9qVLwpCQf92uUgXrN-E6HgVvMqERofJ6QHYF52qjPYE6gSvq3Y1HqatRCfU9xnlr4fmfCZw4MP7GOKUyNrB6WUy-B2Z2Fm=w640-h324&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;一応、動いてはいますが、これだけだとNode−RED内で完結してしまっているのでWebSocketが動いている実感が湧きません。そこで、ブラウザからWebSocketサーバにメッセージを送信してみます。ということで、さきほど確認したサンプルに以下のフローを加えます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiv6Q4FBoRkflpAW9PWDuLQk_R2VghEUp4iAFxH7f_Noc-2QWp5Z1OIvaGc-3xhT7PbKTpZD4l0NC6UfyG7r2HCI9SlcMdpW6FFEUvpQJP9Lct3EabZ8YT59LwMMrcuolk8Jr9RcJDY3emIe8ncDmOl9TYElw73J_hGgCgYPLaCFedU4ayUxBb0sCqW=s954&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;236&quot; data-original-width=&quot;954&quot; height=&quot;158&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiv6Q4FBoRkflpAW9PWDuLQk_R2VghEUp4iAFxH7f_Noc-2QWp5Z1OIvaGc-3xhT7PbKTpZD4l0NC6UfyG7r2HCI9SlcMdpW6FFEUvpQJP9Lct3EabZ8YT59LwMMrcuolk8Jr9RcJDY3emIe8ncDmOl9TYElw73J_hGgCgYPLaCFedU4ayUxBb0sCqW=w640-h158&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Templateノードは以下のように設定します。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgAjNWEhCXBEgzRC_8m9xMUArf1YLwxA0R1Xb4j-2qogpBVBN7rpoNVMfFv0lXo0hd_qYBg3rrNTqT9qf9m-Y1YXpHPTxSD5hK-F91wG6Zr8onbKgkKZwn2QG2zMpQtkn2khRe0Ol0htYksfN9f8gYI9AFWbRccLhDzP-JV_-G82fXsDCOTHIjfchI4=s1572&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;836&quot; data-original-width=&quot;1572&quot; height=&quot;340&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgAjNWEhCXBEgzRC_8m9xMUArf1YLwxA0R1Xb4j-2qogpBVBN7rpoNVMfFv0lXo0hd_qYBg3rrNTqT9qf9m-Y1YXpHPTxSD5hK-F91wG6Zr8onbKgkKZwn2QG2zMpQtkn2khRe0Ol0htYksfN9f8gYI9AFWbRccLhDzP-JV_-G82fXsDCOTHIjfchI4=w640-h340&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;ブラウザから「&lt;b&gt;http://localhost:1880/hello&lt;/b&gt;」にアクセスすると、画面上には「&lt;b&gt;送信&lt;/b&gt;」ボタンが表示されます。ブラウザのコンソールを確認すると「&lt;b&gt;onopen&lt;/b&gt;」のログが出力されています。WebSocketサーバに接続ができているようです。ここで「&lt;b&gt;送信&lt;/b&gt;」ボタンを選択すると、WebSocketサーバ「&lt;b&gt;ws://localhost:1880/ws1&lt;/b&gt;」に「&lt;b&gt;send message from browser&lt;/b&gt;」のメッセージを送信します。Node-REDのデバッグパネルを確認すると、同じメッセージが出力されるはずです。これで、ブラウザが送信したメッセージをNode-RED上のWebSocketサーバで受信できることを確認しました。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgp4P7HWV7F-TtGW-GtOFTjcbjNZc0Z1ZrExQW5gBzatnDEP0SdUOxTkfnl_oYU9t1ewQprbp3eECYFZLo6nynTQIB_1xRFuzhLPoQEmfFE8gSW_n6WOamuhi8nLeqO0-JnoFYjiZQPG5y2aUAvHcd10WaJJR6NF_v9RzPruSZqD3Vz8_Tdh4UNEb9V=s612&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;160&quot; data-original-width=&quot;612&quot; height=&quot;168&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgp4P7HWV7F-TtGW-GtOFTjcbjNZc0Z1ZrExQW5gBzatnDEP0SdUOxTkfnl_oYU9t1ewQprbp3eECYFZLo6nynTQIB_1xRFuzhLPoQEmfFE8gSW_n6WOamuhi8nLeqO0-JnoFYjiZQPG5y2aUAvHcd10WaJJR6NF_v9RzPruSZqD3Vz8_Tdh4UNEb9V=w640-h168&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;まとめ&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;ここまで確認したことを一旦まとめます。&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;WebSocket outノードの種類を「&lt;b&gt;接続&lt;/b&gt;」に設定すると、WebSocketでメッセージを送信するクライアントになります&lt;/li&gt;&lt;li&gt;WebSocket inノードの種類を「&lt;b&gt;待ち受け&lt;/b&gt;」に設定すると、メッセージを待ち受けるWebSocketサーバになります&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;次回は、WebSocketサーバからメッセージを送信してみます。&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://awwa500.blogspot.com/feeds/4768659868045861898/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://awwa500.blogspot.com/2022/01/node-red-websocket1.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/4768659868045861898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/4768659868045861898'/><link rel='alternate' type='text/html' href='http://awwa500.blogspot.com/2022/01/node-red-websocket1.html' title='WebSocketノードを使う（その1）'/><author><name>あわ</name><uri>http://www.blogger.com/profile/08571636318581967838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEgvhisdKu0XVGB2EI4tT6RPiTtv6k_dAr_kx_EG3l7ows5x3eyYdV07t2AydcT4H_kIw5rDw9qDY1Cj2eOjRSZoOQUWd3W13K_ZjkW-7QGzxR5yEKE8CCka_EyUAVGPPa5Bw5crfLn2JC08W6CrajliCE5pn1Cu82RxlwB2GZWFBbrVSVEdN9cjUFmt=s72-w640-h230-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5587841204043490178.post-7464071302843858304</id><published>2022-01-07T22:39:00.001+09:00</published><updated>2022-01-07T22:39:45.998+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="node-red"/><title type='text'>HTTPノードを使う（その4）</title><content type='html'>&lt;p&gt;ここのところずっと&lt;a href=&quot;https://nodered.org/&quot; target=&quot;_blank&quot;&gt;Node-RED&lt;/a&gt;のサンプルを見ながら各ノードの使い方を確認しています。&lt;a href=&quot;/2021/09/node-red-start.html&quot; target=&quot;_blank&quot;&gt;頭出しの記事はこちら&lt;/a&gt;をご確認ください。年が明けましたが、新年の展望もご挨拶もなく、引き続きマシーンのようにサンプルフローを見ていきます。今回はHTTPノード最終回です。&lt;/p&gt;&lt;div&gt;&lt;h2&gt;Cookieを扱う&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;確認するサンプルは、「&lt;b&gt;読み込み &amp;gt; サンプル &amp;gt; flows &amp;gt; node-red &amp;gt; network &amp;gt; http &amp;gt; 07 - Working with cookies&lt;/b&gt;」です。フローは3段階に別れており、それぞれ以下の動作をします。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjmeUqonNp0IWtVT7dDfxiD1pWzn6oKaznjtmlDu09anx26VfhCbgLnJkB9n1phsFEjA4ai2MJggewqDScQUOyehh0fORv9riEen197J7ms0kQlabWLdz6EYRKQwlLlLZbh_Nl7QKiC4p9aZzfVDLyogvh7dqyaZ27EvuuwV2T08VVa6ylSyivYL9RX=s1708&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;510&quot; data-original-width=&quot;1708&quot; height=&quot;192&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjmeUqonNp0IWtVT7dDfxiD1pWzn6oKaznjtmlDu09anx26VfhCbgLnJkB9n1phsFEjA4ai2MJggewqDScQUOyehh0fORv9riEen197J7ms0kQlabWLdz6EYRKQwlLlLZbh_Nl7QKiC4p9aZzfVDLyogvh7dqyaZ27EvuuwV2T08VVa6ylSyivYL9RX=w640-h192&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3&gt;/hello-cookie：cookieデータにアクセスしてHTMLに埋め込んで返却&lt;/h3&gt;&lt;p&gt;上段は、cookieの中身をHTMLに埋め込んで返すフローです。説明文にある通りブラウザから「&lt;b&gt;http://localhost:1880/hello-cookie&lt;/b&gt;」にアクセスすると以下のページが表示されます。&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi067yjvZs3kmB69DPwt9H28SKM57N72Zir_NKwrRRtsSC3P7bfw8_0A3y6lqfLYd72JNpeGOC2mUz5nYiubCAy3D3qRXmEtWGJfJunm-J2JmLSyHq9POImHzvhvUUsmpi8KS8uFPClhv4U1ewR6pU5dF_3z6maGxhMfPU-Ms4DpvDEIsO4YsBbgJVk=s336&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;336&quot; data-original-width=&quot;318&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi067yjvZs3kmB69DPwt9H28SKM57N72Zir_NKwrRRtsSC3P7bfw8_0A3y6lqfLYd72JNpeGOC2mUz5nYiubCAy3D3qRXmEtWGJfJunm-J2JmLSyHq9POImHzvhvUUsmpi8KS8uFPClhv4U1ewR6pU5dF_3z6maGxhMfPU-Ms4DpvDEIsO4YsBbgJVk=s320&quot; width=&quot;303&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;フローの中身を確認すると、Functionノードで「&lt;b&gt;msg.req.cookies&lt;/b&gt;」の内容をJSON文字列化してmsg.payloadに代入しています。msg.payloadは、この後のTemplateノードでHTMLに埋め込まれます。&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgMnuKhoKiYRt1A_GrfpPml1eI2LKTA53stgHqqQntEJAjenSyhz_qt4Xt6HCfwnNVI1g9FWIMbx3WWQK3ZajaGJtWR4m05jq2aQzVNnsz_kMeBFFF5dO1-nii0yAK1q0u8iJzvi8RD4qnfcFnI1R4iclgPMZsmxweu9ObFuymCzRv8v_lnzcF_wfsa=s1278&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;524&quot; data-original-width=&quot;1278&quot; height=&quot;262&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgMnuKhoKiYRt1A_GrfpPml1eI2LKTA53stgHqqQntEJAjenSyhz_qt4Xt6HCfwnNVI1g9FWIMbx3WWQK3ZajaGJtWR4m05jq2aQzVNnsz_kMeBFFF5dO1-nii0yAK1q0u8iJzvi8RD4qnfcFnI1R4iclgPMZsmxweu9ObFuymCzRv8v_lnzcF_wfsa=w640-h262&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;h3&gt;/hello-cookie/add：cookieにデータを追加&lt;/h3&gt;&lt;div&gt;ブラウザ画面上に表示されている「&lt;b&gt;Add a cookie&lt;/b&gt;」リンク（http://localhost:1880/hello-cookie/add）を選択すると中段のフローが開始され、cookieに適当なキーバリュー値が追加されます。&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEikCtyNBc7rE6xkMlDIHYc7cIwxurzYcwhV3Dd8mMGZNa2zbg1Fk2m94g7vcLvUa8-ObbnHpgnm3vHYmoZLaDF81dYdXdGP8lIHTLRbJO9Pa6zaTzk01WrKZA0xCMNRCWAHVLEeIB6bphoXBL81-lx1WwVfrNxdVoJ6rzKIU6UJ9mb6debaqY-OWHC4=s328&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;328&quot; data-original-width=&quot;318&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEikCtyNBc7rE6xkMlDIHYc7cIwxurzYcwhV3Dd8mMGZNa2zbg1Fk2m94g7vcLvUa8-ObbnHpgnm3vHYmoZLaDF81dYdXdGP8lIHTLRbJO9Pa6zaTzk01WrKZA0xCMNRCWAHVLEeIB6bphoXBL81-lx1WwVfrNxdVoJ6rzKIU6UJ9mb6debaqY-OWHC4=s320&quot; width=&quot;310&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjSsVzim5HuF7kuAPuUJbJnTYqc1jLYgx2B7lHWqYaMkKwZfts5lpa0tDSjOcyGtFsUhhZ6tksKZrvQusYpwosEtg6oKnbwFA5YpzOalIF0uqSiNDeNF9ov5gClNJCDd6hEJ6ygQQdYHCWgfrSeqBJjrFAGyMyiiQ7z3DTw26BiSQdSjP5rLLD_z7os=s472&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;404&quot; data-original-width=&quot;472&quot; height=&quot;274&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjSsVzim5HuF7kuAPuUJbJnTYqc1jLYgx2B7lHWqYaMkKwZfts5lpa0tDSjOcyGtFsUhhZ6tksKZrvQusYpwosEtg6oKnbwFA5YpzOalIF0uqSiNDeNF9ov5gClNJCDd6hEJ6ygQQdYHCWgfrSeqBJjrFAGyMyiiQ7z3DTw26BiSQdSjP5rLLD_z7os=s320&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;中段のFunctionノードを確認すると、「&lt;b&gt;msg.cookie&lt;/b&gt;」にキーとしてランダム生成した文字列と、値として現在時刻を登録しています。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhYPaAXTSdzBoR0uX-3C0N5cLL60T1xj0hHhAT6AIQ0KmHU_6w-XTEHRo8TxjnhOfTrONCUASSfUqmly2wQY_CQHWI5IcZWhdiY0ovJaUan5e_S0p29PnbfwA3EQWwrT9zuVq2sCivkXI5pkR2t3amApIp6qZMmNulrboV8HrQ4hFKRITGXg8H646YF=s1392&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;542&quot; data-original-width=&quot;1392&quot; height=&quot;250&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhYPaAXTSdzBoR0uX-3C0N5cLL60T1xj0hHhAT6AIQ0KmHU_6w-XTEHRo8TxjnhOfTrONCUASSfUqmly2wQY_CQHWI5IcZWhdiY0ovJaUan5e_S0p29PnbfwA3EQWwrT9zuVq2sCivkXI5pkR2t3amApIp6qZMmNulrboV8HrQ4hFKRITGXg8H646YF=w640-h250&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;その後、ブラウザにリダイレクトを指示するため、「&lt;b&gt;statusCode = 302&lt;/b&gt;」、「&lt;b&gt;msg.headers.location =&amp;nbsp;&lt;/b&gt;&lt;b&gt;/hello-cookie&lt;/b&gt;」を設定して返却します。これにより最初のフローに戻ります。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjxHcSk_aj7UcU_jfqJlPcu8SSUMJ6HtM1hR28ZctblVhSohKlDZwLvwusltZtBhrAcrYByL5xWJ1eDPTVrOGF2C5la0LeaKlhtuMFCaBqi6AoejkD7uS1SaK76FOGbyv_AVKXhbd1LtqxG8-kTU8nJSVrcbFqaUc3FdORMRuU_jUbHzUHampl1p_D2=s1006&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;974&quot; data-original-width=&quot;1006&quot; height=&quot;620&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjxHcSk_aj7UcU_jfqJlPcu8SSUMJ6HtM1hR28ZctblVhSohKlDZwLvwusltZtBhrAcrYByL5xWJ1eDPTVrOGF2C5la0LeaKlhtuMFCaBqi6AoejkD7uS1SaK76FOGbyv_AVKXhbd1LtqxG8-kTU8nJSVrcbFqaUc3FdORMRuU_jUbHzUHampl1p_D2=w640-h620&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;/hello-cookie/clear：cookieをクリア&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;ブラウザ画面上で「&lt;b&gt;Clear Cookies&lt;/b&gt;」リンク（http://localhost:1880/hello-cookie/clear）を選択すると下段のフローが開始されます。下段のFunctionノードで「&lt;b&gt;msg.cookies&lt;/b&gt;」を空にしています。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjbyEZU9nDoPRASm9hpI70XaXdFKuWObQ8InwC8zcNSJS_oCxfKZul8CGABMWfZ2r3IJ-y9hiZoRkPGnZML5mv3fYdP20rfI9XToiG5TiY3wiU1hUkAAxT9VGyUPqRgJl2JDHLwv-SG3Bf0PZ0p5FQSXRX2_F2m_XEYOrGCSJozdxwAe1ZF-0MKwwz1=s2130&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;756&quot; data-original-width=&quot;2130&quot; height=&quot;228&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjbyEZU9nDoPRASm9hpI70XaXdFKuWObQ8InwC8zcNSJS_oCxfKZul8CGABMWfZ2r3IJ-y9hiZoRkPGnZML5mv3fYdP20rfI9XToiG5TiY3wiU1hUkAAxT9VGyUPqRgJl2JDHLwv-SG3Bf0PZ0p5FQSXRX2_F2m_XEYOrGCSJozdxwAe1ZF-0MKwwz1=w640-h228&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;まとめ&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;ここまで確認したことをまとめます。&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;クライアントからアクセスを受けた際のフローでは、「&lt;b&gt;msg.req.cookies&lt;/b&gt;」でcookieデータにアクセスできます&lt;/li&gt;&lt;li&gt;クライアントにレスポンスを返すフローでは、「&lt;b&gt;msg.cookies&lt;/b&gt;」にキーバリュー形式で値を設定してHTTP OUTノードに渡すことでcookieデータに変更を加えることができます&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;以上HTTPノードは終了です。&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://awwa500.blogspot.com/feeds/7464071302843858304/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://awwa500.blogspot.com/2022/01/node-red-http4.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/7464071302843858304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/7464071302843858304'/><link rel='alternate' type='text/html' href='http://awwa500.blogspot.com/2022/01/node-red-http4.html' title='HTTPノードを使う（その4）'/><author><name>あわ</name><uri>http://www.blogger.com/profile/08571636318581967838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEjmeUqonNp0IWtVT7dDfxiD1pWzn6oKaznjtmlDu09anx26VfhCbgLnJkB9n1phsFEjA4ai2MJggewqDScQUOyehh0fORv9riEen197J7ms0kQlabWLdz6EYRKQwlLlLZbh_Nl7QKiC4p9aZzfVDLyogvh7dqyaZ27EvuuwV2T08VVa6ylSyivYL9RX=s72-w640-h192-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5587841204043490178.post-5930330210717787966</id><published>2021-12-27T00:13:00.000+09:00</published><updated>2021-12-27T00:13:53.807+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="node-red"/><title type='text'>HTTPノードを使う（その3）</title><content type='html'>&lt;p&gt;ここのところずっと&lt;a href=&quot;https://nodered.org/&quot; target=&quot;_blank&quot;&gt;Node-RED&lt;/a&gt;のサンプルを見ながら各ノードの使い方を確認しています。&lt;a href=&quot;/2021/09/node-red-start.html&quot; target=&quot;_blank&quot;&gt;頭出しの記事はこちら&lt;/a&gt;をご確認ください。前回に引き続き、機械的にHTTPノードのサンプルフローを見ていきます。&lt;/p&gt;&lt;div&gt;&lt;h2&gt;ファイルを送受信する&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;確認するサンプルは、「&lt;b&gt;読み込み &amp;gt; サンプル &amp;gt; flows &amp;gt; node-red &amp;gt; network &amp;gt; http &amp;gt; 06 - Post file to a flow&lt;/b&gt;」です。フローは2段階に別れており、それぞれ以下の動作をします。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjDw9UNn_wouodyE3MomNODqLLaeE03dlG8vM5_Q9Ak1EGatiIR6Pt8s3IvrUf3N-tUzMI3FPY6ZUhIDqdXcvdoRmlvthfJsTyBXSANLF3e-BFkjK8oF9V9rlw0AGvtCowPJxWJqq4bBGyMozz9OvkBEYqr0K1QTAosZnaNWVn0GPDUl3CtpWkqwzBm=s1264&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;588&quot; data-original-width=&quot;1264&quot; height=&quot;298&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjDw9UNn_wouodyE3MomNODqLLaeE03dlG8vM5_Q9Ak1EGatiIR6Pt8s3IvrUf3N-tUzMI3FPY6ZUhIDqdXcvdoRmlvthfJsTyBXSANLF3e-BFkjK8oF9V9rlw0AGvtCowPJxWJqq4bBGyMozz9OvkBEYqr0K1QTAosZnaNWVn0GPDUl3CtpWkqwzBm=w640-h298&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;上部フロー：ファイルアップロード用フォーム生成&lt;/h3&gt;&lt;p style=&quot;text-align: left;&quot;&gt;ファイルのアップロード用ページを表示するためのフローです。パス「&lt;b&gt;/hello-upload&lt;/b&gt;」でGETメソッドによるアクセスを待ち受けています。ブラウザから「&lt;b&gt;http://localhost:1880/hello-upload&lt;/b&gt;」にアクセスすると以下のページを表示します。&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhu9hDgwlnpZaRquAr1vDto_8BnPQyEvC69im7ws8P8j0iwAVDk7Peaqr6mVV8vwHX9KW7rK0xTa8n62Jb33_NpZ-5rUcO2hSik-5TB6SW1TPhYlVy8Mbo8JmL3JB_0JY8Icjw0qHJe00VT8fRypykzUzq4wWeh7QgH4YTfgCsm6lew4GpV2fGJMlE-=s872&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;156&quot; data-original-width=&quot;872&quot; height=&quot;114&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhu9hDgwlnpZaRquAr1vDto_8BnPQyEvC69im7ws8P8j0iwAVDk7Peaqr6mVV8vwHX9KW7rK0xTa8n62Jb33_NpZ-5rUcO2hSik-5TB6SW1TPhYlVy8Mbo8JmL3JB_0JY8Icjw0qHJe00VT8fRypykzUzq4wWeh7QgH4YTfgCsm6lew4GpV2fGJMlE-=w640-h114&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;HTMLボディ部は上部フローのTemplateノードで生成しています。&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEg4Tcjvi45bYNRFOWdZsHk9AxbTycWJ07EFRBkGIAsAimuENBgZ7IEUhnx5gj3MGVjD7b3uw5QTUjZV0zcl7-9mEqv77gZmkclXtBSXLCfQcsRQDdd4ggQ4JPphwRSDr6K5N0pxPTNW0dPEfOJhPDU4Cni5IwiLeCAoeeSGxW3qKmPSThBs2oURp7bc=s1330&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;956&quot; data-original-width=&quot;1330&quot; height=&quot;460&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEg4Tcjvi45bYNRFOWdZsHk9AxbTycWJ07EFRBkGIAsAimuENBgZ7IEUhnx5gj3MGVjD7b3uw5QTUjZV0zcl7-9mEqv77gZmkclXtBSXLCfQcsRQDdd4ggQ4JPphwRSDr6K5N0pxPTNW0dPEfOJhPDU4Cni5IwiLeCAoeeSGxW3qKmPSThBs2oURp7bc=w640-h460&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;ブラウザ画面上に表示されている「&lt;b&gt;選択...&lt;/b&gt;」ボタンを選択するとファイル選択ダイアログが表示されるので、適当なファイルを選択して、ブラウザ画面上の「&lt;b&gt;OK&lt;/b&gt;」ボタンを選択すると、上述のHTMLの通り、選択したファイルをパス「&lt;b&gt;/hello-uplad&lt;/b&gt;」にPOSTします。&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiMeGJfsXBV9N89-_AtDTPEaNQOQToxhAFU20wFKaz4U3rWp_5n4eJWb60LfMgMhTkGiNJfMspmIUrcXXWKXtJD9cIKVZA6lnOgXN_u0nJZaTtcnATRqCSnwFhZQidskp1kR-Umrsv2DQHxXH7i2vlc1PnffDA27KvDKMcinJqX5mjHfIIRadCgOiKH=s690&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;154&quot; data-original-width=&quot;690&quot; height=&quot;142&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiMeGJfsXBV9N89-_AtDTPEaNQOQToxhAFU20wFKaz4U3rWp_5n4eJWb60LfMgMhTkGiNJfMspmIUrcXXWKXtJD9cIKVZA6lnOgXN_u0nJZaTtcnATRqCSnwFhZQidskp1kR-Umrsv2DQHxXH7i2vlc1PnffDA27KvDKMcinJqX5mjHfIIRadCgOiKH=w640-h142&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;下部フロー：アップロードされたファイルを受信&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;上部フローにてアップロードされたファイルを受信するフローです。パス「&lt;b&gt;/hello-upload&lt;/b&gt;」でPOSTメソッドによるアクセスを待ち受けています。ファイルがアップロードされるとブラウザ画面上に「&lt;b&gt;Hello &amp;lt;ファイル名&amp;gt;&lt;/b&gt;」を表示します。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgDqGHBiM-KuUQ2UCbIeFOIVYP60gBnAtt1Id0b4nqHbs0b842G2qwmWITohu297ZcL_kxVYeIDuwZ1EQauT73YV0NWUN7jEScJR5DGXvhIG6NACS84h8KH4fG6YQmdO66f2iPmQ6UjnOI-dO1FkYzWAKPUG9w6s4dnS-z1b_94_VVaBoTxH90q-guW=s672&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;146&quot; data-original-width=&quot;672&quot; height=&quot;88&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgDqGHBiM-KuUQ2UCbIeFOIVYP60gBnAtt1Id0b4nqHbs0b842G2qwmWITohu297ZcL_kxVYeIDuwZ1EQauT73YV0NWUN7jEScJR5DGXvhIG6NACS84h8KH4fG6YQmdO66f2iPmQ6UjnOI-dO1FkYzWAKPUG9w6s4dnS-z1b_94_VVaBoTxH90q-guW=w400-h88&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;ページの内容は下部フローのTemplateノードで生成しています。「&lt;b&gt;{{req.files.0.originalname}}&lt;/b&gt;」という表記を使ってPOSTデータ内の1つ目のファイル名にアクセスしています。&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgWTj4FlMcSG-Qvr5VYlA5wKH-BW1jlYZ1yeQZQeW7oDEwkk7p9d4ovXZL8dxhku3Fuyn2iULRz2nvZlv9HOti2E1SzSWVolYnAIUI7lP5p_sdmYwXXtZAcbQ0tB4UlbDpqaPlXhvhJ9LdsN2dWr6d89uLkseLvKoGi5U01EIolLYZLZyIaoGBS3mfh=s1124&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;714&quot; data-original-width=&quot;1124&quot; height=&quot;406&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgWTj4FlMcSG-Qvr5VYlA5wKH-BW1jlYZ1yeQZQeW7oDEwkk7p9d4ovXZL8dxhku3Fuyn2iULRz2nvZlv9HOti2E1SzSWVolYnAIUI7lP5p_sdmYwXXtZAcbQ0tB4UlbDpqaPlXhvhJ9LdsN2dWr6d89uLkseLvKoGi5U01EIolLYZLZyIaoGBS3mfh=w640-h406&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;reqオブジェクトに他にどんなプロパティがあるのかはhttp inノードに載っています。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgcQU9w1P1tZJeT6glSKKdrJ0yueozX9_-ge-Bgg2k6_rl7WckzJow3GRiPuIDwrwSzoS-tAHQ8S7E89LZyVBgguF64M_KOKR2pB3q5TQy9B-m3auEygpidYeNxEzT4KNV8RFXWCGPznGx7YyammHvM9_Ffsuzmnvqtp5Rqer2jc3hOyZ2d0qwbkHHY=s1480&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1480&quot; data-original-width=&quot;618&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgcQU9w1P1tZJeT6glSKKdrJ0yueozX9_-ge-Bgg2k6_rl7WckzJow3GRiPuIDwrwSzoS-tAHQ8S7E89LZyVBgguF64M_KOKR2pB3q5TQy9B-m3auEygpidYeNxEzT4KNV8RFXWCGPznGx7YyammHvM9_Ffsuzmnvqtp5Rqer2jc3hOyZ2d0qwbkHHY=w268-h640&quot; width=&quot;268&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;まとめ&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;ここまで確認したことをまとめます。&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;アップロードされたファイルには「&lt;b&gt;{{req.files.&amp;lt;ファイルIndex&amp;gt;...}}&lt;/b&gt;」でアクセスできます&lt;/li&gt;&lt;li&gt;reqプロパティ配下のプロパティについて知りたいときはhttp inノードのヘルプを確認します&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;まだ次回に続きます。&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://awwa500.blogspot.com/feeds/5930330210717787966/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://awwa500.blogspot.com/2021/12/http3.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/5930330210717787966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/5930330210717787966'/><link rel='alternate' type='text/html' href='http://awwa500.blogspot.com/2021/12/http3.html' title='HTTPノードを使う（その3）'/><author><name>あわ</name><uri>http://www.blogger.com/profile/08571636318581967838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEjDw9UNn_wouodyE3MomNODqLLaeE03dlG8vM5_Q9Ak1EGatiIR6Pt8s3IvrUf3N-tUzMI3FPY6ZUhIDqdXcvdoRmlvthfJsTyBXSANLF3e-BFkjK8oF9V9rlw0AGvtCowPJxWJqq4bBGyMozz9OvkBEYqr0K1QTAosZnaNWVn0GPDUl3CtpWkqwzBm=s72-w640-h298-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5587841204043490178.post-6708986948425743398</id><published>2021-12-25T06:23:00.004+09:00</published><updated>2021-12-25T06:28:40.640+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="node-red"/><title type='text'>HTTPノードを使う（その2）</title><content type='html'>&lt;p&gt;ここのところずっと&lt;a href=&quot;https://nodered.org/&quot; target=&quot;_blank&quot;&gt;Node-RED&lt;/a&gt;のサンプルを見ながら各ノードの使い方を確認しています。&lt;a href=&quot;/2021/09/node-red-start.html&quot; target=&quot;_blank&quot;&gt;頭出しの記事はこちら&lt;/a&gt;をご確認ください。前回に引き続き、機械的にHTTPノードのサンプルフローを見ていきます。&lt;/p&gt;&lt;div&gt;&lt;h2&gt;リクエストヘッダを扱う&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;確認するサンプルは、「&lt;b&gt;読み込み &amp;gt; サンプル &amp;gt; flows &amp;gt; node-red &amp;gt; network &amp;gt; http &amp;gt; 04 - Access HTTP request headers&lt;/b&gt;」です。リクエストヘッダの扱い方を確認できます。フローは&lt;a href=&quot;/2021/12/node-red-http1.html&quot; target=&quot;_blank&quot;&gt;前回の記事&lt;/a&gt;で紹介したものとほぼ同じなので、細かい説明は省略します。ポイントはTemplateノードにある「&lt;b&gt;{{req.headers.user-agent}}&lt;/b&gt;」です。これでHTTPリクエスト内のUser-Agentヘッダの値が取得できます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjZbEBHGMuss_e8MIZ3OScKuKysAeOVqSNhRpFMhxl003pKI3Dd4zKv4gDjPVYc_X5IpahzGIbhFIBUf3qgp96CsJE605hqlJWzbnbuuCXnSuj8vsiu2bED1o712esFHFtHH_j-5yoSK1lgYVWyy_7Rv7lufqP8dE9K-8rnr7lTQ-ceVTqQP66S3YTD=s1000&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;714&quot; data-original-width=&quot;1000&quot; height=&quot;456&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjZbEBHGMuss_e8MIZ3OScKuKysAeOVqSNhRpFMhxl003pKI3Dd4zKv4gDjPVYc_X5IpahzGIbhFIBUf3qgp96CsJE605hqlJWzbnbuuCXnSuj8vsiu2bED1o712esFHFtHH_j-5yoSK1lgYVWyy_7Rv7lufqP8dE9K-8rnr7lTQ-ceVTqQP66S3YTD=w640-h456&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;h2&gt;ペイロードを扱う&lt;/h2&gt;&lt;div&gt;ペイロード＝HTTPボディ部ですね。確認するサンプルは、「&lt;b&gt;読み込み &amp;gt; サンプル &amp;gt; flows &amp;gt; node-red &amp;gt; network &amp;gt; http &amp;gt; 05 - Post data to a flow&lt;/b&gt;」です。これも&lt;a href=&quot;/2021/12/node-red-http1.html&quot; target=&quot;_blank&quot;&gt;前回紹介したフロー&lt;/a&gt;とほぼ同じなので詳細は省略します。ポイントは「&lt;b&gt;{{payload}}&lt;/b&gt;」でHTTPリクエストのボディ部（つまりペイロード）にアクセスできる点です。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi9ah1Hqr4ogWfE-X-kIZiXH9_aZ1LJ8gz3NPSwcE1cD2Vrz4S6E5-7g7NI1-U7j37VcTK-e0cxfqsa5R92K_azv_EPa1rF1kdfo_RlHC97uTPmxwKxqfYpFI3nXE7vXcvYJRTpf6yUuLAkFyuz0bmwihK78L1ARnc2sxaxc87pgdepshpg9sjQfC13=s1012&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;706&quot; data-original-width=&quot;1012&quot; height=&quot;446&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi9ah1Hqr4ogWfE-X-kIZiXH9_aZ1LJ8gz3NPSwcE1cD2Vrz4S6E5-7g7NI1-U7j37VcTK-e0cxfqsa5R92K_azv_EPa1rF1kdfo_RlHC97uTPmxwKxqfYpFI3nXE7vXcvYJRTpf6yUuLAkFyuz0bmwihK78L1ARnc2sxaxc87pgdepshpg9sjQfC13=w640-h446&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;まとめ&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;内容は薄めですが、ここまで確認したことをまとめます。&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;リクエストヘッダには「&lt;b&gt;{{req.headers.&amp;lt;ヘッダ名&amp;gt;}}&lt;/b&gt;」でアクセスできます&lt;/li&gt;&lt;ul&gt;&lt;li&gt;headers配下に個別のヘッダに対応したプロパティがぶら下がります&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;ペイロードには「&lt;b&gt;{{payload}}&lt;/b&gt;」でアクセスできます&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;まだまだ次回に続きます。&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://awwa500.blogspot.com/feeds/6708986948425743398/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://awwa500.blogspot.com/2021/12/node-red-http2.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/6708986948425743398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/6708986948425743398'/><link rel='alternate' type='text/html' href='http://awwa500.blogspot.com/2021/12/node-red-http2.html' title='HTTPノードを使う（その2）'/><author><name>あわ</name><uri>http://www.blogger.com/profile/08571636318581967838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEjZbEBHGMuss_e8MIZ3OScKuKysAeOVqSNhRpFMhxl003pKI3Dd4zKv4gDjPVYc_X5IpahzGIbhFIBUf3qgp96CsJE605hqlJWzbnbuuCXnSuj8vsiu2bED1o712esFHFtHH_j-5yoSK1lgYVWyy_7Rv7lufqP8dE9K-8rnr7lTQ-ceVTqQP66S3YTD=s72-w640-h456-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5587841204043490178.post-1036577672901130473</id><published>2021-12-23T00:29:00.007+09:00</published><updated>2021-12-25T06:24:49.893+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="node-red"/><title type='text'>HTTPノードを使う（その1）</title><content type='html'>&lt;p&gt;ここのところずっと&lt;a href=&quot;https://nodered.org/&quot; target=&quot;_blank&quot;&gt;Node-RED&lt;/a&gt;のサンプルを見ながら各ノードの使い方を確認しています。&lt;a href=&quot;/2021/09/node-red-start.html&quot; target=&quot;_blank&quot;&gt;頭出しの記事はこちら&lt;/a&gt;をご確認ください。今回から何回かにわけてHTTP関連ノードを使ってみます。実はだいぶ前の記事「&lt;a href=&quot;/2021/10/node-redweb.html&quot; target=&quot;_blank&quot;&gt;Node-REDでWebサーバを作ってみる&lt;/a&gt;」でHTTPノードのサンプル01は確認済みなので、残りのサンプルを見ていきます。&lt;/p&gt;&lt;div&gt;&lt;h2&gt;クエリパラメーターを扱う&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;最初に確認するサンプルは、「&lt;b&gt;読み込み &amp;gt; サンプル &amp;gt; flows &amp;gt; node-red &amp;gt; network &amp;gt; http &amp;gt; 02 - Handle query parameters&lt;/b&gt;」です。クエリパラメータの扱い方を確認できます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgtCyfa-StysA4XDP6qaPTn7_leE666FZ3zH9exQ1xnfkbgvewFPvvDsaRtSTxF9PeoG8j0HLJmtGqwc2h6AMg2rcV7S0biNjoImv4Czz3ClKhPxgdULf_1dilVswNHYPRdVt-eDx8wZb-6P46Zl8AXwAYeOpYWjrOmWsJ9HJ7qk2SQOz1o7RWbkdRQ=s1206&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;488&quot; data-original-width=&quot;1206&quot; height=&quot;258&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgtCyfa-StysA4XDP6qaPTn7_leE666FZ3zH9exQ1xnfkbgvewFPvvDsaRtSTxF9PeoG8j0HLJmtGqwc2h6AMg2rcV7S0biNjoImv4Czz3ClKhPxgdULf_1dilVswNHYPRdVt-eDx8wZb-6P46Zl8AXwAYeOpYWjrOmWsJ9HJ7qk2SQOz1o7RWbkdRQ=w640-h258&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;まず、上半分のフローです。エンドポイント「&lt;b&gt;http://localhost1880/hello-query&lt;/b&gt;」にてHTTPのGETリクエストを待ち受けます。Templateノードでは「&lt;b&gt;{{req.query.name}}&lt;/b&gt;」の形式でクエリ内の「&lt;b&gt;name&lt;/b&gt;」パラメータにアクセスして、値をHTMLに埋め込んでHTTP responseを返しています。&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh6WskXY5-oZdil3o7Jj7fCdmCeHVsfPqwQu7ZYuUgyQ-fAZ6qbxpgQCizR7JcTkOOmvDJBOausat4R7vJLlvRr5W2k07GMQIU1nHDY-DcMIXt_du6n8CksB7nrrpJkYPWohHW_fEdeXfP663DC1n6uBatKDFYsk3UzGIRJWAGmDgoTfi3YSlz86RaX=s1000&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;700&quot; data-original-width=&quot;1000&quot; height=&quot;448&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh6WskXY5-oZdil3o7Jj7fCdmCeHVsfPqwQu7ZYuUgyQ-fAZ6qbxpgQCizR7JcTkOOmvDJBOausat4R7vJLlvRr5W2k07GMQIU1nHDY-DcMIXt_du6n8CksB7nrrpJkYPWohHW_fEdeXfP663DC1n6uBatKDFYsk3UzGIRJWAGmDgoTfi3YSlz86RaX=w640-h448&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;続いて下半分のフローでは、上半分のフローで待ち受けているエンドポイントに対してHTTPリクエストを送信しています。リクエストではクエリパラメーター「&lt;b&gt;name&lt;/b&gt;」に値「&lt;b&gt;Nick&lt;/b&gt;」を指定しています。そして、HTTPレスポンスをDebugノードで出力しています。&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjLIOViHR5z3t76FDtZghb0ufqqPNlBPSxinJVUoQfF2275ZByWHlXjsLrozr2DdrF4QC6uXRZFSqJ7TBvQKl5baVPDFta5k14JkvBNvg9mTY43X3cE5OzLayNLpUaYPk-e-M4yIV-RsE42GjJbfBIPuY3uLiGX8V47V9Y3bhCdPuCcgUAI16cIlXT5=s1014&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1014&quot; data-original-width=&quot;1004&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjLIOViHR5z3t76FDtZghb0ufqqPNlBPSxinJVUoQfF2275ZByWHlXjsLrozr2DdrF4QC6uXRZFSqJ7TBvQKl5baVPDFta5k14JkvBNvg9mTY43X3cE5OzLayNLpUaYPk-e-M4yIV-RsE42GjJbfBIPuY3uLiGX8V47V9Y3bhCdPuCcgUAI16cIlXT5=w634-h640&quot; width=&quot;634&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;フローを実行すると、以下のログが出力されます。さきほどの「&lt;b&gt;{{req.query.name}}&lt;/b&gt;」が値「&lt;b&gt;Nick&lt;/b&gt;」に置き換わっていますね。&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEj7xhIHpGOYL5A8F1LnlXYwBDeemFEB-yhvYkQMqcwTFn1myoReeNx8NnyJHfzR_iKQ5M-LHmMCUgQWAznanIba9MC7HCuX44cLhZOWuGdB4-myL96LzIumLkLGIlvHsq0Efxm5TdtRGovDHtuquk3dJ_NYPDqcf-_Nbat1hsrTN1WMGtkyDHqCKycl=s634&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;538&quot; data-original-width=&quot;634&quot; height=&quot;544&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEj7xhIHpGOYL5A8F1LnlXYwBDeemFEB-yhvYkQMqcwTFn1myoReeNx8NnyJHfzR_iKQ5M-LHmMCUgQWAznanIba9MC7HCuX44cLhZOWuGdB4-myL96LzIumLkLGIlvHsq0Efxm5TdtRGovDHtuquk3dJ_NYPDqcf-_Nbat1hsrTN1WMGtkyDHqCKycl=w640-h544&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;h2&gt;URLパラメータを扱う&lt;/h2&gt;&lt;div&gt;続いて、URLパラメータを扱う方法を確認します。確認するサンプルは、「&lt;b&gt;読み込み &amp;gt; サンプル &amp;gt; flows &amp;gt; node-red &amp;gt; network &amp;gt; http &amp;gt; 03 - Handle URL parameters&lt;/b&gt;」です。さっきと似ていますが、今度はクエリストリングではなく、URLの一部をパラメータ化して扱っています。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjVJrT5we1NfjwkAeHx3xGGemxawlkA2zRdMQbj1jY_4o1XJC2PwbGHuWJ7fFnnhrIHlMhHqAeA0OufcBF-YHvJs_3o3vZFmcOtnApTfyaXPXeTw17XNVrmc7i0FmfjhOSD0d6dKMncEZ8kPIdlxCwdIT3ac95Yx_QQ5u2QjSvqNi9VfIT-Vbi3Rqzv=s1188&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;436&quot; data-original-width=&quot;1188&quot; height=&quot;234&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjVJrT5we1NfjwkAeHx3xGGemxawlkA2zRdMQbj1jY_4o1XJC2PwbGHuWJ7fFnnhrIHlMhHqAeA0OufcBF-YHvJs_3o3vZFmcOtnApTfyaXPXeTw17XNVrmc7i0FmfjhOSD0d6dKMncEZ8kPIdlxCwdIT3ac95Yx_QQ5u2QjSvqNi9VfIT-Vbi3Rqzv=w640-h234&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;さきほどのサンプルと同じく、上半分のフローはHTTPのリクエスト待受とレスポンスの構築を行っています。http inノードでは「&lt;b&gt;:name&lt;/b&gt;」という形式で、URLの一部をパラメータ化しています。Ruby on RailsなどのWebアプリケーションフレームワークの&lt;a href=&quot;https://railsguides.jp/routing.html&quot; target=&quot;_blank&quot;&gt;Router系機能&lt;/a&gt;でよく見る形式です。これで、Node-REDがHTTPリクエストを受信すると、クエリパラメータ内の「&lt;b&gt;name&lt;/b&gt;」の値（&lt;b&gt;Nick&lt;/b&gt;）にアクセスできます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhZBPOKX8ef5IeyaCLJlVLfh9VQbrICgESEKXya_MYGVjz1AcfETPucmMZ3VQYX68cm5FDPwcp1f_ATuVGkHGSYh055cg_P8MnaEzUDDca88CQSJ-8A0KNjx6PWUg6ZUwpX9jqTROdNUGBwaNsXYCQgh4bp7FfO9VvDbkbfGQn6JJPDeiNOKIrQ70o8=s1010&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;522&quot; data-original-width=&quot;1010&quot; height=&quot;330&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhZBPOKX8ef5IeyaCLJlVLfh9VQbrICgESEKXya_MYGVjz1AcfETPucmMZ3VQYX68cm5FDPwcp1f_ATuVGkHGSYh055cg_P8MnaEzUDDca88CQSJ-8A0KNjx6PWUg6ZUwpX9jqTROdNUGBwaNsXYCQgh4bp7FfO9VvDbkbfGQn6JJPDeiNOKIrQ70o8=w640-h330&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;Templateノードでは「&lt;b&gt;{{req.params.name}}&lt;/b&gt;」の形式でURLパラメータにアクセスしています。&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiGbDd95-6SIyExVDJBPcOaOCQ3LLevDhQTFDdfUXk6B-hiPjaHB7fan7NltXnru5t7MjmhICadNlxWu1_TJKXaLno0JaVnkJJ5yoHVWBWzmzHUFQodz_W54KoHlEuthIbZH3NOG_YyWo02HYGfjE6SHnKOR7G5TsYFPNy01NX7OIk10utVX40A3CVb=s1008&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;710&quot; data-original-width=&quot;1008&quot; height=&quot;450&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiGbDd95-6SIyExVDJBPcOaOCQ3LLevDhQTFDdfUXk6B-hiPjaHB7fan7NltXnru5t7MjmhICadNlxWu1_TJKXaLno0JaVnkJJ5yoHVWBWzmzHUFQodz_W54KoHlEuthIbZH3NOG_YyWo02HYGfjE6SHnKOR7G5TsYFPNy01NX7OIk10utVX40A3CVb=w640-h450&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;続いて下半分のフローでHTTPリクエストを送信しています。アクセス先URLは「&lt;b&gt;http://localhost:1880/hello-param/Nick&lt;/b&gt;」です。もうおわかりかと思いますが、「&lt;b&gt;{{req.params.name}}&lt;/b&gt;」の部分が「&lt;b&gt;Nick&lt;/b&gt;」に置き換わります。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEj5SqlFzF9ONgoaWIAQXEwV1O4AOgtaAjoSoAZpzqnOgLMvWRNa6rX3gQcFJqnTIX8R_yC-TkORPAqrDVEHzbsG_ZaKX0A3UEQZ3lK4PeAgFxh-VjyTGF8HNZjg2baHAUGI8mP-JKYZqzCqHJX5_fvUlflfvf_yIVAxCHjSDfacMr7E4ukS6T629T3b=s1004&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;994&quot; data-original-width=&quot;1004&quot; height=&quot;634&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEj5SqlFzF9ONgoaWIAQXEwV1O4AOgtaAjoSoAZpzqnOgLMvWRNa6rX3gQcFJqnTIX8R_yC-TkORPAqrDVEHzbsG_ZaKX0A3UEQZ3lK4PeAgFxh-VjyTGF8HNZjg2baHAUGI8mP-JKYZqzCqHJX5_fvUlflfvf_yIVAxCHjSDfacMr7E4ukS6T629T3b=w640-h634&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;まとめ&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;ここまで確認したことをまとめます。&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;クエリパラメーターには「&lt;b&gt;{{req.query.&amp;lt;パラメーター名&amp;gt;}}&lt;/b&gt;」でアクセスできます&lt;/li&gt;&lt;li&gt;URLパラメーターには「&lt;b&gt;{{req.params.&amp;lt;パラメーター名&amp;gt;}}&lt;/b&gt;」でアクセスできます&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;次回に続きます。&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://awwa500.blogspot.com/feeds/1036577672901130473/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://awwa500.blogspot.com/2021/12/node-red-http1.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/1036577672901130473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/1036577672901130473'/><link rel='alternate' type='text/html' href='http://awwa500.blogspot.com/2021/12/node-red-http1.html' title='HTTPノードを使う（その1）'/><author><name>あわ</name><uri>http://www.blogger.com/profile/08571636318581967838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEgtCyfa-StysA4XDP6qaPTn7_leE666FZ3zH9exQ1xnfkbgvewFPvvDsaRtSTxF9PeoG8j0HLJmtGqwc2h6AMg2rcV7S0biNjoImv4Czz3ClKhPxgdULf_1dilVswNHYPRdVt-eDx8wZb-6P46Zl8AXwAYeOpYWjrOmWsJ9HJ7qk2SQOz1o7RWbkdRQ=s72-w640-h258-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5587841204043490178.post-5015300559146378851</id><published>2021-12-20T23:44:00.003+09:00</published><updated>2021-12-20T23:44:33.541+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="node-red"/><title type='text'>MQTTノードを使う</title><content type='html'>&lt;p&gt;ここのところずっと&lt;a href=&quot;https://nodered.org/&quot; target=&quot;_blank&quot;&gt;Node-RED&lt;/a&gt;のサンプルを見ながら各ノードの使い方を確認しています。&lt;a href=&quot;/2021/09/node-red-start.html&quot; target=&quot;_blank&quot;&gt;頭出しの記事はこちら&lt;/a&gt;をご確認ください。今回はMQTTノードを使ってみます。私はMQTTについてはあまり詳しくなく、うっすらIoTの分野で使われていることを聞いたことがある程度です。まずはMQTTについて調べるところから開始しました。&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;MQTTの概要&lt;/h2&gt;&lt;div&gt;&lt;a href=&quot;https://ja.wikipedia.org/wiki/MQ_Telemetry_Transport&quot; target=&quot;_blank&quot;&gt;Wikipedia&lt;/a&gt;によると、こんな感じの説明があります。&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;b&gt;M&lt;/b&gt;essage &lt;b&gt;Q&lt;/b&gt;ueuing &lt;b&gt;T&lt;/b&gt;elemetry &lt;b&gt;T&lt;/b&gt;ransportの略&lt;/li&gt;&lt;li&gt;TCP/IPによるPub/Sub型のデータ配信モデル&lt;/li&gt;&lt;li&gt;軽量な通信電文&lt;/li&gt;&lt;li&gt;メッセージブローカーが必要&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;p&gt;Pub/Sub型と言えば、トポロジー的にはAWSで言うところのSNSみたいなもんですかね。軽量なのでスペックの低いIoT機器でも扱いやすいということなのでしょう。だいたい理解しました。&lt;/p&gt;&lt;h2&gt;ブローカーのインストールと起動&lt;/h2&gt;&lt;div&gt;Node-REDのドキュメントに&lt;a href=&quot;https://cookbook.nodered.jp/mqtt/connect-to-broker&quot; target=&quot;_blank&quot;&gt;使い方の説明&lt;/a&gt;があるので、実際にやってみます。ブローカーが必要なので、まずは&lt;a href=&quot;http://mosquitto.org/&quot; target=&quot;_blank&quot;&gt;mosquitto&lt;/a&gt;なるものをインストールおよび起動します。ちなみに、Mac上で作業しています。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;
  &lt;pre class=&quot;prettyprint&quot;&gt;$ brew install mosquitto
$ mosquitto
1640008513: mosquitto version 2.0.14 starting
1640008513: Using default config.
1640008513: Starting in local only mode. Connections will only be possible from clients running on this machine.
1640008513: Create a configuration file which defines a listener to allow remote access.
1640008513: For more details see https://mosquitto.org/documentation/authentication-methods/
1640008513: Opening ipv4 listen socket on port 1883.
1640008513: Opening ipv6 listen socket on port 1883.
1640008513: mosquitto version 2.0.14 running
  &lt;/pre&gt;&lt;/div&gt;&lt;div&gt;動いたようです。これでlocalhostの1883ポートでブローカーが待ち受けを開始しました。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;MQTTノードを使ったフローの作成&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;いよいよ、フローを作っていきます。「&lt;b&gt;mqtt in&lt;/b&gt;」ノードと「&lt;b&gt;mqtt out&lt;/b&gt;」ノードを含めて以下のように配置します。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjl2Z0v2dQufj53bCS5mv8hXdjpYoEnOVgEC8rJ20R0XSajdRO90rLalm9OVqEMRHnligSC4195sfmG_u8y90GMzSt36fDxs976giNv5Koz-kLyFuzTXQk-108Jvsl_K-J34M2X1IDf-lUhAGM-_OK-dUbnQ_h3Hnp6fFJc3Suq7h3ldSJLlqI4nYnA=s834&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;362&quot; data-original-width=&quot;834&quot; height=&quot;278&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjl2Z0v2dQufj53bCS5mv8hXdjpYoEnOVgEC8rJ20R0XSajdRO90rLalm9OVqEMRHnligSC4195sfmG_u8y90GMzSt36fDxs976giNv5Koz-kLyFuzTXQk-108Jvsl_K-J34M2X1IDf-lUhAGM-_OK-dUbnQ_h3Hnp6fFJc3Suq7h3ldSJLlqI4nYnA=w640-h278&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p style=&quot;text-align: left;&quot;&gt;上部のmqtt outノードでブローカーにメッセージを送信しています。一方、下部のmqtt inノードでブローカーが配信したメッセージを受信しています。イメージではノードのステータスが「接続済」となっていますが、現時点ではステータスの表示が違っていても気にしなくて大丈夫です。&lt;/p&gt;&lt;div&gt;mqtt outノードは以下のように設定します。この内、「&lt;b&gt;サーバ&lt;/b&gt;」は右上の鉛筆アイコンを選択して編集します。トピックはとりあえず「&lt;b&gt;hoge&lt;/b&gt;」の文字を指定しておきます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgkgYD1gxAjf-nMx5_4WDxq55Ass_aKHA4RHhkEgFloW7GeNXGQEG5Rl1pfv6I22NNFrEf0N02GJ8tfgdixLOD8M3mIfv5zp8twOpqKYXtPabarMRwUocu0OtyeZQu9exLGAIkxdViTrZD7ksypVpX6FeLs0yQK17meaicj4KgPOeXt28-MKB_05IgV=s1028&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;750&quot; data-original-width=&quot;1028&quot; height=&quot;466&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgkgYD1gxAjf-nMx5_4WDxq55Ass_aKHA4RHhkEgFloW7GeNXGQEG5Rl1pfv6I22NNFrEf0N02GJ8tfgdixLOD8M3mIfv5zp8twOpqKYXtPabarMRwUocu0OtyeZQu9exLGAIkxdViTrZD7ksypVpX6FeLs0yQK17meaicj4KgPOeXt28-MKB_05IgV=w640-h466&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;続いて、サーバの編集を行います。「サーバ」と言っていますが、実際には「&lt;b&gt;mqtt-brokerノード&lt;/b&gt;」の編集画面です。ポイントは以下のとおりです。&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;名前：ブローカーを識別するための適当な文字列を指定します&lt;/li&gt;&lt;li&gt;サーバ：今回はローカルのブローカーに接続するので「&lt;b&gt;localhost&lt;/b&gt;」と入力します&lt;/li&gt;&lt;li&gt;ポート：デフォルトの「&lt;b&gt;1883&lt;/b&gt;」のままにしておきます&lt;/li&gt;&lt;ul&gt;&lt;li&gt;さっき起動したmosquittoと合わせておきます&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEglcxV_dlokHnpcQrHqnmg5R-0s-ZzY6ETqXlMsLDWttuqFd7lCOqMPkGfi3NrgeQhyz6fYWI-24tz7P3jdXj_FT1hlPVFMqMSgAmCFdKc5zI43sDmX6ix9ZkslYc9EckBgh_Fkjh44NzukDTl_lm-dzOEXqkXSvhjvzABMXwdrhRnlsO68hNPA-Oiw=s1284&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;998&quot; data-original-width=&quot;1284&quot; height=&quot;498&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEglcxV_dlokHnpcQrHqnmg5R-0s-ZzY6ETqXlMsLDWttuqFd7lCOqMPkGfi3NrgeQhyz6fYWI-24tz7P3jdXj_FT1hlPVFMqMSgAmCFdKc5zI43sDmX6ix9ZkslYc9EckBgh_Fkjh44NzukDTl_lm-dzOEXqkXSvhjvzABMXwdrhRnlsO68hNPA-Oiw=w640-h498&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;続いて、mqtt inノードは以下の通りに設定します。&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;サーバ：先程設定したmqtt brokerノードの設定を選択します。&lt;/li&gt;&lt;li&gt;トピック：mqtt outノードと同じく「&lt;b&gt;hoge&lt;/b&gt;」と設定します&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgVe-4IMxhqeL4wi1W_59bcsjORpmD0i_NBYtFjXbUQDNpp9Cj6FsuuY5ntT8N9qkmhHqQX4F7zNfhYw8vL_BqmCX7m1W_CqS2xvyQ4foHyrRV0pYKQlc655KG_WlAM_9q7fLcq9-jctRIoiXZyU4X7SXyDkBgf0BECKjPFhXfnxOe5OhCj85Pc65Yk=s996&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;696&quot; data-original-width=&quot;996&quot; height=&quot;448&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgVe-4IMxhqeL4wi1W_59bcsjORpmD0i_NBYtFjXbUQDNpp9Cj6FsuuY5ntT8N9qkmhHqQX4F7zNfhYw8vL_BqmCX7m1W_CqS2xvyQ4foHyrRV0pYKQlc655KG_WlAM_9q7fLcq9-jctRIoiXZyU4X7SXyDkBgf0BECKjPFhXfnxOe5OhCj85Pc65Yk=w640-h448&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;以上で設定は完了です。設定が正しければ、デプロイするとmqtt inノードとmqtt outノードのステータスに「&lt;b&gt;接続済&lt;/b&gt;」と表示されるはずです。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;フローを実行すると以下のようなログが出力されます。&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;payload：injectノードで設定した時刻が出力されています&lt;/li&gt;&lt;li&gt;topic：mqtt in/outノードで設定したトピック名「hoge」が出力されています&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEj4e2p9YQ5K7ER5mhjT6z35o0wSuzNDBXBBvTZziak3ub3CW_HFtwVDXER0Kd9gp2R9Ca6cpbdEmCXJzrVL2HvBCVqWuOx-OGGCeuP5TztUc0vbS4WfjCQjca3ougybyipQmfoF47NkH17h71ag8qGltaWDt_0TUooxsH-k0jaEmcLBUynL4Z0qQCfv=s584&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;420&quot; data-original-width=&quot;584&quot; height=&quot;288&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEj4e2p9YQ5K7ER5mhjT6z35o0wSuzNDBXBBvTZziak3ub3CW_HFtwVDXER0Kd9gp2R9Ca6cpbdEmCXJzrVL2HvBCVqWuOx-OGGCeuP5TztUc0vbS4WfjCQjca3ougybyipQmfoF47NkH17h71ag8qGltaWDt_0TUooxsH-k0jaEmcLBUynL4Z0qQCfv=w400-h288&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;h2&gt;MQTTクライアントで送信したメッセージをmqtt inノードで受信する&lt;/h2&gt;&lt;div&gt;続いて、3rdパーティ製のMQTTクライアントで送信したメッセージをmqtt inノードで受信します。今回利用したMQTTクライアントは「&lt;a href=&quot;https://mqttx.app/&quot; target=&quot;_blank&quot;&gt;MQTT X&lt;/a&gt;」です。ポイントは以下の通りで、最初にインストールしたブローカーmosquittoの待受ポートに接続設定します。&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Host：localhost&lt;/li&gt;&lt;li&gt;Port：1883&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEguDZaFAKgM1dxe6MG-0ZCo_0Yze3F0NDiXKT3aCYY_VC8BbnfXqrNkpsryQMuHr-TvuTXN0wvSrTXm-N4lkO1uxvFCXOOFS1EO8Kayb6YpCzOB-OHs17ADgT8daiNvD-Qmqp5iPNqwszG1GzYMkCXZKP7Adgxr5JQwY8t86eBnkzNyFnezYERkGO2H=s2366&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1824&quot; data-original-width=&quot;2366&quot; height=&quot;494&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEguDZaFAKgM1dxe6MG-0ZCo_0Yze3F0NDiXKT3aCYY_VC8BbnfXqrNkpsryQMuHr-TvuTXN0wvSrTXm-N4lkO1uxvFCXOOFS1EO8Kayb6YpCzOB-OHs17ADgT8daiNvD-Qmqp5iPNqwszG1GzYMkCXZKP7Adgxr5JQwY8t86eBnkzNyFnezYERkGO2H=w640-h494&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Connectした後、トピック「hoge」に対して以下のようなメッセージを送信します。&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiWKwuhCZQl5b2-BHtHoQng5HX3ZCracopvfJGGc-wLTfP47MBspgZlGtwj1V_vhmXermuaWDiTP9YPp0yreg1KCYDTN8mzEvaWYxK5SjKzmoNZa9d2lKRn97iZuigaKWHxuR3cMWk6Q-2LLczlT_vIim7BgpULnexH_5lvJcXRHj-RvqTxf7pZtcK-=s1464&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;330&quot; data-original-width=&quot;1464&quot; height=&quot;144&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiWKwuhCZQl5b2-BHtHoQng5HX3ZCracopvfJGGc-wLTfP47MBspgZlGtwj1V_vhmXermuaWDiTP9YPp0yreg1KCYDTN8mzEvaWYxK5SjKzmoNZa9d2lKRn97iZuigaKWHxuR3cMWk6Q-2LLczlT_vIim7BgpULnexH_5lvJcXRHj-RvqTxf7pZtcK-=w640-h144&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Node-REDではmqtt inノードで受信した以下のようなメッセージがログ出力されているはずです。&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEg7_-VeI5JgdOqm9uwTZQTgEAvo-D6YuvcjIGawihE_FqR-gFtwktd0Xkyey8Pc2stYaO8BLh2hgGndkRIBMhL-cuTU_f4cFOaGg4ZqMx8ogqHdL-3zA9QSQK7stqZDJOSv5CFveVmo4a7EcyfAgT0K82fi9edJ1Dao5XJv0457LHA5HxpRafdCztO9=s586&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;418&quot; data-original-width=&quot;586&quot; height=&quot;285&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEg7_-VeI5JgdOqm9uwTZQTgEAvo-D6YuvcjIGawihE_FqR-gFtwktd0Xkyey8Pc2stYaO8BLh2hgGndkRIBMhL-cuTU_f4cFOaGg4ZqMx8ogqHdL-3zA9QSQK7stqZDJOSv5CFveVmo4a7EcyfAgT0K82fi9edJ1Dao5XJv0457LHA5HxpRafdCztO9=w400-h285&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;まとめ&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;ここまで確認したことをまとめます。&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;ブローカーをインストール＆起動しました&lt;/li&gt;&lt;li&gt;mqtt in/outノードからブローカーに接続して、メッセージの送受信を確認しました&lt;/li&gt;&lt;li&gt;3rdパーティ製MQTTクライアントが送信したメッセージをmqtt inノードで受信できることを確認しました&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;MQTTノードについてはこんなもんでしょうか。&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://awwa500.blogspot.com/feeds/5015300559146378851/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://awwa500.blogspot.com/2021/12/node-red-mqtt.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/5015300559146378851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/5015300559146378851'/><link rel='alternate' type='text/html' href='http://awwa500.blogspot.com/2021/12/node-red-mqtt.html' title='MQTTノードを使う'/><author><name>あわ</name><uri>http://www.blogger.com/profile/08571636318581967838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEjl2Z0v2dQufj53bCS5mv8hXdjpYoEnOVgEC8rJ20R0XSajdRO90rLalm9OVqEMRHnligSC4195sfmG_u8y90GMzSt36fDxs976giNv5Koz-kLyFuzTXQk-108Jvsl_K-J34M2X1IDf-lUhAGM-_OK-dUbnQ_h3Hnp6fFJc3Suq7h3ldSJLlqI4nYnA=s72-w640-h278-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5587841204043490178.post-6031773247037630967</id><published>2021-12-15T23:41:00.000+09:00</published><updated>2021-12-15T23:41:07.257+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="node-red"/><title type='text'>Filterノードを使う</title><content type='html'>&lt;p&gt;ここのところずっと&lt;a href=&quot;https://nodered.org/&quot; target=&quot;_blank&quot;&gt;Node-RED&lt;/a&gt;のサンプルを見ながら各ノードの使い方を確認しています。&lt;a href=&quot;/2021/09/node-red-start.html&quot; target=&quot;_blank&quot;&gt;頭出しの記事はこちら&lt;/a&gt;をご確認ください。今回はFilterノードを使ってみます。大量のメッセージを入力して、条件を満たした場合のみメッセージを出力するノードです。大量のデータを発生させる加速度センサーみたいなものを扱うのに使えそうです。&lt;/p&gt;&lt;h2&gt;入力値が変化したら出力する&lt;/h2&gt;&lt;div&gt;Filterノードには標準のサンプルが提供されていないのでやむを得ず自作します。最初に作ったのはこんな感じのフローです。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgO_W4zMJl4er1eqomEQwUF6rmOfVgktCz71j5oFefnKfbcIOkouXWJHIqPe4rtqNNLaQ7Pb_dKh46ohv-dDV_OJ-TBhMI6e-rSfXtWkBFzMI-Q-QRML986MuJkT8Jgtt2BOBcb-_Aw7yI3yQec75Leyrbuif_BoSEqPt6EeKvSjR2POzCHoeKUqJS7=s1270&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;314&quot; data-original-width=&quot;1270&quot; height=&quot;158&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgO_W4zMJl4er1eqomEQwUF6rmOfVgktCz71j5oFefnKfbcIOkouXWJHIqPe4rtqNNLaQ7Pb_dKh46ohv-dDV_OJ-TBhMI6e-rSfXtWkBFzMI-Q-QRML986MuJkT8Jgtt2BOBcb-_Aw7yI3yQec75Leyrbuif_BoSEqPt6EeKvSjR2POzCHoeKUqJS7=w640-h158&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;Filterノードのプロパティは次のとおりです。&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;ul&gt;&lt;li&gt;動作は「&lt;b&gt;値が変化したときのみメッセージを中継&lt;/b&gt;」&lt;/li&gt;&lt;li&gt;対象プロパティは「&lt;b&gt;msg.payload&lt;/b&gt;」&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEj3kCZDIX32Q1L8C6is-vkInWIRwyXBjemBrAaIO281IssyfIo2vkw2Zqyq15x7YsSH0nrHZih0YzppX2F5lvDxXPNzjjLISqoyHm75O_6iJZ5vfbChnUcrN4biNj5jEdu89v9F3qDQ_ttWsq4YQ2SaLWup_mGPIQc1QLxo_ZokttHumg1o3Z3ZT_pO=s1054&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;670&quot; data-original-width=&quot;1054&quot; height=&quot;406&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEj3kCZDIX32Q1L8C6is-vkInWIRwyXBjemBrAaIO281IssyfIo2vkw2Zqyq15x7YsSH0nrHZih0YzppX2F5lvDxXPNzjjLISqoyHm75O_6iJZ5vfbChnUcrN4biNj5jEdu89v9F3qDQ_ttWsq4YQ2SaLWup_mGPIQc1QLxo_ZokttHumg1o3Z3ZT_pO=w640-h406&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;ここに2つのInjectノードでメッセージを流し込みます。&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;1つ目は、msg.payloadに「&lt;b&gt;aaa&lt;/b&gt;」という文字列を設定したメッセージを1秒に1回繰り返し流す&lt;/li&gt;&lt;li&gt;2つ目は、msg.payloadに「&lt;b&gt;bbb&lt;/b&gt;」という文字列を設定したメッセージを単発で流す&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;デプロイすると、「&lt;b&gt;aaa&lt;/b&gt;」のログが1回出力されます。msg.payloadの値が変化したのでメッセージが中継されたようです。その後、Injectノード「&lt;b&gt;bbb&lt;/b&gt;」を実行すると、「&lt;b&gt;bbb&lt;/b&gt;」のログと「&lt;b&gt;aaa&lt;/b&gt;」のログが1件ずつ出力されます。Injectノード「&lt;b&gt;bbb&lt;/b&gt;」を選択したことによりmsg.payloadの値が変化したのでメッセージが中継され、その後、Injectノード「&lt;b&gt;aaa&lt;/b&gt;」の定期的な動作により再びmsg.payloadの値が変化したので中継されたようです。Filterノードのヘルプではこの設定のことを「&lt;b&gt;RBEモード（Report by Exception）&lt;/b&gt;」と表現しているようです。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiCUxh5guktZa24fIjNE0zVTjgeD9spqmD0VxTC0HHIkBxAbBiVfM4d0Ngt5vc2sodWzkmjUwWCdfRF2DBksBPJ5yYc6bz2d_Ni3QrTg_BFwh5ENn0HDC9mpq-bb14QpPX4pAIgLeoSbCfSlcfS2ms0y3H0HbylK93UrvDbT0JM-ry9vUKVqujoyGY3=s596&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;596&quot; data-original-width=&quot;584&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiCUxh5guktZa24fIjNE0zVTjgeD9spqmD0VxTC0HHIkBxAbBiVfM4d0Ngt5vc2sodWzkmjUwWCdfRF2DBksBPJ5yYc6bz2d_Ni3QrTg_BFwh5ENn0HDC9mpq-bb14QpPX4pAIgLeoSbCfSlcfS2ms0y3H0HbylK93UrvDbT0JM-ry9vUKVqujoyGY3=s320&quot; width=&quot;314&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;ちなみに、Filterノードの動作で「&lt;b&gt;値が変化したときのみメッセージを中継（初期値を無視）&lt;/b&gt;」を選択すると、デプロイ時の「&lt;b&gt;aaa&lt;/b&gt;」が出力されなくなります。フローリセット時に値が変化しないものとしてFilterノードの動作を抑制するのに利用できそうです。&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;h2&gt;入力値が指定した値を超えて変化したら出力する&lt;/h2&gt;&lt;div&gt;続いて、入力値が指定した値を超えて変化したらメッセージを出力する動作を確認するために以下のようなフローを作成しました。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjea_PvexB6DIfpgsg-fwSyOBG82fsljqz4SUTRmu26D0S4mgjLLbnEa9QrI-k8tkeV8hUdf5A_ZBGrdcS_ZbM1I0eMHET29aDOONNCmVt9BrOxyzRpF90rj7_jmX5BmwUG4N_qmdqhB9BZu71mJVyIlcN8oIzRFtJe3XRzWvd4P0ONKNVTM_LHOobo=s1280&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;328&quot; data-original-width=&quot;1280&quot; height=&quot;164&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjea_PvexB6DIfpgsg-fwSyOBG82fsljqz4SUTRmu26D0S4mgjLLbnEa9QrI-k8tkeV8hUdf5A_ZBGrdcS_ZbM1I0eMHET29aDOONNCmVt9BrOxyzRpF90rj7_jmX5BmwUG4N_qmdqhB9BZu71mJVyIlcN8oIzRFtJe3XRzWvd4P0ONKNVTM_LHOobo=w640-h164&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;ポイントは以下の点です。&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Filterノードの動作が「&lt;b&gt;最後の出力値と比較して10%以上変化したらメッセージを中継する&lt;/b&gt;」&lt;/li&gt;&lt;li&gt;Injectノードはmsg.payloadに数値「&lt;b&gt;100&lt;/b&gt;」を繰り返し流し、手動で数値「&lt;b&gt;120&lt;/b&gt;」を流せるようにする（しきい値以上変化する）&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi_wg1qwf-n4hPTKWa_pVrGNjIpQDmsvJsbit-yXfzJO6FR2E3-i0oIu5FCeOw8fQNhnq3LvohL8S6OdazTGOiuJFf-mH04WhoZcXFQROhRwmN1zEh9B98rXZ42ANCaCkrl7Wv0hOYsMUmUWSH81H_sU7N2KCTeznpDh3bK221g288YVhM87LL0Iwxf=s1062&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;774&quot; data-original-width=&quot;1062&quot; height=&quot;466&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi_wg1qwf-n4hPTKWa_pVrGNjIpQDmsvJsbit-yXfzJO6FR2E3-i0oIu5FCeOw8fQNhnq3LvohL8S6OdazTGOiuJFf-mH04WhoZcXFQROhRwmN1zEh9B98rXZ42ANCaCkrl7Wv0hOYsMUmUWSH81H_sU7N2KCTeznpDh3bK221g288YVhM87LL0Iwxf=w640-h466&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;&lt;/div&gt;実行すると、以下のようになログが出力されます。最後に入力した値と比較して10%以上変化していたらメッセージを転送します。ちなみにFilterノードのヘルプではこのモードのことを「&lt;b&gt;不感帯モード&lt;/b&gt;」と表現しているようです。&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEitGABvmqqOlhtakYNAgwERn-5e8YB2guD_kq1EP3YRWjTMH6ovycQDSVuVlBVDPC4aguyYuUcw3tynVm-m9bW7faT2_Xh-YeWVwKOuBWkF4PpkL8Azg8l8aAbKgZMrtSGfBm80Xsgrbh-_t3sjTqgCI_SKUQEXSDTc0FNqDm-9bHFTf0u-W3w9tdpY=s562&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;430&quot; data-original-width=&quot;562&quot; height=&quot;306&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEitGABvmqqOlhtakYNAgwERn-5e8YB2guD_kq1EP3YRWjTMH6ovycQDSVuVlBVDPC4aguyYuUcw3tynVm-m9bW7faT2_Xh-YeWVwKOuBWkF4PpkL8Azg8l8aAbKgZMrtSGfBm80Xsgrbh-_t3sjTqgCI_SKUQEXSDTc0FNqDm-9bHFTf0u-W3w9tdpY=w400-h306&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;入力値が指定した値を超えて変化したら無視する&lt;/h2&gt;&lt;div style=&quot;text-align: left;&quot;&gt;最後にご紹介するのは、入力値が指定した値を超えて変化したら無視する動作です。Filterノードのヘルプでは「&lt;b&gt;狭帯域モード&lt;/b&gt;」と呼んでいます。要は、指定した値を超えたら異常値とみなして無視します。&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEge1oPYFY-tfrQQVTDtMYLY87JQ-2WyjlUSJItPWBHM1Tt_7Pj36nwgGnoYdY4pShiw7BzOYFE9uxZJcj6RjpADlr_axmdrc6Ld1ddLNuXYmhbPo4zA3-aRJYVxpjvX3j8HExiOL9xdziJPS-YzDtU8xty_ZMFbrl41nKLBgFOXMQPm9Oqm-L7MtEMD=s1068&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;848&quot; data-original-width=&quot;1068&quot; height=&quot;508&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEge1oPYFY-tfrQQVTDtMYLY87JQ-2WyjlUSJItPWBHM1Tt_7Pj36nwgGnoYdY4pShiw7BzOYFE9uxZJcj6RjpADlr_axmdrc6Ld1ddLNuXYmhbPo4zA3-aRJYVxpjvX3j8HExiOL9xdziJPS-YzDtU8xty_ZMFbrl41nKLBgFOXMQPm9Oqm-L7MtEMD=w640-h508&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: left;&quot;&gt;フローを実行すると以下の挙動になります。&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;デプロイして放置すると1秒毎に「&lt;b&gt;100&lt;/b&gt;」のログが出力され続けます&lt;/li&gt;&lt;li&gt;Injectノード「&lt;b&gt;120&lt;/b&gt;」を何度選択しても「&lt;b&gt;120&lt;/b&gt;」のログは出力されません&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;これは設定した値10%を超えて変化したものは無視する設定になっているためです。これ以上の説明は不要かと思います。&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;h2&gt;まとめ&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;ここまで確認したことをまとめます。&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;RBEモードではFilterノードに対する入力値が変化したらメッセージを転送します&lt;/li&gt;&lt;ul&gt;&lt;li&gt;値が変化しなかったら無視（Filter）します&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;不感帯モードではFilterノードに対する入力値が指定した値を超えて変化したらメッセージを転送します&lt;/li&gt;&lt;ul&gt;&lt;li&gt;範囲内に収まっているものは無視（Filter）します&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;狭帯域モードではFilterノードに対する入力値が指定した値の範囲内ならメッセージを転送します&lt;/li&gt;&lt;ul&gt;&lt;li&gt;範囲を超えたものは無視（Filter）します&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div&gt;Filterノードについては以上です。&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://awwa500.blogspot.com/feeds/6031773247037630967/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://awwa500.blogspot.com/2021/12/node-red-filter.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/6031773247037630967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5587841204043490178/posts/default/6031773247037630967'/><link rel='alternate' type='text/html' href='http://awwa500.blogspot.com/2021/12/node-red-filter.html' title='Filterノードを使う'/><author><name>あわ</name><uri>http://www.blogger.com/profile/08571636318581967838</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEgO_W4zMJl4er1eqomEQwUF6rmOfVgktCz71j5oFefnKfbcIOkouXWJHIqPe4rtqNNLaQ7Pb_dKh46ohv-dDV_OJ-TBhMI6e-rSfXtWkBFzMI-Q-QRML986MuJkT8Jgtt2BOBcb-_Aw7yI3yQec75Leyrbuif_BoSEqPt6EeKvSjR2POzCHoeKUqJS7=s72-w640-h158-c" height="72" width="72"/><thr:total>0</thr:total></entry></feed>