Das Beispiel erklärt doch nur einen minimalen Teil. Die dort verwendete GUID referenziert zu keinem existierenden Splitter, das sagt ja auch die Fehlermeldung.
//Connect to available splitter or create a new one
$this->ConnectParent("{46C969BF-3465-4E3E-B2A5-E404FB969735}"
);
Wenn du z.B. {8D7872F4-CAC3-409D-926B-CCF1BA9E937B} den dS Splitter nutzt, dann funktioniert das.
Standard-Splitter findest du hier oder du must dir selber einen Splitter erstellen, mit eigener GUID, die dann in deinem IO referenziert wird.
Wie gesagt, für mich ist das schlecht dokumentiert.
Ich frage mal neu, weil mir jetzt zwar ein Client Socket erstellt wird ({3CFF0FD9-E306-41DB-9B5A-9D06D38576C3}, aber ich den weder im Modul einbinden noch irgendwie nutzen kann.
Welche GUIDs muss ich denn nun in der module.json eintragen und was bei SendDatatoParent?
Danke. Aber ich komm damit nicht klar. Es hilft mir nicht weiter. Ich versuch das schon seit 2 Wochen zu verstehen, da aber selbst die Beispiele irgendwelche fiktiven GUIDs verwenden, kann ich das nicht nachvollziehen.
Edit/Nachtrag: Ich verstehe funktierende Beispiele, aber nicht Doku-Blabla
Dann solltest du mal lesen.
Die sind ja nicht fiktiv, sondern auf dieser Seite Dokumentiert für z.b. den VirtualIO welches der ClientSocket implementiert.
Und das steht auch in der Spalte der Tabelle.
Code Beispiele wie das aussieht, sind im den Symcon TestModulen auf GitHub zu finden.
Hier das Senden an den IO:
Die Meldung mit der GUID kann ich nicht nachvollziehen.
Das Modul funktioniert einwandfrei.
Zumindest soweit, dass es hier die Instanzen erzeugt, welche natürlich keinerlei Funktion bieten.
Das von dir verlinkte IOTest ist aber ein Device, welches seine eigenen GUIDs für den Datenaustausch mit den IOSplitter mitbringt.
Der IOSplitter kann aber in der Konsole problemlos auch mit einem Clientsocket verbunden werden.
Somit ist im TestModul alles richtig.
Den Beispielcode mit der Doku zusammen in etwas eigenes Umzusetzen ist deine Aufgabe.
Wenn dabei Fehler auftreten, und du (andere/bessere) Hilfe erwartest, sind aber mehr Infos als nur eine Fehlermeldung nötig.
Code oder verwendete IPS Version wären ein Anfang.
Michael
Ich wiederhole: liest überhaupt jemand, was man schreibt? Allein schon Deine letzte Frage steht schon in meiner Signatur!
Und um es kurz zu fassen, ich will einen Client Socket auf den ich lesend/schreibend zugreifen kann, damit ich nicht jedes Mal über fsockopen die Verbindung auf machen muss.
Und das IOtest Beispiel funktioniert bei mir nicht. Es kommt ja die Meldung.
Dann lösch das TestModul und installiere es neu. Es funktioniert, eben getestet.
Und eine Signatur muss weder aktuell sein, noch wird sie in Tap-a-Talk angezeigt.
Dann machst du aber irgendwas falsch.
Kann an der GUID der library.json, den GUIDs in der Module.json oder den GUIDs in einer module.php liegen.
Dann musst du aber den Inhalt zeigen, sonst wird das ein lustiges Ratespiel
Michael
{
"id": "{F9C0DDFF-2B68-4A97-B376-B9438E737CF4}",
"author": "Obernsoft",
"name": "Modul für den Music Player Daemon (Mpd) für IP Symcon",
"url": "",
"compatibility": {
"version": "5.0"
},
"version": "0.1",
"build": 0,
"date": 0
}
<?
class MpdPlayer extends IPSModule
{
public function ApplyChanges()
{
//Never delete this line!
parent::ApplyChanges();
//Connect to available splitter or create a new one
$this->ConnectParent("{46C969BF-3465-4E3E-B2A5-E404FB969735}");
}
/**
* This function will be available automatically after the module is imported with the module control.
* Using the custom prefix this function will be callable from PHP and JSON-RPC through:
*
* IOT_Send($id, $text);
*
*/
public function Send($Text)
{
$this->SendDataToParent(json_encode(Array("DataID" => "{B87AC955-F258-468B-92FE-F4E0866A9E18}", "Buffer" => $Text)));
}
public function ReceiveData($JSONString)
{
$data = json_decode($JSONString);
//IPS_LogMessage("MpdPlayer", utf8_decode($data->Buffer));
//Parse and write values to our variables
}
}
?>
Die GUID der library.json ist eine eigene, ebenso die ID in der module.json.
Ansonsten war nur der Name des Modules angepasst.
Bin jetzt erstmal bis heute Abend unterwegs, aber wenn du als Basis das IOTest genommen hast, so ist die Fehlermeldung richtig.
Die GUIDs in der module.json für parentRequirements und implemented sind nicht die des Datenaustausch eines ClientSocket.
Die gehören zum IOSplitter, welcher ebenfalls in der ModulTest Library enthalten ist.
Da du dieses vermutlich nicht installiert hast, meckert IPS die unbekannten GUIDs an.
Das hier in der Module.json sollte passen: