UDP ClientSocket + Broadcast

Hallo,

ich habe eine blöde Frage:
Ich benötige für ein Modul eine UDP-Socketverbindung, mit Hilfe derer der ich über Port 7090 lesend und schreibend mit einem Gerät kommunizieren möchte.
Zusätzlich kann mir das Gerät Nachrichten per Broadcast schicken.

UDP Broadcast Messages
The broadcast messages are intended to avoid the permanent polling of the following described reports.

Also meine Frage: lauscht der UPD-Client immer auch auf Broadcast on dem angegebenen Empf.-Host

In der Doku zu dem UDP-Client steht zum Thema Broadcast nur

Aktiviere Broadcast: Bei Aktivierung schickt der UDP Socket an die Broadcast-Adresse des ausgewählten Empf.-Host Interfaces. Die eingetragene Sende-Host Adresse ist dabei unerheblich.

d.h. dieser Schalter bezieht sich auf das Senden, nicht das Empfangen.
Leider kann ich die Broadcasts desGerätes nicht soeinfach auslösen, das ich das so einfach experimentell herausfinden könnte.

Danke
demel

Das senden als Broadcast müsste einfach durch setzten des Flag im Paket vom Datenfluss aktivierbar sein.
https://www.symcon.de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/datenfluss/
Getestet habe ich es aber auch noch nie.
Michael

Danke für den Hinweis, aber es geht nicht um das Senden sonder um den Empfang.
Ich kommuniziere mit dem Gerät per UDP auf Port 7090 indem ich ein Kommando schicke und dann per UDP auf Port 7090 eine Antwort bekomme.
Zusätzlich melde das Gerät „per Broadcast“ Statusänderungen (um Polling zu vermeiden).

Ich verstehe leider von UDP-Broadcast zu wenig, um da sicher zu sein.
Habe aber in entsprechenden Beispielen auf der Socket eine Ootion SO_BROADCAST gesetzt werden muss, um Broadcast überhaupt entgegen zu nehmen.
Und da ist die Frage, wie der Symcon-UDP-Client hier funktioniert.

demel

Du willst auf der Instanz den Broadcast aktiv haben, sodass du die Broadcast Nachrichten empfangen kannst. Die Unicast Nachrichten sollten dabei ebenfalls empfangen werden (sofern die Ports gleich sind). Beim Senden willst du dann aber den erweiterten UDP Datenfluss nutzen (seit 6.0), welcher explizit erlaubt den standardmäßig aktiven Broadcast beim Senden zu überschreiben und als Unicast zu senden: Datenfluss — IP-Symcon :: Automatisierungssoftware

paresy

aha, das hört sich wie ein Plan an :grinning: Versuche ich mal.
Ist halt ein bisschen schwer, dem Gerät ein Broadcast zu entlocken …

danke
demel

Zweimal verdreht, war noch zu früh :sweat_smile:
Wenn es so geht wie @paresy schrieb, ist allerdings die Doku zum UDP Socket falsch, da dort bei aktiven Broadcast nur vom senden gesprochen wird.
Michael

ja, das war genau mein Problem. Ich habe das Modul jetzt mal so programmiert und warte darauf, das so ein Broadcast vorbei kommt.
Unicast funktioniert auf jeden Fall so, wie beschrieben.
Wenn es funktioniert, werde ich hier nochmal berichten …

demel

Hallo @paresy,

hatten gerade eine Debug Session bezüglich der KEBA P-30.

Leider bekomme ich auch keine Daten wenn ich einen UDP Broadcast Socket manuell anlege.
Auf dem Docker System habe ich mal einen tcpdump laufen lassen. Da kommen die Daten via UDP Broadcast auf 7091 und 7092 rein. Allerdings sehe ich keine Daten im Debug der Sockets.

Hast du eine Idee?

root@IPS:/# tcpdump udp and host XXX.XXX.XXX.XXX
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
21:55:02.540702 IP XXX.XXX.XXX.XXX.7090 > 255.255.255.255.7092: UDP, length 17
21:55:12.989704 IP XXX.XXX.XXX.XXX.7090 > 255.255.255.255.7092: UDP, length 17
21:55:23.649763 IP XXX.XXX.XXX.XXX.7090 > 255.255.255.255.7092: UDP, length 17
21:55:34.099836 IP XXX.XXX.XXX.XXX.7090 > 255.255.255.255.7092: UDP, length 17
21:55:44.548854 IP XXX.XXX.XXX.XXX.7090 > 255.255.255.255.7092: UDP, length 17
21:55:48.948808 IP XXX.XXX.XXX.XXX.7090 > 255.255.255.255.7091: UDP, length 26
21:55:48.948951 IP XXX.XXX.XXX.XXX.7090 > 255.255.255.255.7091: UDP, length 40
21:55:48.949198 IP XXX.XXX.XXX.XXX.7090 > 255.255.255.255.7091: UDP, length 61
21:55:48.949454 IP XXX.XXX.XXX.XXX.7090 > 255.255.255.255.7091: UDP, length 64

Ahhh. Ist das ein Bug des Docker Containers? Musste den Empf. Host auf „Alle“ stellen und nicht die IP des IP-Symcon Systems.

@demel42 hier die Debugs:

7092

TXT: 23.11.2021, 22:04:07 | RECEIVED [XXX.XXX.XXX.XXX:7090] | {"E pres": 17258}
HEX: 23.11.2021, 22:04:07 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 7B 22 45 20 70 72 65 73 22 3A 20 31 37 32 35 38 7D 
TXT: 23.11.2021, 22:04:18 | RECEIVED [XXX.XXX.XXX.XXX:7090] | {"E pres": 17358}
HEX: 23.11.2021, 22:04:18 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 7B 22 45 20 70 72 65 73 22 3A 20 31 37 33 35 38 7D 
TXT: 23.11.2021, 22:04:28 | RECEIVED [XXX.XXX.XXX.XXX:7090] | {"E pres": 17458}
HEX: 23.11.2021, 22:04:28 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 7B 22 45 20 70 72 65 73 22 3A 20 31 37 34 35 38 7D 
TXT: 23.11.2021, 22:04:38 | RECEIVED [XXX.XXX.XXX.XXX:7090] | {"E pres": 17558}
HEX: 23.11.2021, 22:04:38 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 7B 22 45 20 70 72 65 73 22 3A 20 31 37 35 35 38 7D 
TXT: 23.11.2021, 22:04:49 | RECEIVED [XXX.XXX.XXX.XXX:7090] | {"E pres": 17658}
HEX: 23.11.2021, 22:04:49 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 7B 22 45 20 70 72 65 73 22 3A 20 31 37 36 35 38 7D 
TXT: 23.11.2021, 22:04:59 | RECEIVED [XXX.XXX.XXX.XXX:7090] | {"E pres": 17758}
HEX: 23.11.2021, 22:04:59 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 7B 22 45 20 70 72 65 73 22 3A 20 31 37 37 35 38 7D 
TXT: 23.11.2021, 22:05:10 | RECEIVED [XXX.XXX.XXX.XXX:7090] | {"E pres": 17859}
HEX: 23.11.2021, 22:05:10 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 7B 22 45 20 70 72 65 73 22 3A 20 31 37 38 35 39 7D 
TXT: 23.11.2021, 22:05:20 | RECEIVED [XXX.XXX.XXX.XXX:7090] | {"E pres": 17959}
HEX: 23.11.2021, 22:05:20 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 7B 22 45 20 70 72 65 73 22 3A 20 31 37 39 35 39 7D 
TXT: 23.11.2021, 22:05:31 | RECEIVED [XXX.XXX.XXX.XXX:7090] | {"E pres": 18059}
HEX: 23.11.2021, 22:05:31 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 7B 22 45 20 70 72 65 73 22 3A 20 31 38 30 35 39 7D 
TXT: 23.11.2021, 22:05:41 | RECEIVED [XXX.XXX.XXX.XXX:7090] | {"E pres": 18159}
HEX: 23.11.2021, 22:05:41 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 7B 22 45 20 70 72 65 73 22 3A 20 31 38 31 35 39 7D 
TXT: 23.11.2021, 22:05:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | {"E pres": 18259}
HEX: 23.11.2021, 22:05:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 7B 22 45 20 70 72 65 73 22 3A 20 31 38 32 35 39 7D 
TXT: 23.11.2021, 22:06:02 | RECEIVED [XXX.XXX.XXX.XXX:7090] | {"E pres": 18359}
HEX: 23.11.2021, 22:06:02 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 7B 22 45 20 70 72 65 73 22 3A 20 31 38 33 35 39 7D 
TXT: 23.11.2021, 22:06:13 | RECEIVED [XXX.XXX.XXX.XXX:7090] | {"E pres": 18459}
HEX: 23.11.2021, 22:06:13 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 7B 22 45 20 70 72 65 73 22 3A 20 31 38 34 35 39 7D 
TXT: 23.11.2021, 22:06:23 | RECEIVED [XXX.XXX.XXX.XXX:7090] | {"E pres": 18559}
HEX: 23.11.2021, 22:06:23 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 7B 22 45 20 70 72 65 73 22 3A 20 31 38 35 35 39 7D 
TXT: 23.11.2021, 22:06:34 | RECEIVED [XXX.XXX.XXX.XXX:7090] | {"E pres": 18659}
HEX: 23.11.2021, 22:06:34 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 7B 22 45 20 70 72 65 73 22 3A 20 31 38 36 35 39 7D 
TXT: 23.11.2021, 22:06:44 | RECEIVED [XXX.XXX.XXX.XXX:7090] | {"E pres": 18759}
HEX: 23.11.2021, 22:06:44 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 7B 22 45 20 70 72 65 73 22 3A 20 31 38 37 35 39 7D 
TXT: 23.11.2021, 22:06:55 | RECEIVED [XXX.XXX.XXX.XXX:7090] | {"E pres": 18859}
HEX: 23.11.2021, 22:06:55 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 7B 22 45 20 70 72 65 73 22 3A 20 31 38 38 35 39 7D 
TXT: 23.11.2021, 22:07:05 | RECEIVED [XXX.XXX.XXX.XXX:7090] | {"E pres": 18959}
HEX: 23.11.2021, 22:07:05 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 7B 22 45 20 70 72 65 73 22 3A 20 31 38 39 35 39 7D 
TXT: 23.11.2021, 22:07:15 | RECEIVED [XXX.XXX.XXX.XXX:7090] | {"E pres": 19059}
HEX: 23.11.2021, 22:07:15 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 7B 22 45 20 70 72 65 73 22 3A 20 31 39 30 35 39 7D 
TXT: 23.11.2021, 22:07:26 | RECEIVED [XXX.XXX.XXX.XXX:7090] | {"E pres": 19159}
HEX: 23.11.2021, 22:07:26 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 7B 22 45 20 70 72 65 73 22 3A 20 31 39 31 35 39 7D 
TXT: 23.11.2021, 22:07:36 | RECEIVED [XXX.XXX.XXX.XXX:7090] | {"E pres": 19259}
HEX: 23.11.2021, 22:07:36 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 7B 22 45 20 70 72 65 73 22 3A 20 31 39 32 35 39 7D 
TXT: 23.11.2021, 22:07:47 | RECEIVED [XXX.XXX.XXX.XXX:7090] | {"E pres": 19359}
HEX: 23.11.2021, 22:07:47 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 7B 22 45 20 70 72 65 73 22 3A 20 31 39 33 35 39 7D 
TXT: 23.11.2021, 22:07:57 | RECEIVED [XXX.XXX.XXX.XXX:7090] | {"E pres": 19459}
HEX: 23.11.2021, 22:07:57 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 7B 22 45 20 70 72 65 73 22 3A 20 31 39 34 35 39 7D 
TXT: 23.11.2021, 22:08:08 | RECEIVED [XXX.XXX.XXX.XXX:7090] | {"E pres": 19559}
HEX: 23.11.2021, 22:08:08 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 7B 22 45 20 70 72 65 73 22 3A 20 31 39 35 35 39 7D 
TXT: 23.11.2021, 22:08:18 | RECEIVED [XXX.XXX.XXX.XXX:7090] | {"E pres": 19659}
HEX: 23.11.2021, 22:08:18 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 7B 22 45 20 70 72 65 73 22 3A 20 31 39 36 35 39 7D 

7091

TXT: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | #200240a8 MB Qrw : 49 : 50
HEX: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 23 32 30 30 32 34 30 61 38 20 4D 42 20 51 72 77 20 3A 20 34 39 20 3A 20 35 30 
TXT: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | #200240a8 MB req  1000 : 0x3e8 = 0x3 : 0
HEX: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 23 32 30 30 32 34 30 61 38 20 4D 42 20 72 65 71 20 20 31 30 30 30 20 3A 20 30 78 33 65 38 20 3D 20 30 78 33 20 3A 20 30 
TXT: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | #200240a8 MB input  12 : 00 bd 00 00 00 06 01 03 03 e8 00 04 
HEX: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 23 32 30 30 32 34 30 61 38 20 4D 42 20 69 6E 70 75 74 20 20 31 32 20 3A 20 30 30 20 62 64 20 30 30 20 30 30 20 30 30 20 30 36 20 30 31 20 30 33 20 30 33 20 65 38 20 30 30 20 30 34 20 
TXT: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | #200240a8 MB output    : 00 bd 00 00 00 07 01 03 04 00 00 00 03 
HEX: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 23 32 30 30 32 34 30 61 38 20 4D 42 20 6F 75 74 70 75 74 20 20 20 20 3A 20 30 30 20 62 64 20 30 30 20 30 30 20 30 30 20 30 37 20 30 31 20 30 33 20 30 34 20 30 30 20 30 30 20 30 30 20 30 33 20 
TXT: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | #200240a8 MB Qrw : 50 : 50
HEX: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 23 32 30 30 32 34 30 61 38 20 4D 42 20 51 72 77 20 3A 20 35 30 20 3A 20 35 30 
TXT: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | #200240a8 MB Qrw : 50 : 51
HEX: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 23 32 30 30 32 34 30 61 38 20 4D 42 20 51 72 77 20 3A 20 35 30 20 3A 20 35 31 
TXT: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | #200240a8 MB req  1004 : 0x3ec = 0x7 : 0
HEX: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 23 32 30 30 32 34 30 61 38 20 4D 42 20 72 65 71 20 20 31 30 30 34 20 3A 20 30 78 33 65 63 20 3D 20 30 78 37 20 3A 20 30 
TXT: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | #200240a8 MB input  12 : 00 be 00 00 00 06 01 03 03 ec 00 04 
HEX: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 23 32 30 30 32 34 30 61 38 20 4D 42 20 69 6E 70 75 74 20 20 31 32 20 3A 20 30 30 20 62 65 20 30 30 20 30 30 20 30 30 20 30 36 20 30 31 20 30 33 20 30 33 20 65 63 20 30 30 20 30 34 20 
TXT: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | #200240a8 MB output    : 00 be 00 00 00 07 01 03 04 00 00 00 07 
HEX: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 23 32 30 30 32 34 30 61 38 20 4D 42 20 6F 75 74 70 75 74 20 20 20 20 3A 20 30 30 20 62 65 20 30 30 20 30 30 20 30 30 20 30 37 20 30 31 20 30 33 20 30 34 20 30 30 20 30 30 20 30 30 20 30 37 20 
TXT: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | #200240a8 MB Qrw : 51 : 51
HEX: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 23 32 30 30 32 34 30 61 38 20 4D 42 20 51 72 77 20 3A 20 35 31 20 3A 20 35 31 
TXT: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | #200240a8 MB Qrw : 51 : 52
HEX: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 23 32 30 30 32 34 30 61 38 20 4D 42 20 51 72 77 20 3A 20 35 31 20 3A 20 35 32 
TXT: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | #200240a8 MB req  1006 : 0x3ee = 0x0 : 0
HEX: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 23 32 30 30 32 34 30 61 38 20 4D 42 20 72 65 71 20 20 31 30 30 36 20 3A 20 30 78 33 65 65 20 3D 20 30 78 30 20 3A 20 30 
TXT: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | #200240a8 MB input  12 : 00 bf 00 00 00 06 01 03 03 ee 00 04 
HEX: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 23 32 30 30 32 34 30 61 38 20 4D 42 20 69 6E 70 75 74 20 20 31 32 20 3A 20 30 30 20 62 66 20 30 30 20 30 30 20 30 30 20 30 36 20 30 31 20 30 33 20 30 33 20 65 65 20 30 30 20 30 34 20 
TXT: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | #200240a8 MB output    : 00 bf 00 00 00 07 01 03 04 00 00 00 00 
HEX: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 23 32 30 30 32 34 30 61 38 20 4D 42 20 6F 75 74 70 75 74 20 20 20 20 3A 20 30 30 20 62 66 20 30 30 20 30 30 20 30 30 20 30 37 20 30 31 20 30 33 20 30 34 20 30 30 20 30 30 20 30 30 20 30 30 20 
TXT: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | #200240a8 MB Qrw : 52 : 52
HEX: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 23 32 30 30 32 34 30 61 38 20 4D 42 20 51 72 77 20 3A 20 35 32 20 3A 20 35 32 
TXT: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | #200240a8 MB Qrw : 52 : 53
HEX: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 23 32 30 30 32 34 30 61 38 20 4D 42 20 51 72 77 20 3A 20 35 32 20 3A 20 35 33 
TXT: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | #200240a8 MB req  1008 : 0x3f0 = 0x3b2d : 0
HEX: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 23 32 30 30 32 34 30 61 38 20 4D 42 20 72 65 71 20 20 31 30 30 38 20 3A 20 30 78 33 66 30 20 3D 20 30 78 33 62 32 64 20 3A 20 30 
TXT: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | #200240a8 MB input  12 : 00 c0 00 00 00 06 01 03 03 f0 00 04 
HEX: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 23 32 30 30 32 34 30 61 38 20 4D 42 20 69 6E 70 75 74 20 20 31 32 20 3A 20 30 30 20 63 30 20 30 30 20 30 30 20 30 30 20 30 36 20 30 31 20 30 33 20 30 33 20 66 30 20 30 30 20 30 34 20 
TXT: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | #200240a8 MB output    : 00 c0 00 00 00 07 01 03 04 00 00 3b 2d 
HEX: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 23 32 30 30 32 34 30 61 38 20 4D 42 20 6F 75 74 70 75 74 20 20 20 20 3A 20 30 30 20 63 30 20 30 30 20 30 30 20 30 30 20 30 37 20 30 31 20 30 33 20 30 34 20 30 30 20 30 30 20 33 62 20 32 64 20 
TXT: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | #200240a8 MB Qrw : 53 : 53
HEX: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 23 32 30 30 32 34 30 61 38 20 4D 42 20 51 72 77 20 3A 20 35 33 20 3A 20 35 33 
TXT: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | #200240a8 MB Qrw : 53 : 54
HEX: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 23 32 30 30 32 34 30 61 38 20 4D 42 20 51 72 77 20 3A 20 35 33 20 3A 20 35 34 
TXT: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | #200240a8 MB req  1010 : 0x3f2 = 0x0 : 0
HEX: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 23 32 30 30 32 34 30 61 38 20 4D 42 20 72 65 71 20 20 31 30 31 30 20 3A 20 30 78 33 66 32 20 3D 20 30 78 30 20 3A 20 30 
TXT: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | #200240a8 MB input  12 : 00 c1 00 00 00 06 01 03 03 f2 00 04 
HEX: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 23 32 30 30 32 34 30 61 38 20 4D 42 20 69 6E 70 75 74 20 20 31 32 20 3A 20 30 30 20 63 31 20 30 30 20 30 30 20 30 30 20 30 36 20 30 31 20 30 33 20 30 33 20 66 32 20 30 30 20 30 34 20 
TXT: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | #200240a8 MB output    : 00 c1 00 00 00 07 01 03 04 00 00 00 00 
HEX: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 23 32 30 30 32 34 30 61 38 20 4D 42 20 6F 75 74 70 75 74 20 20 20 20 3A 20 30 30 20 63 31 20 30 30 20 30 30 20 30 30 20 30 37 20 30 31 20 30 33 20 30 34 20 30 30 20 30 30 20 30 30 20 30 30 20 
TXT: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | #200240a8 MB Qrw : 54 : 54
HEX: 23.11.2021, 22:08:52 | RECEIVED [XXX.XXX.XXX.XXX:7090] | 23 32 30 30 32 34 30 61 38 20 4D 42 20 51 72 77 20 3A 20 35 34 20 3A 20 35 34 

Der Docker Container ist hinter dem NAT, also kann es gut sein, dass du auf „Alle“ gehen musst, um den Broadcast aus dem anderen Netz ebenfalls empfangen zu können. Bin jetzt leider nicht der NAT Experte, um zu erklären, wie gut ein NAT Broadcast Pakete weiterleiten und ggf. vom Subnetz anpassen kann.

paresy

Hallo,

und weiter gehts … :slight_smile:

die Situation stellt sich inzwischen anders dar als ich ursprünglich angenommen habe, die Dokumentation war da „unvollständig“.
Es ist also so, das es eine Unicast-Kommunikation auf Port 7090 gibt (d.h. IPS schickt Kommandos an die Keba-Box und bekommt Antworten) und es gibt einen weiteren Port 7092, auf dem Keba Broadcasts schickt bei Status-Änderungen.
D.h. das Modul uss auf zwei Ports lauschen können. Wie gehe ich damit um, gibt es dafür eine Lösung?

Das zwei Problem ergibt sich, wenn es mehr als zwei Keba-Boxen vorhanden sind(mit unterschiedlicher IP), demzufolge auch zwei Instanzen im IPS. Ich nehme aber an, das man das lösen kann, indem beide Broadcast-UDP die Einstellung „Aktiviere Reuse-Adress“ gesetzt haben?

Ich nutze MACVLAN also kein NAT :slight_smile: der Docker Container hat eine eigene IP-Adresse. Also eine andere als der LXC mit Docker darunter.

Leider nein. Der UDP Socket ist auf einen Port beim Empfangen limitiert und der Datenfluss ist wiederum immer auf genau einen I/O Limitiert. Was empfängst du denn per Unicast? Würde nicht der Broadcast auf 7092 reichen und beim Senden kannst du im Datenfluss ja den Port frei wählen und somit auf 7090 setzen.

Korrekt.

paresy

naja, wenn ich auf Port 7090 eine Anfrage stelle, antwortet die Keba-Box auch auf 7090.
D.h. wenn ich den UDP-Client auf 7092 stelle, ist damit ja der BindPort 7092 und damit gehen die Antworten „ins Leere“ (hatte ich so ausprobiert).

In dem Modul selbst eine Socket auf 7090 aufzumachen ist vermutlich auch keine tragfähige Idee.

Wenn du Events nur über Broadcast bekommst und die direkten antworten immer per unicast, dann geht das mit PHP.
In PHP einen UDP Socket zum Empfang öffnen und die Anfrage auch mit PHP über einen per UDP Socket senden, dann mit einem timeout von z.b. 5 Sekunden auf die Antwort warten und Diese auswerten. Anschließend alle Sockets beenden.
Die Events kommen dann über den IO per Datenfluss rein.
Michael

ja, das ist vermutlich dann die einzige Möglichkeit. Ich hatte gehofft, das ich die komplette IO-Kommunikation sauber via UDP-Client abdecken kann, aber was nicht geht geht nicht. Die Antworten sind bisher auch immer unverzüglich gekommen, insofern sollte ein kurzer Timeout auch reichen.
@7weazel7: wird etwas dauern, weil ich das Modul wieder umstrukturieren muss, melde mich.