If - Schleife um Variable zu setzten

Hallo zusammen,

ich habe ein echtes Brett vorm Kopf:

Ich möchte ein Skript was folgendes tut, wenn der Wert der Variable 48501 (Float) über 1000 steigt, dann setze die Variable 40112 (Integer) auf 1.
Wenn der Wert unter 1000 sinkt setzte Variable 40112 (Integer) auf 0.

ich möchte einfach darstellen, dass bei einem Verbrauch unter 1000 Wat due Wärmepumpe nur im Standby läuft, dazu würde ich dann
im Variablenprofil die 1 mit „Heizt“ belegen und die 0 mit „Stand-by“.

Ich krieg das Skript was ich auf aktualisieren Triggern würde nur null hin.

Gruß Philip

Du brauchst dafür gar kein Skript. Einfach zwei Ereignisse mit jeweils Limit über-/unterschreiten, welche als Ziel direkt unter deiner Variable hängen.

paresy

Ok das hab ich auch gesehen, hab es jetzt aber so gelöst:

<?
// Umwälzpumpe Status 
$Leistung = GetValue(48501);

if ($Leistung <= '999') {




SetValue (40112, '0'); //Wärmepumpe aus / Stand By


}elseif ($Leistung >= '1000') {



SetValue (40112, '1'); //Wärmepumpe heizt

}

?>

letzte Frage für heute, ich habe jetzt 3 Stati, aber die Variable springt nie auf 2 sondern bleibt immer „0“.
Ich möchte darstellen das die Wärmepumpe bei 0 Watt "aus ist. Bei über 2 Watt im Stand By und bei über 1000 heizt.
Was mach ich falsch ?

<?
// Umwälzpumpe Status 
$Leistung = GetValue(48501);

if ($Leistung = '0.0') {




SetValue (40112, '0'); //Wärmepumpe aus


}elseif ($Leistung >= '2') {



SetValue (40112, '1'); //Wärmepumpe Stand By

}elseif ($Leistung >= '1000') {



SetValue (40112, '2'); //Wärmepumpe heizt

}

?>

Gruß Philip

Ein Gleichzeichen ist zuweisen, du musst zwei Gleichzeichen für einen Vergleich benutzen.
If ($Leistung == 0)
Allerdings ist ein Vergleich auf einen bestimmt Wert bei einem Float eher problematisch. Besser du benutzt dazu einen Integer.
$Leistung = (int)GetValue(48501);
Außerdem solltest du auf Zahlen und nicht auf Strings vergleichen (Hochkomma weglassen).
Zu guter Letzt; bei elseif wird die erste Bedingung die zutrifft ausgeführt.
Somit musst du die beiden elseif tauschen, weil größer 2 aktuell vor größer 1000 geprüft wird.

Michael

Hi Michael,

danke erstrmal dafür:

<?
// Umwälzpumpe Status 
$Leistung = (int)GetValue(48501);

if ($Leistung == 0.0) {




SetValue (40112, '0'); //Wärmepumpe aus


}elseif ($Leistung >= 2) {



SetValue (40112, '1'); //Wärmepumpe Stand By

}elseif ($Leistung >= 1000) {



SetValue (40112, '2'); //Wärmepumpe heizt

}

?>

Es funktioniert jetzt :slight_smile: vielen vielen Dank !

Größer 1000 wird nicht funktionieren, du musst die beiden abfragen mit 2 und 1000 in der Reihenfolge umdrehen.
Michael