Added server detection on network and config_utils
This commit is contained in:
parent
5ed8b17ac5
commit
8733e5f38a
3
jarvis/config/config.json
Normal file
3
jarvis/config/config.json
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"SERVER_PORT": 5000
|
||||||
|
}
|
@ -4,7 +4,7 @@ import pvporcupine
|
|||||||
import pyaudio
|
import pyaudio
|
||||||
import speech_recognition as sr
|
import speech_recognition as sr
|
||||||
|
|
||||||
from jarvis.utils import server_utils
|
from jarvis.utils import server_utils, config_utils
|
||||||
|
|
||||||
wake_word_handler = pvporcupine.create(keywords=['jarvis'])
|
wake_word_handler = pvporcupine.create(keywords=['jarvis'])
|
||||||
|
|
||||||
@ -43,4 +43,9 @@ def record():
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
||||||
|
if config_utils.get_in_config('SERVER_IP') is None:
|
||||||
|
print("No server IP specified in config, looking trough the entire network... (might take a few seconds)")
|
||||||
|
server_utils.find_server_on_network()
|
||||||
|
|
||||||
wake_word_listening()
|
wake_word_listening()
|
||||||
|
29
jarvis/utils/config_utils.py
Normal file
29
jarvis/utils/config_utils.py
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
import json
|
||||||
|
import os
|
||||||
|
|
||||||
|
path = os.getcwd()
|
||||||
|
|
||||||
|
|
||||||
|
def get_in_config(name):
|
||||||
|
config_json = json.load(open(path + "/config/config.json", encoding='utf-8', mode='r'))
|
||||||
|
if name in config_json:
|
||||||
|
if isinstance(config_json.get(name), str):
|
||||||
|
if "!secret" in config_json.get(name):
|
||||||
|
# secret_name = config_json.get(name).removeprefix('!secret ')
|
||||||
|
secret_name = config_json.get(name).replace('!secret ', '')
|
||||||
|
return get_in_secret(secret_name)
|
||||||
|
else:
|
||||||
|
return config_json.get(name)
|
||||||
|
else:
|
||||||
|
return config_json.get(name)
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def get_in_secret(secret_name):
|
||||||
|
secrets_json = json.load(open(path + "/config/secrets.json", encoding='utf-8', mode='r'))
|
||||||
|
|
||||||
|
if secret_name in secrets_json:
|
||||||
|
return secrets_json.get(secret_name)
|
||||||
|
else:
|
||||||
|
return None
|
@ -1,10 +1,18 @@
|
|||||||
|
import ipaddress
|
||||||
|
import socket
|
||||||
|
import sys
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
from requests.structures import CaseInsensitiveDict
|
from requests.structures import CaseInsensitiveDict
|
||||||
|
|
||||||
|
from jarvis.utils import config_utils
|
||||||
|
|
||||||
|
server_ip = None
|
||||||
|
|
||||||
|
|
||||||
def send_record_to_server(frame_data):
|
def send_record_to_server(frame_data):
|
||||||
# TODO: use config or even ping to find the server on local network ?
|
# TODO: use config or even ping to find the server on local network ?
|
||||||
url_service = "http://192.168.1.12:5000" + "/process_audio_request"
|
url_service = "http://" + str(get_server_ip()) + ":" + str(get_server_port()) + "/process_audio_request"
|
||||||
|
|
||||||
headers = CaseInsensitiveDict()
|
headers = CaseInsensitiveDict()
|
||||||
headers["Content-Type"] = "text/xml; charset=utf8"
|
headers["Content-Type"] = "text/xml; charset=utf8"
|
||||||
@ -15,3 +23,66 @@ def send_record_to_server(frame_data):
|
|||||||
data=frame_data)
|
data=frame_data)
|
||||||
|
|
||||||
print(response.content)
|
print(response.content)
|
||||||
|
|
||||||
|
|
||||||
|
def get_server_port():
|
||||||
|
return config_utils.get_in_config('SERVER_PORT') if not None else 5000
|
||||||
|
|
||||||
|
|
||||||
|
def get_server_ip():
|
||||||
|
global server_ip
|
||||||
|
|
||||||
|
if server_ip is not None:
|
||||||
|
return server_ip
|
||||||
|
|
||||||
|
if config_utils.get_in_config('SERVER_IP') is None:
|
||||||
|
print("No server IP specified in config, looking trough the entire network... (might take a few seconds)")
|
||||||
|
result = find_server_on_network()
|
||||||
|
if result is not None:
|
||||||
|
print("Found server on : " + result)
|
||||||
|
server_ip = result
|
||||||
|
return result
|
||||||
|
else:
|
||||||
|
sys.exit("Server not found!")
|
||||||
|
else:
|
||||||
|
return config_utils.get_in_config('SERVER_IP')
|
||||||
|
|
||||||
|
|
||||||
|
def find_server_on_network():
|
||||||
|
global server_ip
|
||||||
|
|
||||||
|
# first try on the most common mask 192.168.1.0/24
|
||||||
|
server_ip = find_device_on_network_with_opened_port(ipaddress.ip_network("192.168.1.0/24"),
|
||||||
|
config_utils.get_in_config('SERVER_PORT'))
|
||||||
|
if server_ip is None:
|
||||||
|
# then 172.16.0.0/12
|
||||||
|
server_ip = find_device_on_network_with_opened_port(ipaddress.ip_network("172.16.0.0/12"),
|
||||||
|
config_utils.get_in_config('SERVER_PORT'))
|
||||||
|
if server_ip is None:
|
||||||
|
# and last but not least the 10.0.0.0/8 (damn that's gonna be long to scan)
|
||||||
|
server_ip = find_device_on_network_with_opened_port(ipaddress.ip_network("10.0.0.0/8"),
|
||||||
|
config_utils.get_in_config('SERVER_PORT'))
|
||||||
|
|
||||||
|
print("Found server on : " + str(server_ip))
|
||||||
|
server_ip = server_ip.compressed
|
||||||
|
return server_ip
|
||||||
|
|
||||||
|
|
||||||
|
def find_device_on_network_with_opened_port(hosts, port, timeout=0.02):
|
||||||
|
found_ip = None
|
||||||
|
|
||||||
|
for ip in hosts:
|
||||||
|
try:
|
||||||
|
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
sock.settimeout(timeout)
|
||||||
|
result = sock.connect_ex((socket.gethostbyname(ip.compressed), port))
|
||||||
|
if result == 0:
|
||||||
|
sock.close()
|
||||||
|
found_ip = ip
|
||||||
|
break
|
||||||
|
|
||||||
|
sock.close()
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
return found_ip
|
||||||
|
Reference in New Issue
Block a user