Initial commit: HA Voice Control MCP server
This commit is contained in:
@@ -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()
|
||||
Reference in New Issue
Block a user