Ahhhh I managed to find the problem thanks to somebody else finding it late last year.
With the particular verison of Perl on the Pi (I think I said 5.28) there is a bug for the IO::Socket::Multicast module: https://rt.cpan.org/Public/Bug/Display.html?id=130581 To fix it I went in to where the Multicast.pm file lives and implemented the suggested changes. I know the correct thing to do was probably to make a local copy of the file and point to it, or switch to a younger version of Perl, but it's a personal project on a Pi that I'm likely to wipe in a few months. Script(s) work now! Thanks for the help. James On Sun, Apr 5, 2020 at 4:03 PM Shlomi Fish <shlo...@shlomifish.org> wrote: > Hi James, > > On Sun, 5 Apr 2020 14:58:26 +0100 > James Kerwin <jkerwin2...@gmail.com> wrote: > > > Hi All, > > > > I'm trying to connect to a smart bulb on my home WIFI using mcast_send > > in IO::Socket::Multicast. > > > > It works on my main Linux Mint laptop. The same script does not work on > my > > Raspberry PI. > > > > Despite the script running as expected on one laptop I've checked that > this > > is all set up correctly: > > > > sub new { > > #my $class = shift; > > my $data = { > > address => '239.255.255.250', > > port => 1982, > > timeout => 3, > > devices => [], > > }; > > return bless( $data ); > > } > > > > It is a good idea to use bless with an explicit package name or just use > https://metacpan.org/pod/Moo or Moose or similar. > > > my $socket = IO::Socket::Multicast->new( > > PeerAddr => $self->{address}, > > PeerPort => $self->{port}, > > Proto => "udp", > > ReuseAddr => 1, > > ) or croak $!; > > > > But it's this part that fails on the PI: > > > > A few things to check: > > 1. Which OS/distro/version and perl version on both machines? > > 2. Does it happen with the latest stable perl installed from source? > > 3. Did you try using https://en.wikipedia.org/wiki/GDB and/or perl -d: > https://perl-begin.org/topics/debugging/ ? > > 4. Is there anything in the rpi's firewall config? > > For more advice, see > https://github.com/shlomif/writing-the-perfect-question . > > > $socket->mcast_send( $query, "$self->{address}:$self->{port}" ) or croak > $!; > > > > I've checked that $socket, $query and $self->{address}:$self->{port} > > contain the info I expect and they do. > > > > On my Linux laptop I can use tcpdump and see the communication between > > laptop and bulb. Doing this on the Pi shows no communication. I've > replaced > > the "croak" with "die "zzzzzzzzzzzz" so I can be certain it's failing at > > that point. I get the output "zzzzzzzzzzzz" (makes it easier to spot). > > > > I've just used a command recently that allows me to access the specific > ip > > and port of the lamp and it indicates the connection is successful. I'm > out > > of ideas and if anyone can advise I'd appreciate it. > > > > Slightly (very) out of my depth when it comes to ports and IPs etc. > > > > Thanks, > > James > > > > -- > > Shlomi Fish https://www.shlomifish.org/ > https://github.com/shlomif/validate-your-html - Validate Your HTML >