Hello Bart,
looks like you are never running out of ideas
for the basic part of my surveillance system i'm using the below setup
- Old 4GB 2Ghz laptop with Ubuntu docker and SSD drive
- Node-Red is running in docker on this system
- I use MotionEye for my basic video surveillance as well on this docker
- the system can store video-files(high-res) and images per motion-event
- I have setup 6 RTSP (cheap Chinese 4k cameras) cameras
- 2 cameras are configured for motion detection (front of house)
- remaining are just taking regular snapshots (every minute) of surrounding of house
- all recordings are stored on my local NAS (accessible form Node-Red and even PLEX)
- all motion alerts are triggered via webhooks to Node-Red which is sending the alert-video via telegram to my phone and showing the video on my dashboard
- all camera live-streams are visible in Node-Red
- I maintain an alert-list in Node-Red with the corrosponding Video-file-name (stored on NAS) and I'm able to replay any alert on request
The overall system is very performant (laptop is max 60% utilized) when doing motion-detection for 2 camera's. I did try with motion-detection with 4 camera's but than the utilization goes up to 90%.
I have done some trial-run with face and object detection and it was really good in regards of performance and quality during day but my cheap camera's quality is not always sufficient at night.
Code for live-Streaming cameras:
[{"id":"769295e6.93ea2c","type":"ui_template","z":"ab5f702e.d6756","group":"ba96c8f1.4fb378","name":"Just a view of cameras","order":4,"width":18,"height":12,"format":"<!DOCTYPE html>\n<html>\n<style>\nimg {\n border: 1px solid #ddd;\n border-radius: 8px;\n padding: 2px;\n width: 905px;\n}\n</style>\n\n<script type=\"text/javascript\">\nscope.$watch('msg', function(msg) {\n inMessage(msg.payload);\n});\n\nfunction updatePic() {\n document.getElementById('c51').src = \"http://192.168.2.202:8083\";\n document.getElementById('c52').src = \"http://192.168.2.202:8084\";\n document.getElementById('c53').src = \"\";\n document.getElementById('c54').src = \"\";\n document.getElementById('c55').src = \"\";\n document.getElementById('c56').src = \"\";\n document.getElementById('c57').src = \"\";\n document.getElementById('c58').src = \"\";\n //alert('updated pics');\n}\n\nfunction inMessage(event) {\n if (event.match('checkWeb')) {\n updatePic();\n }\n}\n\n</script>\n<center>\n<table>\n <tr><!-- Row 1 -->\n \t\t<td style=\"text-align: center\"><img src=\"\" id=\"c51\" /></td>\n </tr>\n <tr><!-- Row 2 -->\n \t\t<td style=\"text-align: center\"><img src=\"\" id=\"c52\" /></td>\n </tr>\n</table>\n</center>\n</html>","storeOutMessages":false,"fwdInMessages":false,"resendOnRefresh":false,"templateScope":"local","x":620,"y":1600,"wires":[[]]},{"id":"bb5fdb34.e3dd88","type":"inject","z":"ab5f702e.d6756","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"600","crontab":"","once":true,"onceDelay":"10","topic":"","payload":"checkWeb","payloadType":"str","x":390,"y":1600,"wires":[["769295e6.93ea2c"]]},{"id":"ba96c8f1.4fb378","type":"ui_group","name":"Test","tab":"df07ccac.714e9","order":12,"disp":true,"width":"18","collapse":false},{"id":"df07ccac.714e9","type":"ui_tab","name":"LiveVideo","icon":"dashboard","disabled":false,"hidden":false}]
Code to stream a file from NAS
[{"id":"4eea8074.110a6","type":"ui_template","z":"fc48425a.4aeab","group":"2a107b87.e25264","name":"Vid_screen","order":2,"width":12,"height":7,"format":"<div>\n <video id=\"video\" width=\"100%\" heigth=\"100%\"></video>\n</div>\n\n<script> \n (function(scope) {\n // Watch for messages being send to this template node\n scope.$watch('msg', function (msg) { \n if (msg) {\n\n var video = document.getElementById('video');\n video.src = msg.filename;\n video.play();\n } \n }); \n })(scope); \n</script>\n\n\n\n","storeOutMessages":false,"fwdInMessages":true,"resendOnRefresh":true,"templateScope":"local","x":1610,"y":320,"wires":[["68cfebac.08e884"]]},{"id":"2a107b87.e25264","type":"ui_group","z":"","name":"Last Event","tab":"1f273d9.25be8c2","order":1,"disp":true,"width":"12","collapse":false},{"id":"1f273d9.25be8c2","type":"ui_tab","z":"","name":"Security","icon":"fa-video-camera","order":2,"disabled":false,"hidden":false}]
I'm curious on how your solution is progressing ... good luck