Fehler in IF Anweisung

Hallo liebe Community,

erster Beitrag und dann auch ne relativ dämliche Frage die mich aber verückt macht.

Untenstehender Code bringt folgenden fehler:

Blockquote Parse error: syntax error, unexpected ‚;‘ in /var/lib/symcon/scripts/41925.ips.php on line 6

Ich erkenne einfach nicht den Fehler hier.
Ich würde mich sehr über eine Lösung freuen. Weil laut Syntax müsste alles passen.

`<?php

if (GetValue(16013 == 1)

{
SetValue(26033,0);

SetValue(12308,0);

SetValue(20621,0);

SetValue(50389,0);

SetValue(30225,0);

SetValue(39386,0);

SetValue(16013,0)
}

else
{
SetValue(26033,1);
SetValue(15565,100);

SetValue(12308,1);
SetValue(31553,100);

SetValue(20621,1);
SetValue(48440,100);

SetValue(50389,1);
SetValue(15375,100);

SetValue(30225,1);
SetValue(29831,100);

SetValue(39386,1);
SetValue(58190,100);

SetValue(16013,1)

}
?>`

Moin,

es fehlt eine Klammer:

if (GetValue(16013) == 1)

Gruß
Hans

Moin,

außerdem 2-mal ein Semikolon nach SetValue vorn den }.

Gruß
Hans

Danke, sehr für die schnelle Hilfe. Es funktioniert.

Moin,

gern geschehen und herzlich willkommen im Forum :slight_smile:

Die Anzahl der öffnenden und schließenden Klammern muss grundsätzlich identisch sein :wink:

Gruß
Hans

Das Skript läuft ohne Fehler durch. Jetzt habe ich das Problem das es wie in einer Endlosschleife läuft

Moin,

was meinst du? Da ist doch gar keine Schleife.

Gruß
Hans

Wird das Script durch ein Ereignis bei Änderung der Variable 16013 gestartet?
Dann liegt das daran, dass du im Script die Variable mit SetValue wieder setzt und dadurch das Ereignis wieder das Script startet… wieder die Variable setztz, wieder das Ereignis auslöst und Script startet usw…
Michael

Nein das script wird bei Aktualisierung von einem Taster gestartet.

Die 16013 habe ich nur als Variable angelegt damit das script weiß ob das Licht schon an oder aus ist und dann die entsprechend An oder Aus Schalten kann.

auf dieser Basis sollen dann 3 verschiedene Beleuchtungsszenen geschalten werden.

Moin,

um was für Hardware handelt es sich? Wie sieht der Trigger aus?

Gruß
Hans

Beim Taster ist es ein Homematic Wired. Die Leuchten sind Ikea Träfie über die Phillips Hue Box

+++UPDATE+++
Kann es sein das dass Script zu schnell abläuft?

Moin,

zu HM Wired kann ich nichts sagen. Zu schnell kann es eigentlich nicht sein. Es wird vermutlich am Trigger liegen, da das Skript selbst keine Schleifenfunktion hat.

Gruß
Hans

Doch, indirekt schon: es prüft den Wert von 16013 und setzt am Ende einen neuen Wert für 16013. Falls das Script durch einen Wert auf 16013 ausgelöst wird, dann läuft das endlos.

Nein wird es nicht, hatte ich doch schon gefragt…

Also zurück auf Anfang.
Zeig uns bitte Screenshots vom Objektbaum mit der HM-Instanz, dem Ereignis und dem Script und deren Unterobjekten.
Und einmal wie das Ereignis konfiguriert ist.
Michael

Mach doch vielleicht mal ein Screenshot vom Objektbaum, dann kann man das insgesamt besser nachvollziehen.

Ich glaube auch nicht das es in dem speziellen Fall zielführend ist SetValue zu nutzten, wenn Du letzlich aber eine Instanz schalten willst. Dann gehe lieber auf Befehl einfügen und selektiere dann denn passenden Zustand den Du als Befehl hinzufügen willst.

Nocheinmal vielen Dank für die Hilfe bisher.

Hier die Bilder

Das hatte ich übersehen.
Da hat Fonzo selbstverständlich recht; so schaltest du keine Geräte.
Dazu kannst du den universellen Befehl RequestAction(<ID>, <WERT>); benutzen.
https://www.symcon.de/service/dokumentation/befehlsreferenz/variablenzugriff/requestaction/

Oder halt die Speziellen Funktionen der Ziel-Instanzen; so wie Fonzo schrieb.

Kennst du das hier?
https://www.symcon.de/service/dokumentation/konzepte/variablen/
Dort wird vermittelt warum ein SetValue nicht funktioniert.

In deinem Fall überschreibst du jetzt einfach die Variable in IPS, aber der Wert springt dann wieder zurück, sobald der Status der echten Hardware empfangen wird.
Michael

Ich selber habe kein Homematic Wired, aber als erstes solltest Du mal schauen ab Du ausschließlich auf INSTALL_TEST reagieren kannst oder nicht auch auf PRESS_SHORT bzw. PRESS_LONG.

Als nächstes solltest Du in dem Skript selber mal die Befehle über Befehl einfügen in das Skript einfügen, dann wird auch der passende Befehl in das Skript eingefügt.

Als letztes kannst Du Dir auch mal Szenesteuerung installieren bzw. anschauen

Vielleicht ist das ja auch eine Möglichkeit einen Szene zu erstellen. Dann müsstest Du nämlich nur die eine Szene aufrufen und nicht einzelne Instanzen schalten.

Es gibt bei den nur PRESS.
Aber die Lösung ist identisch wie bei Funk.
Dummy Programm in der CCU.
https://www.symcon.de/wiki/homematic-taster_in_ips/
Michael

Ah, sehe ich auch gerade im Screenshot, wie gesagt ich habe kein Homematic Wired.
Gibt es denn dann irgendeine Möglichkeit wie bei Homematic (Funk) auch einen langen Tastendruck auszuwerten oder geht das dann nicht?

@P1nkY Ich gehe mal sehr wahrscheinlich davon aus, dass Du wahrscheinlich nicht nur einen einzigen Spot schalten willst, sondern eine Gruppe bzw. Zone. Daher solltest Du die entsprechende Gruppe / Zone in der Hue App erstellen, und auch Szenen in der Hue App für diese Gruppe / Zone erstellen. Anschließend importiert Du diese Gruppe/Zone in IP-Symcon. Dann ist es einfacher zu schalten, weil Du nur einen Befehl an die Zone/Gruppe gibst und nicht jede Lampe einzeln schalten musst.