Closed jwtaylor310 closed 1 year ago
Thanks, I found a place where we could get into a circular reference looking for valid equipment ids. Pull njsPC. Also, in the future, the replay file that you provided really doesn't tell me much. I did manage to find another replay that had similar equipment and managed to get it to fail.
Thanks for the quick response. The update fixed my 'call stack size exceeded' error and the controller program now starts up without a problem. However, when I try to turn on/off a feature in the web interface I am now getting the following:
MessageCannot read properties of undefined (reading 'setCircuitStateAsync') TypeError: Cannot read properties of undefined (reading 'setCircuitStateAsync') at SLCircuits.setCircuitStateAsync (/home/pi/nodejs-poolController/controller/comms/ScreenLogic.ts:1224:33) at TouchCircuitCommands.setCircuitStateAsync (/home/pi/nodejs-poolController/controller/boards/EasyTouchBoard.ts:1535:31) at /home/pi/nodejs-poolController/web/services/state/State.ts:300:55 at Layer.handle [as handle_request] (/home/pi/nodejs-poolController/node_modules/express/lib/router/layer.js:95:5) at next (/home/pi/nodejs-poolController/node_modules/express/lib/router/route.js:144:13) at Route.dispatch (/home/pi/nodejs-poolController/node_modules/express/lib/router/route.js:114:3) at Layer.handle [as handle_request] (/home/pi/nodejs-poolController/node_modules/express/lib/router/layer.js:95:5) at /home/pi/nodejs-poolController/node_modules/express/lib/router/index.js:284:15 at Function.process_params (/home/pi/nodejs-poolController/node_modules/express/lib/router/index.js:346:12) at next (/home/pi/nodejs-poolController/node_modules/express/lib/router/index.js:280:10) at /home/pi/nodejs-poolController/web/Server.ts:749:25 at Layer.handle [as handle_request] (/home/pi/nodejs-poolController/node_modules/express/lib/router/layer.js:95:5) at trim_prefix (/home/pi/nodejs-poolController/node_modules/express/lib/router/index.js:328:13) at /home/pi/nodejs-poolController/node_modules/express/lib/router/index.js:286:9 at Function.process_params (/home/pi/nodejs-poolController/node_modules/express/lib/router/index.js:346:12) at next (/home/pi/nodejs-poolController/node_modules/express/lib/router/index.js:280:10)
Are you connecting with ScreenLogic?
Nope,
1|njsPC | [3/16/2023, 2:20:45 PM] info: Found IntelliTouch Controller
1|njsPC | Pentair IntelliTouch System Detected!
I need your stack dump. The one above is clearly going into ScreenLogic. Double check to make sure you do not have a port set up for screenlogic in the comms section.
I haven't done anything intentionally to enable ScreenLogic. Currently when I open the 'RS485' tab in the web interface it hangs with a yellow box that says "Getting Port Settings", so I can't get to the Comms section there. I have pulled the following from the config.json file:
{ "controller": { "comms": { "portId": 0, "enabled": true, "rs485Port": "/dev/ttyUSB0", "mock": false, "netConnect": true, "netHost": "xxx.xxx.xxx.xxx", <- actual IP hidden for security reasons "netPort": 8899, "inactivityRetry": 10, "portSettings": { "baudRate": 9600, "dataBits": 8, "parity": "none", "stopBits": 1, "rtscts": false, "autoOpen": false, "lock": false, "flowControl": false }, "netSettings": { "allowHalfOpen": false, "keepAlive": false, "keepAliveInitialDelay": 5 }, "screenlogic": { "connectionType": "local", "systemName": "Pentair: 00-00-00", "password": 1234 }, "type": "netConnect" },
How do I get a stack dump?
I was talking to @armo about the stack dump. You already provided yours but this is helpful.
Need something from me? No issue at all, just let me know.
Thanks!
No worries we ended up with this issue and a discussion at the same time. I assume you are up and running at this point. Is that correct?
Yep - just going in, re-saving settings ... fixed it. Didn't change a thing, just saved. Make sense?
Yes it does in your case. @jwtaylor310 shut down njsPC and manually change the line where it says
"type": "netConnect",
to "type": "network",
then restart njsPC.
I'm still having the problem. To confirm, I am supposed to make the "type" change in config.json, not defaultConfig.json? Here's what I currently have in config.json: { "controller": { "comms": { "type": "network", "portId": 0, "enabled": true, "rs485Port": "/dev/ttyUSB0", "mock": false, "netConnect": true, "netHost": "xxx.xxx.xxx.xxx", "netPort": 8899, "inactivityRetry": 10, "portSettings": { "baudRate": 9600, "dataBits": 8, "parity": "none", "stopBits": 1, "rtscts": false, "autoOpen": false, "lock": false, "flowControl": false }, "netSettings": { "allowHalfOpen": false, "keepAlive": false, "keepAliveInitialDelay": 5 }, "screenlogic": { "connectionType": "local", "systemName": "Pentair: 00-00-00", "password": 1234 } }, "backups": { "automatic": false, "interval": { "days": 30, "hours": 0 }, "keepCount": 5, "njsPC": true, "servers": [] } },
Ok now try to go into the COMMs again in dashPanel. You updated that software as well... correct?
Not defaultConfig.json. That is not a user file.
No improvement. dashPanel still hangs at "Getting Port Settings..." So I can't see the Comms tab. Reloading the page clears the message and returns me to the main page. When I try to turn on/off a feature I still get error message "Cannot read properties of undefined (reading 'setCircuitStateAsync'). The stack trace is:
TypeError: Cannot read properties of undefined (reading 'setCircuitStateAsync') at SLCircuits.setCircuitStateAsync (/home/pi/nodejs-poolController/controller/comms/ScreenLogic.ts:1224:33) at TouchCircuitCommands.setCircuitStateAsync (/home/pi/nodejs-poolController/controller/boards/EasyTouchBoard.ts:1535:31) at /home/pi/nodejs-poolController/web/services/state/State.ts:300:55 at Layer.handle [as handle_request] (/home/pi/nodejs-poolController/node_modules/express/lib/router/layer.js:95:5) at next (/home/pi/nodejs-poolController/node_modules/express/lib/router/route.js:144:13) at Route.dispatch (/home/pi/nodejs-poolController/node_modules/express/lib/router/route.js:114:3) at Layer.handle [as handle_request] (/home/pi/nodejs-poolController/node_modules/express/lib/router/layer.js:95:5) at /home/pi/nodejs-poolController/node_modules/express/lib/router/index.js:284:15 at Function.process_params (/home/pi/nodejs-poolController/node_modules/express/lib/router/index.js:346:12) at next (/home/pi/nodejs-poolController/node_modules/express/lib/router/index.js:280:10) at /home/pi/nodejs-poolController/web/Server.ts:749:25 at Layer.handle [as handle_request] (/home/pi/nodejs-poolController/node_modules/express/lib/router/layer.js:95:5) at trim_prefix (/home/pi/nodejs-poolController/node_modules/express/lib/router/index.js:328:13) at /home/pi/nodejs-poolController/node_modules/express/lib/router/index.js:286:9 at Function.process_params (/home/pi/nodejs-poolController/node_modules/express/lib/router/index.js:346:12) at next (/home/pi/nodejs-poolController/node_modules/express/lib/router/index.js:280:10)
I have rebooted, confirmed the change to the config.json file and restarted both njsPC and the dashPanel. Both njrPC and dashPanel are at 8.0.0. njsPC is commit bedd29e. and dashPanel is commit cb05840.
Pull njsPC I added another check to disable ScreenLogic. I'll have to get @tagyoureit to have a look at this since it initializes it on startup even when there is no selected connection.
That fixed the problem. After pulling the updated njsPC, I had to reset the "type" entry in config.json from "network" to "netConnect" to get comms working normally. Once I did that, the problem turning on/off features went away. In the meantime, I found that the problem with the dashPanel hanging at "Getting Port Settings..." was due to cached content in my browser. Now that I have cleared the cache, I can access the 'Comms" tab without a problem.
THANK YOU for working through this. Great support!
No worries. Turns out there were some default settings that needed to get sorted out.
nodejs-poolController Version/commit
8.0.0/cb05840
nodejs-poolController-dashPanel Version/commit
8.0.0/cb05840
relayEquipmentManager Version/commit
Not Applicable
Node Version
v19.8.1
Platform
Linux raspberrypi 5.15.84-v8+ #1613 SMP PREEMPT Thu Jan 5 12:03:08 GMT 2023 aarch64 GNU/Linux
RS485 Adapter
Elfin
Are you using Docker?
OCP
EasyTouch2
Pump(s)
No response
Chlorinator(s)
Intellichlor-40
What steps will reproduce the bug?
Run "npm start" in nodejs-poolController folder.
What happens?
While getting equipment list the program reports "RangeError: Maximum call stack size exceeded" and the program exits.
Terminal display prior at program exit:
[3/16/2023, 9:13:39 AM] verbose: Config Queue Completed... 88% (7 remaining) [3/16/2023, 9:13:39 AM] debug: Assigning message id 109 [3/16/2023, 9:13:39 AM] info: {"port":0,"id":109,"valid":true,"dir":"out","proto":"broadcast","pkt":[[],[255,0,255], [165,30,16,33,214,1], [0],[1,203]],"ts":"2023-03-16T09:13:39.198-0400"} [3/16/2023, 9:13:39 AM] verbose: Wrote packet [Port 0 id: 109] [255,0,255,165,30,16,33,214,1,0,1,203].Retries remaining: 3 [3/16/2023, 9:13:39 AM] debug: Assigning message id 110
/home/pi/nodejs-poolController/controller/Equipment.ts:1401 public getNextEquipmentId(range?: EquipmentIdRange, exclude?: number[]): number { return this.getNextEquipmentId(typeof range === 'undefined' ? sys.board.equipmentIds.pumps : range, exclude); } ^ RangeError: Maximum call stack size exceeded at PumpCollection.getNextEquipmentId (/home/pi/nodejs-poolController/controller/Equipment.ts:1401:99) at PumpCollection.getNextEquipmentId (/home/pi/nodejs-poolController/controller/Equipment.ts:1401:99) at PumpCollection.getNextEquipmentId (/home/pi/nodejs-poolController/controller/Equipment.ts:1401:99) (Repeats 'at PumpCollection' message 16 times before exiting)
What should have happened?
Normal startup of pool controller
Additional information
This is a new install of version 8.0.0 on a Raspberry Pi. The first time the system was started it defaulted to a Local RS485 connection and the controller started normally but, as expected, reported communication failures. In DashPanel I changed the Comms to "Network" and provided the IP address and port number of the Elfin RS485-Ethernet adapter. The system then established communications and tried to load the equipment configuration. After reporting 88% completion the program exited with the error "RangeError: Maximum call stack size exceeded". Subsequent reboots and attempts to start the controller fail with the RangeError message.
Here's the replay file: Replay File.txt