diff --git a/README.md b/README.md index efcd297..b889c64 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,197 @@ -# Home-Assistant-finder -Looking for Home Assistant Server on local network +# ![Banner](banner.png) + +# 🔍 Home Assistant Auto-Finder (Windows + Linux) + +Et lille Python-script, der automatisk scanner dit lokale netvĂŠrk og finder, hvilken IP-adresse din **Home Assistant**-server bruger (port **8123**). + +Scriptet kan kĂžres bĂ„de pĂ„ **Windows** og **Linux**, sĂ„ lĂŠnge Python 3 er installeret. + +Perfekt til: +- Headless Home Assistant installationer (ingen skĂŠrm pĂ„ boksen) +- Proxmox / VM-miljĂžer +- Raspberry Pi og andre smĂ„ bokse +- Hurtigt at finde ny IP efter reinstall / flytning + +--- + +## 🚀 Funktioner + +- Fungerer pĂ„ bĂ„de **Windows** og **Linux** +- Finder automatisk din lokale IPv4-adresse +- Antager et /24-netvĂŠrk (fx `192.168.2.0/24`) +- Scanner hele subnettet efter Ă„ben port **8123** +- KĂžrer i loop indtil en Home Assistant-server svarer +- Kan altid stoppes med **CTRL + C** +- Ingen eksterne Python-pakker – kun standardbiblioteket + +--- + +## 📩 Krav + +- **Python 3.x** +- NetvĂŠrksforbindelse til det subnet, hvor Home Assistant kĂžrer +- PĂ„ Windows: Python tilfĂžjet til `PATH` (valgfrit, men rart) +- PĂ„ Linux: Standard Python 3-installation (Debian/Ubuntu/RPiOS mv.) + +--- + +## đŸ“„ Installation + +Pak ZIP-filen ud, sĂ„ du har disse filer: + +```text +find_ha.py +README.md +banner.png +``` + +--- + +## ▶ Brug pĂ„ Linux + +Åbn en terminal i mappen med filerne og kĂžr: + +```bash +chmod +x find_ha.py +./find_ha.py +``` + +Eller: + +```bash +python3 find_ha.py +``` + +Eksempel-output: + +```text +🔍 Home Assistant Auto-Finder (Windows + Linux) + Scanner efter Home Assistant pĂ„ port 8123 + KĂžrer indtil en server findes – stop med CTRL+C + +🌐 Opdaget lokal IP-range (baseret pĂ„ /24): 192.168.2.0/24 + +⏳ Ingen Home Assistant fundet endnu... prĂžver igen om 5 sekunder. +⏳ Ingen Home Assistant fundet endnu... prĂžver igen om 5 sekunder. +✅ Fundet Home Assistant: http://192.168.2.84:8123 + +FĂŠrdig. Åbn adressen ovenfor i din browser. +``` + +--- + +## ▶ Brug pĂ„ Windows + +1. SĂžrg for at **Python 3** er installeret + (du kan teste i **PowerShell** eller **Kommandoprompt**): + + ```powershell + python --version + ``` + eller + ```powershell + py --version + ``` + +2. NavigĂ©r til mappen med `find_ha.py`: + + ```powershell + cd C:\sti\til\mappen + ``` + +3. KĂžr scriptet: + + ```powershell + python .\find_ha.py + ``` + eller + + ```powershell + py .\find_ha.py + ``` + +Stop med **CTRL + C** hvis du vil afbryde. + +--- + +## 🔍 Hvordan virker det? + +1. **Finder lokal IPv4-adresse** + Scriptet laver en "falsk" UDP-forbindelse til `8.8.8.8:80` for at finde den IP, dit system ville bruge til at gĂ„ pĂ„ nettet. + Der sendes ingen rigtig trafik, men OS vĂŠlger det rigtige interface. + +2. **Antager et /24-subnet** + Hvis IP f.eks. er `192.168.2.57`, antager scriptet netvĂŠrket: + + ```text + 192.168.2.0/24 + ``` + + og scanner alle adresser fra `192.168.2.1` til `192.168.2.254`. + +3. **Scanner port 8123** + For hver IP prĂžves en TCP-forbindelse til port **8123**. + Hvis den svarer, antages det, at det er en Home Assistant-instans. + +4. **Looper indtil succes** + Hvis der ikke findes nogen, venter scriptet et par sekunder og prĂžver igen. + +--- + +## đŸ§Ș Typiske scenarier + +- Du har lige installeret Home Assistant pĂ„ en **Raspberry Pi** uden skĂŠrm +- Du har lavet en ny **VM i Proxmox** med Home Assistant +- Din router har givet en anden IP end du forventede +- Du sĂŠtter Home Assistant op for andre, og vil hurtigt kunne finde IP’en + +--- + +## ❗ Fejlfinding + +### Scriptet siger: *"Kunne ikke finde en ikke-127.x IPv4-adresse."* + +Mulige Ă„rsager: +- Maskinen er ikke forbundet til et netvĂŠrk +- Der er kun loopback (127.0.0.1) aktivt +- VPN / specielle netvĂŠrksopsĂŠtninger + +➜ Tjek din netvĂŠrksforbindelse og prĂžv igen. + +--- + +### Scriptet finder ingen Home Assistant + +Tjek fĂžlgende: +- KĂžrer Home Assistant faktisk? +- Er port **8123** Ă„ben i firewall? +- Er den maskine, du kĂžrer scriptet fra, pĂ„ **samme subnet**? +- Bruger du VLANs, hvor der mĂ„ske ikke er routing mellem netvĂŠrkene? + +--- + +## 📂 Projektstruktur + +```text +homeassistant-autofinder/ +├── find_ha.py +├── README.md +└── banner.png +``` + +--- + +## 📜 License + +MIT License + +--- + +## 💡 IdĂ©er til videreudvikling + +- TilfĂžje scanning af flere porte (fx HTTPS, add-ons osv.) +- Enkel web-UI der viser scanning live +- Docker-version der kan kĂžre i container +- Mulighed for at angive subnet manuelt via argumenter + +PR’er og forks er naturligvis velkomne 🙂 diff --git a/banner.png b/banner.png new file mode 100644 index 0000000..82e3b93 Binary files /dev/null and b/banner.png differ diff --git a/find_ha.py b/find_ha.py new file mode 100644 index 0000000..ffb6d51 --- /dev/null +++ b/find_ha.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python3 +import ipaddress +import socket +import time +import sys + +PORT = 8123 +SLEEP_SECONDS = 5 +CIDR_PREFIX = 24 # Antag /24-netvĂŠrk (fx 192.168.2.0/24) + +def get_local_ipv4(): + ''' + Find lokal IPv4-adresse pĂ„ tvĂŠrs af Windows og Linux. + Vi laver et "falsk" UDP-kald til 8.8.8.8 for at finde den udgĂ„ende IP. + Der sendes ingen rigtig trafik, men OS vĂŠlger det rigtige interface. + ''' + try: + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + try: + s.connect(("8.8.8.8", 80)) + ip = s.getsockname()[0] + finally: + s.close() + except OSError: + # Fallback – virker ofte, men kan give 127.x pĂ„ nogle Linux-installationer + ip = socket.gethostbyname(socket.gethostname()) + + if ip.startswith("127."): + print("[FEJL] Kunne ikke finde en ikke-127.x IPv4-adresse.") + print(" Er du forbundet til et netvĂŠrk?") + sys.exit(1) + + return ip + +def get_network(): + ip = get_local_ipv4() + try: + net = ipaddress.ip_network(f"{ip}/{CIDR_PREFIX}", strict=False) + except ValueError as e: + print(f"[FEJL] Ugyldigt netvĂŠrk for IP {ip}: {e}") + sys.exit(1) + return net + +def scan_port(host, port=PORT, timeout=0.3): + try: + with socket.create_connection((str(host), port), timeout=timeout): + return True + except OSError: + return False + +def main(): + print("🔍 Home Assistant Auto-Finder (Windows + Linux)") + print(f" Scanner efter Home Assistant pĂ„ port {PORT}") + print(" KĂžrer indtil en server findes – stop med CTRL+C\n") + + net = get_network() + print(f"🌐 Opdaget lokal IP-range (baseret pĂ„ /{CIDR_PREFIX}): {net}\n") + + try: + while True: + found = False + for host in net.hosts(): + if scan_port(host): + print(f"✅ Fundet Home Assistant: http://{host}:{PORT}") + found = True + break + + if found: + print("\nFĂŠrdig. Åbn adressen ovenfor i din browser.") + return + + print(f"⏳ Ingen Home Assistant fundet endnu... prĂžver igen om {SLEEP_SECONDS} sekunder.") + time.sleep(SLEEP_SECONDS) + except KeyboardInterrupt: + print("\n🛑 Afbrudt af bruger (CTRL+C). Farvel!") + +if __name__ == '__main__': + main()