#!/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")