FHEM Forum

FHEM - Hausautomations-Systeme => Sonstige Systeme => Thema gestartet von: Gabel88 am 11 August 2016, 22:46:47

Titel: Einfacher UDP Befehl.
Beitrag von: Gabel88 am 11 August 2016, 22:46:47
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
Titel: Antw:Einfacher UDP Befehl.
Beitrag von: marvin78 am 12 August 2016, 07:42:37
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");
Titel: Antw:Einfacher UDP Befehl.
Beitrag von: dev0 am 12 August 2016, 08:51:46
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.
Titel: Antw:Einfacher UDP Befehl.
Beitrag von: CoolTux am 12 August 2016, 08:55:51
Und wie macht man es dann besser?


Grüße
Titel: Antw:Einfacher UDP Befehl.
Beitrag 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".
Titel: Antw:Einfacher UDP Befehl.
Beitrag von: marvin78 am 12 August 2016, 10:10:25
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.
Titel: Antw:Einfacher UDP Befehl.
Beitrag von: CoolTux am 12 August 2016, 10:14:26
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
Titel: Antw:Einfacher UDP Befehl.
Beitrag von: dev0 am 12 August 2016, 11:19:21
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
Titel: Antw:Einfacher UDP Befehl.
Beitrag von: rudolfkoenig am 12 August 2016, 12:54:37
Aus gegebener Anlass: $sock->close() fehlt :)
Titel: Antw:Einfacher UDP Befehl.
Beitrag von: dev0 am 12 August 2016, 13:40:12
Ergänzt und jetzt sogar getestet:


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



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


;)