-
Notifications
You must be signed in to change notification settings - Fork 53
Japanese
ããŒããžã§ãã¬ãŒã¿ã¯ãOpenAPIããã¥ã¡ã³ããWeb of Things Things DescriptionãfunctionããŒããªã©ã®ãœãŒã¹ã³ãŒãããNode-REDã®ããŒããçæããããã®ã³ãã³ãã©ã€ã³ããŒã«ã§ãã ãã®ããŒã«ã䜿çšãããšãããŒãéçºè ã¯Node-REDããŒãã®å®è£ æéãå€§å¹ ã«ççž®ã§ããŸãã
Node-REDã«ã¯ããããŒã©ã€ãã©ãªã«ååšããããŒãã䜿çšããã³ãŒãã£ã³ã°ããããšãªãè¿ éãªéçºãã§ãããšããå©ç¹ããããŸãã ããããç¬èªã®åŠçãå®çŸããããã«ãNode-REDãŠãŒã¶ãããŒããéçºãããšãJavaScriptãšHTMLã®ã³ãŒãã£ã³ã°ã«æéãããããè¿ éãªéçºãã§ããNode-REDã®å©ç¹ãèããŠããŸããŸãã ãã®åé¡ã解決ããããã«ãããŒããžã§ãã¬ãŒã¿ã¯ã³ãŒãã£ã³ã°ãªãã§ç¬èªã®ããŒããèªåçæããããã±ãŒãžåããŸãã 以äžã®éããããŒããžã§ãã¬ãŒã¿ã«ã¯4ã€ã®å©çšã±ãŒã¹ããããŸãã
http requestããŒãã¯ãREST APIçµç±ã§ã¯ã©ãŠããµãŒãã¹ã«ç°¡åã«æ¥ç¶ã§ããŸãã ããããããŒã±ãã£ã³ã°ã®èгç¹ããèãããšãhttp requestããŒãã®ä»£æ¿ãšããŠãã¯ã©ãŠããµãŒãã¹åãã«å°çšã«ç¬èªã«éçºããããŒããå ¬éããããšã¯ãã¯ã©ãŠããµãŒãã¹ã®ãŠãŒã¶æ°ãå¢ããããã«å¹æçã§ãã ãªããªããã¯ã©ãŠããµãŒãã¹ãšã®æ¥ç¶æ¹æ³ã詳现ã«è§£èª¬ããããŒãããããã£ãããŒãæ å ±ãããã¥ã¡ã³ãããŠãŒã¶ããªãã£ã«è²¢ç®ããããã§ãã äžè¬çã«ãã¯ã©ãŠããµãŒãã¹ãããã€ãã¯ããŠãŒã¶ãSwagger UIã§REST APIããã¹ãã§ããæ§ãOpenAPIããã¥ã¡ã³ããå ¬éããŸãã ããŒããžã§ãã¬ãŒã¿ã¯ããã®OpenAPIããã¥ã¡ã³ãã䜿çšããŠãã¯ã©ãŠããµãŒãã¹ãžã®æ¥ç¶çšã®ããŒããçæããŸãã ãããã£ãŠãã¯ã©ãŠããµãŒãã¹ãããã€ãã¯ãããŒãéçºã³ã¹ããªãã§ç¬èªã®ããŒããå ¬éã§ããæ§ã«ãªããŸãã
Node-REDãŠãŒã¶ã¯ãfunctionããŒãã«JavaScriptã³ãŒããèšè¿°ããç°¡åãªåŠçãåäœãããŠããŸãã ãããã詊è¡é¯èª€ãç¹°ãè¿ãéçºãè¡ãããããŒãåŸã ã«æ¹åãããšã倧éã®JavaScriptã³ãŒããfunctionããŒãã«è¿œå ããŠããŸãããšããããŸãã ãã®æãfunctionããŒãã«äŸ¿å©ãªæ©èœãåãã£ãŠããå Žåãä»ã®Node-REDãŠãŒã¶ã«ãã®functionããŒããå ±æããåå©çšãããŠã»ãããšããããŒãºãããã£ãŠããŸãã ãªããªããããŒããåå©çšããããšã§ãä»ã®Node-REDãŠãŒã¶ã¯åãæ©èœãéçºããå¿ èŠãªãããããŒã®éçºã«éäžã§ããããã§ãã ããŒããžã§ãã¬ãŒã¿ã¯ããã®æ§ãªããŒãºãæºããããã«ãæ¢åã®functionããŒãããç¬èªã®ããŒãã®éçºããäœæ¥ãå©ããŸãã
ä»ã®Node-REDãŠãŒã¶ãšãããŒãå ±æããã«ã¯ããµããããŒã®åäœã§è¡ãã®ãæé©ã§ãã å°æ¥ãããŒããžã§ãã¬ãŒã¿ã¯ããµããããŒããç¬èªã®ããŒããçæããæ©èœããµããŒãããŸãã Node-REDãŠãŒã¶ã¯ããµããããŒãç¬èªã®ããŒããšããŠã«ãã»ã«åã§ããæ§ã«ãªããŸãã äŸãã°ãèªèšŒããããæã€templateããŒããšURLãæã€http requestããŒãã¯ãå€ãã®Node-REDãŠãŒã¶ãã¯ã©ãŠããµãŒãã¹ã«æ¥ç¶ããããã«äœ¿çšããå žåçãªãã¢ã§ãã ããŒããžã§ãã¬ãŒã¿ã¯ããã®æ§ãªãããŒãå«ããµããããŒããç¬èªã®ããŒããçæã§ããŸãã ãããŠãNode-REDãŠãŒã¶ã¯ããããŒã©ã€ãã©ãªãä»ããŠãçæããããŒããä»ã®Node-REDãŠãŒã¶ãšå®¹æã«å ±æã§ããŸãã
IoTã¢ããªã±ãŒã·ã§ã³ã®éçºè ã¯ãæ¥ç¶ããããã€ã¹ãã€ãã£ã䟡å€ã®åµåºã«æ³šåãããã®ã§ããããã®å®è£ ã®è©³çŽ°ã«æéããããããããŸããã å®è£ ã®è©³çŽ°ãæœè±¡åããããã«ãW3C Web of Things (WoT)ã¯IoTããã€ã¹ããã€ã€ã³ã¿ãã§ãŒã¹ãæœè±¡åããããã®æ çµã¿ãæäŸããŠããŸãã WoTã§ã¯ããã€ã¹ã®ã€ã³ã¿ãã§ãŒã¹ã¯Thing DescriptionãšããŠèšè¿°ãããããŒããžã§ãã¬ãŒã¿ã¯ãã®Thing Descriptionããç¬èªããŒããçæã§ããŸãã ããŒããžã§ãã¬ãŒã¿ã䜿ãããšã§ãã¢ããªã±ãŒã·ã§ã³ã®éçºè ã¯Node-REDäžã®ããŒããããã€ã¹ã®ã¢ãã¿ãŒãšããŠäœ¿ãããšãã§ããŸãã
ããŒããžã§ãã¬ãŒã¿ãããŒã«ã«ç°å¢ã«ã€ã³ã¹ããŒã«ããã«ã¯ãã³ãã³ãããã³ãã(Windows)åã¯ã¿ãŒããã«(macOS/Linux)ã§æ¬¡ã®ãnpm installãã³ãã³ããå ¥åããŸãã ã³ãã³ãå®è¡ã«ã¯rootæš©éãå¿ èŠãªãããmacOSåã¯Linuxç°å¢ã§ã¯ "npm install"ã³ãã³ãã®åã« "sudo"ãå¿ èŠã§ãã
npm install -g node-red-nodegen
ããŒããžã§ãã¬ãŒã¿ã®çŸåšã®ããŒãžã§ã³ã¯ãfunctionããŒããOpenAPIããã¥ã¡ã³ããšWoT Thing DescriptionããœãŒã¹ãã¡ã€ã«ãšããŠãµããŒãããŠããŸãã ããŒããžã§ãã¬ãŒã¿ã®ã³ãã³ãã§ããnode-red-nodegenã¯ã以äžã®æ§ã«ã³ãã³ãã®åŒæ°ã§æå®ãããã¡ã€ã«ãããŒãã«å€æããŸãã
node-red-nodegen <source file> -> ã³ãã³ãããŒã«ã¯ããœãŒã¹ãã¡ã€ã«ããããŒããåºåããŸã
以éã®ããã¥ã¡ã³ãã§ã¯ã2çš®é¡ã®ãœãŒã¹ãã¡ã€ã«ããããŒããçæããæ¹æ³ã®è©³çްã«ã€ããŠèª¬æããŸãã
- OpenAPIããã¥ã¡ã³ãããããŒããçæããæ¹æ³
- functionããŒãããããŒããçæããæ¹æ³
- Thing DescriptionããããŒããçæããæ¹æ³
ããŒããžã§ãã¬ãŒã¿ã«ãã£ãŠèªåçæããããŒãããã±ãŒãžã®å žåçãªãã£ã¬ã¯ããªæ§é ã¯ä»¥äžã®éãã§ãã Node-REDãŠãŒã¶ã¯ãèªåçæããããŒããããŒã«ã«Node-REDç°å¢ã«ã€ã³ã¹ããŒã«ãããã远å éçºãªããããŒã©ã€ãã©ãªã«å ¬éãããã§ããŸãã
- node.js <- ããŒãåŠççšã®JavaScriptãã¡ã€ã«
- node.html <- ããŒãããããã£UIã®HTMLãã¡ã€ã«
- icons
|-icon.png <- ããŒãã®ã¢ã€ã³ã³ãã¡ã€ã«
- package.json <- ããŒãããã±ãŒãžæ
å ±
- README.md <- ããŒãããã±ãŒãžã®èª¬æãã¡ã€ã«
- LICENSE <- ããŒãã®ã©ã€ã»ã³ã¹æ
å ±
- test
|-node_spec.js <- ããŒãã®ãã¹ãã±ãŒã¹
- locales
|-en-US
|-node.json <- è±èªã®ã¡ãã»ãŒãžã«ã¿ãã°
|-ja
|-node.json <- æ¥æ¬èªã®ã¡ãã»ãŒãžã«ã¿ãã°
|-zh-CN
|-node.json <- äžåœèªã®ã¡ãã»ãŒãžã«ã¿ãã°
|-de-DE
|-node.json <- ãã€ãèªã®ã¡ãã»ãŒãžã«ã¿ãã°
node-red-nodegenã³ãã³ãã®æåã®åŒæ°ãšããŠãOpenAPIããã¥ã¡ã³ãã®URLåã¯ãã¡ã€ã«ãã¹ãæå®ã§ããŸãã
(1) node-red-nodegenã³ãã³ãã䜿çšããŠããŒããçæ
node-red-nodegen http://petstore.swagger.io/v2/swagger.json
Node-REDãŠãŒã¶ã¯éåžžã以äžã®æé ã§çæããããŒããNode-REDãããŒãšãã£ã¿ã®ãã¬ããã«ã€ã³ããŒãããŸãã
(2) çæããããŒãã®ãã£ã¬ã¯ããªã«ãã£ã¬ã¯ããªã倿Ž
cd node-red-contrib-swagger-petstore
(3) ã·ã³ããªãã¯ãªã³ã¯ãæºå
sudo npm link
(4) ã«ã¬ã³ããã£ã¬ã¯ããªãNode-REDã®ããŒã ãã£ã¬ã¯ããªã«å€æŽïŒéåžžãNode-REDã®ããŒã ãã£ã¬ã¯ããªã¯ãããŒã ãã£ã¬ã¯ããªã®äžã®".node-red"ã§ãïŒ
cd ~/.node-red
(5) ã·ã³ããªãã¯ãªã³ã¯ãäœæ
npm link node-red-contrib-swagger-petstore
(6) Node-REDãèµ·å
node-red
(7) Node-REDãããŒãšãã£ã¿ã«ã¢ã¯ã»ã¹ (http://localhost:1880)
-> çæãããããŒããNode-REDãããŒãšãã£ã¿ã®ãã¬ããã«è¡šç€ºãããŸãã
(8) çæãããããŒããã¯ãŒã¯ã¹ããŒã¹ã«ãã©ãã°ã¢ã³ããããã
(9) ããŒãããããã£èšå®ã§ã¡ãœãããéžæ
(OpenAPIããã¥ã¡ã³ãã«ãã¹ãåãå«ãŸããŠããªãããèªèšŒèšå®ãããå ŽåãããŒãããããã£èšå®ã«ãŠãã¹ãåãšèªèšŒèšå®ãèšå®ããŸã)
(10) Node-REDãããŒãšãã£ã¿ã§ãããŒãäœæ
-> injectããŒããçæãããããŒããdebugããŒããããªããããŒããæåã®ã¹ãããã«é©ããŠããŸãã(çæãããããŒããPOSTã¡ãœããã䜿çšããå Žåã¯ãinjectããŒãã®msg.payloadã«JSONããŒã¿ãèšå®ããå¿ èŠããããŸã)
(11) ãããŒãå®è¡
-> ãã®äŸã§ã¯ãinjectããŒãã®ãã¿ã³ãã¯ãªãã¯ãããšãåä¿¡ããããŒã¿ããããã°ã¿ãã«è¡šç€ºããŸãã
çæããããŒããã«ã¹ã¿ãã€ãºããå Žåã¯ãæ¬¡ã®æé ãã³ãã³ãã©ã€ã³ãªãã·ã§ã³ã圹ç«ã¡ãŸãã
ããŒããžã§ãã¬ãŒã¿ã¯ãã¢ãžã¥ãŒã«åã®ããã©ã«ãã®ãã¬ãã£ãã¯ã¹ãšã㊠"node-red-contrib-"ã䜿çšããŸãã ãããã£ãŠãããŒãåã "swagger-petstore"ã®å Žåãã¢ãžã¥ãŒã«å㯠"node-red-contrib-swagger-petstore"ãšãªããŸãã ããã©ã«ãã®ã¢ãžã¥ãŒã«åã倿Žãããå Žåã¯ã--moduleåã¯--prefixãªãã·ã§ã³ã䜿çšããŠã¢ãžã¥ãŒã«åãæå®ã§ããŸãã
node-red-nodegen http://petstore.swagger.io/v2/swagger.json --module node-red-node-swagger-petstore
node-red-nodegen http://petstore.swagger.io/v2/swagger.json --prefix node-red-node
OpenAPIããã¥ã¡ã³ãããçæããããŒãã®å ŽåãOpenAPIããã¥ã¡ã³ãã® "info.title"å€ãçæããŒãã®ååãšããŠäœ¿çšããŸãã ããŒããžã§ãã¬ãŒã¿ã¯ãnpmã¢ãžã¥ãŒã«ãšNode-REDããŒãã§å©çšã§ããé©åãªååã倿ããããã«ã倧æåãšã¹ããŒã¹ããã€ãã³ã«çœ®ãæããŸãã
{
"swagger": "2.0",
"info": {
"description": "This is a sample server Petstore server.",
"version": "1.0.0",
"title": "Swagger Petstore", <- ããŒããžã§ãã¬ãŒã¿ã¯ããã®å€ããswagger-petstoreãã«å€æããããŒãåãšããŠäœ¿çšããŸãã
"license": {
"name": "Apache 2.0",
"url": "http://www.apache.org/licenses/LICENSE-2.0.html"
}
},
"host": "petstore.swagger.io",
"basePath": "/v2",
"schemes": [
"https"
],
...
}
ããã©ã«ãåã倿Žããå Žåã¯ã--nameãªãã·ã§ã³ã䜿çšããŠããŒãåãèšå®ã§ããŸãã ç¹ã«ã"info.title"ã®å€ã«ã¢ã«ãã¡ããããšæ°åã®ä»£ããã«2ãã€ãæåãå«ãå ŽåãããŒããžã§ãã¬ãŒã¿ãããŒããæ£ããçæã§ããªãããã--nameãªãã·ã§ã³ã䜿çšããŠããŒãåãæå®ããŸãã
node-red-nodegen http://petstore.swagger.io/v2/swagger.json --name new-node-name
ããã©ã«ãã§ã¯ãããŒããžã§ãã¬ãŒã¿ã¯ã¢ãžã¥ãŒã«ã®ããŒãžã§ã³çªå·ãšã㊠"info.version"å€ã䜿çšããŸãã
{
"swagger": "2.0",
"info": {
"description": "This is a sample server Petstore server.",
"version": "1.0.0", <- ããŒããžã§ãã¬ãŒã¿ã¯ãã®ããŒãžã§ã³çªå·ãã¢ãžã¥ãŒã«ããŒãžã§ã³çªå·ãšããŠäœ¿çšããŸãã
"title": "Swagger Petstore",
"license": {
"name": "Apache 2.0",
"url": "http://www.apache.org/licenses/LICENSE-2.0.html"
}
},
"host": "petstore.swagger.io",
"basePath": "/v2",
"schemes": [
"https"
],
...
}
OpenAPIããã¥ã¡ã³ãã®ããŒãžã§ã³çªå·ãã€ã³ã¯ãªã¡ã³ãããã«ã¢ãžã¥ãŒã«ã®ããŒãžã§ã³çªå·ãæŽæ°ããå Žåã¯ã--versionãªãã·ã§ã³ãæå®ããŸãã ç¹ã«ã"npm publish"ã³ãã³ãã䜿çšããŠã以åå ¬éããã¢ãžã¥ãŒã«ãšåãããŒãžã§ã³çªå·ãæã€ã¢ãžã¥ãŒã«ãå ¬éãããšãç«¶åãšã©ãŒãçºçããŸãã ãã®å Žåãã¢ãžã¥ãŒã«ã®ããŒãžã§ã³çªå·ãæŽæ°ããã«ã¯ã--versionãªãã·ã§ã³ãæå®ããŸãã
node-red-nodegen http://petstore.swagger.io/v2/swagger.json --version 0.0.2
--keywordsã¯ãã¢ãžã¥ãŒã«ã®ããŒã¯ãŒãã®ããã«çšãã䟿å©ãªãªãã·ã§ã³ã§ãã ãããŒã©ã€ãã©ãªã®Webãµã€ãã§ã蚪åè ã¯ãã®ããŒã¯ãŒãã䜿çšããŠã¢ãžã¥ãŒã«ãæ€çŽ¢ããŸãã äŸãã°ã "petstore"ãããŒã¯ãŒããšããŠäœ¿çšããå Žåã¯ã--keywordsãªãã·ã§ã³ã䜿çšããŠåèªãæå®ã§ããŸãã ããã©ã«ãã§ã¯ãããŒããžã§ãã¬ãŒã¿ã¯ "node-red-nodegen"ãããŒã¯ãŒããšããŠäœ¿çšããŸãã
node-red-nodegen http://petstore.swagger.io/v2/swagger.json --keywords petstore
2ã€ä»¥äžã®ããŒã¯ãŒãã远å ããã«ã¯ãã³ã³ãåºåãã®ããŒã¯ãŒãã䜿çšããããšãã§ããŸãã
node-red-nodegen http://petstore.swagger.io/v2/swagger.json --keywords petstore,petshop
çæããããŒããå ¬éããåã«"--keywords node-red"ãæå®ãããšãããŒãã¯ãããŒã©ã€ãã©ãªã«ç»é²ã§ããNode-REDãããŒãšãã£ã¿ã§ããŒããã€ã³ã¹ããŒã«ã§ããŸãã
node-red-nodegen http://petstore.swagger.io/v2/swagger.json --keywords petstore,petshop,node-red
Node-REDãããŒãšãã£ã¿ã®ãã¬ããã§ã¯ãçæããããŒãã¯ããã©ã«ããšããŠæ©èœã«ããŽãªã«å ¥ããŸãã ã«ããŽãªã倿Žããããã«ããŽãªåã«è£œååã䜿çšããããããå Žåã¯ã--categoryãªãã·ã§ã³ãçšããŸãã äŸãã°ã次ã®ã³ãã³ããåºåããããŒãã¯ãNode-REDãããŒãšãã£ã¿ã®ãåæãã«ããŽãªã«å ¥ããŸãã
node-red-nodegen http://petstore.swagger.io/v2/swagger.json --category analysis
ããŒããžã§ãã¬ãŒã¿ã®ã³ãã³ãã¯ãçæãããããŒãã®ã¢ã€ã³ã³ãã¡ã€ã«ãæå®ããããã®--iconãªãã·ã§ã³ããµããŒãããŠããŸãã ãªãã·ã§ã³ã«ã¯PNGãã¡ã€ã«ãã¹ããŸãã¯ã¹ããã¯ã¢ã€ã³ã³ã®ãã¡ã€ã«åã䜿çšã§ããŸããã¢ã€ã³ã³ã¯éæãªèæ¯äžã«çœè²ã§è¡šç€ºããPNGãã¡ã€ã«ã§ããå¿ èŠããããŸãã
node-red-nodegen http://petstore.swagger.io/v2/swagger.json --icon <PNGãã¡ã€ã«ããŸãã¯ã¹ããã¯ã¢ã€ã³ã³>
ããŒããžã§ãã¬ãŒã¿ã¯ããã©ã«ãã§ããŒããã³ãã¬ãŒãã§å®çŸ©ãããããŒãã®è²ã䜿çšããŸãã倿Žããå¿ èŠãããå Žåã¯ãã³ãã³ãã©ã€ã³ã®--colorãªãã·ã§ã³ã䜿çšã§ããŸãããªãã·ã§ã³ã«ã¯ãããŒãã®è²ã衚ã16鲿°("RRGGBB"圢åŒ)ã®æååãæå®ã§ããŸãã
node-red-nodegen http://petstore.swagger.io/v2/swagger.json --color FFFFFF
ããŒããžã§ãã¬ãŒã¿ã¯ãOpenAPIããã¥ã¡ã³ãã®æ¬¡ã®å€ã䜿çšããŠãæ å ±ã¿ãã«ããŒãã®æ å ±ãèªåçã«çæããŸãã
- info.description : ããŒãã®èª¬æ
- paths.[path].[http method].summary : ã¡ãœããã®èª¬æ
- paths.[path].[http method].operationId : ã¡ãœããå
{
"swagger": "2.0",
"info": {
"description": "This is a sample server Petstore server.", <- ããŒããžã§ãã¬ãŒã¿ã¯ããã®å€ãããŒãã®èª¬æãšããŠäœ¿çš
"version": "1.0.0",
"title": "Swagger Petstore",
"license": {
"name": "Apache 2.0",
"url": "http://www.apache.org/licenses/LICENSE-2.0.html"
}
},
"host": "petstore.swagger.io",
"basePath": "/v2",
"schemes": [
"https"
],
...
"paths": {
"/pet": {
"post": {
"tags": [
"pet"
],
"summary": "Add a new pet to the store", <- ããŒããžã§ãã¬ãŒã¿ã¯ããã®å€ãã¡ãœããã®èª¬æãšããŠäœ¿çš
"description": "",
"operationId": "addPet", <- ããŒããžã§ãã¬ãŒã¿ã¯ãã®å€ãã¡ãœããåãšããŠäœ¿çšããŸãã
...
}
æ å ±ã¿ãã®ããŒãæ å ±ã倿Žãããå Žåã¯ãæåã§ããŒãã®HTMLãã¡ã€ã«ã®æåŸã®ã»ã¯ã·ã§ã³ãç·šéããŸãã
vi node-red-contrib-swagger-petstore/node.html
<script type="text/x-red" data-help-name="swagger-petstore">
<p>This is a sample server Petstore server.</p> <- ããŒãã®èª¬æã倿Ž
<h2>Methods</h2>
<h3>addPet</h3> <- ã¡ãœããåã倿Ž
<h4>Add a new pet to the store</h4> <- ã¡ãœããã®èª¬æã倿Ž
...
<h3>deleteUser</h3>
<h4>This can only be done by the logged in user.</h4>
</script>
ããŒãã®è©³çްã説æã¯ãREADME.mdãšãããã¡ã€ã«ã«æžããŸãã ãããŒã©ã€ãã©ãªã«ããŒããå ¬éãããšããããŒã©ã€ãã©ãªã®Webãµã€ãã¯ãããŒãã®ããŒãžã§æ¬ãã¡ã€ã«ã衚瀺ããŸãã ããŒããžã§ãã¬ãŒã¿ã¯README.mdã®ãã³ãã¬ãŒããåºåããã®ã§ããã¡ã€ã«ã倿Žããã ãã§ãã
vi node-red-contrib-swagger-petstore/README.md
node-red-contrib-swagger-petstore
=====================
Node-RED node for swagger-petstore
This is a sample server Petstore server.
Install
-------
Run the following command in your Node-RED user directory - typically `~/.node-red`
npm install node-red-contrib-swagger-petstore
ãã¹ãã±ãŒã¹ã¯ãæ¬çªç°å¢ã§å©çšããããŒãã®å質ãç¶æããããã«æãéèŠã§ãã ããŒããžã§ãã¬ãŒã¿ã¯ãçæãããã£ã¬ã¯ããªã®äžã«ãããã¡ã€ã« "test/node_spec.js"ã«ãã¹ãã±ãŒã¹ã®ãã³ãã¬ãŒããã¡ã€ã«ãåºåããŸãã ãã¹ãã±ãŒã¹ãã¡ã€ã«ã§ã¯ã以äžã®ïŒ1ïŒãïŒ2ïŒãïŒ3ïŒã®3è¡ã倿ŽããŸãã ãããOpenAPIããã¥ã¡ã³ãã®"info"å€ã«ãã¹ãåãå«ãŸãªãå Žåã¯ãåãã¹ãã±ãŒã¹ã«æåã§ãã¹ãåãïŒ4ïŒã«èšè¿°ããŸãã
vi node-red-contrib-swagger-petstore/test/node_spec.js
it('should handle addPet()', function (done) {
var flow = [
{ id: 'n1', type: 'swagger-petstore', name: 'swagger-petstore',
method: 'addPet',
addPet_body: '<node property>', // (1) ããŒãã®ããããã£ãå®çŸ©
wires: [['n3']]
},
{ id: 'n3', type: 'helper' }
];
helper.load(node, flow, function () {
var n3 = helper.getNode('n3');
var n1 = helper.getNode('n1');
n3.on('input', function (msg) {
try {
msg.should.have.property('payload', { "id": 4513 }); // (3) åºåã¡ãã»ãŒãžãå®çŸ©
done();
} catch (e) {
done(e);
}
});
n1.receive({ payload: { "id": 4513 } }); // (2) å
¥åã¡ãã»ãŒãžãå®çŸ©
});
});
ãã®äŸã§ã¯ãçæããããŒãã¯ãããã¹ãã¢ã®REST APIã«ããŒã¿"{ "id": 4513 }"ãéä¿¡ããŸãã ãããŠãREST APIã¯åãããŒã¿"{ "id": 4513 }"ãæ»ããŸãã ãããã£ãŠãå ¥åã¡ãã»ãŒãžãšåºåã¡ãã»ãŒãžã¯åãã§ãã ãã¹ãã±ãŒã¹ãå®è¡ãããå Žåã¯ãããŒããçæãããã£ã¬ã¯ããªã®äžã§"npm test"ã³ãã³ããå®è¡ããŸãã
cd node-red-contrib-swagger-petstore
npm install
npm test
ããã©ã«ãã§ã¯ãããŒããžã§ãã¬ãŒã¿ã¯è±èªãæ¥æ¬èªãäžåœèªããã€ãèªã®ãã³ãã¬ãŒããã¡ã€ã«ãåºåããŸãã ããŒãããããã£ã®å€èšèªå¯Ÿå¿ããããå Žåã¯ããã©ã¡ãŒã¿ã®èšèªã¡ãã»ãŒãžããããã®ãã¡ã€ã«ã«è¿œå ããŸãã
vi node-red-contrib-swagger-petstore/locales/ja/node.json
{
"SwaggerPetstore": {
"label": {
"service": "ãµãŒãã¹",
"method": "ã¡ãœãã",
"host": "ãã¹ã",
"header": "ããã",
"value": "å€",
"isQuery": "ã¯ãšãª"
},
"status": {
"requesting": "èŠæ±äž"
},
"parameters": {
"addPet": "addPet",
"body": "body",
"updatePet": "updatePet",
"findPetsByStatus": "findPetsByStatus",
...
"optionalParameters": "ä»»æé
ç®"
}
}
}
ããŒããäžéšã®èšèªããµããŒãããªãå Žåã¯ãèšèªãã£ã¬ã¯ããªãåé€ããŸãã ïŒäŸãã°ãäžåœèªããµããŒãããããªãå Žåã¯ããzh-CNããã£ã¬ã¯ããªããšåé€ããŠãã ããïŒ
èšå®ããŒãã䜿çšããããšã§ãçæãããããŒããã¢ã¯ã»ã¹ããREST APIã®ãšã³ããã€ã³ãããããŒã®äœæäžã«å€æŽã§ããããã«ãªããŸãã
èšå®ããŒããæå¹ã«ããã«ã¯ãããŒããçæããåã«OpenAPIããã¥ã¡ã³ãããhost
ãbasePath
ãschemes
ã®åããããã£ãåé€ããå¿
èŠããããŸãã
{
"swagger": "2.0",
"info": {
"description": "This is a sample server Petstore server.",
"version": "1.0.0",
"title": "Swagger Petstore",
"license": {
"name": "Apache 2.0",
"url": "http://www.apache.org/licenses/LICENSE-2.0.html"
}
},
"host": "petstore.swagger.io", <- ãã®è¡ãåé€
"basePath": "/v2", <- ãã®è¡ãåé€
"schemes": [ <- ãã®è¡ãåé€
"https" <- ãã®è¡ãåé€
], <- ãã®è¡ãåé€
...
}
ãã®èšå®ããŒãã¯ãã¯ã©ãŠããµãŒãã¹äžã®ããŒã¿ã»ã³ã¿ãŒã®ãªãŒãžã§ã³æ¯ã«ç°ãªãURLãæã€REST APIã«é©ããŠããŸãã ãã®ä»ãã¯ã©ãŠããµãŒãã¹ã®ãšã³ããã€ã³ããããã¯ã©ãŠããµãŒãã¹ãšåãæ©èœãæã€ããŒã«ã«ã®ãšã³ããã€ã³ããžåãæ¿ããããšãã§ããããããšããžã³ã³ãã¥ãŒãã£ã³ã°ã®ãŠãŒã¹ã±ãŒã¹ã§ã圹ç«ã¡ãŸãã
OpenAPI Specification 3.0ã䜿çšããŠããŒããçæããå Žåã¯ãapi-spec-converterã³ãã³ãã䜿çšããŠããŒã¿åœ¢åŒã3.0ãã2.0ã«å€æããå¿ èŠããããŸãã
(1) api-spec-converterã³ãã³ããã€ã³ã¹ããŒã«
npm install -g api-spec-converter
(2) ããŒã¿åœ¢åŒã倿
api-spec-converter -f openapi_3 -t swagger_2 https://raw.githubusercontent.com/OAI/OpenAPI-Specification/master/examples/v3.0/uspto.yaml > swagger.json
(3) ããŒããçæ
node-red-nodegen swagger.json
functionããŒãã«JavaScriptã³ãŒããèšè¿°ããåŸãfunctionããŒãã® "ã©ã€ãã©ãªãžä¿å..."ã¡ãã¥ãŒã䜿çšããŠãJavaScriptã³ãŒããjsãã¡ã€ã«ãšããŠæžãåºããŸãã ããŒããžã§ãã¬ãŒã¿ã¯functionããŒãåãçæããŒãã®ååãšããŠäœ¿çšãããããfunctionããŒãããšã¯ã¹ããŒãããåã«ããŒãåãå ¥åããæ¹ãããã§ãããã Node-REDã¯ãjsãã¡ã€ã«ã"/.node-red/lib/functions/"ãã£ã¬ã¯ããªã«ä¿åããŸãã ãããã£ãŠããã®ãã£ã¬ã¯ããªãšãã¡ã€ã«ãã¹ãã³ãã³ãã©ã€ã³ã®åŒæ°ãšããŠæå®ããŸãã
(1) functionããŒããjsãã¡ã€ã«ãšããŠãšã¯ã¹ããŒã
(2) node-red-nodegenã³ãã³ãã䜿çšããŠããŒããçæ
node-red-nodegen ~/.node-red/lib/functions/lower-case.js
Node-REDãŠãŒã¶ã¯éåžžã以äžã®æé ã§çæããããŒããNode-REDãããŒãšãã£ã¿ã®ãã¬ããã«ã€ã³ããŒãããŸãã
(3) çæããããŒãã®ãã£ã¬ã¯ããªã«ãã£ã¬ã¯ããªã倿Ž
cd node-red-contrib-lower-case
(4) ã·ã³ããªãã¯ãªã³ã¯ãæºå
sudo npm link
(5) ã«ã¬ã³ããã£ã¬ã¯ããªãNode-REDã®ããŒã ãã£ã¬ã¯ããªã«å€æŽããŸãïŒéåžžãNode-REDã®ããŒã ãã£ã¬ã¯ããªã¯ãããŒã ãã£ã¬ã¯ããªã®äžã®".node-red"ã§ãïŒ
cd ~/.node-red
(6) ã·ã³ããªãã¯ãªã³ã¯ãäœæ
npm link node-red-contrib-lower-case
(7) Node-REDãèµ·å
node-red
(8) Node-REDãããŒãšãã£ã¿ã«ã¢ã¯ã»ã¹ (http://localhost:1880)
-> çæãããããŒããNode-REDãããŒãšãã£ã¿ã®ãã¬ããã«è¡šç€ºãããŸãã
(9) çæãããããŒããã¯ãŒã¯ã¹ããŒã¹ã«ãã©ãã°ã¢ã³ããããã
(10) Node-REDãããŒãšãã£ã¿ã§ãããŒãäœæ
-> injectããŒããçæãããããŒãããã³debugããŒããããªããããŒããæåã®ã¹ãããã«é©ããŠããŸãã
(11) ãããŒãå®è¡
-> ãã®äŸã§ã¯ãinjectããŒãã®ãã¿ã³ãã¯ãªãã¯ãããšãåä¿¡ããããŒã¿ããããã°ã¿ãã«è¡šç€ºããŸãã
çæããããŒããã«ã¹ã¿ãã€ãºããå Žåã¯ãæ¬¡ã®æé ãã³ãã³ãã©ã€ã³ãªãã·ã§ã³ã圹ç«ã¡ãŸãã
ããŒããžã§ãã¬ãŒã¿ã¯ãã¢ãžã¥ãŒã«åã®ããã©ã«ãã®ãã¬ãã£ãã¯ã¹ãšã㊠"node-red-contrib-"ã䜿çšããŸãã ãããã£ãŠãããŒãåã "lower-case"ã®å Žåãã¢ãžã¥ãŒã«å㯠"node-red-contrib-lower-case"ã«ãªããŸãã ããã©ã«ãã®ã¢ãžã¥ãŒã«åã倿Žãããå Žåã¯ã--moduleåã¯--prefixãªãã·ã§ã³ã䜿çšããŠã¢ãžã¥ãŒã«åãæå®ã§ããŸãã
node-red-nodegen ~/.node-red/lib/functions/lower-case.js --module node-red-node-lower-case
node-red-nodegen ~/.node-red/lib/functions/lower-case.js --prefix node-red-node
functionããŒãã®å ŽåãfunctionããŒãå ã®ããŒãåããçæãããããŒãã®ããŒãåãšããŠäœ¿çšããŸãã ããããã©ã«ãã®ããŒãåã倿Žãããå Žåã¯ã--nameãªãã·ã§ã³ã䜿çšããŠããŒãåãèšå®ããŸãã
node-red-nodegen ~/.node-red/lib/functions/lower-case.js --name new-node-name
ããã©ã«ãã§ã¯ãã¢ãžã¥ãŒã«ã®ããŒãžã§ã³çªå·ã¯åžžã«"0.0.1"ã§ãã ã¢ãžã¥ãŒã«ã®ããŒãžã§ã³çªå·ãæŽæ°ãããšãã¯ã--versionãªãã·ã§ã³ãæå®ããŸãã ç¹ã«ã"npm publish"ã³ãã³ãã䜿çšããŠã以åå ¬éããã¢ãžã¥ãŒã«ãšåãããŒãžã§ã³çªå·ãæã€ã¢ãžã¥ãŒã«ãå ¬éãããšãç«¶åãšã©ãŒãçºçããŸãã ãã®å Žåãã¢ãžã¥ãŒã«ã®ããŒãžã§ã³çªå·ãæŽæ°ããã«ã¯ã--versionãªãã·ã§ã³ãæå®ããŸãã
node-red-nodegen ~/.node-red/lib/functions/lower-case.js --version 0.0.2
--keywordsã¯ããããŒã©ã€ãã©ãªäžã®ã¢ãžã¥ãŒã«ã®ããŒã¯ãŒããæå®ã§ãã䟿å©ãªãªãã·ã§ã³ã§ãã ãããŒã©ã€ãã©ãªã®Webãµã€ãã§ã¯ã蚪åè ã¯ãã®ããŒã¯ãŒãã䜿çšããŠã¢ãžã¥ãŒã«ãæ€çŽ¢ããŸãã äŸãã°ãããŒã¯ãŒããšããŠ"lower-case"ã䜿çšããå Žåã¯ã--keywordsãªãã·ã§ã³ã䜿çšããŠãã®åèªãæå®ã§ããŸãã ããã©ã«ãã§ã¯ãããŒããžã§ãã¬ãŒã¿ã¯"node-red-nodegen"ãããŒã¯ãŒããšããŠäœ¿çšããŸãã
node-red-nodegen ~/.node-red/lib/functions/lower-case.js --keywords lower-case
2ã€ä»¥äžã®ããŒã¯ãŒãã远å ããã«ã¯ãã³ã³ãåºåãã®ããŒã¯ãŒãã䜿çšããããšãã§ããŸãã
node-red-nodegen ~/.node-red/lib/functions/lower-case.js --keywords lower-case,function
çæããããŒããå ¬éããåã« "--keywords node-red"ãæå®ãããšãããŒãã¯ãããŒã©ã€ãã©ãªã«ç»é²ã§ããNode-REDãããŒãšãã£ã¿ã§ããŒããã€ã³ã¹ããŒã«ã§ããŸãã
node-red-nodegen ~/.node-red/lib/functions/lower-case.js --keywords lower-case,function,node-red
Node-REDãããŒãšãã£ã¿ã®ãã¬ããã§ã¯ãçæããããŒãã¯ããã©ã«ããšããŠæ©èœã«ããŽãªã«å ¥ããŸãã ã«ããŽãªã倿Žããããã«ããŽãªåã«è£œååã䜿çšããããããå Žåã¯ã--categoryãªãã·ã§ã³ãçšããŸãã äŸãã°ã次ã®ã³ãã³ããåºåããããŒãã¯ãNode-REDãããŒãšãã£ã¿ã®ãåæãã«ããŽãªã«å ¥ããŸãã
node-red-nodegen ~/.node-red/lib/functions/lower-case.js --category analysis
ããŒããžã§ãã¬ãŒã¿ã®ã³ãã³ãã¯ãçæãããããŒãã®ã¢ã€ã³ã³ãã¡ã€ã«ãæå®ããããã®--iconãªãã·ã§ã³ããµããŒãããŠããŸãã ãªãã·ã§ã³ã«ã¯PNGãã¡ã€ã«ãã¹ããŸãã¯ã¹ããã¯ã¢ã€ã³ã³ã®ãã¡ã€ã«åã䜿çšã§ããŸããã¢ã€ã³ã³ã¯éæãªèæ¯äžã«çœè²ã§è¡šç€ºããPNGãã¡ã€ã«ã§ããå¿ èŠããããŸãã
node-red-nodegen ~/.node-red/lib/functions/lower-case.js --icon <PNGãã¡ã€ã«ããŸãã¯ã¹ããã¯ã¢ã€ã³ã³>
ããŒããžã§ãã¬ãŒã¿ã¯ããã©ã«ãã§ããŒããã³ãã¬ãŒãã§å®çŸ©ãããããŒãã®è²ã䜿çšããŸãã倿Žããå¿ èŠãããå Žåã¯ãã³ãã³ãã©ã€ã³ã®--colorãªãã·ã§ã³ã䜿çšã§ããŸãããªãã·ã§ã³ã«ã¯ãããŒãã®è²ã衚ã16鲿°("RRGGBB"圢åŒ)ã®æååãæå®ã§ããŸãã
node-red-nodegen ~/.node-red/lib/functions/lower-case.js --color FFFFFF
ããŒããžã§ãã¬ãŒã¿ã¯ããŒãæ å ±ã®ãã³ãã¬ãŒããnode.htmlãã¡ã€ã«ã«åºåããŸãã ããŒããšãšãã«ãã³ãã¬ãŒãã倿ŽããŸãã ïŒå°æ¥ã®ããŒãžã§ã³ã®Node-REDãšããŒããžã§ãã¬ãŒã¿ã§ã¯ãããŒãéçºè ã¯ããŒãèšè¿°ããããã£ã䜿çšããŠãããŒãæ å ±ãæå®ã§ããŸãïŒ
vi node-red-contrib-lower-case/node.html
<script type="text/x-red" data-help-name="lower-case">
<p>Summary of the node.</p>
<h3>Inputs</h3>
<dl class="message-properties">
<dt>payload<span class="property-type">object</span></dt>
<dd>Explanation of payload.</dd>
<dt class="optional">topic <span class="property-type">string</span></dt>
<dd>Explanation of topic.</dd>
</dl>
<h3>Outputs</h3>
<dl class="message-properties">
<dt>payload<span class="property-type">object</span></dt>
<dd>Explanation of payload.</dd>
<dt class="optional">topic<span class="property-type">string</span></dt>
<dd>Explanation of topic.</dd>
</dl>
<h3>Details</h3>
<p>Explanation of the details.</p>
<p><b>Note</b>: Note of the node.</p>
</script>
ãã³ãã¬ãŒãã«ã¯ãããŒãã®èª¬æãš3ã€ã®ã»ã¯ã·ã§ã³ã®ãµããªãŒããããŸãã Inputã»ã¯ã·ã§ã³ã«ã¯ãå ¥åããã¡ãã»ãŒãžã®æ å ±ãèšèŒããŸãã Outputã»ã¯ã·ã§ã³ã«ã¯ãåºåããã¡ãã»ãŒãžã®æ å ±ãèšèŒããŸãã Detailsã»ã¯ã·ã§ã³ã«ã¯ãçæããããŒãã®è¿œå æ å ±ãèšèŒããŸãã
ããŒãã®è©³çްã説æã¯ãREADME.mdãšãããã¡ã€ã«ã«æžããŸãã ãããŒã©ã€ãã©ãªã«ããŒããå ¬éãããšããããŒã©ã€ãã©ãªã®Webãµã€ãã¯ãããŒãã®ããŒãžã§æ¬ãã¡ã€ã«ã衚瀺ããŸãã ããŒããžã§ãã¬ãŒã¿ã¯README.mdã®ãã³ãã¬ãŒããåºåããã®ã§ããã¡ã€ã«ã倿Žããã ãã§ãã
vi node-red-contrib-lower-case/README.md
node-red-contrib-lower-case
=====================
Node-RED node for lower case
Install
-------
Run the following command in your Node-RED user directory - typically `~/.node-red`
npm install node-red-contrib-lower-case
ãã¹ãã±ãŒã¹ã¯ãæ¬çªç°å¢ã§äœ¿çšããããŒãã®å質ãç¶æããããã«æãéèŠã§ãã ããŒããžã§ãã¬ãŒã¿ã¯ãçæãããã£ã¬ã¯ããªã®äžã«ãããã¡ã€ã«"test/node_spec.js"ã«ãã¹ãã±ãŒã¹ã®ãã³ãã¬ãŒããã¡ã€ã«ãåºåããŸãã ãã¹ãã±ãŒã¹ãã¡ã€ã«ã§ã¯ãïŒ1ïŒãšïŒ2ïŒã®2è¡ãä¿®æ£ããŸãã
vi node-red-contrib-lower-case/test/node_spec.js
it('should have payload', function (done) {
var flow = [
{ id: "n1", type: "lower-case", name: "lower-case", wires: [["n2"]] },
{ id: "n2", type: "helper" }
];
helper.load(node, flow, function () {
var n2 = helper.getNode("n2");
var n1 = helper.getNode("n1");
n2.on("input", function (msg) {
msg.should.have.property('payload', 'abcd'); // (2) åºåã¡ãã»ãŒãžãå®çŸ©
done();
});
n1.receive({ payload: "AbCd" }); // (1) å
¥åã¡ãã»ãŒãžãå®çŸ©
});
});
ãã®äŸã§ã¯ãçæããããŒãã¯å€§æåãå°æåã«å€æããŸãã ãããã£ãŠãå ¥åã¡ãã»ãŒãžã¯ãAbCdãã§ãããåºåã¡ãã»ãŒãžã¯ãabcdãã§ãã ãã¹ãã±ãŒã¹ãå®è¡ãããå Žåã¯ãããŒããçæãããã£ã¬ã¯ããªã®äžã§"npm test"ã³ãã³ããå®è¡ããŸãã
cd node-red-contrib-lower-case
npm install
npm test
functionããŒãã«å€éšã¢ãžã¥ãŒã«ãããŒãããå ŽåãNode-REDãŠãŒã¶ãŒã¯éåžžãã¢ãžã¥ãŒã«ãsettings.jsãã¡ã€ã«ã® functionGlobalContext
ã»ã¯ã·ã§ã³ã«è¿œå ããŸãã
çŸåšã®ããŒããžã§ãã¬ãŒã¿ã¯ããã®èšå®ãçæãããããŒãã«ãšã¯ã¹ããŒãããæ©èœããµããŒãããŠããŸããã
ãããã£ãŠãçæãããããŒããä»ã®ããŒã-REDç°å¢ãšå
±æããåã«ãnode.jsãã¡ã€ã«ãšpackage.jsonãã¡ã€ã«ã倿Žããå¿
èŠããããŸãã
次ã®äŸã¯ãmomentã¢ãžã¥ãŒã«ã䜿çšããfunctionããŒãããããŒããçæããæé ã§ãã
(1) å€éšã¢ãžã¥ãŒã«ãsettings.jsãã¡ã€ã«ã«è¿œå ïŒè¡çªå·214ä»è¿ïŒ
vi ~/.node-red/settings.js
functionGlobalContext: {
// os:require('os'),
// jfive:require("johnny-five"),
// j5board:require("johnny-five").Board({repl:false})
moment: require('moment') <- å€éšã¢ãžã¥ãŒã«ã®å®çŸ©ã远å
},
(2) å€éšã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«
cd ~/.node-red/
npm install moment
cd
(3) Node-REDãèµ·å
node-red
(4) å€éšã¢ãžã¥ãŒã«ã䜿çšããJavaScriptã³ãŒããfunctionããŒãã«èšè¿°
é ç® | functionããŒãã®ããããã£å€ |
---|---|
åå | Format date |
ã³ãŒã | var moment = global.get('moment'); msg.payload = moment().format('MMMM Do YYYY, h:mm:ss a'); return msg; |
(5) functionããŒãããããã£UIã®"ã©ã€ãã©ãªãžä¿å"ã¡ãã¥ãŒããjsãã¡ã€ã«ãšããŠfunctionããŒããä¿å
(6) ããŒããçæ
node-red-nodegen ~/.node-red/lib/functions/Format-date.js
(7) jsãã¡ã€ã«ã«å®çŸ©ã远å ïŒè¡çªå·206ä»è¿ïŒ
vi node-red-contrib-format-date/node.js
}
sandbox.global.set("moment", require('moment')); <- vm.createContext()ã®åã«å®çŸ©ã远å
var context = vm.createContext(sandbox);
try {
this.script = vm.createScript(functionText, {
(8) package.jsonãã¡ã€ã«ã«äŸåé¢ä¿ã远å ïŒè¡çªå·17ä»è¿ïŒ
vi node-red-contrib-format-date/package.json
"keywords": [
"node-red-nodegen"
],
"dependencies": { <- äŸåé¢ä¿ã远å
"moment": "2.23.0" <- äŸåé¢ä¿ã远å
}, <- äŸåé¢ä¿ã远å
"devDependencies": {
"node-red": "0.18.7",
(9) ã·ã³ããªãã¯ãªã³ã¯ãæºå
sudo npm link
(10) ã·ã³ããªãã¯ãªã³ã¯ãäœæ
cd ~/.node-red/
npm link node-red-contrib-format-date
(11) Node-REDãåèµ·å
node-red
-> Node-REDãããŒãšãã£ã¿äžã§format-dateããŒãã䜿çšã§ããŸãã
node-red-nodegenã³ãã³ãã®æåã®åŒæ°ãšããŠãThing Description(TD)ã®URLåã¯ãã¡ã€ã«ãã¹ãæå®ã§ããŸããURLããŸãã¯æ¡åŒµåã".jsonld"ã§ãªããã¡ã€ã«ãæå®ããå Žåã¯ã--wottd
ãªãã·ã§ã³ãã€ããå¿
èŠããããŸãããŸããããURLæå®ã§TDãååŸããå Žåã«ã¯ã--lang
ãªãã·ã§ã³ãã€ããããšã§æå®ããèšèªã®TDãååŸããããšãã§ããŸãã
(1) node-red-nodegenã³ãã³ãã䜿çšããŠããŒããçæ
node-red-nodegen td.jsonld
Node-REDãŠãŒã¶ã¯éåžžã以äžã®æé ã§çæããããŒããNode-REDãããŒãšãã£ã¿ã®ãã¬ããã«ã€ã³ããŒãããŸãã
(2) ã«ã¬ã³ããã£ã¬ã¯ããªãNode-REDã®ããŒã ãã£ã¬ã¯ããªã«å€æŽïŒéåžžãNode-REDã®ããŒã ãã£ã¬ã¯ããªã¯ãããŒã ãã£ã¬ã¯ããªã®äžã®".node-red"ã§ãïŒ
cd ~/.node-red
(3) ã¢ãžã¥ãŒã«ãããŒã«ã«ã«ã€ã³ã¹ããŒã«
npm install <location of node module>
(4) Node-REDãèµ·å
node-red
(5) Node-REDãããŒãšãã£ã¿ã«ã¢ã¯ã»ã¹ (http://localhost:1880)
-> çæãããããŒããNode-REDãããŒãšãã£ã¿ã®ãã¬ããã«è¡šç€ºãããŸã(ã³ãã³ãã©ã€ã³ãªãã·ã§ã³ã§æå®ããŠãªããã°ã"Web of Things"ã«ããŽãªå ã«ããã¯ãã§ã)ã
(6) çæãããããŒããã¯ãŒã¯ã¹ããŒã¹ã«ãã©ãã°ã¢ã³ããããã
(7) ããŒããèšå®ãã
- Interaction: å©çšããçžäºäœçš
- Name: çžäºäœçšã®åå
- Access: ããããã£ã«ã¢ã¯ã»ã¹ããå Žåãèªã¿/æžã/ç£èŠã®ã©ã®ã¢ã¯ã»ã¹ãè¡ãã?
- Form: ã©ã®èªèšŒæ¹æ³ã»ãšã³ããã€ã³ãã䜿ãã?
- TokenãŸãã¯Username/Password: ãããšã³ããã€ã³ãã®ã¢ã¯ã»ã¹ã«èªèšŒãå¿ èŠã§ããã°ãå¿ èŠãªæ å ±ãã»ãããã
- Node name: ãããŒãšãã£ã¿ã§è¡šç€ºãããããŒãã®ååãæå®ãã
(8) Node-REDãããŒãšãã£ã¿ã§ãããŒãäœæ
- ããããã£ã®å©çšæ³:
- ããããã£ãèªãããã«ã¯ãä»»æã®ã¡ãã»ãŒãžãããŒãã«éããšããããããªã¬ãŒãšããŠããã€ã¹ã«åãåãããè¡ãããçµæãmsg.payloadã«å ¥ã£ãã¡ãã»ãŒãžãšããŠåºåãããŸãã
- ããããã£ã«æžã蟌ãããã«ã¯ãæžã蟌ãå 容ãmsg.payloadã«ãããã¡ãã»ãŒãžãããŒãã«éããŸãã
- ããããã£ãç£èŠããããã«èšå®ãããšãããŒãã¯å®æçã«ããããã£ã®å€ãmsg.payloadã«å ¥ããã¡ãã»ãŒãžãåºåããŸãã
- ã¢ã¯ã·ã§ã³ã®å©çšæ³:
- ã¢ã¯ã·ã§ã³ãèµ·åããããã«ã¯ãå¿ èŠãªåŒæ°ãmsg.payloadã«å ¥ããã¡ãã»ãŒãžãããŒãã«éããŸãã
- ã€ãã³ãã®å©çšæ³:
- ã€ãã³ããçºçãããšãããŒãã¯ã€ãã³ãå 容ãmsg.payloadã«å ¥ããã¡ãã»ãŒãžãåºåããŸãã
çæããããŒããã«ã¹ã¿ãã€ãºããå Žåã¯ãæ¬¡ã®æé ãã³ãã³ãã©ã€ã³ãªãã·ã§ã³ã圹ç«ã¡ãŸãã
ããŒããžã§ãã¬ãŒã¿ã¯ãã¢ãžã¥ãŒã«åã®ããã©ã«ãã®ãã¬ãã£ãã¯ã¹ãšã㊠"node-red-contrib-"ã䜿çšããŸãããŸãããŒãåã¯TDã®"name"ããããã£ããåãããŸãã
ããã©ã«ãã®ã¢ãžã¥ãŒã«åã倿Žãããå Žåã¯ã--module
åã¯--prefix
ãªãã·ã§ã³ã䜿çšããŠã¢ãžã¥ãŒã«åãæå®ã§ããŸãã
node-red-nodegen td.jsonld --module wotmodule
node-red-nodegen td.jsonld --prefix node-red-wot
Thing DescriptionããçæããããŒãã®å ŽåãThing Descriptionã®"name"ããããã£ãçæããŒãã®ååãšããŠäœ¿çšããŸãã ããŒããžã§ãã¬ãŒã¿ã¯ãnpmã¢ãžã¥ãŒã«ãšNode-REDããŒãã§å©çšã§ããé©åãªååã倿ããããã«ã倧æåãšã¹ããŒã¹ããã€ãã³ã«çœ®ãæããŸãã
ããã©ã«ãåã倿Žããå Žåã¯ã--name
ãªãã·ã§ã³ã䜿çšããŠããŒãåãèšå®ã§ããŸãã
ç¹ã«ã"name"ããããã£ã«ã¢ã«ãã¡ããããšæ°åã®ä»£ããã«2ãã€ãæåãå«ãå ŽåãããŒããžã§ãã¬ãŒã¿ãããŒããæ£ããçæã§ããªãããã--name
ãªãã·ã§ã³ã䜿çšããŠããŒãåãæå®ããŸãã
node-red-nodegen td.jsonld --name new-node-name
ããã©ã«ãã§ã¯ãããŒããžã§ãã¬ãŒã¿ã¯ã¢ãžã¥ãŒã«ã®ããŒãžã§ã³çªå·ãšã㊠"version"ããããã£ã䜿çšããŸãã
Thing Descriptionã®ããŒãžã§ã³çªå·ãã€ã³ã¯ãªã¡ã³ãããã«ã¢ãžã¥ãŒã«ã®ããŒãžã§ã³çªå·ãæŽæ°ããå Žåã¯ã--version
ãªãã·ã§ã³ãæå®ããŸãã
ç¹ã«ã"npm publish"ã³ãã³ãã䜿çšããŠã以åå
¬éããã¢ãžã¥ãŒã«ãšåãããŒãžã§ã³çªå·ãæã€ã¢ãžã¥ãŒã«ãå
¬éãããšãç«¶åãšã©ãŒãçºçããŸãã
ãã®å Žåãã¢ãžã¥ãŒã«ã®ããŒãžã§ã³çªå·ãæŽæ°ããã«ã¯ã--version
ãªãã·ã§ã³ãæå®ããŸãã
node-red-nodegen td.jsonld --version 0.0.2
--keywords
ã¯ãã¢ãžã¥ãŒã«ã®ããŒã¯ãŒãã®ããã«çšãã䟿å©ãªãªãã·ã§ã³ã§ãã
ãããŒã©ã€ãã©ãªã®Webãµã€ãã§ã蚪åè
ã¯ãã®ããŒã¯ãŒãã䜿çšããŠã¢ãžã¥ãŒã«ãæ€çŽ¢ããŸãã
äŸãã°ã "lamp"ãããŒã¯ãŒããšããŠäœ¿çšããå Žåã¯ã--keywords
ãªãã·ã§ã³ã䜿çšããŠåèªãæå®ã§ããŸãã
ããã©ã«ãã§ã¯ãããŒããžã§ãã¬ãŒã¿ã¯ "node-red-nodegen"ãããŒã¯ãŒããšããŠäœ¿çšããŸãã
node-red-nodegen td.jsonld --keywords lamp
2ã€ä»¥äžã®ããŒã¯ãŒãã远å ããã«ã¯ãã³ã³ãåºåãã®ããŒã¯ãŒãã䜿çšããããšãã§ããŸãã
node-red-nodegen td.jsonld --keywords lamp,led
çæããããŒããå ¬éããåã«"--keywords node-red"ãæå®ãããšãããŒãã¯ãããŒã©ã€ãã©ãªã«ç»é²ã§ããNode-REDãããŒãšãã£ã¿ã§ããŒããã€ã³ã¹ããŒã«ã§ããŸãã
node-red-nodegen td.jsonld --keyword lamp,led,node-red
Node-REDãããŒãšãã£ã¿ã®ãã¬ããã§ã¯ãçæããããŒãã¯ããã©ã«ããšããŠãWeb of Thingsãã«ããŽãªã«å
¥ããŸãã
ã«ããŽãªã倿Žããå Žåã¯ã--category
ãªãã·ã§ã³ãçšããŸãã
äŸãã°ã次ã®ã³ãã³ããåºåããããŒãã¯ãNode-REDãããŒãšãã£ã¿ã®ãåæãã«ããŽãªã«å
¥ããŸãã
node-red-nodegen td.jsonld --category analysis
ããŒããžã§ãã¬ãŒã¿ã®ã³ãã³ãã¯ãçæãããããŒãã®ã¢ã€ã³ã³ãã¡ã€ã«ãæå®ããããã®--icon
ãªãã·ã§ã³ããµããŒãããŠããŸãã
ãªãã·ã§ã³ã«ã¯PNGãã¡ã€ã«ãã¹ããŸãã¯ã¹ããã¯ã¢ã€ã³ã³ã®ãã¡ã€ã«åã䜿çšã§ããŸããã¢ã€ã³ã³ã¯éæãªèæ¯äžã«çœè²ã§è¡šç€ºããPNGãã¡ã€ã«ã§ããå¿
èŠããããŸãã
node-red-nodegen td.jsonld --icon <PNGãã¡ã€ã«ããŸãã¯ã¹ããã¯ã¢ã€ã³ã³>
ããŒããžã§ãã¬ãŒã¿ã¯ããã©ã«ãã§ããŒããã³ãã¬ãŒãã§å®çŸ©ãããããŒãã®è²ã䜿çšããŸãã倿Žããå¿
èŠãããå Žåã¯ãã³ãã³ãã©ã€ã³ã®--color
ãªãã·ã§ã³ã䜿çšã§ããŸãããªãã·ã§ã³ã«ã¯ãããŒãã®è²ã衚ã16鲿°("RRGGBB"圢åŒ)ã®æååãæå®ã§ããŸãã
node-red-nodegen td.jsonld --color FFFFFF
ããŒããžã§ãã¬ãŒã¿ã¯ãThing Descriptionã®æ¬¡ã®ããããã£ã䜿çšããŠãæ å ±ã¿ãã«ããŒãã®æ å ±ãèªåçã«çæããŸãã
- description: ããŒãã®èª¬æ
- åçžäºäœçšã®title/description/form: çžäºäœçšã®èª¬æ
- support: ãµããŒãæ å ±
- links: åèæ å ±
æ å ±ã¿ãã®ããŒãæ å ±ã倿Žãããå Žåã¯ãçæãããããŒãã®HTMLãã¡ã€ã«ã®æåŸã®ã»ã¯ã·ã§ã³ãç·šéããŸãã
ããŒãã®è©³çްã説æã¯ãREADME.mdãšãããã¡ã€ã«ã«æžããŸãã ãããŒã©ã€ãã©ãªã«ããŒããå ¬éãããšããããŒã©ã€ãã©ãªã®Webãµã€ãã¯ãããŒãã®ããŒãžã§æ¬ãã¡ã€ã«ã衚瀺ããŸãã ããŒããžã§ãã¬ãŒã¿ã¯README.mdã®ãã³ãã¬ãŒããåºåããã®ã§ããã¡ã€ã«ã倿Žããã ãã§ãã
- ããŒããžã§ãã¬ãŒã¿ã®ã³ãã³ãã§ã¯ãéåæã®åé¡ãããããã--tgzãªãã·ã§ã³ãš--iconãªãã·ã§ã³ãåæã«äœ¿çšããããšã¯ã§ããŸããã
- OpenAPIããã¥ã¡ã³ãã®å€
info.title
ã¯çæãããã³ãŒãã®å€æ°åãšããŠäœ¿ããããããã¢ã«ãã¡ãããã®æåïŒæ°åã§ã¯ãªãïŒã§å§ããå¿ èŠããããŸãã