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

IPSNetwork (ex IPSWebSockets)

Diese Library enthält verschiedene Module für Netzwerkanwendungen.

Inhalt

  • [li]DHCP-Sniffer (Dokumentation)[/li]Überwacht ob ein bestimmtest Netzwerkgerät einen DHCP-Request sendet. (z.B. Handy betritt WLAN, Dashbutton wurde betätigt usw.)
    [li]WebSocket-Client (Dokumentation)[/li]Implementierung eines Clients mit Websocket Protokoll in IPS.
    [li]WebSocket-Server (Dokumentation)[/li]Implementierung eines Server mit Websocket Protokoll in IPS.
    [li]Client-Splitter (Dokumentation)[/li]Implementierung eines Splitters für ServerSocket und WebSocket-Server.
    [li]WebSocket-Server Demo-Modul (Dokumentation)[/li]Demo für den Datenaustausch mit dem WebSocket-Server.


Voraussetzungen

[ul]
[li]IPS ab Version 4.3[/li][/ul]

Installation

Über das Modul-Control folgende URL hinzufügen.

git://github.com/Nall-chan/IPSNetwork.git


Bei kommerzieller Nutzung (z.B. als Errichter oder Integrator) wenden Sie sich bitte an den Autor.

Weitere in diesem Repository enthaltene Librarys:

PHP-TLS
GitHub - rnaga/PHP-TLS: TLS library written in PHP
Copyright © 2016 Ryohei Nagatsuka

Pure PHP Elliptic Curve Cryptography Library

GitHub - phpecc/phpecc: Pure PHP Elliptic Curve Cryptography Library

Assert

GitHub - beberlei/assert: Thin assertion library for use in libraries and business-model
Copyright © 2011-2013, Benjamin Eberlei, All rights reserved.

AES GCM (Galois Counter Mode) PHP Implementation

GitHub - Spomky-Labs/php-aes-gcm: AES Galois Counter Mode encryption library for PHP
Copyright © 2016 Spomky-Labs

NEU


Webhook Reverse ProxyStellt interne Dateien und URLs als Webhook bereit
DokumentationInhaltsverzeichnis

[ol]
[li]Funktionsumfang[/li][li]Voraussetzungen[/li][li]Software-Installation[/li][li]Einrichten der Instanz in IP-Symcon[/li][/ol]
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]
2. Voraussetzungen

[ul]
[li]IPS 4.3 oder höher[/li][/ul]
3. Software-InstallationDieses Modul ist Bestandteil der IPSNetwork-Library.
IPS 5.0:
Bei privater Nutzung: Über das ‚Module-Control‘ in IPS folgende URL hinzufügen.
git://github.com/Nall-chan/IPSNetwork.git
Bei kommerzieller Nutzung (z.B. als Errichter oder Integrator) wenden Sie sich bitte an den Autor.
4. Einrichten der Instanz in IP-SymconDas Modul ist im Dialog ‚Instanz hinzufügen‘ unter den Kern-Instanzen zu finden.

Folgende Parameter sind in der Instanz zu konfigurieren:

Konfigurationsseite:
Werte pro Spalte:
|
|
|Hook|string|/hook/|URI des Webhook. Muss mit /hook/ anfangen.|
[TR=„bgcolor: #F6F8FA“]
[TD=„align: center“]Url[/TD]
[TD=„align: center“]string[/TD]
[TD=„align: center“]http://[/TD]
[TD=„align: center“]URL zur Quelle. Kann auch https oder eine lokale Datei sein.[/TD]
[/TR]|forceDL|bool|false|Zwingt Browser die gelieferten Daten als Datei zu speichern und nicht darzustellen.|
[TR=„bgcolor: #F6F8FA“]
[TD=„align: center“]allowGet[/TD]
[TD=„align: center“]bool[/TD]
[TD=„align: center“]true[/TD]
[TD=„align: center“]Erlaubt das Erweitern und Überscheiben von Parametern durch den Hook.[/TD]
[/TR]|weakSSL|bool|false|Deaktiviert die SSL Prüfung. Zum Beispiel für selbst-signierte Zertifikate.|

Hallo Michael,

nochmal vielen Dank für das super Modul.
Es läuft einfach perfekt. :slight_smile:
Den Server habe ich zwar noch nicht getestet, mir fehlt dafür noch der Anwendungsfall, aber der Client funktioniert super!

Danke. :slight_smile:

Grüße,
Kai

Hi Nall-Chan,

wollte deinen Websocket Client nutzen um mit volumio zu kommunizieren, das nutzt wohl den socket.io als Websocket Layer.
Leider funktioniert das nicht, ich bekomme keine Verbindung. Firewall u.s.w. kann ich ausschliessen.

Hättest du eine Idee?

Hier die Seiten mit den Infos zum Webseervice API.
https://volumio.github.io/docs/API/WebSocket_APIs.html

Die http Api ist mir leider nicht möächtig genug, ausserdem hat die ein Probleme mit der LAutstärkereglung!

Danke
spooniester

Was bedeutet keine Verbindung ?
Fehlermeldung ?
Meldungen im Reiter Debug vom WebSocketClient?
Verbindet sich denn der übergeordnete ClientSocket?

Screenshots ?

Hier Testing Websocket with Chrome Simple WebSocket Client : Help - Volumio steht zwar dass Port 80 auch gehen soll (komisch da steht kein Pfad),
aber hier WebSocket : Home Automation : Help - Volumio ist von Port 3000 die Rede.

Also probier mal ws://IP:3000
Michael

Hi Nall-Chan,

hätte ich auch drauf kommen können das die Infos zu wenig sind :banghead:

Also, ich benutze die IP und den Port, drücke auf „verbinden“ und es kommt die Statusmeldung „Fehler im Handshake“ und ein PHP Error:

Notice, no answer in >pad zum modul> on line 519

egal welches Protokoll ich benutze…

Schau Mal was im Reiter Debug steht.
Dort sollte irgendwas erscheinen (auch die Antwort des Servers).
Michael

GET / HTTP/1.1<CR><LF>Host: 192.168.199.123<CR><LF>Upgrade: websocket<CR><LF>Connection: Upgrade<CR><LF>Sec-WebSocket-Key: NbVoJ+skTx6MLn4O<CR><LF>Sec-WebSocket-Version: 13<CR><LF><CR><LF>

Deine Software Antwortet nicht.
Aber der Clientsocket ist/wird verbunden?

Ideen habe ich gerade keine.
Hast du auch Port 3000 ausprobiert?
Sonst schau mal bei denen im Forum nach, vielleicht gibt es dort mehr Informationen.

Michael

Hi,

ok, danke für deine Hilfe…Ich frag mal beim „Hersteller“ nach…

Gruß
spooniester

Habe eben versucht deren VMWare Image zu starten.
Hat nicht funktioniert :frowning:
Sonst hätte ich es mal versucht.
Michael

Falls du noch einen raspberry rumliegen hast, da gibt es ein fertiges Image für, geht auch recht schnell…

Ne eben nicht, darum ja das VMware Image. Das müsste ich aber auch erst konvertieren :frowning:
Michael

Hast du das getestet?

Wenn du per DHCP IPs verteilst, dann haben die üblicherweise eine Gültigkeitsdauer, bei der Fritzbox minimal ein Tag.

Fragt das Gerät innerhalb des einen Tages neu an, wenn es neu ins WLAN kommt oder nutzt es die IP, die es hat?

Und TRUE hilft vermutlich auch nicht, da der Wert ja nicht mehr FALSE wird. Es gibt nur Updates, wenn das Gerät seine IP erneuern möchte.

Ja habe ich, meins macht es :slight_smile:
Die Gültigkeit ist eigentlich nur für Geräte wichtig welche nie das Netz verlassen.
Nach der Hälfte der Zeit müssen sie ihren Lease verlängern. Wenn der DHCP nicht Antwort haben sie also noch Schonfrist bis Ende der Gültigkeit.

Wenn aber ein Gerät eine Verbindung zu einen Netzwerk herstellt, muss es zumindest den Request senden auch wenn es dabei seien alte IP wieder anfordert.

Ich Werte auch nicht aus, was der Client anfordert, nur das er es macht.
Die Verlängerung des lease sollte auch zielgerichtet an die IP des DHCP-SERVER gehen und nicht zu einem neuen Event führen. Aber das kann je nach Gerät/OS durchaus auch anders sein.

Die Variable kann verschiedene Funktionen darstellen, Event (nur Refresh mit true), Impuls (nur kurze true Flanke) oder Toggle.
Das natürlich nur das einbuchen und nicht das ausbuchen aus einem WLAN erkannt wird, liegt in der Natur der Sache.
Und für DashButtons ist es auch praktisch.
Michael

Ok, dann deckt sich das mit meinem Verständnis.

Und bei Mobilgeräten werde ich den Trigger nutzen, um schneller die Anwesenheit zu erkennen. Aktuell ping ich alle 60 Sekunden, der DHCP Request Trigger würde die „sofortige“ Anwesenheitserkennung ermöglichen.

könntest du bitte irgendwas einbauen, dass der Websocket Client nicht immer ein Error ausspuckt, wenn der Server offline ist? Weil es gibt auch Geräte die schalten den Websocket Client aus. Kann gerne eine Extra Checkbox sein. :smiley:

Übrigens danke für das tolle Modul.

Swen

Er verhält sich wie der normale ClientSocket in IPS.
Du musst es dann selber steuern.
Das geht z.B. über das EventControl in IPS und einem Script welches mit IPS_SetProperty(ID des Wsc, ‚Open‘,false);
die Instanz schließt.

Michael

Also kann ich den Fehler nicht unterdrücken, weil alles soweit tadellos funktioniert.
Bekomme bloß die Meldung das der Websocket Server offline ist.(Verbindung verloren)

Ist er wieder on geht auch sofort wieder alles.
Leider stelle ich aber erst fest, dass der Websocket Server aus ist wenn er aus ist und könnte den Websocket Client dann mit

IPS_SetProperty(ID des Wsc, ‚Open‘,false);

auschalten. Er würde mir dann aber trozdem noch eine Fehlermeldung ausspucken.

Deshalb frage ich.

Swen

???
Wenn die Verbindung verloren geht, muss der Websocket-Client in Fehlerzustand gehen. Und darauf kann man im EventControl und auch in PHP-Modulen entsprechen horchen und reagieren.

Auch richtig, wenn man inaktive oder fehlerhafte Instanz anspricht z.b. per Datenaustausch (Modul, RegVar) oder Script (WSC_SendText) dann gibt es einen Fehler. Wie auch bei anderen IPS IO/Splitter Instanzen.

Michael

Ok danke, hab das jetzt anders geregelt. Ich Ping vorher den Server an ob er erreichbar ist.

Swen