udp multicast support in fhem

Begonnen von justme1968, 18 Februar 2022, 21:56:52

Vorheriges Thema - Nächstes Thema

erwin

Zitatich baue noch so etwas wie TcpServer_MCastSend ein...
Sehr gut,
falls es was zu testen gibt, bitte darum!
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

justme1968

#16
wenn du magst probier mal die angehängte version.

TcpServer_MCastSend($hash,$data) sendet an den port aus dem TcpServer_Open und die adresse aus TcpServer_MCastAdd.

optional kannst du auch noch nach $data aber auch adresse (und port) noch mit angeben.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

erwin

ja, die Version ist ok!
l.g. erwin
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

justme1968

#18
@erwin: ich habe analog zum TcpServer_MCastSend auch noch ein TcpServer_MCastRecv eingebaut das peer host und peer port auch für ipv6 ermittelt und zurück liefert.

@rudi: ich habe die aktuelle version des patch ganz oben (https://forum.fhem.de/index.php/topic,126290.msg1209591.html#msg1209591) angehängt und dort die doku komplettiert. da es bisher keine explizite doku für die TcpServerUtils könnte man den teil auch ins wiki stecken. oder fällt dir etwas besseres ein?

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

erwin

@Andre,

Die _MCastRecv($$$;$) funktioniert so nicht:
1) es fehlt:
my $name = $hash->{NAME};
  my $sock = $hash->{SERVERSOCKET};

2) es werden die rx-daten nicht returned!

Mir ist nicht klar, wozu du in der routine peerhost,peerport brauchst....
l.g. erwin
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

justme1968

danke. keine ahnung was da beim diff schief gegangen ist. hab es oben repariert.

es kommt auf das protokoll und die anwendung an ob man peer host und port braucht.

beim plex modul senden alle player ihre aktuelle abspielposition per multicast ins netz und nur am peer host kann man feststellen um welchen player es sich handelt da der absender nicht teil der eigentlichen nachricht ist, bei mdns kann man z.b. am absenden port der gegenseite feststellen ob es eine voll umfänglich implementierung ist (5353) oder eine abgespeckte (alle anderen ports) da im rfc festlegt ist das nur eine komplette implementierung 5353 auch als sende port verwenden darf.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

erwin

Ok, so funktionierts, ich war nur etwas verwirrt, weil ich (ohne nachzudenken...) erwartet hatte, dass die rx-daten returniert würden.
Danke für die Erklärung, das macht dann Sinn. Ich muss überlegen, ob ich den peerhost evtl. auch auswerten soll....
Danke Erwin
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

rudolfkoenig

Zitat@rudi: ich habe die aktuelle version des patch ganz oben (https://forum.fhem.de/index.php/topic,126290.msg1209591.html#msg1209591) angehängt und dort die doku komplettiert.
Ich habe den Patch mit leichten Aenderungen uebernommen:
- TcpServerUtils_Initialize entfernt
- die %opts Initialisierung angepasst, damit es fuer die bisherigen Protokolle garantiert nichts geaendert wird. Ich habe angenommen, dass fuer $multicast kein Unterschied zwischen undef und 0 gibt.
- Zeilen auf 80 Spalten umformatiert. Etwas irritierend ist die im Kommentar 4-mal gestellte gleiche Frage.

Zitatda es bisher keine explizite doku für die TcpServerUtils könnte man den teil auch ins wiki stecken. oder fällt dir etwas besseres ein?
Ich habe die obern erwaehnte Doku mit einem Hinweis auf dem Forumsartikel am Ende des Moduls zwischen =pod und =cut eingefuegt.
Wird entfernt, falls wir was Besseres gefunden haben.

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

rudolfkoenig

Bessere Logs gibts hier: https://forum.fhem.de/index.php/topic,126789
Kurz: mit dem perl, was debian wheezy ausliefert, kann man TcpServerUtils.pm nicht laden.

Wheezy ist aus 2013, letzter Update aus 2016.
Perl 5.16 (aus 2012) enthaelt etliche der benoetigten Konstanten aus Socket.pm nicht, 5.18 (aus 2013) hat sie aber, soweit ich es beurteilen kann.
Da ist die Diskussion wieder: welche perl-Version ist eine Voraussetzung fuer "core FHEM".

Das Problem kann man vertagen, wenn man die Multicast-Routinen in eine separate Datei auslagert.
Vorteile:
- fachkundiger Maintainer :)
- Multicast brauchen die meisten Benutzer nicht.
- das "wheezy" Problem ist geloest.

Meinungen?

Beta-User

Zitat von: rudolfkoenig am 18 März 2022, 15:35:32
Meinungen?
Vielleicht unpopulär, aber m.E. sollten wir es mit dem support für "uralt-OS-Installationen" nicht übertreiben. Wer unbedingt (!) FHEM up-to-date halten will _und_ ein Uralt-OS behalten, muss halt perlbrew&Co bemühen. (Was aber möglicherweise dann wieder nicht gegen uralt-SSL-Versionen usw. hilft...)

Schon alleine, um "update-Muffel" etwas zu animieren, mit einer gewissen (2-3-jährlichen...!) Regelmäßigkeit mal die erforderlichen Wartungsarbeiten anzugehen. Die nächste Meldung, die von solchen Kandidaten dann nämlich kommt, ist "SD-Karte ist abgekachelt..."

(Das bedeutet nicht, dass man nicht die Option nutzen könnte, die Routinen in libraries auszulagern)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

justme1968

wer auf der alten os version bleiben möchte soll auch auf der alten fhem version bleiben.

laut statistics betrifft es scheinbar sehr wenige anwender. und ich würde sagen es sind jetzt schon weniger als multicast nutzer. und bei letzterem kommen ganz sicher noch welche dazu.

ich würde die routinen eigentlich gerne zusammen lassen. auch wenn die überlappung klein ist funktionieren sie ja nur miteinander und verwenden die gleichen internals.

wie wäre es das Initialize wieder zu aktivieren, per eval zu prüfen ob multicast vorhanden ist und nur dann auch anzubieten? in verbindung mit einer möglichkeit das aus dem eigenen code auch abzufragen könnte man das dann später auch auf andere features ausdehnen. z.b. json und xml.

ssl wird ja auch per eval getestet und hat im prinzip das gleiche problem.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

CoolTux

Ich bin Andres Meinung. Ich finde die Leute sollten anfangen ihre Systeme zu erneuern. Mittlerweile bin ich auch so das ich die Leute "zwinge" auf wenigstens Perl 5.18 zu gehen. Besser wäre 5.28.

Wir sollten empfehlen die TcpServerUtils.pm vom update aus zu schließen wenn sie auf ihrem alten System bleiben wollen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Beta-User

Wenn, dann sollte man ein 6.1-legacy-deb mit unmittelbarem Stand vor dem update der TcpServerUtils.pm fertig machen, das dann _keine_ update.pm enthalten sollte ;D ...

Kern-Module nur teilweise zu aktualisieren, funktioniert erfahrungsgemäß eine Zeitlang, bis es knallt. Wer so eine Murmel meint fahren zu müssen, dem sollte man nicht versuchen zu vermitteln, dass das eine Dauer-Lösung wäre, die mit minimalst-invasiven Mitteln langfristig funktioniert.

Just my2ct.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

rudolfkoenig

Zitatwie wäre es das Initialize wieder zu aktivieren, per eval zu prüfen ob multicast vorhanden ist und nur dann auch anzubieten?
Ich wuerde mich freuen, wenn wir eine optionale Version hinkriegen wuerden.
Ich kann auch anbieten, das selbst zu machen, brauche aber dafuer einen Testfall.