aufräumen: Inventar-Pipeline stillgelegt, Root-handoff ins docs/, README präzisiert
- inventory/*: build.py/XLSX-Pipeline seit 2025-06 stale, Inventar erneuert sich nicht seit Core-Cutover; MikroMCP/CF/Portainer liefern Live-Daten. - handoff.md → docs/handoff-20260827-hubert-und-altlasten.md (Konventionsbruch aus der aktuellen Session korrigiert) - README.md: komplettes Rewrite mit Master-Struktur-Tabelle (bf-infra aktiv, bf-network-r6 Archiv, bf-golden-config Bot), Übergangspfad, Status-Block
This commit is contained in:
63
README.md
63
README.md
@@ -1,21 +1,52 @@
|
|||||||
# bf-network-r6
|
# bf-infra
|
||||||
|
|
||||||
BF-Netzwerk-Migration (Variante R6+C2). 2× MikroTik hAP ax² + Core ALL-SG8316M.
|
BF-Netzwerk-Infrastruktur (Caddy, AGH, MikroTik-Konfig, Dokumentation, MCPs).
|
||||||
|
Aktiver Fork von `bf-network-r6` (Claude-Code-Architektur, 2025-2026), ab August 2026
|
||||||
|
unter OpenCode und anderem LLM weitergepflegt.
|
||||||
|
|
||||||
**SSOT & Übergabe:** [`HANDOVER.md`](HANDOVER.md) — kompletter Status, Architektur + Begründungen, Phasen, Gotchas, Zugänge.
|
## Master-Struktur
|
||||||
|
|
||||||
**Plan-Origin:** ~/.claude/plans/welche-kosteng-nstigen-alternativen-zu-memoized-sparkle.md
|
| Repo | Rolle | Stand |
|
||||||
|
|---|---|---|
|
||||||
|
| `~/dev/bf-infra/` (lokal) | Aktiver Master, Working-Copy | kein Gitea-Remote (Sicherheitslücke, offen) |
|
||||||
|
| `admin/bf-network-r6` (Gitea) | Archiv, historischer Master | read-only-Header, letzte aktive Commits 2026-08-25 |
|
||||||
|
| `admin/bf-golden-config` (Gitea) | Bot-Master (Nautobot 2×/Tag) | intended/ + backups/, nicht manuell |
|
||||||
|
| `admin/blaueblueten-n8n` (Gitea) | Master für terpene-Repo | aktiv, lokal synchron |
|
||||||
|
|
||||||
**Struktur:**
|
## Was hier lebt
|
||||||
- `docs/vlan-plan.md` — VLAN-/Adressplan (final)
|
|
||||||
- `docs/core-switch-prep.md` — Core-Switch Status & Phasen
|
|
||||||
- `docs/firmware-flash-runbook.md` — FW-Flash Historie
|
|
||||||
- `switch/cli/CLI-REFERENCE.md` — bestätigte CLI-Syntax
|
|
||||||
- `switch/cli/*.cli` / `*.exp` — reproduzierbare Konfig-Scripts
|
|
||||||
- `inventory/bf.csv` / `bf.md` — IP-Doku (aus IPs.xlsx gespiegelt)
|
|
||||||
- `inventory/bf-core-ports.csv` / `.md` — Switch-Port-Map
|
|
||||||
|
|
||||||
**Aktueller Stand (2026-06-09):**
|
- `docs/teilprojekte.md` — kanonische Steuerung (Ist-Stand, offene TPs, kritischer Pffad)
|
||||||
- Phase A (VLAN-Vorbereitung) ✅ abgeschlossen
|
- `docs/teilprojekte-archiv.md` — abgeschlossene TPs (Volltext)
|
||||||
- Phase B (hAP-Cutover) ⏳ wartet auf MikroTik-Lieferung
|
- `docs/handoff-*.md` — Session-Übergaben
|
||||||
- Phase C (Firewall) + Phase D (Adress-Migration) ausstehend
|
- `caddy/Caddyfile` — Reverse-Proxy BF (siehe TP34 für Migration zu Nautobot/GC)
|
||||||
|
- `nautobot/` — Skripte + Jinja-Template für Golden Config
|
||||||
|
- `mcp/` — MCP-Server-Inventar (SSoT gegen „1000 MCP-Leichen")
|
||||||
|
- `inventory/` — **entfernt 2026-08-27** (Pipeline seit 2025-06 stale; Live-Daten via MikroMCP/CF/Portainer)
|
||||||
|
|
||||||
|
## Status (2026-08-27)
|
||||||
|
|
||||||
|
- L3 + WAN-Edge = `crs326-core`, alle 4 MikroTik auf RouterOS 7.24 (TP27)
|
||||||
|
- Firewall deny-by-default seit 2026-08-18 (TP5)
|
||||||
|
- WLAN via CAPsMAN auf dem Core seit 2026-08-17 (TP28)
|
||||||
|
- Compliance 104/104 grün, 0 Drifts (Golden Config, TP22)
|
||||||
|
- AdGuard-Paar `agh-bf1`/`agh-bf2` aufgebaut, DHCP noch nicht umgestellt (TP23 Stufe 2 / TP31 Schritt 4)
|
||||||
|
- Caddyfile Reverse-Proxy seit 2026-08-25 (TP31), 16 Sites BF-intern
|
||||||
|
- terpene.teilzeitladen.xyz: Worker läuft auf Mac mini (10.40.20.167:8890), **kein Caddy-Block, kein CF-Tunnel** — Backfill via DB-Migration blockiert (Handoff 2026-08-27)
|
||||||
|
|
||||||
|
## Übergangspfad von bf-network-r6 → bf-infra
|
||||||
|
|
||||||
|
1. README + Strukturen aktualisiert (dieses File)
|
||||||
|
2. bf-network-r6 im Gitea auf read-only, Header mit Verweis (deine Aktion)
|
||||||
|
3. Inventar-Pipeline gelöscht (XLSX stale, MikroMCP/CF/Portainer liefern Live)
|
||||||
|
4. Caddyfile-Master wandert zu Nautobot/GC (TP34, siehe Handoff 2026-08-27)
|
||||||
|
5. bf-infra bekommt Gitea-Remote (offen, „später")
|
||||||
|
|
||||||
|
## Werkzeuge (Stand 2026-08-27)
|
||||||
|
|
||||||
|
- **MikroMCP** (RouterOS, 4 Geräte) — `~/.claude.json` + `opencode.jsonc`
|
||||||
|
- **pve-mcp** (Proxmox, 10.40.20.173) — `opencode.jsonc`
|
||||||
|
- **home-assistant** (HA, 10.40.20.105) — `opencode.jsonc`
|
||||||
|
- **cloudflare** (CF-API, OAuth) — `opencode.jsonc`
|
||||||
|
- **gitea-mcp** (FQDN) — `opencode.jsonc`
|
||||||
|
- **komodo-mcp** (geplant, Migration von Portainer) — `~/dev/bf-infra/mcp/komodo/`
|
||||||
|
- **shelly-mcp** (Client-lokal Interim, 127.0.0.1:3030) — vor Migration auf zentralen Container
|
||||||
165
docs/handoff-20260827-hubert-und-altlasten.md
Normal file
165
docs/handoff-20260827-hubert-und-altlasten.md
Normal file
@@ -0,0 +1,165 @@
|
|||||||
|
# Handoff — 2026-08-27 — TP11b Backfill & neue Infra-Topologie
|
||||||
|
|
||||||
|
> **Vorgänger:** TP11b-Plan (`~/dev/blaueblueten-n8n/docs/teilprojekte.md`, Block "Daten & Automatisierung"),
|
||||||
|
> TP31 (`docs/teilprojekte.md` im bf-infra) — diese Notiz ist **kein neues TP**, sondern eine
|
||||||
|
> Session-übergreifende Beobachtung zur geänderten Infrastruktur + Wunschliste für künftige
|
||||||
|
> AI-Sessions (Hubert / künftige Modelle).
|
||||||
|
|
||||||
|
## TL;DR
|
||||||
|
- **`db/006_backfill_kind.sql` ist geschrieben** (TP11b, idempotent) — wurde **nicht** ausgeführt.
|
||||||
|
Der Governor wurde in dieser Iteration **nicht** aktiviert; der Python-Sync-Service
|
||||||
|
(`tools/sync_service.py` im Container `terpene-sync` auf LXC 400) bleibt der produktive Crawler.
|
||||||
|
Der Governor-Blueprints-Fix (`n8n/{detail,price,governor}.json`) ist als Vorbereitung da.
|
||||||
|
- **Infra-Topologie hat sich heute stark geändert**: `10.40.41.x` → `10.40.20.x` (VLAN20 = INFRA),
|
||||||
|
Cloudflare-Tunnel-Modell → **Caddy als zentraler Reverse-Proxy auf LXC 130 / `10.40.20.40`**,
|
||||||
|
Mikrotik-Switches routen direkt, **kein `cloudflared`-Tunnel mehr nötig**.
|
||||||
|
- **`n8n.emsenhuber.net` ist jetzt öffentlich via Caddy** (CF-Anycast → Caddy → n8n-Backend).
|
||||||
|
n8n-API mit `~/.secrets/credentials.env → N8N_API_KEY` funktioniert von meinem Mac aus.
|
||||||
|
- **`terpene.teilzeitladen.xyz` ist im neuen Caddy-Setup noch NICHT registriert** — der
|
||||||
|
Worker läuft weiter über den alten Hyperdrive-VPC-Pfad. DB-Backfill via Worker ist nicht möglich.
|
||||||
|
|
||||||
|
## Beobachtungen — was heute (2026-08-27) geändert wurde
|
||||||
|
|
||||||
|
### 1. Netz-Topologie: VLAN-Schema umgestellt
|
||||||
|
- **`10.40.41.x` ist tot.** Das alte `41.x`-Subnetz (ehem. „Server"-VLAN) gibt es nicht mehr.
|
||||||
|
Aktuell gültig: `10.40.20.0/24` = INFRA (LXC-Hosts, Docker, HA, NAS), `10.40.99.0/24` = MGMT
|
||||||
|
(MikroTik-Switches/APs), `10.40.10.0/24` = MAIN (Trusted Clients).
|
||||||
|
- **`10.40.20.40` ist jetzt `caddy-bf1`** (LXC 130 auf pve) — der zentrale Reverse-Proxy.
|
||||||
|
Bestätigt via `curl -I -H "Host: n8n.emsenhuber.net" http://10.40.20.40/` → 308 → HTTPS,
|
||||||
|
und via Cloudflare-Anycast-IP `188.114.96.10` → HTTP 200 (`via: 1.1 Caddy`).
|
||||||
|
|
||||||
|
### 2. Public-Apps laufen jetzt über Caddy statt Cloudflare-Tunnel
|
||||||
|
- **Was im Caddyfile steht** (`bf-infra/caddy/Caddyfile`):
|
||||||
|
`vw.emsenhuber.net`, `hass.emsenhuber.net`, `n8n.emsenhuber.net`, `gitea.emsenhuber.net`.
|
||||||
|
- **Was fehlt:** `terpene.teilzeitladen.xyz` (TP31 Schritt 5–6 ist noch offen).
|
||||||
|
- **Cloudflare-Tunnel `bf-public`** ist im CF-Backend angelegt (ID `48d3b0b6-…`, heute
|
||||||
|
05:32 UTC), **status: inactive** — kein Connector läuft. Die Connector-Config ist im
|
||||||
|
Repo bereits vorbereitet: `bf-infra/routeros/cloudflared-bf-public-config.yml` +
|
||||||
|
`bf-infra/routeros/cloudflared/{ap-bootstrap.rsc,credentials.json}`. Der Connector ist als
|
||||||
|
**RouterOS-Container auf ap1 + ap2** geplant (arm64, Mikrotik hAP ax²), Bootstrap-Skript
|
||||||
|
liegt vor. **Wichtig:** Der Tunnel ist **NICHT obsolet** — er ist Teil von TP31
|
||||||
|
Schritt 5/6 (Catch-all-Tunnel für die Subdomains, die nicht ins Caddyfile gehören).
|
||||||
|
Token in `~/.secrets/credentials.env` (`BF_PUBLIC_TUNNEL_TOKEN`).
|
||||||
|
|
||||||
|
### 3. DNS-Auflösung aus dem LAN
|
||||||
|
- **`terpene.teilzeitladen.xyz`** ist weder über Public-DNS (`@1.1.1.1`) noch über den
|
||||||
|
lokalen Resolver (`@10.40.20.36` = AGH `agh-bf1`) auflösbar — beide geben NXDOMAIN.
|
||||||
|
Der Worker bleibt nur via Hyperdrive-VPC erreichbar (nicht aus dem LAN).
|
||||||
|
- **`n8n.emsenhuber.net`** löst sauber via Public-DNS auf `188.114.96.10/.97.10` (CF-Anycast) auf
|
||||||
|
und antwortet mit dem Caddy-Backend. Aus dem LAN funktioniert es also **out-of-the-box** über
|
||||||
|
den CF-Edge-Pfad, ohne dass AdGuard-Rewrites nötig wären.
|
||||||
|
|
||||||
|
## DB-Backfill — was schief lief und warum
|
||||||
|
|
||||||
|
Der Backfill-SQL ist trivial, aber **aus meinem Mac (LAN-IP `10.40.10.82`) nicht ausführbar**, weil:
|
||||||
|
|
||||||
|
- **`pg_hba.conf` auf `10.40.20.20` (platform-pg) erlaubt nur `10.95.10.0/24`** (WireGuard-VPN).
|
||||||
|
Nicht `10.40.10.0/24`. Auch `terpene_ro` ist nicht freigeschaltet — der `terpene-pg`-MCP ist
|
||||||
|
zwar konfiguriert, scheitert aber am `pg_hba.conf`-Eintrag.
|
||||||
|
- **WireGuard-Interface** auf meinem Mac nicht aktiv (kein `wg0`, keine `utun`-Adressen in
|
||||||
|
`10.95.10.x`). Die RouterOS-Configs für WG-Hub sind da (`bf-network-r6/routeros/.secrets/wg-*.conf`),
|
||||||
|
aber kein Client-Config für den Mac.
|
||||||
|
- **Worker-Endpoint `admin/migrate`** wäre der richtige Pfad, aber `terpene.teilzeitladen.xyz`
|
||||||
|
ist im neuen Caddy nicht registriert → kein HTTP-Zugriff aus dem LAN.
|
||||||
|
- **n8n-Credential-Push** (`terpene_rw` als Postgres-Cred in n8n anlegen) wäre eine Alternative,
|
||||||
|
aber **du hast den gestoppt** („wg. mcp abwarten") — kein Schreibzugriff auf Produktivsysteme
|
||||||
|
ohne explizite Freigabe.
|
||||||
|
|
||||||
|
**Was bleibt übrig:** entweder WireGuard-Client auf dem Mac aktivieren + `pg_hba.conf`
|
||||||
|
um `10.40.10.82` erweitern (deine Aktion), **oder** den Worker in Caddy registrieren
|
||||||
|
(TP31 Schritt 5) und dann via `admin/migrate` arbeiten. **Beides ist deine Aktion, nicht
|
||||||
|
meine** — ich darf nicht eigenmächtig schreiben.
|
||||||
|
|
||||||
|
## Wunschliste — was künftige Sessions (Hubert / Nachfolger) brauchen
|
||||||
|
|
||||||
|
Das ist **meine** Perspektive auf das, was ich für produktives Arbeiten brauche. Die
|
||||||
|
**Umsetzung ist deine** (Infra-Antwort), nicht meine.
|
||||||
|
|
||||||
|
### A. Direkter DB-Zugriff aus dem LAN (für Ad-hoc-SQL)
|
||||||
|
- **Was ich brauche:** ein LAN-fähiges Postgres-Frontend — entweder
|
||||||
|
- `pg_hba.conf` um `10.40.10.0/24` (oder wenigstens `10.40.10.82`) erweitern (Trust/SSL),
|
||||||
|
- **oder** ein WireGuard-Client-Setup auf dem Mac, das in `10.95.10.0/24` routet.
|
||||||
|
- **Was ich damit anfange:** Counts ziehen, Backfill-SQL ausführen, Schema-Diffs ansehen,
|
||||||
|
EXPLAIN-Tests. Alles read-only oder mit expliziter User-Freigabe.
|
||||||
|
- **Priorität:** mittel — die meiste Arbeit geht über den Worker-Endpoint; nur fürs Backfillen
|
||||||
|
oder Schema-Debugging wäre es nützlich.
|
||||||
|
|
||||||
|
### B. Caddy-API oder Caddy-MCP (für Hot-Reload / Site-Registrierung)
|
||||||
|
- **Was ich brauche:** eine API, mit der ich **ohne SSH auf den LXC 130** einen
|
||||||
|
`Host`-Block ins Caddyfile patchen kann, sodass `terpene.teilzeitladen.xyz` aus dem LAN
|
||||||
|
erreichbar wird.
|
||||||
|
- **Heute:** `caddy-bf1` hat eine **Admin-API auf `:2019`** (`http://10.40.20.40:2019/config/`)
|
||||||
|
und die Files liegen in `/etc/caddy/Caddyfile`. **Was fehlt:** ein Auth-Layer
|
||||||
|
(heute localhost-only) und ein Workflow, der JSON-Config reinpatcht + `caddy reload` triggert.
|
||||||
|
- **Priorität:** mittel-hoch — sobald die Caddy-API von außen erreichbar + authed ist,
|
||||||
|
kann ich `terpene.teilzeitladen.xyz` (oder andere Sites) registrieren, ohne dich zu fragen.
|
||||||
|
|
||||||
|
### C. `terpene.teilzeitladen.xyz` in Caddy registrieren (TP31 Schritt 5/6)
|
||||||
|
- **Was das löst:** Worker-Backend ist aus dem LAN erreichbar; `admin/migrate` wird callbar;
|
||||||
|
Backfill-SQL kann ich via Service-Token `terpene-verify-v2` ausführen.
|
||||||
|
- **Was du dafür brauchst:** ein zusätzlicher `Host terpene.teilzeitladen.xyz`-Block in
|
||||||
|
`bf-infra/caddy/Caddyfile`, der nach `terpene-worker` (`10.40.20.X`) reverse-proxyt.
|
||||||
|
Worker-Backend-IP = ? (steht in `worker/wrangler.toml` und war mal `10.40.20.167` =
|
||||||
|
Mac mini — der ist seit der Mac-mini-Abschaltung möglicherweise weg). **Klären, was heute
|
||||||
|
das Backend ist.**
|
||||||
|
|
||||||
|
### D. Hermes SOUL.md als Inspiration (nicht zum Kopieren)
|
||||||
|
- Die `~/.hermes/SOUL.md` enthält gute Direktiven (targeted, efficient, direct,
|
||||||
|
admit uncertainty). Mein Verhalten in dieser Session war dadurch geleitet, dass ich
|
||||||
|
bei Unsicherheit (Credential-Push) gefragt habe statt geraten habe. Das ist gut.
|
||||||
|
- **Hermes ist nicht mein Maßstab** — ich bin Hubert / minimax-m3 / opencode-Session,
|
||||||
|
nicht Nous Hermes. Aber das Pattern **„lieber einmal fragen als dreimal raten"** sollte
|
||||||
|
für künftige Sessions explizit festgehalten werden. Vorschlag: ein **CLAUDE.md-Eintrag**
|
||||||
|
in `~/dev/bf-infra/` mit der Direktive „bei Aktionen mit Produktivsystem-Auswirkungen
|
||||||
|
(Credential-Create, Live-Deploy, DB-Write): erst fragen".
|
||||||
|
|
||||||
|
## Lessons Learned — was ich (Hubert) beim nächsten Mal anders machen würde
|
||||||
|
|
||||||
|
1. **Früher DNS testen.** Ich hätte in Iterationsminute 1 prüfen sollen, ob
|
||||||
|
`terpene.teilzeitladen.xyz` aus dem LAN auflösbar ist. Statt dessen habe ich den
|
||||||
|
`pg_hba`-Fehler über mehrere Schritte debuggt. Direkter Caddy-Bypass-Test wäre schneller
|
||||||
|
gewesen.
|
||||||
|
|
||||||
|
2. **Caddy als Erstes prüfen.** Da `caddy-bf1` der neue zentrale Reverse-Proxy ist und
|
||||||
|
`10.40.20.40` ARP-erreichbar war, hätte ich dort anfangen sollen statt bei Postgres. Ein
|
||||||
|
`curl http://10.40.20.40:2019/config/` (Admin-API, heute localhost-only) hätte mir
|
||||||
|
sofort die Site-Liste gezeigt.
|
||||||
|
|
||||||
|
3. **Mikrotik-MCP ist Gold wert für LAN-Topologie.** ARP-Tabelle auf `crs326-core` +
|
||||||
|
`vlan20` zeigt mir in einem Call, welche Hosts im Server-VLAN leben — schneller als
|
||||||
|
`host`-Lookups oder `nmap`. Sollte erste Anlaufstelle sein, wenn „wer ist wo im LAN"
|
||||||
|
gefragt ist.
|
||||||
|
|
||||||
|
4. **`BF_PUBLIC_TUNNEL_TOKEN` ist Teil von TP31 Schritt 5/6**, nicht obsolet. Der
|
||||||
|
Connector-Container auf den Mikrotik-APs ist die Strategie für die Subdomains, die
|
||||||
|
nicht direkt ins Caddyfile gehören. `bf-public` ist also „im Setup", nicht „tot".
|
||||||
|
Was aber stimmt: für die 4 Subdomains `vw/hass/n8n/gitea.emsenhuber.net` ist der
|
||||||
|
Tunnel obsolet — die laufen bereits über Caddy. Wenn der Connector deployed wird,
|
||||||
|
bekommt er nur die „Catch-all"-Route.
|
||||||
|
|
||||||
|
## Offene Punkte für deine nächste Session (nicht für mich)
|
||||||
|
|
||||||
|
- **WireGuard-Client auf Mac** aktivieren? Wenn ja: Config aus `bf-network-r6/routeros/.secrets/`
|
||||||
|
oder neu generieren?
|
||||||
|
- **`terpene.teilzeitladen.xyz` in Caddy registrieren?** Falls ja: welcher Backend-Host/IP?
|
||||||
|
(Worker ist seit Mac-mini-Wegfall vermutlich auf pve/LXC migriert.)
|
||||||
|
- **`bf-public` Cloudflare-Tunnel** — Connector-Container auf ap1+ap2 deployen?
|
||||||
|
`routeros/cloudflared/ap-bootstrap.rsc` ist die Vorlage. Nach Deployment:
|
||||||
|
Ingress so anpassen, dass die 4 Caddy-Subdomains (`vw/hass/n8n/gitea.emsenhuber.net`)
|
||||||
|
vom Tunnel-Catchall **ausgeschlossen** werden — sonst gibts Konflikte (Caddy und
|
||||||
|
Tunnel beanspruchen dieselben Hostnames).
|
||||||
|
- **`pg_hba.conf`** um LAN-IP erweitern? Vertrauensstufe (md5/scert/trust)?
|
||||||
|
|
||||||
|
## Cross-References
|
||||||
|
- `~/dev/blaueblueten-n8n/docs/teilprojekte.md` → TP11b (Backfill-SQL, Doku)
|
||||||
|
- `~/dev/blaueblueten-n8n/db/006_backfill_kind.sql` (neu, idempotent)
|
||||||
|
- `~/dev/bf-infra/docs/teilprojekte.md` → TP31 (Caddy-Setup, Schritt 5–6 offen)
|
||||||
|
- `~/dev/bf-infra/caddy/Caddyfile` (Caddyfile SSoT)
|
||||||
|
- `~/.secrets/credentials.env` (alle Credentials, inkl. `BF_PUBLIC_TUNNEL_TOKEN`,
|
||||||
|
`N8N_API_KEY`, `TERPENE_RW_PASSWORD`, `CF_DNS_API_TOKEN`, `CF_API_TOKEN`)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Stand:** 2026-08-27, ~16:00 lokal · **Hubert** (opencode/minimax-m3, Session) · **Christoph**
|
||||||
|
(Session-Owner). Kein Commit im terpene-Repo (TP11b-Standby). Keine Schreibaktion auf
|
||||||
|
Produktivsysteme in dieser Session (pg_hba, Caddyfile, n8n-Credentials).
|
||||||
Binary file not shown.
@@ -1,7 +0,0 @@
|
|||||||
port,ist,downstream,behalten,soll,notiz
|
|
||||||
1,ap1 (hAP ax² #1) Trunk-Uplink,10.40.41.1,ja,Trunk zu ap1,"TRUNK gesetzt 2026-06-09: native vlan1 + tagged 10,20,30,40,90,99,100. Provisorisch. Vorher: Sonos Sub (verdrängt -> SonosNet/WLAN)"
|
|
||||||
2,ap2 (hAP ax² #2) Trunk-Uplink,10.40.41.2,ja,Trunk zu ap2,"TRUNK gesetzt 2026-06-09: native vlan1 + tagged 10,20,30,40,90,99,100. Provisorisch. Vorher: ap1"
|
|
||||||
4,Uplink Wohnzimmer-Switch (smart managed),,bis neue Switches produktiv,neues Gerät,interim — wird ersetzt
|
|
||||||
8,Uplink Arbeitszimmer-Switch (smart managed),10.40.41.10; 10.40.41.167; 10.40.41.247,bis neue Switches produktiv,neues Gerät,interim — wird ersetzt
|
|
||||||
15,pve,,ja,beibehalten,
|
|
||||||
16,Fritzbox (WAN/Gateway),10.40.41.246 (FB LAN4),ja,beibehalten,FB bleibt Modem+Telefon
|
|
||||||
|
@@ -1,14 +0,0 @@
|
|||||||
# Core-Switch ALL-SG8316M (sw1, 10.40.41.239) — Port-Map
|
|
||||||
|
|
||||||
> Ist-Belegung. Ports 4/8/15/16 **behalten** (4+8 interim bis neue Switches produktiv).
|
|
||||||
> **gi1/gi2 = Trunks zu ap1/ap2** (gesetzt 2026-06-09, provisorische Belegung).
|
|
||||||
> Übrige Ports (3, 5–7, 9–14): noch nicht erfasst — gemeinsam ergänzen.
|
|
||||||
|
|
||||||
| port | ist | downstream | behalten | soll | notiz |
|
|
||||||
|---|---|---|---|---|---|
|
|
||||||
| 1 | **ap1 (hAP ax² #1) Trunk-Uplink** | 10.40.41.1 | ja | Trunk zu ap1 | **TRUNK 2026-06-09**: native vlan1 + tagged 10,20,30,40,90,99,100. Provisorisch. Vorher: Sonos Sub (verdrängt → SonosNet/WLAN) |
|
|
||||||
| 2 | **ap2 (hAP ax² #2) Trunk-Uplink** | 10.40.41.2 | ja | Trunk zu ap2 | **TRUNK 2026-06-09**: native vlan1 + tagged 10,20,30,40,90,99,100. Provisorisch. Vorher: ap1 |
|
|
||||||
| 4 | Uplink Wohnzimmer-Switch (smart managed) | | bis neue Switches produktiv | neues Gerät | interim — wird ersetzt |
|
|
||||||
| 8 | Uplink Arbeitszimmer-Switch (smart managed) | 10.40.41.10; 10.40.41.167; 10.40.41.247 | bis neue Switches produktiv | neues Gerät | interim — wird ersetzt |
|
|
||||||
| 15 | pve | | ja | beibehalten | |
|
|
||||||
| 16 | Fritzbox (WAN/Gateway) | 10.40.41.246 (FB LAN4) | ja | beibehalten | FB bleibt Modem+Telefon |
|
|
||||||
254
inventory/bf.csv
254
inventory/bf.csv
@@ -1,254 +0,0 @@
|
|||||||
section,ip,hostname,mac,pve_ct,server_ip,server_mac,note
|
|
||||||
VPN,10.40.41.1,VPNchristoph,,,,,Fallback bis CF One überall läuft; IP umziehbar/unwichtig
|
|
||||||
VPN,10.40.41.3,,,,,,
|
|
||||||
"srv, infra",10.40.41.4,MFC,30:5:5c:78:86:20,,,,
|
|
||||||
"srv, infra",10.40.41.5,P750W,4C:EB:BD:E3:25:F2,,,,Brother PT-P750W Printer
|
|
||||||
"srv, infra",10.40.41.6,iHost,D0:27:03:C8:CB:36,,,,
|
|
||||||
"srv, infra",10.40.41.7,odroid-m1,00:1E:06:51:31:C9,,,,
|
|
||||||
"srv, infra",10.40.41.8,DTUBI-414392337823,54:F2:9F:12:51:F0,,,,
|
|
||||||
"srv, infra",10.40.41.9,,,,,,
|
|
||||||
"srv, infra",10.40.41.10,nas-bf,90:9:d0:58:20:f9,,,,
|
|
||||||
"srv, infra",10.40.41.11,tv,70:AF:24:B8:C9:86,,,,
|
|
||||||
"srv, infra",10.40.41.12,virtualdsm,,,,,
|
|
||||||
"srv, infra",10.40.41.13,sysrecue,,,,,
|
|
||||||
"srv, infra",10.40.41.14,AppleTV,,,,,
|
|
||||||
"srv, infra",10.40.41.15,,,,,,docker:synology
|
|
||||||
docker,10.40.41.16,pve:docker:adguard_bf1,BC:24:11:10:3A:98,130,,,dzt kein default_internal (wird je site mit 1 vlan konsolidiert; in bf übergreifendpve-ds923)
|
|
||||||
docker,10.40.41.17,pve:docker:adguard_fm1,,,,,dzt kein default_internal (wird je site mit 1 vlan konsolidiert; in bf übergreifendpve-ds923)
|
|
||||||
docker,10.40.41.18,pve:docker:adguard_dw1,,,,,dzt kein default_internal (wird je site mit 1 vlan konsolidiert; in bf übergreifendpve-ds923)
|
|
||||||
docker,10.40.41.19,docker:iob_exposed,BC:24:11:E4:DC:AB,150,172.16.0.150,BC:24:11:3A:62:43,
|
|
||||||
docker,10.40.41.20,docker-fm:nginx-proxy-manager,,,,,
|
|
||||||
docker,10.40.41.21,docker:ldapsyno,,,,,
|
|
||||||
docker,10.40.41.22,docker:ccu,,,,,
|
|
||||||
docker,10.40.41.23,docker:pihole_dw1,02:42:0A:28:29:17,,,,
|
|
||||||
docker,10.40.41.24,docker:,,,,,
|
|
||||||
docker,10.40.41.25,docker:,,,,,
|
|
||||||
docker,10.40.41.26,docker:,,,,,
|
|
||||||
docker,10.40.41.27,docker:,,,,,
|
|
||||||
docker,10.40.41.28,docker:,,,,,
|
|
||||||
docker,10.40.41.29,docker:,,,,,
|
|
||||||
docker,10.40.41.30,docker:cloudflared,,,,,
|
|
||||||
docker,10.40.41.31,docker:,,,,,
|
|
||||||
docker,10.40.41.32,res docker2bf,,,,,
|
|
||||||
docker,10.40.41.33,docker_ds923+:iob_slave,,,,,
|
|
||||||
docker,10.40.41.34,res docker2bf,,,,,
|
|
||||||
docker,10.40.41.35,res docker2bf,,,,,
|
|
||||||
docker,10.40.41.36,res docker2bf,,,,,
|
|
||||||
docker,10.40.41.37,res docker2bf,,,,,
|
|
||||||
docker,10.40.41.38,res docker2bf,,,,,
|
|
||||||
docker,10.40.41.39,res docker2bf,,,,,
|
|
||||||
docker,10.40.41.40,res docker2bf,,,,,
|
|
||||||
docker,10.40.41.41,res docker2bf,,,,,
|
|
||||||
docker,10.40.41.42,res docker2bf,,,,,
|
|
||||||
docker,10.40.41.43,res docker2bf,,,,,
|
|
||||||
docker,10.40.41.44,res docker2bf,,,,,
|
|
||||||
docker,10.40.41.45,res docker2bf,,,,,
|
|
||||||
docker,10.40.41.46,res docker2bf,,,,,
|
|
||||||
docker,10.40.41.47,res docker2bf,,,,,
|
|
||||||
DHCP (reservations),10.40.41.48,ds415+,00:11:32:4F:E2:12,,,,
|
|
||||||
DHCP (reservations),10.40.41.49,ds415play,00:11:32:4C:72:7E,,,,
|
|
||||||
DHCP (reservations),10.40.41.50,win11enterprise,02:11:32:2f:1f:cc,,,,
|
|
||||||
DHCP (reservations),10.40.41.51,ds207,00:11:32:04:57:66,,,,
|
|
||||||
DHCP (reservations),10.40.41.52,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.53,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.54,vuplus,,,,,
|
|
||||||
DHCP (reservations),10.40.41.55,AppleTV,,,,,
|
|
||||||
DHCP (reservations),10.40.41.56,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.57,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.58,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.59,MobilMarven,,,,,
|
|
||||||
DHCP (reservations),10.40.41.60,MobilGeli,8c:b8:4a:56:d0:0b,,,,Note10+
|
|
||||||
DHCP (reservations),10.40.41.61,MobilChristoph,08:C7:B5:91:BA:61,,,,"S22 / dhcp-host=08:C7:B5:91:BA:61,10.40.41.33,MobilChristoph"
|
|
||||||
DHCP (reservations),10.40.41.62,MobilChristophAlt,7C:D6:61:B7:93:99,,,,"dhcp-host=7C:D6:61:B7:93:99,10.40.41.31,MobilChristophAlt"
|
|
||||||
DHCP (reservations),10.40.41.63,MobilSara,4A:11:58:B5:15:E1,,,,"A34 / dhcp-host=4A:11:58:B5:15:E1,10.40.41.26,MobilSara"
|
|
||||||
DHCP (reservations),10.40.41.64,MobilTanja,44:16:FA:CE:27:D3,,,,"dhcp-host=44:16:FA:CE:27:D3,10.40.41.30,MobilTanja"
|
|
||||||
DHCP (reservations),10.40.41.65,MobilChristophA35,B0:54:76:46:BC:1C,,,,A35
|
|
||||||
DHCP (reservations),10.40.41.66,MobilOma,DE:44:85:63:51:4A,,,,"dhcp-host=DE:44:85:63:51:4A,10.40.41.29,MobilOma"
|
|
||||||
DHCP (reservations),10.40.41.67,MobilOpa,02:8C:4F:B8:FC:8E,,,,"dhcp-host=02:8C:4F:B8:FC:8E,10.40.41.28,MobilOpa"
|
|
||||||
DHCP (reservations),10.40.41.68,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.69,iPadChristoph,34:2B:6E:6F:1F:EF,,,,
|
|
||||||
DHCP (reservations),10.40.41.70,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.71,wwan,3C:B2:33:ED:FC:03,,,,
|
|
||||||
DHCP (reservations),10.40.41.72,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.73,Forerunner965,38:F9:F5:8F:CC:69,,,,
|
|
||||||
DHCP (reservations),10.40.41.74,iHostWIFI,,,,,
|
|
||||||
DHCP (reservations),10.40.41.75,KindleVoyage,00:BB:3A:2C:0E:E6,,,,"dhcp-host=00:BB:3A:2C:0E:E6,10.40.41.39,KindleVoyage"
|
|
||||||
DHCP (reservations),10.40.41.76,SmartwatchChristoph935,14:8F:21:E7:45:2C,,,,"dhcp-host=14:8F:21:E7:45:2C,10.40.41.40,SmartwatchChristoph935"
|
|
||||||
DHCP (reservations),10.40.41.77,SmartwatchChristoph945,B4:C2:6A:57:0B:BB,,,,"dhcp-host=B4:C2:6A:57:0B:BB,10.40.41.41,SmartwatchChristoph945"
|
|
||||||
DHCP (reservations),10.40.41.78,Garmin Edge 820,14:8F:21:CB:BC:EA,,,,"dhcp-host=14:8F:21:CB:BC:EA,10.40.41.217,GarminEdge820"
|
|
||||||
DHCP (reservations),10.40.41.79,ubuntu-desktop,02:11:32:2c:3c:b1,,,,
|
|
||||||
DHCP (reservations),10.40.41.80,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.81,MacBook LAN,B8:B4:09:1A:EC:AB,,,,"dhcp-host=B8:B4:09:1A:EC:AB,10.40.41.23,MacBookLAN"
|
|
||||||
DHCP (reservations),10.40.41.82,MacBook WLAN,3c:a6:f6:02:3e:83,,,,"dhcp-host=3c:a6:f6:02:3e:83,10.40.41.24,MacBookWLAN"
|
|
||||||
DHCP (reservations),10.40.41.83,KindleTanja,a0:02:dc:5d:5d:d2,,,,
|
|
||||||
DHCP (reservations),10.40.41.84,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.85,iPadTanja,EC:73:79:C0:66:E7,,,,"dhcp-host=EC:73:79:C0:66:E7,10.40.41.35,iPadTanja"
|
|
||||||
DHCP (reservations),10.40.41.86,TvSara (zauberkatze),CC:4B:73:75:7C:4A,,,,"dhcp-host=CC:4B:73:75:7C:4A,10.40.41.43,TvSara(zauberkatze)"
|
|
||||||
DHCP (reservations),10.40.41.87,NotebookSara_alt (galadriel),00:E1:8C:9B:27:BA,,,,
|
|
||||||
DHCP (reservations),10.40.41.88,NotebookSara (celeborn),,,,,
|
|
||||||
DHCP (reservations),10.40.41.89,NotebookOpa (pluto),08:71:90:EA:0A:56,,,,"dhcp-host=08:71:90:EA:0A:56,10.40.41.44,NotebookOpa(pluto)"
|
|
||||||
DHCP (reservations),10.40.41.90,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.91,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.92,NintendoSwitchLAN,00:23:55:0C:86:59,,,,
|
|
||||||
DHCP (reservations),10.40.41.93,NintendoSwitchWLAN,94:58:CB:B1:63:BC,,,,
|
|
||||||
DHCP (reservations),10.40.41.94,EOS6Rm2,A0:CD:F3:93:FF:E4,,,,
|
|
||||||
DHCP (reservations),10.40.41.95,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.96,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.97,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.98,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.99,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.100,pve,00:D0:B4:04:19:24,,,,
|
|
||||||
DHCP (reservations),10.40.41.101,ubuntu-server,02:11:32:24:3D:EC,,,,
|
|
||||||
DHCP (reservations),10.40.41.102,ubuntu-desktop,02:11:32:2b:b6:08,,,,
|
|
||||||
DHCP (reservations),10.40.41.103,airfryer,E4:BC:96:1F:B2:81,,,,
|
|
||||||
DHCP (reservations),10.40.41.104,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.105,pve:homeassistant,BC:24:11:11:A9:B3,100,172.16.0.18,BC:24:11:1E:12:19,
|
|
||||||
DHCP (reservations),10.40.41.106,z2m25,BC:24:11:A2:B5:0F,112,172.16.0.12,BC:24:11:F3:42:01,
|
|
||||||
DHCP (reservations),10.40.41.107,iob_master,BC:24:11:4D:26:96,101,172.16.0.19,BC:24:11:B4:3E:41,172.24.0.19 / BC:24:11:6F:9A:86
|
|
||||||
DHCP (reservations),10.40.41.108,mqtt5,BC:24:11:B0:46:53,102,172.16.0.10,BC:24:11:53:DA:7D,
|
|
||||||
DHCP (reservations),10.40.41.109,grafana,BC:24:11:8A:4D:F1,104,172.16.0.9,BC:24:11:D9:A4:AC,
|
|
||||||
DHCP (reservations),10.40.41.110,SONOFF-NSPanelPro,7C:88:99:06:07:EC,,,,
|
|
||||||
DHCP (reservations),10.40.41.111,redis,BC:24:11:41:CA:A1,107,172.16.0.7,BC:24:11:5F:6B:EE,172.24.0.7 / BC:24:11:C0:35:39
|
|
||||||
DHCP (reservations),10.40.41.112,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.113,pve:influxdb2,BC:24:11:9A:F2:5E,106,172.16.0.8,,
|
|
||||||
DHCP (reservations),10.40.41.114,minarca,BC:24:11:3C:E2:3E,103,,,
|
|
||||||
DHCP (reservations),10.40.41.115,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.116,adguard-bf1,BC:24:11:B3:FC:52,120,,,
|
|
||||||
DHCP (reservations),10.40.41.117,adguard-bf2,BC:24:11:69:61:69,121,,,
|
|
||||||
DHCP (reservations),10.40.41.118,caddy,BC:24:11:3D:5A:5A,129,172.16.0.118,BC:24:11:A7:C9:6F,
|
|
||||||
DHCP (reservations),10.40.41.119,node-red,BC:24:11:0D:0C:FE,109,,,
|
|
||||||
DHCP (reservations),10.40.41.120,openproject,BC:24:11:94:83:5C,201,,,
|
|
||||||
DHCP (reservations),10.40.41.121,vaultwarden,BC:24:11:5A:DC:A0,301,172.18.0.127,BC:24:11:17:CA:26,
|
|
||||||
DHCP (reservations),10.40.41.122,mariadb,BC:24:11:52:78:0D,302,172.16.0.23,BC:24:11:B4:09:E4,
|
|
||||||
DHCP (reservations),10.40.41.123,nginx,BC:24:11:CC:13:0B,128,,BC:24:11:7D:DD:F1,
|
|
||||||
DHCP (reservations),10.40.41.124,pve:docker:hms-mqtt,,,,,
|
|
||||||
DHCP (reservations),10.40.41.125,docker_ds923+:openspeedtest,,,,,
|
|
||||||
DHCP (reservations),10.40.41.126,pve:docker,BC:24:11:C2:72:A2,400,172.16.0.126,BC:24:11:62:69:D7,
|
|
||||||
DHCP (reservations),10.40.41.127,docker:vaultwarden,,,172.16.0.127,,
|
|
||||||
DHCP (reservations),10.40.41.128,pve:docker:portainer,,,172.18.0.2,,
|
|
||||||
DHCP (reservations),10.40.41.129,pve:ollama,BC:24:11:2C:B8:0F,170,172.16.0.129,BC:24:11:E7:42:55,
|
|
||||||
DHCP (reservations),10.40.41.130,docker_ds923+:openclaw,,,172.18.0.130,,
|
|
||||||
DHCP (reservations),10.40.41.131,pihole2,BC:24:11:5B:FF:8A,131,172.16.0.131,BC:24:11:4F:9F:81,
|
|
||||||
DHCP (reservations),10.40.41.132,docker_ds923+:openclaw_cloudflared,,,,,
|
|
||||||
DHCP (reservations),10.40.41.133,ds923+:coolify,,,,,
|
|
||||||
DHCP (reservations),10.40.41.134,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.135,synodocker:pbs,02:11:32:2e:15:25,,172.16.0.135,02:11:32:21:b6:4a,
|
|
||||||
DHCP (reservations),10.40.41.136,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.137,Dongle-M-10E8,94:54:C5:28:10:EB,,,,
|
|
||||||
DHCP (reservations),10.40.41.138,Dongle-M-10E8_wifi,94:54:C5:28:10:E8,,,,
|
|
||||||
DHCP (reservations),10.40.41.139,drawio,,,,,
|
|
||||||
DHCP (reservations),10.40.41.140,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.141,wmbusmeters,BC:24:11:25:1E:DE,,,,
|
|
||||||
DHCP (reservations),10.40.41.142,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.143,openclawnginx2_dummy,,,,,
|
|
||||||
DHCP (reservations),10.40.41.144,openclaw2,,,,,
|
|
||||||
DHCP (reservations),10.40.41.145,pve:docker:cloudflared,,,,,
|
|
||||||
DHCP (reservations),10.40.41.146,ollama,,,,,
|
|
||||||
DHCP (reservations),10.40.41.147,n8n,,,,,johnny claw
|
|
||||||
DHCP (reservations),10.40.41.148,docker_ds923+:nginx,,,,,johnny claw
|
|
||||||
DHCP (reservations),10.40.41.149,gitea,,,,,
|
|
||||||
DHCP (reservations),10.40.41.150,Ender3V3KE-3226,FC:EE:11:03:32:26,,,,
|
|
||||||
DHCP (reservations),10.40.41.151,prometheus,,,,,
|
|
||||||
DHCP (reservations),10.40.41.152,mcp,,,,,
|
|
||||||
DHCP (reservations),10.40.41.153,alertmanager,,,,,
|
|
||||||
DHCP (reservations),10.40.41.154,node-exporter,,,,,
|
|
||||||
DHCP (reservations),10.40.41.155,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.156,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.157,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.158,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.159,openclaw-oc-qdrant-central,,,,,
|
|
||||||
DHCP (reservations),10.40.41.160,openclaw,,,,,
|
|
||||||
DHCP (reservations),10.40.41.161,openclaw-johnny2,,,,,
|
|
||||||
DHCP (reservations),10.40.41.162,openclaw-tzcharlie,,,,,
|
|
||||||
DHCP (reservations),10.40.41.163,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.164,oc-jonny2-redis,,,172.18.0.164,,
|
|
||||||
DHCP (reservations),10.40.41.165,oc-charlie-redis,,,172.18.0.165,,
|
|
||||||
DHCP (reservations),10.40.41.166,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.167,macmini-LAN,d0:11:e5:b9:a7:48,,,,
|
|
||||||
DHCP (reservations),10.40.41.168,macmini-WLAN,d0:11:e5:c9:08:0a,,,,
|
|
||||||
DHCP (reservations),10.40.41.169,macmini-cloudflared,,,,,
|
|
||||||
DHCP (reservations),10.40.41.170,ms365-mcp,,,,,
|
|
||||||
DHCP (reservations),10.40.41.171,hostinger-mcp,,,,,
|
|
||||||
DHCP (reservations),10.40.41.172,woocommerce-mcp,,,,,
|
|
||||||
DHCP (reservations),10.40.41.173,billbee-mcp,,,,,
|
|
||||||
DHCP (reservations),10.40.41.174,sevdesk-mcp,,,,,
|
|
||||||
DHCP (reservations),10.40.41.175,wordpress-mcp,,,,,
|
|
||||||
DHCP (reservations),10.40.41.176,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.177,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.178,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.179,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.180,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.181,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.182,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.183,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.184,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.185,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.186,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.187,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.188,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.189,,,,,,
|
|
||||||
DHCP (reservations),10.40.41.190,,,,,,
|
|
||||||
Sonos,10.40.41.191,SonosArbeitszimmer1,34:7e:5c:32:37:96,,,,"dhcp-host=34:7e:5c:32:37:96,10.40.41.191,SonosArbeitszimmer1"
|
|
||||||
Sonos,10.40.41.192,SonosArbeitszimmer2,34:7e:5c:32:33:b8,,,,"dhcp-host=34:7e:5c:32:33:b8,10.40.41.192,SonosArbeitszimmer2"
|
|
||||||
Sonos,10.40.41.193,SonosSchlafzimmer1,78:28:ca:80:2a:f6,,,,"dhcp-host=78:28:ca:80:2a:f6,10.40.41.193,SonosSchlafzimmer1"
|
|
||||||
Sonos,10.40.41.194,SonosSchlafzimmer2,48:a6:b8:14:fe:d0,,,,"dhcp-host=48:a6:b8:14:fe:d0,10.40.41.194,SonosSchlafzimmer2"
|
|
||||||
Sonos,10.40.41.195,SonosBad,48:A6:B8:14:FE:D0,,,,"dhcp-host=48:A6:B8:14:FE:D0,10.40.41.195,SonosBad"
|
|
||||||
Sonos,10.40.41.196,SonosKinderzimmer,48:A6:B8:16:38:AE,,,,"dhcp-host=48:A6:B8:16:38:AE,10.40.41.196,SonosKinderzimmer"
|
|
||||||
Sonos,10.40.41.197,SonosKueche,48:A6:B8:14:FE:F2,,,,"dhcp-host=48:A6:B8:14:FE:F2,10.40.41.197,SonosKueche"
|
|
||||||
Sonos,10.40.41.198,SonosTerrasse,48:a6:b8:16:38:ae,,,,"dhcp-host=48:a6:b8:16:38:ae,10.40.41.198,SonosTerrasse"
|
|
||||||
Sonos,10.40.41.199,SonosWohnzimmer1,48:A6:B8:0B:63:10,,,,"48:A6:B8:01:13:EE / dhcp-host=48:A6:B8:0B:63:10,10.40.41.199,SonosWohnzimmer1"
|
|
||||||
Sonos,10.40.41.200,SonosWohnzimmer2,48:a6:b8:14:fe:f2,,,,"dhcp-host=48:a6:b8:14:fe:f2,10.40.41.200,SonosWohnzimmer2"
|
|
||||||
Sonos,10.40.41.201,SonosWohnzimmer3,78:28:ca:d2:0d:ac,,,,"dhcp-host=78:28:ca:d2:0d:ac,10.40.41.201,SonosWohnzimmer3"
|
|
||||||
IOT,10.40.30.202,shelly: s22,a0:85:e3:c8:65:34,,,,kueche_steckdose3-2
|
|
||||||
IOT,10.40.30.203,shelly: s23,ac:15:18:7b:62:20,,,,dieleug-wohnzimmer_licht
|
|
||||||
IOT,10.40.30.204,shelly: s24,14:33:5c:d8:2d:7c,,,,bad_spiegelschrank (Shelly Plus RGBW PM
|
|
||||||
IOT,10.40.30.205,shelly: s25,98:a3:16:79:38:50,,,,bad_lichtschalter
|
|
||||||
IOT,10.40.30.206,shelly: s20,98:a3:16:7c:5f:ec,,,,kueche_steckdosen2
|
|
||||||
IOT,10.40.30.207,shelly: s21,20:6e:f1:01:f9:f8,,,,kueche_steckdosen4
|
|
||||||
IOT,10.40.41.208,shelly: s1,E4:B0:63:D7:C7:A4,,,,weihnachten_kueche
|
|
||||||
IOT,10.40.41.209,shelly: s2,28:37:2F:36:F4:7C,,,,weihnachten_terrasse
|
|
||||||
IOT,10.40.41.210,shelly: s3,E4:B0:63:E4:EF:7C,,,,weihnachten_kinderzimmer
|
|
||||||
IOT,10.40.30.211,shelly: s4,E4:B0:63:E4:0F:30,,,,kueche_mikrowelle
|
|
||||||
IOT,10.40.30.212,shelly: s5,D8:85:AC:0C:5C:C8,,,,kueche_backofen
|
|
||||||
IOT,10.40.30.213,shelly: s6,d0:cf:13:d8:18:fc,,,,kueche_kuehlschrank
|
|
||||||
IOT,10.40.30.214,shelly: s7,D0:CF:13:D9:94:E8,,,,kueche_tiefkuehlschrank
|
|
||||||
IOT,10.40.30.215,shelly: s8,E4:B0:63:FA:FD:E0,,,,kueche_geschirrspueler
|
|
||||||
IOT,10.40.30.216,shelly: s9,E8:F6:0A:61:88:08,,,,wohnzimmer_sideboard
|
|
||||||
IOT,10.40.30.217,shelly: s10,E4:B0:63:FC:57:E4,,,,bad_sonos
|
|
||||||
IOT,10.40.30.218,shelly: s11,E4:B0:63:FA:6C:00,,,,kinderzimmer_sonos
|
|
||||||
IOT,10.40.41.219,shelly: s12,48:f6:ee:c8:e6:ac,,,,dieleug_steckdosen
|
|
||||||
IOT,10.40.30.220,shelly: s13,48:F6:EE:DD:6A:F4,,,,arbeitszimmer_technik
|
|
||||||
IOT,10.40.30.221,shelly: s14,E4:B0:63:FC:59:48,,,,schlafzimmer_bett
|
|
||||||
IOT,10.40.30.222,shelly: s15,E4:B0:63:FA:D5:34,,,,technik_pve
|
|
||||||
IOT,10.40.30.223,shelly: s16,10:20:ba:fa:f5:40,,,,wohnzimmer_steckdosen
|
|
||||||
IOT,10.40.30.224,shelly: s17,10:20:ba:fb:6d:64,,,,bad_steckdosen
|
|
||||||
IOT,10.40.30.225,shelly: s18,48:f6:ee:cc:16:e4,,,,kueche_steckdosen1
|
|
||||||
IOT,10.40.30.226,shelly: s19,10:20:ba:fb:70:fc,,,,kueche_steckdosen3
|
|
||||||
IOT,10.40.41.227,switchbot-floorlamp,B8:F8:62:09:F2:04,,,,
|
|
||||||
IOT,10.40.41.228,Twinkly Weihnachtsgirlande,98:F4:AB:2C:A7:88,,,,"dhcp-host=98:F4:AB:2C:A7:88,10.40.41.223,TwinklyWeihnachtsgirlande"
|
|
||||||
IOT,10.40.41.229,tuya smartlife TK,,,,,
|
|
||||||
IOT,10.40.41.230,Withings_waage,00:24:e4:40:2a:72,,,,
|
|
||||||
IOT,10.40.41.231,Withings_blutdruck,A4:7E:FA:18:2C:64,,,,
|
|
||||||
IOT,10.40.41.232,pve:homematic-raspi (ccu),BC:24:11:8E:0A:57,330,172.16.0.232,BC:24:11:D3:B3:F4,
|
|
||||||
IOT,10.40.30.233,shelly: s26,98:a3:16:7a:a3:54,,,,bad_luefter
|
|
||||||
IOT,10.40.41.234,,,,,,
|
|
||||||
IOT,10.40.41.235,,,,,,
|
|
||||||
IOT,10.40.41.236,lichterkette,A4:F0:0F:5F:D0:EC,,,,
|
|
||||||
IOT,10.40.41.237,lichterkette-mini,24:DC:C3:9B:89:64,,,,
|
|
||||||
IOT,10.40.41.238,,,,,,
|
|
||||||
IOT,10.40.41.239,sw1,00:08:54:71:98:2D,,,,"allnet core switch / dhcp-host=00:08:54:71:98:2D,10.40.41.239,sw1"
|
|
||||||
IOT,10.40.41.240,,,,,,
|
|
||||||
IOT,10.40.41.241,NukiSmartlock,28:DB:A7:09:7B:54,,,,
|
|
||||||
IOT,10.40.41.242,,,,,,
|
|
||||||
IOT,10.40.41.243,,,,,,
|
|
||||||
IOT,10.40.41.244,NukiBridge,24:62:ab:b1:63:f4,,,,"dhcp-host=24:62:ab:b1:63:f4,10.40.41.244,NukiBridge"
|
|
||||||
IOT,10.40.41.245,,,,,,
|
|
||||||
Netzwerk,10.40.41.246,fritzrepeater1,12:72:74:9c:66:49,,,,"Arbeitszimmer / dhcp-host=12:72:74:9c:66:49,10.40.41.246,fritzrepeater1"
|
|
||||||
Netzwerk,10.40.41.247,,,,,,
|
|
||||||
Netzwerk,10.40.41.248,,,,,,
|
|
||||||
Netzwerk,10.40.41.249,,,,,,
|
|
||||||
Netzwerk,10.40.41.250,,,,,,
|
|
||||||
Netzwerk,10.40.41.251,,,,,,
|
|
||||||
Netzwerk,10.40.41.252,,,,,,
|
|
||||||
Netzwerk,10.40.41.253,openwrt,,700,,,
|
|
||||||
Netzwerk,10.40.41.254,gateway-bf,0c:72:74:36:90:9c,,,,
|
|
||||||
|
293
inventory/bf.md
293
inventory/bf.md
@@ -1,293 +0,0 @@
|
|||||||
# Inventar — Standort BF (kanonisch)
|
|
||||||
|
|
||||||
> Generiert aus `bf.csv` via `build.py`. **Quelle der Wahrheit = bf.csv.** Seed: `IPs.xlsx`.
|
|
||||||
> ⚠️ Manche `pve_ct`/Einträge können Doku-Leichen sein (z.B. re-dockerisierte Container).
|
|
||||||
|
|
||||||
|
|
||||||
## VPN
|
|
||||||
|
|
||||||
| ip | hostname | mac | pve_ct | server_ip | server_mac | note |
|
|
||||||
|---|---|---|---|---|---|---|
|
|
||||||
| 10.40.41.1 | VPNchristoph | | | | | Fallback bis CF One überall läuft; IP umziehbar/unwichtig |
|
|
||||||
| 10.40.41.3 | | | | | | |
|
|
||||||
|
|
||||||
## srv, infra
|
|
||||||
|
|
||||||
| ip | hostname | mac | pve_ct | server_ip | server_mac | note |
|
|
||||||
|---|---|---|---|---|---|---|
|
|
||||||
| 10.40.41.4 | MFC | 30:5:5c:78:86:20 | | | | |
|
|
||||||
| 10.40.41.5 | P750W | 4C:EB:BD:E3:25:F2 | | | | Brother PT-P750W Label-Drucker, **mobil/batteriebetrieben** (Standort variabel); aggressives WLAN-PowerSave → idle nicht ARP/ping-erreichbar (wifi-qcom-Limit), Druck weckt Gerät. Ziel-VLAN 30 (IoT), reserviert 10.40.30.5. Web-UI `http://10.40.30.5/general/information.html` (kein DirectPrint-Pfad); an ap1 gepinnt (wifi-access-list, anti-flap). Doku `docs/wifi-p750w-coverage-and-map.md` |
|
|
||||||
| 10.40.41.6 | iHost | D0:27:03:C8:CB:36 | | | | |
|
|
||||||
| 10.40.41.7 | odroid-m1 | 00:1E:06:51:31:C9 | | | | |
|
|
||||||
| 10.40.41.8 | DTUBI-414392337823 | 54:F2:9F:12:51:F0 | | | | |
|
|
||||||
| 10.40.41.9 | | | | | | |
|
|
||||||
| 10.40.41.10 | nas-bf | 90:9:d0:58:20:f9 | | | | |
|
|
||||||
| 10.40.41.11 | tv | 70:AF:24:B8:C9:86 | | | | |
|
|
||||||
| 10.40.41.12 | virtualdsm | | | | | |
|
|
||||||
| 10.40.41.13 | sysrecue | | | | | |
|
|
||||||
| 10.40.41.14 | AppleTV | | | | | |
|
|
||||||
| 10.40.41.15 | | | | | | docker:synology |
|
|
||||||
|
|
||||||
## docker
|
|
||||||
|
|
||||||
| ip | hostname | mac | pve_ct | server_ip | server_mac | note |
|
|
||||||
|---|---|---|---|---|---|---|
|
|
||||||
| 10.40.41.16 | pve:docker:adguard_bf1 | BC:24:11:10:3A:98 | 130 | | | dzt kein default_internal (wird je site mit 1 vlan konsolidiert; in bf übergreifendpve-ds923) |
|
|
||||||
| 10.40.41.17 | pve:docker:adguard_fm1 | | | | | dzt kein default_internal (wird je site mit 1 vlan konsolidiert; in bf übergreifendpve-ds923) |
|
|
||||||
| 10.40.41.18 | pve:docker:adguard_dw1 | | | | | dzt kein default_internal (wird je site mit 1 vlan konsolidiert; in bf übergreifendpve-ds923) |
|
|
||||||
| 10.40.41.19 | docker:iob_exposed | BC:24:11:E4:DC:AB | 150 | 172.16.0.150 | BC:24:11:3A:62:43 | |
|
|
||||||
| 10.40.41.20 | docker-fm:nginx-proxy-manager | | | | | |
|
|
||||||
| 10.40.41.21 | docker:ldapsyno | | | | | |
|
|
||||||
| 10.40.41.22 | docker:ccu | | | | | |
|
|
||||||
| 10.40.41.23 | docker:pihole_dw1 | 02:42:0A:28:29:17 | | | | |
|
|
||||||
| 10.40.41.24 | docker: | | | | | |
|
|
||||||
| 10.40.41.25 | docker: | | | | | |
|
|
||||||
| 10.40.41.26 | docker: | | | | | |
|
|
||||||
| 10.40.41.27 | docker: | | | | | |
|
|
||||||
| 10.40.41.28 | docker: | | | | | |
|
|
||||||
| 10.40.41.29 | docker: | | | | | |
|
|
||||||
| 10.40.41.30 | docker:cloudflared | | | | | |
|
|
||||||
| 10.40.41.31 | docker: | | | | | |
|
|
||||||
| 10.40.41.32 | res docker2bf | | | | | |
|
|
||||||
| 10.40.41.33 | docker_ds923+:iob_slave | | | | | |
|
|
||||||
| 10.40.41.34 | res docker2bf | | | | | |
|
|
||||||
| 10.40.41.35 | res docker2bf | | | | | |
|
|
||||||
| 10.40.41.36 | res docker2bf | | | | | |
|
|
||||||
| 10.40.41.37 | res docker2bf | | | | | |
|
|
||||||
| 10.40.41.38 | res docker2bf | | | | | |
|
|
||||||
| 10.40.41.39 | res docker2bf | | | | | |
|
|
||||||
| 10.40.41.40 | res docker2bf | | | | | |
|
|
||||||
| 10.40.41.41 | res docker2bf | | | | | |
|
|
||||||
| 10.40.41.42 | res docker2bf | | | | | |
|
|
||||||
| 10.40.41.43 | res docker2bf | | | | | |
|
|
||||||
| 10.40.41.44 | res docker2bf | | | | | |
|
|
||||||
| 10.40.41.45 | res docker2bf | | | | | |
|
|
||||||
| 10.40.41.46 | res docker2bf | | | | | |
|
|
||||||
| 10.40.41.47 | res docker2bf | | | | | |
|
|
||||||
|
|
||||||
## DHCP (reservations)
|
|
||||||
|
|
||||||
| ip | hostname | mac | pve_ct | server_ip | server_mac | note |
|
|
||||||
|---|---|---|---|---|---|---|
|
|
||||||
| 10.40.41.48 | ds415+ | 00:11:32:4F:E2:12 | | | | |
|
|
||||||
| 10.40.41.49 | ds415play | 00:11:32:4C:72:7E | | | | |
|
|
||||||
| 10.40.41.50 | win11enterprise | 02:11:32:2f:1f:cc | | | | |
|
|
||||||
| 10.40.41.51 | ds207 | 00:11:32:04:57:66 | | | | |
|
|
||||||
| 10.40.41.52 | | | | | | |
|
|
||||||
| 10.40.41.53 | | | | | | |
|
|
||||||
| 10.40.41.54 | vuplus | | | | | |
|
|
||||||
| 10.40.41.55 | AppleTV | | | | | |
|
|
||||||
| 10.40.41.56 | | | | | | |
|
|
||||||
| 10.40.41.57 | | | | | | |
|
|
||||||
| 10.40.41.58 | | | | | | |
|
|
||||||
| 10.40.41.59 | MobilMarven | | | | | |
|
|
||||||
| 10.40.41.60 | MobilGeli | 8c:b8:4a:56:d0:0b | | | | Note10+ |
|
|
||||||
| 10.40.41.61 | MobilChristoph | 08:C7:B5:91:BA:61 | | | | S22 / dhcp-host=08:C7:B5:91:BA:61,10.40.41.33,MobilChristoph |
|
|
||||||
| 10.40.41.62 | MobilChristophAlt | 7C:D6:61:B7:93:99 | | | | dhcp-host=7C:D6:61:B7:93:99,10.40.41.31,MobilChristophAlt |
|
|
||||||
| 10.40.41.63 | MobilSara | 4A:11:58:B5:15:E1 | | | | A34 / dhcp-host=4A:11:58:B5:15:E1,10.40.41.26,MobilSara |
|
|
||||||
| 10.40.41.64 | MobilTanja | 44:16:FA:CE:27:D3 | | | | dhcp-host=44:16:FA:CE:27:D3,10.40.41.30,MobilTanja |
|
|
||||||
| 10.40.41.65 | MobilChristophA35 | B0:54:76:46:BC:1C | | | | A35 |
|
|
||||||
| 10.40.41.66 | MobilOma | DE:44:85:63:51:4A | | | | dhcp-host=DE:44:85:63:51:4A,10.40.41.29,MobilOma |
|
|
||||||
| 10.40.41.67 | MobilOpa | 02:8C:4F:B8:FC:8E | | | | dhcp-host=02:8C:4F:B8:FC:8E,10.40.41.28,MobilOpa |
|
|
||||||
| 10.40.41.68 | | | | | | |
|
|
||||||
| 10.40.41.69 | iPadChristoph | 34:2B:6E:6F:1F:EF | | | | |
|
|
||||||
| 10.40.41.70 | | | | | | |
|
|
||||||
| 10.40.41.71 | wwan | 3C:B2:33:ED:FC:03 | | | | |
|
|
||||||
| 10.40.41.72 | | | | | | |
|
|
||||||
| 10.40.41.73 | Forerunner965 | 38:F9:F5:8F:CC:69 | | | | |
|
|
||||||
| 10.40.41.74 | iHostWIFI | | | | | |
|
|
||||||
| 10.40.41.75 | KindleVoyage | 00:BB:3A:2C:0E:E6 | | | | dhcp-host=00:BB:3A:2C:0E:E6,10.40.41.39,KindleVoyage |
|
|
||||||
| 10.40.41.76 | SmartwatchChristoph935 | 14:8F:21:E7:45:2C | | | | dhcp-host=14:8F:21:E7:45:2C,10.40.41.40,SmartwatchChristoph935 |
|
|
||||||
| 10.40.41.77 | SmartwatchChristoph945 | B4:C2:6A:57:0B:BB | | | | dhcp-host=B4:C2:6A:57:0B:BB,10.40.41.41,SmartwatchChristoph945 |
|
|
||||||
| 10.40.41.78 | Garmin Edge 820 | 14:8F:21:CB:BC:EA | | | | dhcp-host=14:8F:21:CB:BC:EA,10.40.41.217,GarminEdge820 |
|
|
||||||
| 10.40.41.79 | ubuntu-desktop | 02:11:32:2c:3c:b1 | | | | |
|
|
||||||
| 10.40.41.80 | | | | | | |
|
|
||||||
| 10.40.41.81 | MacBook LAN | B8:B4:09:1A:EC:AB | | | | dhcp-host=B8:B4:09:1A:EC:AB,10.40.41.23,MacBookLAN |
|
|
||||||
| 10.40.41.82 | MacBook WLAN | 3c:a6:f6:02:3e:83 | | | | dhcp-host=3c:a6:f6:02:3e:83,10.40.41.24,MacBookWLAN |
|
|
||||||
| 10.40.41.83 | KindleTanja | a0:02:dc:5d:5d:d2 | | | | |
|
|
||||||
| 10.40.41.84 | | | | | | |
|
|
||||||
| 10.40.41.85 | iPadTanja | EC:73:79:C0:66:E7 | | | | dhcp-host=EC:73:79:C0:66:E7,10.40.41.35,iPadTanja |
|
|
||||||
| 10.40.41.86 | TvSara (zauberkatze) | CC:4B:73:75:7C:4A | | | | dhcp-host=CC:4B:73:75:7C:4A,10.40.41.43,TvSara(zauberkatze) |
|
|
||||||
| 10.40.41.87 | NotebookSara_alt (galadriel) | 00:E1:8C:9B:27:BA | | | | |
|
|
||||||
| 10.40.41.88 | NotebookSara (celeborn) | | | | | |
|
|
||||||
| 10.40.41.89 | NotebookOpa (pluto) | 08:71:90:EA:0A:56 | | | | dhcp-host=08:71:90:EA:0A:56,10.40.41.44,NotebookOpa(pluto) |
|
|
||||||
| 10.40.41.90 | | | | | | |
|
|
||||||
| 10.40.41.91 | | | | | | |
|
|
||||||
| 10.40.41.92 | NintendoSwitchLAN | 00:23:55:0C:86:59 | | | | |
|
|
||||||
| 10.40.41.93 | NintendoSwitchWLAN | 94:58:CB:B1:63:BC | | | | |
|
|
||||||
| 10.40.41.94 | EOS6Rm2 | A0:CD:F3:93:FF:E4 | | | | |
|
|
||||||
| 10.40.41.95 | | | | | | |
|
|
||||||
| 10.40.41.96 | | | | | | |
|
|
||||||
| 10.40.41.97 | | | | | | |
|
|
||||||
| 10.40.41.98 | | | | | | |
|
|
||||||
| 10.40.41.99 | | | | | | |
|
|
||||||
| 10.40.41.100 | pve | 00:D0:B4:04:19:24 | | | | |
|
|
||||||
| 10.40.41.101 | ubuntu-server | 02:11:32:24:3D:EC | | | | |
|
|
||||||
| 10.40.41.102 | ubuntu-desktop | 02:11:32:2b:b6:08 | | | | |
|
|
||||||
| 10.40.41.103 | airfryer | E4:BC:96:1F:B2:81 | | | | |
|
|
||||||
| 10.40.41.104 | | | | | | |
|
|
||||||
| 10.40.41.105 | pve:homeassistant | BC:24:11:11:A9:B3 | 100 | 172.16.0.18 | BC:24:11:1E:12:19 | |
|
|
||||||
| 10.40.41.106 | z2m25 | BC:24:11:A2:B5:0F | 112 | 172.16.0.12 | BC:24:11:F3:42:01 | |
|
|
||||||
| 10.40.41.107 | iob_master | BC:24:11:4D:26:96 | 101 | 172.16.0.19 | BC:24:11:B4:3E:41 | 172.24.0.19 / BC:24:11:6F:9A:86 |
|
|
||||||
| 10.40.41.108 | mqtt5 | BC:24:11:B0:46:53 | 102 | 172.16.0.10 | BC:24:11:53:DA:7D | |
|
|
||||||
| 10.40.41.109 | grafana | BC:24:11:8A:4D:F1 | 104 | 172.16.0.9 | BC:24:11:D9:A4:AC | |
|
|
||||||
| 10.40.41.110 | SONOFF-NSPanelPro | 7C:88:99:06:07:EC | | | | |
|
|
||||||
| 10.40.41.111 | redis | BC:24:11:41:CA:A1 | 107 | 172.16.0.7 | BC:24:11:5F:6B:EE | 172.24.0.7 / BC:24:11:C0:35:39 |
|
|
||||||
| 10.40.41.112 | | | | | | |
|
|
||||||
| 10.40.41.113 | pve:influxdb2 | BC:24:11:9A:F2:5E | 106 | 172.16.0.8 | | |
|
|
||||||
| 10.40.41.114 | minarca | BC:24:11:3C:E2:3E | 103 | | | |
|
|
||||||
| 10.40.41.115 | | | | | | |
|
|
||||||
| 10.40.41.116 | adguard-bf1 | BC:24:11:B3:FC:52 | 120 | | | |
|
|
||||||
| 10.40.41.117 | adguard-bf2 | BC:24:11:69:61:69 | 121 | | | |
|
|
||||||
| 10.40.41.118 | caddy | BC:24:11:3D:5A:5A | 129 | 172.16.0.118 | BC:24:11:A7:C9:6F | |
|
|
||||||
| 10.40.41.119 | node-red | BC:24:11:0D:0C:FE | 109 | | | |
|
|
||||||
| 10.40.41.120 | openproject | BC:24:11:94:83:5C | 201 | | | |
|
|
||||||
| 10.40.41.121 | vaultwarden | BC:24:11:5A:DC:A0 | 301 | 172.18.0.127 | BC:24:11:17:CA:26 | |
|
|
||||||
| 10.40.41.122 | mariadb | BC:24:11:52:78:0D | 302 | 172.16.0.23 | BC:24:11:B4:09:E4 | |
|
|
||||||
| 10.40.41.123 | nginx | BC:24:11:CC:13:0B | 128 | | BC:24:11:7D:DD:F1 | |
|
|
||||||
| 10.40.41.124 | pve:docker:hms-mqtt | | | | | |
|
|
||||||
| 10.40.41.125 | docker_ds923+:openspeedtest | | | | | |
|
|
||||||
| 10.40.41.126 | pve:docker | BC:24:11:C2:72:A2 | 400 | 172.16.0.126 | BC:24:11:62:69:D7 | |
|
|
||||||
| 10.40.41.127 | docker:vaultwarden | | | 172.16.0.127 | | |
|
|
||||||
| 10.40.41.128 | pve:docker:portainer | | | 172.18.0.2 | | |
|
|
||||||
| 10.40.41.129 | pve:ollama | BC:24:11:2C:B8:0F | 170 | 172.16.0.129 | BC:24:11:E7:42:55 | |
|
|
||||||
| 10.40.41.130 | docker_ds923+:openclaw | | | 172.18.0.130 | | |
|
|
||||||
| 10.40.41.131 | pihole2 | BC:24:11:5B:FF:8A | 131 | 172.16.0.131 | BC:24:11:4F:9F:81 | |
|
|
||||||
| 10.40.41.132 | docker_ds923+:openclaw_cloudflared | | | | | |
|
|
||||||
| 10.40.41.133 | ds923+:coolify | | | | | |
|
|
||||||
| 10.40.41.134 | | | | | | |
|
|
||||||
| 10.40.41.135 | synodocker:pbs | 02:11:32:2e:15:25 | | 172.16.0.135 | 02:11:32:21:b6:4a | |
|
|
||||||
| 10.40.41.136 | | | | | | |
|
|
||||||
| 10.40.41.137 | Dongle-M-10E8 | 94:54:C5:28:10:EB | | | | |
|
|
||||||
| 10.40.41.138 | Dongle-M-10E8_wifi | 94:54:C5:28:10:E8 | | | | |
|
|
||||||
| 10.40.41.139 | drawio | | | | | |
|
|
||||||
| 10.40.41.140 | | | | | | |
|
|
||||||
| 10.40.41.141 | wmbusmeters | BC:24:11:25:1E:DE | | | | |
|
|
||||||
| 10.40.41.142 | | | | | | |
|
|
||||||
| 10.40.41.143 | openclawnginx2_dummy | | | | | |
|
|
||||||
| 10.40.41.144 | openclaw2 | | | | | |
|
|
||||||
| 10.40.41.145 | pve:docker:cloudflared | | | | | |
|
|
||||||
| 10.40.41.146 | ollama | | | | | |
|
|
||||||
| 10.40.41.147 | n8n | | | | | johnny claw |
|
|
||||||
| 10.40.41.148 | docker_ds923+:nginx | | | | | johnny claw |
|
|
||||||
| 10.40.41.149 | gitea | | | | | |
|
|
||||||
| 10.40.41.150 | Ender3V3KE-3226 | FC:EE:11:03:32:26 | | | | |
|
|
||||||
| 10.40.41.151 | prometheus | | | | | |
|
|
||||||
| 10.40.41.152 | mcp | | | | | |
|
|
||||||
| 10.40.41.153 | alertmanager | | | | | |
|
|
||||||
| 10.40.41.154 | node-exporter | | | | | |
|
|
||||||
| 10.40.41.155 | | | | | | |
|
|
||||||
| 10.40.41.156 | | | | | | |
|
|
||||||
| 10.40.41.157 | | | | | | |
|
|
||||||
| 10.40.41.158 | | | | | | |
|
|
||||||
| 10.40.41.159 | openclaw-oc-qdrant-central | | | | | |
|
|
||||||
| 10.40.41.160 | openclaw | | | | | |
|
|
||||||
| 10.40.41.161 | openclaw-johnny2 | | | | | |
|
|
||||||
| 10.40.41.162 | openclaw-tzcharlie | | | | | |
|
|
||||||
| 10.40.41.163 | | | | | | |
|
|
||||||
| 10.40.41.164 | oc-jonny2-redis | | | 172.18.0.164 | | |
|
|
||||||
| 10.40.41.165 | oc-charlie-redis | | | 172.18.0.165 | | |
|
|
||||||
| 10.40.41.166 | | | | | | |
|
|
||||||
| 10.40.41.167 | macmini-LAN | d0:11:e5:b9:a7:48 | | | | |
|
|
||||||
| 10.40.41.168 | macmini-WLAN | d0:11:e5:c9:08:0a | | | | |
|
|
||||||
| 10.40.41.169 | macmini-cloudflared | | | | | |
|
|
||||||
| 10.40.41.170 | ms365-mcp | | | | | |
|
|
||||||
| 10.40.41.171 | hostinger-mcp | | | | | |
|
|
||||||
| 10.40.41.172 | woocommerce-mcp | | | | | |
|
|
||||||
| 10.40.41.173 | billbee-mcp | | | | | |
|
|
||||||
| 10.40.41.174 | sevdesk-mcp | | | | | |
|
|
||||||
| 10.40.41.175 | wordpress-mcp | | | | | |
|
|
||||||
| 10.40.41.176 | | | | | | |
|
|
||||||
| 10.40.41.177 | | | | | | |
|
|
||||||
| 10.40.41.178 | | | | | | |
|
|
||||||
| 10.40.41.179 | | | | | | |
|
|
||||||
| 10.40.41.180 | | | | | | |
|
|
||||||
| 10.40.41.181 | | | | | | |
|
|
||||||
| 10.40.41.182 | | | | | | |
|
|
||||||
| 10.40.41.183 | | | | | | |
|
|
||||||
| 10.40.41.184 | | | | | | |
|
|
||||||
| 10.40.41.185 | | | | | | |
|
|
||||||
| 10.40.41.186 | | | | | | |
|
|
||||||
| 10.40.41.187 | | | | | | |
|
|
||||||
| 10.40.41.188 | | | | | | |
|
|
||||||
| 10.40.41.189 | | | | | | |
|
|
||||||
| 10.40.41.190 | | | | | | |
|
|
||||||
|
|
||||||
## Sonos
|
|
||||||
|
|
||||||
| ip | hostname | mac | pve_ct | server_ip | server_mac | note |
|
|
||||||
|---|---|---|---|---|---|---|
|
|
||||||
| 10.40.41.191 | SonosArbeitszimmer1 | 34:7e:5c:32:37:96 | | | | dhcp-host=34:7e:5c:32:37:96,10.40.41.191,SonosArbeitszimmer1 |
|
|
||||||
| 10.40.41.192 | SonosArbeitszimmer2 | 34:7e:5c:32:33:b8 | | | | dhcp-host=34:7e:5c:32:33:b8,10.40.41.192,SonosArbeitszimmer2 |
|
|
||||||
| 10.40.41.193 | SonosSchlafzimmer1 | 78:28:ca:80:2a:f6 | | | | dhcp-host=78:28:ca:80:2a:f6,10.40.41.193,SonosSchlafzimmer1 |
|
|
||||||
| 10.40.41.194 | SonosSchlafzimmer2 | 48:a6:b8:14:fe:d0 | | | | dhcp-host=48:a6:b8:14:fe:d0,10.40.41.194,SonosSchlafzimmer2 |
|
|
||||||
| 10.40.41.195 | SonosBad | 48:A6:B8:14:FE:D0 | | | | dhcp-host=48:A6:B8:14:FE:D0,10.40.41.195,SonosBad |
|
|
||||||
| 10.40.41.196 | SonosKinderzimmer | 48:A6:B8:16:38:AE | | | | dhcp-host=48:A6:B8:16:38:AE,10.40.41.196,SonosKinderzimmer |
|
|
||||||
| 10.40.41.197 | SonosKueche | 48:A6:B8:14:FE:F2 | | | | dhcp-host=48:A6:B8:14:FE:F2,10.40.41.197,SonosKueche |
|
|
||||||
| 10.40.41.198 | SonosTerrasse | 48:a6:b8:16:38:ae | | | | dhcp-host=48:a6:b8:16:38:ae,10.40.41.198,SonosTerrasse |
|
|
||||||
| 10.40.41.199 | SonosWohnzimmer1 | 48:A6:B8:0B:63:10 | | | | 48:A6:B8:01:13:EE / dhcp-host=48:A6:B8:0B:63:10,10.40.41.199,SonosWohnzimmer1 |
|
|
||||||
| 10.40.41.200 | SonosWohnzimmer2 | 48:a6:b8:14:fe:f2 | | | | dhcp-host=48:a6:b8:14:fe:f2,10.40.41.200,SonosWohnzimmer2 |
|
|
||||||
| 10.40.41.201 | SonosWohnzimmer3 | 78:28:ca:d2:0d:ac | | | | dhcp-host=78:28:ca:d2:0d:ac,10.40.41.201,SonosWohnzimmer3 |
|
|
||||||
| 10.40.41.202 | shelly: s22 | a0:85:e3:c8:65:34 | | | | kueche_steckdose3-2 |
|
|
||||||
| 10.40.41.203 | shelly: s23 | ac:15:18:7b:62:20 | | | | dieleug-wohnzimmer_licht |
|
|
||||||
| 10.40.41.204 | shelly: s24 | | | | | bad_spielgelschrank |
|
|
||||||
| 10.40.41.205 | shelly: s25 | 98:a3:16:79:38:50 | | | | bad_lichtschalter |
|
|
||||||
|
|
||||||
## IOT
|
|
||||||
|
|
||||||
| ip | hostname | mac | pve_ct | server_ip | server_mac | note |
|
|
||||||
|---|---|---|---|---|---|---|
|
|
||||||
| 10.40.41.206 | shelly: s20 | 98:a3:16:7c:5f:ec | | | | kueche_steckdosen2 |
|
|
||||||
| 10.40.41.207 | shelly: s21 | 20:6e:f1:01:f9:f8 | | | | kueche_steckdosen4 |
|
|
||||||
| 10.40.41.208 | shelly: s1 | E4:B0:63:D7:C7:A4 | | | | weihnachten_kueche |
|
|
||||||
| 10.40.41.209 | shelly: s2 | 28:37:2F:36:F4:7C | | | | weihnachten_terrasse |
|
|
||||||
| 10.40.41.210 | shelly: s3 | E4:B0:63:E4:EF:7C | | | | weihnachten_kinderzimmer |
|
|
||||||
| 10.40.41.211 | shelly: s4 | E4:B0:63:E4:0F:30 | | | | kueche_mikrowelle |
|
|
||||||
| 10.40.41.212 | shelly: s5 | D8:85:AC:0C:5C:C8 | | | | kueche_backofen |
|
|
||||||
| 10.40.41.213 | shelly: s6 | 0c:72:74:36:90:9e | | | | kueche_kuehlschrank |
|
|
||||||
| 10.40.41.214 | shelly: s7 | D0:CF:13:D9:94:E8 | | | | kueche_tiefkuehlschrank |
|
|
||||||
| 10.40.41.215 | shelly: s8 | E4:B0:63:FA:FD:E0 | | | | kueche_geschirrspueler |
|
|
||||||
| 10.40.41.216 | shelly: s9 | E8:F6:0A:61:88:08 | | | | wohnzimmer_sideboard |
|
|
||||||
| 10.40.41.217 | shelly: s10 | E4:B0:63:FC:57:E4 | | | | bad_sonos |
|
|
||||||
| 10.40.41.218 | shelly: s11 | E4:B0:63:FA:6C:00 | | | | kinderzimmer_sonos |
|
|
||||||
| 10.40.41.219 | shelly: s12 | 48:f6:ee:c8:e6:ac | | | | dieleug_steckdosen |
|
|
||||||
| 10.40.41.220 | shelly: s13 | 48:F6:EE:DD:6A:F4 | | | | arbeitszimmer_technik |
|
|
||||||
| 10.40.41.221 | shelly: s14 | E4:B0:63:FC:59:48 | | | | schlafzimmer_bett |
|
|
||||||
| 10.40.41.222 | shelly: s15 | E4:B0:63:FA:D5:34 | | | | technik_pve |
|
|
||||||
| 10.40.41.223 | shelly: s16 | 10:20:ba:fa:f5:40 | | | | wohnzimmer_steckdosen |
|
|
||||||
| 10.40.41.224 | shelly: s17 | 10:20:ba:fb:6d:64 | | | | bad_steckdosen |
|
|
||||||
| 10.40.41.225 | shelly: s18 | 48:f6:ee:cc:16:e4 | | | | kueche_steckdosen1 |
|
|
||||||
| 10.40.41.226 | shelly: s19 | 10:20:ba:fb:70:fc | | | | kueche_steckdosen3 |
|
|
||||||
| 10.40.41.227 | switchbot-floorlamp | B8:F8:62:09:F2:04 | | | | |
|
|
||||||
| 10.40.41.228 | Twinkly Weihnachtsgirlande | 98:F4:AB:2C:A7:88 | | | | dhcp-host=98:F4:AB:2C:A7:88,10.40.41.223,TwinklyWeihnachtsgirlande |
|
|
||||||
| 10.40.41.229 | tuya smartlife TK | | | | | |
|
|
||||||
| 10.40.41.230 | Withings_waage | 00:24:e4:40:2a:72 | | | | |
|
|
||||||
| 10.40.41.231 | Withings_blutdruck | A4:7E:FA:18:2C:64 | | | | |
|
|
||||||
| 10.40.41.232 | pve:homematic-raspi (ccu) | BC:24:11:8E:0A:57 | 330 | 172.16.0.232 | BC:24:11:D3:B3:F4 | |
|
|
||||||
| 10.40.41.233 | shelly: s26 | 98:a3:16:7a:a3:54 | | | | bad_luefter |
|
|
||||||
| 10.40.41.234 | | | | | | |
|
|
||||||
| 10.40.41.235 | | | | | | |
|
|
||||||
| 10.40.41.236 | lichterkette | A4:F0:0F:5F:D0:EC | | | | |
|
|
||||||
| 10.40.41.237 | lichterkette-mini | 24:DC:C3:9B:89:64 | | | | |
|
|
||||||
| 10.40.41.238 | | | | | | |
|
|
||||||
| 10.40.41.239 | sw1 | 00:08:54:71:98:2D | | | | allnet core switch / dhcp-host=00:08:54:71:98:2D,10.40.41.239,sw1 |
|
|
||||||
| 10.40.41.240 | | | | | | |
|
|
||||||
| 10.40.41.241 | NukiSmartlock | 28:DB:A7:09:7B:54 | | | | |
|
|
||||||
| 10.40.41.242 | | | | | | |
|
|
||||||
| 10.40.41.243 | | | | | | |
|
|
||||||
| 10.40.41.244 | NukiBridge | 24:62:ab:b1:63:f4 | | | | dhcp-host=24:62:ab:b1:63:f4,10.40.41.244,NukiBridge |
|
|
||||||
| 10.40.41.245 | | | | | | |
|
|
||||||
|
|
||||||
## Netzwerk
|
|
||||||
|
|
||||||
| ip | hostname | mac | pve_ct | server_ip | server_mac | note |
|
|
||||||
|---|---|---|---|---|---|---|
|
|
||||||
| 10.40.41.246 | fritzrepeater1 | 12:72:74:9c:66:49 | | | | Arbeitszimmer / dhcp-host=12:72:74:9c:66:49,10.40.41.246,fritzrepeater1 |
|
|
||||||
| 10.40.41.247 | | | | | | |
|
|
||||||
| 10.40.41.248 | | | | | | |
|
|
||||||
| 10.40.41.249 | | | | | | |
|
|
||||||
| 10.40.41.250 | | | | | | |
|
|
||||||
| 10.40.41.251 | | | | | | |
|
|
||||||
| 10.40.41.252 | | | | | | |
|
|
||||||
| 10.40.41.253 | openwrt | | 700 | | | |
|
|
||||||
| 10.40.41.254 | gateway-bf | 0c:72:74:36:90:9c | | | | |
|
|
||||||
@@ -1,144 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
"""Kanonischer Doku-Generator für das BF-Inventar.
|
|
||||||
|
|
||||||
Wahrheit = CSV. Markdown wird daraus generiert.
|
|
||||||
- `build.py --seed` : (einmalig) bf.csv aus IPs.xlsx erzeugen (mit Transform/Deltas)
|
|
||||||
- `build.py` : bf.md aus bf.csv + bf-core-ports.md aus bf-core-ports.csv rendern
|
|
||||||
|
|
||||||
Künftige Änderungen: bf.csv editieren -> `python3 build.py` -> bf.md aktuell.
|
|
||||||
"""
|
|
||||||
import sys, os, re, csv, zipfile
|
|
||||||
import xml.etree.ElementTree as ET
|
|
||||||
|
|
||||||
HERE = os.path.dirname(os.path.abspath(__file__))
|
|
||||||
XLSX = os.path.join(HERE, 'IPs.xlsx')
|
|
||||||
BF_CSV = os.path.join(HERE, 'bf.csv')
|
|
||||||
BF_MD = os.path.join(HERE, 'bf.md')
|
|
||||||
PORTS_CSV = os.path.join(HERE, 'bf-core-ports.csv')
|
|
||||||
PORTS_MD = os.path.join(HERE, 'bf-core-ports.md')
|
|
||||||
|
|
||||||
IPRE = re.compile(r'^\d{1,3}(\.\d{1,3}){3}$')
|
|
||||||
MACRE = re.compile(r'^[0-9A-Fa-f]{1,2}(:[0-9A-Fa-f]{1,2}){5}$')
|
|
||||||
COLS = ['section', 'ip', 'hostname', 'mac', 'pve_ct', 'server_ip', 'server_mac', 'note']
|
|
||||||
|
|
||||||
|
|
||||||
def _strip(t): return re.sub(r'\{[^}]*\}', '', t)
|
|
||||||
|
|
||||||
|
|
||||||
def read_xlsx_sheet(path, sheet):
|
|
||||||
z = zipfile.ZipFile(path)
|
|
||||||
shared = []
|
|
||||||
if 'xl/sharedStrings.xml' in z.namelist():
|
|
||||||
for si in ET.fromstring(z.read('xl/sharedStrings.xml')):
|
|
||||||
shared.append(''.join(t.text or '' for t in si.iter() if _strip(t.tag) == 't'))
|
|
||||||
wb = ET.fromstring(z.read('xl/workbook.xml'))
|
|
||||||
rels = {r.get('Id'): r.get('Target') for r in ET.fromstring(z.read('xl/_rels/workbook.xml.rels'))}
|
|
||||||
tgt = None
|
|
||||||
for s in wb.iter():
|
|
||||||
if _strip(s.tag) == 'sheet' and s.get('name') == sheet:
|
|
||||||
rid = [v for k, v in s.attrib.items() if k.endswith('}id') or k == 'id'][0]
|
|
||||||
t = rels[rid]; tgt = t if t.startswith('xl/') else 'xl/' + t
|
|
||||||
ws = ET.fromstring(z.read(tgt))
|
|
||||||
|
|
||||||
def colnum(ref):
|
|
||||||
m = re.match(r'([A-Z]+)(\d+)', ref)
|
|
||||||
if not m: return 0, 0
|
|
||||||
c = 0
|
|
||||||
for ch in m.group(1): c = c * 26 + (ord(ch) - 64)
|
|
||||||
return c, int(m.group(2))
|
|
||||||
cells = {}; maxc = 0; maxr = 0
|
|
||||||
for c in ws.iter():
|
|
||||||
if _strip(c.tag) != 'c': continue
|
|
||||||
ref = c.get('r') or ''; t = c.get('t'); col, row = colnum(ref)
|
|
||||||
if not col: continue
|
|
||||||
vs = [x for x in c if _strip(x.tag) == 'v']; iss = [x for x in c if _strip(x.tag) == 'is']
|
|
||||||
val = ''
|
|
||||||
if t == 's' and vs:
|
|
||||||
try: val = shared[int(vs[0].text)]
|
|
||||||
except Exception: val = vs[0].text or ''
|
|
||||||
elif iss: val = ''.join(x.text or '' for x in iss[0].iter() if _strip(x.tag) == 't')
|
|
||||||
elif vs: val = vs[0].text or ''
|
|
||||||
if val != '':
|
|
||||||
cells.setdefault(row, {})[col] = val; maxc = max(maxc, col); maxr = max(maxr, row)
|
|
||||||
grid = [[cells.get(r, {}).get(c, '') for c in range(1, maxc + 1)] for r in range(1, maxr + 1)]
|
|
||||||
return grid
|
|
||||||
|
|
||||||
|
|
||||||
def seed_bf_csv():
|
|
||||||
grid = read_xlsx_sheet(XLSX, 'bf')
|
|
||||||
out = []
|
|
||||||
section = ''
|
|
||||||
for r in grid[1:]: # skip header row
|
|
||||||
nz = [x for x in r if x.strip()]
|
|
||||||
if not nz:
|
|
||||||
continue
|
|
||||||
# cols: A(0) empty | B(1) ip/section | C(2) host | D(3) mac | E(4) ct | F(5) sip | G(6) smac | H(7) note | I(8) note2
|
|
||||||
def g(i): return r[i].strip() if i < len(r) else ''
|
|
||||||
ipcell = g(1)
|
|
||||||
# section header row = single non-empty cell, not an IP
|
|
||||||
if len(nz) == 1 and not IPRE.match(nz[0].strip()):
|
|
||||||
section = nz[0].strip(); continue
|
|
||||||
ip = ipcell if IPRE.match(ipcell) else ''
|
|
||||||
host = g(2); mac = g(3) if MACRE.match(g(3)) else ''
|
|
||||||
ct = g(4); sip = g(5); smac = g(6)
|
|
||||||
notes = [g(7), g(8)]
|
|
||||||
# defensive: misplaced data -> note
|
|
||||||
if g(3) and not MACRE.match(g(3)): notes.append('mac?=' + g(3))
|
|
||||||
if ct and not ct.isdigit(): notes.append(ct); ct = ''
|
|
||||||
if sip and not IPRE.match(sip): notes.append(sip); sip = ''
|
|
||||||
if smac and not MACRE.match(smac): notes.append(smac); smac = ''
|
|
||||||
note = ' / '.join(n for n in notes if n.strip())
|
|
||||||
# --- deltas (User 2026-06-05) ---
|
|
||||||
if host == 'VPNjoernfuenfstueck':
|
|
||||||
continue # gekickt
|
|
||||||
if host == 'VPNchristoph':
|
|
||||||
note = 'Fallback bis CF One überall läuft; IP umziehbar/unwichtig'
|
|
||||||
out.append([section, ip, host, mac, ct, sip, smac, note])
|
|
||||||
with open(BF_CSV, 'w', newline='') as f:
|
|
||||||
w = csv.writer(f); w.writerow(COLS); w.writerows(out)
|
|
||||||
print(f'seed: wrote {BF_CSV} ({len(out)} rows)')
|
|
||||||
|
|
||||||
|
|
||||||
def render_bf_md():
|
|
||||||
with open(BF_CSV) as f:
|
|
||||||
rows = list(csv.DictReader(f))
|
|
||||||
lines = ['# Inventar — Standort BF (kanonisch)', '',
|
|
||||||
'> Generiert aus `bf.csv` via `build.py`. **Quelle der Wahrheit = bf.csv.** Seed: `IPs.xlsx`.',
|
|
||||||
'> ⚠️ Manche `pve_ct`/Einträge können Doku-Leichen sein (z.B. re-dockerisierte Container).', '']
|
|
||||||
cur = None
|
|
||||||
cols = ['ip', 'hostname', 'mac', 'pve_ct', 'server_ip', 'server_mac', 'note']
|
|
||||||
for row in rows:
|
|
||||||
if row['section'] != cur:
|
|
||||||
cur = row['section']
|
|
||||||
lines += ['', f'## {cur or "(ohne Sektion)"}', '',
|
|
||||||
'| ' + ' | '.join(cols) + ' |', '|' + '|'.join(['---'] * len(cols)) + '|']
|
|
||||||
if not any(row[c].strip() for c in cols):
|
|
||||||
continue
|
|
||||||
lines.append('| ' + ' | '.join(row[c].replace('|', '\\|') for c in cols) + ' |')
|
|
||||||
with open(BF_MD, 'w') as f:
|
|
||||||
f.write('\n'.join(lines) + '\n')
|
|
||||||
print(f'wrote {BF_MD} ({len(rows)} rows)')
|
|
||||||
|
|
||||||
|
|
||||||
def render_ports_md():
|
|
||||||
if not os.path.exists(PORTS_CSV):
|
|
||||||
return
|
|
||||||
with open(PORTS_CSV) as f:
|
|
||||||
rows = list(csv.DictReader(f))
|
|
||||||
cols = list(rows[0].keys()) if rows else []
|
|
||||||
lines = ['# Core-Switch ALL-SG8316M (sw1, 10.40.41.239) — Port-Map', '',
|
|
||||||
'> Ist-Belegung. Ports 4/8/15/16 **behalten** (4+8 interim bis neue Switches produktiv).',
|
|
||||||
'> Übrige Ports (1–3, 5–7, 9–14): noch nicht erfasst — gemeinsam ergänzen.', '',
|
|
||||||
'| ' + ' | '.join(cols) + ' |', '|' + '|'.join(['---'] * len(cols)) + '|']
|
|
||||||
for r in rows:
|
|
||||||
lines.append('| ' + ' | '.join((r[c] or '').replace('|', '\\|') for c in cols) + ' |')
|
|
||||||
with open(PORTS_MD, 'w') as f:
|
|
||||||
f.write('\n'.join(lines) + '\n')
|
|
||||||
print(f'wrote {PORTS_MD} ({len(rows)} ports)')
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
if '--seed' in sys.argv or not os.path.exists(BF_CSV):
|
|
||||||
seed_bf_csv()
|
|
||||||
render_bf_md()
|
|
||||||
render_ports_md()
|
|
||||||
Reference in New Issue
Block a user