Einfacher UDP Befehl.

Begonnen von Gabel88, 11 August 2016, 22:46:47

Vorheriges Thema - Nächstes Thema

Gabel88

Moin Moin alle zusammen,
ich möchte momentan ein Videoplayer automatisieren.
Dabei geht es um einen https://www.brightsign.biz player. Kennt man eher aus dem Eventbereich.
Die Player reagieren auf ein UDP befahl. Z.b. ein Datagram mit "Start".
Nun habe ich mich noch nicht so tief mit Perl beschäftigt,
zum anderen wird es auch einfach zu lange für mein Projekt dauern.
Also will ich das ganze ohne eigenes Modul lösen sondern viel lieber mit ein paar Zeilen Perl.
Kann mir da jemand helfen?

Grüße Gabel
Pi3  FHEM
Pi3  KODI
Pi1  OpenWrt (im test)

marvin78

sub UDP_Msg($$)
{
my ($dest,$cmd)  = @_;
my $sock = IO::Socket::INET->new(
    Proto    => 'udp',
    PeerPort => 6666,
    PeerAddr => $dest
) or die "Could not create socket: $!\n";
$sock->send($cmd) or die "Send error: $!\n";
return "send $cmd";
}


als sub für die myUtils. Dann aufrufen per

UDP_Msg("HOST","MESSAGE");

dev0

Zitat von: marvin78 am 12 August 2016, 07:42:37

) or die "Could not create socket: $!\n";


"die" führt dazu, dass FHEM beendet wird. Keine gute Idee, mMn.

CoolTux

Und wie macht man es dann besser?


Grüße
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

dev0

Entweder $@ (falls gesetzt) auswerten oder die Rückgabe von $socket auswerten und dann return "geht nicht".

marvin78

Du hast recht. Ist auch nur als Anregung gedacht. Ein bisschen denken setze ich voraus und mit "ich will nicht Perl lernen aber FHEM soll mir alle Wünsche erfüllen" kann ich ohnehin nichts anfangen.

CoolTux

Zitat von: dev0 am 12 August 2016, 09:07:22
Entweder $@ (falls gesetzt) auswerten oder die Rückgabe von $socket auswerten und dann return "geht nicht".

Ich danke Dir.

Grüße
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

dev0

#7
Eigentlich wollte ich mich da jetzt gar nicht reindenken ;) Da ich mich jetzt aber schon eingemischt habe...
...würde ich es so versuchen (ungetestet):


sub UDP_Msg($$)
{
  my ($dest,$cmd)  = @_;
  eval "require IO::Socket::INET";
  if($@) {
    Log 1, $@;
    return "Can't load IO::Socket::INET"
  }

  my $sock = IO::Socket::INET->new(
    Proto    => 'udp',
    PeerPort => 6666,
    PeerAddr => $dest
  );
 
  if(!$sock) {
    return "something went wrong"
  }

  $sock->send($cmd);
  $sock->close();

  return "send $cmd"
}



Edit: $sock->close(); ergänzt

rudolfkoenig

Aus gegebener Anlass: $sock->close() fehlt :)

dev0

Ergänzt und jetzt sogar getestet:


{UDP_Msg("10.13.1.53","Hello")}
send Hello



fhem@odroid1:/opt/fhem$ nc -l 6666 -u
Hello


;)