if Abfrage

Hallo,

ich bin ein totaler php - nixchecker, ich bekomm folgendes script nicht zu laufen.

<?
    if (
	 GetValue(35997 /*[Program\IPSLibrary\data\modules\IPSShadowing\Devices\Device3\TemperatureChange]*/ == TRUE and
	 GetValue(30844 /*[Program\Anwesenheit\Anwesenheit]*/) == TRUE and
	 GetValue(58443 /*[Program\IPSLibrary\data\modules\IPSShadowing\Devices\Device3\Display]*/) == 'Automatik' and
	 GetValue(57275 == 0
		)
		{
	IPS_RunScript(18040 /*[Visualization\WebFront\Rolläden\script Rolladen Wintergarten unten my]*/);
   //COMPort_SendText(22075 /*[Serial Port rollo com5]*/, chr(0x7F).chr(0xF2).chr(0xFA).chr(0x0E).chr(0x73).chr(0xFA).chr(0x00).chr(0x00).chr(0x00).chr(0xF9).chr(0xFB).chr(0x05).chr(0xDA));
		}

?>

bringt folgenden output:

Parse error:  syntax error, unexpected '{' in C:\IP-Symcon\scripts\33477.ips.php on line 8
Abort Processing during Fatal-Error: syntax error, unexpected '{'
   Error in Script C:\IP-Symcon\scripts\33477.ips.php on Line 8

Ich hab auch schon die geschwungene Klammer weggelassen, funkt auch nicht.
Was mach ich da falsch?
Danke.

<? 
    if ( 
     GetValue(35997 /*[Program\IPSLibrary\data\modules\IPSShadowing\Devices\Device3\TemperatureChange]*/) == TRUE and 
     GetValue(30844 /*[Program\Anwesenheit\Anwesenheit]*/) == TRUE and 
     GetValue(58443 /*[Program\IPSLibrary\data\modules\IPSShadowing\Devices\Device3\Display]*/) == 'Automatik' and 
     GetValue(57275 == 0 
        ) 
        { 
    IPS_RunScript(18040 /*[Visualization\WebFront\Rolläden\script Rolladen Wintergarten unten my]*/); 
   //COMPort_SendText(22075 /*[Serial Port rollo com5]*/, chr(0x7F).chr(0xF2).chr(0xFA).chr(0x0E).chr(0x73).chr(0xFA).chr(0x00).chr(0x00).chr(0x00).chr(0xF9).chr(0xFB).chr(0x05).chr(0xDA)); 
        } 

?>

bei deinem ersten GetValue hat die „)“ gefehlt :slight_smile:

Ich sehe eher hier was:
GetValue(57275 == 0 )
Das soll wohl so aussehen:
GetValue(57275) == 0
Und dahinter fehlt noch ein ) was zum if ( gehört.
Michael

@gdfde

Übersichtlicher wird es, wenn du deine Scripte in der Art aufbaust:

<?
// Variablen
$var1 = GetValue(35997 /*[Program\IPSLibrary\data\modules\IPSShadowing\Devices\Device3\TemperatureChange]*/); 
$var2 = GetValue(30844 /*[Program\Anwesenheit\Anwesenheit]*/);
$var3 = GetValue(58443 /*[Program\IPSLibrary\data\modules\IPSShadowing\Devices\Device3\Display]*/);
$var4 = GetValue(57275);
 
// eigentliches Script
if ($var1 and $var2 and ($var3 == 'Automatik') and ($var4 == 0))
	{
   IPS_RunScript(18040 /*[Visualization\WebFront\Rolläden\script Rolladen Wintergarten unten my]*/);
   //COMPort_SendText(22075 /*[Serial Port rollo com5]*/, chr(0x7F).chr(0xF2).chr(0xFA).chr(0x0E).chr(0x73).chr(0xFA).chr(0x00).chr(0x00).chr(0x00).chr(0xF9).chr(0xFB).chr(0x05).chr(0xDA));
   }
?>

Dann lassen sich Fehler besser erkennen und verstehen.
Wenn $var4 ein Boolean ist, dann gehts auch so (! = Negierung, also Abfrage auf false, sonst immer true):

if ($var1 and $var2 and ($var3 == 'Automatik') and !$var4)

Deshalb habe ich mir, trotz mehr Tipparbeit, angewöhnt die Variablenabfragen immer auf den Variablentyp auszuschreiben.
Also GetValueString, GetValueBoolean, GetValueFloat, GetValueInteger…
Das macht ein späteres Umarbeiten und Verstehen eines Scripts einfacher.

huch, danke für das rasche Feedback :slight_smile:
Es waren natürlich die Klammern, php nimmt das sehr genau.