From 5423b4d8093c3deb052d9697fb49c1becc664b6d Mon Sep 17 00:00:00 2001 From: retr0 <42kdesigners@gmail.com> Date: Fri, 24 Apr 2026 22:56:29 +0200 Subject: [PATCH] HAOS Add-on: s6-overlay Fix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - init: false in config.yaml → s6-overlay deaktiviert, CMD läuft als PID 1 - CMD: python3 /app/main.py direkt (kein run.sh + bashio mehr nötig) - main.py: liest /data/options.json (HA Add-on Options) statt Env-Vars via bashio Co-Authored-By: Claude Sonnet 4.6 --- haos-addon/Dockerfile | 5 +---- haos-addon/config.yaml | 1 + haos-addon/src/main.py | 33 +++++++++++++++++++++------------ 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/haos-addon/Dockerfile b/haos-addon/Dockerfile index ea54e4e..c80a306 100644 --- a/haos-addon/Dockerfile +++ b/haos-addon/Dockerfile @@ -10,7 +10,4 @@ RUN pip3 install --no-cache-dir \ paho-mqtt==1.6.1 \ flask==3.0.3 -COPY run.sh /run.sh -RUN chmod a+x /run.sh - -CMD ["/run.sh"] +CMD ["python3", "/app/main.py"] diff --git a/haos-addon/config.yaml b/haos-addon/config.yaml index 3b11868..0734a8e 100644 --- a/haos-addon/config.yaml +++ b/haos-addon/config.yaml @@ -8,6 +8,7 @@ arch: - amd64 startup: application boot: auto +init: false ingress: true ingress_port: 8099 panel_icon: mdi:solar-power diff --git a/haos-addon/src/main.py b/haos-addon/src/main.py index 42b583e..538b0b6 100644 --- a/haos-addon/src/main.py +++ b/haos-addon/src/main.py @@ -18,6 +18,7 @@ logging.basicConfig( log = logging.getLogger(__name__) CONFIG_PATH = "/data/config.json" +HA_OPTIONS_PATH = "/data/options.json" WEB_DIR = os.path.join(os.path.dirname(__file__), "web") app = Flask(__name__, static_folder=WEB_DIR) @@ -35,23 +36,31 @@ class State: def load_config() -> Dict[str, Any]: + # Defaults cfg: Dict[str, Any] = { - "modbus_ip": os.environ.get("MODBUS_IP", "10.10.20.190"), - "modbus_port": int(os.environ.get("MODBUS_PORT", "502")), - "modbus_address": int(os.environ.get("MODBUS_ADDRESS", "1")), - "inverter_model": os.environ.get("INVERTER_MODEL", "MIC_1500_TL_X"), - "mqtt_broker": os.environ.get("MQTT_BROKER", "core-mosquitto"), - "mqtt_port": int(os.environ.get("MQTT_PORT", "1883")), - "mqtt_user": os.environ.get("MQTT_USER", ""), - "mqtt_pass": os.environ.get("MQTT_PASS", ""), - "mqtt_topic_prefix": os.environ.get("MQTT_TOPIC_PREFIX", "growatt/shinelanx"), - "update_interval": int(os.environ.get("UPDATE_INTERVAL", "30")), + "modbus_ip": "10.10.20.190", + "modbus_port": 502, + "modbus_address": 1, + "inverter_model": "MIC_1500_TL_X", + "mqtt_broker": "core-mosquitto", + "mqtt_port": 1883, + "mqtt_user": "", + "mqtt_pass": "", + "mqtt_topic_prefix": "growatt/shinelanx", + "update_interval": 30, } + # HA add-on options (set via UI/config.yaml options) + if os.path.exists(HA_OPTIONS_PATH): + try: + with open(HA_OPTIONS_PATH) as f: + cfg.update(json.load(f)) + except Exception as e: + log.warning("HA options konnten nicht gelesen werden: %s", e) + # Web UI overrides (gespeichert via /api/config POST) if os.path.exists(CONFIG_PATH): try: with open(CONFIG_PATH) as f: - saved = json.load(f) - cfg.update(saved) + cfg.update(json.load(f)) except Exception as e: log.warning("Config-Datei konnte nicht gelesen werden: %s", e) return cfg