ich mache zur Zeit die ersten Schritte mit der Entwicklung von PHP-Modulen, dazu hätte ich zur Zeit zwei Fragen.
[ol]
[li]Wie kann ich ein „Select“ welches ich in der json.form angelegt habe, mit verschiedenen Optionen aus PHP heraus füllen?[/li][li]Wie registriere ich in der module.php ein Client Socket und greife auf dieses zu?[/li][/ol]
Ich freue mich über Antworten und bedanke mich schon mal.
Hat jemand evtl. noch ein paar Verbesserungsvorschläge?
Man kann sicherlich einiges eleganter lösen, ich würde mich freuen wenn ihr weitere Tipps für mich habt.
Nun rätsel ich, wie ich das ganze ohne Scripts machen kann, ist das möglich?
Sodass zum Beispiel die Variablen nach einer gewissen Zeit (Timer) aus dem Modul befüllt werden. In meinem Beispiel wird ja zur Zeit alle 600 Sekunden ein Script ausgeführt, dies geht doch sicherlich auch direkt aus dem Modul?!
Sorry für so viele, wahrscheinlich „dumme“ Fragen.
Wenn ich ein Modul habe, welches evtl. „Untermodule“ haben soll, aber es Einstellungen gibt, die für alle greifen sollen. Wie gehe ich da am besten vor? Ist für sowas der Splitter vorgesehen?
Jup. Entweder der Splitter holt die Daten , er hat auch den Timer, und versendet dann die Daten per SendToChildren.
Die Daten kommen dann im Child bei ReceiveData an.
Oder die Childs haben jeder einen individuellen Timer und holen dich dann per Rückgabewert von SendToParent die Daten vom Splitter.
Hängt immer davon ab wie dein Splitter extern arbeite.
Also ob er eh immer alle Daten hat/holt oder immer nur für ein Child.
Michael
Ja, ich habe es mir auch schon ziemlich lange angeguckt und immer wieder gelesen.
Das Device wäre also mein Modul, der Splitter wäre die Ebene auf der ich „global“ Einstellungen für meine Module schreiben kann.
Was ist mit I/O? Benötige ich das?
Ich versuche es einfach mal abzubilden.
Mein Splitter SISHandballSplitter:
Module.json:
{
"id": "{1F17C41E-F610-4327-A3A1-7E93B56AB6C2}",
"name": "SISHandballSplitter",
"type": 2,
"vendor": "",
"aliases":["SISHandball Splitter"],
"parentRequirements": [""], <- bleibt leer, gibt ja nichts darüber
"childRequirements": ["{A5228F95-286E-4A3C-829F-042F6AFD00F8}"], <- guid, welche beim Modul in implemented eingetragen ist
"implemented": ["{3D094C9F-E763-4B92-9673-98535A673DD9}"], <-guid, welche im Modul bei parentRequirements eingetragen ist
"prefix": "sisSplitter"
}
Ob du ein IO brauchst, Kannst nur du entscheiden
Wenn du direkt Daten z.B aus einem Dienst ausliest ohne einen WWW Reader oder einen ClientSocket, brauchst du wohl keinen.
Kannst aber auch einfach deinen Splitter zum IO deklarieren und keine Splitter nutzen.
Globale Einstellungen gibt es nicht. Daten werden wie in meinem Post 7 ausgetauscht.
Dazu einfach mal den Code von Paresy aus GitHub ausprobieren / ansehen.
Michael
GitHub - Schnittcher/KS_Modules
Dort gibt es die Module KS_HandballSplitter & S_SIS-HandballTabelle, würdest du dir vielleicht mal den Code ansehen und mir dazu eine Rückmeldung geben ob es so im Sinne des Erfinders ist?
Du wirst das Modul sicherlich nicht testen können, da du keine Zugangsdaten für SIS-Handball hast. Deswegen anbei mal ein paar Screenshots.
Ich schaue es mir gerne mal an. Wird aber erst nächste Woche etwas, bin gerade ein paar Hundert Kilometer von einem IPS entfernt und genieße das super Wetter
Michael
PS: Und gern geschehen.
Das habe ich ja nun dank dir schon verstanden.
Jetzt bin ich an der Stelle angekommen, an der ich auf den Host zugreifen will, also wie wird die Verbindung geöffnet und wie sende ich Daten und empfange die Antwort?
Also das senden von Befehlen wäre ja so:
CSCK_SendText(ID des Moduls, "Beliebiger Datensatz");
Und wie finde ich am elegantesten die ID des Moduls heraus, mit GetIDForIdent?
Nein diese Befehle nutzt du in Modulen gar nicht.
Einfach mit SendDataToParent IP-Symcon :: Automatisierungssoftware
deine Daten an den IO senden.
Schau mal hier durch, Da sind auch viele Fragen und Antworten, Welche dir bestimmt helfen.
Nimm lieber das Original GitHub - Joey-1970/SymconModules
Mein Fork ist glaube ich veraltet.
Und wenn du einen ClientSocket als IO nutzen möchtest, brauchst du den nicht selbst als Modul erzeugen, der ist fertig in IPS verfügbar.
Michael