diff --git a/openclaw_assistant/CHANGELOG.md b/openclaw_assistant/CHANGELOG.md index 1c31f36..a9533e4 100644 --- a/openclaw_assistant/CHANGELOG.md +++ b/openclaw_assistant/CHANGELOG.md @@ -2,6 +2,14 @@ All notable changes to the OpenClaw Assistant Home Assistant Add-on will be documented in this file. +## [0.5.51] - 2026-02-23 + +### Fixed +- **`web_fetch failed: fetch failed`**: changed `force_ipv4_dns` default to **true**. Node 22 tries IPv6 first; most HAOS VMs lack IPv6 egress, causing outbound `web_fetch` / HTTP tool calls to time out. + +### Added +- **`nginx_log_level` option** (`minimal` / `full`, default `minimal`): suppresses repetitive Home Assistant health-check and polling requests (`GET /`, `GET /v1/models`, `POST /tools/invoke`) from the nginx access log. + ## [0.5.50] - 2026-02-23 **[!WARNING!]** diff --git a/openclaw_assistant/config.yaml b/openclaw_assistant/config.yaml index ef8ce04..fe24ac5 100644 --- a/openclaw_assistant/config.yaml +++ b/openclaw_assistant/config.yaml @@ -1,5 +1,5 @@ name: OpenClaw Assistant -version: "0.5.50" +version: "0.5.51" slug: openclaw_assistant description: Run OpenClaw Assistant (OpenClaw-compatible) as a Home Assistant add-on. url: https://github.com/techartdev/OpenClawHomeAssistant @@ -95,9 +95,14 @@ options: enable_openai_api: false # Force IPv4-first DNS result ordering for Node fetch/network calls. - # Useful on networks where IPv6 resolution exists but IPv6 egress is broken - # (can affect Telegram API polling in some HAOS/VM setups). - force_ipv4_dns: false + # Most HAOS VMs lack IPv6 egress, causing web_fetch / Telegram timeouts. + # Default: true (recommended). Set to false only if you need IPv6. + force_ipv4_dns: true + + # Nginx access log verbosity: + # full: log all requests (useful for debugging) + # minimal: suppress repetitive HA health-check and polling requests (default) + nginx_log_level: minimal schema: @@ -122,4 +127,5 @@ schema: gateway_trusted_proxies: str? enable_openai_api: bool? force_ipv4_dns: bool? + nginx_log_level: list(full|minimal)? diff --git a/openclaw_assistant/nginx.conf.tpl b/openclaw_assistant/nginx.conf.tpl index 5ba13eb..7250959 100644 --- a/openclaw_assistant/nginx.conf.tpl +++ b/openclaw_assistant/nginx.conf.tpl @@ -9,8 +9,8 @@ http { include /etc/nginx/mime.types; default_type application/octet-stream; - # Log to stdout/stderr (container-friendly) - access_log /dev/stdout; + # Logging (configurable via nginx_log_level option) + __NGINX_ACCESS_LOG__ error_log /dev/stderr notice; sendfile on; diff --git a/openclaw_assistant/render_nginx.py b/openclaw_assistant/render_nginx.py index 3cbc5f6..5fa6ac8 100644 --- a/openclaw_assistant/render_nginx.py +++ b/openclaw_assistant/render_nginx.py @@ -30,6 +30,7 @@ def main(): disk_used = os.environ.get('DISK_USED', '') disk_avail = os.environ.get('DISK_AVAIL', '') disk_pct = os.environ.get('DISK_PCT', '') + nginx_log_level = os.environ.get('NGINX_LOG_LEVEL', 'minimal') # Token comes from environment (best-effort CLI query in run.sh) token = os.environ.get('GW_TOKEN', '') @@ -37,7 +38,21 @@ def main(): gw_path = '' if public_url.endswith('/') else '/' # ── nginx.conf ────────────────────────────────────────────── - conf = tpl.replace('__TERMINAL_PORT__', terminal_port) + # Build access_log directive (minimal suppresses HA health-check / polling noise) + if nginx_log_level == 'minimal': + access_log_block = ( + '# Suppress repetitive HA health-check / polling requests\n' + ' map $http_user_agent $loggable {\n' + ' ~HomeAssistant 0;\n' + ' default 1;\n' + ' }\n' + ' access_log /dev/stdout combined if=$loggable;' + ) + else: + access_log_block = 'access_log /dev/stdout;' + + conf = tpl.replace('__NGINX_ACCESS_LOG__', access_log_block) + conf = conf.replace('__TERMINAL_PORT__', terminal_port) # Build HTTPS gateway proxy block (only for lan_https mode) https_block = '' diff --git a/openclaw_assistant/run.sh b/openclaw_assistant/run.sh index 4a13fae..b6f8322 100644 --- a/openclaw_assistant/run.sh +++ b/openclaw_assistant/run.sh @@ -52,8 +52,9 @@ GATEWAY_PORT=$(jq -r '.gateway_port // 18789' "$OPTIONS_FILE") ENABLE_OPENAI_API=$(jq -r '.enable_openai_api // false' "$OPTIONS_FILE") GATEWAY_AUTH_MODE=$(jq -r '.gateway_auth_mode // "token"' "$OPTIONS_FILE") GATEWAY_TRUSTED_PROXIES=$(jq -r '.gateway_trusted_proxies // empty' "$OPTIONS_FILE") -FORCE_IPV4_DNS=$(jq -r '.force_ipv4_dns // false' "$OPTIONS_FILE") +FORCE_IPV4_DNS=$(jq -r '.force_ipv4_dns // true' "$OPTIONS_FILE") ACCESS_MODE=$(jq -r '.access_mode // "custom"' "$OPTIONS_FILE") +NGINX_LOG_LEVEL=$(jq -r '.nginx_log_level // "minimal"' "$OPTIONS_FILE") export TZ="$TZNAME" @@ -603,6 +604,7 @@ GW_PUBLIC_URL="$GW_PUBLIC_URL" GW_TOKEN="$GW_TOKEN" TERMINAL_PORT="$TERMINAL_POR ENABLE_HTTPS_PROXY="$ENABLE_HTTPS_PROXY" HTTPS_PROXY_PORT="$GATEWAY_PORT" \ GATEWAY_INTERNAL_PORT="$GATEWAY_INTERNAL_PORT" ACCESS_MODE="$ACCESS_MODE" \ DISK_TOTAL="$DISK_TOTAL" DISK_USED="$DISK_USED" DISK_AVAIL="$DISK_AVAIL" DISK_PCT="$DISK_PCT" \ + NGINX_LOG_LEVEL="$NGINX_LOG_LEVEL" \ python3 /render_nginx.py echo "Starting ingress proxy (nginx) on :48099 ..." diff --git a/openclaw_assistant/translations/bg.yaml b/openclaw_assistant/translations/bg.yaml index b20b256..8882de8 100644 --- a/openclaw_assistant/translations/bg.yaml +++ b/openclaw_assistant/translations/bg.yaml @@ -88,4 +88,10 @@ configuration: description: Активиране на OpenAI-съвместим Chat Completions ендпойнт. Позволява използването на OpenClaw като разговорен агент в HA Assist pipeline чрез Extended OpenAI Conversation (HACS) или всеки OpenAI-съвместим клиент. force_ipv4_dns: name: Принудителен IPv4 DNS ред - description: Принудително задава IPv4-приоритет при DNS резолв за Node мрежови заявки. Полезно е, когато IPv6 DNS се резолвира, но IPv6 интернет маршрутизацията е неработеща (може да влияе на Telegram API polling). + description: Принудително задава IPv4-приоритет при DNS резолв. Повечето HAOS VM нямат IPv6 изход — предизвиква web_fetch и Telegram грешки. Препоръчително ВКЛЮЧЕНО (по подразбиране). + nginx_log_level: + name: Nginx ниво на логове + description: "Подробност на логовете на nginx проксито. 'minimal' (по подразбиране) потиска повтарящи се HA health-check заявки. 'full' логва всичко." + options: + minimal: "Минимално (потискане на HA polling шум)" + full: "Пълно (логване на всички заявки)" diff --git a/openclaw_assistant/translations/de.yaml b/openclaw_assistant/translations/de.yaml index ae2524c..b18847f 100644 --- a/openclaw_assistant/translations/de.yaml +++ b/openclaw_assistant/translations/de.yaml @@ -88,4 +88,10 @@ configuration: description: OpenAI-kompatiblen Chat Completions Endpunkt aktivieren. Ermöglicht die Verwendung von OpenClaw als Gesprächsagent in der HA Assist Pipeline über Extended OpenAI Conversation (HACS) oder jeden OpenAI-kompatiblen Client. force_ipv4_dns: name: IPv4-DNS-Reihenfolge erzwingen - description: Erzwingt IPv4-vorrangige DNS-Auflösung für Node-Netzwerkaufrufe. Nützlich, wenn IPv6-DNS aufgelöst wird, aber IPv6-Internet-Routing nicht funktioniert (kann Telegram-API-Polling beeinträchtigen). + description: Erzwingt IPv4-vorrangige DNS-Auflösung. Die meisten HAOS-VMs haben keinen IPv6-Ausgang — verursacht web_fetch- und Telegram-Timeouts. Empfohlen EIN (Standard). + nginx_log_level: + name: Nginx Log-Level + description: "Ausführlichkeit des Nginx-Zugriffslogs. 'minimal' (Standard) unterdrückt wiederholte HA-Healthcheck- und Polling-Anfragen. 'full' protokolliert alles." + options: + minimal: "Minimal (HA-Polling-Rauschen unterdrücken)" + full: "Vollständig (alle Anfragen protokollieren)" diff --git a/openclaw_assistant/translations/en.yaml b/openclaw_assistant/translations/en.yaml index aec02af..5921841 100644 --- a/openclaw_assistant/translations/en.yaml +++ b/openclaw_assistant/translations/en.yaml @@ -88,4 +88,10 @@ configuration: description: Enable OpenAI-compatible Chat Completions endpoint. Allows using OpenClaw as a conversation agent in HA Assist pipeline via Extended OpenAI Conversation (HACS) or any OpenAI-compatible client. force_ipv4_dns: name: Force IPv4 DNS Order - description: Force IPv4-first DNS ordering for Node network calls. Useful when IPv6 DNS resolves but IPv6 internet routing is broken (can affect Telegram API polling). + description: Force IPv4-first DNS ordering for Node network calls. Most HAOS VMs lack IPv6 egress, causing web_fetch and Telegram timeouts. Recommended ON (default). + nginx_log_level: + name: Nginx Log Level + description: "Access log verbosity for the built-in nginx proxy. 'minimal' (default) suppresses repetitive HA health-check and polling requests. 'full' logs everything." + options: + minimal: "Minimal (suppress HA polling noise)" + full: "Full (log all requests)" diff --git a/openclaw_assistant/translations/es.yaml b/openclaw_assistant/translations/es.yaml index b5224fa..be7aa70 100644 --- a/openclaw_assistant/translations/es.yaml +++ b/openclaw_assistant/translations/es.yaml @@ -88,4 +88,10 @@ configuration: description: Activar endpoint de Chat Completions compatible con OpenAI. Permite usar OpenClaw como agente de conversación en HA Assist pipeline mediante Extended OpenAI Conversation (HACS) o cualquier cliente compatible con OpenAI. force_ipv4_dns: name: Forzar orden DNS IPv4 - description: Fuerza el orden de DNS con prioridad IPv4 para llamadas de red de Node. Útil cuando el DNS IPv6 resuelve, pero el enrutamiento IPv6 a Internet falla (puede afectar el polling de la API de Telegram). + description: Fuerza prioridad IPv4 en DNS. La mayoría de VMs HAOS no tienen salida IPv6 — causa errores en web_fetch y Telegram. Recomendado ACTIVADO (por defecto). + nginx_log_level: + name: Nivel de log Nginx + description: "Nivel de detalle del log de acceso de nginx. 'minimal' (por defecto) suprime las solicitudes repetitivas de health-check y polling de HA. 'full' registra todo." + options: + minimal: "Mínimo (suprimir ruido de polling HA)" + full: "Completo (registrar todas las solicitudes)" diff --git a/openclaw_assistant/translations/pl.yaml b/openclaw_assistant/translations/pl.yaml index 5dcc7cd..e4db64a 100644 --- a/openclaw_assistant/translations/pl.yaml +++ b/openclaw_assistant/translations/pl.yaml @@ -88,4 +88,10 @@ configuration: description: Włącz endpoint Chat Completions kompatybilny z OpenAI. Pozwala używać OpenClaw jako agenta konwersacji w HA Assist pipeline przez Extended OpenAI Conversation (HACS) lub dowolnego klienta kompatybilnego z OpenAI. force_ipv4_dns: name: Wymuś kolejność DNS IPv4 - description: Wymusza preferowanie IPv4 przy rozwiązywaniu DNS dla wywołań sieciowych Node. Przydatne, gdy DNS IPv6 się rozwiązuje, ale routing IPv6 do Internetu nie działa (może wpływać na polling API Telegrama). + description: Wymusza priorytet IPv4 w DNS. Większość VM HAOS nie ma wyjścia IPv6 — powoduje błędy web_fetch i Telegram. Zalecane WŁĄCZONE (domyślnie). + nginx_log_level: + name: Poziom logów Nginx + description: "Szczegółowość logów dostępu nginx. 'minimal' (domyślnie) pomija powtarzające się żądania health-check i polling HA. 'full' loguje wszystko." + options: + minimal: "Minimalny (pominięcie szumu polling HA)" + full: "Pełny (logowanie wszystkich żądań)" diff --git a/openclaw_assistant/translations/pt-BR.yaml b/openclaw_assistant/translations/pt-BR.yaml index 5f82838..9d28c79 100644 --- a/openclaw_assistant/translations/pt-BR.yaml +++ b/openclaw_assistant/translations/pt-BR.yaml @@ -88,4 +88,10 @@ configuration: description: Habilitar endpoint de Chat Completions compatível com OpenAI. Permite usar o OpenClaw como agente de conversação no pipeline do HA Assist via Extended OpenAI Conversation (HACS) ou qualquer cliente compatível com OpenAI. force_ipv4_dns: name: Forçar ordem DNS IPv4 - description: Força a ordem de DNS com prioridade para IPv4 nas chamadas de rede do Node. Útil quando o DNS IPv6 resolve, mas o roteamento IPv6 para a internet está quebrado (pode afetar o polling da API do Telegram). + description: Força prioridade IPv4 no DNS. A maioria das VMs HAOS não tem saída IPv6 — causa erros em web_fetch e Telegram. Recomendado LIGADO (padrão). + nginx_log_level: + name: Nível de log Nginx + description: "Detalhamento do log de acesso do nginx. 'minimal' (padrão) suprime requisições repetitivas de health-check e polling do HA. 'full' registra tudo." + options: + minimal: "Mínimo (suprimir ruído de polling HA)" + full: "Completo (registrar todas as requisições)"