itadd the http listener daemon - dmt - source code for the kunsthal art installation Err parazyd.org 70 hgit clone git://parazyd.org/dmt.git URL:git://parazyd.org/dmt.git parazyd.org 70 1Log /git/dmt/log.gph parazyd.org 70 1Files /git/dmt/files.gph parazyd.org 70 1Refs /git/dmt/refs.gph parazyd.org 70 1README /git/dmt/file/README.md.gph parazyd.org 70 1LICENSE /git/dmt/file/LICENSE.gph parazyd.org 70 i--- Err parazyd.org 70 1commit 94b9549f46cc6c7728b51c6f22e9a6e1a31d15a1 /git/dmt/commit/94b9549f46cc6c7728b51c6f22e9a6e1a31d15a1.gph parazyd.org 70 1parent 4ac934837cf0043f9801867dc248265112fa7cee /git/dmt/commit/4ac934837cf0043f9801867dc248265112fa7cee.gph parazyd.org 70 hAuthor: parazyd URL:mailto:parazyd@dyne.org parazyd.org 70 iDate: Fri, 17 Nov 2017 22:28:51 +0100 Err parazyd.org 70 i Err parazyd.org 70 iadd the http listener daemon Err parazyd.org 70 i Err parazyd.org 70 iDiffstat: Err parazyd.org 70 i A http-api/README.md | 26 ++++++++++++++++++++++++++ Err parazyd.org 70 i A http-api/config.py | 17 +++++++++++++++++ Err parazyd.org 70 i A http-api/http_listener.py | 50 +++++++++++++++++++++++++++++++ Err parazyd.org 70 i Err parazyd.org 70 i3 files changed, 93 insertions(+), 0 deletions(-) Err parazyd.org 70 i--- Err parazyd.org 70 1diff --git a/http-api/README.md b/http-api/README.md /git/dmt/file/http-api/README.md.gph parazyd.org 70 it@@ -0,0 +1,26 @@ Err parazyd.org 70 i+http-listener Err parazyd.org 70 i+============= Err parazyd.org 70 i+ Err parazyd.org 70 i+http-listener is a small Flask daemon acting as a HTTP API listening for Err parazyd.org 70 i+callbacks from the FreePBX log handler. Err parazyd.org 70 i+ Err parazyd.org 70 i+It offers callbacks for `/callanswered` and `/callended`. Err parazyd.org 70 i+ Err parazyd.org 70 i+The former will mute the playback of our sound input on the speakers and Err parazyd.org 70 i+enable it on the phone. Err parazyd.org 70 i+ Err parazyd.org 70 i+The latter will do the opposite. Err parazyd.org 70 i+ Err parazyd.org 70 i+ Err parazyd.org 70 i+Dependencies Err parazyd.org 70 i+------------ Err parazyd.org 70 i+ Err parazyd.org 70 i+``` Err parazyd.org 70 i+python3-flask Err parazyd.org 70 i+``` Err parazyd.org 70 i+ Err parazyd.org 70 i+ Err parazyd.org 70 i+Deployment Err parazyd.org 70 i+---------- Err parazyd.org 70 i+ Err parazyd.org 70 i+Deploy this by running `./http_listener.py` on the Caller Station. Err parazyd.org 70 1diff --git a/http-api/config.py b/http-api/config.py /git/dmt/file/http-api/config.py.gph parazyd.org 70 it@@ -0,0 +1,17 @@ Err parazyd.org 70 i+# See LICENSE file for copyright and license details. Err parazyd.org 70 i+""" Err parazyd.org 70 i+HTTP API handler configuration Err parazyd.org 70 i+""" Err parazyd.org 70 i+ Err parazyd.org 70 i+# We are using the following USB sound card: Err parazyd.org 70 i+# input: GeneralPlus USB Audio Device as /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.3/0003:1B3F:2008.0003/input/input17 Err parazyd.org 70 i+# hid-generic 0003:1B3F:2008.0003: input,hidraw0: USB HID v2.01 Device [GeneralPlus USB Audio Device] on usb-0000:00:1a.0-1.2/input3 Err parazyd.org 70 i+ Err parazyd.org 70 i+# Card number (found in ALSA) Err parazyd.org 70 i+cardno = '1' Err parazyd.org 70 i+ Err parazyd.org 70 i+# Mic capture line (for amixer) Err parazyd.org 70 i+mic_cap = "numid=4,iface=MIXER,name='Mic Playback Volume'" Err parazyd.org 70 i+ Err parazyd.org 70 i+# Mic playback line (for amixer) Err parazyd.org 70 i+mic_play = "numid=8,iface=MIXER,name='Mic Capture Volume'" Err parazyd.org 70 1diff --git a/http-api/http_listener.py b/http-api/http_listener.py /git/dmt/file/http-api/http_listener.py.gph parazyd.org 70 it@@ -0,0 +1,50 @@ Err parazyd.org 70 i+#!/usr/bin/env python3 Err parazyd.org 70 i+# See LICENSE file for copyright and license details. Err parazyd.org 70 i+""" Err parazyd.org 70 i+HTTP API handler for the Caller Station Err parazyd.org 70 i+""" Err parazyd.org 70 i+ Err parazyd.org 70 i+from subprocess import Popen Err parazyd.org 70 i+from flask import Flask Err parazyd.org 70 i+ Err parazyd.org 70 i+from config import (cardno, mic_cap, mic_play) Err parazyd.org 70 i+ Err parazyd.org 70 i+APP = Flask(__name__) Err parazyd.org 70 i+ Err parazyd.org 70 i+ Err parazyd.org 70 i+@APP.route('/') Err parazyd.org 70 i+def main(): Err parazyd.org 70 i+ """ Err parazyd.org 70 i+ Main routine (noop) Err parazyd.org 70 i+ """ Err parazyd.org 70 i+ return '\n' Err parazyd.org 70 i+ Err parazyd.org 70 i+ Err parazyd.org 70 i+@APP.route('/callanswered') Err parazyd.org 70 i+def callanswered(): Err parazyd.org 70 i+ """ Err parazyd.org 70 i+ Handler for the answered phone call. Err parazyd.org 70 i+ """ Err parazyd.org 70 i+ print('Call answered') Err parazyd.org 70 i+ Err parazyd.org 70 i+ Popen(['amixer', '-c', cardno, 'cset', mic_play, '0']) Err parazyd.org 70 i+ Popen(['amixer', '-c', cardno, 'cset', mic_cap, '100']) Err parazyd.org 70 i+ Err parazyd.org 70 i+ return 'Call answered\n' Err parazyd.org 70 i+ Err parazyd.org 70 i+ Err parazyd.org 70 i+@APP.route('/callended') Err parazyd.org 70 i+def callended(): Err parazyd.org 70 i+ """ Err parazyd.org 70 i+ Handler for the ended phone call. Err parazyd.org 70 i+ """ Err parazyd.org 70 i+ print('Call ended') Err parazyd.org 70 i+ Err parazyd.org 70 i+ Popen(['amixer', '-c', cardno, 'cset', mic_play, '100']) Err parazyd.org 70 i+ Popen(['amixer', '-c', cardno, 'cset', mic_cap, '0']) Err parazyd.org 70 i+ Err parazyd.org 70 i+ return 'Call ended\n' Err parazyd.org 70 i+ Err parazyd.org 70 i+ Err parazyd.org 70 i+if __name__ == '__main__': Err parazyd.org 70 i+ APP.run(host='0.0.0.0', port=8000, threaded=True, debug=True) Err parazyd.org 70 .