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
+21 -12
View File
@@ -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