Closed franklinvv closed 3 years ago
The /proxy/protect/ws/updates
requires a query string.
The query string comes from an http call to /proxy/protect/api/bootstrap
The way I'm doing it is like this:
Start with an http node pointing to /proxy/protect/api/bootstrap
Run the output of that to this function node:
if ("lastUpdateId" in msg.payload) {
return {
payload: {
endpoint: `/proxy/protect/ws/updates?lastUpdateId=${msg.payload.lastUpdateId}`
}
};
}
Finally connect the output of that function node to the input of a websocket node with this endpoint configured: /proxy/protect/ws/updates?
To speed up your config, feel free to have a look at my flow:
[{"id":"ed307f26.4c36e8","type":"inject","z":"93dc4db2.de8ac","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":120,"y":420,"wires":[["5e958d35.6f65cc"]]},{"id":"5e958d35.6f65cc","type":"unifi-request","z":"93dc4db2.de8ac","name":"","accessControllerNodeId":"bb62493.c90b9b8","endpoint":"/proxy/protect/api/bootstrap","method":"GET","data":"{}","x":290,"y":420,"wires":[["1b0f15fa.bf17ea","69ca3313.d939ec","25d193e8.931aa4"]]},{"id":"25d193e8.931aa4","type":"function","z":"93dc4db2.de8ac","name":"lastUpdateId","func":"if (\"lastUpdateId\" in msg.payload) {\n return {\n payload: {\n endpoint: `/proxy/protect/ws/updates?lastUpdateId=${msg.payload.lastUpdateId}`\n }\n };\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":500,"y":420,"wires":[["367d1b38.56ec24","1b0f15fa.bf17ea"]]},{"id":"367d1b38.56ec24","type":"unifi-web-socket","z":"93dc4db2.de8ac","name":"Protect","endpoint":"/proxy/protect/ws/updates?","accessControllerNodeId":"bb62493.c90b9b8","reconnectTimeout":30000,"x":680,"y":420,"wires":[["d9602475e9621fc9","17a5572.c9bdea9","4668a261.89730c","f0be6569.37883"],["d553721c.049278","02ad55e4c08f4a42"]]},{"id":"bb62493.c90b9b8","type":"unifi-access-controller","name":"Bloken","controllerIp":"10.0.0.1"}]
I've been getting push updates from this endpoint for months now. Actually I've sorted it enough that I'm watching smart detect events being pushed to nodered from the websocket! Have a look at my kids headed to school this morning (most recent smart detect)
Great to see that it should be working. 🙂 Actually, I do have a flow to get the last update ID from the bootstrap
endpoint, which appears to be working, set up in the way described in the README. However, it was unclear to me what I should be putting in the endpoint
field for the websocket node. I figured it should be empty because the function feeds an endpoint into the node, but you have /proxy/protect/ws/updates?
as an endpoint. Does that make a difference?
Also, I had to restart Node-RED to get rid of the 1006 errors, because multiple instances of the websocket node seemed to be lingering in the background, hammering my logs with this error.
but you have /proxy/protect/ws/updates? as an endpoint. Does that make a difference?
I don't actually know if it makes any difference... I know this works for me though! I have a couple other endpoints as well.
To check, are you on UDM-Pro? Restarting nodered after a bit of struggle to set up is a great idea. Some connections might get "lost" ... If you still see the 1006 you may need to delete all your unifi nodes, restart, then add fresh with the corrected setups.
PS: if you learn some things and want to make a PR to add information to the readme, please do! We are still very early production in this node-red-contrib.
PS: if you learn some things and want to make a PR to add information to the readme, please do! We are still very early production in this node-red-contrib.
I would, but my JS skills are virtually non-existent. ;) I mainly do Rust, Kotlin, Java, Obj-C and Swift.
To check, are you on UDM-Pro?
I am! Everything seems to be working properly now, although I can't for the life of me figure out what endpoint you retrieve that smart detect image from? The only protect endpoints that I can find are bootstrap, cameras and updates?
Started discussion #30 for the endpoints and smart detect chat.
I have a websocket node that connects to my UDM Pro to the
/proxy/protect/ws/updates
endpoint, and it receives data successfully, but every so often it disconnects with an error 1006 after which it reconnects after a couple of seconds. In the logs, I can see this:The error repeats every 30 seconds, which correlates with the reconnect timeout of 30000ms set in the node.
I am using version 0.5.0 of this project in Node-RED v2.0.6.