151 lines
5.1 KiB
Python
151 lines
5.1 KiB
Python
#!/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") |