Initial commit: HA Voice Control MCP server

This commit is contained in:
mo
2026-05-10 02:24:34 +02:00
commit ff3254cc87
38 changed files with 5322 additions and 0 deletions
+82
View File
@@ -0,0 +1,82 @@
"""
Importeer scanresultaten naar Neo4j.
Gebruik:
python import_to_neo4j.py
python import_to_neo4j.py --password jouw_wachtwoord
"""
import sys
import logging
import os
logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s")
logger = logging.getLogger(__name__)
def main():
# Password via CLI argument of env var
password = os.getenv("NEO4J_PASSWORD", "")
if "--password" in sys.argv:
idx = sys.argv.index("--password")
if idx + 1 < len(sys.argv):
password = sys.argv[idx + 1]
if not password:
print("Geef Neo4j wachtwoord mee: NEO4J_PASSWORD=... python import_to_neo4j.py")
print("Of: python import_to_neo4j.py --password jouw_wachtwoord")
sys.exit(1)
os.environ["NEO4J_PASSWORD"] = password
from src.neo4j_client import init_schema, import_scan, get_all_devices, get_network_summary, close
from src.scan_data import SCAN_RESULTS
print("=" * 60)
print("Neo4j Thuisnetwerk Import")
print("=" * 60)
# Init
try:
init_schema()
except Exception as e:
logger.error("Kan geen verbinding maken met Neo4j: %s", e)
logger.error("Check of Neo4j draait op neo4j://192.168.1.211:49153")
sys.exit(1)
# Import
print(f"\nImporteren van {len(SCAN_RESULTS)} devices...")
try:
summary = import_scan(SCAN_RESULTS)
print(f"\n{summary}")
except Exception as e:
logger.error("Import fout: %s", e)
close()
sys.exit(1)
# Toon resultaten
print("\n" + "-" * 60)
network_summary = get_network_summary()
print(f"Database: {network_summary['total_devices']} devices, "
f"{network_summary['total_ports']} unieke poorten")
devices = get_all_devices()
print(f"\n{'IP':<16} {'Naam':<32} {'OS':<28} {'Poorten'}")
print("-" * 90)
for d in devices:
ports = d.get("ports") or []
port_str = ", ".join(str(p["port"]) for p in ports if p and p.get("port"))
print(f"{d['ip']:<16} {d['hostname'][:31]:<32} {d['os_guess'][:27]:<28} {port_str}")
# Categorieen
print(f"\n--- Categorieen ---")
from collections import Counter
cats = Counter(d["os_guess"] for d in devices)
for cat, count in cats.most_common():
print(f" {cat:<40} {count}x")
close()
print("\nKlaar! Je netwerk staat nu in Neo4j.")
if __name__ == "__main__":
main()