Files
Projektarbeit-MYP/backend/setup_tapo_outlets.py

151 lines
5.1 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3.11
"""
Script zum Einrichten der Tapo-Steckdosen in der Datenbank
Hardkodierte IPs: 192.168.0.100 - 192.168.0.106 (außer 105)
"""
import sys
import os
# Pfad zum Backend-Verzeichnis hinzufügen
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
from models import get_db_session, Printer
from utils.logging_config import get_logger
logger = get_logger("tapo_setup")
def setup_tapo_outlets():
"""Richtet die hardkodierten Tapo-Steckdosen-IPs in der Datenbank ein."""
# Hardkodierte IP-Adressen (192.168.0.100 - 192.168.0.106, außer 105)
tapo_ips = [
"192.168.0.100",
"192.168.0.101",
"192.168.0.102",
"192.168.0.103",
"192.168.0.104",
"192.168.0.106" # 105 ist ausgenommen
]
db_session = get_db_session()
try:
for i, ip in enumerate(tapo_ips, start=1):
# Prüfen ob bereits vorhanden
existing_printer = db_session.query(Printer).filter(
Printer.plug_ip == ip
).first()
if existing_printer:
logger.info(f"✅ Tapo-Steckdose {ip} bereits vorhanden (Drucker: {existing_printer.name})")
continue
# Neuen Drucker-Eintrag erstellen
printer_name = f"Tapo P110 ({ip})"
location = f"Werk 040 - Berlin - TBA"
new_printer = Printer(
name=printer_name,
model="P115", # Tapo P110/P115 Modell
location=location,
ip_address=ip,
mac_address=f"00:00:00:00:{int(ip.split('.')[-1]):02d}:00", # Dummy MAC
plug_ip=ip, # Wichtig: plug_ip für Tapo-Steuerung
plug_username="tapo_user", # Standard Tapo-Benutzername
plug_password="tapo_pass", # Standard Tapo-Passwort
active=True
)
db_session.add(new_printer)
logger.info(f" Tapo-Steckdose {ip} hinzugefügt: {printer_name}")
# Änderungen speichern
db_session.commit()
logger.info(f"🎉 Setup abgeschlossen: {len(tapo_ips)} Tapo-Steckdosen konfiguriert")
# Status anzeigen
show_tapo_status(db_session)
except Exception as e:
db_session.rollback()
logger.error(f"❌ Fehler beim Setup: {e}")
raise
finally:
db_session.close()
def show_tapo_status(db_session):
"""Zeigt den aktuellen Status aller Tapo-Steckdosen an."""
tapo_printers = db_session.query(Printer).filter(
Printer.plug_ip.isnot(None),
Printer.active == True
).order_by(Printer.plug_ip).all()
logger.info(f"\n📊 Tapo-Steckdosen Übersicht ({len(tapo_printers)} konfiguriert):")
logger.info("=" * 80)
for printer in tapo_printers:
logger.info(f" 📍 {printer.plug_ip} - {printer.name}")
logger.info(f" Standort: {printer.location}")
logger.info(f" Aktiv: {'' if printer.active else ''}")
logger.info("-" * 60)
def remove_all_tapo_outlets():
"""Entfernt alle Tapo-Steckdosen aus der Datenbank (Cleanup-Funktion)."""
db_session = get_db_session()
try:
tapo_printers = db_session.query(Printer).filter(
Printer.plug_ip.isnot(None)
).all()
count = len(tapo_printers)
if count == 0:
logger.info(" Keine Tapo-Steckdosen in der Datenbank gefunden")
return
for printer in tapo_printers:
logger.info(f"🗑️ Entferne: {printer.name} ({printer.plug_ip})")
db_session.delete(printer)
db_session.commit()
logger.info(f"{count} Tapo-Steckdosen erfolgreich entfernt")
except Exception as e:
db_session.rollback()
logger.error(f"❌ Fehler beim Entfernen: {e}")
raise
finally:
db_session.close()
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser(description="Tapo-Steckdosen Setup")
parser.add_argument("--setup", action="store_true", help="Tapo-Steckdosen einrichten")
parser.add_argument("--status", action="store_true", help="Status anzeigen")
parser.add_argument("--cleanup", action="store_true", help="Alle Tapo-Steckdosen entfernen")
args = parser.parse_args()
if args.setup:
logger.info("🔧 Starte Tapo-Steckdosen Setup...")
setup_tapo_outlets()
elif args.status:
logger.info("📊 Zeige Tapo-Status...")
db_session = get_db_session()
try:
show_tapo_status(db_session)
finally:
db_session.close()
elif args.cleanup:
logger.info("🗑️ Starte Cleanup...")
remove_all_tapo_outlets()
else:
logger.info("📋 Verwendung:")
logger.info(" python3.11 setup_tapo_outlets.py --setup # Steckdosen einrichten")
logger.info(" python3.11 setup_tapo_outlets.py --status # Status anzeigen")
logger.info(" python3.11 setup_tapo_outlets.py --cleanup # Alle entfernen")