This commit is contained in:
PaulVua
2025-01-24 10:43:34 +01:00
parent 155a2bd453
commit 833ed458a7
4 changed files with 79 additions and 38 deletions

View File

@@ -5,12 +5,27 @@
OUTPUT_FILE="/var/www/nebuleair_pro_4g/wifi_list.csv" OUTPUT_FILE="/var/www/nebuleair_pro_4g/wifi_list.csv"
JSON_FILE="/var/www/nebuleair_pro_4g/config.json" JSON_FILE="/var/www/nebuleair_pro_4g/config.json"
echo "-------------------" echo "-------------------"
echo "-------------------" echo "-------------------"
echo "NebuleAir pro started at $(date)" echo "NebuleAir pro started at $(date)"
echo "getting SARA R4 serial number"
# Blink GPIO 23 and 24 five times
for i in {1..5}; do
# Turn GPIO 23 and 24 ON
gpioset gpiochip0 23=1 24=1
echo "LEDs ON"
sleep 1
# Turn GPIO 23 and 24 OFF
gpioset gpiochip0 23=0 24=0
echo "LEDs OFF"
sleep 1
done
echo "getting SARA R4 serial number"
# Get the last 8 characters of the serial number and write to text file # Get the last 8 characters of the serial number and write to text file
serial_number=$(cat /proc/cpuinfo | grep Serial | awk '{print substr($3, length($3) - 7)}') serial_number=$(cat /proc/cpuinfo | grep Serial | awk '{print substr($3, length($3) - 7)}')
# Define the JSON file path # Define the JSON file path

View File

@@ -60,22 +60,22 @@
<form> <form>
<div class="form-check form-switch mb-2"> <div class="form-check form-switch mb-2">
<input class="form-check-input" type="checkbox" role="switch" id="flex_loop" onchange="update_config(this.checked)"> <input class="form-check-input" type="checkbox" role="switch" id="flex_loop" onchange="update_config('loop_activation',this.checked)">
<label class="form-check-label" for="flex_loop">Loop activation</label> <label class="form-check-label" for="flex_loop">Loop activation</label>
</div> </div>
<div class="form-check form-switch mb-2"> <div class="form-check form-switch mb-2">
<input class="form-check-input" type="checkbox" role="switch" id="flex_loop_log"> <input class="form-check-input" type="checkbox" role="switch" id="flex_loop_log" onchange="update_config('loop_log', this.checked)">
<label class="form-check-label" for="flex_loop_log">Loop Logs</label> <label class="form-check-label" for="flex_loop_log">Loop Logs</label>
</div> </div>
<div class="form-check form-switch mb-2"> <div class="form-check form-switch mb-2">
<input class="form-check-input" type="checkbox" role="switch" id="flex_start_log"> <input class="form-check-input" type="checkbox" role="switch" id="flex_start_log" onchange="update_config('boot_log', this.checked)">
<label class="form-check-label" for="flex_start_log">Boot Logs</label> <label class="form-check-label" for="flex_start_log">Boot Logs</label>
</div> </div>
<div class="form-check mb-3"> <div class="form-check mb-3">
<input class="form-check-input" type="checkbox" value="" id="check_bme280s"> <input class="form-check-input" type="checkbox" value="" id="check_bme280" onchange="update_config('i2c_BME', this.checked)">
<label class="form-check-label" for="check_bme280"> <label class="form-check-label" for="check_bme280">
Sonde temp/hum (BME280) Sonde temp/hum (BME280)
</label> </label>
@@ -83,7 +83,7 @@
<div class="mb-3"> <div class="mb-3">
<label for="device_name" class="form-label">Device Name</label> <label for="device_name" class="form-label">Device Name</label>
<input type="text" class="form-control" id="device_name"> <input type="text" class="form-control" id="device_name" onchange="update_config('deviceName', this.value)">
</div> </div>
<div class="mb-3"> <div class="mb-3">
@@ -91,7 +91,7 @@
<input type="text" class="form-control" id="device_ID" disabled> <input type="text" class="form-control" id="device_ID" disabled>
</div> </div>
<button type="submit" class="btn btn-primary">Submit</button> <!--<button type="submit" class="btn btn-primary">Submit</button>-->
</form> </form>
</div> </div>
@@ -153,7 +153,7 @@ window.onload = function() {
}); });
//get BME check //get BME check
const checkbox = document.getElementById("check_bme280s"); const checkbox = document.getElementById("check_bme280");
checkbox.checked = data.i2c_BME; checkbox.checked = data.i2c_BME;
//loop activation //loop activation
@@ -196,10 +196,10 @@ window.onload = function() {
} }
function update_config(isChecked){ function update_config(param, value){
console.log("Updated flex_loop:", isChecked); console.log("Updating ",param," : ", value);
$.ajax({ $.ajax({
url: 'launcher.php?type=update_config', url: 'launcher.php?type=update_config&param='+param+'&value='+value,
dataType: 'text', // Specify that you expect a JSON response dataType: 'text', // Specify that you expect a JSON response
method: 'GET', // Use GET or POST depending on your needs method: 'GET', // Use GET or POST depending on your needs
success: function(response) { success: function(response) {

View File

@@ -3,9 +3,19 @@ $type=$_GET['type'];
if ($type == "update_config") { if ($type == "update_config") {
echo "updating...."; echo "updating....";
$param=$_GET['param'];
$value=$_GET['value'];
$configFile = '../config.json'; $configFile = '../config.json';
// Convert value to boolean, integer, or string
if ($value === "true") {
$value = true; // Convert "true" string to boolean true
} elseif ($value === "false") {
$value = false; // Convert "false" string to boolean false
} elseif (is_numeric($value)) {
$value = $value + 0; // Convert numeric strings to int or float
}
$configData = json_decode(file_get_contents($configFile), true); $configData = json_decode(file_get_contents($configFile), true);
$configData['loop_activation'] = true; $configData[$param] = $value;
file_put_contents($configFile, json_encode($configData, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)); file_put_contents($configFile, json_encode($configData, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES));
echo "Config updated!"; echo "Config updated!";
} }

View File

@@ -72,6 +72,7 @@ import re
import os import os
import traceback import traceback
import sys import sys
from threading import Thread
import RPi.GPIO as GPIO import RPi.GPIO as GPIO
from adafruit_bme280 import basic as adafruit_bme280 from adafruit_bme280 import basic as adafruit_bme280
@@ -98,10 +99,32 @@ payload_json = {
aircarto_profile_id = 0 aircarto_profile_id = 0
uSpot_profile_id = 1 uSpot_profile_id = 1
# Set up GPIO mode (for Blue LED: network status)
GPIO.setwarnings(False) def blink_led(pin, blink_count, delay=1):
GPIO.setmode(GPIO.BCM) # Use Broadcom pin numbering """
GPIO.setup(23, GPIO.OUT) # Set GPIO23 as an output pin Blink an LED on a specified GPIO pin.
Args:
pin (int): GPIO pin number (BCM mode) to which the LED is connected.
blink_count (int): Number of times the LED should blink.
delay (float): Time in seconds for the LED to stay ON or OFF (default is 1 second).
"""
# GPIO setup
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM) # Use BCM numbering
GPIO.setup(pin, GPIO.OUT) # Set the specified pin as an output
try:
for _ in range(blink_count):
GPIO.output(pin, GPIO.HIGH) # Turn the LED on
#print(f"LED on GPIO {pin} is ON")
time.sleep(delay) # Wait for the specified delay
GPIO.output(pin, GPIO.LOW) # Turn the LED off
#print(f"LED on GPIO {pin} is OFF")
time.sleep(delay) # Wait for the specified delay
finally:
GPIO.cleanup(pin) # Clean up the specific pin to reset its state
print(f"GPIO {pin} cleaned up")
#get data from config #get data from config
def load_config(config_file): def load_config(config_file):
@@ -147,6 +170,7 @@ config_file = '/var/www/nebuleair_pro_4g/config.json'
# Load the configuration data # Load the configuration data
config = load_config(config_file) config = load_config(config_file)
loop_activation = config.get('loop_activation', True) #activation de la loop principale
baudrate = config.get('SaraR4_baudrate', 115200) #baudrate du sara R4 baudrate = config.get('SaraR4_baudrate', 115200) #baudrate du sara R4
device_id = config.get('deviceID', '').upper() #device ID en maj device_id = config.get('deviceID', '').upper() #device ID en maj
need_to_log = config.get('loop_log', False) #inscription des logs need_to_log = config.get('loop_log', False) #inscription des logs
@@ -162,6 +186,10 @@ selected_networkID = config.get('SARA_R4_neworkID', '')
#update device id in the payload json #update device id in the payload json
payload_json["nebuleairid"] = device_id payload_json["nebuleairid"] = device_id
if loop_activation == False:
print("Loop activation is False , skipping execution.")
sys.exit()
ser_sara = serial.Serial( ser_sara = serial.Serial(
port='/dev/ttyAMA2', port='/dev/ttyAMA2',
baudrate=baudrate, #115200 ou 9600 baudrate=baudrate, #115200 ou 9600
@@ -469,14 +497,9 @@ try:
print("Operation not allowed. This may require a different configuration.") print("Operation not allowed. This may require a different configuration.")
# Actions spécifiques pour ce type d'erreur # Actions spécifiques pour ce type d'erreur
# Clignotement LED en cas d'erreur # Clignotement LED rouge en cas d'erreur
GPIO.output(23, GPIO.LOW) # Éteindre la LED définitivement led_thread = Thread(target=blink_led, args=(24, 5, 0.5))
for _ in range(4): led_thread.start()
GPIO.output(23, GPIO.HIGH) # Allumer la LED
time.sleep(0.1)
GPIO.output(23, GPIO.LOW) # Éteindre la LED
time.sleep(0.1)
GPIO.output(23, GPIO.LOW) # Turn off the LED
else: else:
# 2.Si la réponse contient une réponse HTTP valide # 2.Si la réponse contient une réponse HTTP valide
@@ -492,13 +515,10 @@ try:
print('<span style="color: red;font-weight: bold;">ATTENTION: HTTP operation failed</span>') print('<span style="color: red;font-weight: bold;">ATTENTION: HTTP operation failed</span>')
update_json_key(config_file, "SARA_R4_network_status", "disconnected") update_json_key(config_file, "SARA_R4_network_status", "disconnected")
print("*****") print("*****")
print("Turning off the blue LED...") print("Blink red LED")
for _ in range(4): # Faire clignoter 4 fois # Run LED blinking in a separate thread
GPIO.output(23, GPIO.HIGH) # Allumer la LED led_thread = Thread(target=blink_led, args=(24, 5, 0.5))
time.sleep(0.1) # Attendre 100 ms led_thread.start()
GPIO.output(23, GPIO.LOW) # Éteindre la LED
time.sleep(0.1) # Attendre 100 ms
GPIO.output(23, GPIO.LOW) # Turn off the LED
# Get error code # Get error code
print("Getting error code (11->Server connection error, 73->Secure socket connect error)") print("Getting error code (11->Server connection error, 73->Secure socket connect error)")
@@ -535,13 +555,9 @@ try:
# Si la commande HTTP a réussi # Si la commande HTTP a réussi
print('<span class="badge text-bg-success">HTTP operation successful.</span>') print('<span class="badge text-bg-success">HTTP operation successful.</span>')
update_json_key(config_file, "SARA_R4_network_status", "connected") update_json_key(config_file, "SARA_R4_network_status", "connected")
print("Turning on the blue LED...") print("Blink blue LED")
for _ in range(4): # Faire clignoter 4 fois led_thread = Thread(target=blink_led, args=(23, 5, 0.5))
GPIO.output(23, GPIO.HIGH) # Allumer la LED led_thread.start()
time.sleep(0.1) # Attendre 100 ms
GPIO.output(23, GPIO.LOW) # Éteindre la LED
time.sleep(0.1) # Attendre 100 ms
GPIO.output(23, GPIO.HIGH) # Turn on the LED
#4. Read reply from server #4. Read reply from server
print("Reply from server:") print("Reply from server:")
ser_sara.write(b'AT+URDFILE="server_response.txt"\r') ser_sara.write(b'AT+URDFILE="server_response.txt"\r')