User-local OpenMRS deployments on Microcomputers

I’m going to be implementing OpenMRS for Compañeros en Salud, in Chiapas. I could use some advice about designing the system, large scale. I’m a tech guy but totally new to OpenMRS.

We have a hub office with 12 satellite clinics, each with one doctor, i.e. one MRS user. None of the clinics have access to the internet. They’re 0.5-4 hours journey from the hub. There’s an existing MRS based on MS Access. Currently the doctors bring their data into the hub once a month on a flash drive, where the agglomerated data is used to make reports. Everyone works off of their own laptop. So each MRS database has one user at a time, and is kept local to that user’s laptop.

I’m thinking that the best way to do this might be to get 12 USB microcomputers (e.g. Raspberry Pi, ODROID-C2, NanoPC-T4) that we can distribute to the clinics. We’d have each be an OpenMRS server. The doctors can bring the microcomputer back and forth once a month, so we can transfer data to the hub database and deploy updates to the microcomputer when needed.

Are there existing production deployments on microcomputers, or with this kind of setup more generally? Are there existing production systems working with these kinds of constraints (offline, single-user, siloed clinics)? Anyone have a better sense of how to architect this?

EDIT 2018-07-06 to make it about microcomputer servers generally rather than just Raspberry Pis (which people say are not powerful enough for the job).

2 Likes

Hi @bistenes , I am not very experienced when it comes to the implementation of OpenMRS under limited resources and as to how well it scales. However, simple I am quite familiar with the raspberry pi, here are a few things that I’ve noticed in general about the pi.

  • Assuming you have only a few 100s of patients maximum, it should just about meet the minimum criteria. These criteria are stated here. However it may be noted that this wiki was last edited in 2010 so everything that’s written there may not be downright correct and have mostly changed significantly.
  • The PI is not the most stable server in my opinion. It loses power easily and databases can easily get corrupted if it shuts down suddenly for some reason. I have had a bunch of times when such a thing has happened.
  • I don’t think it will work out for OpenMRS Reg app with a bunch of modules too.
  • On the brighter side, it is a very cheap alternative to the traditional laptops.
  • You may also want to check out this post and connect with the author as well to ask him about his experience.

Lastly, I myself am curious as to how this goes so please do narrate your experience here once done.

I edited my original message to this effect, but it’s looking like, if I go this route with implementation, I’ll use a more powerful microcomputer, something like a ODROID or NanoPC.

Two problems. ODROID and NanoPCs are not USB-powered, which is how I’d imagined people using this thing. Something more like a PC stick (e.g. Intel Compute Stick) would be what’s called for.

Bigger problem: I’ve just realized that the need to gracefully handle loss of power makes this a lot more difficult. Failure to gracefully shut down would lead to data corruption, eventually. Either

  1. The device would have to have a small backup battery, and initiate a shutdown sequence when it stops getting power from the host computer. This is more hardware hackery than I’ve ever done, and certainly not something I’m going to saddle this organization with.

  2. Have the PC stick do a graceful shutdown of OpenMRS when someone hits the power button, and make sure doctors remember to power the thing down before they unplug it from their computer 100% of the time.

Configuring networking between the PC stick and host computer would also be nontrivial.

Steve Po-Chedley has recommended making OpenMRS-on-Ubuntu bootable USB flash drives. At the moment, this is the avenue I’m inclined to pursue.