Some basic keyfacts:
2 board design: 1 double sided PowerBoard and a 4 Layer PCB with a Compute Module 3 on it
Everything is built do be modular. So you can easily exchange the Powerboard with an 5V regulator, connect your mouse, a keyboard and an USB-Graphics adapter to get a Raspberry Pi powered PC :)
The design concepts
Everything is USB
Well, that's not totally correct. The battery-voltage is read using I2C but otherwise, currently all sensors are connected by USB. BTW, we have 4 Ports: on the front, 1 inside and 2 on a header connector with standard pinout as found on a PC mainboard.
Speaking of the internal USB, this should be used in future revisions of the software for the 3G/4G uplink... currently I use a dongle which presents itself as ethernet device... less software but bigger dongle.
Everything is Secure
The internet connection now brings in some problems. First we need to get every network device safe. The good thing here is that Slackware Linux (I use this for now since it makes a great and fast solution for prototyping) is quite safe out of the box and 3g/4g networks with their NATs help us a lot.
The data transmission on the other side will need some more work. Here we use (and force!) TLS 1.2+. Both, the server and client have own certificates which are checked against the preshared CA certificate.
Everything is easy
Over the last years I found my biggest problem to be the time to get everything done right. Every time I had to make some ugly design decision just because of the time it would have needed to really make everything great. This time I tried to avoid this by making everything easy.
For example, I again use JSON as my communication format to the server. But with websockets, I now can now much easier make 2 way communication.
JSON seems to be odd for such M2M, IOT application if you do some research on that. MQTT for example is very often used because of its efficiency.
But what is efficient? For me it's the time I need to write and debug everything!
So I use JSON which is easy to read, easy to write (thanks to the Qt) and debug.
To make it efficient in terms of data-size... well, you can use websockets for binary data and Qt lets just make a gzip'ed string from an JSON object in 1 line :)
Everything is relaxed
That was my very first intention but because we make everything easy, only most parts are relaxed :)
So let's see, we cache all sampled data in a local Sqlite database. So we're relaxed here.
The data comes from USB sensors... so no low-level stuff like timing-issues,... => relaxed :)
We use all standardized protocols and formats (JSON, websockets, TLS) => relaxed
The serverside caches incoming data in a Sqlite databse (just in case) and pushes everything into a CouchDB. That's relaxed squared :)
Now for the not-so-relaxed parts: We have to make some of these Sensors... this is not so relaxed...
Everything is open
I'm busy at my day-job and I'm doing my PhD thesis in parallel... So I'll definitly make everything available online but this will come in small doses.
Licenses are not all clear for now... maybe Creative Commons NC or so for the PCBs and GPLv2/BSD for the Software... not yet decided.
Everything should be usable and buyable
Well, to be honest, this is not yet the case... I'll definitely will crowdfund a bigger batch of PCBs when I have all V2 board tested. If I'll try to get them assembled... not so sure.
Demo
Well, everybody whats to see something... as long as my VPS is capable of the traffic, you can see some live data here:
https://stalker.beestalker.eu/
This data (you see mostly test data... there's more in the background) is actually used in a professional apiculture.
Downloads
Give me some time...
some more information can be found in the old project (https://hackaday.io/project/10145-cm3-board-backend-library-bee-hive-monitor)