Probleme beim Erstellen eines eigenen Moduls

Hallo Zusammen,

nach dem ich mich im vergangenen Jahr nur darauf beschränkt habe im Forum etwas mitzulesen wollte ich nun selbst mal wieder aktiv werden und ein paar meiner Skripte in Module gießen.

Leider komm ich mit der Doku noch nicht so richtig klar. Als Ergebnis habe ich nun ein fast leeres Repo mit dem ersten „Geh-Versuch“. Leider kann ich mich noch so auf den Kopf stellen aber beim Anlegen der neuen Instanz meines Moduls in IPS bekomme ich immer einen Fehler. Leider sagt er mir absolut nichts:
error.PNG

Selbst wenn ich das Modul auf das Mindeste beschränke, also zum Beispiel keine „form.json“, „module.json“ nahezu leer, und die „module.php“ in Form der Zwei Vorlagen aus der Doku: Das Problem bleibt dasselbe. Andere Module funktionieren aber. Also schließe ich eigentlich einen Fehler in meiner Installation aus.

Kann mir eventuell einer auf die Sprünge helfen? Ich seh leider den Wald vor lauter Bäumen nicht mehr. :banghead:

Hier mal die Adresse bei Github: https://github.com/z-smart/ips_modules.git

Danke schon einmal im Vorraus.

Grüße Haari

Den Effekt sehe ich bei Deinem Modul auch. Im Logfile gibt es eine Fehlermeldung:

Registriere Funktion... Reflection parse error:   {"Update":{},"Notify":{}}

Das Modul wird dann nicht richtig erstellt. Seltsamerweise auch dann, wenn man die Funktionen weglässt und eine leere module.php mit den Basisfunktionen hinlegt. Das wird wohl nur Paresy erklären können.

Tommi

Aha, das ist doch wenigstens schon mal eine weitere Info.

Kannst Du mir verraten in welchem Log Du das gefunden hast? Unter /var/log/symcon/logfile.log hatte ich nichts gesehen. Oder ist mir das nur entgangen!? :confused:

Mich macht eben stutzig, dass das auch mit der nahezu leeren PHP Datei auftritt.
Aber immerhin habe ich jetzt wieder ein paar Stichworte zum Recherchieren.

Danke schon mal.

Grüße
Haari

Das erste Zeichen der module.php ist ein Punkt, darum der Fehler.
Da steht

.<?

und nicht

<?

Dann ist der Inhalt der form.json ist an der Stelle des Testcenters teilweise falsch.

Da die Funktionen es Testcenters immer außerhalb des Modul-Kontex aufgerufen werden, muss:
a) Der Prefix angegeben werden (ist so korrekt)
b) Immer als erster Parameter $id übergeben werden, welches die aktuelle ID der geöffneten Instanz in der Konsole entspricht. Dies fehlt bei bei PowerEvent_Notify() => PowerEvent_Notify($id)

Dieser Parameter ist dann in der modul.php nicht vorhanden!


        public function Update($id) { // falsch
            // Selbsterstellter Code
        }
		
		public function Notify() { //korrekt
            // Selbsterstellter Code
        }

Michael

PS: Habe mal einen Fork und nun einen Pull gemacht, dann sollte es laufen :smiley:

Hey super.

Genau deswegen ist das Forum so super. Die Antworten kommen immer sehr schnell.

Das mit dem Punkt verstehe ich ehrlich gesagt nicht. Ich seh im Repo keinen Punkt und auch in deinem Pull Request nicht!?
Außerdem hab ich schon so einige Skripte in PHP geschrieben, da war nie ein Punkt am Anfang!?

Der zweite Punkt erschließt sich mir allmählich. Aber da stoße ich eben an die Grenzen der Doku. Mir ist durch die Doku alleine leider an vielen Stellen nicht klar in welchem Kontext wann, was, wo geschieht. Ich bin schon die ganze Zeit am rätseln ob hier die PHP Class immer wieder instantiiert wird und was dann im Falle des einer mehrfach vorhandenen Instanz passiert.

Aber hier schließt sich dann vermutlich der Kreis. Ich muss das wohl über die übergebene $id abfangen, richtig? Anhand derer müsste ich dann feststellen können in welcher Instanz ich mich bewege. Es wäre schön wenn Paresy hier die Doku eventuell um ein paar Schaubilder oder Beispiele erweitern könnte. Zumindest für mich als Einsteiger ist das nicht ganz einfach zu durchschauen.

Aber soweit so gut. Bleibt nur eine echt peinliche Frage: :rolleyes:

Ich bin GitHub Neuling, wie bekomme ich den PULL-Request jetzt rein??? Hab leider noch keinen Button gefunden. Antwort gerne auch per PN, da das mit dem Thema eigentlich nichts zu tun hat.

Danke auf jeden Fall schon einmal.

Grüße
Haari

In Github war der schwer zu sehen, habe ihn auch erst in meinem Editor bemerkt.

Nein brauchst du nicht. Schau dir mal dir ipsmodule.php an da siehst du dass deine ID von dem Code der gerade ausgeführt wird in InstanceId steht.
Michael

Ich hatte sogar eine komplett neue module.php erstellt, die forms.json gelöscht , IPS neu gestartet und trotzdem den gleichen Fehler bekommen. Merkwürdig.

<?
class PowerEvent_Extension extends IPSModule {
	 public function __construct($InstanceID)
    {
    	  parent::__construct($InstanceID);
    	  IPS_LogMessage(__CLASS__,__FUNCTION__);
    }
    public function Create()
    {
        //do not delete this
        parent::Create();
        IPS_LogMessage(__CLASS__,__FUNCTION__);
    }
     public function Destroy()
    {
    	IPS_LogMessage(__CLASS__,__FUNCTION__);
        parent::Destroy();
    }
    public function ApplyChanges()
    {
        // Diese Zeile nicht loeschen
        parent::ApplyChanges();
        IPS_LogMessage(__CLASS__,__FUNCTION__);
    }
    
    public function Update()
    {
    	IPS_LogMessage(__CLASS__,__FUNCTION__);
    }
    public function Notify()
    {
    	IPS_LogMessage(__CLASS__,__FUNCTION__);
    }
  }
?>