diff --git a/13_sqlite_python/01_sqlite_zaklad.py b/13_sqlite_python/01_sqlite_zaklad.py new file mode 100644 index 0000000..b754b75 --- /dev/null +++ b/13_sqlite_python/01_sqlite_zaklad.py @@ -0,0 +1,37 @@ +import sqlite3 + +conn = sqlite3.connect("iot_data.sqlite") +cursor = conn.cursor() + +cursor.execute(""" + CREATE TABLE IF NOT EXISTS mereni ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + cas TEXT NOT NULL, + teplota REAL NOT NULL, + vlhkost REAL NOT NULL + ) +""") +conn.commit() +print("Tabulka mereni vytovřena (nebo již existuje).☺") + +testovaci_data = [ + ("2026-03-18 08:00:00", 22.5,45.0), + ("2026-03-18 08:05:00", 23.5,48.0), + ("2026-03-18 08:10:00", 23.2,44.0), + ("2026-03-18 08:15:00", 22.8,49.0), + ("2026-03-18 08:20:00", 25.2,60.0), +] +cursor.executemany( + "INSERT INTO mereni (cas, teplota, vlhkost) VALUES (?, ?, ?)", + testovaci_data +) +conn.commit() +print(f"Vloženo {len(testovaci_data)} záznamů") + +print("--- Všechna měření ---") +cursor.execute("SELECT * FROM mereni") +for radek in cursor.fetchall(): + print(radek) + +conn.close() +print("\nHotovo! Soubor iot_data.db vytvořen") \ No newline at end of file diff --git a/13_sqlite_python/02_serial_to_sqlite.py b/13_sqlite_python/02_serial_to_sqlite.py new file mode 100644 index 0000000..e69de29 diff --git a/13_sqlite_python/03_sql_dotazy.py b/13_sqlite_python/03_sql_dotazy.py new file mode 100644 index 0000000..9b81c66 --- /dev/null +++ b/13_sqlite_python/03_sql_dotazy.py @@ -0,0 +1,37 @@ +import sqlite3 + +conn = sqlite3.connect("iot_data.sqlite") +cursor = conn.cursor() + +# Počet záznamů +cursor.execute("SELECT COUNT(*) FROM mereni") +pocet = cursor.fetchone()[0] +print(f"Celkem záznamů v databázi: {pocet}\n") + +if pocet == 0: + print("Databaze je prázdná! spusťte nejdřív 01 nebo 04") + conn.close() + exit() + +# Pruměrná teplota a vlhkost +cursor.execute("SELECT AVG(teplota), AVG(vlhkost) FROM mereni") +avg_t, avg_v = cursor.fetchone() +print(f"Průmerná teplota: {avg_t:.1f}°C") +print(f"Průmerná vlhkost: {avg_v:.1f}%") + +#Maximalní a minimální hodnoty +cursor.execute("SELECT MAX(teplota), MIN(teplota) FROM mereni") +max_t, min_t = cursor.fetchone() +print(f"Maximální teplota: {max_t:.1f}°C") +print(f"Minimální teplota: {min_t:.1f}°C") + +cursor.execute("SELECT MAX(vlhkost), MIN(vlhkost) FROM mereni") +max_v, min_v = cursor.fetchone() +print(f"Maximální vlhkost: {max_v:.1f}°C") +print(f"Minimální vlhkost: {min_v:.1f}°C") + +#Měření s teploutou nad 25°C +cursor.execute("SELECT COUNT(*) FROM mereni WHERE teplota > 25") +nad_25 = cursor.fetchone()[0] +print(f"\nPočet měření s teplotou > 25°C: {nad_25}x") + diff --git a/13_sqlite_python/04_demo_generator.py b/13_sqlite_python/04_demo_generator.py new file mode 100644 index 0000000..ccc5be6 --- /dev/null +++ b/13_sqlite_python/04_demo_generator.py @@ -0,0 +1,45 @@ +import sqlite3 +import random +from datetime import datetime, timedelta + +DB_FILE = "iot_data.sqlite" +POCET_MERENI = 50 + +conn = sqlite3.connect(DB_FILE) +cursor = conn.cursor() + +cursor.execute(""" + CREATE TABLE IF NOT EXISTS mereni ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + cas TEXT NOT NULL, + teplota REAL NOT NULL, + vlhkost REAL NOT NULL + ) +""") +conn.commit() +print("Tabulka mereni vytovřena (nebo již existuje).☺") + +#Generovani dat - začínáme od aktualního času, měření probíha každých 5 vteřin +cas_start = datetime.now() - timedelta(seconds=POCET_MERENI*5) +zakladni_teplota = 22.0 #píšeme .0 z důvodu toho aby se počítalo s FLOAT dat.typem +zakladni_vlhkost = 50.0 + +data= [] +for i in range(POCET_MERENI): + cas = cas_start + timedelta(seconds=i*5) + #Simulace realistickych hodnot s mírným kolísáním + teplota = round(zakladni_teplota + random.uniform(-3.0,5.0),1) + vlhkost = round(zakladni_vlhkost + random.uniform(-20.0,15.0),1) + data.append((cas.strftime("%Y-%m-%d %H:%M:%S"),teplota,vlhkost)) + +cursor.executemany( + "INSERT INTO mereni (cas, teplota, vlhkost) VALUES (?, ?, ?)", + data +) +conn.commit() +print(f"Vygenerováno {POCET_MERENI} měření do {DB_FILE}") +print(f"Časový rozsah: {data[0][0]} - {data[-1][0]}") +print(f"Ukázka prvních 5 záznamů:") +for cas, t, v in data[:5]: + print(f"{cas} | {t}°C | {v}%") +conn.close() \ No newline at end of file diff --git a/13_sqlite_python/05_print.py b/13_sqlite_python/05_print.py new file mode 100644 index 0000000..3fb0072 --- /dev/null +++ b/13_sqlite_python/05_print.py @@ -0,0 +1,12 @@ +import sqlite3 + +conn = sqlite3.connect("iot_data.sqlite") +cursor = conn.cursor() + +print("--- Všechna měření ---") +cursor.execute("SELECT * FROM mereni") +for radek in cursor.fetchall(): + print(radek) + +conn.close() +print("\nHotovo! Soubor iot_data.sqlite přečtený (možná vytvořený prázdný)") \ No newline at end of file diff --git a/13_sqlite_python/iot_data.db b/13_sqlite_python/iot_data.db new file mode 100644 index 0000000..e69de29 diff --git a/13_sqlite_python/iot_data.sqlite b/13_sqlite_python/iot_data.sqlite new file mode 100644 index 0000000..7b026e6 Binary files /dev/null and b/13_sqlite_python/iot_data.sqlite differ diff --git a/13_sqlite_python/poznamky.txt b/13_sqlite_python/poznamky.txt new file mode 100644 index 0000000..33dc4fa --- /dev/null +++ b/13_sqlite_python/poznamky.txt @@ -0,0 +1,6 @@ +mkdir 13_sqlite_python +cd 13_sqlite_python +python -m venv .venv +.venv\Scripts\activate +pip install pyserial +code . \ No newline at end of file