HAOS Add-on: s6-overlay Fix

- 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 <noreply@anthropic.com>
This commit is contained in:
retr0
2026-04-24 22:56:29 +02:00
parent c33db75208
commit 5423b4d809
3 changed files with 23 additions and 16 deletions
+1 -4
View File
@@ -10,7 +10,4 @@ RUN pip3 install --no-cache-dir \
paho-mqtt==1.6.1 \ paho-mqtt==1.6.1 \
flask==3.0.3 flask==3.0.3
COPY run.sh /run.sh CMD ["python3", "/app/main.py"]
RUN chmod a+x /run.sh
CMD ["/run.sh"]
+1
View File
@@ -8,6 +8,7 @@ arch:
- amd64 - amd64
startup: application startup: application
boot: auto boot: auto
init: false
ingress: true ingress: true
ingress_port: 8099 ingress_port: 8099
panel_icon: mdi:solar-power panel_icon: mdi:solar-power
+21 -12
View File
@@ -18,6 +18,7 @@ logging.basicConfig(
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
CONFIG_PATH = "/data/config.json" CONFIG_PATH = "/data/config.json"
HA_OPTIONS_PATH = "/data/options.json"
WEB_DIR = os.path.join(os.path.dirname(__file__), "web") WEB_DIR = os.path.join(os.path.dirname(__file__), "web")
app = Flask(__name__, static_folder=WEB_DIR) app = Flask(__name__, static_folder=WEB_DIR)
@@ -35,23 +36,31 @@ class State:
def load_config() -> Dict[str, Any]: def load_config() -> Dict[str, Any]:
# Defaults
cfg: Dict[str, Any] = { cfg: Dict[str, Any] = {
"modbus_ip": os.environ.get("MODBUS_IP", "10.10.20.190"), "modbus_ip": "10.10.20.190",
"modbus_port": int(os.environ.get("MODBUS_PORT", "502")), "modbus_port": 502,
"modbus_address": int(os.environ.get("MODBUS_ADDRESS", "1")), "modbus_address": 1,
"inverter_model": os.environ.get("INVERTER_MODEL", "MIC_1500_TL_X"), "inverter_model": "MIC_1500_TL_X",
"mqtt_broker": os.environ.get("MQTT_BROKER", "core-mosquitto"), "mqtt_broker": "core-mosquitto",
"mqtt_port": int(os.environ.get("MQTT_PORT", "1883")), "mqtt_port": 1883,
"mqtt_user": os.environ.get("MQTT_USER", ""), "mqtt_user": "",
"mqtt_pass": os.environ.get("MQTT_PASS", ""), "mqtt_pass": "",
"mqtt_topic_prefix": os.environ.get("MQTT_TOPIC_PREFIX", "growatt/shinelanx"), "mqtt_topic_prefix": "growatt/shinelanx",
"update_interval": int(os.environ.get("UPDATE_INTERVAL", "30")), "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): if os.path.exists(CONFIG_PATH):
try: try:
with open(CONFIG_PATH) as f: with open(CONFIG_PATH) as f:
saved = json.load(f) cfg.update(json.load(f))
cfg.update(saved)
except Exception as e: except Exception as e:
log.warning("Config-Datei konnte nicht gelesen werden: %s", e) log.warning("Config-Datei konnte nicht gelesen werden: %s", e)
return cfg return cfg