-
Notifications
You must be signed in to change notification settings - Fork 0
Flow Development Guideline
ãããŒéçºã¬ã€ãã©ã€ã³ã¯ããœãªã¥ãŒã·ã§ã³éçºããã³ãã¬ãŒãéçºã«ããããNode-REDã®ãããŒã®éçºæéã瀺ãã äžè¬çãªããã°ã©ãã³ã°ã«ãããéçºæéãšåæ§ã«ãã¢ãŒããã¯ãã£æ€èšã»èšèšãã³ãŒãã£ã³ã°ã¹ã¿ã€ã«çã®éçºæšæºãçšæãããšãéçºå¹çã¯åäžããã ãã®ãããæ¬ã¬ã€ãã©ã€ã³ã¯ãPoCéçºããããã³ãã¬ãŒãéçºã«è³ããŸã§ã®æµãã«å³ããäžèšèгç¹ã«é¢ããã¬ã€ãã©ã€ã³ãæäŸããã
ãããŒéçºã¬ã€ãã©ã€ã³ãç¹ã«åŒ·èª¿ããã®ã¯ãå¯èªæ§ãšåå©çšæ§ã®é«ããããŒãå®è£ ããããšã§ããã ããã¯ããããããŒã®å¯èŠæ§ãäœãåŠçå 容ã®çè§£ãå°é£ã ãšãåå©çšããã¢ãããŒã·ã§ã³ã¯å€±ããããœãªã¥ãŒã·ã§ã³ã³ã¢ã®åµçãµã€ã¯ã«ãåæ»åãããªãããã§ããã ããã§ãæ¬ã¬ã€ãã©ã€ã³ã§ã¯ãããå¹ççã«å¯èŠæ§ãšåå©çšæ§ãé«ããããŒãéçºããããã®ãNode-REDãæšå¥šããéçºæéãéç¹çã«èª¬æããã ãŸããNode-REDã§ã®ãããŒéçºåæãšããŠãNode-REDãNode-REDã®åºæ¬ç¥èãTipsãNode-REDã®ãã©ãããã©ãŒã ç°å¢ãèžãŸããå¶çŽäºé ãªã©ããé©å®åãäžããã
Node-REDã®ã¢ãŒããã¯ãã£ã«ãããŠããããŒéçºã¬ã€ãã©ã€ã³ã®å 容ã«é¢ä¿ããã³ã³ããŒãã³ãã¯ã以äžã®éãã§ããã
- ãããŒãšãã£ã¿
- APIã²ãŒããŠã§ã€
ãªããæ¬ã¬ã€ãã©ã€ã³ã§ã¯ãNode-REDã®ãããŒãšãã£ã¿å ã§çšæãããããŒãã®ã¿ãçšããŠããããŒãéçºããããšãæ³å®ããŠããã ãããç¬èªã«ããŒããéçºããå¿ èŠãããã°ãããŒãéçºã¬ã€ãã©ã€ã³ãåç §ããŠé ãããã
Node-REDã«ã¯ãäž»ã«ä»¥äžã®ãŠãŒã¶ãŒãååšããã
- ããã³ããšã³ãžãã¢
- ãœãªã¥ãŒã·ã§ã³éçºè
ããã³ããšã³ãžãã¢ã¯ã客å ã§ãœãªã¥ãŒã·ã§ã³ã®èª¬æããã¢ãããã ããã³ããšã³ãžãã¢ã¯ãæ¬ããã¥ã¡ã³ããå šãŠèªãå¿ èŠã¯ãªãããNode-REDã®ãããŒã¯é¡§å®¢ãšã®ã³ãã¥ãã±ãŒã·ã§ã³ããŒã«ãšããŠå©çšã§ããããããããŒã®äœãæ¹ã®æŠèŠã¯ãçè§£é ãããã ãã®çè§£ã«ãæ¬ã¬ã€ãã©ã€ã³ã掻çšããŠé ãããã
ãœãªã¥ãŒã·ã§ã³éçºè ã¯ãNode-REDãå©çšããŠãPoCããœãªã¥ãŒã·ã§ã³ãéçºããã Node-REDãå©çšãããã³ãã¬ãŒããçµã¿åãããŠåå©çšããè¿ éãªéçºãé²ããã«ããããæ¬ã¬ã€ãã©ã€ã³ã掻çšããŠé ãããã
èªè ã®è·çš®ãç«å Žã«ãã£ãŠãNode-REDãå©çšããç®çããNode-REDã§è¡ãäœæ¥ãç°ãªããããæ¬ã¬ã€ãã©ã€ã³å ã§èªãã¹ãç¯å²ãç°ãªãã æ¬ã¬ã€ãã©ã€ã³ã¯ã以äžã®3çš®é¡ã®å¯Ÿè±¡èªè ã察象ã«ããŠããã
察象èªè ã®çš®é¡ | Node-REDã§è¡ãäœæ¥ | æ¬ã¬ã€ãã©ã€ã³ã§åŸããã广 |
---|---|---|
ããã³ããšã³ãžã㢠| ã»ãã³ãã¬ãŒãã®è©Šçš ã»éšåçãªãããŒã®ä¿®æ£ |
ã»ãããŒã®çè§£é床åäž |
ãœãªã¥ãŒã·ã§ã³éçºè | ã»ãã³ãã¬ãŒãã®è©Šçš ã»ãããŒã®éçº ã»ãã³ãã¬ãŒãã®åå©çš |
ã»ãããŒã®çè§£é床åäž ã»ãããŒã®éçºé床åäž |
ãªãæ¬ã¬ã€ãã©ã€ã³ã§ã¯ãèªè ãäºåã«æ¥ç«Node-REDãšãã³ãžã§ãªã¹ãå·çã®æžç±(â»)ã«ããåŠç¿ããæè²ãå®äºãã以äžã®ç¥èãæããããšãåæã«ããŠããã
- Node-REDã«é¢ããåºæ¬çãªç¥è
- Node-REDãçšããåºç€çãªãããŒéçºã®ç¥è
ãããŒéçºã¬ã€ãã©ã€ã³ãåæãšããç°å¢ã¯ãNode-REDã§æäŸãããç°å¢ãšããã ãªãããããŒãšãã£ã¿ãå©çšããéã®ãã©ãŠã¶ã¯ãGoogle ChromeãŸãã¯Firefoxãæšå¥šããã
ãã®ããã¥ã¢ã«ã§äœ¿çšããŠããç¥èªã»çšèªã®äžèŠ§ãæ¬¡ã«ç€ºãã
ç¥èªã»çšèª | æå³ |
---|---|
API | Application Programming Interface |
JSON | JavaScript Object Notation |
Node-REDã§ã¯ãäžã€ã®ã¢ããªã±ãŒã·ã§ã³ãã"å°ããåŠç"ãçµã¿åãããŠæ§ç¯ããã äŸãã°ããã¥ãŒã¹èšäºãã¡ãŒã«ã§éä¿¡ããã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«ã¯ã ããã¥ãŒã¹ãµã€ãããããŒã¿ãååŸããç¹å®ã®äŒæ¥ã§çµèŸŒããã¡ãŒã«æ¬æäœæããã¡ãŒã«éä¿¡ããšãã£ã "å°ããåŠç"ã鿬¡çã«å®è¡ããããã«èšèšããã Node-REDã§ã¯ããã®"å°ããåŠç"ãã ããŒã ãšåŒã¶ã
ãããŒãšãã£ã¿ã§ã¯ãããŒãã¯äžã€ã®åŠçã®åºãŸããšããŠè¡šçŸãããŠããã ããŒãå士ã ã¯ã€ã€ãŒ ãšåŒã°ããç·ã§ç¹ãããšã§ãããŒãã®é次åŠçã®é åºãèšè¿°ã§ããã äžã€ã®ã¢ããªã±ãŒã·ã§ã³ãå®çŸããããŒããšã¯ã€ã€ãŒã®ç¹ãããã ãã㌠ãšåŒã¶ã
åããŒãã®åŠçã¯ãããŒãã« ã¡ãã»ãŒãž ãšåŒã°ããããŒã¿ãå ¥åãããããšã§éå§ãããã ããŒãã®åŠçãçµäºãããšãããŒãã¯ã¡ãã»ãŒãžãåºåããã ãã®ã¡ãã»ãŒãžã®å®äœã¯ãJavaScriptã®ãªããžã§ã¯ãã ã
ãããŒãšãã£ã¿ã«ãããŠãã¡ãã»ãŒãžã¯ããŒãã®å·ŠåŽã«é£æ¥ããã¯ã€ã€ãŒããå ¥åãããããŒãã®å³åŽã«é£æ¥ããã¯ã€ã€ãŒããåºåãããã ãªããããŒããšã¯ã€ã€ãŒã®æ¥å°ç¹ã 端å ãšåŒã¶ã åºåãããã¡ãã»ãŒãžã¯ãããŒãã®å³åŽããã¯ã€ã€ãŒã«æµããã¯ã€ã€ãŒã«é£æ¥ããæ¬¡ã®ããŒãã«å ¥åãããã ãã®ããã«ããããŒã§èšèšãããã¢ããªã±ãŒã·ã§ã³ã¯ããããŒã«ã¡ãã»ãŒãžãæµããåããŒãã鿬¡çã«åŠçãããããšã§å®è¡ãããã ãªãããããŒã®å é ã®ããŒãã¯å ¥å端åããªãããã®ããŒãèªèº«ãã¡ãã»ãŒãžãçæããŠåºå端åããã¡ãã»ãŒãžãéåºããã ãŸãããããŒã®æ«å°Ÿã®ããŒãã¯åºå端åããªãããã®ããŒãã®åŠçãçµäºãããšããããŒå šäœã®åŠçãçµäºããã
å€ãã®ããŒãã¯ãã¡ãã»ãŒãžã«å«ãŸããå€ãèªã¿åããå€ã«å¿ããåŠçãè¡ãã ãŸããäžéšã®ããŒãã¯ãã¡ãã»ãŒãžã«å«ãŸããå€ã倿Žããã ãã®ããããããŒã®äžã§åã¯ã€ã€ãŒããšã«ãæµããã¡ãã»ãŒãžã®å 容ã¯ç°ãªãã ããã
Node-REDã®å®è¡ãšã³ãžã³ã¯ãäžè¬çãªWebãµãŒããŒãã¢ããªã±ãŒã·ã§ã³ãµãŒããŒãªã©ãšåæ§ã«åžžæèµ·åããŠããã äœæããããããŒã¯å®è¡ãšã³ãžã³ã«èšçœ®ããããšããããŒã®å é ã®ããŒããå®è¡ãã奿©ã®åŸ ã¡åãç¶æ ãšãªãã ãããŒãå®è¡ãšã³ãžã³ã«èšçœ®ããäœæ¥ãåŠçããããã〠ãšåŒã³ããããŒã®å é ã®ããŒããåŠçãéå§ãã奿©ããã€ãã³ã ãšåŒã¶ã ãŸãããããŒã®å é ã®ããŒããå®è¡ããããšããåã«ãããŒãå®è¡ãããšè¡šçŸããããšãããã
ãã詳现ãªNode-REDã®åºæ¬äºé ã«ã€ããŠã¯ãNode-REDã®å ¬åŒããã¥ã¡ã³ããåèããããã
Node-REDãèµ·åãããšããã©ãŠã¶ããã¢ã¯ã»ã¹ã§ããã
ãŠãŒã¶ãŒã¯ã ã¯ãŒã¯ã¹ããŒã¹ ãšåŒã°ãããšãªã¢ã«ãããŒããã¯ã€ã€ãŒãé 眮ããŠãããŒãäœãã ããŒãã¯ãå·ŠåŽã® ãã¬ãã ãšåŒã°ãããšãªã¢ã«äžŠãã§ãããäžã€ã¥ã€ãã©ãã°ã¢ã³ãããããã§ã¯ãŒã¯ã¹ããŒã¹ã«é 眮ã§ããã ã¯ã€ã€ãŒã¯ãããŒãã®ç«¯åããå¥ã®ããŒãã®ç«¯åã«ãã©ãã°ã¢ã³ãããããã§è¿œå ã§ããã
ã¯ãŒã¯ã¹ããŒã¹ã«èšçœ®ãããããŒãã¯ãã¯ãªãã¯ããŠããCtrl+cã§ã³ããŒã§ããCtrl+vã§ããŠã¹ã«ãŒãœã«ã®äœçœ®ã«è€è£œãããããŒããåºçŸããã ã¯ãŒã¯ã¹ããŒã¹å ã®ä»»æã®å Žæãã¯ãªãã¯ããããè€è£œãããããŒããé 眮ã§ããã è€æ°ã®ããŒããç¯å²éžæããããšãå¯èœã§ãè€æ°ã®ããŒããåæã«ã³ããŒããããšãã§ããã
Node-REDã§ã¯ãäžã€ã®ã€ãã³ãã«å¯ŸããåŠçããäžã€ã®ãããŒãšããŠèšè¿°ããã ãããŒãšãã£ã¿ã§ã¯ãäžã€ã®ãããŒã¿ãå ã«è€æ°ã®ãããŒãèšè¿°ã§ããã é¢é£ãããããŒãäžã€ã®ãããŒã¿ãå ã«èšè¿°ããããšã§ãã¿ãã«å«ãŸãããããŒã®æå³ãçè§£ãããããªãã
ãããŒã«å«ãŸããããŒãã®åŠçã¯ããããŒã®å·Šç«¯ããå³ç«¯ã«ãããŠãã¡ãã»ãŒãžãæµããããšã«é ã«å®è¡ãããã Node-REDã§æšæºã«çšæãããŠããå€ãã®ããŒãã¯ãåæçã«åŠçãããããã«èŠããã ãã ããfunctionããŒãããç¬èªã«ãŠãŒã¶ãŒãéçºããŠå©çšããããŒãã§ã¯ãããŒããã¡ãã»ãŒãžãéåºããåŸãåŒãç¶ãåŠçãç¶ããããã«ã§ããã
ãŸããäžã€ã®ãããŒã¯ãåæã«è€æ°ã®ã¡ãã»ãŒãžãåŠçããããšãã§ããã ããªãã¡ããããŒã®å é ã®ããŒããããããŒã®æ«ç«¯ã®ããŒããåŠçãå®äºããåã«ã次ã®ã¡ãã»ãŒãžãéåºããããšãå¯èœã ã ãã ããNode-REDã§ã¯ãåºæ¬çã«ã¡ãã»ãŒãžã®é åºã¯ä¿èšŒãããªãã ã¡ãã»ãŒãžã®é åºãæèããåŠçãè¡ãå¿ èŠãããå Žåã¯ãåŸè¿°ãã"Message Sequence"ãåèã«ããŠã»ããã
ãªãããããŒã¿ãå ã§ã¯ãäžã€ã®ãããŒã¿ãå ãã¹ã³ãŒããšãã ãããŒã³ã³ããã¹ã ãšåŒã°ãã倧å倿°ãå©çšã§ããã ãŸããå šãŠã®ãããŒã¿ãïŒããªãã¡å šãŠã®ãããŒïŒãã¹ã³ãŒããšãã ã°ããŒãã«ã³ã³ããã¹ã ãšåŒã°ãã倧å倿°ãå©çšã§ããã ãããã®å€§å倿°ã®å©çšã«é¢ããããŠããŠã¯åŸè¿°ããããåºæ¬çã«ã¯ãåŠçã®å¯èªæ§ãäœæžãããèŠå ã«ãªãããæ³šæãå¿ èŠã ã
ã¡ãã»ãŒãžã¯JavaScriptã®ãªããžã§ã¯ãã§ãããmsg
ãšãããªããžã§ã¯ãåãã€ããŠããã
Node-REDèªäœã¯ãã¡ãã»ãŒãžã衚ãããŒã¿ã®å
容ãªã©ã«ç¹ã«å¶éãããŠããªãããæ¯èŒçå°ããããŒã¿ã衚ãå Žåãå€ãã
äŸãã°ãIoTã¢ããªã±ãŒã·ã§ã³ã§1ä»¶ã®ã»ã³ãµãŒããŒã¿ããã©ã³ã¶ã¯ã·ã§ã³åŠçãããæ¥åã·ã¹ãã ã§ã¯ãåŠçã®éå§ãæç€ºããä¿¡å·(ãªã¯ãšã¹ã)ãªã©ã§ããã
ã¡ãã»ãŒãžã®èšèšæ¹éãšå®è£
ã«é¢ããŠã¯ãå®è£
ã®ç« ãåç
§é ãããã
ã¡ãã»ãŒãžã«ã¯ã以äžã®2éãã®äœ¿ããæ¹ãããã
- ããŒããåŠçããããŒã¿ããŸãã¯ãã®ããŒã¿ã®åç §æ å ± (ããªãã¡ããŒãã®åŠçã®å ¥åããŒã¿)
- ããŒãã®æ©èœãå¶åŸ¡ãããã©ã¡ãŒã¿
1ç¹ç®ã®ç®çã§äœ¿ãããmsg
ã¯ããã®ã¡ãã»ãŒãžãå©çšããããŒãããmsg
ãªããžã§ã¯ãå
ã®ã©ã®ãã©ã¡ãŒã¿ã«å¿
èŠãšããå€ãå
¥ã£ãŠããããåãã£ãŠããªããã°ãªããªãã
ã€ãŸããmsg
ãçæããããŒããšå©çšããããŒãã®éã§äŸåé¢ä¿ãçºçããã
ãã®äŸåé¢ä¿ãç·©åããæ¹æ³ããå®è£
ã®ç« ãåç
§é ãããã
ãªãã倧容éã®ããŒã¿ãåŠçããå Žåã¯ãmsg
ãªããžã§ã¯ãå
ã«ããŒã¿ãå
¥ãããDBããã¡ã€ã«ã«æ ŒçŽããŠmsg
ãªããžã§ã¯ãã«ã¯ãã®åç
§æ
å ±ãä¿æããã®ããã¡ã¢ãªæ¶è²»éãæããããã®ã§è¯ãã
2ç¹ç®ã®ç®çã§äœ¿ãããmsg
ã¯ãããŒãã«å°çããã¡ãã»ãŒãžå
ã®ç¹å®ã®ããããã£ã«å¿ããŠãåŠçå
容ãå€ããããŒãã«ãã£ãŠäœ¿ãããã
äŸãã°ãMqttéä¿¡ããŒãã¯ãã¡ãã»ãŒãžå
ã«msg.topic
ããããã£ãååšããŠãããããã®å€ãåç
§ããMQTTã¡ãã»ãŒãžã®ãããã¯åã«å©çšããã
ããã¯ãããŒãã®ä»æ§ãšããŠå®ãŸã£ãŠãããããmsg
ãªããžã§ã¯ãå
ã®ã©ã®ãã©ã¡ãŒã¿ãå©çšããããããåãããããã
Node-REDã«éãããããžã¥ã¢ã«ããã°ã©ãã³ã°å šè¬ã«èšããããšãšããŠãåŠçãèŠããããå°ããªã¢ããªã±ãŒã·ã§ã³ã§ããã°ãã»ãŒããã°ã©ãã³ã°ã¹ãã«ãªããç°¡åã«äœæããããšãã§ããã ããããã¢ããªã±ãŒã·ã§ã³ã®èŠæš¡ã倧ãããšãäžè¬çãªããã°ã©ãã³ã°ã§ãã"ã¹ãã²ããã£ãŒã³ãŒã"ãå¯èŠåãããŠããŸãã ã ãããã®åé¡ã¯ãããäžå®ã®æ³šæã工倫ãéçºæã«å¿ãããããšã§ãããçšåºŠè§£æ±ºã§ããã ã¹ãã«ã«é¢ä¿ãªã誰ã«ã§ãå¯èœã§ããã广ã®å€§ãã工倫ãšããŠããŸãã¯ãããã説æãããã
ãŸããäžè¬çãªããã°ã©ãã³ã°èšèªã§ãã¿ããã¹ããŒã¹ãªã©ã«ãããåŠçã®æ§é ãèŠããããªãã®ãšåæ§ã«ãNode-REDã§ã¯ããŒãã¯ãããã«æŽåãããã®ãæãŸããã ç¹ã«ãããŒãã®äžŠã³æ¹ã工倫ããããšã§ãåŠçã®å 容ã«å¯Ÿããäœããã®æå³ãå«ãŸããããã
Node-REDã«ã¯ãããŒãããããã«é åããããšãè£å©ãããã°ãªããæ©èœããååšããã ãããæå¹åããã ãã§ãæäœéã®çµ±äžæãæã£ãããŒãã®é 眮ããèªåçã«å®çŸã§ããã æå¹åããæ¹æ³ã¯ãNode-REDã®ç»é¢ã®å³äžã«ããèšå®ãã¿ã³ããããèšå®ã->ãã°ãªããã衚瀺ããšã¯ãªãã¯ããŠããããããŒãã®é 眮ãè£å©ãã«ãã§ãã¯ãã€ããã ãã ã èšå®ãåæ ããããšããšãã£ã¿ãŒå ã«ãã¹ç®ãçŸããã ãããŠããšãã£ã¿ãŒå ã«ããŒããé 眮ãããšãããŒãããã¹ç®ã«åãããŠé 眮ãããããã«ãªãã
ãŸãããããŒã®äžŠã³æ¹ãæŽçããã ãã§ããã¿ãã«å«ãŸããåŠçã®å 容ãçè§£ãããããªãã äžã®å³ã§ã¯ã1ã€ã®ã¿ãã®äžã«ãè€æ°ã®åŠçãèšè¿°ããŠããã è€æ°ã®åŠçããŸãšããåŠç矀ã«å¯Ÿããã³ã¡ã³ãããŒãã远å ããåãããŒã«å¯Ÿãã説æãšããã®ãããŒããäžæ®µéå³ã«ããããŠé 眮ããŠããã ãã®é 眮ã«ããããããŒã®é²èЧè ã¯ãäžå³ã«ã¯2çš®é¡ã®åŠç矀ãååšããååŠç矀å ã®åŠçãåå¥ã«çè§£ããããšã容æã«ãªãã
æãå¯èªæ§ã®è¯ããããŒã®èšè¿°æ¹æ³ã¯ãäžã€ã®åŠçããã§ããéãæšªäžçŽç·ã«äžŠã¹ãããšã§ããã ãããŒã®åå²ãããå Žåã¯ãåå²åŸã®ãããŒã瞊ã«ããããŠäžŠã¹ããšãåæ®µã®ããŒãããåå²ããã2ã€ã®åŠçã察æ¯ãããããã
åºæ¬çã«ã¯æšå¥šããªãããããŒãã瞊ã«äžŠã¹ãããšãæå¹ãªã±ãŒã¹ãããã äžå³ã«ã¯ãããŒããçžŠã«æŽåãããŠããéšåãããã ãã®çžŠã«äžŠãã ããŒãã®éåã¯ããããŒå ã§æå³ãæã£ãäžãŸãšãŸãã®åŠçã§ããããã«èŠãã(å®éã«ããã§ãã)ã äžã€ã®å€§ããªåŠçããã£ããšãã«ããã®äžã«å«ãŸããå°ããªåŠçã®ãŸãšãŸããšããã®é¢é£ãæããããšãã§ããã°ã倧ããªåŠçã®æŠèŠãçè§£ããããšã¯å®¹æã«ãªãã ãã®ãããäžå³ã®ããã«ãäžã€ã®ãããŒãé·ãããããŒã®äžã«åŠçã®ãŸãšãŸããããå Žåã«ã¯ããã®ãŸãšãŸããæ§æããããŒãã瞊ã«äžŠã¹ãããšã§ããããŒã®åŠçã®æŠèŠãçè§£ãããããªãã
ããŒããã¿ãã«é©åãªååãä»ããããšãããããŒã®å¯èªæ§ãåå©çšæ§ã«å€§ãã圱é¿ãäžããã 以äžã®åœåèŠåã¯äžäŸã ããåœåèŠåã®çå®ã«è¿·ã£ãæã«ã¯åèã«ããŠã»ããã
ããŒãã«ã¯åå¥ã«ããŒãåãä»ãããšãã¯ãŒã¯ã¹ããŒã¹äžã§ãã®ããŒãåã衚瀺ãããã ãã®ãããããŒãã®åŠçå 容ã端çã«è¡šçŸããååãä»ããããšã§ããããŒã®å¯èªæ§ãé«ãŸãã
ããŒãã¯ãå°ããªåŠçåäœã ããã¢ããªã±ãŒã·ã§ã³ã®äžã§ã®åããŒãã®åœ¹å²ã¯æ§ã ã ã äŸãã°ãã¢ããªã±ãŒã·ã§ã³ã«ãããæ¥åã¬ãã«ã®åŠçãè¡ãåŠçèŠæš¡ã®å€§ããªããŒããããã°ãåãªãããŒã¿åŠçãè¡ãããŒããããã
ãããã®ããŒãã®åœ¹å²ãç«ã¡äœçœ®ã«å¿ããŠãåœåã®ä»æ¹ãå€ããæ¹ãããããŒå šäœã®åŠçã®èŠéãããããªãã ããã§ã以äžã®ãããªåœåèŠåãææ¡ããã
- é«ã¬ãã«(æ¥åã¬ãã«)ã®ãããŒã«å«ãŸããããŒã
- æ¥ååŠçãåãããããããŒãå
- äœã¬ãã«(åŠçå®è£
ã¬ãã«)ã®ãããŒã«å«ãŸããããŒã
- ãåè©ïŒç®çèªããåè©ïŒç®çèªïŒå¯è©ã
ãã®ããã«ãåŠçã®ã¬ãã«ã§åœåèŠåãåããçç±ã¯ããããŒãé²èЧã»å©çšãããŠãŒã¶ãŒããšã«é¢å¿ãç°ãªãããã ã é«ã¬ãã«ã®ãããŒã¯ãã¢ããªã±ãŒã·ã§ã³ã®æŠèŠãç°¡æœã«ç¥ããããŠãŒã¶ãŒã«ãšã£ãŠéèŠãªããŒãã ã äœã¬ãã«ã®ãããŒã¯ããšã³ãžãã¢ãé²èЧã»ä¿®æ£ãè¡ãã ãã®ãããé«ã¬ãã«ã®ãããŒã§ã¯ãæ¥ååŠçãåãããããããã«ãããŒãã«åç§°ãä»ããã¹ãã§ããã äœã¬ãã«ã®ãããŒã§ã¯ãåŠçå å®¹ãææ¡ããããããã«ãããŒãã«åç§°ãä»ããã¹ãã ããã
é«ã¬ãã«ã®ãããŒã«å«ãŸããããŒãã«ã¯ããã®åç§°ã®ã¿ã§æ¥åå 容ãã€ã¡ãŒãžã§ããååãä»ããã é«ã¬ãã«ã®ãããŒã¯ãå€§èŠæš¡ã«ãªãã«ãããããååã¯å€å°é·ããŠããããç®å®ãšããŠã50æå以å ãæšå¥šããã ãã ããæ¥åå 容ã®è£è¶³æ å ±ãªã©ã¯ãããŒãã®æ å ±ã¿ãã«èšèŒããããã«ããã
äœã¬ãã«ã®ãããŒã«å«ãŸããããŒãã«ã¯ãåŠçå 容ãã€ã¡ãŒãžã§ããã端çã§çµ±äžæã®ããååãä»ããã äžè¬çãªã³ãŒãã£ã³ã°ã«ãŒã«ãšããŠã颿°åããåè©ïŒç®çèªãããåè©ïŒç®çèªïŒå¯è©ãã§åœåããå Žåãå€ãããã ãåè©ïŒç®çèªããŸãã¯ãåè©ïŒç®çèªïŒå¯è©ãã§çµ±äžããããšãæšå¥šããã ãããã以å€ã®åè©ãçšããå Žåã§ããåè©ã®é åºã¯çµ±äžããããšãæãŸããã
ã¿ãã«ãååãä»ããããšãã§ããã ã¿ãã®åœåèŠåã«ã¯ã以äžãææ¡ããã
- ãåè©ã
- è€æ°åèªãããªãåè©ã§ãæ§ããªã
- 20å以å ã«åãã
ã¿ãã¯ãè€æ°ã®ãããŒãã¢ããªã±ãŒã·ã§ã³ãšããŠã®æå³ã®ããåäœã«ãŸãšãããã®ã§ããã ãã®ãããã¿ãã®ååã¯ãæ©èœããã³äžé£ã®æ¥åã端çã«æã瀺ãåç§°ããµããããã ãã£ãŠããããŒã®ååããåè©ãã§çµ±äžããããšãæšå¥šããã
ãããŒã«ä»ããååã¯ãè€æ°ã®åèªããæ§æãããåè©ã§ãæ§ããªãã ãã ãããã©ãŠã¶ïŒã衚瀺ãããã£ã¹ãã¬ã€ïŒã®ãµã€ãºã«ãã£ãŠã¯ã20å以äžã®ååãä»ãããšã20æåç®ä»¥éãèªã¿åãã«ãããªãã ãã®ããã20æå以å ã§åœåããããšãæšå¥šããã
ããŒãã®çš®é¡ã«ã¯ãããããæåŸ ããã圹å²ãããã äŸãã°ãchangeããŒãã§ããã°ãäœãã®å€æ°ã®å€ã倿ŽããåŠçãè¡ãããããšãæåŸ ãããã
ããããããåŠçããè€æ°ã®ç°ãªãããŒãã§å®çŸã§ããã±ãŒã¹ãããã äŸãã°ãchangeããŒããè¡ãå€ã®çæã¯ãtemplateããŒãã§ä»£çšã§ããã splitããŒãã«ããã¡ãã»ãŒãžåå²ã¯ãchangeããŒãã®JSONataæ§æãçšããããšã§ãå®çŸã§ããã ããããåããŒãããæ¬æ¥ãšç°ãªãçšæ³ã§çšãããšãä»è ããããŒãèŠãæã«çè§£ãã«ãããããã«èª€èªèããå±éºæ§ãããã ãã®ãããããŒãã¯ãããŒãã®æ¬æ¥ã®åœ¹ç®éãã«å©çšããã¹ãã§ããã
åèãŸã§ã«ãäžèšã«ãå€ãã®ãŠãŒã¹ã±ãŒã¹ã§é »ç¹ã«å©çšãããããŒãã®æ¬æ¥ã®çšæ³ãèšèŒããã
ããŒãå | äž»ãªçšé |
---|---|
changeããŒã | ã¡ãã»ãŒãžãã³ã³ããã¹ãå ã®ããããã£ã®çæããå€ã®å€æŽã»åé€ã»ç§»å |
switchããŒã | ã¡ãã»ãŒãžã®ããããã£ãã³ã³ããã¹ãã®å€ã«å¿ãããããŒã®æ¡ä»¶åå² |
templateããŒã | å ¥åãããããŒã¿ãšãããããçšæããå®åæãçµã¿åãããããŒã¿ã®çæ |
linkããŒã(in/out) | (in/out)ãããŒéãä»®æ³çãªã¯ã€ã€ãŒã§é£çµ |
http in/http responseããŒã | (http in) HTTPãšã³ããã€ã³ãã®èšå®ã(http response)HTTPãªã¯ãšã¹ãã®éä¿¡ |
Node-REDã«ã¯ãä»»æã®åŠçãå®è¡ã§ãã"äžèœããŒã"ãååšããã ãããã®ããŒãã¯ã䟿å©ã§ããåé¢ããããŒã®å¯èªæ§ã®èгç¹ã§ã¯æ³šæãå¿ èŠã§ããã
- functionããŒã
- execããŒã
functionããŒãã§ã¯ããŠãŒã¶ãŒãfunctionããŒãã®èšå®ç»é¢äžã«JavaScriptã®ã³ãŒããèšè¿°ããããšã§ãä»»æã®åŠçãäœæããããšãã§ããã functionããŒããçšããããšã§ãNode-REDã®å¶çŽã®ç¯å²å ã§ãJavaScriptã§èšè¿°å¯èœãªããããåŠçãå®çŸã§ããã
JavaScriptã«æ £ããŠãããŠãŒã¶ãŒã¯ãå šãŠã®åŠçãfunctionããŒãã§èšè¿°ããããªããããããªãã ããããfunctionããŒãã®å€çšãéæšå¥šãšããã ãã®çç±ã¯ããããŒãèŠãã ãã§ã¯ããããŒã®åŠçå å®¹ãææ¡ãã«ãããªãããã§ããã ãŸããJavaScriptã«æ £ããŠããªããŠãŒã¶ãŒãNode-REDãå©çšããããfunctionããŒããå€çšãããŠãããããŒã¯ããã®ãããªãŠãŒã¶ãŒã«ãšã£ãŠåå©çšãã«ãããã®ã§ããã ããã«ãfunctionããŒãå ã§ã°ããŒãã«ã³ã³ããã¹ãããããŒã³ã³ããã¹ããªã©ãçšãããšãã³ã³ããã¹ãã«äŸåããããŒãã§ãã°ãååšããå Žåã«ããã°ã®ç¹å®ã«æéãèŠããã
äžå¿ èŠãªfunctionããŒãã®å žåäŸã¯ã倿°ãžã®å€ä»£å ¥ã倿ŽããfunctionããŒãå ã§èšè¿°ããŠããã±ãŒã¹ã§ããã 倿°ããã¡ã€ã³å ã®æ¥åã«ãããŠéèŠãªæå³ãæã€å Žåã¯ç¹ã«ãfunctionããŒãå ã«å€ä»£å ¥ã»å€æŽã®åŠçãèšè¿°ãããchangeããŒããå©çšãã倿°ã«å€ãä»£å ¥ããããšãä»ã®ãããŒé²èЧè ã«æç€ºããããšãéèŠã§ããã changeããŒãã¯è€æ°ã®å€ä»£å ¥ã1ããŒãã§èšèŒããããšãå¯èœã§ãããããã«JSONataæ§æã«ããJSONæäœçšã®ã¹ã¯ãªãããèšè¿°ããããšãå¯èœãªã®ã§ãfunctionããŒããå©çšããã«ãæè»ãªå€ä»£å ¥ã»å€æŽãå®çŸã§ããã 詳现ã¯ãæ¬ã¬ã€ãã©ã€ã³ã®AppendixããNode-REDã®changeããŒãã®ä»æ§ãåç §ããŠé ãããã
ãã ãããã¡ã€ã³ããžãã¯ãšããŠå€§ããªæå³ãæããªãåŠçããfunctionããŒã以å€ã§èšè¿°ãããšããããŒãå€§èŠæš¡åããæãããã ç¹ã«å¯èªæ§ãæ±ããå¿ èŠã®ãªãäžé£ã®åŠçã«ãã£ãŠããããŒå šäœã®å¯èªæ§ãäœäžããã®ã¯æ¬æ«è»¢åã§ããã ãã®å Žåã«ã¯ãfunctionããŒããå©çšããæ¹ããå¯èªæ§ãåäžããã
ãŸããããšããã¡ã€ã³ããžãã¯ãšããŠå€§ããªæå³ãæããªãåŠçã§ãã£ãŠããé »ç¹ã«å€æŽããããåŠçã¯ãfunctionããŒã以å€ã§èšè¿°ããæ¹ãæãŸããã äŸãã°ãä»ã®ãããŒéçºè ãããããŒã®åå©çšæã«å€æŽãå ããããšãäºæ³ãããåŠçããæ¥åå å®¹ã®æŽæ°ãªã©ã«ãã£ãŠãç¶ç¶çã«ç·šéãããåŠçãªã©ã§ããã ãããããä¿®æ£ãããããšãåãã£ãŠããã®ã§ããã°ãä¿®æ£ãã€ã³ãããããŒããæç¢ºåãããããã«ãfunctionããŒãã§ã¯ãªããåŠçã®æµããæããããããŒãã§èšè¿°ããã®ãè¯ãã
ãã®ãããfunctionããŒããå©çšããéã®æéãšããŠã¯ããä»è ãèŠãå¿ èŠã®ãªãã»ã©ãã¡ã€ã³å ã§éèŠåºŠãäœãããã€ã倿޿©äŒãå°ãªããåŠçã¯ãfunctionããŒãã«èšèŒããŠããã ããã
ã¡ãªãã | ãã¡ãªãã |
---|---|
ã»ããŒã/ãããŒã«ãšããããããã¬ãã·ãã«ã«åŠçãããã ã»ãããŒã®èŠæš¡ãçž®å°ã§ãã |
ã»ãããŒãèŠãã ãã§ã¯åŠçå
容ãåãããªã ã»JavaScriptã«æ £ããŠããªã人ã«ã¯åãããªã |
execããŒãã¯ãNode-REDã皌åããLinuxãµãŒããŒã®ã³ãã³ããå®è¡ã§ããããŒãã§ããã
execããŒããçšããããšã§ãLinuxãµãŒããŒã®äžã«ä»»æã®ããã°ã©ã ãçšæããexecããŒãã§ãã®ããã°ã©ã ãå®è¡ããã°ãä»»æã®åŠçãå®çŸããããšãã§ããã ããã«ããããããŒéçºè ã¯èªèº«ã®å¥œããªããã°ã©ãã³ã°èšèªã§åŠçãå®è£ ã§ãããã¹ãããããšãå¯èœã«ãªãã
ãããããã®ãããªexecããŒãã®å©ç𿹿³ãæšå¥šããªãã ãã®çç±ã¯ãfunctionããŒãã®æãšåãããä»è ããã¯ãããŒãèŠãã ãã§ã¯åŠçå 容ãçè§£ã§ããªãããã§ããã ãŸãããããŒãåå©çšããããã«ã¯ãéçºè ãçšæããããã°ã©ã ãšãç¹å®ã®LinuxãµãŒããŒã®ç°å¢ãå¿ èŠãšãªããããäœæãããããŒã®é åžãå°é£ã§ããã
execããŒãã®å©çšãé©ããŠããã®ã¯ã以äžã®ã±ãŒã¹ã®ã¿ã§ããã
- å®è¡åºç€(ãµãŒããŒ)ãžã®ãã¡ã€ã«ã®ä¿åãŸãã¯ååŸ
- å®è¡åºç€ã«äŸåããåŠçã®å®è¡
äŸãã°ãäžæçã«ãã°çã®ããŒã¿ããµãŒããŒå ã«ä¿åããããåé€ããå Žåã«ã¯ãexecããŒãã§Linuxã³ãã³ããå®è¡ããå¿ èŠãããã ãã ããrmã³ãã³ããéä¿¡ç³»ã³ãã³ããªã©ã䜿ãå ŽåãNode-REDã®ç°å¢ã®ç Žå£ãã»ãã¥ãªãã£é¢ã§ã®å±éºæ§ãããã ãããååçè§£ããäžã§ãexecããŒãã¯å¿ èŠæå°éã«çšããã®ãè¯ãã
ã¡ãªãã | ãã¡ãªãã |
---|---|
ã»å®è¡åºç€(ãµãŒããŒ)äŸåã®åŠçãå®è¡ã§ãã ã»ä»»æã®ããã°ã©ã ãå®è¡ã§ãã |
ã»ãããŒãèŠãã ãã§ã¯åŠçå
容ãåãããªã ã»rmãéä¿¡ç³»ã³ãã³ããªã©ã䜿ãå Žåãç°å¢ç Žå£ãã»ãã¥ãªãã£é¢ã§å±éºæ§ãé«ã |
倧éã®ããã€ã¹ãè€æ°ã®MQTTããŒãã§ç®¡çããã±ãŒã¹ãªã©ãåãçš®é¡ã®ããŒãããããŒå ã§æ··åšãããšèŠåããä»ãã«ãããªãå Žåãããããã®ãããªå Žåã«ã¯ãããŒãããšã«ç°ãªãã¢ã€ã³ã³ãæå®ããããšãã§ããã¢ã€ã³ã³ã®å€æŽæ©èœã圹ç«ã€ã 泚æç¹ãšããŠãã¢ã€ã³ã³ã®å€æŽæ©èœã倿§ãéãããšãããŒãã®èŠèªæ§ãäžããå¯èœæ§ãããããããã©ã³ã¹ãèæ ®ããŠå©çšããããšã
ã¢ã€ã³ã³ã®å€æŽã¯ã以äžã®ããã«ããŒãã®ç·šéç»é¢ã®èšå®ã¿ãã§è¡ãããšãã§ããã éžæããã¯ã¹ã®å·ŠåŽã¯ã¢ã€ã³ã³ãã¡ã€ã«ãå«ãã§ããNode-REDããŒãã®ããã±ãŒãžäžèЧã衚瀺ããå³åŽã§éžæããããã±ãŒãžå ã«å«ãŸããã¢ã€ã³ã³äžèЧã衚瀺ããã
èªèº«ã§äœæããç»åãã¡ã€ã«ãããŒãã®ã¢ã€ã³ã³ã«æå®ããããšãå¯èœã§ããã
$HOME/.node-red/lib/icons
ã«pngãã¡ã€ã«ã眮ããŠNode-REDãåèµ·åããããšã§ãNode-REDããŒãã®ããã±ãŒãžäžèЧã«Library
ãšããé
ç®ãå¢ããããããç¬èªã®ã¢ã€ã³ã³ãéžæã§ããããã«ãªãã
以äžã泚æäºé ã«ã€ããŠè¿°ã¹ãã
- ç»åã®èŠä»¶ã«ã€ããŠã¯ãCustom iconãåç §ããããšã
- ç¬èªã®ã¢ã€ã³ã³ãå©çšããå ŽåããããŒãä»ã®ãã·ã³äžã«ã€ã³ããŒãããæã«ãã€ã³ããŒãå ã§ãã¢ã€ã³ã³ã®ã¢ããããŒããå¿ èŠãšãªãã
- Node-RED v0.20以éã¯ãfont-awesomeã®ã¢ã€ã³ã³ã«å¯Ÿå¿ããäºå®ã§ã察å¿ããåŸã¯æ§ã ãªã¢ã€ã³ã³ãå©çšã§ããããã«ãªãã
äž»ãªãŠãŒã¹ã±ãŒã¹ãšããŠã¯ã以äžãæ³å®ããŠããã
- 倧éã®ããã€ã¹ã管çããéã«ãMQTTããŒãã«ããã€ã¹ã®ã€ã¡ãŒãžã貌ãä»ããã
- functionããŒããŸãã¯ãµããããŒããŒãã§ãå 容ã衚ãã€ã¡ãŒãžã貌ãä»ããã
- ã³ã¡ã³ãããŒãã§ãéèŠåºŠã«å¿ããŠè²åãããã
å°ãããããŒãéçºããéã¯ãã¢ãããã¯ã«éçºãé²ããŠãåé¡ãªãããããžãã¯ã®è€éãªå€§ããã®ãããŒãéçºããå Žåã¯ãæŠç¥çã«èšèšã»éçºãé²ããŠããã®ãè¯ãã ããã
倧ãããéçºã®æµãããèšèšãã§ãŒãºãéçºãã§ãŒãºãæ¹åãã§ãŒãºãšåããã æ¬ããŒãžã§ã¯ãèšèšãã§ãŒãºã«ã€ããŠèª¬æããã
èšèšãã§ãŒãºã§ã¯ããŸããã¢ããªã±ãŒã·ã§ã³ã察象ãšããåŠçããæŽçãããã 察象ãšãããã¡ã€ã³ã«ã¯ãã©ã®ãããªã¢ãã人ãäœæ¥ãã«ãŒã«ãªã©ãããã ãããã ãããŠãããããã©ã®ãããªé¢ä¿æ§ãæã€ãããããŒãããã¯ã€ãããŒãã§èããŠã¿ãŠã»ããã ãŸããã¢ããªã±ãŒã·ã§ã³ã®ç®çãšã䜿ããæ¹ãå®çŸ©ããŠããã
ãã¡ã€ã³ã«ã€ããŠæŽçãã§ãããããã®ãã¡ã€ã³ã«å«ãŸããåŠçããŸãšããŠããã ãã®äœæ¥ã®æå³ã¯ãå®è£ ãã§ãŒãºã«ãããŠ1ã€ã®ã¿ãã«å®è£ ããåŠçå 容ã»èŠæš¡ã決ããããšã ã
è£è¶³ã ããåºæ¬çã«ãããŒããŒã¹ããã°ã©ãã³ã°ã¯ãç¶æ ã®ç®¡çãåŸæãšããªãã ãªããªããåŠçã®æµããå¯èŠåããã®ããããŒããŒã¹ããã°ã©ãã³ã°ã®è¯ããšããã§ããããç¶æ ã¯ãããŒãšããŠéçã«å¯èŠåããåŸãªãããã ã ããã§ãç¶æ ã®ç®¡çããã©ã³ã¶ã¯ã·ã§ã³ãå¿ èŠãšããã¢ããªã±ãŒã·ã§ã³ã¯ååšãããããäžèšã®èª¬æã¯ãã®å Žåã®å¯Ÿå¿ãšããŠæããŠã»ããã
ãã¡ã€ã³ã¢ãã«ã®èšèšãè¡ã£ããããããåæ ãããããªãããŒã®æ§é ãèããã
ã¿ãå
ã§ã¯ãäžã€ã®æå³ã®ããæ¥ååŠçãè¡ãã
ãŸããã¿ãã®äžã§ã¯ãåŸè¿°ããmsg.payload
ã®æ±ããããããŒã³ã³ããã¹ããªã©ãããã®ã¿ãã«éããã«ãŒã«ã§å©çšã§ããã
ãã®ããããã©ã³ã¶ã¯ã·ã§ã³ãååšãããå Žåã¯ãåºæ¥ãã ãäžã€ã®ã¿ãã®äžã§ããã©ã³ã¶ã¯ã·ã§ã³ãå®çµããã®ãè¯ãã ããã
å®è£
ã®è€éãããç·©åãããã
ãŸããäžã€ã®ã¢ããªã±ãŒã·ã§ã³ãæç«ãããããã«ã¯ãåŸã
ã«ããŠè€æ°ã®ã¿ãã飿ºããããšã«ãªããããã¿ãéã®I/Fãæ€èšããã
ã¿ãã«å
¥ã£ãŠããã¡ãã»ãŒãžãšããŠæåŸ
ããmsg
ãªããžã§ã¯ããå®çŸ©ããã¿ãã®ã³ã¡ã³ããšããŠèšèŒããŠããã®ãè¯ãã
ãããŒã«æµããã¡ãã»ãŒãžã¯ãJavaScriptã®msg
ãšããååã®ãªããžã§ã¯ãã ã
ãã®ã¡ãã»ãŒãžã¯ãéšåçã«Node-REDãNode.jsã®å¶çŽãå®è¡ã¢ãã«ã«åœ±é¿ãåããããã¡ãã»ãŒãžãªããžã§ã¯ãå
ã«ä»»æã®å±æ§ãæãããããä»»æã®åã®å€ãå
¥åããããšãåºæ¥ããããèªç±åºŠãé«ãã
ããªãã¡ãmsg
ãªããžã§ã¯ãå
ã®ããããã£ã¯ãå
šãŠä¿®æ£å¯èœã§ãããæ°ããããããã£ãä»ããŠè¯ãã
ãã ããã¡ãã»ãŒãžã¯ããã®ã¡ãã»ãŒãžãçæããããŒããšããã®ã¡ãã»ãŒãžãå©çšããããŒãã®éã§äŸåé¢ä¿ãçããåå ã§ããã
äŸãã°ãããããããŒãããå
¥åã¡ãã»ãŒãžã®msg.payload
ã«æž©åºŠã®æ
å ±ãå«ãŸããŠããããšãæåŸ
ããŠããã®ã§ããã°ããã®ããŒãã®å段ã®ããŒãã§ã¯ãmsg.payload
ã«æž©åºŠã®æ
å ±ãå
¥ããªããšãããªãã
å€§èŠæš¡ãªãããŒãèšè¿°ããããã¡ãã»ãŒãžã¯å€æ°ã®ããŒãã蟿ãããããã®ãããªäŸåé¢ä¿ãæç¢ºã«ããªããšããããŒã®åå©çšæ§ã倿Žãžã®æè»æ§ãèããæãªãããã
ããã§ããããŒã®æ§é ãšå ±ã«ã¡ãã»ãŒãžã«ã€ããŠãããããŒã®åå©çšæ§ãæè»æ§ãé«ãããããã«ãé©åãªèšèšãæ€èšãã¹ãã ã
ãŸããã¡ãã»ãŒãžã®èšèšã«ãã£ãŠãã·ã¹ãã èšèšãå€ããããšãããåŸãã ãããŒã®å®è£ ã«å ¥ãåã«ãã¡ãã»ãŒãžã®èšèšãè¡ã£ãŠããå¿ èŠãããã
msg
ãªããžã§ã¯ãã®ããããã£åã«åœåå¶çŽã¯ãªããããæå³ããã«è€æ°ã®ããŒããåäžã®ããããã£ã䜿çšããå±éºæ§ãããã
ãã®å±éºæ§ãæãããããèšèšäžã®ã«ãŒã«ãšããŠãããŒã¿ã®äœçœ®ã¥ãããšã«ãmsg
ãªããžã§ã¯ãå
ã§ãã®ããŒã¿ãæ ŒçŽãããã©ã¡ãŒã¿ãŒã決ããŠãããæ¹ãè¯ãã
ã¡ãã»ãŒãžã®èª¬æã§ãã¡ãã»ãŒãžã«ã¯ãããŒããåŠçããããŒã¿ãšããŒãã®æ©èœãå¶åŸ¡ãããã©ã¡ãŒã¿ã®2çš®é¡ãããããšãæžããã
åè
ã®ããŒã¿ã¯ãmsg.payload
ããããã£å
ã«èšå®ããããšãæšå¥šããã
ãªããªããåŸè
ã®ããŒã¿ã¯ãNode-REDãæäŸããããŒããmsg.
çŽäžã®ããããã£ãå©çšããããã ã
äŸãã°ãMQTTåºåããŒãã§ã¯ãå°çããã¡ãã»ãŒãžã®topic
ããããã£(msg.topic
)ãåç
§ããMQTTãããŒã«ãŒã«éä¿¡ããã¡ãã»ãŒãžã®ãããã¯åãèšå®ããã
äžã®å³ã¯ãfunctionããŒãproc1ã§ãmsg.topic
ããããã£ããããŒãã®åŠç察象ã®ããŒã¿ã®æ ŒçŽå
ãšããŠçšããŠããã°ãçããäŸã§ããã
MQTTéä¿¡ããŒãã§ã¯ãããã¯åã"Building/Room1/temperature"ã«èšå®ããŠãããã®ã®ããããã¯åãæå³ããªãå€("hot"ãŸãã¯"cool")ãšãªãéä¿¡ãããã
ç¹ã«æ³šæãããã®ã¯ãMQTTããŒãã®ããã«ãããŒãã®æ©èœã®å¶åŸ¡ãããµã€ãããŒã«è¡šç€ºãããããŒãã®èšå®ã«èšè¿°ããããšããmsg
ãªããžã§ã¯ãå
ã«ãèšå®ã§ããããŒãã ã
ãã®ãããªããŒãã§ã¯ãäŸããµã€ãããŒã§èšå®ãèšèŒããŠããŠããmsg
ãªããžã§ã¯ãã®èšå®ã®æ¹ãåªå
ãããã
ã ããããããããäºã€ã®æ
å ±ã¯ãmsg
ãªããžã§ã¯ãå
ã§ãæ ŒçŽãã¹ããã©ã¡ãŒã¿ãæç¢ºã«åããã¹ãã ã
ãã®ããªã·ãŒã«åºã¥ããŠèšèšãããŠããããŒãã®åŠç察象ã®ããŒã¿ã¯ã倿°ååšãããã®ã§ããããã®éã§ããããã£åã®è¡çªãçºçãããã ããŒãéã§ã®ããããã£ã®äŸåé¢ä¿ãæ©æ¢°çã«ç¢ºèªããæ¹æ³ãååšããªãããããŠãŒã¶ãŒã¯åããŒããã¢ã¯ã»ã¹ããããããã£ãææ¡ããã°ãªããªãã
ãã®åé¡ã«å¯Ÿå¿ããããã«ã¯ãäŸåé¢ä¿ã«ããè€æ°ã®ããŒãããã¿ããè¶ ããŠååšããªãããã«ããããŒã®æ§é ãèšèšããã ãããŠãã§ããéããã¿ãã®äžã®ãããŒãã§ããã ãå°èŠæš¡ã«ããã ããã ãã§ãã ãã¶äŸåé¢ä¿ãææ¡ãããããªãã
ããã«ãã¿ãå ã®ãããŒã®å é ã®ããŒãããå ¥åãšããŠäžããããã¡ãã»ãŒãžããæåŸ ããããããã£æ§é ã§ããããæ€èšŒããã ååšãããšæåŸ ããããããã£ä»¥å€ã¯ããã®ã¿ãã®äžã§èªç±ã«äœ¿ã£ãŠãããã®ãšããã ãã®æ€èšŒãè¡ãåŠçããã¿ãéã§ã®äŸåæ§ã®å¢çã®è¡šçŸã«ããªãã
Node-REDã§ã¯ãããŒããèªäœããŠãNode-REDã®ç»é¢äžã§å©çšããããšãã§ããã
ãã®éãäœæããããŒãã®æ©èœããmsg
ã®äžã®ãã©ã¡ãŒã¿ã§å¶åŸ¡ããå Žåãããã
æ¹éãšããŠãç¬èªããŒãã®æ©èœãå¶åŸ¡ãããã©ã¡ãŒã¿ã¯ãmsg.[ããŒãå]_[ãã©ã¡ãŒã¿å]
ã§èšå®ããã®ãè¯ãã
msg.
çŽäžã®ãã©ã¡ãŒã¿ãå©çšããçç±ã¯ããããŒã®åŠç察象ã®ããŒã¿ã¯ãäžã®ç¯ã§èª¬æããéããmsg.payload
ããããã£ä»¥äžã§èšå®ããããã ã
ãŸããmsg.
çŽäžã®ãã©ã¡ãŒã¿ã¯ãNode-REDã®æšæºããŒããå©çšãããããããããšè¡çªããªãããã«ã[ããŒãå]_[ãã©ã¡ãŒã¿å]
ãšããã
msg
ãªããžã§ã¯ããåé·ã«ãªãããmsg.[ããŒãå].[ãã©ã¡ãŒã¿å]
ãšããã®ãæªãã¯ãªãã
ãŠãŒã¶ãŒãç¬èªããŒããäœæããæã¯ãããŒãã®æ©èœãå¶åŸ¡ãããã©ã¡ãŒã¿ããmsg.[ããŒãå]_[ãã©ã¡ãŒã¿å]
ã§å
¥åããããã®ãšããŠãããŒããéçºããã
泚æããŠé ãããã®ã¯ãããŒãã®æ©èœãå¶åŸ¡ãããã©ã¡ãŒã¿ã®ããããã£åã¯ããããŒã®èšèšãšç¬èªããŒãã®éã®ã€ã³ã¿ãŒãã§ãŒã¹ãšãªããããåŸæ¹äºæãå¿ é ã§ããã ãã®ãããæ¥µåããããã£åã®ä»ãæ¹ã«é¢ããŠåŸæ¹äºæã®ãªã倿Žã¯ããªãã
çš®å¥ã®ç°ãªãè€æ°ã®ã¡ãã»ãŒãžãå ¥åããããŒãã§ã¯ãã¡ãã»ãŒãžã«èå¥çšã®ã¿ã°æ å ±ãä»äžãã
Node-REDã®ããŒãã¯è€æ°ã®åºå端åãæã€ããšãã§ããããå ¥å端åã¯1ã€ããæã€ããšãã§ããªãããããŒäžãæµããã¡ãã»ãŒãžã«ã¯ããŒãã®å¶åŸ¡ã衚ãããã®ã¡ãã»ãŒãžãšåŠç察象ã®ããŒã¿ã衚ãããã®ã¡ãã»ãŒãžãååšããããã®ããããããŒã®å®è¡ãã¹æ¯ã«å¥çš®ã®å ¥åã¡ãã»ãŒãžãåºå¥ããå¿ èŠãããå Žåã«ã¯ãã¡ãã»ãŒãžå ã®ããããã£ã«ãã£ãŠåºå¥ãè¡ãå¿ èŠãããã
å ·äœçã«ã¯ãå®è¡ãã¹ãåºå¥ããã¿ã°ããã¡ãã»ãŒãžã®ããããã£ã«ä»äžããå ¥åãã¹æ¯ã«ç°ãªãã¿ã°å€ãèšå®ãããããŒãåŠçã§ã¯ãã¿ã°å€ã確èªããããšã§ã¡ãã»ãŒãžã«å¯ŸããåŠçãéžæãããã¿ã°ã®èšå®ã«ã¯templateããŒããå©çšã§ããã
ããã«ãããè€æ°çš®ã®ã¡ãã»ãŒãžãå ¥åããããŒãã«ãããŠãã¡ãã»ãŒãžçš®å¥ã«å¿ããåŠçãå¯èœã«ãªãã
ããŒãã®åŠç察象ã®ããŒã¿ãmsg.payload
å
ã«æ ŒçŽããããšã¯ãäžèšãããã倧éã®ããŒã¿ãæ±ãå Žåã¯ã泚æãå¿
èŠã ã
ã¡ãã»ãŒãžã¯ã¡ã¢ãªäžã«ç¢ºä¿ãããããã倧éã®ããŒã¿ãã¡ãã»ãŒãžã«å«ãããšåŠçæéã䜿çšã¡ã¢ãªéã«å€§ããªè² è·ãäžããŠããŸãã
ç¹ã«ãã¡ã¢ãªãæ¯æžããå Žåã«Node-REDã®åŠçå
šäœã忢ããŠããŸãããšã«çæããå¿
èŠãããã
ãã®ãããªåé¡ãé¿ããããã«ã¯ãããŒã¿ã®å®äœãNode-REDå€ã®æ°žç¶èšæ¶ã«æ ŒçŽããã¡ãã»ãŒãžã«ã¯ãã®åç §ãä¿æããæ¹æ³ãèããããã ãããŒäžã®ããŒãã¯åç §ãåãåããæ°žç¶èšæ¶äžã®ããŒã¿ã«å¯ŸããåŠçãè¡ãããæ§æããã
ãããŒäžã§ã¯ããŒã¿ã®åç
§ããåãæž¡ãããªãã®ã§ãããŒã¿å®äœãæåŸ
ããããŒããå©çšã§ããªãã
ç¹ã«ãNode-REDãæšæºã§çšæããŠããããŒãããä»è
ãå¥ã®çšéã§äœæããŠããããŒãã»ãããŒã®åå©çšãã§ããªãå¯èœæ§ãããã
åç
§å
ã®ããŒã¿ãã现ããåå²ããŠããmsg.payload
ã«å
¥ãããã«Node-REDã«ããŒã¿ãæå
¥ããããªã©ã®å·¥å€«ãå¿
èŠã ã
ãããã£ããã¬ãŒããªããèæ
®ããŠãæ¬ã¬ã€ãã©ã€ã³ã®é©çšãæ€èšããå¿
èŠãããã
ãŸããããŒããæåŸ ããå ¥åã¡ãã»ãŒãžã®æ€èšŒ(validation)ãå¯èœã«ãªãã æåŸ ããŠããªãã¡ãã»ãŒãžãå±ããå Žåã®ãšã©ãŒãã³ããªã³ã°åŠçãªã©ã远å ããããšã§ããããã°ã容æã«ãªãã ããã ãšã©ãŒãã³ããªã³ã°ã«ã€ããŠã¯ãä¿¡é Œæ§ã»å質åäžã§èª¬æããã
è€æ°ã®ã¡ãã»ãŒãžãåãåãåŠçã§ã¡ãã»ãŒãžã®å°çé ã¯ä¿èšŒãããªãã ãã®ãããå°çé ã«äŸåããåŠçãè¡ããªãããã«ããããŒã®åŠçãèšèšããå¿ èŠãããã ã€ãŸããã¡ãã»ãŒãžã®å°çé åºãæ³å®ãšç°ãªã£ãå Žåã§ããæ£ããçµæãåŸãããããã«ããã¹ãã ã
ããã«ã€ããŠè§£èª¬ããããã«ãNode-REDèªäœã®èª¬æãããã Node-REDã¯ãéåæåã€ãã³ãé§ååã®ããã°ã©ãã³ã°èšèªã§ããNode.jsã§éçºãããŠããã ããã«ãããNode-REDã§ã¯ãåããŒãã®åŠçãã€ãã³ãé§åã§å®è¡ãããã ããã§ã®ã€ãã³ããšã¯ãããŒãã«ã¡ãã»ãŒãžãå ¥ãããšã§ããã
Node-REDã§åããŒããéåæã«ã€ãã³ãé§åã§å®è¡ããããšããããšã¯ããããŒã«è€æ°ã®ã¡ãã»ãŒãžãæµããŠããæã«ããããã®ã¡ãã»ãŒãžéã§åŠçã®åæããšãããªãããšããããšã ã åæãåããªãããšã§ãããã¡ãã»ãŒãžã«å¯ŸããåŠçããä»ã®ã¡ãã»ãŒãžã«å¯ŸããåŠçã®çµäºãåŸ ã€å¿ èŠããªãããããããŒã¯ãããå€ãã®ã¡ãã»ãŒãžãåæã«åŠçã§ããã ãã®ä»£ããå ã«ãããŒã«å ¥ã£ãã¡ãã»ãŒãžããå ã«åŠçãããããšãã£ãåŠçé åºã®ä¿èšŒã¯ãªãã
ããããããŒã«æå ¥ãããã¡ãã»ãŒãžã®é åºã«äŸåããåŠçãè¡ãå¿ èŠãããå Žåã¯ããããŒã®äžã«åŠçé åºã管çããåŠçãããŠãŒã¶ãŒèªèº«ã§å®è£ ããå¿ èŠãããã äŸãã°ãäžåºŠåãåã£ãã¡ãã»ãŒãžã®æ å ±ãããŒãã³ã³ããã¹ããªã©ã«èç©ããŠãããå¿ èŠãªã¡ãã»ãŒãžãæã£ã段éã§åŠçãè¡ããšèšã£ãæ¹æ³ãæ€èšããã
// ã¡ãã»ãŒãžã®èç©åŠç
var msgs = context.get('messages') || [];
msgs.push(msg);
if(msgs.length === ...) {
... // è€æ°ã¡ãã»ãŒãžã®åŠç
}
context.set('messages', msgs);
æŠèŠ
- ãããŒã®å é ãšæ«å°Ÿã®ããŒããhttp inããŒããhttp responseããŒãã«ãããããŒããµãŒãã¹åãã
ã¡ãªãã
- ãããŒã®åå©çšæ§ãé«ãã
- å¥å šæ§ç£èŠã·ã¹ãã ãšé£æºãããããŒã«ãããåŠçã®ç°åžžãæ€ç¥ããããšãã§ãã
çæç¹
- ãšã³ããã€ã³ããšãããŒå éšã®åŠçå 容ã¯ãåŸæ¹äºæãä¿ã€å¿ èŠããã
- åŸæ¹äºæãä¿ãŠãªããªã£ãå Žåã«ãéçºè ã«å¯Ÿãéæšå¥šã«ãªã£ãã»å»æ¢ãããããšãäŒããææ®µãæ€èšãã
- HTTPã®ãšã³ããã€ã³ãåã¯åãããããååã«ãã
- ãããŒã®æ«å°Ÿã«http responseåºåããŒããèšçœ®ãå¿ããªãããæ³šæãã
- HTTPãªã¯ãšã¹ãå ã®ããŒããResponseåŸ ã¡ã§åæ¢ããå¯èœæ§ããããã
解説 äžã€ã®ãµãŒãã¹ããè€æ°ã®ãµãŒãã¹ã®é£æºã§æ§ç¯ãããå Žåãããã äŸãã°ãããèšåã«åãä»ããããã»ã³ãµãŒããŒã¿ããèšåã®æ éäºå æ€ç¥ãè¡ããµãŒãã¹ã®å Žåã§ã¯ã 以äžã®ãµãŒãã¹ã飿ºããç®çã®ãµãŒãã¹ãæ§ç¯ããã
ããã§ããããŒãä»ã®ãããŒããå©çšããããããããã«ã ãããŒã®åŠçãHTTPãªã¯ãšã¹ãã§åããããšã§éå§ã§ããããã«ãã ãããŒã®åŠçãçµäºãããããªã¯ãšã¹ãå ã®ãããŒã«ã¬ã¹ãã³ã¹ãè¿ãããã«ããã
ãã®ããã«ããããŒã®å é ã«http inããŒããèšçœ®ããHTTPã®ãšã³ããã€ã³ããçšæããã ãŸãããããŒã®æ«å°Ÿã«http responseããŒããèšçœ®ããã
ãªããã¿ãéã®ãããŒã®I/Fã«çžåœããéšåã¯ãlinkããŒããçšæããæ¹æ³ãããã linkããŒããšhttp in/http responseããŒãã«ã¯ãã¡ãªãããšãã¡ãªãããããã®ã§ãç¶æ³ã«åãããŠäœ¿ãåããŠã»ããã
ã¡ãªãã | ãã¡ãªãã | |
---|---|---|
linkããŒã | linkããŒããã¯ãªãã¯ããããšã§ããããŒéã®é£æºãåç §ã§ããã | ã¿ãå ã«linkããŒãã®å¯Ÿããããšãã¿ãã®I/FãšããŠæ©èœããlinkããŒããšãã¿ãå ã®ãããŒã®ç°¡ç¥åã®ããã®linkããŒãã®èŠåããã€ãã«ããã |
http in/http responseããŒã | ãã¹ãçšã®ã·ã¹ãã ãªã©ãNode-RED以å€ãšé£æºã§ããã | äžèŠã«å€éšã«åŠçãå ¬éããããšã«ãªãã |
æŠèŠ
- å ¥åã¡ãã»ãŒãžãå å·¥ããŠåºåããã¿ã€ãã®ããŒãåŠçã§ã¯ã倿Žãããªãããããã£ãåºåã¡ãã»ãŒãžäžã«ãã®ãŸãŸä¿æãããããã«ãã
ã¡ãªãã
- è€æ°ã®ããŒãã§ã¡ãã»ãŒãžããããã£ã§ããŒã¿ã®ããåããè¡ã£ãŠããå Žåã«ãéã«äœçœ®ããããŒãã§å¿ èŠãªããŒã¿ã倱ãããããšãææ¢ãã
çæç¹
- (ç¹ã«ãªã)
解説 ååºã®ããã«è€æ°ã®ããŒãéã§ãã¡ãã»ãŒãžã®ããããã£ãå©çšããŠããŒã¿ãå ±æããå Žåãããã ã¡ãã»ãŒãžåŠçã«ãããŠãéåºããã¡ãã»ãŒãžã¯æ°èŠã«çæããããšãå¯èœã§ããããå ¥åã¡ãã»ãŒãžã«å«ãŸããããããã£ã倱ããäžå ·åãçããå¯èœæ§ãããããã®ãããªåé¡ãçºçããªããããå ¥åã¡ãã»ãŒãžäžã®ããããã£ãåºåã¡ãã»ãŒãžã«ãä¿æããããã«ãã¹ãã§ããã
// OK: ããããã£ãä¿å
this.on('input', function(msg) {
msg.payload = 'some value';
node.send(msg);
})
// NG: ããããã£ãä¿åãããªã
this.on('input', function(msg) {
msg = { payload : 'some value' };
node.send(msg);
})
ãããŒã§äœãã¢ããªã±ãŒã·ã§ã³ã®ç°å¢æ å ±ãèšå®æ å ±ãªã©ããç°å¢å€æ°ãšããŠèšé²ããä»»æã®ãããŒããåç §ããã±ãŒã¹ãååšããã äŸãã°ããããŒãå®è¡ããOSã®çš®é¡ãã飿ºããå€éšãµãŒãã¹ã®ã¢ã¯ã»ã¹æ å ±ãªã©ããããŒã®ç°å¢å€æ°ãšããŠèšæ¶ãããããŒã®éæã§ãã®å€æ°ã®å€ã«åããåŠçã«åãæ¿ããããšãªã©ãããã
ããã«å¯Ÿããglobal
ã³ã³ããã¹ãã¯ãä»»æã®ãããŒããã¢ã¯ã»ã¹å¯èœãªå€æ°ã§ããã
ãããããç¶æ
管çãã§åŸè¿°ããããã«ãglobal
ã³ã³ããã¹ããæ§ã
ãªãããŒããå©çšãããšãglobal
ã³ã³ããã¹ããžã®äŸåç®æãç¹å®ãã«ãããªãããã°ãçºçãããããªãã
ããã§ããããŒéçºã«ãããŠã¯ã以äžã®ãããªåãæ±ºããè¡ãå¿ èŠãããã
- ç°å¢å€æ°ã«å€ãä»£å ¥ããã®ã¯ãããç¹å®ã®äžã€ã®ãµããããŒå ã«éå®ãã
- 1.ãå©çšããªãç°å¢å€æ°ã®å€ä»£å ¥ã¯ãè¡ããªã
- ç°å¢å€æ°ã®èšå®ã¯ããããŒã®å®è¡æã«ã®ã¿è¡ã
1.2.ã«ãããglobal
ã³ã³ããã¹ãã®æäœãè¡ã£ãŠããç®æãããããŒããèŠããããªãã
ãŸãã3.ã«ãããglobal
ã³ã³ããã¹ããšã®äŸåæ§ãæ¥µåæžããã
ãããglobal
ã³ã³ããã¹ãã®å€å€æŽããäžèšã®ã«ãŒã«ä»¥å€ã§è¡ãããŠããªããã確èªããå¿
èŠãããå Žåã¯ãäžèšã®ãµããããŒå
ã§ãglobal
ã³ã³ããã¹ãã®å€ã倿Žãããããšã«ã倿Žåãšå€æŽåŸã®å€ããã°ã«åºåããã
ããã«ããããã®ãµããããŒä»¥å€ã®æ¹æ³ã§å€ã倿Žãããå Žåã¯ããã°ããã®ãã°ãçšããæ€ç¥ææ®µãçšæããããšã§å€æã§ããããã«ãªãã
è€æ°ã®ã¡ãã»ãŒãžã察象ãšããèšç®åŠçãè€æ°ããŒãéã®æ å ±å ±æãNode-REDå€éšã®ç¶æ ã«äŸåããåŠçããšã©ãŒçºçæã®ãªã«ããªåŠçãªã©ã§ã¯ããã°ã©ã ã®å®è¡ç¶æ ã管çããå¿ èŠãããã æ¬ç¯ã§ã¯ãããã£ãåŠçã«ãããç¶æ 管çã®æ¹éã«ã€ããŠèª¬æããã
Node-REDã«ãããŠç¶æ 管çã«å©çšå¯èœãªä»çµã¿ã¯ä»¥äžãååšããã
- ã³ã³ããã¹ã
- Node-REDã«ãããŠç¶æ 管çã®ä»çµã¿ãæäŸãããªããžã§ã¯ã
- ç¶æ ãåç §å¯èœãªç¯å²ã«ãã£ãŠãããŒãã³ã³ããã¹ãããããŒã³ã³ããã¹ããã°ããŒãã«ã³ã³ããã¹ãã®3çš®ã®ãªããžã§ã¯ããååšãã
- ã³ã³ããã¹ãããžã§ã¯ãã¯ãããã€ããããã¯ãNode-REDã®èµ·åæã«åæåããã
- ããŒãã³ã³ããã¹ã
- ããŒãæ¯ã®ç¶æ ãä¿æãããªããžã§ã¯ããç¶æ ã®åç §ã¯getãèšå®ã¯setã¡ãœããã§è¡ã
// ããŒã(this)ã®ããŒãã³ã³ããã¹ããªããžã§ã¯ãã®åç
§
var contex = this.context;
var count = context.get('count') || 0;
count += 1;
context.set('count', count);
- ãããŒã³ã³ããã¹ã
- åäžãããŒå
ã®ãã¹ãŠã®ããŒãããåç
§å¯èœãªãªããžã§ã¯ã
- ç¶æ ã®åç §ã¯getãèšå®ã¯setã¡ãœããã§è¡ã
- åäžãããŒå
ã®ãã¹ãŠã®ããŒãããåç
§å¯èœãªãªããžã§ã¯ã
var flowContext = this.context.flow;
var count = flowContext.get('count') || 0;
- ã°ããŒãã«ã³ã³ããã¹ã
- ãã¹ãŠã®ããŒãããåç
§å¯èœãªãªããžã§ã¯ã
- ç¶æ ã®åç §ã¯getãèšå®ã¯setã¡ãœããã§è¡ã
- å€ã®æŽæ°ç®æããã³åç
§ç®æããä»»æã®ãããŒã«ãŸãããããããŒã®ä¿å®ãå°é£ã«ãªããããå©çšã¯æšå¥šããªã
- ãã ãããœãªã¥ãŒã·ã§ã³ã®ç°å¢å€æ°ãå ±æããããã«ã¯æçšã§ãã
- ç°å¢å€æ°ã®å ±æã«çšããå Žåã¯ããããŒã®äžã§å€ãæŽæ°ããŠããç®æãéå®ããæç¢ºã«ãªãããã«æ°ãä»ãã
- ãã¹ãŠã®ããŒãããåç
§å¯èœãªãªããžã§ã¯ã
var globalContext = this.context.global;
globalContext.set('foo', 'bar');
- ã¡ãã»ãŒãžã®ããããã£
- ã¡ãã»ãŒãžå ã®ããããã£ã«ç¶æ ãè¡šãæ å ±ãæ ŒçŽããŠããŒãéã§åãæž¡ããè¡ã
- ã¡ãã»ãŒãžã®åãæž¡ãå ã§ããåç §ã§ããªããããåäžããŒãå ã®ç¶æ ä¿æã®ããã«ã¯å©çšã§ããªã
count = msg.count || 0; // ã¡ãã»ãŒãžã®ããããã£ãåç
§
msg.count = count +1;
node.send(msg);
- 倧å倿°
- Node.jsã®å€§å倿°ã«ç¶æ ãä¿å
- ããŒãéã®ç«¶åã«ããäžå ·åã®åå ãšãªãããããããå©çšã¯æšå¥šããªã
count = global.count || 0;ã// 倧å倿°ã®åç
§
global.count = count +1;
- ã¯ããŒãžã£ã®æçžå€æ°
- ããŒãå®çŸ©æã®ã¯ããŒãžã£ã®æçžå€æ°ã«ç¶æ ãä¿å
- ãã®æ¹æ³ã¯Node-REDã®æšæºããŒãå®è£ ã§ãå©çšãããŠããããæçžå€æ°ã«ããå®çŸã§ããæ©èœã¯åºæ¬çã«ããŒãã³ã³ããã¹ããšåçã§ãããããããŒãã³ã³ããã¹ãã®å©çšãæšå¥šãã
- ãªãããããã®æ å ±ã¯ããã©ã«ãã§ã¯ã¡ã¢ãªäžã®ã¿ã«ä¿æããã
- å°æ¥çã«ã¯ãRedisãªã©ã®ããŒã»ããªã¥ãŒã¹ãã¢ãžã®æ°žç¶çä¿åãèšç»ãããŠãã
module.exports = function(RED) {ã// ããŒãå®çŸ©
function ExampleNode(node) {
var count = 0; // æçžå€æ°
this.on('input', function(msg) {
count = count+1;
...
});
}
...
}
æŠèŠ
- è€æ°ã®ã¡ãã»ãŒãžã®åŠçã§å ±éã«äœ¿ãããŒã¿ã®ä¿æã«ã¯ããŒãã³ã³ããã¹ããå©çšãã
- è€æ°ã®ããŒãã§ã®ããŒã¿å ±æã¯ãã¡ãã»ãŒãžãä»ããŠè¡ã
ã¡ãªãã
- ãããŒãšãã®ã¡ãã»ãŒãžãèŠãã ãã§ããŒãéã®ããŒã¿ã®æµããææ¡ã§ãã
çæç¹
- ããŒãéã§å ±æããããŒã¿éãå€ãå ŽåãããŒãéã®ã¡ãã»ãŒãžéåä¿¡ãªãŒããããã倧ãããªã
解説 ã³ã³ããã¹ã(ããŒãããããŒãã°ããŒãã«)ãçšãããšè€æ°ã®ã¡ãã»ãŒãžåŠçã«ãŸããã£ãæ å ±å ±æ(æéçå ±æ)ãè€æ°ã®ããŒãéã§ã®æ å ±å ±æ(空éçå ±æ)ãå®çŸããããšãã§ããã æéçå ±æãçšããããšã§ãé¢é£ã®ããè€æ°ã®ã¡ãã»ãŒãžã«å¯ŸããåŠçãå®çŸããããšãã§ããã ãŸãã空éçå ±æãçšããããšã§ãé¢ããäœçœ®ã«ããããŒãéã§ã®ããŒã¿ã®ããåããäœããªãŒããããã§è¡ãããšãã§ããã
æ å ±ç®¡çã屿åãã芳ç¹ããããã®ãããªã³ã³ããã¹ãã®å©çšã¯åäžããŒãã§ã®æéçå ±æã«éå®ããããšãæãŸããã 空éçå ±æã®å©çšã¯ãããŒã®æ¥ç¶ããææ¡ã§ããããŒã¿ã®æµããšç°ãªãããŒã¿ã®æµããäœãåºãå¯èœæ§ãããããããã®äœ¿çšã¯éå®ãã¹ãã§ããã ãã£ãŠãè€æ°ã®ããŒãéã§ã®ããŒã¿å ±æã¯ã¡ãã»ãŒãžãä»ããŠè¡ãããããŒäžã®æ¥ç¶é¢ä¿ã«ãã£ãŠãã®é¢ä¿ãææ¡ã§ããããã«ããã
ãªããç°ãªããããŒéã®æ å ±å ±æã«ã¡ãã»ãŒãžãçšããããšãé£ããå Žåã¯ãèªã¿åºã/æžã蟌ã¿ãè¡ãããŒãã察ãšããŠå€éšã®æ°žç¶èšæ¶ãçšããŠè¡ãããšãæšå¥šããã
é¢é£ã¬ã€ãã©ã€ã³
æŠèŠ
- ã³ã³ããã¹ãäžã®æ å ±ãåç §ããéã«ã¯ãããããã£ãçŽæ¥åç §ããã®ã§ã¯ãªããget/setã¡ãœãããè§£ããŠè¡ã
ã¡ãªãã
- ã³ã³ããã¹ãã®æ°žç¶èšæ¶ãžã®éé¿ãªã©ãä»åŸã®æ¡åŒµãžã®å¯Ÿå¿ã容æãšãªã
çæç¹
- (ç¹ã«ãªã)
解説 Node-REDã®ã³ã³ããã¹ããªããžã§ã¯ãã¯éåžžã®JavaScriptãªããžã§ã¯ãã®ãããããããã£ã®ã¢ã¯ã»ã¹ãè¡ãã¡ãœããã䜿çšããªããŠããå€ã®åç §ãèšå®ãè¡ãããšãã§ããã å°æ¥ã®Node-REDã§ã¯ãã³ã³ããã¹ãããŒã¿ã®æ°žç¶èšæ¶ãžã®ä¿åãªã©ãèšç»ãããŠããããããå©çšããäžã§get/setã¡ãœãããå©çšããããšãåæã«ãªããã®ãšæ³å®ãããã
var context = this.context;
// OK: get/setãå©çš
count = context.get('count') || 0;
context.set('count', count+1);
// NG: ããããã£ãçŽæ¥åç
§
context = context.count || 0;
context.count = count +1;
é¢é£ã¬ã€ãã©ã€ã³
- (ç¹ã«ãªã)
Node-REDã¯é«ãèšç®å¯èœæ§ãæãã倿§ãªåŠçãç°¡æœã«èšè¿°ããããšãåºæ¥ãã ãããããã®æè»ãã«ãããç¡éã«ãŒãã«é¥ããããŒããæ°žé ã«ãšã©ãŒåŠçãçµãããªããããŒãªã©ãå®è¡ãšã³ãžã³ã®ãªãœãŒã¹ãæ¯æžããã·ã¹ãã å šäœã«æªåœ±é¿ãåãŒããããããŒãèšè¿°å¯èœã§ããã ããã§ããããŒèšèšã«ãããŠãäžå®ã®ååãèšããã
æŠèŠ
- ç¡éã«ãŒãã«é¥ãããšãé²ãããã«ããããŒäžã«ã«ãŒããèšããå Žåã¯ãå¿ ãã«ãŒãããã®è±åºæ¹æ³ãçšæãã
çæç¹
- ã«ãŒãããã®è±åºã®ããªã¬ãŒã«ã³ã³ããã¹ããçšããå Žåãè±åºã«çšããã³ã³ããã¹ããã ãããŒå ã®å¥ã®ããŒãããã¢ã¯ã»ã¹ããªãããã«æ°ãä»ãã
解説 äžã®å³ã®ããã«ãã¯ã€ã€ãŒã8ã®åã«ã€ãªãããšã§ãã«ãŒããèšå®ããããšãã§ãããã ã¡ãã»ãŒãžãã«ãŒãã«æµãç¶ããç¡éã«ãŒãã«é¥ãã ç¡éã«ãŒãã«é¥ã£ãã¡ãã»ãŒãžãæ¢ããããã«ã¯ãå®è¡ãšã³ãžã³ã忢ãããªããã°ãªããªãã ãã®äºæ ãé²ãããã«ãå¿ ãã¡ãã»ãŒãžãã«ãŒãããè±åºããææ®µãçšæããå¿ èŠãããã
ã«ãŒãããè±åºããæ¹æ³ã¯è€æ°èããããã äŸãšããŠforæãæš¡ãããããŒã«ãããã«ãŒãããè±åºããæ¹æ³ãæäŸããŠããã
ãŸããäžã®ãããŒã§ã¯ããããŒã³ã³ããã¹ããçšããããšã§ãã¡ãã»ãŒãžãã«ãŒãããè±åºããã¿ã€ãã³ã°ãããŠãŒã¶ãŒãæå®ã§ããã
ãè±åº(flow._loop=false)ãããŒãããããŒã³ã³ããã¹ãã®_loopããããã£ãåç
§ãã
å€ãfalseã®å Žåã¯ã«ãŒãããè±åºããã
ã¡ãã»ãŒãžãã«ãŒãã«å
¥ã£ãæç¹ã§ã¯å€ãtrueã«ãªã£ãŠããããŠãŒã¶ãŒãä»»æã®ã¿ã€ãã³ã°ã§ã
ãã«ãŒãçµäºãããŒããã¯ãªãã¯ããããšã§ãflow._loop:=falseãããŒããåŠçãããflow._loop
ã®å€ãfalseã«æŽæ°ãããããã®ãããäžã®ã«ãŒãããã¡ãã»ãŒãžãè±åºããã
é¢é£ã¬ã€ãã©ã€ã³
- (ç¹ã«ãªã)
ä»è ããçè§£ããããããããŒã®äœæã«å¿ãããå¿ èŠãããã ãã®èгç¹ãããã³ã¡ã³ãã¯éèŠã§ãããéçºãããããŒã«ã¯å¿ ããåãããŒã®åœ¹å²ã泚æäºé ãé©åã«è¡šçŸããã³ã¡ã³ããæ®ããªããã°ãªããªãã ããã§æ¬ç¯ã§ã¯ãã³ã¡ã³ãã®æžãæ¹ã«ã€ããŠã¬ã€ãããã
Node-REDã§ã¯ã以äžã®ç®æã«ã³ã¡ã³ããæ®ãããšãåºæ¥ãã
- ã¿ãããšã®ã³ã¡ã³ã
- ã¿ãå ã®ãããŒãžã®ã³ã¡ã³ã
- ãµããããŒãžã®ã³ã¡ã³ã
ããããã®ã³ã¡ã³ãã®æžãæ¹ãã³ã¡ã³ãã®æçŸ©ãç°ãªãããã以éã§ã¯åå¥ã«èª¬æããã
ãããŒãšãã£ã¿ã®ããŒããã¯ã€ã€ãŒãååšããªãå Žæãã¯ãªãã¯ãããšãæ å ±ã¿ãå ã®æ å ±æ¬ã«ããã®ã¿ãã®ã³ã¡ã³ãã衚瀺ãããã ãã®ã³ã¡ã³ãã¯ãããŒéçºè ãèªç±ã«ç·šéããããšãåºæ¥ãã ç·šéæ¹æ³ã¯ããŸãã¿ããããã«ã¯ãªãã¯ããŠäžå³ã®ãè©³çŽ°ãæ¬ã衚瀺ãããæ¬¡ã«Markdown圢åŒã§èª¬æãèšèŒãããšãæ å ±ã¿ãå ã®æ å ±æ¬ã«å 容ãåæ ãããã ãªããMarkdownã«ã€ããŠã¯ãOfficial Markdown Project(å€éšãªã³ã¯)ãåç §ããããã
ã¿ããžã®ã³ã¡ã³ãå 容ã¯ããã®ã¿ãã«å«ãŸãããããŒå šäœã®æŠèŠãã端çã«èª¬æããçšåºŠã§è¯ãã ãããŒã®è©³çްã¯ãã³ã¡ã³ãããã§ã¯ãªãããããŒèªäœããèªã¿åããããã«ãããŒãèšå®ããŠããã¹ãã ããã§ããã ãŸããNode-REDã«ã¯ãããŒéçºè ã容æã«ãããŒãä¿®æ£ã§ããã¡ãªããã§ããããããããŒã®è©³çްãã¿ãã®ã³ã¡ã³ããšããŠæ®ããšãã³ã¡ã³ããšãããŒã®å®è£ ã®å¯Ÿå¿ã®ç¶æãé£ãããããã£ãŠéçºã³ã¹ããå¢å€§ããã ãã ããã¿ãå ã®ãããŒãåæãšããæ¡ä»¶ããä»ã®ã¿ããšã®äŸåæ§ãã€ã³ã¿ãŒãã§ãŒã¹ãååšããå Žåã¯ãä»ã®ãããŒéçºè ãžã®æ³šæäºé ãšããŠãèšèŒããŠããã®ã¯è¯ãã ããã
ãããŒã«ã¯ãcommentããŒããçšããŠããããŒã®è£è¶³ãèšèŒããããšãåºæ¥ãã ãããŒãæäœãå©çšãããŠãŒã¶ãŒãååšããå Žåã«ã¯ãcommentããŒãã§ãããŒã®èª¬æãæ®ãã®ãè¯ãã
commentããŒãã®ããŒãåã¯ããããŒã®åŠçæŠèŠãäžèšã§è¡šããã®ãšããäžè¬çãªããã°ã©ãã³ã°ã§ã®é¢æ°åãã¡ãœããåã«çžåœããèªå¥ãšãããšèŠãããã
ãŸãããããããŒã®å
¥åmsg
ã«åæãããå Žåã¯ããã®æšãcommentããŒãã®ãæ¬æãã«èšèŒããã
ããã¯ãäžè¬çãªããã°ã©ãã³ã°ã§ã®ãããã¥ã¡ã³ããŒã·ã§ã³ã³ã¡ã³ãã«çžåœãã(åç
§:JavaDoc(Wikipedia), Python docstring)ã
ãã ããNode-REDã®å Žåãã³ã¡ã³ããããã¿ã«å€ãæ®ãããšã¯æšå¥šããªãã ãªããªããNode-REDã®ã¡ãªããã¯ããããŒã容æã«ä¿®æ£ããããããšã§ããããcommentããŒããå€ããšããããŒã®åŠçãšã³ã¡ã³ãå 容ã®å¯Ÿå¿ã管çããéçºã³ã¹ããå¢å€§ããããã§ããã ãã£ãŠãäžã€ã®ãããŒã«å¯ŸããŠãäžã€ããæ°åçšåºŠã®commentããŒãã劥åœã ãšæãããã
ãµããããŒã¯ãäžè¬çãªããã°ã©ãã³ã°èšèªã«ãããã©ã€ãã©ãªã«çžåœãããããŒã§ããã ãµããããŒã¯ä»ã®ãããŒéçºè ã«ãã£ãŠç©æ¥µçã«åå©çšãããããåŸããå©çšãããããšãåæãšããŠããã詳现ã«ã³ã¡ã³ããèšè¿°ããå¿ èŠãããã
以äžã«ããµã³ãã«ãããŒã®ãµããããŒã®èª¬æã瀺ãã
ãã®ãããŒã«ã¯ã7ã€ã®ãµããããŒãååšããããããã«ã€ããŠãå
¥åmsg
ãšãåºåmsg
ã«é¢ãã説æãèšèŒãããŠããã
ãã®ããã«ããµããããŒã«ã¯ããµããããŒãå©çšããããã«å¿
èŠãªæ
å ±ãšããŠãå
¥åºåã¯å¿
ãæžãå¿
èŠãããã
ç¹ã«ããµããããŒã®äžã§ãå€ã倿Žã»åé€ãããmsg
å
ã®å±æ§ãæèšããªããã°ãªããªãã
ãã®æèšããªããšããããŒéçºè
ããµããããŒãåå©çšããéã«ãæå³ãšç°ãªãmsg
å
ã®å€å€æŽãçºçãããã°ãåŒãèµ·ããå±éºæ§ãããã
ãã®ããããµããããŒãéçºããéã¯ããµããããŒã«å
¥åãããã¡ãã»ãŒãžãæåŸ
ãã屿§ãååšããããšããã§ãã¯ãããã¹ããããŒãçšæããã¹ãã§ããã
ãŸããåºåæã«èšå®ã»å€æŽãããŠãã屿§ããæ£ããåŠçãããŠããããšã確èªã§ãããã¹ããããŒãçšæããã
ãããŠããµããããŒã®ã³ã¡ã³ãã«ã¯ããã®ãã¹ãå
容ïŒãããã¯ãã¹ãã¿ã€ãã«ïŒã«å¯Ÿå¿ããå
¥åºåã¡ãã»ãŒãžã®æ
å ±ãèšèŒããã
ããã«ããµããããŒå
ã§è¡ãããåŠçã«ã€ããŠãããµããããŒãå©çšããéçºè
ã«ãšã£ãŠæçšãªæ
å ±ã§ããã°ãç©æ¥µçã«èšèŒããã®ãè¯ãã
äŸãã°ãglobal
ãflow
ã³ã³ããã¹ãã®ä¿®æ£ãåŠçæéãé·ãå Žåã¯äºæ³ãããåŠçæéãçºçããããšã©ãŒãšãšã©ãŒmsg
ã®å
容ããªã©ã§ããã
ãã°ã¯ããããŒã®çšŒåç¶æ³ãé害ãªã©ã®åæãè¡ãããã«å©çšãããã ãããã®åæãå¹ççã«è¡ãããã«ã¯ããã®ã³ã°ã«é¢ãã以äžã®é ç®ãããããŒå ã§çµ±äžãããã¹ãã§ããã
- ãã©ãŒããã
- ãããŒå ã®ãã°åºåç®æ (ã©ããã£ãåŠçã«å¯ŸããŠãã°ãåºåãããã)
- ãã°ã®åºåå
ãã°ã«ã¯ãåæã«å¿ èŠãªæ å ±ãå«ããå¿ èŠãããã ãŸãããã°å ã®æååæ€çŽ¢ãæååæäœãç°¡åã«ãªãããã«ããã©ãŒããããèšå®ããŠããã
ãã°ã«ã¯ãäž»ã«ä»¥äžã®æ å ±ãå«ãããšã皌åç¶æ³ãé害ã®åæãè¡ãããããªãã
- æå»
- ãã°ã¬ãã« (ãŸãã¯çšŒåç¶æ )
- ãã°ãåºåããããŒã
- ãã°åºåæã«æµãã
msg
3.4.ã¯ãã·ã¹ãã ã®çšŒåããã¬ãŒã¹ããããã«å¿ èŠã§ããã ãããã¯ãéçºããã·ã¹ãã ã®é害究æã ãã§ãªããéçºããã·ã¹ãã ã«ãããŠé »ç¹ã«å©çšãããåŠçå 容ãæããããšã«ã€ãªããã ããã¯ãã¢ããªã±ãŒã·ã§ã³ã®å©çšè ã®ããŒãºåæããããã«äŒŽãã¢ããªã±ãŒã·ã§ã³ã®æ¹è¯ãããã«ã¯ããžãã¹ããã»ã¹ã®æ¹è¯ã®ãã³ãã«ããããšãåºæ¥ã(åè:Process Mining)ã
3.4.ã¯ãæ£åžžç³»ã®ãããŒã§ååŸããæ¹æ³ãååšããªã(Node-RED 0.18çŸåš)ã ãã ããcatchããŒãã§æãããšã©ãŒã€ãã³ãã«ã¯å«ãŸããæ å ±ã§ããããã3.4.ããã°ãšããŠåºåããããã«ã¯ããããŒã®ãã°ãèšæ¶ãããç®æã§ãfunctionããŒãã§æå³çã«ãšã©ãŒãçºçãããã
äžèšã®ãããªããã°ã«å«ããæ å ±ã®æ±ºå®ã¯ããã®ãããŒã®çšŒåã«ãããŠããã°ãã©ã®ããã«å©çšãããã«äŸåãããããæ¬ã¬ã€ãã«ãã£ãŠçµ±äžåããããšã¯å¥œãŸãããªãã ãã°ã«å«ããæ å ±ã¯ãäœæããã¢ããªã±ãŒã·ã§ã³ããã³ãã¬ãŒãã®å 容ãèŠä»¶ã«åŸããé©åã«åãæ±ºããŠã»ããã
ãã°ã®å 容ãããéèŠãªããšã¯ãäžã€ã®ã¢ããªã±ãŒã·ã§ã³ã«ãããŠããã°ã®ãã©ãŒããããçµ±äžãããŠããããšã§ããã ãªããªãããã©ãŒããããçµ±äžãããŠããªããšããã°ã®å©çšãå°é£ã«ãªãããã§ããã ããããªããããã°ãåºåããç®æããã¢ããªã±ãŒã·ã§ã³å šäœã«ç¹åšããŠãããšãå šãŠã®ç®æã§ãã©ãŒããããçµ±äžããããšãé£ããã ããã解決ããããã«ã¯ããã°ã®åºåãäžã€ã®ãµããããŒå ã§å®çµãããã®ãè¯ãã
templateããŒãã«ã¯ãMustacheæ§æã§ä»¥äžã®ããã«èšè¿°ãããŠããã
{% raw %}[{{logid}}] "{{payload}}"{% endraw %}
ãã®ãµããããŒãå©çšãããããŒã¯ãcatchããŒãã®åŸã«ãmsg.payload
ãmsg.logid
ãmsg.level
ãèšå®ã®äžã§ããã®ãµããããŒã«msg
ãéåºããã
以äžã®ãããªãã°ããNode-REDãèµ·åããããµãŒããŒã®ã³ã³ãœãŒã«ã«åºåãããã
[error] [function:ERRORãã°åºå] [E0001] "HTTP ERROR (404)"
ãã°ã®ãã©ãŒããããèšå®ããåŠçã¯ããã®ãµãŒããããŒå ã®ã¿ã§è¡ãããããããã°ãã©ãŒãããã®çµ±äžã容æã§ããã
ãããŒã®äžã®ã©ãã§ãã°ãåºåããããã¯ãååŸãããã°ã®å©çšç®çã«äŸåããã ãã ããå€ãã®å Žåã¯ã以äžã®ç®æã§ãã°ãåºåããã®ãè¯ãã ããã
- ããŒãã®ãšã©ãŒãçºçããéã®ããšã©ãŒãã³ããªã³ã°ãããŒå
- æ£åžžç³»ãããŒã«ã¡ãã»ãŒãžãæå ¥ãããããšãæ€ç¥ã§ããç®æ
- æ£åžžç³»ãããŒã§ãåŠçãå®äºããããšãæ€ç¥ã§ããç®æ
- ãããŒå ã§ç¶æ ã®ç®¡çãè¡ã£ãŠããç®æ
ç¹ã«ãç¶æ ã®ç®¡çãè¡ã£ãŠããç®æã¯ããããŒããŒã¹ããã°ã©ãã³ã°ã«ãããŠã仿§äžã®åé¡ããã°ãæœã¿ãããã ãã®ããããã®ãããªéåžžãããªã¹ã¯ãé«ããããŒãèšèŒããç®æã§ãINFOã¬ãã«ãDEBUGã¬ãã«ã§ãã°ãåºåãããŠããã®ãè¯ãã ããã
ç¶æ ã«ã¯ãã³ã³ããã¹ãã®ç¶æ ã ãã§ãªããDBãšã®ã¢ã¯ã»ã¹ãªã©ã®ããŒãã®ç¶æ ãå«ãŸããã ããŒãã®ç¶æ ã¯ãStatusããŒããå©çšããŠãç¶æ ã®å€åããã°ã«èšé²ããã
å察ã«ããã°ãåºåããéã«æ³šæãå¿
èŠãªç®æã¯ãmsg
ãæ©å¯æ§ã®é«ãããŒã¿ãæ±ã£ãŠããæã§ããã
äŸãã°ããã¹ã¯ãŒããæ±ãå Žåããã¹ã¯ãŒããå«ããŠãã°ã«åºåããŠããããæ€èšããå¿
èŠãããã
ããããã¹ã¯ãŒããæ±ã£ãŠããããšããã°ã«æ®ãå¿
èŠãããã°ããã¹ã¯ãŒãéšåãäŒåã«ããå¿
èŠãããã
ãœãããŠã§ã¢ã§ãšã©ãŒãçºçããéã«ããã®ãšã©ãŒã«å¯Ÿããé©åãªåŠçãçšæããŠããããšãããšã©ãŒãã³ããªã³ã°ãšããã äŸãã°ãæå®ãããã¡ã€ã«ã«ã¢ã¯ã»ã¹ã§ããªããå ¥åããŒã¿ãæ³å®ãã圢åŒã§ã¯ãªãããªã©ã®å®è¡æãšã©ãŒãçºçãããšãã·ã¹ãã ã®æ¯ãèããäºæž¬äžèœãšãªããå Žåã«ãã£ãŠã¯ã·ã¹ãã å šäœã®èª€åäœãããŒã¿ç Žæã«ç¹ããå¯èœæ§ãããã ããã§ããšã©ãŒã®çºçãç¥ããããšã©ãŒã€ãã³ããæãããšã©ãŒã«å¯ŸåŠããããã®åŠçãå®è¡ããããšã©ãŒãã³ããªã³ã°ãçšæããã äŸãã°ããšã©ãŒå 容ã®ãã°åºåã代æ¿åŠçãžã®åãæ¿ãã人éã®å€æãåŸ ã€ãæå³çã«ã·ã¹ãã ãå®å šã«çµäºããããªã©ã®åŠçãçšæããã Node-REDã§ãããšã©ãŒãã³ããªã³ã°ãå¿ èŠã§ããã ãšã©ãŒãã³ããªã³ã°ã®åŠçã¯ãä»ã®æ£åžžç³»ã®åŠçãšåããããããŒã§è¡šçŸããã 以äžã§ã¯ãNode-REDã§ã®ãšã©ãŒãã³ããªã³ã°ã®å®è£ æ¹æ³ãšããšã©ãŒãã³ããªã³ã°ãè¡ããããŒã®é 眮ã«ã€ããŠèª¬æããã
Node-REDã®å ŽåãããŒãã®åŠçäžã«çºçãããšã©ãŒã«ã¯ãcatchããŒããå©çšããŠãšã©ãŒãã³ããªã³ã°ãå®è£
åºæ¥ãã
catchããŒãããããŒã®æåã®ããŒããšãããã®åŸãšã©ãŒãã³ããªã³ã°åŠçããããŒã§èšè¿°ããã
catchããŒããæããããšãã§ãããšã©ãŒã¯ãä»»æã®ããŒãã§åŠçäžã«çºçãããšã©ãŒãšãfunctionããŒãå
ã«ãããŒéçºè
ã«ãã£ãŠèšè¿°ãããnode.error("ãšã©ãŒå
容", msg)
ã§æå³çã«çºçãããšã©ãŒã®2çš®é¡ã§ããã
ãfunctionããŒãå ãšã©ãŒãã«ã¯ã以äžã®ã³ãŒããèšèŒãããŠããã
process_success_done = false;
if (process_success_done){
node.status({fill:"green",shape:"dot",text:"success"});
}else{
node.status({fill:"red",shape:"ring",text:"fail"});
node.error('[E0001] ãã¡ã³ã¯ã·ã§ã³å
ãšã©ãŒ', msg); // æå³çã«äŸå€ãçºçããã
}
catchããŒãã¯ãåãã¿ãå
ã®ããŒãããã®ãšã©ãŒãååŸããã
ãã ãããããµããããŒå
ã«ããµããããŒå
ã§çºçãããšã©ãŒã«å¯Ÿå¿ããcatchããŒãããªãå ŽåããµããããŒãå©çšããŠãããããŒã«ãšã©ãŒã€ãã³ããäŒæããã
ããã¯ãJavaçã§ã¡ãœããã®ãšã©ãŒãåŒã³åºãå
ã«äŒæãããåŠç(throws
)ã«è¿ãã
ãããŒéçºè
ã¯ãã®ç¹æ§ãçè§£ã»å¿çšãããšã©ãŒãžã®å¯ŸåŠã®èŠéããè¯ããããŒãèšèšããå¿
èŠãããã
ãŸããçºçããããšã©ãŒãããµããããŒå
ã§åŠçãã¹ããšã©ãŒããåŒã³åºãå
ã§å¯ŸåŠãã¹ããšã©ãŒãªã®ããæ€èšãããããŠããµããããŒå
ã«ãšã©ãŒã«å¯Ÿå¿ããcatchããŒããèšçœ®ããããæ€èšããã
äŸãã°ããµããããŒã®å
¥åmsg
ãäžæ£ãªå Žåã¯ããµããããŒå
ã«ãšã©ãŒã«å¯Ÿå¿ããcatchããŒããèšçœ®ããã«ãåŒã³åºãããšã®ãããŒã«ãšã©ãŒãäŒæãããã
ãšã©ãŒãã³ããªã³ã°ãè¡ããããŒã¯æ£åžžãªåŠçäžãšã¯ç°ãªãåŠçã§ãããããå€ãã®å Žåããšã©ãŒãã³ããªã³ã°ã®ãããŒã«æ¥åããã»ã¹ã¯å«ãŸããªãã æ¥åããã»ã¹ãè¡šãæ£åžžç³»ã®ãããŒãšãæ¥åããã»ã¹ãå«ãŸãªããããŒãå ¥ãä¹±ãããšããããŒãé²èЧãããŠãŒã¶ãŒã«ãšã£ãŠã¯å¯èŠæ§ãæªãã ãã®ãããæ£åžžç³»ã®ãããŒãšãšã©ãŒãã³ããªã³ã°ãè¡ããããŒã¯ãæç€ºçã«ç°ãªãäœçœ®ã«èšè¿°ããã®ãè¯ãã ãã ããæ£åžžç³»ã®ãããŒãšãããã«å¯Ÿå¿ãããšã©ãŒãã³ããªã³ã°çšã®ãããŒããé ãã«èšè¿°ãããŠãããšããããŒã®èŠéããæªãã誀ã£ã察å¿ãèšå®ããå¯èœæ§ãé«ããªãã ããã§ãæ¬ã¬ã€ãã§å³æ Œãªæå®ã¯ããªããããããŒã®äžŠã¹æ¹ãšããŠã以äžäºã€ãææ¡ããã
- äžã€ã®æ£åžžç³»ã®ãããŒã«å¯Ÿãããã®ãããŒã«é¢ãããšã©ãŒãããäžã«èšè¿°ãã (äžå³å·Š)
- æ£åžžç³»ã®ãããŒãã¿ãå ã®äžéšã«ãŸãšãããšã©ãŒãã³ããªã³ã°ã®ãããŒã¯æ£åžžç³»ã®ãããŒã®é çªã«ã¿ãã®äžéšã«äžããèšèŒãã
ãããŒéçºè ã¯ããããŒã®éçºåŸãå¯èªæ§ãåäžãããããã«ããªãã¡ã¯ã¿ãªã³ã°ãè¡ãããšãæšå¥šããã åºæ¬çã«ã¯ãæ¬ã¬ã€ãã©ã€ã³ã«èšèŒã®å 容ãç¶²çŸ ããŠããããšãæãŸãããããã®ç¯ã§ã¯ããªãã¡ã¯ã¿ãªã³ã°ãšããŠç¹ã«æããŠããã¹ããã€ã³ãããªã¹ãåããŠç€ºãã
éçºãããããŒããä»è ã«æç€ºããåãããã³ãã¬ãŒãåç¥ãåã«ã¯ããã®ãã§ãã¯ãªã¹ãã確èªããéçºãããããŒããããã®é ç®ãæºãããŠããã確èªããŠé ãããã
- ã³ãŒãã£ã³ã°ã¹ã¿ã€ã«
- æ¥åã®æµããåæ ããã·ã¹ãã å šäœã®åŠçã®æµããã€ã¡ãŒãžã§ãããããŒ(æ¥åã¬ãã«ã®ãããŒ)ãååšãã
- ã¡ãã»ãŒãžå
ã«æ ŒçŽããããåŠç察象ã®ããŒã¿ã¯ã
msg.payload
ã«æ ŒçŽãããŠãã - äžå¿
èŠã«
msg.
以äžã®å±æ§(msg.payload
以å€)ã®å€ãä¿®æ£ããŠããªã - æ¥åã¬ãã«ã®ãããŒå ã®ããŒãã¯ãæ¥ååŠçãçè§£ã§ããååãä»ããããŠãã
- åŠçã¬ãã«ã®ãããŒã¯ããåè©ïŒç®çèªããŸãã¯ãåè©ïŒç®çèªïŒå¯è©ãã§ååãä»ããããŠãã
- functionããŒããå€çšãããŠããªã
- ãããŒããåŠçå 容ããšã«åããŠæŽåãããŠãã
- ãããŒã®å®è£
- ã©ã€ãã©ãªãšããŠãæ¥åãããŒã®éæã§åå©çšããããããŒãããµããããŒã«ãªã£ãŠãã
- ã·ã¹ãã ã®å€éšããã®åŠçèŠæ±ãåããªããããŒ(åäžã®Node-REDãããŒãšã³ãžã³ããã®ã¿å©çšããããããŒ)ã¯ãlinkããŒãã§ä»ã®ãããŒãšé£æºããŠãã
- ã°ããŒãã«ã³ã³ããã¹ããžã®å€ã®ä»£å ¥ã¯ãããäžã€ã®ãµããããŒå ã§ã®ã¿è¡ã£ãŠãã
- ã«ãŒããããå Žåãã«ãŒãããæããææ®µãçšæããŠãã
- ä¿¡é Œæ§ã»å質åäž
- ãããŒãšãµããããŒã«ã¯ãã³ã¡ã³ããä»ããŠãããåŠçã®æŠèŠãšå
¥åºå
msg
ã®èª¬æãèšè¿°ãããŠãã - äžã€ã®ãããŒã«ã¯ãcommentããŒããå€ããšã1~2åçšåºŠã§ãããåŠçã®è©³çްã¯ã³ã¡ã³ãã«èšèŒããŠããªã
- ãããŒã®çšŒåç¶æ³ãé害ã瀺ããã°ãæ®ããŠãã
- é©åãªãšã©ãŒãã³ããªã³ã°ãããŒãååšãã
- ãšã©ãŒãã³ããªã³ã°ã®ãããŒã¯ããã®ãšã©ãŒã«å¯ŸåŠãã¹ããããŒã®äžã«å®è£ ãããŠãã
- ãããŒãç°åžžåæ¢ããŠãåéã§ããããã«ãã³ã³ããã¹ãã®ããŒã¿ãæ°žç¶åãããŠãã
- é害ããã®åŸ©æ§åŸã«ãåããšã©ãŒã§ç¹°ãè¿ãé害忢ããªãããã«ããããã®å·¥å€«ãååšãã
- ãããŒãšãµããããŒã«ã¯ãã³ã¡ã³ããä»ããŠãããåŠçã®æŠèŠãšå
¥åºå
è€æ°ã®ã¿ããååšããäžèŠæš¡ã®ãããŒãã倿°ã®æ¥åãã¡ã€ã³ã飿ºããå€§èŠæš¡ãªãããŒãéçºããéã¯ãéçºè ãè€æ°äººã«ãªããéçºæéãé·æã«ãªãããããããžã§ã¯ãäœå¶ãæ§ç¯ããå¿ èŠãããã æ¬ç¯ã§ã¯ããããžã§ã¯ãäœå¶ãæ§ç¯ããéã®æé ãšãçšæããéçºç°å¢ã«ã€ããŠæŽçããã ãŸãããã¡ã€ã³ã®çè§£ãã¹ããŒãªãŒã»ãšããã¯ç®¡çãããã¯ãã°ã®ç®¡çã¯ãä»ã®ã·ã¹ãã éçºãšåæ§ã§ããã å¿ èŠã«å¿ããŠãHIPACE IoTçãæŽ»çšããŠé ãããã ãŸãããã¹ãæ¹éã«ã€ããŠã¯ãæ¬ã¬ã€ãã©ã€ã³ãä¿¡é Œæ§ã»å質åäžããåç §ããŠé ãããã
ãããžã§ã¯ãäœå¶ã®æ§ç¯ã¯ãäž»ã«ä»¥äžã®ã¹ãããã§å®æœããã®ãè¯ãã
- ãããžã§ã¯ãããžã§ã³çå®ã»ããŒã ãã«ãã£ã³ã°
- ãããã¯ãããã¯ãã°æ§ç¯
- ãã¹ãæ¹éã»æè²æ¹éäœæ
ãŸãããããžã§ã¯ããéè¡ããçµç¹ã®çŸç¶ã®æ§é ãšèœåãææ¡ãããããžã§ã¯ãã§äœ¿çšããéçºããã»ã¹ã®æ±ºå®åã³ææžåãããæ¿èªãåŸãã ãŸãããããžã§ã¯ããé²ããåã«ãé¡§å®¢ã®æ¥åãã¿ãŒã²ããåžå Žã®æ¥çãããžãã¹ã±ãŒã¹ã®çè§£ã«åªããã ãããã®çè§£ã¯ããŠãŒã¶ãŒã¹ããŒãªãŒã®æºåããããžã§ã¯ãããŒã ã«å¿ èŠãªæè²ãéžå®ããéã«æçšã§ããã ãããŠããããžã§ã¯ãã®ç®æšãç®çãå¶çŽäºé ãç¹å®ããææžåããããŒã ã¡ã³ããŒéã§å ±æããã
ãã®åŸãé©åãªé¡§å®¢éšéã®ä»£è¡šè ãããã¯ç€Ÿå ã®å°éå®¶ãšè°è«ããã·ã¹ãã ã¢ãŒããã¯ãã£ãéžæãææžåããã ã·ã¹ãã ã¢ãŒããã¯ãã£ã¯ãæ¬ã¬ã€ãã©ã€ã³ã®ãã¢ãŒããã¯ãã£èšèšããåç §ãããããžã§ã¯ãããŒã å ã§è°è«ããã ãã¡ã€ã³ããã³ã·ã¹ãã ã¢ãŒããã¯ãã£ãçå®ãããããããžã§ã¯ãäœå¶ãæ§ç¯ããã ãããžã§ã¯ãå ã«è€æ°ã®ããŒã ãååšãããå Žåã¯ãåããŒã ã®è²¬åãšè²¬åç¯å²ãåããããã«äœå¶è¡šãææžåããŠç®¡çããã ãã®æã«ã¯ããããžã§ã¯ãã§çšããçšèªããã¢ãŒããã¯ãã£ãèšèšã»éçºæéçã®ãããžã§ã¯ãæšæºã決å®ããææžåããã
æåŸã«ããã¹ãæ¹éãšæè²æ¹éãäœæããã éçºããããããŒã«æåŸ ããåŠçã®ãµããŸããå®çŸ©ãããã®æ¯ãèãã®æ£ãããæ€èšŒã§ãããã¹ãé ç®ãå®çŸ©ããã ãããŠããã¹ãã®ç®çãšèгç¹ãæé ãææžåããã ãããŸã§ã§æ€èšãããã¡ã€ã³ç¥èã»ã¢ãŒããã¯ãã£ã»éçºææ³ã»ãã¹ãæ¹éãèžãŸãã ããŒã ã¡ã³ããŒã®ã¹ãã«ã»ããã確èªããå¿ èŠãªã¹ãã«ãæããŠããªãã¡ã³ããŒãããå Žåã¯ãæè²ãè¡ãã ãã®ããã«ãæè²èšç»ãäœæã»æŽæ°ããã
åæãšããŠããããŒãéçºè Aãšéçºè Bã§å ±åéçºããéçºè CãGitã®éçºçšãã©ã³ãã§éçºããããããŒãããªãªãŒã¹çšãã©ã³ãã«ããŒãžããã
Node-REDã«ã¯ãäžã€ã®Node-REDã®ãšã³ãžã³ã«å¯ŸããŠãè€æ°ã®ãããŒãããžã§ã¯ããä¿åããŠåãæ¿ããŠéçºããæ©èœãããã ãã®æ©èœããProjectæ©èœãšããã ãããžã§ã¯ãæ©èœã¯Gitãšé£æºå¯èœã§ãããããProjectæ©èœãçšããããšã§ããããŒãGitã§ããŒãžã§ã³ç®¡çã§ããã ãã®ãããã¡ã³ããŒéã§ã®å ±æã«GitHubãGitBucketãªã©ã®Gitãªã¢ãŒããªããžããªãçšããã®ãè¯ãã ãŸããGitHub Runnerã®ãããªCIããŒã«ãçšããããšã§ããããŒã®ãã¹ãçãèªååã§ããã
ãã以éã§ã¯ãGitãªã¢ãŒããªããžããªã«GitHubãCIããŒã«ã«GitHub RunnerãçšãããšããŠèª¬æãç¶ããã
åéçºè ã®ããŒã«ã«ç°å¢ã«ã¯ãNode-REDãšGitãã€ã³ã¹ããŒã«ããã Node-REDãšGitã¯ãå šéçºè ã®ããŒã«ã«ç°å¢ã«ã¯ãåãããŒãžã§ã³ã®ãã®ãã€ã³ã¹ããŒã«ããã ãªããNode-REDã¯ãããŒãžã§ã³0.18以éãéžæããProjectsæ©èœ(åç §)ãæå¹ã«ããã Gitã¯ãããŒãžã§ã³2.0以éãéžæããããã®çç±ã¯ãããŒãžã§ã³2.0以éã§ãªããšãNode-REDã®Projectsæ©èœãæ£åžžã«æ©èœããªãããã§ããã
GitHubã«ã¯ãäžã€ã®ãããžã§ã¯ãã«å¯ŸããŠãéçºçšãšãªãªãŒã¹çšã®2ã€ã®ãã©ã³ããçšæããã éçºã¯éçºçšãã©ã³ãã§ç®¡çãããããŒã«å¯ŸããŠè¡ãã ç¹å®ã®ãã€ã«ã¹ããŒã³ãŸã§éçºãå®äºããããéçºè Cã¯ãªãªãŒã¹çšãã©ã³ãã«ãããŒãããŒãžããã
ãããžã§ã¯ãã®éå§åŸããŸãåãã«è¡ãããšã¯ãGitHubã§ç©ºã®ãããžã§ã¯ããäœæããããšã§ããã ãã®åŸãä»»æã®éçºè ããNode-REDã®Projectsæ©èœãçšããŠãããŒã«ã«ç°å¢ã«ãããžã§ã¯ããèšçœ®ããã Projectsæ©èœã§ãããžã§ã¯ããæ°èŠäœæããç»é¢ãéãã"Clone Repository"ãéžæãã"Git repository URL"ã«ãGitHubã§äœæãããããžã§ã¯ãã®git cloneçšURLãå ¥åããã
ããŒã«ã«ç°å¢ã«ãããžã§ã¯ããèšçœ®ããåŸãããŒã«ã«ç°å¢ã§éçºçšãã©ã³ããäœæããGitHubã«Pushããã ãã©ã³ãäœæãšGitHubãžã®Pushã¯ãNode-REDã®Projectsæ©èœã§å®è¡ã§ããã ãããŸã§ã®äœæ¥ãå®äºããããåéçºè ã¯ããããžã§ã¯ãã®éçºäœæ¥ãéå§ããã
éçºè
Aãšéçºè
Bã¯ãProjectsæ©èœãçšããŠãããŒã«ã«ç°å¢ã«GitHubãããããžã§ã¯ããèšçœ®ããã
ããå
šãã©ã³ããããŒã«ã«ç°å¢ã«èšçœ®ã§ããªãå Žåã¯ãã³ã³ãœãŒã«äžã§ãgit pull --all
ãè¡ããå
šãã©ã³ããååŸããã
ãã®åŸãéçºçšãã©ã³ãã«åãæ¿ãããããŒã®éçºãé²ããã
éçºè
Aãšéçºè
Bã¯ããããŒãéçºãçµãããããŸãNode-REDã®ç»é¢äžã§git pull
ãè¡ãã
ãã®éãã³ã³ãœãŒã«ã§ã®gitã³ãã³ãã§åŠçããããšã¯é¿ããNode-REDã®Projectsæ©èœãå©çšããã
ãããä»ã®éçºè
ããããŒãä¿®æ£ããGitHubã«PushããŠããå Žåã«ã¯ãgit pull
ã®éã«å¿
ãç«¶åãçºçããã
ãã ããåãããŒãã«å¯Ÿããä¿®æ£ãç«¶åããŠããªãéãã¯ãNode-REDãèªåçã«ç«¶åã解決ããããšãã§ããã
ããåãããŒãã«å¯Ÿããä¿®æ£ãååšããå Žåã¯ãéçºè
ãæåã§ç«¶åã解決ããªããã°ãªããªãã
ãã®å ŽåãNode-REDäžã§æåã§ç«¶åã解決ããããã®ç»é¢ã衚瀺ããéçºè
ã¯ç«¶åããäºã€ã®æŽæ°ã®ãã¡ãã©ã¡ããæ¡çšãããéžæããã
éçºè
CãããªãªãŒã¹çšãã©ã³ããšéçºçšãã©ã³ãããã¿ãŒããã«äžã§git pull
ããéçºçšãã©ã³ãã®å
容ããªãªãŒã¹çšãã©ã³ãã«ãgit merge
ããã
éçºè
Aãšéçºè
BãããªãªãŒã¹çšãã©ã³ãã«çŽæ¥git push
ãè¡ã£ãŠããªããã°ãç«¶åãçºçããããšã¯ãªããããéçºè
Cã¯Node-REDã®Projectsæ©èœãå©çšããŠããã³ã³ãœãŒã«äžã§gitã³ãã³ããå©çšããŠãè¯ãã
ãããŒã®ããŒãžã§ã³ç®¡çããã³éçºè éã§ã®å ±æã¯ãGitã§è¡ãããšãæšå¥šããã ãã®çç±ã¯ãNode-REDã§ãProjectsæ©èœã«ãããŠGitãå©çšã§ããããã§ããã ãããŒã®ç®¡çã¯ãéçºè ãã³ã³ãœãŒã«äžã§Gitã³ãã³ããå®è¡ããããšã¯æ¥µåé¿ããåžžã«Node-REDã®Projectsæ©èœãå©çšããã¹ãã ã ãã®çç±ã¯ãéçºããããããŒã¯ã1è¡ã®ã¿ã®JSONãã¡ã€ã«ãšããŠä¿åããããããã³ã³ãœãŒã«ã§ããŒãžãããšãç«¶åããäºã€ã®ãããŒã®ãã¡ãã©ã¡ãããå šãŠæ¶å»ããããåŸãªããªãããã§ããã
äžå³ã¯ãGitã³ãã³ãã§ã®ããŒãžæäœã«ãããGitã«ãã£ãŠãããŒãã¡ã€ã«å ã«èªåèšèŒããããç«¶åç®æã®è¡šç€ºå 容ã瀺ããŠããã Gitã®ç«¶åã¯ããã¡ã€ã«ã®åè¡ã«å¯ŸããŠæ€æ»ããããããããŒãã¡ã€ã«ã¯1è¡ã§è¡šçŸããããããç«¶åç®æã®æ¯èŒãããããŒå šäœã®æ¯èŒãšãªã£ãŠããŸãã ãã®ããããããŒã®äžã§ã®ãç«¶åãããç®æã®ã¿ãç¹å®ããŠè§£æ±ºããããšãã§ããªãã
Node-REDã®Projectsæ©èœãçšãããšãéçºè ã¯ãããŒã®ä¿®æ£ã«é¢ããç«¶åãNode-REDã®ç»é¢äžã§æ€ç¥ããããšãã§ããç«¶åã®è§£æ±ºãè¡ãããšãã§ããã ç¹ã«ãNode-REDã§ã¯ãç«¶åãåããŒãã«å¯ŸããŠæ€æ»ãããããããããŒå ã§ã®ç«¶åãããç®æã®ã¿ãç¹å®ããéçºè ã解決ããããšãã§ããã
ãªããNode-REDã®Projectsæ©èœã§ãµããŒããããŠããªãGitã®æ©èœã¯ååšããã
äŸãã°ãNode-RED 0.18ã§ã¯ãRevertã«å¯Ÿå¿ããæ©èœã¯ãProjectsæ©èœã§æäŸãããŠããªãã
ãã®ããã«ãProjectsæ©èœã§æäŸãããŠããªãGitã®æäœã«é¢ããŠã¯ãã³ã³ãœãŒã«ã®Gitã³ãã³ããçšããå¿
èŠãããã
Revertãè¡ãéã«ã¯ãNode-REDã§é²èЧã§ãããããŒã®ä¿®æ£å±¥æŽã«ãGitã®ã³ãããIDã衚瀺ããããããgit revert
ã®åŒæ°ãšããŠåç
§ã§ããã
ãŸãã"ãããŒã®åŠçåäœ"ã§èª¬æãããšãããéçºæ¹éãšããŠãåã¿ãã«ã¯åå¥ã®ãã¡ã€ã³ã«é¢ããåŠçãèšè¿°ããããšã§ããããŒã®èŠéããè¯ããªãããšã説æããããããã«å ããéçºè ãããããå¥ã®ã¿ããéçºã»ä¿®æ£ããããã«åãæ±ºããããšã§ãåäžã®ããŒãã«å¯Ÿããç«¶åãçºçããå¯èœæ§ã¯äœããªããNode-REDã«ããèªåç«¶å解決ãæåŸ ã§ããã ã§ããéããè€æ°ã®éçºè ãäžã€ã®ã¿ãå ãä¿®æ£ããããšããªããæåã§ç«¶åã®è§£æ±ºãããªããŠæžãããã«ããããžã§ã¯ãå ã§ã®éçºæ¹éãåãæ±ºãããããžã§ã¯ãæšæºã«ããŠããã¹ãã§ããã
æŠèŠ
- ããŒãã®å®è¡ãé·æéã«ãªããšNode-REDã€ã³ã¹ã¿ã³ã¹å šäœã®å®è¡ã忢ããŠããŸããããä»ã®ãµãŒãã¹ã皌åãããåŠçãå§èšããã
ã¡ãªãã
- Node-REDã€ã³ã¹ã¿ã³ã¹ã®ã¹ã«ãŒãããåäžãšãã³ã°ã¢ããã®ææ¢
çæç¹
- ã³ã³ããåã«ãã£ãŠããã»ã¹ééä¿¡ãªãŒãããããçããå¯èœæ§ãããã
解説 Node.jsã®å®è¡ã¢ãã«ã¯ã·ã³ã°ã«ã¹ã¬ããã®ãããããããŒãã®å®è¡ãé·æéã«ãªããšNode-REDã€ã³ã¹ã¿ã³ã¹å šäœã®å®è¡ã忢ãããã³ã°ã¢ããããç¶æ ãšãªãå¯èœæ§ãããã ãã®ãããªé·æéå®è¡ããŒããã³ã³ããåããç¬èªããŒããä»ããŠéåæã«åŒã³åºãããã«ããããšã§ãã®ãããªåé¡ã®çºçãææ¢ããããšãã§ããã
ãªããé·æéåã®åå ãäœããã®æ¡ä»¶æç«ãåŸ ã€ããã§ããã°ãNode.jsã®éåæããã°ã©ãã³ã°ã®å©çšãæšå¥šããã
æŠèŠ
- Node-REDã§ã¯ã¡ãã»ãŒãžã®å°çé åºã®ä¿èšŒããªããããã¡ãã»ãŒãžã®é åºé¢ä¿ã衚çŸãã圢åŒ(åé¢ã¡ãã»ãŒãžåœ¢åŒãšåŒã¶)ã§é¢é£ããã¡ãã»ãŒãžã衚çŸãã
ã¡ãªãã
- ã¡ãã»ãŒãžã®éã«é åºé¢ä¿ãããå Žåããããä¿èšŒããããšãã§ããã
- ããŒã¿ãå°ããªè«ççãŸãšãŸãã«åå²ããŠåå¥ã«åŠçããåŸã§çµ±åããããšãã§ããã
- åæ£äžŠååŠçã®é©çšã容æãšãªãã
çæç¹
- é åºä¿èšŒã®ããã®ã¡ãã»ãŒãžå æ å ±ãéäžã®ããŒãã§ç Žæ£ãããªãããšã確èªãã
解説 ãã©ã³ã¶ã¯ã·ã§ã³ããŒã¿ããœãŒããããã¬ã³ãŒããªã©è€æ°ã®ã¡ãã»ãŒãžã«é åºé¢ä¿ããããããããšããããNode-REDã§ã¯ããŒããžã®ã¡ãã»ãŒãžã®å°çé ã¯ä¿èšŒãããªããããã¡ãã»ãŒãžã®å°çé åºã«ãã£ãŠã¡ãã»ãŒãžéã®é åºé¢ä¿ãæé»çã«è¡šçŸããããšã¯ã§ããªãããŸããåæ£äžŠååŠçãå°å ¥ããå Žåã«ãåæ§ã®èª²é¡ãçããã
Node-REDã§ã¯ãããŒã¿ãè€æ°ã®ã¡ãã»ãŒãžã«åè§£ããsplitããŒããsplitããŒãã«ãã£ãŠåå²ãããããŒããé åºãä¿ã£ãŠçµåããjoinããŒããæšæºããŒããšããŠå®çŸ©ãããŠãããæ¬ã¬ã€ãã§ã¯ããããåå²ã¡ãã»ãŒãžåœ¢åŒãšåŒã¶ãåå²ã¡ãã»ãŒãžåœ¢åŒã®æã€ããããã£ãäžã®è¡šã«ç€ºãã
åå²ã¡ãã»ãŒãžåœ¢åŒã®ããããã£
é çª | ãããã㣠| æå³ | åè |
---|---|---|---|
0 | payload | åå²ãããããŒã¿ | å¿ é |
1 | parts.id | ã¡ãã»ãŒãžã°ã«ãŒãã®èå¥å | å¿ é |
2 | parts.index | ã°ã«ãŒãå ã®é åº | å¿ é |
3 | parts.count | ã°ã«ãŒãã«æå±ããã¡ãã»ãŒãžã®ç·æ° | å¿ é |
4 | parts.type | ã¡ãã»ãŒãžã®å (string/array/object) | |
5 | parts.ch | stringãåè§£ããéã®æå | |
6 | parts.key | objectãåè§£ããéã«äœ¿ã£ãããŒã®å€ | ã |
åå²ã¡ãã»ãŒãžåœ¢åŒãçšããããšã§ãããã¡ãã»ãŒãžã°ã«ãŒãã«æå±ããã¡ãã»ãŒãžãå šãŠåãåã£ããåŠã(parts.countåã®ã¡ãã»ãŒãžãåãåã£ããåŠã)ã®ç¢ºèªãã¡ãã»ãŒãžã°ã«ãŒãã«æå±ããã¡ãã»ãŒãžã®é åºé¢ä¿ã®ä¿èšŒ(parts.indexã®æ¯èŒ)ãè¡ãããšãå¯èœãšãªãã ãŸããåå²ã¡ãã»ãŒãžåœ¢åŒã®ã¡ãã»ãŒãžã«å¯ŸããŠãã¡ãã»ãŒãžã°ã«ãŒãå ã®ã¡ãã»ãŒãžã®ãœãŒãããã£ã«ã¿ãªã³ã°ãåæ£äžŠååŠçãªã©ãè¡ãããŒããä»åŸçšæããäºå®ã§ãããåå²ã¡ãã»ãŒãžåœ¢åŒãæ¡çšããããšã§ãããã®é©çšã容æãšãªãã
ãªããçŸç¶ã®åå²ã¡ãã»ãŒãžåœ¢åŒã§ã¯ã¡ãã»ãŒãžã°ã«ãŒãå ã®ã¡ãã»ãŒãžã«é¢ããŠæ¬¡ã®ãããªå¶éãããã
- ã¡ãã»ãŒãžã®å¢æžãããå Žåã«ãå šãŠã®ããŒãã®parts.countããããã£ã倿Žããå¿ èŠãããã
- ã°ã«ãŒãã«æå±ããã¡ãã»ãŒãžç·æ°ãäžç¢ºå®ãªå Žåã®æ±ããç ©éã
ãããã®åé¡ã解決ããåå²ã¡ãã»ãŒãžåœ¢åŒã®æ¡åŒµãä»åŸæ€èšããäºå®ã§ããã
Facade(çªå£)ãã¿ãŒã³ã¯ããããŒã®äžã«ãéçºè ãç°ãªãéšåãæ··åšããŠããæã«ãé¢å¿ã®åé¢ãåºæ¥ãããã«ãããŒãåããã
ãŸããäžå³ãèŠãŠã»ããã äžå³ã¯ãäŒè°ãšåº§åžã®ç®¡çãè¡ããããŒã§ããããã®ãããŒã䜿ããŠãŒã¶ãŒã¯ãäŒè°ã®èšå®ãšåžã®äºçŽãè¡ã£ãŠããã äºã€ã®functionããŒãã¯ãäŒè°ã®èšå®ãšåº§åžã®äºçŽã®è€éãªåŠçã衚ããŠãããå€ãã®å Žåã¯å€æ°ã®ããŒãã®é£ãªãã§ããã
ãã®ãããŒã¯ã2çš®é¡ã®äººç©ã«æäœãããããšãæ³åã§ããã äžäººã¯ãäŒè°ã®èšå®ãšåº§åžã®äºçŽãšããããã®ãããŒã"䜿ã"ãŠãŒã¶ãŒã§ãããããäžäººã¯äŒè°ã»åº§åžã®ç®¡çã·ã¹ãã ã®éçºè ã§ããã
ãã®ãããŒã¯ããããŒã®å©çšè
ããèªèº«ã®é¢å¿å€ã®åŠçãŸã§ææ¡ããå¿
èŠããããåé¡ã®ãããããŒã ã
åè
ã®ãŠãŒã¶ãŒã¯ãäŒè°ã»åº§åžã®ç®¡çãè¡ãããã«ãfunctionããŒãã®äžèº«ãèŠãŠãfunctionããŒããèªèº«æåŸ
ããåäœã§ãããããfunctionããŒãã«æå
¥ããmsg
ã®çšæããªããã°ãªããªãã
ããã§ãFacadeãã¿ãŒã³ã䜿ã£ãäžå³ã®ãããŒãèŠãŠã»ããã äŒè°ã»åº§åžã®ç®¡çã·ã¹ãã ã®éçºè ãèšè¿°ãããããŒã§ããã
ãã®ãµããããŒã«ã¯ãäŒè°ã»åº§åžã®ç®¡çã«é¢ããè€æ°(ããã§ã¯5çš®é¡)ã®ãµãŒãã¹ãçšæããŠããã
ãã®ãµããããŒã䜿ããŠãŒã¶ãŒã¯ããµããããŒã®å
¥åmsg.topic
ã«ãå©çšãããµãŒãã¹ãèå¥ããããã®å€(ãµãŒãã¹å)ãå
¥ããã
ãµããããŒå
ã®SwatchããŒããmsg.topic
ã«æ ŒçŽããããµãŒãã¹åã®å€ãèå¥ããåŸæ®µã®ãµãŒãã¹ãå®è¡ãããã
ãµããããŒãæäŸãããµãŒãã¹ãšãµãŒãã¹åã¯ããµããããŒã®ã³ã¡ã³ãã«èšèŒããŠããã
äŒè°ã®èšå®ãšåº§åžã®äºçŽããããŠãŒã¶ãŒçšã®ãããŒã ã
äžèšã®ãµããããŒããå©çšããããµãŒãã¹åã®ã¿msg.topic
ã«å
¥ããŠå©çšããã
ããªãã¡ããããŒãåããäžæ¹ã®ãããŒããå©çšãããåŽã®ãããŒã«çªå£ãšãªãã€ã³ã¿ãŒãã§ãŒã¹ãçšæããã ãããFacadeãã¿ãŒã³ãšåŒã¶ã
ããããããšã§ããŠãŒã¶ãŒãšéçºè
ã®é¢å¿ãåé¢ããããŠãŒã¶ãŒã¯ãµãŒãã¹åãmsg.topic
ã«å
¥ããã®ã¿ã§ããããŒãå©çšã§ããã
ãŸããéçºè ã¯ãäŒè°ã»åº§åžã®ç®¡çã·ã¹ãã ã®å®è£ ãæ¡åŒµãèªç±ã«è¡ããã ããã«ãéçºè åŽã«ãã¡ãªãããããããµãŒãã¹ãäžã€ã®ãµããããŒå ã«ãŸãšãããµãŒãã¹åã§ç®¡çããããšã§ãã©ã®ãµãŒãã¹ãã©ã®é çªã§å©çšãããããªã©ã®ãã®ã³ã°ãããšã©ãŒãã³ããªã³ã°ãªã©ãããµãŒãã¹çŸ€ã§çµ±äžçã«èšè¿°ã§ããã
- åæ
- ããã¬ã€ã€ãŒã«ãããŠãåçã®åŠçãè¡ãè€æ°ã®åŠçãå®è£ ãããŠãã
- ãããã®ãããŒéã§ã¯ãçžäºã«äŸåããã (ã¡ãã»ãŒãžã亀æãåã)
- åé¡
- ãããã®å šãããŒéããlinkããŒãã§ã€ãªããå¿ èŠããã
- ãããããããŒéã§å¯çµåã«ãªã
- ãããŒãæ¡åŒµãããã³ã«ããã¡ãã¡ãªã³ã¯ããŒãã®èšå®ãä¿®æ£ããªããšãããªã
- è§£æ±ºæ¹æ³
- è€æ°ã®ãããŒéã§ãåŠçã調æŽãã仲ä»ãããŒãçšæãã
- åãããŒã§ã¯ã
msg
å ã®topic
ãªã©ã«ãã¡ãã»ãŒãžãéãããå ãèšå®ããŠä»²ä»ãããŒã«éãã°ã仲ä»ãããŒããããã«åºã¥ããŠé©åãªãããŒã«éã
- 广
- åãããŒã仲ä»ãããŒã«ã ãlinkããŒãã§äŸåããŠãããè¯ãããããŒéãççµåã«ãªã
- ãããŒãä¿®æ£ãããå Žåããæ°ãããããŒã远å ãããå Žåã«ä¿®æ£ããç®æãå°ãªããªã
ã°ããŒãã«ã³ã³ããã¹ãã¯ãåºæ¬çã«å©çšããªãããã«ããã»ããããããŒå šäœã®æ¡åŒµæ§ãåäžããã ã°ããŒãã«ã³ã³ããã¹ããžã®å€ä»£å ¥ããä»»æã®ç®æã§è¡ããšãæãã¬å€ãã°ããŒãã«ã³ã³ããã¹ãã«æ··å ¥ããããã«å€ãä»£å ¥ããç®æã®ç¹å®ãå°é£ããšãã£ãéçºäžã®åé¡ãããããã ã ãããããã§ãããããŒå šäœã«å¯Ÿããåæèšå®å€ãç°å¢å€æ°ãšããŠãå©çšããå Žåãããã
ããã§ã以äžã«ç€ºãPrivate global Contextãã¿ãŒã³ãå©çšããã
ãŸããã°ããŒãã«ã³ã³ããã¹ããžã®å€ä»£å ¥ããµããããŒã§çšæãããã®ãµããããŒå ã§ãã°ããŒãã«ã³ã³ããã¹ãã®ç®¡çãäžå åããã ãã®ãµããããŒã«ããäžå 管çèªäœããPrivate global Contextãã¿ãŒã³ãšåŒã¶ããšã«ããã ãããå¿çšããããšã§ãäŸãã°ãã°ããŒãã«ã³ã³ããã¹ããžã®äžçšæãªå€ä»£å ¥ãæ€åºããã°ããŒãã«ã³ã³ããã¹ããžã®å€ä»£å ¥ç®æã®æ€çŽ¢ã®å®¹æåããå¯èœãšãªãã
ãã€ã³ãã¯ãäžéã«ããchangeããŒã(change: 2 rules)ã§ãããããã§ã¯äžå³ã®ããã«ãä»ã®ãããŒããåç
§ãããglobal.ENV_VAR
ã ãã§ãªããglobal.__ENV_VAR
ã«ãåãå€ãå
¥ããŠããã
ãã®äžã€å段ã®switchããŒã(ENV_VAR==__ENV_VAR
)ã§ãåã«ãã®ãµããããŒã§å€æŽããã°ããŒãã«ã³ã³ããã¹ãã®å€ã確èªããŠããã
äžãäžããããŒã®ã©ããã§ãglobal.ENV_VAR
ãäžçšæã«æžãæããããŠããå Žåããã®switchããŒãã§ãããæ€åºããã
æåã®switchããŒãã§ãã¡ãã»ãŒãžå
ã«msg.set_env_var
ãååšããå€ãtrue
ãã§æ¡ä»¶åå²ããã
ããã¯ããããŒå
šäœã®å®è¡æã®ç°å¢å€æ°ãªã©ã®èšå®ã«çšããããã
ãã®å Žåã¯ãglobal.ENV_VAR
ãšglobal.__ENV_VAR
ã®å€ã«é¢ä¿ãªããã°ããŒãã«ã³ã³ããã¹ãã®å€å€æŽãè¡ãããã
ãããŒã®æåŸã§ã¯ãmsg.set_env_var
ã¯åé€ããŠããã
ã°ããŒãã«ã³ã³ããã¹ããå©çšãããããŒã¯ãäžå³ã®éãã§ãããmsg.set_global
ãçšæããŠäžèšã®ãµããããŒãåŒã³åºããšãã°ããŒãã«ã³ã³ããã¹ãã®å€ãå€ããããšãåºæ¥ãã
ãã®ç¯ã§ã¯ãäžçšæãªå€ä»£å
¥ã®æ€åºãäŸã«ããããä»ã«ããã°ããŒãã«ã³ã³ããã¹ããžã®å€ä»£å
¥ãè¡ãç®æã®æ€çŽ¢ãçšæã«ããããšãåºæ¥ãã
msg.set_env_var
ã®èšå®ã®ããã«ãå€ä»£å
¥ã®éã«å¿
ãäœããã®ãã©ã¡ãŒã¿ãçšæããããã«ããã°ãCtrl+Fã§è¡šç€ºãããæ€çŽ¢ãã©ãŒã ã«ãã®ãã©ã¡ãŒã¿åãå
¥åããããšã§ããããŒå
šäœã®äžããå€ä»£å
¥ãè¡ãç®æãç¹å®ã§ããã
ãããŒå
ã§ãmsg
å
ã®å±æ§å€ãä¿®æ£ããéã«ãchangeããŒãã®å€ä»£å
¥ã ãã§ã¯é£ããã±ãŒã¹ãããã
äŸãã°ããé
åã®åèŠçŽ ã«ç¹å®ã®æååã远å ãããããæ°å€ãæååã«å€æãããããªã©ã§ããã
functionããŒãã§ããã°ããããã®åŠçã1ããŒãã§å®çŸããããšãã§ããããfunctionããŒãã§ã¯ãããŒãçè§£ãã«ãããªã(åç
§:å€çšãæšå¥šãããªãäžèœããŒã)ã
ãã®å ŽåãchangeããŒãã®JSONataèšè¿°æ©èœãæçšã§ããã
JSONataãšã¯ãJSONãªããžã§ã¯ããæäœããããã®ã¯ãšãªèšèªã§ãããJSONå
ã®æ§é ã®ä¿®æ£ãå€ã®æœåºã倿ãªã©ã倿§ãªæäœãå®çŸå¯èœã§ããã
changeããŒãã®JSONataãå©çšããããšã«ãã£ãŠãmsg
ã®æè»ãªå€æäœãå®çŸãã€ã€ãä»ã®ãããŒé²èЧè
ããmsg
ã®ä¿®æ£ã»ä»£å
¥ãè¡ã£ãŠããããšãçè§£ããããããããŒãèšè¿°ã§ããã
JSONataã¯ãchangeããŒã以å€ã«ãswitchããŒããšsortããŒãã§ãå©çšå¯èœã§ããã ãããã®ããŒãã§ãJSONataãå©çšããããšã«ãã£ãŠãfunctionããŒãã§ä»£çšããããšããåé·ãªãããŒãèšè¿°ããå¿ èŠããªããªãã
changeããŒãã§JSONataãçšããèšå®ã®äŸã瀺ãã ãã®äŸã§ã¯ãè¯æ°ããææ°ãžã®æ°å€å€æããJSONataãçšããŠå®çŸããŠããã
ããã«ãJSONataåŒã®èšè¿°ã容æã«ããããã«ãJSONataåŒå ã§äœ¿çšå¯èœãªé¢æ°ãã倿°çšæãããŠããã ãŸããèšè¿°ããJSONataåŒã詊ããã¹ãç°å¢ãçšæãããŠããã ãããã®æ©èœã¯ãJSONataåŒãèšè¿°ãããã¬ãŒã ã®å³åŽã«ããäžç¹ãªãŒããŒãã¿ã³ãã¯ãªãã¯ããããšã§ãå©çšã§ããã
JSONataã®æ§æãªã©ã«é¢ãã詳现ã¯ãJSONataã®ããã¥ã¡ã³ããåç §ããŠé ãããã