2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-10 09:16:53 +00:00

10_pilight_ctrl.pm: added disconnect

git-svn-id: https://svn.fhem.de/fhem/trunk@8784 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
risiko79 2015-06-20 15:20:56 +00:00
parent df6a6f84df
commit 1f59b0262f
2 changed files with 59 additions and 7 deletions

View File

@ -1,5 +1,6 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it. # Do not insert empty lines here, update check depends on it.
- feature: 10_pilight_ctrl.pm: added disconnect
- feature: 32_yowsup.pm: added home attribute - feature: 32_yowsup.pm: added home attribute
- feature: readingsGroup: allow commands for attributes - feature: readingsGroup: allow commands for attributes
allow calculation with values in the rows and columns allow calculation with values in the rows and columns

View File

@ -1,5 +1,5 @@
############################################## ##############################################
# $Id: 10_pilight_ctrl.pm 1.05 2015-06-07 Risiko $ # $Id: 10_pilight_ctrl.pm 1.06 2015-06-20 Risiko $
# #
# Usage # Usage
# #
@ -29,6 +29,7 @@
# V 1.03 2015-05-20 - NEW: handle screen messages (up,down) # V 1.03 2015-05-20 - NEW: handle screen messages (up,down)
# V 1.04 2015-05-30 - FIX: StateFn # V 1.04 2015-05-30 - FIX: StateFn
# V 1.05 2015-06-07 - FIX: Reset # V 1.05 2015-06-07 - FIX: Reset
# V 1.06 2015-06-20 - NEW: set <ctrl> disconnect, checking reading state
############################################## ##############################################
package main; package main;
@ -45,8 +46,9 @@ sub pilight_ctrl_Write($@);
sub pilight_ctrl_SimpleWrite(@); sub pilight_ctrl_SimpleWrite(@);
sub pilight_ctrl_ClientAccepted(@); sub pilight_ctrl_ClientAccepted(@);
sub pilight_ctrl_Send($); sub pilight_ctrl_Send($);
sub pilight_ctrl_Reset($);
my %sets = ( "reset:noArg" => ""); my %sets = ( "reset:noArg" => "", "disconnect:noArg" => "");
my %matchList = ( "1:pilight_switch" => "^PISWITCH", my %matchList = ( "1:pilight_switch" => "^PISWITCH",
"2:pilight_dimmer" => "^PISWITCH|^PIDIMMER|^PISCREEN", "2:pilight_dimmer" => "^PISWITCH|^PIDIMMER|^PISCREEN",
"3:pilight_temp" => "^PITEMP") ; "3:pilight_temp" => "^PITEMP") ;
@ -129,15 +131,37 @@ sub pilight_ctrl_State($$$$)
return undef; return undef;
} }
sub pilight_ctrl_CheckReadingState($)
{
my ($hash) = @_;
my $me = $hash->{NAME};
my $state = ReadingsVal($me,"state",undef);
if (defined($state) && $state ne "opened" && $state ne "disconnected") {
Log3 $me, 3, "$me(CheckReadingState): Unknown error: unnormal value for reading state";
setReadingsVal($hash, "state", undef, TimeNow());
$hash->{STATE} = $hash->{helper}{CON};
$hash->{STATE} = "opened" if ($hash->{helper}{CON} eq "connected");
}
return undef;
}
sub pilight_ctrl_Close($) sub pilight_ctrl_Close($)
{ {
my $hash = shift; my $hash = shift;
my $me = $hash->{NAME}; my $me = $hash->{NAME};
BlockingKill($hash->{helper}{RUNNING_PID}) if(defined($hash->{helper}{RUNNING_PID})); if (exists($hash->{helper}{RUNNING_PID})) {
Log3 $me, 5, "$me(Close): call BlockingKill";
BlockingKill($hash->{helper}{RUNNING_PID});
delete($hash->{helper}{RUNNING_PID});
}
RemoveInternalTimer($hash); RemoveInternalTimer($hash);
DevIo_CloseDev($hash); Log3 $me, 5, "$me(Close): close DevIo";
DevIo_CloseDev($hash);
$hash->{STATE} = "closed";
$hash->{helper}{CON} = "closed";
} }
##################################### #####################################
@ -179,10 +203,20 @@ sub pilight_ctrl_TryConnect($)
return $ret; return $ret;
} }
#####################################
sub pilight_ctrl_Reset($)
{
my ($hash) = @_;
pilight_ctrl_Close($hash);
return pilight_ctrl_TryConnect($hash);
}
##################################### #####################################
sub pilight_ctrl_Set($@) sub pilight_ctrl_Set($@)
{ {
my ($hash, @a) = @_; my ($hash, @a) = @_;
pilight_ctrl_CheckReadingState($hash);
return "set $hash->{NAME} needs at least one parameter" if(@a < 2); return "set $hash->{NAME} needs at least one parameter" if(@a < 2);
@ -193,9 +227,15 @@ sub pilight_ctrl_Set($@)
if ($cmd eq "reset") if ($cmd eq "reset")
{ {
return pilight_ctrl_Reset($hash);
}
if ($cmd eq "disconnect") {
pilight_ctrl_Close($hash); pilight_ctrl_Close($hash);
return pilight_ctrl_TryConnect($hash); return undef;
} }
pilight_ctrl_CheckReadingState($hash);
return "Unknown argument $cmd, choose one of ". join(" ", sort keys %sets); return "Unknown argument $cmd, choose one of ". join(" ", sort keys %sets);
} }
@ -206,6 +246,8 @@ sub pilight_ctrl_Check($)
my $hash = shift; my $hash = shift;
my $me = $hash->{NAME}; my $me = $hash->{NAME};
pilight_ctrl_CheckReadingState($hash);
RemoveInternalTimer($hash); RemoveInternalTimer($hash);
$hash->{helper}{CHECK} = 0 if (!isdigit($hash->{helper}{CHECK})); $hash->{helper}{CHECK} = 0 if (!isdigit($hash->{helper}{CHECK}));
@ -295,6 +337,12 @@ sub pilight_ctrl_Write($@)
my ($hash,$rmsg) = @_; my ($hash,$rmsg) = @_;
my $me = $hash->{NAME}; my $me = $hash->{NAME};
pilight_ctrl_CheckReadingState($hash);
if ($hash->{helper}{CON} eq "closed") {
return;
}
if ($hash->{helper}{CON} ne "connected") { if ($hash->{helper}{CON} ne "connected") {
Log3 $me, 2, "$me(Write): ERROR: no connection to pilight-daemon $hash->{DeviceName}"; Log3 $me, 2, "$me(Write): ERROR: no connection to pilight-daemon $hash->{DeviceName}";
return; return;
@ -358,7 +406,9 @@ sub pilight_ctrl_Write($@)
# we do not update the readings - we will do this at the response message # we do not update the readings - we will do this at the response message
push @{$hash->{helper}->{sendQueue}}, $msg; push @{$hash->{helper}->{sendQueue}}, $msg;
pilight_ctrl_SendNonBlocking($hash); pilight_ctrl_SendNonBlocking($hash);
pilight_ctrl_CheckReadingState($hash);
} }
##################################### #####################################
@ -507,6 +557,7 @@ sub pilight_ctrl_SendDone($)
my $hash = $defs{$me}; my $hash = $defs{$me};
Log3 $me, 4, "$me(SendDone): message successfully send" if ($ok); Log3 $me, 4, "$me(SendDone): message successfully send" if ($ok);
Log3 $me, 2, "$me(SendDone): sending message failed" if (!$ok);
delete($hash->{helper}{RUNNING_PID}); delete($hash->{helper}{RUNNING_PID});
} }