Sunday, June 5, 2016

Wio Link using Freeboard

This post shows how quick and easy is to use Node-RED along with Freeboard and Wio Link. The dashboard shown below was created in less than 3 hours (coffee break time included). It displays the temperature and humidity for the Grove sensors connected to Wio Link.



The Node-RED flow is quite simple. Only a few nodes.


Let me share with you what is interesting in this flow.

First off all a Freeboard node has been added with the name "Wio Link". This kind of node has no parameters at all. It just send to Freeboard environment the JSON object received in its input. What makes this datasource interesting is the payload configured in the inject node. The field Payload in the dialog box of the inject node has been (manually) populated with the result of the HTTP Request "Scan Drivers". The API "Scan Drivers" provides a JSON object that shows all the Grove modules that are eligible to be connected to Wio Link. Some interesting parameters of this object are: a link to a picture of the module and the module name (among many others). The idea of creating this datasource is to build a foundation to easilly add in the dashboard (Freeboard)  any the Grove modules that I want to play with.


For this flow I hard coded the node token as the msg.payload (string format) of the inject node named "Fire" . This string will be used as the value for the "Authorization" property in the HTTP Request. Note that it is necessary to prefix the token itself with the literal "token".


msg.headers = {"Authorization": msg.payload};


I  configured an interval of 5 minutes for pooling the sensor data. It means that every five minutes a new HTTP Request will be sent out to read the data from the sensor.





Two other nodes of type  "Freeboard" have been added to the logic.


They will send to Freeboard the temperature and humidity read by the HTTP Requests.

This is pretty much the Node-Red flow.  I won't be posting the screenshots that show how the dashboard has been configured since this would be very time-consuming. Maybe I will make a video on that and post on my channel on YouTube (as soon as I manage to buy a decent mic to add sound).



Below the flow that can be copied and imported to your Node-RED.


[{"id":"d9820cc8.38e4f","type":"freeboard","z":"1384eb45.4433b5","name":"Wio Link","x":334.9573974609375,"y":61.17897033691406,"wires":[]},{"id":"72bfb467.debd6c","type":"function","z":"1384eb45.4433b5","name":"Grove Temperature","func":"msg.url=\"https://iot.seeed.cc/v1/node/GroveTempHumD0/temperature\"; \nmsg.method=\"GET\";\nmsg.headers = {\"Authorization\": msg.payload};\nreturn msg;","outputs":1,"noerr":0,"x":317.09942626953125,"y":193.09091186523438,"wires":[["c6f1e765.2aca28"]]},{"id":"c6f1e765.2aca28","type":"http request","z":"1384eb45.4433b5","name":"HTTP Request","method":"use","ret":"obj","url":"","x":523.2414245605469,"y":194.30398559570312,"wires":[["d25aefd2.19618","d66d6e73.cec5c"]]},{"id":"d25aefd2.19618","type":"freeboard","z":"1384eb45.4433b5","name":"WioTemp","x":724.0994338989258,"y":194.09091186523438,"wires":[]},{"id":"d66d6e73.cec5c","type":"debug","z":"1384eb45.4433b5","name":"","active":true,"console":"false","complete":"true","x":731.096565246582,"y":288.9801330566406,"wires":[]},{"id":"fa3afc81.28a44","type":"inject","z":"1384eb45.4433b5","name":"Fire","topic":"","payload":"token a1adldfa6dc7726333d49962dde5599b","payloadType":"str","repeat":"300","crontab":"","once":true,"x":102.09943389892578,"y":165.00000095367432,"wires":[["72bfb467.debd6c","3725f37e.dd01dc"]]},{"id":"3725f37e.dd01dc","type":"function","z":"1384eb45.4433b5","name":"Grove Humidity","func":"msg.url=\"https://iot.seeed.cc/v1/node/GroveTempHumD0/humidity\"; \nmsg.method=\"GET\";\nmsg.headers = {\"Authorization\": msg.payload};\nreturn msg;","outputs":1,"noerr":0,"x":304.0994415283203,"y":142,"wires":[["8a212685.066f48"]]},{"id":"8a212685.066f48","type":"http request","z":"1384eb45.4433b5","name":"HTTP Request","method":"use","ret":"obj","url":"","x":522.0994415283203,"y":143,"wires":[["d66d6e73.cec5c","1c70a693.291b39"]]},{"id":"1c70a693.291b39","type":"freeboard","z":"1384eb45.4433b5","name":"Wio Humid","x":732.0994415283203,"y":145,"wires":[]},{"id":"4d3891b2.c7c5f","type":"inject","z":"1384eb45.4433b5","name":"","topic":"","payload":"{ \"drivers\": [ { \"SKU\": \"63e25800-a2d2-11e5-bf7f-feff819cdc9f\", \"GroveName\": \"Generic PWM/Analog Output\", \"ImageURL\": \"http://www.seeedstudio.com/wiki/images/b/b4/Generic_analog_output.png\", \"HasPowerOffFunc\": false, \"ClassName\": \"GenericPWMOut\", \"CanGetLastError\": false, \"HasEvent\": false, \"InterfaceType\": \"GPIO\", \"HasPowerOnFunc\": false, \"ID\": 0 }, { \"SKU\": \"101020019-ffff\", \"GroveName\": \"Grove-Temperature&Humidity\", \"ImageURL\": \"http://www.seeedstudio.com/wiki/images/3/36/Temp%26Humi.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveTempHum\", \"CanGetLastError\": false, \"HasEvent\": false, \"InterfaceType\": \"GPIO\", \"HasPowerOnFunc\": false, \"ID\": 1 }, { \"SKU\": \"101020040\", \"GroveName\": \"Grove-IR Distance Interrupter\", \"ImageURL\": \"http://www.seeedstudio.com/wiki/images/thumb/e/e1/IR_Distance_Interrupter.jpg/300px-IR_Distance_Interrupter.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveIRDistanceInterrupter\", \"CanGetLastError\": false, \"HasEvent\": true, \"InterfaceType\": \"GPIO\", \"HasPowerOnFunc\": false, \"ID\": 2 }, { \"SKU\": \"7e3306bc-8911-11e5-af63-feff819cdc9f\", \"GroveName\": \"Generic Digital Input\", \"ImageURL\": \"http://www.seeedstudio.com/wiki/images/e/ea/Pion_one_generic_din.png\", \"HasPowerOffFunc\": false, \"ClassName\": \"GenericDIn\", \"CanGetLastError\": false, \"HasEvent\": true, \"InterfaceType\": \"GPIO\", \"HasPowerOnFunc\": false, \"ID\": 3 }, { \"SKU\": \"101020026\", \"GroveName\": \"Grove - Infrared Emitter\", \"ImageURL\": \"http://www.seeedstudio.com/wiki/images/thumb/6/6a/Grove_-_Infrared_Emitter.jpg/400px-Grove_-_Infrared_Emitter.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveIREmit\", \"CanGetLastError\": true, \"HasEvent\": false, \"InterfaceType\": \"GPIO\", \"HasPowerOnFunc\": false, \"ID\": 4 }, { \"SKU\": \"3a9d9a84-8c59-11e5-8994-feff819cdc9f\", \"GroveName\": \"Generic Digital Output\", \"ImageURL\": \"http://www.seeedstudio.com/wiki/images/0/00/Pion_one_generic_dout.png\", \"HasPowerOffFunc\": false, \"ClassName\": \"GenericDOut\", \"CanGetLastError\": false, \"HasEvent\": false, \"InterfaceType\": \"GPIO\", \"HasPowerOnFunc\": false, \"ID\": 5 }, { \"SKU\": \"101020003\", \"GroveName\": \"Grove-Button\", \"ImageURL\": \"http://www.seeedstudio.com/wiki/images/thumb/c/ca/Button.jpg/300px-Button.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveButton\", \"CanGetLastError\": false, \"HasEvent\": true, \"InterfaceType\": \"GPIO\", \"HasPowerOnFunc\": false, \"ID\": 6 }, { \"SKU\": \"107020001\", \"GroveName\": \"Grove-Speaker\", \"ImageURL\": \"http://www.seeedstudio.com/depot/images/product/Grove%20Speaker_01.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveSpeaker\", \"CanGetLastError\": false, \"HasEvent\": false, \"InterfaceType\": \"GPIO\", \"HasPowerOnFunc\": false, \"ID\": 7 }, { \"SKU\": \"101020088\", \"GroveName\": \"Grove-Multichannel Gas Sensor\", \"ImageURL\": \"http://www.seeedstudio.com/wiki/images/2/28/Multi_sensor1.png\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveMultiChannelGas\", \"CanGetLastError\": true, \"HasEvent\": false, \"InterfaceType\": \"I2C\", \"HasPowerOnFunc\": false, \"ID\": 8 }, { \"SKU\": \"101020078\", \"GroveName\": \"Grove - Air Quality Sensor\", \"ImageURL\": \"http://www.seeedstudio.com/depot/images/product/101020078%201_02.jpg\", \"HasPowerOffFunc\": true, \"ClassName\": \"GroveAirquality\", \"CanGetLastError\": true, \"HasEvent\": false, \"InterfaceType\": \"ANALOG\", \"HasPowerOnFunc\": true, \"ID\": 9 }, { \"SKU\": \"104030008\", \"GroveName\": \"Grove - OLED Display 0.96''\", \"ImageURL\": \"http://www.seeedstudio.com/wiki/images/thumb/e/ea/Toled128642.jpg/400px-Toled128642.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveOLED12864\", \"CanGetLastError\": true, \"HasEvent\": false, \"InterfaceType\": \"I2C\", \"HasPowerOnFunc\": false, \"ID\": 10 }, { \"SKU\": \"101020030\", \"GroveName\": \"Grove-Digital Light\", \"ImageURL\": \"http://www.seeedstudio.com/wiki/images/6/69/Digital_Light_Sensor.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveDigitalLight\", \"CanGetLastError\": true, \"HasEvent\": false, \"InterfaceType\": \"I2C\", \"HasPowerOnFunc\": false, \"ID\": 11 }, { \"SKU\": \"105020001\", \"GroveName\": \"Grove-I2C Motor Driver\", \"ImageURL\": \"http://www.seeedstudio.com/depot/bmz_cache/3/3ac50a997c78858b8f960475f878e369.image.530x397.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveI2CMotorDriver\", \"CanGetLastError\": false, \"HasEvent\": false, \"InterfaceType\": \"I2C\", \"HasPowerOnFunc\": false, \"ID\": 12 }, { \"SKU\": \"107020008\", \"GroveName\": \"Grove - MP3 v2.0\", \"ImageURL\": \"http://www.seeedstudio.com/depot/bmz_cache/e/e0d5fd4cbcface290dc089c29adbf98b.image.530x397.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveMP3V2\", \"CanGetLastError\": false, \"HasEvent\": false, \"InterfaceType\": \"UART\", \"HasPowerOnFunc\": false, \"ID\": 13 }, { \"SKU\": \"103020014\", \"GroveName\": \"Grove-Dry-Reed Relay\", \"ImageURL\": \"http://www.seeedstudio.com/depot/bmz_cache/1/16a562af66ac52d6e0e19a7b6ec5588d.image.530x397.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveDryReedRelay\", \"CanGetLastError\": false, \"HasEvent\": false, \"InterfaceType\": \"GPIO\", \"HasPowerOnFunc\": false, \"ID\": 14 }, { \"SKU\": \"103020005\", \"GroveName\": \"Grove_Relay\", \"ImageURL\": \"http://www.seeedstudio.com/depot/bmz_cache/d/df3ef3f9ba7f58333235895c0d3c4fb2.image.530x397.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveRelay\", \"CanGetLastError\": false, \"HasEvent\": false, \"InterfaceType\": \"GPIO\", \"HasPowerOnFunc\": false, \"ID\": 15 }, { \"SKU\": \"104030001\", \"GroveName\": \"Grove - LCD RGB Backlight\", \"ImageURL\": \"http://www.seeedstudio.com/depot/bmz_cache/2/216a915503836429b7e6b92f83e035d5.image.530x397.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveLCDRGB\", \"CanGetLastError\": true, \"HasEvent\": false, \"InterfaceType\": \"I2C\", \"HasPowerOnFunc\": false, \"ID\": 16 }, { \"SKU\": \"101020016\", \"GroveName\": \"Grove - Infrared Receiver\", \"ImageURL\": \"http://www.seeedstudio.com/wiki/images/thumb/e/ee/Grove_-_Infrared_Receiver.jpg/400px-Grove_-_Infrared_Receiver.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveIRRecv\", \"CanGetLastError\": false, \"HasEvent\": true, \"InterfaceType\": \"GPIO\", \"HasPowerOnFunc\": false, \"ID\": 17 }, { \"SKU\": \"101020020\", \"GroveName\": \"Grove-PIR Motion Sensor\", \"ImageURL\": \"http://www.seeedstudio.com/depot/bmz_cache/b/bc0115270f17babe6373bce8ec1bfe8a.image.164x123.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GrovePIRMotion\", \"CanGetLastError\": false, \"HasEvent\": true, \"InterfaceType\": \"GPIO\", \"HasPowerOnFunc\": false, \"ID\": 18 }, { \"SKU\": \"104990089\", \"GroveName\": \"Grove-WS2812 LED Strip 60\", \"ImageURL\": \"http://www.seeedstudio.com/depot/bmz_cache/4/4f346dc15724a7b5a5c1383253aeefc9.image.530x397.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveLedWs2812\", \"CanGetLastError\": true, \"HasEvent\": false, \"InterfaceType\": \"GPIO\", \"HasPowerOnFunc\": false, \"ID\": 19 }, { \"SKU\": \"101020050\", \"GroveName\": \"Grove-3-Axis Digital Gyro\", \"ImageURL\": \"http://www.seeedstudio.com/wiki/images/thumb/f/f6/Gbgr.jpg/500px-Gbgr.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveGyroITG3200\", \"CanGetLastError\": false, \"HasEvent\": false, \"InterfaceType\": \"I2C\", \"HasPowerOnFunc\": false, \"ID\": 20 }, { \"SKU\": \"103020012\", \"GroveName\": \"Grove - SPDT Relay(30A)\", \"ImageURL\": \"http://www.seeedstudio.com/depot/images/product/SPDT%20Relay.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveSPDTRelay30A\", \"CanGetLastError\": false, \"HasEvent\": false, \"InterfaceType\": \"GPIO\", \"HasPowerOnFunc\": false, \"ID\": 21 }, { \"SKU\": \"101020039\", \"GroveName\": \"Grove-3Axis Digital Acc(±1.5g)\", \"ImageURL\": \"http://www.seeedstudio.com/wiki/images/b/bb/3_aix_acc.jpg\", \"HasPowerOffFunc\": true, \"ClassName\": \"GroveAccMMA7660\", \"CanGetLastError\": false, \"HasEvent\": false, \"InterfaceType\": \"I2C\", \"HasPowerOnFunc\": true, \"ID\": 22 }, { \"SKU\": \"101020038\", \"GroveName\": \"Grove-Magnetic Switch\", \"ImageURL\": \"http://www.seeedstudio.com/wiki/images/thumb/c/c0/Magnetic_Switch.jpg/400px-Magnetic_Switch.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveMagneticSwitch\", \"CanGetLastError\": false, \"HasEvent\": true, \"InterfaceType\": \"GPIO\", \"HasPowerOnFunc\": false, \"ID\": 23 }, { \"SKU\": \"101020192\", \"GroveName\": \"Grove-Barometer(BMP280)\", \"ImageURL\": \"http://www.seeedstudio.com/wiki/images/thumb/a/a4/Bmp280.jpg/610px-Bmp280.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveBaroBMP280\", \"CanGetLastError\": false, \"HasEvent\": false, \"InterfaceType\": \"I2C\", \"HasPowerOnFunc\": false, \"ID\": 24 }, { \"SKU\": \"105020005\", \"GroveName\": \"Grove-EL Driver\", \"ImageURL\": \"http://www.seeedstudio.com/depot/bmz_cache/4/45c3a0b2df09759a952ae01bf5207b42.image.530x397.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveEL\", \"CanGetLastError\": false, \"HasEvent\": false, \"InterfaceType\": \"GPIO\", \"HasPowerOnFunc\": false, \"ID\": 25 }, { \"SKU\": \"101020019\", \"GroveName\": \"Grove-Temperature&Humidity Pro\", \"ImageURL\": \"http://www.seeedstudio.com/wiki/images/7/75/Temp_humi_pro222.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveTempHumPro\", \"CanGetLastError\": false, \"HasEvent\": false, \"InterfaceType\": \"GPIO\", \"HasPowerOnFunc\": false, \"ID\": 26 }, { \"SKU\": \"101020073\", \"GroveName\": \"Grove-Electromagnet\", \"ImageURL\": \"http://www.seeedstudio.com/depot/bmz_cache/9/9509f6e5cb898db66420ae739bb51eb3.image.164x123.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveElecMagnet\", \"CanGetLastError\": false, \"HasEvent\": false, \"InterfaceType\": \"GPIO\", \"HasPowerOnFunc\": false, \"ID\": 27 }, { \"SKU\": \"103020018\", \"GroveName\": \"Grove-Recorder\", \"ImageURL\": \"http://www.seeedstudio.com/depot/images/product/Grove%20Recorder.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveRecorder\", \"CanGetLastError\": false, \"HasEvent\": false, \"InterfaceType\": \"GPIO\", \"HasPowerOnFunc\": false, \"ID\": 28 }, { \"SKU\": \"104030003\", \"GroveName\": \"Grove - 4-Digit Display\", \"ImageURL\": \"http://www.seeedstudio.com/depot/bmz_cache/3/3a9f79323a82950c12fc7e69fa9fab4d.image.530x397.jpg\", \"HasPowerOffFunc\": true, \"ClassName\": \"Grove4Digit\", \"CanGetLastError\": true, \"HasEvent\": false, \"InterfaceType\": \"UART\", \"HasPowerOnFunc\": true, \"ID\": 29 }, { \"SKU\": \"103020004\", \"GroveName\": \"Grove-Solid State Relay\", \"ImageURL\": \"http://www.seeedstudio.com/depot/bmz_cache/1/13c15e71c4bd4c0a0fce5faa0283f4c5.image.530x397.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveSolidStateRelay\", \"CanGetLastError\": false, \"HasEvent\": false, \"InterfaceType\": \"GPIO\", \"HasPowerOnFunc\": false, \"ID\": 30 }, { \"SKU\": \"eedec01c-8c5a-11e5-8994-feff819cdc9f\", \"GroveName\": \"Generic Analog Input\", \"ImageURL\": \"http://www.seeedstudio.com/wiki/images/8/87/Pion_one_generic_analog.png\", \"HasPowerOffFunc\": false, \"ClassName\": \"GenericAIn\", \"CanGetLastError\": false, \"HasEvent\": false, \"InterfaceType\": \"ANALOG\", \"HasPowerOnFunc\": false, \"ID\": 31 }, { \"SKU\": \"101020034\", \"GroveName\": \"Grove-3Axis Compass\", \"ImageURL\": \"http://www.seeedstudio.com/wiki/images/thumb/b/be/Axis_compass.jpg/400px-Axis_compass.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveCompass\", \"CanGetLastError\": false, \"HasEvent\": false, \"InterfaceType\": \"I2C\", \"HasPowerOnFunc\": false, \"ID\": 32 }, { \"SKU\": \"101020008\", \"GroveName\": \"Grove-Moisture\", \"ImageURL\": \"http://www.seeedstudio.com/wiki/images/c/ce/Moisture_sensor_.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveMoisture\", \"CanGetLastError\": false, \"HasEvent\": false, \"InterfaceType\": \"ANALOG\", \"HasPowerOnFunc\": false, \"ID\": 33 }, { \"SKU\": \"101020083\", \"GroveName\": \"Grove - Gesture v1.0\", \"ImageURL\": \"http://www.seeedstudio.com/depot/images/product/101020083%201_01.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveGesture\", \"CanGetLastError\": false, \"HasEvent\": false, \"InterfaceType\": \"I2C\", \"HasPowerOnFunc\": false, \"ID\": 34 }, { \"SKU\": \"101020010\", \"GroveName\": \"Grove - Ultrasonic Ranger\", \"ImageURL\": \"http://www.seeedstudio.com/wiki/images/thumb/3/3a/Ultrasonic_Ranger.jpg/350px-Ultrasonic_Ranger.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveUltraRanger\", \"CanGetLastError\": false, \"HasEvent\": false, \"InterfaceType\": \"GPIO\", \"HasPowerOnFunc\": false, \"ID\": 35 }, { \"SKU\": \"101020015\", \"GroveName\": \"Grove - Temperature Sensor\", \"ImageURL\": \"http://www.seeedstudio.com/wiki/images/5/5f/Grove_Temperature_Sensor_View.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveTemp\", \"CanGetLastError\": false, \"HasEvent\": false, \"InterfaceType\": \"ANALOG\", \"HasPowerOnFunc\": false, \"ID\": 36 }, { \"SKU\": \"111020001\", \"GroveName\": \"Grove - Encoder\", \"ImageURL\": \"http://www.seeedstudio.com/depot/bmz_cache/0/00a3a97e35f0ede1275ea4a989e4953c.image.530x397.jpg\", \"HasPowerOffFunc\": true, \"ClassName\": \"GroveEncoder\", \"CanGetLastError\": false, \"HasEvent\": true, \"InterfaceType\": \"UART\", \"HasPowerOnFunc\": true, \"ID\": 37 }, { \"SKU\": \"101020032\", \"GroveName\": \"Grove-Barometer(BMP085)\", \"ImageURL\": \"http://www.seeedstudio.com/wiki/images/thumb/e/e7/Grove-Barometer.jpg/621px-Grove-Barometer.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveBaroBMP085\", \"CanGetLastError\": false, \"HasEvent\": false, \"InterfaceType\": \"I2C\", \"HasPowerOnFunc\": false, \"ID\": 38 }, { \"SKU\": \"316010005\", \"GroveName\": \"Grove-Servo\", \"ImageURL\": \"http://www.seeedstudio.com/wiki/images/thumb/0/0f/Grove%E2%80%94Servo.jpg/600px-Grove%E2%80%94Servo.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveServo\", \"CanGetLastError\": false, \"HasEvent\": false, \"InterfaceType\": \"GPIO\", \"HasPowerOnFunc\": false, \"ID\": 39 }, { \"SKU\": \"104020006\", \"GroveName\": \"Grove - LED Bar\", \"ImageURL\": \"http://www.seeedstudio.com/depot/images/product/104020006%201.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveLEDBar\", \"CanGetLastError\": false, \"HasEvent\": false, \"InterfaceType\": \"UART\", \"HasPowerOnFunc\": false, \"ID\": 40 }, { \"SKU\": \"101020017\", \"GroveName\": \"Grove-Rotary Angle Sensor\", \"ImageURL\": \"http://www.seeedstudio.com/depot/bmz_cache/4/47c18125fbb4c9db7e3104f5a3b04ef5.image.530x397.jpg\", \"HasPowerOffFunc\": false, \"ClassName\": \"GroveRotaryAngle\", \"CanGetLastError\": false, \"HasEvent\": false, \"InterfaceType\": \"ANALOG\", \"HasPowerOnFunc\": false, \"ID\": 41 } ] }","payloadType":"json","repeat":"","crontab":"","once":true,"x":93.95454406738281,"y":66.88067626953125,"wires":[["d9820cc8.38e4f"]]}]