Split app/consumer into DeviceManager, Consumer, and ConsumerNode