From 2166d7b524e7e6f12775d9992f4dd503f21d8c78 Mon Sep 17 00:00:00 2001 From: andreas-fey <> Date: Fri, 17 Jan 2014 21:00:30 +0000 Subject: [PATCH] Added pilight module git-svn-id: https://svn.fhem.de/fhem/trunk@4676 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/98_pilight.pm | 151 ++++++++++++++++++++++++++++++++++++++++ fhem/HISTORY | 5 +- fhem/MAINTAINER.txt | 1 + 3 files changed, 156 insertions(+), 1 deletion(-) create mode 100644 fhem/FHEM/98_pilight.pm diff --git a/fhem/FHEM/98_pilight.pm b/fhem/FHEM/98_pilight.pm new file mode 100644 index 000000000..5d3c42b32 --- /dev/null +++ b/fhem/FHEM/98_pilight.pm @@ -0,0 +1,151 @@ +############################################## +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 diff --git a/fhem/HISTORY b/fhem/HISTORY index 227f8d5eb..49b4f667d 100644 --- a/fhem/HISTORY +++ b/fhem/HISTORY @@ -539,4 +539,7 @@ - Mon Jan 13 2014 (A. Schulz alias hexenmeister) - Added new module "SYSMON" - \ No newline at end of file + +- Fri Jan 16 2014 (andreas-fey) + - Added new module "pilight" + diff --git a/fhem/MAINTAINER.txt b/fhem/MAINTAINER.txt index 438c276ce..6eb635cfb 100644 --- a/fhem/MAINTAINER.txt +++ b/fhem/MAINTAINER.txt @@ -195,6 +195,7 @@ FHEM/98_dummy.pm rudolfkoenig http://forum.fhem.de Automatis FHEM/98_fheminfo.pm mfr69bs http://forum.fhem.de Sonstiges FHEM/98_notice.pm mfr69bs http://forum.fhem.de Sonstiges FHEM/98_openweathermap.pm betateilchen http://forum.fhem.de Unterstuetzende Dienste +FHEM/98_pilight.pm andreas-fey http://forum.fhem.de Unterstuetzende Dienste FHEM/98_rain.pm baumrasen http://forum.fhem.de Sonstiges FHEM/98_structure.pm rudolfkoenig http://forum.fhem.de Automatisierung FHEM/98_telnet.pm rudolfkoenig http://forum.fhem.de Automatisierung