true zurückgibt. Und das ist ja schlichtweg falsch.
Letzendlich vergleiche ich hier Soll und Ist-Wert und wenn der Ist-Wert kleiner als der Soll-Wert ist, ist das Thermostat aktiv. Leider ist das Thermostat solange aktiv, bis der Sollwert über dem Ist-Wert liegt.
Wenn dein 27,6 Beispiel stimmt, dann lieber float(). Das ist vermutlich auch das Problem beim Vergleich, du vergleichst zwei Strings. Eine Zahl im PHP hat einen Punkt als Dezimaltrennzeichen.
Laut dem Output hat er schon 2 Floats, aber der Vergleich entspricht nicht immer der Auswertung, die geht bis x Stellen hinter dem KOmma (9 glaube ich), deswegen die Umwandlung in int, dann sollte es gehen…
Aussagekräftig ist übrigens wirklich nur der erste Beitrag. Alles andere waren nur Veranschaulichungen.
Um das Problem mit Nachkommastellen zu eliminieren, hatte ich bereits auf eine Stelle nach dem Komma gerundet.
Was soll ich sagen: Ohne eine Änderung meinerseits läuft es nun.
Die letzte Änderung war die Rundung des Ist-Werts auf eine Stelle nach dem Komma, die jedoch nicht geholfen hat.
Zusätzlich habe ich den Server in der Zwischenzeit neu gestartet.
Da viele Werte (u.a. der Ist-Wert) aus einem eigenen per require eingebundenen Script kommen vermute ich, das dieses Script evtl. gecached wird und dies durch den Neustart umgangen wurde?
ich vermute mal, dass deine Floating Point Variablen nicht die exakten Werte haben. Dies ist ein leidiges Problem, wenn man nicht gewohnt ist, mit solchen REAL Zahlen, Double Precision Werten usw umzugehen. Im HM Forum findest du hier https://homematic-forum.de/forum/viewtopic.php?f=26&t=36623&start=680 reichlich Stoff zu dem Thema.
Du musst eine Differenz berechnen und davon abhängig machen wie du reagieren willst. Anbei ein Beispiel wo ungleiche Float Werte dann als identisch ermittelt werden.
<?
$current_room_ist = 20.1;
$current_room_soll = 20.1;
if ($current_room_ist < $current_room_soll)
{
echo "dies darf so nicht der Fall sein
";
}
else
{
echo "die Werte sind nicht kleiner und das ist auch gut so
";
}
$current_room_ist = 20.99999981;
$current_room_soll = 20.99999980;
if ($current_room_ist < $current_room_soll)
{
echo "dies darf so nicht der Fall sein
";
}
else
{
echo "die Werte sind nicht kleiner und das ist auch gut so
";
}
// Gleichheit testen obwohl ungleich als FP Variablen
$abs = abs($current_room_ist - $current_room_soll);
echo "Differenz " . $abs . "
";
$epsilon = 0.0001;
if ($abs < $epsilon)
{
echo "die Differenz ist kleiner als epsilon ==> die Werte sind gleich obowhl dies in der Floating Point Darstellung nicht der Fall ist
";
}
?>