Jakub Škrabánek 4 weeks ago
parent
commit
d20a595ffa
  1. 37
      13_sqlite_python/01_sqlite_zaklad.py
  2. 0
      13_sqlite_python/02_serial_to_sqlite.py
  3. 37
      13_sqlite_python/03_sql_dotazy.py
  4. 45
      13_sqlite_python/04_demo_generator.py
  5. 12
      13_sqlite_python/05_print.py
  6. 0
      13_sqlite_python/iot_data.db
  7. BIN
      13_sqlite_python/iot_data.sqlite
  8. 6
      13_sqlite_python/poznamky.txt

37
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")

0
13_sqlite_python/02_serial_to_sqlite.py

37
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")

45
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()

12
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ý)")

0
13_sqlite_python/iot_data.db

BIN
13_sqlite_python/iot_data.sqlite

Binary file not shown.

6
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 .
Loading…
Cancel
Save