############################################## package main; use strict; use warnings; use IO::Socket::INET; sub pilight_Initialize($) { my ($hash) = @_; $hash->{SetFn} = "pilight_Set"; $hash->{DefFn} = "pilight_Define"; $hash->{AttrList} = "protocol housecode number remote_ip remote_port"; } ################################### sub pilight_Set($@) { my ($hash, @a) = @_; my $rc = undef; return "no set value specified" if(int(@a) < 2); return "on off" if($a[1] eq "?"); shift @a; my $command = shift @a; Log 3, "pilight command: $command"; if($command eq "on") { $rc = switch($hash, 1); } else { $rc = switch($hash, 0); } if ($rc) { $hash->{CHANGED}[0] = $command; $hash->{STATE} = $command; $hash->{READINGS}{state}{TIME} = TimeNow(); $hash->{READINGS}{state}{VAL} = $command; }; return undef; } sub pilight_Define($$) { my ($hash, $def) = @_; my @a = split("[ \t][ \t]*", $def); my $u = "wrong syntax: define "; return $u if(int(@a) < 4); $hash->{protocol} = $a[2]; $hash->{housecode} = $a[3]; $hash->{number} = $a[4]; return undef; } sub switch { my ($hash, $on) = @_; my $name = $hash->{NAME}; my $protocol = $hash->{protocol}; my $housecode = $hash->{housecode}; my $number = $hash->{number}; my $param = $on ? "on" : "off"; my $remote_ip = AttrVal($name, "remote_ip", '127.0.0.1'); my $remote_port = AttrVal($name, "remote_port", '5000'); my ($socket,$client_socket); # flush after every write $| = 1; $socket = new IO::Socket::INET ( PeerHost => $remote_ip, PeerPort => $remote_port, Proto => 'tcp', ); if (!$socket) { Log 3, "pilight: ERROR. Can't open socket to pilight-daemon: $!\n"; return undef}; my $data = '{ "message": "client sender" }'; $socket->send($data); $socket->recv($data,1024); $data =~ s/\n/ /g; if ( $data !~ /accept client/ ) { Log 3, "pilight: ERROR. No handshake with pilight-daemon. Received: >>>$data<<<\n"; return undef}; my $data = "{ \"message\": \"send\", \"code\": {\"protocol\":[ \"$protocol\" ],\"id\":\"$housecode\", \"unit\":\"$number\",\"$param\":\"1\"}}"; $socket->send($data); $socket->close(); return 1; } 1; =pod =begin html

pilight

=end html =cut