Client Socket erstellen - Fehlermeldung Modul mit GUID wird nicht gefunden

Hallo,

ich versuche hier schon seit Tagen, in einem Modul einen Client Socket zu erstellen und den nutzbar zu machen.

Ich hab versucht die Doku zu verstehen und auch das Beispiel zu nutzen.

Aber es kommt immer zum gleichen Ergebnis (auch das Beispiel): Modul mit der GUID (…) wurde nicht gefunden.

rätselnde Grüße

Jörg

Sorry, das war quatsch, was hier stand, wenn du etwas „neues“ entwickelst.

Die GUIDs müssen entsprechend zusammenpassen, also Parent, etc. Damit habe ich auch ständig Probleme.

Vielleicht hilft dir die Dokudazu weiter.

Hallo Ralf,

ja, das hab ich jetzt schon gefühlte 20x gelesen und nein, es nein hat mir nicht weitergeholfen.

Wie ich schon sagte, selbst das Beispiel aus dem Repo 1:1 funktioniert nicht.

Gelinde gesagt, ist die Doku ne Blabla-Doku. Ein Beispiel aus der PHP-Doku funktioniert ja auch 1:1. :mad:

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?

Im Voraus vielen Dank,
Jörg

Datenfluss — IP-Symcon :: Automatisierungssoftware
Dort stehen die GUID für den Datenaustausch.
Michael

Hallo Michael,

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:

Michael

Ich versuch das jetzt seid fast 2 Wochen zu verstehen.

Hallo? Liest hier überhaupt jemand was ich geschrieben habe?

Das Beispiel alleine funktioniert doch schon nicht - das hab ich bereits in Initialbeitrag geschrieben.

Danke - aber ich lass es jetzt einfach mit dem PHP Socket. Ich Ärger mich damit nicht mehr länger rum.

Hier wird ja eh nur immer auf irgendwelche Dokus verwiesen anstelle mal wirklich zu helfen.

Es macht keinen Spass mehr.

Beitrag bitte schießen.

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.

Michael

Das Beispiel funktioniert nicht, wenn man nur den Code verwendet, sondern braucht was anderes aus der Library?
Wo steht das denn wieder?

Nur den Code?
Nein das geht nicht, ein Modul ist Bestandteil einer Library und die besteht aus vielen Dateien.
Struktur — IP-Symcon :: Automatisierungssoftware
Michael

Da hast aus mich falsch verstanden.

Der Code ist in einer eigenen Library/Modul.

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 :wink:
Michael

Ok,

hier sind sie:

library.json

{
	"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
}

Im Ordner MpdPlayer:

form.json

{
	"actions":
	[
		{ "name": "Text", "type": "ValidationTextBox", "caption": "Text" },
		{ "type": "Button", "label": "Send", "onClick": "MpdPlayer_Send($id, $Text);" }
	]
}

module.json

{
	"id": "{6E208155-7BB3-4871-BADE-FDC8F84331F8}",
	"name": "MpdPlayer",
	"type": 3,
	"vendor": "Obernsoft",
	"aliases": 
	[
		"MpdPlayer"
	],
	"parentRequirements": ["{B87AC955-F258-468B-92FE-F4E0866A9E18}"],
	"childRequirements": [],
	"implemented": ["{66164EB8-3439-4599-B937-A365D7A68567}"],
	"prefix": "MpdPlayer"
}

module.php

<?

	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.

Viele Grüße,
Jörg

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:


"parentRequirements": ["{79827379-F36E-4ADA-8A95-5F8D1DC92FA9}"],

"implemented": ["{018EF6B5-AB94-40C6-AA53-46943E824ACF}"],


}



Entsprechend muss beim SendDataToParent auch die parentRequirements GUID rein.
Michael

Danke. Läuft.