You should go simple and pick something like Python, add some unit tests to check your logic is sound. Everyone would understand Python, easy to edit and update.
> Systems like these are difficult to fit into the rigid, sequential execution model of imperative languages. The traditional way to implement them involves the use of threads, observers, callbacks and timers. The resulting code is typically error prone, brittle and unnecessarily complex.
Python is really not very good at this kind of thing and neither are most other conventional languages.
Erlang is the only language that comes to mind that can handle this stuff at scale.
Sure, if you have a fast enough machine and not too many asynchronous things going on, you might be able to hack something up in Python. But it's not gonna scale at all well.
I'm not saying that this language is good at it, mind you -- I haven't even looked at it -- but they definitely have a point here.
If I must have a central server and database then I'll totally do it that way.
The question is whether I can go without the centralization entirely and just have the devices (which are Arduino grade and not running python anyway) talk to each other.