Ooma VOIP service provides a Do Not Disturb feature to it’s Premiere Subscribers. Unfortunately, the usefulness of this service is greatly hampered by an inability to schedule when Do Not Disturb is enabled. Instead, you have to manually dial a special code to enable (*78) and disable (*79) Do Not Disturb. It gets quite tiresome to remember to enable/disable this feature, which for me made it next to useless.

But with a Raspberry Pi (or really any computer) and a 56K USB modem, automating Do Not Disturb for Ooma is actually quite straightforward! Which is a lifesaver for me, my wife, and my 1 year old son that doesn’t respond well to telemarketers calling at 8 or 9 o’clock at night.

Here’s what you need:

Raspberry Pi or other Linux computer – I chose the Pi because I had one sitting around, and it’s perfect for leaving on all the time since it’s very friendly from an energy consumption perspective. 56K USB Modem – The first modem I ordered did NOT have available Linux drivers, so be sure to get one that does, or better yet, order the one I used, a USRobotics USR5637. Small Phone Line and Splitter – Click here for the splitter I used. Any old RJ11 US telephone line will work for connecting the modem.

Here’s how things get wired up from the phone/modem perspective:

Once wired, boot your Raspberry Pi and plug in your new modem. Open up a Terminal on the Rpi and execute the following:

dmesg

In addition to other previous output, you should get something similar to the following near the bottom:

[66465.356086] usb 1-1.4: USB disconnect, device number 5

[66479.668610] usb 1-1.4: new high-speed USB device number 20 using dwc_otg

[66479.769773] usb 1-1.4: New USB device found, idVendor=0baf, idProduct=0303

[66479.769800] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=10

[66479.769818] usb 1-1.4: Product: USB Modem

[66479.769834] usb 1-1.4: Manufacturer: U.S.Robotics

[66479.769850] usb 1-1.4: SerialNumber: 0000002

[66479.801209] cdc_acm 1-1.4:2.0: ttyACM0: USB ACM device

[66479.802014] usbcore: registered new interface driver cdc_acm

[66479.802032] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters

We’re looking for where the new modem was mounted, specifically this line (mine was mounted at /dev/ttyACM0:

[66479.801209] cdc_acm 1-1.4:2.0: ttyACM0: USB ACM device

Nice! The modem is up and working. Now we need a script to talk to it. Well, a couple scripts, actually. We’ll be using a minicom script to send the *78/*79 numbers to Ooma.

Using your favorite editor (mine is vim), create a new file called dnd-off.mini, and paste in the following:

send ATD*79

sleep 3

! killall -15 minicom



Create another file called dnd-on.mini, and fill it with:

send ATD*78

sleep 3

! killall -15 minicom

You can immediately test these two scripts. Make sure they are both executable (e.g., chmod +x dnd-on.mini ) and test them out ( minicom -S dnd-on.mini -D /dev/ttyACM0 ). Make sure you fill in the correct path to your script, and use the correct device. If everything is working correctly, you should see the light on top of your Ooma box turn purple, indicating that Do Not Disturb is active. You can run the -off version of the script to disable it, and your Ooma light should turn blue. See how easy that was??

Now for the automation part. I created a “parent” script that, when given the appropriate command line parameter, will execute either the -on or -off version of the script. Open up your text editor again to create a ‘dnd’ shell script:

#!/bin/bash

if [ $1 == "enable" ]; then

minicom -S /home/pi/scripts/dnd-on.mini -D /dev/ttyACM0

elif [ $1 == "disable" ]; then

minicom -S /home/pi/scripts/dnd-off.mini -D /dev/ttyACM0

fi

You can test this script by itself. Make it executable and then run it with ./dnd enable or ./dnd disable . You should see minicom fire up, dial the appropriate number, and then kill itself.

Last but not least, the scheduling part! My son goes to bed at 7pm and gets up at 6am, so that is my “window of silence”. All you have to do is edit the crontab on the Pi to execute the appropriate enable/disable command at the appropriate time every day. Here’s what my crontab looks like for my window. You can do the same for yours by editing crontab with crontab -e . If you want a cool way to easily decipher cron listings, check out Corntab. NOTE – minicom and cron don’t play well together, because minicom expects access to a terminal. To get by this, we can launch minicom in a GNU screen session in the background. Here’s how you do that in your crontab:

0 19 * * * screen -d -m /home/pi/scripts/dnd enable

0 6 * * * screen -d -m /home/pi/scripts/dnd disable



Done! With less than 30 minutes worth of work we’ve shimmed Ooma’s Do Not Disturb service to be much MUCH more usable. Be sure to leave a comment below if this helped you out!