From fcd0b927854a752783f830074bafd7c483f494f0 Mon Sep 17 00:00:00 2001 From: "m0@nas" Date: Tue, 15 Sep 2026 14:44:15 +0200 Subject: [PATCH] Heizstab: keine PHP-Warnung beim Einstellen, 6,0 kW wirksam, Ausfall gemeldet - setMode kam aus POST oder GET, addiert wurden beide - der fehlende gab "Undefined array key", und die Warnung stand als Meldung im Browser. Jetzt wird der vorhandene genommen. - Der Regler reicht bis 60 (6,0 kW), die Pruefung liess nur < 60 zu; ganz rechts geschah still nichts. - Ist der Heizstab nicht erreichbar, kommt "Der Heizstab ist nicht erreichbar." statt weiterer PHP-Fehler aus fwrite auf eine gescheiterte Verbindung. Co-Authored-By: Claude Opus 5 --- ajax/heater.php | 53 +++++++++++++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/ajax/heater.php b/ajax/heater.php index ad14354..884b247 100644 --- a/ajax/heater.php +++ b/ajax/heater.php @@ -9,30 +9,39 @@ if (checkLogin()) { if (isset($_POST["setMode"]) || isset($_GET["setMode"])) { - //send new value - $_POST["setMode"] = intval($_POST["setMode"]) + intval($_GET["setMode"]); - if($_POST["setMode"] > 0 && $_POST["setMode"] < 60){ - $pwr = $_POST["setMode"]*100; - $headers[] = "GET /set?mode=man&pwr=".$pwr." HTTP/1.1"; - $headers[] = "Host: ".$hostname; - $headers[] = ""; - $remote = fsockopen("tcp://".$hostname, 80, $errno, $errstr, 5); - fwrite($remote, implode("\r\n", $headers)."\r\n"); - $file = ''; - $file .= fread($remote, 1024); - fclose($remote); - }elseif($_POST["setMode"] == 0){ - $headers[] = "GET /set?mode=eco&pwr=0 HTTP/1.1"; - $headers[] = "Host: ".$hostname; - $headers[] = ""; - $remote = fsockopen("tcp://".$hostname, 80, $errno, $errstr, 5); - fwrite($remote, implode("\r\n", $headers)."\r\n"); - $file = ''; - $file .= fread($remote, 1024); - fclose($remote); + /* + * Der Wert kommt aus dem Formular (POST) oder von Hand aus der + * Adresse (GET) - immer nur einer von beiden. Frueher wurden beide + * addiert; der fehlende erzeugte eine PHP-Warnung, und die stand dann + * als Meldung im Browser. + * + * 0 = Automatik (Ueberschuss), 1..60 = feste Leistung in 100 W. Der + * Regler reicht bis 60; die alte Pruefung "< 60" liess genau 6,0 kW + * still nicht durch. + */ + $stufe = intval($_POST["setMode"] ?? $_GET["setMode"] ?? 0); + if ($stufe >= 1 && $stufe <= 60) { + $pfad = "/set?mode=man&pwr=" . ($stufe * 100); + } elseif ($stufe === 0) { + $pfad = "/set?mode=eco&pwr=0"; + } else { + $pfad = null; + } + if ($pfad !== null) { + $remote = @fsockopen("tcp://" . $hostname, 80, $errno, $errstr, 5); + if ($remote) { + fwrite($remote, "GET " . $pfad . " HTTP/1.1\r\nHost: " . $hostname . "\r\nConnection: close\r\n\r\n"); + stream_set_timeout($remote, 5); + fread($remote, 1024); + fclose($remote); + } else { + // Ohne Verbindung eine verstaendliche Meldung statt eines PHP-Fehlers. + // Bewusst Status 200: submitFormAjax() in common.js zeigt die + // Antwort nur dann als Meldung an. + echo "Der Heizstab ist nicht erreichbar."; + } } $close = 1; - } } else { $close = 1;