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:
@@ -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"]
|
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user