Ok, it just happened again. Here is the flow I used to generate the issue...
[{"id":"702810e5.ed0d38","type":"pi-gpiod in","z":"2eeabf3d.ac7848","name":"Board 11 GPIO 17 Wire Grey","host":"localhost","port":8888,"pin":"17","intype":"PUD_OFF","debounce":"100","read":false,"x":140,"y":160,"wires":[["94df63dd.4654c8"]]},{"id":"5b43e1a5.7b057","type":"debug","z":"2eeabf3d.ac7848","name":"Message","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":900,"y":220,"wires":[]},{"id":"85846af.0308698","type":"pi-gpiod in","z":"2eeabf3d.ac7848","name":"Board 15 GPIO 22 Wire Purple","host":"localhost","port":8888,"pin":"22","intype":"PUD_OFF","debounce":"100","read":false,"x":150,"y":220,"wires":[["39b8d69a.9e39ca"]]},{"id":"94df63dd.4654c8","type":"change","z":"2eeabf3d.ac7848","name":"Grey","rules":[{"t":"set","p":"wire","pt":"msg","to":"grey","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":590,"y":180,"wires":[["433ecbda.4cf00c"]]},{"id":"2e863ecb.06837a","type":"change","z":"2eeabf3d.ac7848","name":"Blue","rules":[{"t":"set","p":"wire","pt":"msg","to":"blue","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":590,"y":260,"wires":[["433ecbda.4cf00c"]]},{"id":"39b8d69a.9e39ca","type":"change","z":"2eeabf3d.ac7848","name":"Purple","rules":[{"t":"set","p":"wire","pt":"msg","to":"purple","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":590,"y":220,"wires":[["433ecbda.4cf00c"]]},{"id":"433ecbda.4cf00c","type":"function","z":"2eeabf3d.ac7848","name":"State","func":"/* _________________\n B P|\n |\n |\n |\n |\n G|\n |\n*/\n\nconst ZERO = 0,\n ONE = 1,\n CLOSE = ZERO,\n OPEN = 5;\n\nconst theState = Boolean(msg.payload),\n theTime = new Date().getTime();\n\nvar theWire=flow.get(msg.wire) || { state: true, index: ZERO, time: ZERO };\nvar theDirection=flow.get('direction') || ONE;\n\n//\ntheWire.state = theState;\ntheWire.time = theTime;\n\nlet theMessage='?';\n\nif (theDirection) {\n theMessage = 'Open';\n \n if (theWire.index > OPEN)\n theDirection = -ONE;\n} else {\n theMessage = 'Close';\n\n if (theWire.index < CLOSE)\n theDirection = ONE;\n}\n\ntheWire.index += theDirection;\n\nnode.warn(`${theMessage}, Direction ${theDirection}, ` +\n `Wire ${msg.wire}, Index ${theWire.index}, State ${theWire.state}, Time ${theWire.time}`);\n\n// Garage Open/Close Button Will Toggle Direction As Well\n\nflow.set(msg.wire, theWire);\nflow.set('direction', theDirection);\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":750,"y":220,"wires":[["5b43e1a5.7b057"]]},{"id":"7b9b2967.5d12e","type":"pi-gpiod in","z":"2eeabf3d.ac7848","name":"Board 13 GPIO 27 Wire Blue","host":"localhost","port":8888,"pin":"27","intype":"PUD_OFF","debounce":"100","read":false,"x":140,"y":280,"wires":[["2e863ecb.06837a"]]},{"id":"f4644fad.b2f4e","type":"inject","z":"2eeabf3d.ac7848","name":"Automatic","props":[{"p":"payload"}],"repeat":"","crontab":"","once":true,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":110,"y":340,"wires":[["1d64a115.da77df"]]},{"id":"1d64a115.da77df","type":"change","z":"2eeabf3d.ac7848","name":"Reset","rules":[{"t":"delete","p":"direction","pt":"flow"},{"t":"delete","p":"blue","pt":"flow"},{"t":"delete","p":"purple","pt":"flow"},{"t":"delete","p":"grey","pt":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":270,"y":340,"wires":[[]]}]
You will need something to generate the GPIO inputs. I have been using three(3) of the following breakout boards on the Pi3 as noted above...