Neue Funktion: Module

Hallo Paresy,

die neue Funktion eigene Module zu erstellen ist ja - wenn ich es richtig verstanden habe - der Hammer!
Deswegen dazu ein paar Fragen bzw. Gedanken:
Bisher habe ich alle Zugangsdaten (z.B. IP, Port, Benutzernamen, Passwort usw.) in einem zentralen Skript mit dem Namen „Konstanten“ gesichert, mit dem Hintergrund das eine Änderung nur an einem Ort durchgeführt werden muss. In jedem Skript das diese Daten benötigte wurde dieses dann per „Include“ eingebunden. Zusätzlich habe ich mir angewöhnt, alles was sinnvoll erscheint in eigene Skripte als Funktionen zu hinterlegen, auch diese Funktionsblöcke (z.B. TV, Sat-Receiver, 1-Wire, IP-Cam, GPS usw.) konnte ich dann per „Include“ dort einbinden wo es sinnvoll erschien, falls Änderungen erforderlich waren, musste auch hier nur an ener Stelle etwas korrigiert bzw. erweitert werden.

Mit dieser neuen Möglichkeit, kann ich dieses wohl gerne aufgeben, die Struktur im IPS wird damit wieder ein Stück übersichtlicher und die Weitergabe sollte damit ja wieder ein ganzes Stück einfacher werden!:slight_smile:

  • Welche Steuerelemente kann ich auf dem Formular nutzen?
  • Wie definiere ich die Instanz-ID?
  • Wie muss ich es anstellen, die drei erforderlichen Modul-Dateien (form.json, module.json, module.php) zu Testzwecken zu erstellen?

Joachim

Ich bin zwar nicht Paresy, klinke mich aber auch mal ein.

Auf eine vollständige Doku / Auflistung würde ich mich auch freuen :smiley:
Ich könnte nur eine unvollständige Liste liefern von den Elementen welche ich schon verwendet (gefunden) habe.
Hierzu auch einfach mal in den forms-Ordner schauen (/etc/symcon/forms).

Die erzeugt IPS für dich, in den Modul kannst du mit $this->InstanceID darauf zugreifen.

Ich habe mir einfach eine Kopie von Paresys Modul gezogen in mein GIT geworfen (mit neuen GUIDs) und im Module Control eingetragen.
Es sind aber 4 Dateien. Die library.json beschreibt das ‚ganze‘ Modul (aka Library), die anderen drei Dateien in dem Unterordner beschreiben ein ‚Gerät‘ innerhalb der Library.
Sieht bei mir aktuell so aus:
ModuleBaum.png
Michael

Hallo Michael,

vielen Dank erst einmal für Deine Antwort!

Eine neue tolle Möglichkeit die sich da bietet. Ich werde mich auf jeden Fall mal daran versuchen. Weitere Tipps und Tricks sollten aber hier gerne noch gepostet werden…:wink:

Joachim

Ist ja nicht ‚neu‘. Vorher war es das Delphi-SDK :slight_smile:
Leider fehlt aber noch einiges, aber das wird wohl schon noch kommen.
Ich habe jetzt nur ein Problem mit einem alten Modul wo ich nicht möchte dass das Protokoll öffentlich wird. Vorher war es eine Windows-DLL nun ist es Klartext… mal schauen.
Michael

Ich habe leider noch keine Doku für die ganzen Möglichkeiten. Und wie Michael schon sagte, funktionieren zur Zeit nur ein paar Basics. :rolleyes:

Ich bin diese Woche dabei die wichtigen fehlenden Funktionen zu erstellen z.B. PHP-Funktionen, Timer, DataFlow … (Michael hat mir schon eine ganze Liste geschickt was noch fehlt :D)

Und danach würde ich zumindest etwas grundsätzliche Doku erstellen mit den Do’s and Don’t und wie die einzelnen Dateien aufgebaut sind.

Ein paar Basics:
a) Du solltest dir mein Repo mal klonen, ggf umbennen und dann in dein IP-Symcon laden.
b) Dann am besten die LibraryID und ModuleIDs entsprechend verändern, damit du eigene Module mit eigenen IDs hast
c) GUIDs müssen Uppercase sein. https://www.guidgenerator.com/
d) Für die module.json (das „Formfile“) kannst du dir alle unter /etc/symcon/forms abgucken
e) unter /etc/symcon/scripts/__ipsmodule.inc.php findest du die Basisklasse und deren Hilfsfunktionen
f) Wenn du etwas an den json Dateien änderst, musst du IP-Symcon zur Zeit neu starten, damit die Änderungen sichtbar werden
g) Wenn du etwas an den Properties in der module.php änderst, musst du IP-Symcon neu starten oder die Instanz neu erstellen, damit die Änderungen übernommen werden
h) Anderer PHP Code wird direkt ausgeführt und kann während der Laufzeit verändert werden
i) Code im Constructor wird bei jeder Ausführung ausgeführt. Man sollte also nur simple Initialisierung dort hinzufügen. Lieber alles in ApplyChanges hinzufügen oder z.B. Variablen erst wenn sie benötigt werden erstellen.

Ich bin dabei auch jeweils Beispiele in mein Repo zu packen, sodass für viele Gegebenheit ein Beispiel da ist, dass ihr einfach anpassen könnt :slight_smile:

paresy

Danke paresy,

mein erstes Modul ist erzeugt für die iPhone Geofancy App.:cool:

Hallo Paresy,

ich versuche mich dann nun mal Step-by-Step an die (für mich neue) Funktionalität „heranzutasten“.
Vielen Dank erst einmal für die ersten Tipps und Tricks!

  • Ich habe mir zunächst einmal ein bei Github einen Account eingerichtet…
  • Mein erstes Projekt soll die Anbindung des Enigma2-Image-Receivers abbilden
  • Ich habe die notwendigen Dateien bei Dir „entliehen“ und soweit es derzeit meiner Kenntnis entspricht gekürzt bzw. angepasst
  • Im IPS habe ich den Link in „Modules“ eingerichtet, er wird als solches akzeptiert, Änderungen werden erkannt
  • Noch steckt keine echte Funktionalität in dem Modul

Leider erscheint das neue Modul nicht wie bei Deinem Beispiel bei den Instanzen…

Joachim

@JPaeper

Es fehlt die „library.json“ Datei und jedes Module muss in einen Unterordner sein.

Hallo Charykun,

vielen Dank für die Antwort.

Ich habe den GitHub-Account jetzt neu strukturiert und die Library.json angepasst. Werde damit mal weiter testen…

Joachim

Hallo Leute,

hier nun mein aktualisiertes GitHub.

Mein Präfix lautet „AV“, ich habe nun versucht mit

AV_RequestInfo(44601  /*[Enigma2]*/);

diese Funktion auszuführen:

  public function RequestInfo()
	{
		$IP = $this->ReadPropertyString("IP");
		
		SetValue($this->GetIDForIdent("Status"), ENIGMA2_PowerstateStatus($IP));
	}

bekomme aber die Fehlermeldung:

Fatal error: Call to undefined function AV_RequestInfo() in /usr/share/symcon/scripts/41577.ips.php on line 3

Was habe ich übersehen?

Joachim

Das scheint noch nicht zu funktionieren.
Ist bei mir identisch. :frowning:
Zusätzlich gibt es noch eine Fehlermeldung wenn man versucht im Objektbaum „Befehle testen“ auszuführen.
Michael

Hallo Michael,

vielen Dank für Deine Antwort.

Deinen zusätzlichen Hinweis kann ich bestätigen…

Joachim

Irgendwie scheine ich hier was verpasst zu haben. Ist das der Ersatz für’s SDK. Wo finde ich noch einmal den Einstieg dazu?

Tommi

Irgendwie gibt es da keinen ‚richtigen‘ Einstieg.
Am einfachsten ist es sich Paresys Beispiele anzusehen:
paresy (paresy) · GitHub
Und vielleicht noch die Klasse IPSModule aus der Datei __ipsmodule.inc.php (zu finden auf dem IPS-Server /etc/symcon/scripts/ ).

Viele der durch dieses ‚Feature‘ neu instandenen PHP-Funktionen findet man auch in der Console. Einfach mal STRG+Leertaste und dann findet man z.B. die Beschreibung zu IPS_SendDataToParent …

Michael

@Jungs: Ja… Das fehlt noch… Bin dort noch dran - Hat sich heute doch als schwieriger herausgestellt dieses Feature :rolleyes:

@tommi: Einstieg gibt es noch nicht… Bisher nur in meinem Repo die paar Demos. Im Gegensatz zum alten SDK soll es hier aber demnächst wirkliche Doku geben :wink:

parsy

Die erste Version der Doku für die Konfigurationsformulare ist online!

Konfigurationsformulare — IP-Symcon :: Automatisierungssoftware

paresy

Finde ich super :D:D

Aber fehlt da nicht noch einiges ?
Wie z.B. SelectVariable, SelectScript …Select*

Und dann gibt es doch noch den Formularbereich für die Statuscodes in der Datei.
Letztes geht zwar im Modul noch nicht, aber warum das Feld jetzt erst nicht dokumentieren und es dann später nachholen.
Ist doch nur doppelte Arbeit; könnte man doch gleich ‚richtig‘ machen :rolleyes:

Michael

Tatsache! Die habe ich doch glatt vergessen. Wird’ Morgen nachgeholt…

paresy

Hallo Paresy,

ein toller Anfang!:wink:

Wahrscheinlich meint Michael mit „Statuscode“ dieses? Falls nicht wäre das auf meiner Wunschliste!:smiley:

"status":
  [
    { "code": 102, "icon": "active", "caption": "Interface is open" },
    { "code": 104, "icon": "inactive", "caption": "Interface is closed" },
    { "code": 200, "icon": "error", "caption": "Interface is an error state. Please check message log for more information." }
  ]

Wäre toll wenn man dieses dann auch früher oder später nutzen könnte…

Joachim

Aktualisierte Dokumentation dazu ist jetzt online!

paresy