The system is being designed to either work as a single node (headless or not) that pulls in and logs sensor feeds. The goal is to allow a user (or another system) to poll the logging node(s) for data. Eventually, it is hoped that the system will be able to make semi-intelligent decisions based upon multiple sensor feeds (room occupancy, visitors versus burglars, pet versus human discrimination, etc). If multiple nodes are present, the system is designed to report sensor information in a relevant fashion.
By "relevant", the system is being designed to gather sensor data and report it using specifically defined criteria (too hot, too cold, periodic updates, or a change in criteria based on other sensor inputs). The node itself is constantly monitoring the sensor feeds using multi-threading. Only when specified criteria are met, are the sensor feeds being reported to the logging system. No one needs to be continually updated that the flood sensor is dry, but it's important to know that it's still running.
In the same vein, the system needs to be able to "give" data as needed. I would like to be able to pro-actively pull data to the logging node(s)/reporting node(s) as needed. Has the garage heard ANY sounds in the last hour, not just the sounds that meet the reportable criteria?
With just me doing this, everything's being written in Python 2.x. I tried doing a project before in 3.x, and wound up back-porting it. I'm going with the path of least resistance.
Initially, the sensors consist of I2C sensors. I'm working on a full-on library for the DS18B20 thermometers. I'm going to tie in one of my other projects, a Pi Network monitor (https://hackaday.io/project/6686-raspberry-pi-macip-monitor), so that it can also report. I'd like to eventually include cameras (both the Pi camera, and USB cameras), digital I/O's (Motion detectors being high on that list), and a bluetooth proximity tracker. With those sensors included, I should be able to not only determine room occupancy, but who is in the room.
Currently I'm the only one working on this. I've got a wonderful full-time job that keeps me busy, another job on the side, and I try to help out in the community. If you've got constructive ideas, thoughts, etc, share 'em! If you want to pitch in, let 'er rip! If you want to use the code, please let me know what you're doing with it. If you're going commercial with it, cut me in for a slice. Student loans are a horrible thing, and it's a burden I want to get rid of in the worst way possible.
So... now that there's a Contest... Why is this important?
Simple. The internet ushered in a completely new age of capability. At our fingertips is more data than someone just a couple of decades before could have hoped to encounter in their lifetime. In several lifetimes.
The Internet of Things can revolutionize that for ourselves, not just the world around us. There is an amazing amount of information around us that slips through our fingers, that our devices aren't smart enough to handle (yet). The first step is gathering the data, but the next step will be tailoring the systems around us to use that data, in context.
The goal isn't to make a simple Raspberry Pi sensor, but to make a system that can bring in all of the data that is thrown at it, and determine meaningful conclusions from that data.
I'm mucking about with switching the logging protocol over to UDP. The rationale behind this comes at a couple of levels. The networks that we're looking at are pretty simple, home networks. The message traffic is not sensitive, and the eventual goal is to have the Nodes capable of confirming receipt (if needed), or even reaching out and asking a sensor Node for a status update. Finally, there are a couple of logging/response/announcement messages that may dramatically benefit from a broadcast type packet.
If folks have thoughts on this, hit me up.