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

Ne, man fragt die Instanz ab ob sie in Active steht. Und reagiert auf Statusänderung in Modulen mit IM_CHANGESTATUS und MessageSink.
Michael

Hallo Michael,

du kannst mir hier sicherlich weiterhelfen, ich will deinen Websocket Client nutzen um von einem ESP RFID Modul Daten in IPS zubekommen.
Im Websocket Client kommt folgendes an:


TXT: 08.04.2018 22:11:58.00 |        ReceivePacket | c{"command":"piccscan","uid":"a67e5cac","type":"MIFARE 1KB","known":1,"acctype":1,"user":"Kai Chip"}
HEX: 08.04.2018 22:11:58.00 |        ReceivePacket | 81 63 7B 22 63 6F 6D 6D 61 6E 64 22 3A 22 70 69 63 63 73 63 61 6E 22 2C 22 75 69 64 22 3A 22 61 36 37 65 35 63 61 63 22 2C 22 74 79 70 65 22 3A 22 4D 49 46 41 52 45 20 31 4B 42 22 2C 22 6B 6E 6F 77 6E 22 3A 31 2C 22 61 63 63 74 79 70 65 22 3A 31 2C 22 75 73 65 72 22 3A 22 4B 61 69 20 43 68 69 70 22 7D 
TXT: 08.04.2018 22:11:58.00 |          Receive FIN | true
HEX: 08.04.2018 22:11:58.00 |          Receive FIN | 74 72 75 65 
TXT: 08.04.2018 22:11:58.00 |       Receive OpCode | text
HEX: 08.04.2018 22:11:58.00 |       Receive OpCode | 74 65 78 74 
TXT: 08.04.2018 22:11:58.00 |         Receive Mask | false
HEX: 08.04.2018 22:11:58.00 |         Receive Mask | 66 61 6C 73 65 
TXT: 08.04.2018 22:11:58.00 |      Receive Payload | {"command":"piccscan","uid":"a67e5cac","type":"MIFARE 1KB","known":1,"acctype":1,"user":"Kai Chip"}
HEX: 08.04.2018 22:11:58.00 |      Receive Payload | 7B 22 63 6F 6D 6D 61 6E 64 22 3A 22 70 69 63 63 73 63 61 6E 22 2C 22 75 69 64 22 3A 22 61 36 37 65 35 63 61 63 22 2C 22 74 79 70 65 22 3A 22 4D 49 46 41 52 45 20 31 4B 42 22 2C 22 6B 6E 6F 77 6E 22 3A 31 2C 22 61 63 63 74 79 70 65 22 3A 31 2C 22 75 73 65 72 22 3A 22 4B 61 69 20 43 68 69 70 22 7D 


Bei mir im Modul kommt folgendes:

TXT: 08.04.2018 22:11:58.00 |                 JSON | {"DataID":"{018EF6B5-AB94-40C6-AA53-46943E824ACF}","Buffer":"c{\"command\":\"piccscan\",\"uid\":\"a67e5cac\",\"type\":\"MIFARE 1KB\",\"known\":1,\"acctype\":1,\"user\":\"Kai Chip\"}"}
HEX: 08.04.2018 22:11:58.00 |                 JSON | 7B 22 44 61 74 61 49 44 22 3A 22 7B 30 31 38 45 46 36 42 35 2D 41 42 39 34 2D 34 30 43 36 2D 41 41 35 33 2D 34 36 39 34 33 45 38 32 34 41 43 46 7D 22 2C 22 42 75 66 66 65 72 22 3A 22 C2 81 63 7B 5C 22 63 6F 6D 6D 61 6E 64 5C 22 3A 5C 22 70 69 63 63 73 63 61 6E 5C 22 2C 5C 22 75 69 64 5C 22 3A 5C 22 61 36 37 65 35 63 61 63 5C 22 2C 5C 22 74 79 70 65 5C 22 3A 5C 22 4D 49 46 41 52 45 20 31 4B 42 5C 22 2C 5C 22 6B 6E 6F 77 6E 5C 22 3A 31 2C 5C 22 61 63 63 74 79 70 65 5C 22 3A 31 2C 5C 22 75 73 65 72 5C 22 3A 5C 22 4B 61 69 20 43 68 69 70 5C 22 7D 22 7D 
TXT: 08.04.2018 22:11:58.00 |               Buffer | c{"command":"piccscan","uid":"a67e5cac","type":"MIFARE 1KB","known":1,"acctype":1,"user":"Kai Chip"}
HEX: 08.04.2018 22:11:58.00 |               Buffer | 81 63 7B 22 63 6F 6D 6D 61 6E 64 22 3A 22 70 69 63 63 73 63 61 6E 22 2C 22 75 69 64 22 3A 22 61 36 37 65 35 63 61 63 22 2C 22 74 79 70 65 22 3A 22 4D 49 46 41 52 45 20 31 4B 42 22 2C 22 6B 6E 6F 77 6E 22 3A 31 2C 22 61 63 63 74 79 70 65 22 3A 31 2C 22 75 73 65 72 22 3A 22 4B 61 69 20 43 68 69 70 22 7D 

Folgenden Code nutze ich in meinem Modul:


$this->SendDebug('JSON', $JSONString, 0);
$Data = json_decode($JSONString);
$Buffer = utf8_decode($Data->Buffer);
$this->SendDebug('Buffer', $Buffer, 0);

Das Zeichen vorne beim Buffer gehört doch da nicht hin, oder? Zumindest habe ich so kein vernünfigts JSON. :confused:

Wahrscheinlich ist es wieder total simpel, nur ich komme nicht drauf.

Grüße,
Kai

Dein Modul hängt nicht am Websocket Client, sondern am ClientSocket.
Du nutzt falsche GUIDs.
IPSNetwork/README.md at master · Nall-chan/IPSNetwork · GitHub
Michael

Oh Gott!
Ja, das Feld hatte den Focus glaube ich und mitm Scrollrad hab ich dann ausversehen die Instanz geändert, wie peinlich. :smiley:

Grüße,
Kai

Gesendet von iPhone mit Tapatalk

Hallo Michael,

die Meldung „Client send stream close !“ kommt doch vom IPS Websocket Client oder?
Kannst du mir sagen wieso der Websocket Client die Verbindung trennt?

Einen Ping sende ich jede Minute, allerdings ohne Inhalt. Muss der Ping einen bestimmten Inhalt haben, auf welchen der Websocket Server reagiert?

Grüße,
Kai

So noch mal…
Der Client sendet nur einen Disconnect (was diese Meldung verursacht) wenn IPS runtergefahren wird.
Die Konfig der Instanz bei bestehenden Verbindung übernommen wird.
Oder der Server den Client anweist die Verbindung zu trennen.
Bei letzterem steht dann aber im Debug auch ‚Server send stream close‘.

Machst du vielleicht etwas, was man nicht ‚darf‘? Wie ein ApplyChanges auf den Websocket Client?
Michael

Auf der Gegenseite kann ich leider kein Log einsehen.
Ich habe den Ping jetzt nochmal abgeschaltet, aber auch da wird es dann irgendwann passieren.

Ich würde das Debug Fenster jetzt einfach mal offen lassen und dir sobald das Problem wieder auftritt, ein Log zukommen.
Willst du das Log mit Ping oder ohne?

Grüße,
Kai

Schau Mal oben, da steht wann diese Meldung nur kommen kann.
SendDisconnect wird nur an diesen drei Stellen benutzt, somit kann es eigentlich nur an deinem Modul liegen (was macht ComnectParent in ApplyChanges?!?!)
Dem Client ist der Ping egal. Er antwortet auf Pings automatisch mit Pong.
Eigene Pings werden versendet, aber hier geht die Instanz in Fehler wenn der Pong ausbleibt.
Wenn dann IPS versucht diesen Fehlerstatus zu beheben (nach 60 Sekunden) wird natürlich auch ApplyChanges von IPS ausgeführt und somit eine alte tote Verbindung getrennt.
Michael

Nein, IPS fährt nicht runter und ich führe auch kein IPS_ApplyChanges aus. :confused:

Das System ist ein IPS 5.0 auf einem Pi, darauf laufen tut eigentlich nicht viel. Das System nutze ich nur zum entwickeln.
Soll ich einfach mal das Debug Fenster offen lassen und dir, wenn der Fehler auftritt, das Debug Log zukommen lassen?

Edit: Das frage ich mich auch, das gehört eig. nur ins Create.

Grüße,
Kai

Habe die Erklärung zum Ping des Client oben ergänzt.
Antwort der Server laut Debug?
Und wird die Instanz Fehlerhaft?
Michael

Die Instanz wird fehlerhaft, mit dem Fehler: „Fehler beim Handshake“
Antwort, kann ich dir jetzt im Moment nicht sagen, Konsole ist abgestürzt, somit auch das Debug Log weg.
Ich lasse das Debug Log jetzt offen und sobald der Fehler nochmal auftritt (dauert meistens einige Stunden), gebe ich dir da eine Rückmeldung.

Grüße,
Kai

Diese Meldung kann nur durch ApplyChanges erzeugt werden. Dann findest du auch Fehler im Logfile/Meldungen.

Diese Meldung muss aber nach den Client sende Close kommen

Michael

Ich lasse nun die Meldungen, Debug vom Websocket und Debug von meinem Modul offen, sobald ich da wieder Logs habe, poste ist alles.
Da muss dann ja was zu sehen sein.

Danke für deine Mühe. :slight_smile:

Grüße,
Kai

Moin Michael,

Ich wollte dir nur kurz eine Rückmeldung geben.
Bis jetzt läuft es immer noch.

Grüße,
Kai

Die Library hat zuwachs bekommen:



Webhook Reverse ProxyStellt interne Dateien und URLs als Webhook bereit
1. FunktionsumfangÜber Webhooks des IPS-WebServer sind folgende Funktionen realisiert:

[ul]
[li]Bereitstellung von Lokale Dateien.[/li][li]Bereitstellung von im lokalen Netzwerk per http/https/ftp erreichbaren Dateien.[/li][li]Unterstützt Basic & Digist Authentification für die Quellen.[/li][li]Überschreiben und erweitern von Get-Parametern ist möglich.[/li][/ul]

Normale Sachen bekomme ich angezeigt. Nur mit einem Kamerabild, also einer URL die ein Kamera Stream anzeigt, will mir eine Anzeige mit dem Reverse Proxy nicht gelingen. Hast Du einen Ahnung ob sich das irgendwie realisieren lässt einen Kamera Stream von extern aufzurufen über den Reverse Proxy?

Das wird nicht funktionieren.
Dauerhafte Datenverbindungen funktionieren nicht.
Können auch nie, da das PHP Script nach 30 Sekunden gekillt wird und weil es ein max. Limit (1MB) gibt welches ein PHP Script ausgeben darf.
Michael

Hi,

eine Frage wie kann ich vom DHCP Sniffer die Daten abrufen und aufbereiten.

Gruß

Welche Daten willst du bitte abrufen?
Michael

Die Daten die im Debug vom Sniffer stehen … sprich den Empfangsbuffer