mirror of
https://github.com/skinnyrad/Lora-Scanner.git
synced 2026-03-28 17:43:00 +01:00
Chore: Removing Debug Info and changing gateway logic
This commit is contained in:
121
app.py
121
app.py
@@ -13,6 +13,7 @@ import ipaddress
|
||||
from io import StringIO, BytesIO
|
||||
import csv
|
||||
import serial.tools.list_ports
|
||||
from ipaddress import ip_address, AddressValueError
|
||||
|
||||
app = Flask(__name__)
|
||||
socketio = SocketIO(app)
|
||||
@@ -39,7 +40,6 @@ gateway_ips = {
|
||||
frequency = lambda port: {'port1': 433, 'port2': 868,'port3': 915}.get(port, None)
|
||||
surveydata = {}
|
||||
parsed_entries = set()
|
||||
gateways_configured = False
|
||||
|
||||
def read_serial_data(port, ser, buffer):
|
||||
global surveydata
|
||||
@@ -111,15 +111,22 @@ def convert_dict_to_csv(data):
|
||||
output.seek(0)
|
||||
return output
|
||||
|
||||
def is_valid_ip(ip):
|
||||
try:
|
||||
ip_address(ip)
|
||||
return True
|
||||
except AddressValueError:
|
||||
return False
|
||||
|
||||
def parse_and_store_data():
|
||||
global surveydata
|
||||
global parsed_entries
|
||||
global gateway_ips
|
||||
global gateways_configured
|
||||
# Include the port number (8000) in your gateway URLs
|
||||
gateway_urls = [
|
||||
f"http://{gateway_ips[f'gateway{i}']}:8000/cgi-bin/log-traffic.has" for i in range(1, 11) if gateway_ips[f'gateway{i}']
|
||||
f"http://{gateway_ips[f'gateway{i}']}:8000/cgi-bin/log-traffic.has"
|
||||
for i in range(1, 11)
|
||||
if gateway_ips[f'gateway{i}'] and is_valid_ip(gateway_ips[f'gateway{i}'])
|
||||
]
|
||||
|
||||
headers = {
|
||||
@@ -133,60 +140,63 @@ def parse_and_store_data():
|
||||
"Connection": "keep-alive",
|
||||
"Upgrade-Insecure-Requests": "1"
|
||||
}
|
||||
if gateways_configured:
|
||||
for url in gateway_urls:
|
||||
try:
|
||||
response = requests.get(url, headers=headers, timeout=10)
|
||||
if response.status_code == 200:
|
||||
soup = BeautifulSoup(response.text, 'html.parser')
|
||||
table = soup.find('table')
|
||||
if table:
|
||||
rows = table.find_all('tr')[1:] # Skip the header row
|
||||
|
||||
for row in rows:
|
||||
# Skip hidden rows in this iteration
|
||||
if row.get('style') == 'display: none;':
|
||||
continue
|
||||
|
||||
cells = row.find_all('td')
|
||||
if not cells:
|
||||
continue
|
||||
|
||||
# Prepare formatted_row from visible cells, skipping the first cell for Chevron icon
|
||||
formatted_row = ' | '.join(cell.text.strip() for cell in cells[1:])
|
||||
|
||||
# Extract dev_id and freq from the visible row
|
||||
dev_id = extract_dev_id(formatted_row)
|
||||
freq = extract_freq(formatted_row)
|
||||
|
||||
# Extract RSSI from the next hidden row
|
||||
hidden_row = row.find_next_sibling('tr')
|
||||
if hidden_row and 'display: none;' in hidden_row.get('style', ''):
|
||||
hidden_data = hidden_row.td.text.strip()
|
||||
rssi_match = re.search(r'"Rssi":(-?\d+)', hidden_data)
|
||||
if rssi_match:
|
||||
rssi = int(rssi_match.group(1))
|
||||
else:
|
||||
rssi = None
|
||||
for url in gateway_urls:
|
||||
try:
|
||||
print(f"Fetching data from {url}")
|
||||
response = requests.get(url, headers=headers, timeout=10)
|
||||
print(f"Status code: {response.status_code}")
|
||||
if response.status_code == 200:
|
||||
soup = BeautifulSoup(response.text, 'html.parser')
|
||||
table = soup.find('table')
|
||||
if table:
|
||||
rows = table.find_all('tr')[1:] # Skip the header row
|
||||
|
||||
for row in rows:
|
||||
# Skip hidden rows in this iteration
|
||||
if row.get('style') == 'display: none;':
|
||||
continue
|
||||
|
||||
cells = row.find_all('td')
|
||||
if not cells:
|
||||
continue
|
||||
|
||||
# Prepare formatted_row from visible cells, skipping the first cell for Chevron icon
|
||||
formatted_row = ' | '.join(cell.text.strip() for cell in cells[1:])
|
||||
|
||||
# Extract dev_id and freq from the visible row
|
||||
dev_id = extract_dev_id(formatted_row)
|
||||
freq = extract_freq(formatted_row)
|
||||
|
||||
# Extract RSSI from the next hidden row
|
||||
hidden_row = row.find_next_sibling('tr')
|
||||
if hidden_row and 'display: none;' in hidden_row.get('style', ''):
|
||||
hidden_data = hidden_row.td.text.strip()
|
||||
rssi_match = re.search(r'"Rssi":(-?\d+)', hidden_data)
|
||||
if rssi_match:
|
||||
rssi = int(rssi_match.group(1))
|
||||
else:
|
||||
rssi = None
|
||||
else:
|
||||
rssi = None
|
||||
|
||||
# Save data into the surveydata structure
|
||||
if dev_id and freq is not None:
|
||||
entry_identifier = f"{dev_id}_{freq}_{formatted_row}"
|
||||
if entry_identifier not in parsed_entries:
|
||||
parsed_entries.add(entry_identifier)
|
||||
if dev_id not in surveydata:
|
||||
surveydata[dev_id] = []
|
||||
surveydata[dev_id].append([freq, rssi, formatted_row])
|
||||
# Save data into the surveydata structure
|
||||
if dev_id and freq is not None:
|
||||
entry_identifier = f"{dev_id}_{freq}_{formatted_row}"
|
||||
if entry_identifier not in parsed_entries:
|
||||
parsed_entries.add(entry_identifier)
|
||||
if dev_id not in surveydata:
|
||||
surveydata[dev_id] = []
|
||||
surveydata[dev_id].append([freq, rssi, formatted_row])
|
||||
|
||||
print(f"Data parsed and stored from {url}.")
|
||||
else:
|
||||
print(f"Request to {url} failed with status code: {response.status_code}")
|
||||
except Exception as e:
|
||||
print(f"An error occurred while processing {url}: {e}")
|
||||
# Schedule the next call to this function
|
||||
Timer(30, parse_and_store_data).start() # Call this function every 30 seconds
|
||||
|
||||
print(f"Data parsed and stored from {url}.")
|
||||
else:
|
||||
print(f"Request to {url} failed with status code: {response.status_code}")
|
||||
except Exception as e:
|
||||
print(f"An error occurred while processing {url}: {e}")
|
||||
# Schedule the next call to this function
|
||||
Timer(30, parse_and_store_data).start() # Call this function every 30 seconds
|
||||
|
||||
|
||||
def extract_dev_id(formatted_row):
|
||||
@@ -406,24 +416,19 @@ def get_table_data():
|
||||
@app.route('/set_gateways', methods=['POST'])
|
||||
def set_gateways():
|
||||
global gateway_ips
|
||||
global gateways_configured # Add this line
|
||||
data = request.form
|
||||
for key in [f'gateway{i}' for i in range(1, 11)]:
|
||||
input_ip = data.get(key, '').strip()
|
||||
if input_ip: # Proceed only if the input is not empty
|
||||
if input_ip:
|
||||
try:
|
||||
# Validate the IP address
|
||||
ipaddress.ip_address(input_ip)
|
||||
# Update the IP address if valid
|
||||
gateway_ips[key] = input_ip
|
||||
except ValueError:
|
||||
# Return an error if the IP address is invalid
|
||||
return jsonify({"error": f"Invalid IP address provided for {key}"}), 400
|
||||
|
||||
for gateway, ip_address in gateway_ips.items():
|
||||
print(f"Gateway {gateway} has IP address: {ip_address}")
|
||||
|
||||
gateways_configured = True # Set the flag to True after configuring gateways
|
||||
return jsonify({"message": "Gateway IPs updated successfully"}), 200
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user