Like many parents, since our first child arrived at the end of last year we have anxiously kept an eye on her using a baby monitor. When she was born we purchased a pram from an old friend and colleague, who kindly threw in a monitor that he no longer needed. It was a basic BT model, a simple microphone and speaker. Sometimes we lugged it with us when we travelled, but often we didn't want to carry the extra kit so improvised and made do with voice-over-IP apps on our phones.

On some trips we've had the opportunity to use a more advanced video baby monitor that uses an infrared night vision camera so that you can see what Baby is up to. It might sound like a gimmick, but we found it really did help when we needed to decide if the little one was just being fussy or really needed us to go in and settle her or provide medication.

All of these have their flaws. The off the shelf baby monitors have one receiver, so only one person can monitor Baby. If the battery runs down, you're tethered to a power socket for the next couple of hours. Also the charger is often specific to the device - no topping up from micro-USB, you'll need to carry the charger with you wherever you go (don't leave it at home!). VoIP apps aren't designed for this purpose and have no alarms in case of low battery or poor signal reception, so can't be trusted. At best they're a handy backup but you can't rely on them and let your guard down.

The thought occurred to me that someone must have written something open-sourcey to address these problems and I was not wrong. A quick search on F-Droid revealed Protect Baby Monitor , an Android app that will emulate an audio-only baby monitor between two phones. However I had mixed results using it and it doesn't seem to be actively maintained.

A bit of Googling turned up an alternative - Gonimo . Now this looked like a winner. Actively maintained and with an open development team responsive to feedback and queries (I have had a fairly lengthy discussion with them on their Github issues page). The project website describes how the code has been externally audited and received an exemplary review, an important reassurance for any code, but especially a baby monitor.

Gonimo running as a Chrome browser standalone app on Mac OS

It's great! Gonimo works on Android or on a desktop computer as a web app. Any device with a microphone can act as a monitor and provide a video feed if it has a camera. Any number of client devices can then be invited to connect and can do so simultaneously. The only drawback for me so far is the lack of iOS support.

After a brief trial period I decided Gonimo could replace our old baby monitor at home too. Having tested with two phones, I bought an IR camera to use with an old netbook running Lubuntu. Using a normal camera works with a light source but is useless in the dark and we didn't want the room lit. The IR camera hangs from the bedroom door, with cable routed around the door to the netbook by the bedside. Not very tidy, but we're only planning on using this for a year or two.

Most of the time we have the monitor up on the big TV screen. In the evening when we want to watch the TV or retire to the study we load it up on a laptop. When we want to go outside, cook or have a bath during nap time we can use our phones as the monitor, clipping it to a shelf or rail around the house.

The netbook running the monitor isn't very powerful but it can handle at least 2 clients concurrently, so we can both keep an eye out. And the grandparents have an invitation, so they can log in remotely if they ever want to join in for a bedtime story!

I wanted the monitor to be simple to use and as close to an appliance as possible, so that if a family member or babysitter took charge for an evening they would be able to use it. That meant setting up the netbook so that it was simply a case of pressing a button to turn the baby monitor on and again to turn it off.

To that end I configured the desktop (LXQT) to log in and start the Chrome browser automatically:

.config/autostart/Chrome Browser.desktop:

[Desktop Entry]
Exec=google-chrome --restore-last-session
Name=Chrome Browser
Type=Application
Version=1.0

Chrome restores the previous session, loading Gonimo automatically. Gonimo has a feature to start in monitor mode automatically on a device, which I have enabled. The only button on the exterior of the netbook (an Asus T101MT) produces keycode XF86ScreenSaver . I have set this to trigger suspend in .config/lxqt/globalkeyshortcuts.conf:

[XF86ScreenSaver.43]
Comment=Suspend
Enabled=true
Exec=lxqt-leave, --suspend

Suspend is configured to kill and restart Chrome, as I have found that immediately cleaning up old sessions helps with performance on the netbook with its limited resources. This is achieved with a script to be run on suspend by systemd, /lib/systemd/system-sleep/restart-chrome:

#!/bin/bash 

if [ "${1}" = "pre" ]; then
  # Do the thing you want before suspend here
  killall chrome
elif [ "${1}" = "post" ]; then
  # Do the thing you want after resume here
  su <username> -c "DISPLAY=:0 google-chrome --restore-last-session"
fi

Xscreensaver is disabled so that a password is no longer required on resume. The screen is set to time out after 5 minutes inactivity (the GF complained that the screen was lighting up the room).

I became a bit concerned about the safety of directly shining IR lamps at Baby (the science on the subject suggests it is perfectly safe, but still) so I made a deflector cone by cutting the end off an airhorn and sticking it over the lens. The IR lamps are occluded by the cone; a layer of aluminum foil on the back reflects the light from the lamps around the room to illuminate the scene indirectly.

Previous Post Next Post