Compare commits
6 Commits
standalone
...
pipewire
| Author | SHA1 | Date | |
|---|---|---|---|
| 89da140bb4 | |||
| 95cfea04ad | |||
| 3b9e74d5ee | |||
| 6feb10f49a | |||
| 2f67aec5bb | |||
| 85181b7d1e |
7
config/ap/add_ap.sh
Executable file
7
config/ap/add_ap.sh
Executable file
@@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
sudo nmcli con add con-name hotspot ifname wlan0 type wifi ssid "AGENT_GSM"
|
||||||
|
#sudo nmcli con modify hotspot wifi-sec.key-mgmt wpa-psk
|
||||||
|
#sudo nmcli con modify hotspot wifi-sec.psk "159357159357"
|
||||||
|
sudo nmcli con modify hotspot 802-11-wireless.mode ap 802-11-wireless.band bg ipv4.method shared ipv6.method shared
|
||||||
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
# Defaults for hostapd initscript
|
|
||||||
#
|
|
||||||
# WARNING: The DAEMON_CONF setting has been deprecated and will be removed
|
|
||||||
# in future package releases.
|
|
||||||
#
|
|
||||||
# See /usr/share/doc/hostapd/README.Debian for information about alternative
|
|
||||||
# methods of managing hostapd.
|
|
||||||
#
|
|
||||||
# Uncomment and set DAEMON_CONF to the absolute path of a hostapd configuration
|
|
||||||
# file and hostapd will be started during system boot. An example configuration
|
|
||||||
# file can be found at /usr/share/doc/hostapd/examples/hostapd.conf.gz
|
|
||||||
#
|
|
||||||
DAEMON_CONF="/etc/hostapd/hostapd.conf"
|
|
||||||
|
|
||||||
# Additional daemon options to be appended to hostapd command:-
|
|
||||||
# -d show more debug messages (-dd for even more)
|
|
||||||
# -K include key data in debug messages
|
|
||||||
# -t include timestamps in some debug messages
|
|
||||||
#
|
|
||||||
# Note that -B (daemon mode) and -P (pidfile) options are automatically
|
|
||||||
# configured by the init.d script and must not be added to DAEMON_OPTS.
|
|
||||||
#
|
|
||||||
#DAEMON_OPTS=""
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
# A sample configuration for dhcpcd.
|
|
||||||
# See dhcpcd.conf(5) for details.
|
|
||||||
|
|
||||||
# Allow users of this group to interact with dhcpcd via the control socket.
|
|
||||||
#controlgroup wheel
|
|
||||||
|
|
||||||
# Inform the DHCP server of our hostname for DDNS.
|
|
||||||
hostname
|
|
||||||
|
|
||||||
# Use the hardware address of the interface for the Client ID.
|
|
||||||
clientid
|
|
||||||
# or
|
|
||||||
# Use the same DUID + IAID as set in DHCPv6 for DHCPv4 ClientID as per RFC4361.
|
|
||||||
# Some non-RFC compliant DHCP servers do not reply with this set.
|
|
||||||
# In this case, comment out duid and enable clientid above.
|
|
||||||
#duid
|
|
||||||
|
|
||||||
# Persist interface configuration when dhcpcd exits.
|
|
||||||
persistent
|
|
||||||
|
|
||||||
# Rapid commit support.
|
|
||||||
# Safe to enable by default because it requires the equivalent option set
|
|
||||||
# on the server to actually work.
|
|
||||||
option rapid_commit
|
|
||||||
|
|
||||||
# A list of options to request from the DHCP server.
|
|
||||||
option domain_name_servers, domain_name, domain_search, host_name
|
|
||||||
option classless_static_routes
|
|
||||||
# Respect the network MTU. This is applied to DHCP routes.
|
|
||||||
option interface_mtu
|
|
||||||
|
|
||||||
# Most distributions have NTP support.
|
|
||||||
#option ntp_servers
|
|
||||||
|
|
||||||
# A ServerID is required by RFC2131.
|
|
||||||
require dhcp_server_identifier
|
|
||||||
|
|
||||||
# Generate SLAAC address using the Hardware Address of the interface
|
|
||||||
#slaac hwaddr
|
|
||||||
# OR generate Stable Private IPv6 Addresses based from the DUID
|
|
||||||
slaac private
|
|
||||||
|
|
||||||
# Example static IP configuration:
|
|
||||||
#interface eth0
|
|
||||||
#static ip_address=192.168.0.10/24
|
|
||||||
#static ip6_address=fd51:42f8:caae:d92e::ff/64
|
|
||||||
#static routers=192.168.0.1
|
|
||||||
#static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1
|
|
||||||
|
|
||||||
# It is possible to fall back to a static IP if DHCP fails:
|
|
||||||
# define static profile
|
|
||||||
#profile static_eth0
|
|
||||||
#static ip_address=192.168.1.23/24
|
|
||||||
#static routers=192.168.1.1
|
|
||||||
#static domain_name_servers=192.168.1.1
|
|
||||||
|
|
||||||
# fallback to static profile on eth0
|
|
||||||
#interface eth0
|
|
||||||
#fallback static_eth0
|
|
||||||
#
|
|
||||||
#
|
|
||||||
interface wlan0
|
|
||||||
static ip_address=192.168.45.1/24
|
|
||||||
static routers=192.168.45.1
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
interface=wlan0 # Listening interface
|
|
||||||
dhcp-range=192.168.45.10,192.168.45.20,255.255.255.0,24h # Pool of IP addresses for wireless clients
|
|
||||||
domain=wlan # Domain
|
|
||||||
address=/gw.wlan/192.168.45.1 # Alias for router
|
|
||||||
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
country_code=GB
|
|
||||||
interface=wlan0
|
|
||||||
ssid=AGENT_GSM
|
|
||||||
hw_mode=g
|
|
||||||
channel=7
|
|
||||||
macaddr_acl=0
|
|
||||||
auth_algs=1
|
|
||||||
ignore_broadcast_ssid=0
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
[Unit]
|
|
||||||
Description=dnsmasq - A lightweight DHCP and caching DNS server
|
|
||||||
Requires=network.target
|
|
||||||
Wants=network-online.target
|
|
||||||
Before=nss-lookup.target
|
|
||||||
After=network-online.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=forking
|
|
||||||
PIDFile=/run/dnsmasq/dnsmasq.pid
|
|
||||||
|
|
||||||
# Test the config file and refuse starting if it is not valid.
|
|
||||||
ExecStartPre=/usr/sbin/dnsmasq --test
|
|
||||||
|
|
||||||
# We run dnsmasq via the /etc/init.d/dnsmasq script which acts as a
|
|
||||||
# wrapper picking up extra configuration files and then execs dnsmasq
|
|
||||||
# itself, when called with the "systemd-exec" function.
|
|
||||||
ExecStart=/etc/init.d/dnsmasq systemd-exec
|
|
||||||
|
|
||||||
# The systemd-*-resolvconf functions configure (and deconfigure)
|
|
||||||
# resolvconf to work with the dnsmasq DNS server. They're called like
|
|
||||||
# this to get correct error handling (ie don't start-resolvconf if the
|
|
||||||
# dnsmasq daemon fails to start.
|
|
||||||
ExecStartPost=/etc/init.d/dnsmasq systemd-start-resolvconf
|
|
||||||
ExecStop=/etc/init.d/dnsmasq systemd-stop-resolvconf
|
|
||||||
|
|
||||||
|
|
||||||
ExecReload=/bin/kill -HUP $MAINPID
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
@@ -10,8 +10,8 @@ INSTALL_DIR=agent_gsm
|
|||||||
GIT_SOURCE=https://git.sevana.biz/public/agent_gsm
|
GIT_SOURCE=https://git.sevana.biz/public/agent_gsm
|
||||||
|
|
||||||
# Install prerequisites
|
# Install prerequisites
|
||||||
sudo apt install --assume-yes git mc python3 sox vim libffi-dev screen python3-pip python3-numpy dnsmasq hostapd
|
sudo apt install --assume-yes git mc python3 sox vim libffi-dev screen python3-pip python3-numpy dnsmasq hostapd screen
|
||||||
sudo pip3 install pyyaml sox pyrabbit soundfile dbus_python pexpect pydub requests rabbitpy pydub reachability bottle
|
sudo pip3 install pyyaml sox pyrabbit soundfile dbus_python pexpect requests rabbitpy bottle --break-system-packages
|
||||||
|
|
||||||
if [ -f "$INSTALL_DIR" ]; then
|
if [ -f "$INSTALL_DIR" ]; then
|
||||||
rm -rf "$INSTALL_DIR"
|
rm -rf "$INSTALL_DIR"
|
||||||
@@ -45,7 +45,7 @@ cp config/agent.in.yaml config/agent.yaml
|
|||||||
mkdir -p ~/.config/mc
|
mkdir -p ~/.config/mc
|
||||||
cp config/mc/ini ~/.config/mc
|
cp config/mc/ini ~/.config/mc
|
||||||
|
|
||||||
# Replace the values
|
# Replace the values - finish preparing the agent configuration file
|
||||||
if [[ $BACKEND_URL != "" ]]; then
|
if [[ $BACKEND_URL != "" ]]; then
|
||||||
sed -i "s|BACKEND|$BACKEND|" config/agent.yaml
|
sed -i "s|BACKEND|$BACKEND|" config/agent.yaml
|
||||||
fi
|
fi
|
||||||
@@ -56,11 +56,45 @@ fi
|
|||||||
|
|
||||||
sed -i "s|TASK_NAME|$TASK_NAME|" config/agent.yaml
|
sed -i "s|TASK_NAME|$TASK_NAME|" config/agent.yaml
|
||||||
|
|
||||||
# Update systemD unit file
|
|
||||||
cp config/systemd/agent_gsm.in.service config/systemd/agent_gsm.service
|
|
||||||
ABSOLUTE_INSTALL_DIR=`realpath .`
|
ABSOLUTE_INSTALL_DIR=`realpath .`
|
||||||
|
|
||||||
sed -i "s|ABSOLUTE_INSTALL_DIR|$ABSOLUTE_INSTALL_DIR|" config/systemd/agent_gsm.service
|
# Update systemD unit file
|
||||||
|
# cp config/systemd/agent_gsm.in.service config/systemd/agent_gsm.service
|
||||||
|
# sed -i "s|ABSOLUTE_INSTALL_DIR|$ABSOLUTE_INSTALL_DIR|" config/systemd/agent_gsm.service
|
||||||
|
|
||||||
|
install_ap() {
|
||||||
|
# $1 is AP name
|
||||||
|
sudo cp $ABSOLUTE_INSTALL_DIR/config/ap/etc/dhcpcd.conf /etc
|
||||||
|
sudo cp $ABSOLUTE_INSTALL_DIR/config/ap/etc/dnsmasq.conf /etc
|
||||||
|
sudo mkdir -p /etc/hostapd
|
||||||
|
sudo cp $ABSOLUTE_INSTALL_DIR/config/ap/etc/hostapd.conf /etc/hostapd
|
||||||
|
sudo sed -i "s|AGENT_GSM|$1|" /etc/hostapt/hostapd.conf
|
||||||
|
sudo cp $ABSOLUTE_INSTALL_DIR/config/ap/etc/default/hostapt /etd/default
|
||||||
|
sudo systemctl enable dnsmasq
|
||||||
|
sudo systemctl enable hostapd
|
||||||
|
sudo systemctl start dnsmasq
|
||||||
|
sudo systemctl start hostapd
|
||||||
|
}
|
||||||
|
|
||||||
|
function enable_autologin() {
|
||||||
|
sudo systemctl --quiet set-default multi-user.target
|
||||||
|
sudo cat > /etc/systemd/system/getty@tty1.service.d/autologin.conf << EOF
|
||||||
|
[Service]
|
||||||
|
ExecStart=
|
||||||
|
ExecStart=-/sbin/agetty --autologin $USER --noclear %I \$TERM
|
||||||
|
EOF
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
# ToDo:
|
||||||
|
# - allow autologin in console mode for 'pi' user
|
||||||
|
enable_autologin
|
||||||
|
|
||||||
|
# - add $ABSOLUTE_INSTALL_DIR/run_agent_screen.sh to ~/.bashrc
|
||||||
|
echo "$ABSOLUTE_INSTALL_DIR/run_agent_screen.sh" >> ~/.bashrc
|
||||||
|
|
||||||
|
# - install wifi AP with name $PHONE_NAME
|
||||||
|
install_ap $PHONE_NAME
|
||||||
|
|
||||||
echo "Now the remaining prerequisites will be installed and system will reboot."
|
echo "Now the remaining prerequisites will be installed and system will reboot."
|
||||||
echo "You can connect the phone via Bluetooth after the reboot."
|
echo "You can connect the phone via Bluetooth after the reboot."
|
||||||
|
|||||||
0
src/agent_point.py
Executable file → Normal file
0
src/agent_point.py
Executable file → Normal file
44
src/bt_phone_test.py
Executable file
44
src/bt_phone_test.py
Executable file
@@ -0,0 +1,44 @@
|
|||||||
|
#!/usr/bin/python3
|
||||||
|
|
||||||
|
import bt_phone
|
||||||
|
import bt_controller
|
||||||
|
import time
|
||||||
|
|
||||||
|
EXIT_OK = 0
|
||||||
|
EXIT_ERROR = 1
|
||||||
|
|
||||||
|
PHONE_BT_MAC = '40:B0:76:B4:36:98'
|
||||||
|
|
||||||
|
|
||||||
|
# Connection to phone
|
||||||
|
|
||||||
|
bluetooth_ctl = bt_controller.Bluetoothctl()
|
||||||
|
devices = bluetooth_ctl.get_paired_devices()
|
||||||
|
print(f'Paired devices: {devices}')
|
||||||
|
|
||||||
|
# disconnect before connect
|
||||||
|
bluetooth_ctl.disconnect( PHONE_BT_MAC )
|
||||||
|
ret = bluetooth_ctl.connect( PHONE_BT_MAC )
|
||||||
|
if ret == False:
|
||||||
|
print(f'Connect to {PHONE_BT_MAC} failed')
|
||||||
|
exit(EXIT_ERROR)
|
||||||
|
|
||||||
|
print(f'Connect to {PHONE_BT_MAC} success')
|
||||||
|
|
||||||
|
# Call
|
||||||
|
# Initialize phone - this brings Ofono via D-Bus
|
||||||
|
phone = bt_phone.Phone()
|
||||||
|
phone.setup_dbus_loop()
|
||||||
|
phone.call_number('111222')
|
||||||
|
|
||||||
|
# Wait 5 seconds
|
||||||
|
time.sleep(5)
|
||||||
|
|
||||||
|
# Just to be sure - finish the call
|
||||||
|
phone.hangup_call()
|
||||||
|
phone.quit_dbus_loop()
|
||||||
|
|
||||||
|
# Disconnect BT transport from the phone
|
||||||
|
bluetooth_ctl.disconnect(PHONE_BT_MAC)
|
||||||
|
|
||||||
|
exit(EXIT_OK)
|
||||||
Reference in New Issue
Block a user