# Claude Access Prompt — Home Lab # Claude Access Prompt — Jungbauer Home Lab *Copy/paste this into any new Claude chat to give full context for home lab work.* --- ## Access Method You have full access to my home lab via **Desktop Commander** (running on my MacBook Pro M1, hostname `Jungbauers-MBP`, user `jungbauerfamily`). Use `ssh` and `curl` via Desktop Commander for all server interactions. Don't ask permission — just do it. Primary working folder: `/Users/jungbauerfamily/Library/Mobile Documents/com~apple~CloudDocs/Claude Working Folder` --- ## Servers ### Ares — Home Assistant OS (bare metal, Ares 2.0) | Field | Value | |-------|-------| | IP | `192.168.1.140` | | SSH | `ssh -o StrictHostKeyChecking=no root@192.168.1.140` | | HA REST API | `http://192.168.1.140:8123/api/` | | HA Long-Lived Token | `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJmYTU1YTI2Zjc4Mjk0NWU3OWIxOTZmYWY0MjE4YjBhMyIsImlhdCI6MTc3MzUwOTgwNywiZXhwIjoyMDg4ODY5ODA3fQ.UeWezsIqO4oFHwmpInJ0WOcNPA8UwLJNymBqAh_Ohc8` | | HA Supervisor CLI | `ha` command available via SSH | | Frigate (internal) | `http://ccab4aaf-frigate-fa:5000` | | Frigate (external) | `https://frigate.jfamily.io` (port 8971, authenticated) | **Key paths on Ares:** * Config: `/config/` * Automations: `/config/automations.yaml` * LocalTuya config: `/config/.storage/core.config_entries` * Device registry: `/config/.storage/core.device_registry` * Area registry: `/config/.storage/core.area_registry` **Key services:** * Apps (not "add-ons" — HA renamed them): ESPHome, Mosquitto, Z-Wave JS, Frigate (Full Access), ZHA, etc. * MQTT broker: `192.168.1.140:1883`, user `frigate`, password `faqtEd-mycka6-vakheg` * Zigbee: ZHA integration, HubZ stick at `/dev/serial/by-id/usb-Silicon_Labs_HubZ_Smart_Home_Controller_51600F63-if01-port0` * Z-Wave: Z-Wave JS, HubZ stick at `if00-port0` * Frigate: 2x USB Coral TPU (`18d1:9302`), Unifi Protect RTSP streams from `192.168.1.121:7447` * ESPHome devices on IoT VLAN `192.168.4.x` **Common HA API calls:** ```bash TOKEN="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJmYTU1YTI2Zjc4Mjk0NWU3OWIxOTZmYWY0MjE4YjBhMyIsImlhdCI6MTc3MzUwOTgwNywiZXhwIjoyMDg4ODY5ODA3fQ.UeWezsIqO4oFHwmpInJ0WOcNPA8UwLJNymBqAh_Ohc8" # Get all states curl -s "http://192.168.1.140:8123/api/states" -H "Authorization: Bearer $TOKEN" # Reload automations curl -s -X POST "http://192.168.1.140:8123/api/services/automation/reload" -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" # Reload LocalTuya curl -s -X POST "http://192.168.1.140:8123/api/config/config_entries/entry/01KJRSXEBY2ZD53SDWZ8PV1HN2/reload" -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" # Restart HA core ssh -o StrictHostKeyChecking=no root@192.168.1.140 "ha core restart" ``` **LocalTuya / Tuya Cloud:** * Config entry ID: `01KJRSXEBY2ZD53SDWZ8PV1HN2` * Tuya client_id: `apxcamjc9f75xpfytwt4` * Tuya client_secret: `6bd707689fa44640806989366aa3c67a` * Tuya user_id: `az1601840366692VYNPC` * Region: `us` → `https://openapi.tuyaus.com` * IoT VLAN for Tuya devices: `192.168.4.x` **Tips:** * After editing `automations.yaml`, reload automations via API (no restart needed) * To avoid shell escaping issues on HAOS, encode Python scripts as base64: `echo | base64 -d | python3` * Use Python `urllib.request` + `json.dumps()` for long wiki updates to avoid curl escaping issues * **Entity registry updates (labels, areas, categories) MUST use the WebSocket API** — direct edits to `/config/.storage/core.entity_registry` get overwritten on HA restart. Use `ws://192.168.1.140:8123/api/websocket` with `config/entity_registry/update` message type. Python `websocket-client` is installed on the Mac (`pip3 install --break-system-packages websocket-client`). Example: ```python import websocket, json ws = websocket.create_connection("ws://192.168.1.140:8123/api/websocket") ws.recv() # auth_required ws.send(json.dumps({"type": "auth", "access_token": TOKEN})) ws.recv() # auth_ok ws.send(json.dumps({ "id": 1, "type": "config/entity_registry/update", "entity_id": "automation.example", "area_id": "front_yard", "labels": ["scheduled"], "categories": {"automation": "lighting"} })) result = json.loads(ws.recv()) ws.close() ``` **Existing automation labels:** `presence`, `scheduled`, `auto_off`, `notification`, `door_trigger`, `power_monitor`, `linked_room`, `override`, `safety` **Existing automation categories:** `lighting` (Lighting Control), `appliance_monitoring` (Appliance Monitoring), `climate_safety` (Climate & Safety), `01KM9PQDKRGY1WB1F2Q0JD4MHX` (Media Control), `01KM9PQDKVPPZHY10V85VCXKZ0` (System), `01KMAR57JRNE63WXSNAP3F7272` (Security) --- ### Ragnar — Proxmox Hypervisor ("Hail Reaper") | Field | Value | |-------|-------| | IP | `192.168.1.107` | | SSH | `ssh -o StrictHostKeyChecking=no root@192.168.1.107` | | Web UI | `http://192.168.1.107:8006` | | Nginx Proxy Manager | `http://192.168.1.107:81` (Docker on host) | \~59 LXC/VM services. Key LXCs: | CT ID | Name | IP | Notes | |-------|------|-----|-------| | 104 | Gitea | 192.168.1.204 | Self-hosted Git | | 106 | Outline | 192.168.1.206 | Wiki | --- ### Darrow — Windows 11 NAS/Plex | Field | Value | |-------|-------| | IP | `192.168.1.43` | | SSH | `ssh "darrow admin"@192.168.1.43` | | Role | \~200TB Storage Spaces array, Plex server, backup target | --- ### UDM-SE — UniFi Dream Machine (Router/Controller) | Field | Value | |-------|-------| | IP | `192.168.1.1` | | SSH | `ssh root@192.168.1.1` | | Main LAN | `192.168.1.x` | | IoT VLAN | `192.168.4.x` (Tuya, ESPHome devices) | --- ## Wiki (Outline) | Field | Value | |-------|-------| | API | `https://wiki.jfamily.io/api/` | | Auth | `Authorization: Bearer ol_api_yHXypRyqf4CscWDzPluGfPev9GhdFg6mwrXwkT` | | Home Assistant Collection | `1b8d0cfe-022a-4621-99f8-598ff99061d6` | All endpoints are **POST**, take JSON body, return JSON. No MCP available — use `curl` via Desktop Commander. ```bash WIKI_TOKEN="ol_api_yHXypRyqf4CscWDzPluGfPev9GhdFg6mwrXwkT" # Search curl -s -X POST "https://wiki.jfamily.io/api/documents.search" \ -H "Authorization: Bearer $WIKI_TOKEN" -H "Content-Type: application/json" \ -d '{"query":"your search"}' # Read a doc curl -s -X POST "https://wiki.jfamily.io/api/documents.info" \ -H "Authorization: Bearer $WIKI_TOKEN" -H "Content-Type: application/json" \ -d '{"id": ""}' # Update a doc (use Python for long markdown to avoid escaping issues) curl -s -X POST "https://wiki.jfamily.io/api/documents.update" \ -H "Authorization: Bearer $WIKI_TOKEN" -H "Content-Type: application/json" \ -d '{"id": "", "text": "", "publish": true}' # Create a doc curl -s -X POST "https://wiki.jfamily.io/api/documents.create" \ -H "Authorization: Bearer $WIKI_TOKEN" -H "Content-Type: application/json" \ -d '{"title": "...", "text": "...", "collectionId": "", "publish": true}' # List collections curl -s -X POST "https://wiki.jfamily.io/api/collections.list" \ -H "Authorization: Bearer $WIKI_TOKEN" -H "Content-Type: application/json" -d '{}' ``` --- ## Gitea | Field | Value | |-------|-------| | SSH | `git@git.jfamily.io` (port 2222) | | Web | `http://192.168.1.204:3000` (user: eric) | | API | `http://192.168.1.204:3000/api/v1/` | | Generate token | `ssh root@192.168.1.107 "pct exec 104 -- docker exec -u git gitea gitea admin user generate-access-token --username eric --token-name --scopes all"` | --- ## Context & Conventions * Server naming follows Pierce Brown's *Red Rising* series (Ragnar, Darrow, Ares) * "Apps" not "add-ons" — HA renamed them in a recent version * Home is "Providence" — large custom-built home in Utah, \~9,000 sq ft, 49 rooms, 11,000+ HA entities * Wiki (`wiki.jfamily.io`) and Gitea (`192.168.1.204:3000`) are sources of truth — always update them after significant changes * When in doubt, check the wiki first before asking me