The author -- Frank Hunleth gave a talk at Erlang Factory last year about it:
http://www.erlang-factory.com/sfbay2014/frank-hunleth (Building an IP Network Camera)
It was fun and he did a demo too.
The idea was that Erlang works very well as an init/supervisor on an embedded system.
Erlang processes map very well to a full OS processes but on a smaller scale -- tiny stack space (a couple K) + but heaps are isolated. There is also a C API which makes it nice to interface with hardware.
Having no experience with it (and having background in Node.js), websockets sounded like a way to go at first but I didn't see it mentioned much in that context, on the other hand I heard about few projects who use messaging systems like RabbitMQ and similar to transfer data back and forth. Thoughts?
Other projects might use MQTT -- a messaging system built for smaller devices (instead of say AMQP). RabbitMQ has a driver for it:
http://www.rabbitmq.com/blog/2012/09/12/mqtt-adapter/
But if you can get any server that supports websockets and have websocket clients in your client code (if you don't use a browser). Then you can roll your own messages using JSON or even binary.
Also one big unknown to me is updating the devices. I skimmed the nerves website and the slides from the talk and it looks like the only way is to write directly to the device SD card, there's no over-the-air updates?
https://github.com/fhunleth/fwup
It is a firmware updater. It seems one mode is the basic create whole disk image and replace. The other is can handle update "tasks".
Now in general Erlang was built to handle hot-code updates. Basically replace the code while the code is running (have use immutable data structures and have specials facilities built it).
But that can be tricker to set up and if you have C code or hardware control, it might not work as well. So upload firmware then reboot might work (I am just guessing here since I don't know any details or goals).
For bigger systems, RabbitMQ is pretty nice.