2026. június 26., péntek

Weather Station Simulator

Egy komplex Python program több programozási koncepciót (objektum-orientáltság, adatbázis-kezelés, API integráció, hibakezelés) ötvöz. Az alábbiakban egy Weather Station Simulator (Időjárás-állomás szimulátor) példát mutatok be. A program objektum-orientált, generálja és lekérdezi a hőmérséklet értékeket, majd kiírja azokat egy lokális JSON fájlba.
--------------
import json
import random
import time
from datetime import datetime
from typing import Dict, Any

class WeatherStation:
    """Időjárás-állomás osztály adatok gyűjtésére és naplózására."""
    
    def __init__(self, station_id: str, location: str):
        self.station_id = station_id
        self.location = location
        self.log_file = "weather_report.json"

    def measure_data(self) -> Dict[str, Any]:
        """Szimulálja a hőmérséklet és páratartalom mérését."""
        return {
            "timestamp": datetime.now().isoformat(),
            "station_id": self.station_id,
            "location": self.location,
            "temperature_celsius": round(random.uniform(-5.0, 35.0), 2),
            "humidity_percent": random.randint(20, 100),
            "status": "Aktiv"
        }

    def save_to_json(self, data: Dict[str, Any]) -> None:
        """Adatok hozzáfűzése a lokális JSON fájlhoz."""
        try:
            # Meglévő adatok betöltése, ha létezik a fájl
            with open(self.log_file, 'r', encoding='utf-8') as file:
                history = json.load(file)
        except (FileNotFoundError, json.JSONDecodeError):
            history = []

        history.append(data)

        # Frissített adatok mentése
        with open(self.log_file, 'w', encoding='utf-8') as file:
            json.dump(history, file, indent=4, ensure_ascii=False)

    def run_simulation(self, cycles: int = 3) -> None:
        """Szimulációs ciklus futtatása adott számú ismétléssel."""
        print(f"Indul az állomás: {self.station_id} ({self.location})")
        for i in range(cycles):
            data = self.measure_data()
            self.save_to_json(data)
            print(f"[{i+1}/{cycles}] Adat rögzítve: {data['temperature_celsius']} °C")
            time.sleep(1) # Várakozás a mérések között


if __name__ == "__main__":
    # A program belépési pontja
    nyiregyhaza_station = WeatherStation(
        station_id="WS-NYH-01", 
        location="Nyíregyháza"
    )
    nyiregyhaza_station.run_simulation(cycles=5)
    print("\nA szimuláció véget ért. A részletes adatok a 'weather_report.json' fájlban találhatók.")
---------------------

Indul az állomás: WS-NYH-01 (Nyíregyháza)
[1/5] Adat rögzítve: -2.59 °C
[2/5] Adat rögzítve: 9.01 °C
[3/5] Adat rögzítve: 11.3 °C
[4/5] Adat rögzítve: 26.6 °C
[5/5] Adat rögzítve: 34.09 °C


Nincsenek megjegyzések:

Megjegyzés küldése