phillipsnick / node-red-contrib-unipi-evok

Connect UniPi to node-red via the Evok API
MIT License
1 stars 1 forks source link

TypeError: message.forEach is not a function #8

Open budulinek opened 5 years ago

budulinek commented 5 years ago

Hi, I receive the following error in my log:

Nov 11 20:10:30 unipi Node-RED[341]: 11 Nov 20:10:30 - [red] Uncaught Exception: Nov 11 20:10:30 unipi Node-RED[341]: 11 Nov 20:10:30 - TypeError: message.forEach is not a function Nov 11 20:10:30 unipi Node-RED[341]: at evok.parse (/home/pi/.node-red/node_modules/unipi-evok/lib/api.js:142:17) Nov 11 20:10:30 unipi Node-RED[341]: at emitOne (events.js:116:13) Nov 11 20:10:30 unipi Node-RED[341]: at evok.emit (events.js:211:7) Nov 11 20:10:30 unipi Node-RED[341]: at evok.receive (/home/pi/.node-red/node_modules/unipi-evok/lib/client.js:87:14) Nov 11 20:10:30 unipi Node-RED[341]: at emitOne (events.js:116:13) Nov 11 20:10:30 unipi Node-RED[341]: at WebSocketConnection.emit (events.js:211:7) Nov 11 20:10:30 unipi Node-RED[341]: at WebSocketConnection.processFrame (/home/pi/.node-red/node_modules/websocket/lib/WebSocketConnection.js:554:26) Nov 11 20:10:30 unipi Node-RED[341]: at /home/pi/.node-red/node_modules/websocket/lib/WebSocketConnection.js:323:40 Nov 11 20:10:30 unipi Node-RED[341]: at _combinedTickCallback (internal/process/next_tick.js:132:7) Nov 11 20:10:30 unipi Node-RED[341]: at process._tickCallback (internal/process/next_tick.js:181:9) Nov 11 20:10:30 unipi systemd[1]: Stopped Node-RED graphical event wiring tool.

majorcs commented 5 years ago

Do you have one-wire device connected to your unipi? I saw this error caused by these one-wired devices as they generate messages in a different format as all the other components. This is a bug in the https://github.com/phillipsnick/unipi-evok module, not in this node-red module. It should be fixed by this commit: https://github.com/phillipsnick/unipi-evok/commit/4106546315d6586a44db966f85ab8d6d0911cab3

budulinek commented 5 years ago

Yes, I do have one-wire device. Yes, you are right, it is actually bug in the https://github.com/phillipsnick/unipi-evok module.

I know nothing about javascript. But I did some Googling and found this: https://stackoverflow.com/questions/35969974/foreach-is-not-a-function-error-with-javascript-array

and changed line 147 (or 148?) in https://github.com/phillipsnick/unipi-evok/blob/master/lib/api.js

from message.forEach((device) => {

to Array.from(message).forEach((device) => {

It seems to do the same stuff as your commit.

budulinek commented 5 years ago

I also found this error whentrying to fetch one-wire devices in the unipi-input module:

Nov 12 07:40:59 unipi Node-RED[632]: TypeError: node.unipi[(req.query.input + "s")] is not a function Nov 12 07:40:59 unipi Node-RED[632]: at RED.httpAdmin.get (/home/pi/.node-red/node_modules/node-red-contrib-unipi-evok/lib/unipi-input.js:105:51)

Do you think it can be the same problem as above?

Thanks a lot!!

budulinek commented 5 years ago

BTW, I have reinstalled unipi-evok:

npm i unipi-evok

I have checked /home/pi/.node-red/node_modules/unipi-evok/ and this one is OK, with your commit.

But the problem persists. node-red-contrib-unipi-evok automatically installed old version of unipi-evok (without your commit) into /home/pi/.node-red/node_modules/node-red-contrib-unipi-evok/node_modules/unipi-evok/

I did:

npm remove node-red-contrib-unipi-evok

(old version of unipi-evok successfully deleted from /home/pi/.node-red/node_modules/node-red-contrib-unipi-evok/node_modules/unipi-evok/)

npm install node-red-contrib-unipi-evok

and the old version of unipi-evok reappeared in /home/pi/.node-red/node_modules/node-red-contrib-unipi-evok/node_modules/unipi-evok/

Am I doing something wrong?

budulinek commented 5 years ago

This is a bug in the https://github.com/phillipsnick/unipi-evok module, not in this node-red module. It should be fixed by this commit: phillipsnick/unipi-evok@4106546

I still have this problem with node-red-contrib-unipi-evok. The issue has been fixed in unipi-evok (v0.1.1), but node-red-contrib-unipi-evok still uses old version of unipi-evok (v0.1.0). This old version is automatically installed (in subdirectory /.node-red/node_modules/node-red-contrib-unipi-evok/node_modules/unipi-evok/). Even when I fix unipi-evok files manualy, they are overwritten after while. Can anyone please fix the dependencies in node-red-contrib-unipi-evok so that the latest version of unipi-evok is installed?