Frage zum Datenfluss

Hallo zusammen,

für mich um es zu verstehen.

Gegeben ist eine Auswahl aus 3 I/O. Seriell, Client, Virtual.

Hierfür muss ich jetzt in der module.json die Guid eintragen.?

Die genannten I/O haben ja eine für RX/TX vorgegebene Guid. Diese trage ich ein in „implemented“ ?

Für „parentRequirements“ generiere ich mir eine eigene. ?

Setze dann im Modul ein

$this->ConnectParent("{meine generierte GUID}");

Soweit richtig oder total falsch?

Zusatz Frage: mit ForceParent sollte doch eigentlich die Kommunikation zwischen I/O und Modul automatisch vorhanden sein. ohne irgendwelche Einträge in der Module.json?

Alles gut. :slight_smile:

Die vorgegebene GUID wird in „implemented“ eingetragen. Dann klappt´s auch mit den Daten.

Wäre eventuell mal schön, wenn es ein simples Beispiel dafür geben würde. I/O ist ja eigentlich Standart.

Ja.

Jein. Dort kommt das rein was dein Modul empfangen kann (egal von oben oder unten).

Nein. Dort kommt die rein mit der du an deinen Parent senden willst.

Nein. Dort kommt eine GUID von einem Modul und nicht von Datenfluss rein.
Z.b. die vom SerielPort.

Teils teils :wink:

Nein. Du kannst nur etwas verbinden was auch gem. der GUIDs und somit deiner module.json kompatibel ist.
Michael

Hallo Michael,

hiermit setze ich meinen entsprechenden I/O

$this->ForceParent("{3CFF0FD9-E306-41DB-9B5A-9D06D38576C3}");

Warum, verbindet er nicht automatisch direkt mit dem Device? ist ja weiter nix dazwischen. Verbunden wird er ja…mit was oder wem.?

Was ist der Unterschied außer das Splitter total irreführend ist.

ConnectParent <> ForceParent ?

ClientSocket egal was der User später umstellt, du willst also immer einen ClientSocket.

Wer mit wem? Verstehe die Frage nicht.
Solange die GUIDs für den Datenfluss nicht passen, wird gar nix verbunden.

? Worauf bezieht sich das?

Der Unterschied ist einfach, Force erzwingt immer ein Modul was du angibst.
Auch wenn der User dann z.b. einen SerielPort verbindet, ist das spätestens nach einem Neustart wieder ein ClientSocket (in dein Fall).
Connect verbindet nur zu einen Parent wenn noch keiner verbunden ist.
Ist aber nicht zu empfehlen, da du sonst an irgendeinem fremden IO hängst (ist gedacht wenn sich ein Device an einen speziellen Splitter hängen soll, welcher schon vorhanden ist).
RequireParent wäre ist beste Wahl.
Damit hast du einen neuen Parent beim erstellen. Und Änderungen von Usern werden behalten.
Michael

Ich gebe eine Auswahl vor…und zwar Client Socket oder Seriell Port über eine Auswahl. Diese wird entsprechend angelegt.
Funktioniert auch soweit.

Zum Testen ob es dann alles richtig funktioniert auch so wie ich will und soll, komme ich später.

Es soll natürlich immer der ausgewählte I/O bestehen bleiben und nicht nach einem Neustart alles wirr machen.:confused:

Ich hab jetzt noch 2 Fehler im Modul. Die werde ich auch noch packen und dann mal schaun was noch alles anderst werden muss.

Ein Fehler ist: Kann Daten nicht zur Instanz #12345 weiterleiten.
Daten kommen an und werden ausgewertet. Ich empfange nur Daten vom I/O?

Zu allem anderen was ich heraus gelesen habe.
ForceParent — IP-Symcon :: Automatisierungssoftware

ConnectParent — IP-Symcon :: Automatisierungssoftware

Wär ich mal bei den Scripten geblieben.:banghead:

Der Fehler kommt wenn du irgendeine Ausgabe machst.
Weil dann ist der IO der Meinung er konnte seine Daten nicht an deine Instanz übergeben.

Und wenn es nur die berühmte Leerzeile außerhalb der PHP Tags ist.
Empfehlung, kein schließenden Tag setzen.
Ist eh unnötig :wink:
Michael

Der Fehler kommt wenn du irgendeine Ausgabe machst.

Du meinst z.B. mit LogMessage.

Ich probier das nachher mal. Jetzt mach ich erst den anderen Fehler…ist ja mein eigener. :wink:

Ne nicht logmessage.
(Das wäre $this->LogMessage oder SendDebug für wichtige User Infos ersteres, zum debuggen letzteres).
Aber Echo, var_dump, Print usw…
Oder auch Fehlermeldungen und halt die Zeilenumbrüche/Leerzeilen.
Michael

Hallo Michael,
erst mal vielen Dank.

Es ist nur ein LogMessage offen. Den Endtag hab ich auch entfernt.
Also doch noch die GUID in die Module.json ?

Gesendet von iPad mit Tapatalk

Ja die müssen immer passen!
Sonst passiert nix, oder halt Fehler.
Du brauchst, auch wenn du nur Empfang willst, immer beide Richtungen in der modul.json.
Also implemented (empfangen) und parentRequirements (senden zum Parent).
Michael

Es geht auch ohne beide GUID.

Fehler beseitgt und keine Meldung mehr von der Instanz.

Entspricht dann doch was man erwarten könnte. Entweder RX oder TX. mit GUID. Macht auch Sinn.

Der Live Test über die Schnittstellen steht aber noch aus. Im Moment nur über Virtual I/O.

Mal sehn, wenn ich fertig bin werde ich mal ein kleines Beispiel für I/O mit nur empfangen machen. Ist doch Standart und täglich zu lesen ob als Script oder Modul.
Ich kauf mir lieber ein Buch für 100€ und hab alles zusammen als 2 Tage durch die Infowüste zu robben und alles zusammensuchen zu müssen.

Zumal, sollte man sich entscheiden was was macht und nicht könnte auch passen.(in Bezug auf die Doku):mad:

Für jemanden der sein täglich Brot damit verdient, mag das ja passen nur für Hobbyartisten wo ich auch dazu zähle ist das machmal verdammt schwer zu verstehen.:wink:

Wenn du dein Buch geschrieben hast, kannst du es veröffentlichen? :smiley:
Ich bin da damals auch immer dran gescheitert. (Nochmal vielen Dank an Michael, der auch mir damals alles immer erklärt hat!:D)
Mittlerweile kopiere ich mir das immer nur noch und passe es an und um ehrlich zu sein weiß ich auch gerade nicht mehr, ob ich es noch verstanden habe. :smiley:

Grüße,
Kai

Mein Beruf bringt es halt mit, das ich verstehe was ich mache. Ansonsten könnte es das letzte gewesen sein.

So halte ich es auch mit meinen Hobbys. Genauso auch hier.

Ein Buch schreibe ich auch nicht.

Gesendet von iPad mit Tapatalk

Ich meine damit, wenn man es ein paar Monate nicht gemacht hat, muss man sich das erst noch ein Mal durchlesen.

So geht es zumindest mir. :wink:

Grüße,
Kai

Gesendet von iPhone mit Tapatalk