Grundsätzlich gebe ich Dir da ja bei regulären Funktionen recht, nur bei den IP-Symcon PHP Modulen wird immer der Parameter in der Funktion definiert der übergeben werden soll. Aufgerufen wird die Funktion dann mit der ObjektID der Instanz zusätzlich.
Also eine Modulfunktion z.B.
public function SuperFunktion()
wird dann von außerhalb mit
Modulkürzel_SuperFunktion($ObjektID);
aufgerufen.
daher hat die Funktion einen Parameter mehr. Es kann aber auch sein, dass ich da grundsätzlich was verkehrt mache, aber eigentlich funktioniert das in der Regel bisher bei allen Funktionen der PHP Module so. Das ganz merkwürdige ist ja auch das die Fehlermeldung bei mir persönlich gar nicht kommt und die Funktion funktioniert, sondern nur bei einzelnen Usern diese Fehlermeldung auftaucht und daher die Funktion nicht richtig ausgeführt wird.
Mache ich hier den irgendwas grundsätzlich falsch?
Ich habe dank der Suche von wupperi jetzt einen neuen Hinweis für die Fehlerquelle. Mir ist aber noch nicht klar was die Ursache ist bzw. ob dies ein Bug von IPS 4 ist und wie man dies beheben kann.
Wie schon gesagt sieht die Funktion so aus
public function SaveInputVarmapping(string $MappingInputs)
Auffällig ist nun das bei mir, wo alles funktioniert die _generated.ips.php folgenden Eintrag enthält
function DAVRST_SAVEInputVarmapping($InstanceID, $MappingInputs)
{
require_once('/usr/share/symcon/scripts/_ipsmodule.inc.php');
require_once('/va/lib/symcon/modules/ipssymcondenon/Denon Splitter Telnet/module.php');
return (new DenonSplitterTelnet ($InstanceID))->SaveInputVarmapping($MappingInputs);
}
Bei Usern bei denen die Fehlermeldung Missing argument 3 for DAVRST_SaveInputVarmapping()
kommt sieht dagegen die _generated.ips.php mit exakt dem gleichen Modul so aus
function DAVRST_SaveInputVarmapping($InstanceID, $MappingInputs, $AVRType)
{
require_once('E:\ips\scripts\__ipsmodule.inc.php') ;
require_once('E:\ips\modules\IPSymconDenon\Denon Splitter Telnet\module.php');
return (new DenonSplitterTelnet($InstanceID))->SaveInputVarmapping($MappingInputs, $AVRType);
}
dies erklärt dann auch warum wegen dem fehlenden 3. Argument gemeckert wird.
Die Frage ist nun warum steht bei ein und dem selben Modul unterschiedliche Einträge in der _generated.ips.php
und wie kann man das beheben?
Danke mal wieder für die Info.
Die Funktion hatte früher mal mehr Parameter und hat jetzt einen weniger, da AVRType nicht mehr separat übergeben werden muss, da dieser jetzt als Teil des Arrays $MappingInputs enthalten ist. Die Prefixe sind jeweils bei den Modulen unterschiedlich. Dann hoffen wir mal das ein Neustart hilft.
Was tut die _generated.ips.php eigentlich genau, und wird diese wie der Name vermuten lässt bei jedem Systemstart neu generiert?
Was sie tut siehst du doch
Sie erzeugt eine PHP-Instanz aus deiner Klasse und ruft die gewünschte Methode auf.
Allerdings sollte sie auch bei einem Modul-Update erneuert werden (ausser du hast Mist in deiner Klasse dass IPS es nicht versteht).
Das findet man aber im Log /unter Meldungen.
Michael