Advertisement
Guest User

Untitled

a guest
Jun 4th, 2025
24
0
345 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.67 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. import sys
  3. import serial
  4. import sqlite3
  5. import time
  6. from datetime import datetime
  7. import ntplib
  8.  
  9. def get_ntp_time():
  10.     try:
  11.         client = ntplib.NTPClient()
  12.         response = client.request('pool.ntp.org')
  13.         return datetime.fromtimestamp(response.tx_time)
  14.     except:
  15.         return datetime.now()
  16.  
  17. def uart_read(port, baudrate=9600, bytes_to_read=240):
  18.     try:
  19.         with serial.Serial(port, baudrate, timeout=1) as ser:
  20.             data = ser.read(bytes_to_read)
  21.             return data.decode('utf-8').strip()
  22.     except Exception as e:
  23.         print(f"UART error: {e}")
  24.         return None
  25.  
  26. def init_db(db_path):
  27.     conn = sqlite3.connect(db_path)
  28.     cursor = conn.cursor()
  29.     cursor.execute('''
  30.    CREATE TABLE IF NOT EXISTS uart_data (
  31.        id INTEGER PRIMARY KEY AUTOINCREMENT,
  32.        timestamp TEXT NOT NULL,
  33.        line_num INTEGER NOT NULL,
  34.        data TEXT NOT NULL
  35.    )
  36.    ''')
  37.     conn.commit()
  38.     return conn
  39.  
  40. def save_to_db(conn, data_chunks):
  41.     cursor = conn.cursor()
  42.     timestamp = datetime.now().isoformat()
  43.    
  44.     for i, chunk in enumerate(data_chunks, 1):
  45.         cursor.execute('''
  46.        INSERT INTO uart_data (timestamp, line_num, data)
  47.        VALUES (?, ?, ?)
  48.        ''', (timestamp, i, chunk))
  49.    
  50.     conn.commit()
  51.  
  52. def main():
  53.     # Конфигурация
  54.     UART_PORT = '/dev/ttyS0'  # Измените на нужный порт
  55.     DB_PATH = '/var/lib/uart_data.db'  # Путь к базе данных
  56.    
  57.     # Инициализация
  58.     conn = init_db(DB_PATH)
  59.    
  60.     # Основной цикл
  61.     while True:
  62.         try:
  63.             # Получаем время
  64.             current_time = get_ntp_time()
  65.             print(f"Current time: {current_time}")
  66.            
  67.             # Читаем данные с UART
  68.             data = uart_read(UART_PORT)
  69.             if data and len(data) == 240:
  70.                 # Разбиваем на 4 строки по 60 байт
  71.                 chunks = [data[i:i+60] for i in range(0, 240, 60)]
  72.                
  73.                 # Сохраняем в базу
  74.                 save_to_db(conn, chunks)
  75.                 print("Data saved to database")
  76.             else:
  77.                 print("Invalid or no data received")
  78.            
  79.             # Ждем перед следующей итерацией
  80.             time.sleep(60)
  81.            
  82.         except KeyboardInterrupt:
  83.             print("Shutting down...")
  84.             conn.close()
  85.             sys.exit(0)
  86.         except Exception as e:
  87.             print(f"Error: {e}")
  88.             time.sleep(10)
  89.  
  90. if __name__ == "__main__":
  91.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement