Parse error in line 1

:eek:

Ich erstelle ein event auf 4 meiner Globalen Variablen, wenn ich ein Wert ändere kriege ich aber nur:

24.05.2017 11:43:57*| ScriptEngine*| Ergebnis für Ereignis 53899
<br />
<b>Parse error</b>:  syntax error, unexpected ')' in <b>-</b> on line <b>1</b><br />

Meine Event Funktion die getriggert wird:

public function eventTriggerOnChange($deviceList){
            /*
            $parent = $this->InstanceID;

            // Get Global ID`s
            $getGlobalR = IPS_GetVariableIDByName("Global R", $parent);
            $getGlobalG = IPS_GetVariableIDByName("Global G", $parent);
            $getGlobalB = IPS_GetVariableIDByName("Global B", $parent);
            $getGlobalW = IPS_GetVariableIDByName("Global W", $parent);
            $getGlobalF = IPS_GetVariableIDByName("Global Fade", $parent);

            // Get Global Values
            $getValueGlobalR = GetValue($getGlobalR);
            $getValueGlobalG = GetValue($getGlobalG);
            $getValueGlobalB = GetValue($getGlobalB);
            $getValueGlobalW = GetValue($getGlobalW);
            $getValueGlobalF = GetValue($getGlobalF);

            if (is_array($deviceList) || is_object($deviceList)){
                foreach($deviceList as $i =&gt; $list){

                    // Set Value for each Device and if the Switch set on
                    $id = IPS_GetObjectIDByIdent("device$i", IPS_GetParent($this-&gt;InstanceID));
                    print_r($id);
                }
            } */
            echo "Event Trigger started";
        }

Und meine Funktion wie ich das Event erstelle:

protected function CreateEventTrigger($deviceList, $triggerID){
            $eid = IPS_CreateEvent(0);
            $Instance = $this->InstanceID;
			IPS_SetParent($eid, $Instance);
			IPS_SetName($eid, "TriggerOnChange".$triggerID);
			IPS_SetIdent($eid, "TriggerOnChange".$triggerID);
			IPS_SetEventTrigger($eid, 0, $triggerID);
			IPS_SetEventScript($eid, "DMXDYN_eventTriggerOnChange(". $Instance .", ". $deviceList .");");
			IPS_SetEventActive($eid, true);
       }

Ich kann mir nicht erklären wo der Fehler herkommt und ich bin noch etwas neu in IP Symcon.
Meine Funktion ist ja eigentlich leer also davon kann es nicht kommen und bei den Events würde ich es auch nicht verstehen.

Als Neueinsteiger empfehle ich so lange die Finger von PHP-Modulen zu lassen bis du weißt wie IPS so tickt.
Zumal deine Fehlermeldung keine Datei enthält, hast du irgendwas bei IPS_SetEventScript kaputt gemacht.
Wobei Module eher die Nachricht (MessageSink) nutzen um auf Variableupdates zu reagieren, Events und Public Funktionen braucht man nicht (mehr).
Was steht den als Script-Inhalt in dem Ereignis ?
Michael

Beispiel Variable: DMX/DMXDYN/Global W

Ereignis:
Aktion: Gerät Ausführen
Zeil: DMX/DMXDYN
Funktion: DMXDYN_eventTriggerOnChance
Parameter: deviceList:

also eigentlich das was ich erwarte…

Fotos:

Was soll das sein: Parameter: deviceList
String, Int ?
Davon hast du keinen Screenshot gemacht…
Michael

Das ist ein Array was ich aus der Lichter Liste parse.
(Ein Licht stellt also ein Raum da mit RGBW Channels die ich mit dmx_fade() setze, ich habe 5 Globale Variablen die der Nutzer fest setzen kann und so seine Räume eine feste Vorgabe geben kann.
Ich will jetzt bei Aktualisierung die Werte erneuen wenn der Switch auf 1 steht.)

Deswegen füge ich auf alle Globalen Werte ein Ereignis hinzu und führe dann die Funktion aus.

Also zurück zu deiner Frage in der deviceList steht das was du im Zweiten Bild siehst.

Wie soll dass mit einem Array funktionieren?

IPS_SetEventScript($eid, "DMXDYN_eventTriggerOnChange(". $Instance .", ". $deviceList .");");

Mach doch mal das Ereignis auf und wähle PHP-Code um das Ergebnis von deiner Funktion CreateEventTrigger zu sehen.

Beispiel:
Zwischenablage05.png

Beim anlegen des Ereignisses wird das hier irgendwo im Log stehen:

Notice:  Array to string conversion in ...

Dein zweites Bild ist eine Liste und kein Ereignis; es bringt nichts gezielte Fragen zu ignorieren :wink:

Michael

Ich habe jetzt mehre Szenarien getestet und wie es aussieht kann ich kein Array übergeben, wenn ich einzelne Strings oder Integers übergebe kriege ich kein Fehler…

Warum kann ich in meinem Event kein Array an die Funktion übergeben?

Weil im Event kein Array steht…
Du hinterlegt mit IPS_SetEventScript einen Script im Event, welches als String übergeben wird.
Dabei versuchst du ein Array und einen String mit dem String-Operanden ’ . ’ zu verketten. Und das funktioniert nicht.

Es gibt verschiedene Möglichkeiten ein Array in ein String und zurück zu konvertieren.
Auf jeden Fall solltest du überdenken anstatt mit Ereignissen mit Nachrichten zu arbeiten: Nachrichten — IP-Symcon :: Automatisierungssoftware
Und auf Funktion wie GetByName komplett zu verzichten, und auf GetIDForIdent zu nutzen.
Sonst funktioniert nichts mehr, wenn jemand den Namen ändert.
Michael

Danke, jetzt läuft alles! :slight_smile: