Logische Verknüpfung if -else im script

Guten Abend,

ich habe folgende Aufgabe die ich nicht zu Ende führen kann:
Ich möchte als Sammelanzeige darstellen wenn eine von 3 Leuchten in Betrieb ist. Somit kann ich auf der Visualisieung sehen ob das Licht in einem Raum oder Bereich generell AN oder Aus ist.

Hierzu habe ich:

  1. eine Boolean Variable angelegt (IPS ID 16375)
  2. Versucht ein entsprechendes Script zu erstellen
  3. Die nötigen Trigger erstellt.

Bei Punkt 2 scheitere ich gerade. Als Anfänger was Scripte und Porgrammierung anbelangt komme ich hier nicht weiter.
Folgendes Script möchte ich verwenden, wobei die Zeile 3 (if…) hier noch für mich zum Test mit einfachen mathematischen Formeln hinterlegt ist.Bei Änderung der Formeln funktiniert das Script entsprechend dem erwarteten Ergebnis. Mein Problem hier ist:
Die IPS Adressen: 23456, 46996 und 22915 sollen in Zeile 3 die Formeln ersetzen.
Meine Frage: Wie sieht diese Zeile aus?

<?

if ((10<20) OR (6==9) or (9>7)) 
{
SetValueBoolean(16375, true);
  } else {
 SetValueBoolean(16375, false);
  }
?>
 

Gruß Thomas

Hi poacher,

schau Dir mal die Links an:

https://www.symcon.de/forum/threads/36983-Zusandsgruppen-bilden-f%C3%BCr-einzelne-Gewerke
bzw.
https://www.symcon.de/forum/threads/26923-Alle-Links-zu-einer-Variablen-finden?p=247255#post247255

Das sollte eigentlich dem entsprechen was Du machen möchtest! Hoffe ich :cool:

Ciao Pitti

Hallo,
ich habe ich die Lösung durch einen anderen Post gefunden. Mein Script sieht jetzt so aus und funktioniert:

<?

$l01=GetValue (22915);
$l02=GetValue (23456);
$l03=GetValue (46996);

If (( $l01 == false) & ( $l02 == false) & ( $l03 == false))

 
{
SetValueBoolean(16375, false);

  } else {

 SetValueBoolean(16375, true);

  }

?>

Vielleicht hilft es einem andern Anfänger.
Gruß Thomas
Einen schönen

Hi poacher,

und wie steuerst Du Dein Script an, durch ständiges pollen? Funktioniert natürlich, aber die Links zeigen Dir einen eleganten Weg wie man es bei Änderung des Schaltzustandes löst, d.h. man reagiert nur wenn sich wirklich was ändert!

Ciao Pitti

<?

if ((GetValue(23456)) OR (GetValue(46996)) or (GetValue(22925)) 
{
SetValueBoolean(16375, true);
  } else {
 SetValueBoolean(16375, false);
  }
?>
 

Hallo,

danke für die schnellen Antworten.

@Pitti
Getriggert wird das Script über Ereignisse die ich im Scripteditor hizugefügt habe.

@Fonzo
Ich habe entgegen Deiner Antwort UND verknüpft und natürlich true und false für die Ausgabe getauscht. Kommt m.E. auf selbe raus und funktioniert auch.

Gruß
Thomas

vielleicht ein kleiner Hinweis:

ein AND wird alternativ als && geschrieben, ein & ist jedoch eine binäre ‚und‘-Verknüpfung.

das macht bei der Vergleich reiner boolean-Variablen zwar keinen Unterschied, aber sobald andere Werte als 0 und 1 in’s Spiel kommen würde, könnte das Ergebnis unerwartet sein

Bsp. ‚2 && 1‘ ist true, ‚2 & 1‘ ist 0 = false. (ein Wert 0 ist false, jeder andere Wert wird als true interpretiert)

siehe auch PHP: Bit-Operatoren - Manual und PHP: Logische Operatoren - Manual