r''' ____ ___ _ _ _ / ___| / _ \| | (_) |_ ___ \___ \| | | | | | | __/ _ \ ___) | |_| | |___| | || __/ |____/ \__\_\_____|_|\__\___| Script to set the config /usr/bin/python3 /var/www/nebuleair_pro_4g/sqlite/set_config.py in case of readonly error: sudo chmod 777 /var/www/nebuleair_pro_4g/sqlite/sensors.db ''' import sqlite3 # Connect to (or create if not existent) the database conn = sqlite3.connect("/var/www/nebuleair_pro_4g/sqlite/sensors.db") cursor = conn.cursor() print(f"Connected to database") # Note: Using INSERT OR IGNORE to add only new configurations without overwriting existing ones print("Adding new configurations (existing ones will be preserved)") # Insert general configurations config_entries = [ ("modem_config_mode", "0", "bool"), ("deviceID", "XXXX", "str"), ("latitude_raw", "0", "int"), ("longitude_raw", "0", "int"), ("latitude_precision", "0", "int"), ("longitude_precision", "0", "int"), ("deviceName", "NebuleAir-proXXX", "str"), ("SaraR4_baudrate", "115200", "int"), ("NPM_solo_port", "/dev/ttyAMA5", "str"), ("sshTunnel_port", "59228", "int"), ("SARA_R4_general_status", "connected", "str"), ("SARA_R4_SIM_status", "connected", "str"), ("SARA_R4_network_status", "connected", "str"), ("SARA_R4_neworkID", "20810", "int"), ("WIFI_status", "connected", "str"), ("send_aircarto", "0", "bool"), ("send_uSpot", "0", "bool"), ("send_miotiq", "1", "bool"), ("npm_5channel", "0", "bool"), ("envea", "0", "bool"), ("windMeter", "0", "bool"), ("BME280", "1", "bool"), ("MPPT", "0", "bool"), ("NOISE", "0", "bool"), ("MHZ19", "0", "bool"), ("modem_version", "XXX", "str"), ("device_type", "nebuleair_pro", "str"), ("language", "fr", "str"), ("wifi_power_saving", "0", "bool"), ("cpu_power_mode", "normal", "str") ] for key, value, value_type in config_entries: cursor.execute( "INSERT OR IGNORE INTO config_table (key, value, type) VALUES (?, ?, ?)", (key, value, value_type) ) # Clean up duplicate envea sondes first (keep only first occurrence of each name) print("Cleaning up duplicate envea sondes...") cursor.execute(""" DELETE FROM envea_sondes_table WHERE id NOT IN ( SELECT MIN(id) FROM envea_sondes_table GROUP BY name ) """) deleted_count = cursor.rowcount if deleted_count > 0: print(f"Deleted {deleted_count} duplicate envea sonde entries") # Insert envea sondes (only if they don't already exist) # Attention pour le H2S il y a plusieurs sondes # H2S 1ppm -> coef 4 # H2S 20ppm -> coef 1 # H2S 200ppm -> coef 10 envea_sondes = [ (False, "ttyAMA4", "h2s", 4), #H2S (False, "ttyAMA3", "no2", 1), (False, "ttyAMA3", "nh3", 100), (False, "ttyAMA3", "so2", 4), (False, "ttyAMA2", "o3", 1) ] for connected, port, name, coefficient in envea_sondes: # Check if sensor with this name already exists cursor.execute("SELECT COUNT(*) FROM envea_sondes_table WHERE name = ?", (name,)) exists = cursor.fetchone()[0] > 0 if not exists: cursor.execute( "INSERT INTO envea_sondes_table (connected, port, name, coefficient) VALUES (?, ?, ?, ?)", (1 if connected else 0, port, name, coefficient) ) print(f"Added envea sonde: {name}") else: print(f"Envea sonde '{name}' already exists, skipping") # Database migrations (add columns to existing tables) migrations = [ ("data_NPM", "npm_status", "INTEGER DEFAULT 0"), ] for table, column, col_type in migrations: try: cursor.execute(f"ALTER TABLE {table} ADD COLUMN {column} {col_type}") print(f"Migration: added column '{column}' to {table}") except: pass # Column already exists # Commit and close the connection conn.commit() conn.close() print("Database updated successfully!")