Compare commits
4 Commits
standalone
...
3b9e74d5ee
| Author | SHA1 | Date | |
|---|---|---|---|
| 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
|
||||
|
||||
# Install prerequisites
|
||||
sudo apt install --assume-yes git mc python3 sox vim libffi-dev screen python3-pip python3-numpy dnsmasq hostapd
|
||||
sudo pip3 install pyyaml sox pyrabbit soundfile dbus_python pexpect pydub requests rabbitpy pydub reachability bottle
|
||||
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 requests rabbitpy bottle --break-system-packages
|
||||
|
||||
if [ -f "$INSTALL_DIR" ]; then
|
||||
rm -rf "$INSTALL_DIR"
|
||||
@@ -45,7 +45,7 @@ cp config/agent.in.yaml config/agent.yaml
|
||||
mkdir -p ~/.config/mc
|
||||
cp config/mc/ini ~/.config/mc
|
||||
|
||||
# Replace the values
|
||||
# Replace the values - finish preparing the agent configuration file
|
||||
if [[ $BACKEND_URL != "" ]]; then
|
||||
sed -i "s|BACKEND|$BACKEND|" config/agent.yaml
|
||||
fi
|
||||
@@ -56,11 +56,45 @@ fi
|
||||
|
||||
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 .`
|
||||
|
||||
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 "You can connect the phone via Bluetooth after the reboot."
|
||||
|
||||
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