$max) { return false; // Wert außerhalb des gültigen Bereichs } return true; } // Funktion zur Zeichenbegrenzung function begrenzeText($text, $maxLength) { return substr($text, 0, $maxLength); } // Debugging-Funktion function debugMessage($message) { IPS_LogMessage("Ladeberechnung Debug", $message); } // Werte der Variablen abrufen $ankunft = GetValue($id_ankunft); // Wert aus der Ankunfts-Variable lesen $ziel = GetValue($id_ziel); // Wert aus der Ziel-Variable lesen $volladen = GetValue($id_volladen); // Wert der Volladen-Variable lesen // Wenn "volladen" auf true steht, Ziel auf 100 setzen (nur für Berechnung) if ($volladen) { $berechnetesZiel = 100; } else { $berechnetesZiel = $ziel; } // Fehler prüfen und melden $fehlermeldung = ""; if (!begrenzeWert($ankunft, 0, 100)) { $fehlermeldung = "Ankunft ungültig ($ankunft)"; } elseif (!begrenzeWert($berechnetesZiel, 0, 100)) { $fehlermeldung = "Ziel ungültig ($berechnetesZiel)"; } else { // Berechnung des Ladeendes (kWh) $ladeende = 2 * (($berechnetesZiel - $ankunft) / 10); if ($ladeende < 0) { $fehlermeldung = "Ergebnis negativ ($ladeende)"; } else { // Ergebnis in die Ladeende-Variable schreiben if (IPS_VariableExists($id_ladeende)) { RequestAction($id_ladeende, (float)$ladeende); debugMessage("Ladeende berechnet und gespeichert: $ladeende kWh"); } else { $fehlermeldung = "Ladeende-Variable fehlt"; } } } // Dauerberechnung basierend auf kWh und Strom if ($fehlermeldung === "") { $strom = GetValue($id_strom); // Strom in Ampere abrufen $kwh = GetValue($id_ladeende); // kWh aus der Ladeende-Variable abrufen if ($strom > 0 && $kwh > 0) { // Berechnung der Dauer: Zeit = Energie (kWh) / (Strom (A) * Spannung (V)) $spannung = 230; // Standard-Spannung in Volt $dauer = ($kwh * 1000) / ($strom * $spannung); // Dauer in Stunden $dauer = round($dauer, 1); // Zeit auf eine Nachkommastelle runden // Dauer in die entsprechende Variable schreiben SetValue($id_dauer, $dauer); debugMessage("Dauer berechnet: $dauer Stunden (kWh: $kwh, Strom: $strom A, Spannung: $spannung V)"); } else { // Fehlerfall: Ungültige Werte für Strom oder kWh SetValue($id_dauer, 0); // Setze Dauer auf 0 if ($strom <= 0) { $fehlermeldung = "Strom ungültig ($strom)"; } elseif ($kwh <= 0) { $fehlermeldung = "kWh ungültig ($kwh)"; } debugMessage("Fehler bei der Dauerberechnung: $fehlermeldung"); } } // Fehler ausgeben und in die Textvariable schreiben if ($fehlermeldung !== "") { $fehlermeldung = begrenzeText($fehlermeldung, 30); // Fehlermeldung auf 30 Zeichen begrenzen SetValue($id_fehlermeldung, $fehlermeldung); debugMessage("Fehler: $fehlermeldung"); } else { SetValue($id_fehlermeldung, ""); // Keine Fehlermeldung hinterlegen debugMessage("Keine Fehler, Berechnung abgeschlossen."); } ?>