Initial bt-audio implementation
This commit is contained in:
parent
71a05b8f98
commit
09d8dc6ccb
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,3 +1,6 @@
|
||||
# bt-audiopaser
|
||||
bt-audioparser/config.py
|
||||
|
||||
# ---> Linux
|
||||
*~
|
||||
|
||||
|
6
.gitmodules
vendored
Normal file
6
.gitmodules
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
[submodule "bt-audioparser/report"]
|
||||
path = bt-audioparser/report
|
||||
url = https://git.mount-mockery.de/pylib/report.git
|
||||
[submodule "bt-audioparser/mqtt"]
|
||||
path = bt-audioparser/mqtt
|
||||
url = https://git.mount-mockery.de/pylib/mqtt.git
|
3
bt-audioparser/README.md
Normal file
3
bt-audioparser/README.md
Normal file
@ -0,0 +1,3 @@
|
||||
# Prerequires
|
||||
- Make executing user member of group systemd-journal to be able to parse the journal
|
||||
- Install python3-dev, libsystemd-dev to be able to create venv
|
56
bt-audioparser/bt-audioparser.py
Normal file
56
bt-audioparser/bt-audioparser.py
Normal file
@ -0,0 +1,56 @@
|
||||
import config
|
||||
import logging
|
||||
import mqtt
|
||||
import report
|
||||
import select
|
||||
from systemd import journal
|
||||
|
||||
|
||||
try:
|
||||
from config import APP_NAME as ROOT_LOGGER_NAME
|
||||
except ImportError:
|
||||
ROOT_LOGGER_NAME = 'root'
|
||||
logger = logging.getLogger(ROOT_LOGGER_NAME).getChild('main')
|
||||
|
||||
|
||||
PLAY = "New A2DP transport"
|
||||
STOP = "Closing A2DP transport"
|
||||
|
||||
def send_state_msg_mqtt(mc, state):
|
||||
topic = config.MQTT_TOPIC + "/state"
|
||||
logger.info("Sending BT-Audio status information to mqtt %s = %s", topic, str(state))
|
||||
mc.send(topic, "true" if state else "false")
|
||||
|
||||
def send_title_msg_mqtt(mc, title):
|
||||
topic = config.MQTT_TOPIC + "/title"
|
||||
logger.info("Sending BT-Audio status information to mqtt %s = %s", topic, title)
|
||||
mc.send(topic, title)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
report.stdoutLoggingConfigure(((config.APP_NAME, config.LOGLVL), ), fmt=config.formatter)
|
||||
|
||||
mc = mqtt.mqtt_client(config.APP_NAME, config.MQTT_SERVER, 1883, config.MQTT_USER, config.MQTT_PASS)
|
||||
|
||||
j = journal.Reader()
|
||||
j.log_level(journal.LOG_INFO)
|
||||
j.add_match(_SYSTEMD_UNIT="bluealsa.service")
|
||||
|
||||
j.seek_tail()
|
||||
j.get_next()
|
||||
|
||||
playing = False
|
||||
send_state_msg_mqtt(mc, playing)
|
||||
while True:
|
||||
while j.get_next():
|
||||
for entry in j:
|
||||
if entry['MESSAGE'] != "":
|
||||
if playing:
|
||||
if STOP in entry['MESSAGE']:
|
||||
playing = False
|
||||
send_state_msg_mqtt(mc, playing)
|
||||
else:
|
||||
if PLAY in entry['MESSAGE']:
|
||||
playing = True
|
||||
send_state_msg_mqtt(mc, playing)
|
||||
logger.debug(str(entry['__REALTIME_TIMESTAMP'] )+ ' ' + entry['MESSAGE'])
|
5
bt-audioparser/bt-audioparser.sh
Executable file
5
bt-audioparser/bt-audioparser.sh
Executable file
@ -0,0 +1,5 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
BASEPATH=`dirname $0`
|
||||
$BASEPATH/venv/bin/python $BASEPATH/bt-audioparser.py
|
||||
|
22
bt-audioparser/config_example/config.py
Normal file
22
bt-audioparser/config_example/config.py
Normal file
@ -0,0 +1,22 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: UTF-8 -*-
|
||||
import os
|
||||
import report
|
||||
|
||||
MQTT_USER = "<mqtt_smarthome_username>"
|
||||
MQTT_PASS = "<mqtt_smarthome_password>"
|
||||
MQTT_SERVER = "<mqtt_smarthome_hostname>"
|
||||
MQTT_TOPIC = "<mqtt_bt_audio_topic>"
|
||||
|
||||
#
|
||||
# Logging
|
||||
#
|
||||
__BASEPATH__ = os.path.abspath(os.path.dirname(__file__))
|
||||
APP_NAME = "btaudio"
|
||||
LOGTARGET = 'stdout' # possible choices are: 'logfile' or 'stdout'
|
||||
LOGLVL = 'INFO'
|
||||
|
||||
LOGHOST = 'cutelog'
|
||||
LOGPORT = 19996
|
||||
|
||||
formatter = report.SHORT_FMT
|
8
bt-audioparser/init_venv
Executable file
8
bt-audioparser/init_venv
Executable file
@ -0,0 +1,8 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
BASEPATH=`realpath $(dirname $0)`
|
||||
|
||||
python3 -m venv $BASEPATH/venv
|
||||
$BASEPATH/venv/bin/pip install --upgrade pip
|
||||
find $BASEPATH -name requirements.txt | xargs -L 1 $BASEPATH/venv/bin/pip install -r
|
||||
$BASEPATH/venv/bin/pip list --outdated --format=json | jq -r '.[] | .name'|xargs -n1 $BASEPATH/venv/bin/pip install -U
|
1
bt-audioparser/mqtt
Submodule
1
bt-audioparser/mqtt
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 328d3471a748472695a61193becdda76c7eefe69
|
1
bt-audioparser/report
Submodule
1
bt-audioparser/report
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit b53dd30eae1d679b7eec4999bec50aed55bc105b
|
1
bt-audioparser/requirements.txt
Normal file
1
bt-audioparser/requirements.txt
Normal file
@ -0,0 +1 @@
|
||||
systemd-python
|
1
bt-receiver/bt-pins
Normal file
1
bt-receiver/bt-pins
Normal file
@ -0,0 +1 @@
|
||||
* *
|
23
bt-receiver/bt-receiver
Executable file
23
bt-receiver/bt-receiver
Executable file
@ -0,0 +1,23 @@
|
||||
#!/bin/sh -e
|
||||
#
|
||||
|
||||
if [[ $UID != 0 ]]; then
|
||||
echo "This script needs to be executes as root"
|
||||
exit 13
|
||||
fi
|
||||
|
||||
BASEPATH=$(dirname `readlink -f "$0"`)
|
||||
|
||||
|
||||
# Make BT discoverable:
|
||||
sudo bluetoothctl <<EOF
|
||||
power on
|
||||
agent off
|
||||
agent NoInputNoOutput
|
||||
default-agent
|
||||
discoverable on
|
||||
pairable on
|
||||
EOF
|
||||
|
||||
# Start bt-agent
|
||||
sudo bt-agent --capability=DisplayOnly -p $BASEPATH/bt-pins
|
Loading…
x
Reference in New Issue
Block a user