Skip to content

Commit fe6932e

Browse files
committed
Merge with WebSocket
1 parent c347891 commit fe6932e

File tree

155 files changed

+17796
-154
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

155 files changed

+17796
-154
lines changed

ClientSplitter/README.md

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
# ClientSplitter (IPSNetwork)
2+
3+
Implementierung eines Splitters für ServerSocket und WebSocket-Server.
4+
5+
## Dokumentation
6+
7+
**Inhaltsverzeichnis**
8+
9+
1. [Funktionsumfang](#1-funktionsumfang)
10+
2. [Voraussetzungen](#2-voraussetzungen)
11+
3. [Installation](#3-installation)
12+
4. [Hinweise zur Verwendung](#4-hinweise-zur-verwendung)
13+
5. [Einrichten eines Client-Splitter in IPS](#5-einrichten-eines-client-splitter-in-ips)
14+
6. [PHP-Befehlsreferenz](#6-php-befehlsreferenz)
15+
7. [Parameter / Modul-Infos](#7-parameter--modul-infos)
16+
8. [Datenaustausch](#8-datenaustausch)
17+
9. [Anhang](#9-anhang)
18+
10. [Lizenz](#10-lizenz)
19+
20+
## 1. Funktionsumfang
21+
22+
Dieses Modul ermöglicht es anhand der IP-Adresse der Clients, die verschiedenen Datenströme von einem ServerSocket oder WebSocket-Server, sauber sortiert an andere Instanzen weiterleitet.
23+
Somit können die Daten pro Client z.B. in einer RegisterVariable weiter verarbeitet werden.
24+
Werden Daten an einen Client versendet, wird auch zielgerichtet nur an den einen Client geantwortet.
25+
Enthalten ist sowohl ein WebSocket-Client, als auch ein WebSocket-Server.
26+
27+
## 2. Voraussetzungen
28+
29+
- IPS ab Version 4.3
30+
31+
## 3. Installation
32+
33+
Über das Modul-Control folgende URL hinzufügen.
34+
`git://github.com/Nall-chan/IPSNetwork.git`
35+
36+
**Bei kommerzieller Nutzung (z.B. als Errichter oder Integrator) wenden Sie sich bitte an den Autor.**
37+
38+
## 4. Hinweise zur Verwendung
39+
40+
Der Client Splitter kann sowohl hinter einem IPS-ServerSocket als auch hinter den WebSocket-Server betrieben werden und trennt Datenströme nach den IP-Adressen der Clients auf.
41+
Der Client Splitter stellt ein Interface für die RegisterVariable sowie andere IPS-Instanzen welche ein serielles Protokoll nutzen bereit.
42+
![](imgs/daClientSplitter.png)
43+
![](imgs/phyCS.png)
44+
45+
46+
## 5. Einrichten eines Client-Splitter in IPS
47+
48+
Unter Instanz hinzufügen (Splitter) wählen und ein 'Client Splitter' hinzufügen (Haken bei Alle Module anzeigen!).
49+
Der Splitter erwartet in der Konfiguration eine IPv4 Adresse und leitet Daten nur dann an die untergeordneten Instanzen weiter, wenn die IP-Adresse übereinstimmt.
50+
Der trennt also die Datenströme von verschiedenen Clients, welche sich auf den ServerSocket oder den WebSocket verbinden, auf und ermöglicht es die Daten sauber pro Client zu verarbeiten.
51+
![](imgs/ClientSplitter.png)
52+
53+
54+
## 6. PHP-Befehlsreferenz
55+
56+
(Keine PHP Funktionen)
57+
58+
## 7. Parameter / Modul-Infos
59+
60+
GUID des Modules (z.B. wenn Instanz per PHP angelegt werden soll):
61+
62+
| Instanz | GUID |
63+
| :--------------: | :------------------------------------: |
64+
| Client Splitter | {7A107D38-75ED-47CB-83F9-F41228CAEEFA} |
65+
66+
Eigenschaften des 'Client Splitter' für Get/SetProperty-Befehle:
67+
68+
| Eigenschaft | Typ | Standardwert | Funktion |
69+
| :-----------: | :-----: | :----------: | :-----------------------: |
70+
| ClientIP | string | | Die IP-Adresse des Client |
71+
72+
73+
## 8. Datenaustausch
74+
75+
Kompatibel zum Interface Virtual-IO.
76+
77+
## 9. Anhang
78+
79+
**Changlog:**
80+
81+
Version 1.1:
82+
- In IPSNetwork-Library integriert
83+
84+
Version 1.0:
85+
- Erstes offizielles Release
86+
87+
## 10. Lizenz
88+
89+
IPS-Modul:
90+
[CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/)

ClientSplitter/form.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"elements":
3+
[
4+
{
5+
"name": "ClientIP",
6+
"type": "ValidationTextBox",
7+
"caption": "Client IP:"
8+
}
9+
]
10+
}
15.1 KB
Loading
53.2 KB
Loading

ClientSplitter/imgs/phyCS.png

11.9 KB
Loading

ClientSplitter/locale.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"translations": {
3+
"de": {
4+
"Client IP:": "Client IP:"
5+
}
6+
}
7+
}

ClientSplitter/module.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"id": "{7A107D38-75ED-47CB-83F9-F41228CAEEFA}",
3+
"name": "ClientSplitter",
4+
"type": 2,
5+
"vendor": "",
6+
"aliases": ["Client Splitter"],
7+
"parentRequirements": ["{C8792760-65CF-4C53-B5C7-A30FCC84FEFE}"],
8+
"childRequirements": ["{018EF6B5-AB94-40C6-AA53-46943E824ACF}"],
9+
"implemented": ["{7A1272A4-CBDB-46EF-BFC6-DCF4A53D2FC7}", "{79827379-F36E-4ADA-8A95-5F8D1DC92FA9}"],
10+
"prefix": "WSC"
11+
}

ClientSplitter/module.php

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
<?
2+
3+
require_once(__DIR__ . "/../libs/NetworkTraits.php");
4+
5+
/*
6+
* @addtogroup network
7+
* @{
8+
*
9+
* @package Network
10+
* @file module.php
11+
* @author Michael Tröger <micha@nall-chan.net>
12+
* @copyright 2017 Michael Tröger
13+
* @license https://creativecommons.org/licenses/by-nc-sa/4.0/ CC BY-NC-SA 4.0
14+
* @version 1.0
15+
*
16+
*/
17+
18+
/**
19+
* ClientSplitter Klasse implementiert einen Splitter auf Basis der IP-Adresse eines Client.
20+
* Erweitert IPSModule.
21+
*
22+
* @package Network
23+
* @author Michael Tröger <micha@nall-chan.net>
24+
* @copyright 2017 Michael Tröger
25+
* @license https://creativecommons.org/licenses/by-nc-sa/4.0/ CC BY-NC-SA 4.0
26+
* @version 1.0
27+
* @example <b>Ohne</b>
28+
* @property int $LastPort
29+
30+
*/
31+
class ClientSplitter extends IPSModule
32+
{
33+
34+
use BufferHelper;
35+
36+
/**
37+
* Interne Funktion des SDK.
38+
*
39+
* @access public
40+
*/
41+
public function Create()
42+
{
43+
parent::Create();
44+
$this->LastPort = 0;
45+
$this->RegisterPropertyString("ClientIP", "");
46+
}
47+
48+
/**
49+
* Interne Funktion des SDK.
50+
*
51+
* @access public
52+
*/
53+
public function ApplyChanges()
54+
{
55+
$this->SetReceiveDataFilter('.*"ClientIP":"' . $this->ReadPropertyString('ClientIP') . '".*');
56+
parent::ApplyChanges();
57+
}
58+
59+
################## DATAPOINTS CHILDS
60+
61+
/**
62+
* Interne Funktion des SDK. Nimmt Daten von Childs entgegen und sendet Diese weiter.
63+
*
64+
* @access public
65+
* @param string $JSONString
66+
* @result bool true wenn Daten gesendet werden konnten, sonst false.
67+
*/
68+
public function ForwardData($JSONString)
69+
{
70+
$Data = json_decode($JSONString);
71+
$this->SendDebug("Forward", $Data->Buffer, 0);
72+
$DataNew['DataID'] = "{C8792760-65CF-4C53-B5C7-A30FCC84FEFE}";
73+
$DataNew['Buffer'] = $Data->Buffer;
74+
$DataNew['ClientIP'] = $this->ReadPropertyString('ClientIP');
75+
$DataNew['ClientPort'] = (int) $this->LastPort;
76+
$JSONStringNew = json_encode($DataNew);
77+
$this->SendDataToParent($JSONStringNew);
78+
}
79+
80+
################## DATAPOINTS PARENT
81+
82+
/**
83+
* Empfängt Daten vom Parent.
84+
*
85+
* @access public
86+
* @param string $JSONString Das empfangene JSON-kodierte Objekt vom Parent.
87+
88+
*/
89+
public function ReceiveData($JSONString)
90+
{
91+
$Data = json_decode($JSONString);
92+
$this->SendDebug("Receive", $Data->Buffer, 0);
93+
$this->LastPort = (int) $Data->ClientPort;
94+
$DataNew['DataID'] = "{018EF6B5-AB94-40C6-AA53-46943E824ACF}";
95+
$DataNew['Buffer'] = $Data->Buffer;
96+
$JSONStringNew = json_encode($DataNew);
97+
$this->SendDataToChildren($JSONStringNew);
98+
}
99+
100+
}
101+
102+
/** @} */

DHCPSniffer/README.md

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
# DHCPSniffer (IPSNetwork)
2+
3+
Modul für IP-Symcon ab Version 4.3 ermöglicht es auf Events von Geräten zu reagieren, die eine Anfrage ins Netzwerk per DHCP oder dem Bootstrap Protocol stellen.
4+
So lässt sich zum Beispiel auf das Drücken eines Dashbuttons (siehe [Anhang](#8-anhang)) reagieren oder auf das Anmelden eines Geräts, wie ein Smartphone, in einem LAN.
5+
6+
## Dokumentation
7+
8+
**Inhaltsverzeichnis**
9+
10+
1. [Funktionsumfang](#1-funktionsumfang)
11+
2. [Voraussetzungen](#2-voraussetzungen)
12+
3. [Installation](#3-installation)
13+
4. [Einrichten der Instanz in IP-Symcon](#4-einrichten-der-instanz-in-ip-symcon)
14+
5. [PHP-Befehlsreferenz](#5-php-befehlsreferenz)
15+
6. [Parameter / Modul-Infos](#6-parameter--modul-infos)
16+
7. [Anhang](#7-anhang)
17+
8. [Lizenz](#8-lizenz)
18+
19+
## 1. Funktionsumfang
20+
21+
Viele Geräte besitzen keine feste IP Adresse, sondern erfragen diese im LAN an z.B. über das [Bootstrap Protocol](https://de.m.wikipedia.org/wiki/Bootstrap_Protocol "Bootstrap Protocol") oder über [DHCP](https://de.m.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol "DHCP") (Dynamic Host Configuration Protocol).
22+
Dabei senden diese Geräte eine Anfrage in das Netzwerk und warten dann auf die Zuweisung einer IP Adresse durch einen Server.
23+
Dieses Modul registriert solche Anfragen von Geräten auf Basis deren MAC-Adresse und kann dann ein Event in IP-Symcon auslösen.
24+
Auf diese Weise ist es z.B. möglich auf das Drücken eine Dashbuttons zu reagieren oder das Einbuchen eines Smartphones in ein WLAN.
25+
26+
## 2. Voraussetzungen
27+
28+
- IPS 4.3
29+
- Das Gerät, das ein Event in IP-Symcon auslösen soll, bezieht die IP Adresse dynamisch per DHCP oder Bootstrap (z.B. Dashbutton, Smartphone)
30+
31+
## 3. Installation
32+
33+
Die IP-Symcon (min Ver. 4.3) Konsole öffnen. Im Objektbaum unter Kerninstanzen die Instanz __*Modules*__ durch einen doppelten Mausklick öffnen.
34+
35+
![Modules](../imgs/Modules.png?raw=true "Modules")
36+
37+
In der _Modules_ Instanz rechts oben auf den Button __*Hinzufügen*__ drücken.
38+
39+
![Modules](../imgs/Hinzufuegen.png?raw=true "Hinzufügen")
40+
41+
In dem sich öffnenden Fenster folgende URL hinzufügen:
42+
43+
![Modules](../imgs/RepositoryURL.png?raw=true "URL Repository")
44+
45+
46+
`https://github.com/Nall-chan/IPSNetwork`
47+
48+
und mit _OK_ bestätigen.
49+
50+
Anschließend erscheint ein Eintrag für das Modul in der Liste der Instanz _Modules_
51+
52+
## 4. Einrichten der Instanzen in IP-Symcon
53+
54+
55+
In IP-Symcon wird von jedes Gerät das ein Event auslösen soll eine seperate Instanz angelegt. Der Mulicast Socket wird
56+
automatisch mit angelegt. Um die Instanz zu erstellen wechseln wir in die Kategorie, unter der wir die Instanz platzieren wollen
57+
und erstellen mit *CTRL+1* eine neue Instanz. Bei Gerät geben wir __*DHCP Sniffer*__ an. Bei Protocoll wählen wir das Protokoll aus, bei einem Dashbutton z.B. _DHCP & Bootp_.
58+
Unter _MAC Adress_ wird die MAC Adresse des Geräts eingetragen.
59+
60+
## 5. PHP-Befehlsreferenz
61+
62+
(Keine PHP Funktionen)
63+
64+
### Dashbutton
65+
66+
Keine gesonderte Funktion, die Variable wird geändert sobald eine Anfrage vom Gerät mit der passenden MAC gestellt wird.
67+
Auf die Variable kann dann ein Ereigniss gelegt werden, dass bei Variablenänderung eine beliebige Aktion in IP-Symcon ausführt.
68+
69+
70+
## 6. Parameter / Modul-Infos
71+
72+
GUID des Modules (z.B. wenn Instanz per PHP angelegt werden soll):
73+
74+
| Instanz | GUID |
75+
| :--------------: | :------------------------------------: |
76+
| DHCP Sniffer | {E93BCE5E-BA95-424E-8C3A-BF6AEE6CB976} |
77+
78+
Eigenschaften des 'DHCP Sniffer' für Get/SetProperty-Befehle:
79+
80+
81+
| Eigenschaft | Typ | Standardwert | Funktion |
82+
| :---------: | :-----: | :----------: | :-------------------------------------------------------------: |
83+
| Protocol | integer | | Auswahl des Protokolls |
84+
| Address | string | | MAC Adresse des Geräts das ein Event in IP-Symcon auslösen soll |
85+
| Action | integer | | Art der Aktion, die ausgeführt werden soll |
86+
87+
88+
89+
## 7. Anhang
90+
91+
### Nutzung eines Dashbutton in IPS
92+
93+
Zuerst muss der Dash Button mit der dazu gehörigen Amazon App von Amazon einrichtet werden.
94+
In der Amazon App auf das Menü drücken
95+
96+
![Setup1](imgs/setup1.png?raw=true "Setup1")
97+
98+
Mein Konto auswählen
99+
100+
![Setup2](imgs/setup2.png?raw=true "Setup2")
101+
102+
Bei Dash-Geräte auf _Ein neues Gerät einrichten_ drücken
103+
104+
![Setup3](imgs/setup3.png?raw=true "Setup3")
105+
106+
im Anschluss den Anweisungen im Bildschirm der App folgen bzw. der Anleitung von Amazon [Einrichtung des Dashbuttons](https://www.amazon.de/gp/help/customer/display.html?nodeId=201746340 "Einrichten Ihres Dash Button-Gerätes") folgen.
107+
108+
Wenn in einer Fritzbox eine Mitteilung eingerichtet ist bekommt man nun eine Email geschickt.
109+
110+
![FritzboxMessage](imgs/fritzboxmessage.png?raw=true "FritzboxMessage")
111+
112+
Die MAC Adresse notieren wir hier um diese dann später in IP-Symcon im Modul eintragen zu können. Man kann auch noch in der Fritzbox bzw. den verwendeten DHCP Server so Einrichten, das stets die gleiche IP Adresse an den Dash Button vergeben wird.
113+
Falls keine Mitteilung in Fritzbox oder einen anderen Router eingerichtet wurde, muss man im DHCP Server bzw. der Fritzbox nachschauen welches Gerät zuletzt eine neue IP Adresse zugewiesen bekommen hat. Dies ist dann der Dashbutton, hier ist die MAC Adresse zu notieren, diese brauchen wir für IP-Symcon.
114+
115+
Jedes mal wenn der Dash Button gedrückt wird nun zur Zeit eine Bestellung ausgeführt. Wir können dann in IP-Symcon nachvollziehen wann eine Bestellung gesendet wurde indem wir die Variable loggen. Wenn wir den Dash Button _nicht für eine Bestellung benutzten wollen_, sondern damit z.B. eine Lampe schalten wollen, müssen wir den _Zugang des Dash Buttons zum Internet_ _**sperren**_,
116+
damit der Dashbutton nicht bei jedem Druck einen Artikel bestellt.
117+
118+
Siehe auch
119+
[Internetnutzung in der Fritzbox einschränken](https://avm.de/service/fritzbox/fritzbox-7390/wissensdatenbank/publication/show/8_Internetnutzung-mit-Kindersicherung-einschraenken/ "Internet Nutzung einschränken").
120+
121+
122+
Dazu kann man den Zugang der MAC bzw. IP-Adresse zum Internet im Router _sperren_.
123+
124+
In einer Fritzbox wechseln wir hierzu auf
125+
126+
![FritzboxMenu](imgs/fritzmenu.png?raw=true "FritzboxMenu")
127+
128+
Dort wählen wir nun die passende IP Adresse aus und setzten diese auf _**Gesperrt**_
129+
130+
![FritzboxGesperrt1](imgs/fritzboxgesperrt1.png?raw=true "FritzboxGesperrt1")
131+
132+
![FritzboxGesperrt](imgs/fritzboxgesperrt.png?raw=true "FritzboxGesperrt")
133+
134+
Nun sollte bei einem Druck auf den Knopf die Leuchte erst ein paar Mal weiß und dann ein paar Mal rot leuchten, ist dies der Fall so sendet der Dash Button eine Anfrage in das LAN, eine Internet Verbindung wird aber keine aufgebaut und daher auch nichts bestellt.
135+
136+
Die notierte MAC-Adresse wird nun unter _MAC Adresse_ in der DHCPSniffer Instanz eingetragen.
137+
138+
### Changlog
139+
140+
Version 1.0:
141+
- Erstes offizielles Release
142+
143+
## 8. Lizenz
144+
145+
IPS-Modul:
146+
[CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/)

0 commit comments

Comments
 (0)