https://blog.packagecloud.io/eng/2017/02/21/set-environment-variable-save-thousands-of-system-calls/
Monthly Archives: February 2017
How to control a switch by audio
Copy the following files into a directory (e.g. /opt/audio-switch)
rx-audio-adapter.sh
#!/bin/bash rm rx.log while true do rm in.wav rec in.wav silence 1 0.1 3% 1 3.0 3% rx=$(./dtmf2num in.wav | tail -n 1 | cut -c 18-) echo $rx >> rx.log if [ "$rx" == "1" ]; then echo switch ON >> rx.log curl http://localhost:8080/on elif [ "$rx" == "D" ]; then echo switch OFF >> rx.log curl http://localhost:8080/off else echo unknown command >> rx.log fi sleep 1 done
usb-switch-service.py
Python dependencies: pyserial, web.py
import serial import time import json import web # /status -> return the status of the switch (on/off) # /on -> turn ON the switch and return the status (on/off) # /off -> turn OFF the switch and return the status (on/off) urls = ( '/(.*)', 'ActionController' ) app = web.application(urls, globals()) ser = serial.Serial('/dev/ttyUSB0') class ActionController: def GET(self, action): status = "" if action == 'status': print "status" status = ser.dsr elif action == 'on': print "on" ser.dtr = True time.sleep(0.1) status = ser.dsr elif action == 'off': print "off" ser.dtr = False time.sleep(0.1) status = ser.dsr else: print "unknown command" status = ser.dsr return json.dumps(status) if __name__ == "__main__": app.run()
start-switch.sh
#!/bin/bash pushd /opt/audio-switch # start usb-switch-service python usb-switch-service.py > /tmp/usb-switch-service.log & sleep 5 curl http://localhost:8080/off # start rx-audio-adapter rm in.wav nohup ./rx-audio-adapter.sh > /dev/null 2>&1 & popd
dtmf2num
wget http://aluigi.altervista.org/mytoolz/dtmf2num.zip
then compile it (make).
DTMF tones
The DTMF tone files can be generated from here:
http://www.audiocheck.net/audiocheck_dtmf.php
The rx-audio-adapter can be tested with the following script:
loop.sh
#!/bin/bash while true do aplay audiocheck.net_dtmf_1.wav sleep 10 aplay audiocheck.net_dtmf_D.wav sleep 10 done