[Library] IPSNetwork (WebSocket Client & Server, DHCPSniffer, JSON-Parser uvm)

Ich glaube du hast die Funktion von der Instanz nicht verstanden.
Wenn du selber DHCP Pakete empfangen willst, musst du den IO nutzen.
Und da wie immer mit RegVar und Script.

Was da im Debug steht ist kein Empfangsbuffer. Einen Buffer hat dieses Modul nicht, ebensowenig wie eine Schnittstelle für den Datenaustausch zu einer RegVar.
Nur das was in der Doku steht gibt es, mehr nicht.
Michael

Hi,

ja hast recht sorry, aber geht das mit dem MultiCast Socket auch?

Schau doch einfach welchen IO die Instanz nutzt…
Michael

ok nochmal für Anfänger.

Ich habe eine RegVar angelegt? Korrekt?
Der RegVar einScript zugeordnet. Korrekt ?
Der RegVar habe ich dann den „Sniffer DHCP“ zugeordnet. Korrekt ?

Nein…das geht noch immer nicht…
Was zum Henker willst du machen?
Diese Instanz zeigt nur anhand einer Variable an ob sich ein Gerät gerade per DHCP eine IP holt. Mehr nicht. Keine RegVar kein Script nix…

Wenn du selber irgendwas anderes machen willst, musst du das ohne mein Modul machen.
Und ja, die Instanz DHCP Sniffer nutzt als IO einen Multicast-Socket.
Michael

einfach ganz ruhig bleiben … nix ist passiert.

Ich habe das schon geschrieben das ich gerne an die Daten möchte die man über einen Socket
abrufen kann.
Mehr einfach nicht …

Nein, du hast das geschrieben:

Somit bitte erst genau formulieren was man möchte (und damit erreichen will).
Socket, Debug und Empfangsbuffer sind drei völlig verschiedene Dinge.
Abrufen kannst du so oder so gar keine Daten von einem IO.
Diese werden dir dann wenn der IO welche empfängt, an deine RegVar und somit dein Script übergeben.
Abrufen impliziert dass du zyklisch irgendwas ausliest. Was hier nicht funktioniert.
Michael

ok, und in der IPS Doku steht z.B. bei RegVar was von „RegisterVariable stellt eine Datenweiterleitungs- und -Verarbeitungsschnittstelle zur Verfügung.“

Also ich glaube hier gibt es tausende Definitionen dazu.
Aber letzen Ende sollte doch klar sein das zwischen allen diesen Schnittstellen Daten ausgetauscht werden.

Ok, dann nochmal, was sehe ich denn für Daten wenn ich im MultiCast Socket Instanz bin?
Ich möchte gerade nur im Monent wissen was man alles im Debug Teil der jeweiligen Instanzen sieht.

Was sehe ich für Daten wenn ich in der RegVar bin?

Was sehe ich für Daten wenn ich in der DHCP Sniffer Instanz bin.

Alles was diese Instanz empfängt und versendet.

Alles was diese Instanz empfängt und versendet.

Das worauf ich Lust habe es als Debug auszugeben :wink:

Michael

ok, das war mir nicht wirklich klar … dann würde ich gerne nochmal zum Thema zurück kehren …

Also was ich versucht habe ist, das ich vom MultiCast die Daten über eine RegVar versucht habe abzugreifen.
Das funktioniert auch soweit. Was ich noch nicht angewandt habe ist wie man die Daten lesbar konvertiert.

Ich würde gerne die MAC Adresse die über das MultiCast Protokoll läuft auswerten.

Gruß

Ich würde dich bitten dieses Thema nicht hier weiter zu verfolgen, da es nichts mit meinem Modul zu tun hat.
Dafür ist der Bereich Scripte,PHP gedacht.
Da es sich bei DHCP nicht um ein Klartext Protokoll handelt, ist es witzlos dieses Lesbar auszugeben.
Details wie das Protokoll funktioniert finden sich in den passenden RFCs und dann musst du ‚nur‘ die passende Stelle aus den Daten ausschneiden.

Michael

Hi,

versuche den Datenaustausch zwischen meine 10+ ESP32 (Anzeigen in diversen Räumen) und IPS auf WebSocket umzustellen.
Was klappt ist in IPS den WebSocketClient zu nutzen und den ESP32 als WebSocketServer laufen zu lassen. Dann kann ich Daten in beiden Richtungen übertragen. Dann bräuchte ich ja aber 10+ WebSocketClient instanzen in IPS. Daher wollte ich das entsprechend umdrehen, in IPS den WebSocketServer und auf dem ESP den WebSocketClient.

Der Handshake klappt und ich bekomme im Client Splitter auch den Text angezeigt den der ESP überträgt.

Doch ich bekomme keinen Text von IPS zum ESP übertragen.

In der Anleitung steht dieser Befehl zum senden:

bool WSS_SendPing(integer $InstanzeID, string $ClientIP, string $Text);

doch IPS will einen weiteren Wert - den ClientPort haben:

bool WSS_SendPing(InstanceID: Integer, ClientIP: String, ClientPort: String, Text: String): Variant

Den ClientPort hole ich mir aktuell aus den Debug vom WebSocket Server - aber irgendwie klappt das nicht.

WSS_SendPing(46379 /*[Websocket Server]*/, "10.1.1.223", "61532", "TEST");

Zumindest zeigt mit mein ESP keinen Datenempfang an. Im Debug vom WebSocketServer schaut es so aus als ob es gesendet wird - bin mir da aber nicht sicher.

Habe nun 2 Frage:

  1. woher bekomme ich dann später den ClientPort? Der ändert sich aktuell bei mir mit jedem reboot des ESP
  2. werden die Daten gesendet?

Möchte nur wissen wo ich suchen muss - in IPS oder in Code vom ESP :slight_smile:

Ping ist nicht zum senden.
Das ist nur ein Keep-alive.
Du musst über die RegisterVariable die Daten senden.
RegisterVariable — IP-Symcon :: Automatisierungssoftware
RegVar_SendPacket — IP-Symcon :: Automatisierungssoftware
Michael

Man sollte doch mehr lesen :slight_smile:

Das mit der RegisterVariable hatte ich nicht auf dem Schirm - ist nun drin. Der WebSocket Server hat als übergeordnete Instanz noch einen Server Socket.


Das Aktionsscript macht im Moment erstmal nichts weiter als die ankommenden Daten in Variablen zu speichern.

<?
IPS_LogMessage("WebSocket Register", "## START ##");
IPS_LogMessage("WebSocket Register", "Client IP: ".$_IPS['CLIENTIP']);
IPS_LogMessage("WebSocket Register", "Client Port: ".$_IPS['CLIENTPORT']);
IPS_LogMessage("WebSocket Register", "empfangene Daten: ".$_IPS['VALUE']);
IPS_LogMessage("WebSocket Register", "## ENDE ##");

SetValue(17638 /*[Websocket Server\Register Variable\Read Register Var\Client-IP]*/,$_IPS['CLIENTIP']);
SetValue(39549 /*[Websocket Server\Register Variable\Read Register Var\Client-Port]*/,$_IPS['CLIENTPORT']);
SetValue(48248 /*[Websocket Server\Register Variable\Read Register Var\Client-Data]*/, $_IPS['VALUE']);
?>

Wenn ich nun über RegVar_SendPacket ein Paket über den WebSocket Server senden will

<?
$ClientIP = GetValueString(17638);
$ClientPort = GetValueInteger(39549);
//RegVar_SendPacket(InstanceID: Integer, Text: String, ClientIP: String, ClientPort: Integer): Boolean
RegVar_SendPacket(46379 /*[Websocket Server]*/, "TEST from IPS", $ClientIP, $ClientPort);
?>

bekomme ich aber einen Fehler:

Warning: SendPacket can only be used with a server socket in /var/lib/symcon/scripts/23429.ips.php on line 4

Versuche ich es über den WebSocketServer

RegVar_SendPacket(22816 /*[Websocket Server\Register Variable]*/, "TEST from IPS", $ClientIP, $ClientPort);

kommt der Fehler:

Warning: Instance does not implement this function in /var/lib/symcon/scripts/23429.ips.php on line 4

Schicke ich mit SSCK_SendPacket das Paket direkt über den ServerSocket (Parent des WebSocket Server) wird die Verbindung getrennt und neu aufgebaut - also auch irgendwie nicht richtig.

Wo liegt denn hier mein Fehler?

Falls das nicht hier hin gehört und ich besser einen eigenen Thread aufmachen soll - so kann ich das gerne tun.

Danke!

Oh… Das sollte funktionieren.
Alles andere von dir probierte ist falsch und kann nicht für funktionieren.
Dann mach es anders.
Erstelle eine Instanz ClientSplitter und hänge diese hinter den WebSocket-Server.
Dort die IP von deinem ESP eintragen.
Und dann dahinter die RegVar und Script.
Dann funktioniert das Senden mit RegVar_SendText und du musst keine IP/Port angeben.
Michael
PS: AktionsSkript bezeichnet ein Script welches bei einer Variable als Aktion eingetragen wird. Das hier sind keine :wink:

Hi Michael,

Danke für Deine Rückmeldung!

Das dachte ich mir schon, wollte aber nichts unversucht lassen - oftmals sitzt der Fehler ja vor dem Bildschirm :rolleyes:

Damit funktioniert das ganze!

Vielen Dank für Deine Hilfe und dieses super Modul!

Torsten

Und wenn du ein Script für alle ESP nutzen willst, geht das auch.
In den ganzen RegVars dann immer das gleiche Script eintragen und im Script kannst du durch $_IPS[‚INSTANCE‘] unterscheiden von welcher RegVar (also welcher ESP) die Daten ankommen.
Senden geht auch, musst halt die passende ObjektID der RegVar bei RegVar_SendText angeben.

Ich werde dennoch kurzfristig ein WSS_SendPaket einbauen, da die RegVar von IPS aktuell mit dem WebSocket-Server nicht richtig funktioniert. Der Bug in der RegVar wird wohl erst in IPS 5.1 behoben sein.
Michael

Version 2.3

  • Fix: DHCP-Sniffer hat während des Symcon Systemstart auf falsche DHCP Requests reagiert.

Michael

Entschuldige die banale Frage, aber was wird bei der Instanz-Konfiguration des DHCP-Sniffer als Sende-Host eingetragen?
Irgendwie ist die Dokumentation etwas sehr knapp.

Nix.
Michael