Aufruf Function im Modul schlägt fehl

Ich versuche seit geraumer Zeit ein Function im Modul aufzurufen aber irgend etwas habe ich da wohl nicht ganz verstanden:


class StuderInnotecWeb extends IPSModule {
   
public function Create() {
        // Diese Zeile nicht löschen.
        parent::Create();
 		$this->RegisterTimer("UpdateTimer", 1000, 'Studer_Update($_IPS[\'TARGET\']);');
		$this->RegisterTimer("UpdateTimerNEW", 1000, 'Studer_UpdateNEW($_IPS[\'TARGET\']);');
}
function Update(){
		echo "das geht";
}
function UpdateNEW(){
		echo "das geht NICHT";
}
}

in der module.json hab ich gesetzt:


"prefix": "Studer"

Warum geht die NEW Funktion nicht?

20.11.2020, 18:23:42 | TimerPool | Studer Innotec via Web-API (UpdateTimerNEW): <br />
<b>Fatal error</b>: Uncaught Error: Call to undefined function Studer_UpdateNEW() in /-:1
Stack trace:
#0 {main}
thrown in <b>/-</b> on line <b>1</b><br />

…ich vermute, Deine „function “ muss „public“ sein…

Joachim

es hat leider keinen Einfluss ob die Funktion privat oder public ist. die „Update“ geht immer und die „UpdateNEW“ geht nie.

Es muss immer Public sein, keine Ahnung was PHP ohne eine Angabe für eine Sichtbarkeit annimmt.
Und du musst das Modul neu laden oder den Dienst neu starten, wenn eine Instanz-Funktion geändert wurde.
Michael

…ist gelöst.
Irgendetwas innerhalb von symcon hat meine Änderungen nicht gemocht. Ich habe den Service komplett neu gestartet und schon geht es :slight_smile:

Das musst du auch machen!
Diese Änderung, ebenso wie an den module.json, bedingen immer einen Neustart vom Dienst.
Michael

Nein normalerweise reicht ein reload von dem Modul.
Wenn man aber in seinem Modul Mist geschrieben (z.b. Funktionsnamen die es schon gibt) hat kann es passieren, dass Symcon durcheinander kommt und man einmal durchstarten muss.

Ja, hatte ich auch bei 4 geschrieben. Wollte mich nur nicht noch einmal komplett wiederholen.
Glaube auch nicht , das der TE weiß wie man ein lokales Modul neu lädt.
Michael