############################################## package main; use strict; use warnings; use IO::Socket::INET; use Switch; sub pilight_Initialize($) { my ($hash) = @_; $hash->{SetFn} = "pilight_Set"; $hash->{DefFn} = "pilight_Define"; $hash->{AttrList} = "protocol housecode number systemcode unitcode id remote_ip remote_port"; } # housecode == id und number == unitcode ################################### 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 = commit($hash, 1); } else { $rc = commit($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) < 2); $hash->{protocol} = $a[2]; #for backward compartibility $hash->{housecode} = (int(@a) > 2) ? $a[3] : ''; $hash->{unitcode} = (int(@a) > 2) ? $a[4] : ''; return undef; } sub commit { my ($hash, $on) = @_; my $name = $hash->{NAME}; my $protocol = $hash->{protocol}; my $housecode = AttrVal($name, "id", AttrVal($name, "housecode", $hash->{housecode})); my $unit = AttrVal($name, "unitcode", $hash->{unitcode}); my $systemcode = AttrVal($name, "systemcode", '0'); 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 $code = "{\"protocol\":[ \"$protocol\" ],"; switch( $protocol ) { case 'kaku_switch' { $code = $code . "\"id\":\"$housecode\", \"unit\":\"$unit\",\"$param\":\"1\""} case 'elro' { $code = $code . "\"systemcode\":\"$systemcode\", \"unitcode\":\"$unit\",\"$param\":\"1\""} } $code = $code . '}'; $data = "{ \"message\": \"send\", \"code\": $code}"; Log 3, "pilight data: $data"; $socket->send($data); $socket->close(); return 1; } 1; =pod =begin html

pilight

=end html =cut