# Node-red-contrib-mcp23017chip

**URL:** <https://discourse.nodered.org/t/node-red-contrib-mcp23017chip/37999>\
**Category:** General\
**Created:** [25 December 2020 08:30 UTC](https://discourse.nodered.org/t/node-red-contrib-mcp23017chip/37999 "2020-12-25T08:30:32Z")\
**Posts on this page:** 1\
**Showing post:** 14

<div class="post-metadata">

**Author:** ![PizzaProgram](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/pizzaprogram/32/19431_2.png) [@PizzaProgram](https://discourse.nodered.org/u/PizzaProgram)\
**Post date:** [26 December 2020 11:02 UTC](https://discourse.nodered.org/t/node-red-contrib-mcp23017chip/37999/14 "2020-12-26T11:02:03Z")

</div>

I've found the problem. (It has nothing to do with user/group/privileges.)

The programmer who wrote the node originally, declared a variable of an 'i2c-bus' instead of 'i2c'.  
A bus can not have a "sub-bus".  
This is the right way to handle it:

```auto
const i2c = global.get('i2c');
const aBus = i2c.open(11, err => {
  if (err) {
    throw err;
  }
...

```

Here is an example to list the possible/supported functions of an I2C bus:

```auto
[{"id":"1d042afc.dc4755","type":"function","z":"34aad6f7.b85c6a","name":"I2C Functionalities scan","func":"'use strict';\n\n// When run, this program will output the same information as the\n// command 'i2cdetect -F 1'\n//const i2c = global.require('i2c');\nconst i2c = global.get('i2c');\nconst BusNumber = 1;\nconst aBus = i2c.open(BusNumber, err => {\n if (err) {\n throw err;\n }\n\n node.debug('i2c Bus opened successful.');\n \n aBus.i2cFuncs((err, i2cFuncs) => {\n const boolToYesNo = bool => bool ? 'yes' : 'no';\n\n if (err) {\n throw err;\n }\n\n console.log('Functionalities implemented by /dev/i2c-11:');\n console.log('I2C ' + boolToYesNo(i2cFuncs.i2c));\n console.log('SMBus Quick Command ' + boolToYesNo(i2cFuncs.smbusQuick));\n console.log('SMBus Send Byte ' + boolToYesNo(i2cFuncs.smbusSendByte));\n console.log('SMBus Receive Byte ' + boolToYesNo(i2cFuncs.smbusReceiveByte));\n console.log('SMBus Write Byte ' + boolToYesNo(i2cFuncs.smbusWriteByte));\n console.log('SMBus Read Byte ' + boolToYesNo(i2cFuncs.smbusReadByte));\n console.log('SMBus Write Word ' + boolToYesNo(i2cFuncs.smbusWriteWord));\n console.log('SMBus Read Word ' + boolToYesNo(i2cFuncs.smbusReadWord));\n console.log('SMBus Process Call ' + boolToYesNo(i2cFuncs.smbusProcCall));\n console.log('SMBus Block Write ' + boolToYesNo(i2cFuncs.smbusWriteBlock));\n console.log('SMBus Block Read ' + boolToYesNo(i2cFuncs.smbusReadBlock));\n console.log('SMBus Block Process Call ' + boolToYesNo(i2cFuncs.smbusBlockProcCall));\n console.log('SMBus PEC ' + boolToYesNo(i2cFuncs.smbusPec));\n console.log('I2C Block Write ' + boolToYesNo(i2cFuncs.smbusWriteI2cBlock));\n console.log('I2C Block Read ' + boolToYesNo(i2cFuncs.smbusReadI2cBlock));\n });\n});\n\nreturn aBus;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":370,"y":600,"wires":[["6300686f.7c8ca"]]},{"id":"6300686f.7c8ca","type":"debug","z":"34aad6f7.b85c6a","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":550,"y":600,"wires":[]},{"id":"351e5767.889d5","type":"inject","z":"34aad6f7.b85c6a","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":180,"y":600,"wires":[["1d042afc.dc4755"]]}]

```

---

_[View the full topic](https://discourse.nodered.org/t/node-red-contrib-mcp23017chip/37999)._
