Skip to content
This repository was archived by the owner on Aug 29, 2023. It is now read-only.

Commit 7d41bea

Browse files
committed
Implementation of attach and detach in 20_FRM_RCOUT
1 parent da1e377 commit 7d41bea

File tree

2 files changed

+34
-11
lines changed

2 files changed

+34
-11
lines changed

FHEM/FHEM/15_FRM_RC.pm

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,10 @@ my %force_apply = ();
3333

3434

3535
sub
36-
FRM_RC_Initialize($)
36+
FRM_RC_Initialize
3737
{
3838
LoadModule('FRM');
39+
$main::modules{FRM}{Clients} .= ":FRM_RC.*";
3940
}
4041

4142
sub FRM_RC_Define
@@ -47,7 +48,7 @@ sub FRM_RC_Define
4748
}
4849

4950
sub
50-
FRM_RC_Undefine($$)
51+
FRM_RC_Undefine
5152
{
5253
my ($hash, $name) = @_;
5354
Log3($hash, 5, "$name: FRM_RC_Undefine");
@@ -58,10 +59,13 @@ FRM_RC_Undefine($$)
5859
}
5960

6061
sub
61-
FRM_RC_Init($$$$)
62+
FRM_RC_Init
6263
{
63-
my ($hash, $command, $subcommand_attach, $subcommand_detach, $observer_method, $pin) = @_;
64-
# TODO parameter check
64+
my ($hash, $command, $subcommand_attach, $subcommand_detach, $observer_method, $args) = @_;
65+
66+
my $u = "wrong syntax: define <name> FRM_XXX pin";
67+
return $u unless defined $args and int(@$args) > 0;
68+
my $pin = @$args[0];
6569

6670
$hash->{PIN} = $pin;
6771
$hash->{RC_COMMAND} = $command;
@@ -73,11 +77,10 @@ FRM_RC_Init($$$$)
7377
# Register observer for messages from the controller
7478
FRM_RC_register_observer($hash, $pin, $observer_method);
7579

76-
# Attach pin
80+
# Attach pin; state will be set by FRM_RC???_notify
7781
FRM_RC_send_message($hash, $subcommand_attach, $pin, ());
7882
};
7983
return FRM_Catch($@) if $@;
80-
readingsSingleUpdate($hash, 'state', 'Initialized', 1);
8184
return undef;
8285
}
8386

FHEM/FHEM/20_FRM_RCOUT.pm

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,14 @@ use constant {
2121
RCOUTPUT_CODE_PACKED_TRISTATE => 0x28,
2222
};
2323

24+
use constant RCOUT_SETUP => {
25+
attach => RCOUTPUT_ATTACH,
26+
detach => RCOUTPUT_DETACH
27+
};
28+
use constant RCOUT_SETUP_NAMES => {
29+
reverse(%{RCOUT_SETUP()}),
30+
};
31+
2432
use constant RCOUT_GETS => {
2533
raw => '',
2634
};
@@ -73,10 +81,9 @@ FRM_RCOUT_Initialize($)
7381
}
7482

7583
sub
76-
FRM_RCOUT_Init($$)
84+
FRM_RCOUT_Init
7785
{
7886
my ($hash, $args) = @_;
79-
return "wrong syntax: define <name> FRM_RCOUT pin" unless defined $args and int(@$args) != 1;
8087
return FRM_RC_Init($hash, RCOUTPUT_DATA, RCOUTPUT_ATTACH, RCOUTPUT_DETACH, \&FRM_RCOUT_handle_rc_response, $args);
8188
}
8289

@@ -161,6 +168,8 @@ sub FRM_RCOUT_handle_rc_response {
161168
} elsif ($command eq RCOUTPUT_CODE_CHAR) {
162169
my $charCode = join('', map { chr($_); } @data);
163170
@data = ($charCode);
171+
} elsif ($command eq RCOUTPUT_ATTACH) {
172+
} elsif ($command eq RCOUTPUT_DETACH) {
164173
} else { # parameter as int
165174
push @data, (shift @data) + ((shift @data) << 8);
166175
}
@@ -172,10 +181,21 @@ sub FRM_RCOUT_notify
172181
{
173182
my ($hash, $key, $data) = @_;
174183
my $name = $hash->{NAME};
175-
my $subcommand = RCOUT_SET_NAMES->{$key};
176-
my $attrName = RCOUT_PARAMETER_NAMES->{$key};
184+
my $setup_command = RCOUT_SETUP_NAMES->{$key};
185+
my $subcommand = RCOUT_SET_NAMES->{$key};
186+
my $attrName = RCOUT_PARAMETER_NAMES->{$key};
177187

178188
COMMAND_HANDLER: {
189+
defined($setup_command) and do {
190+
Log3($hash, 4, "$setup_command");
191+
my $state;
192+
if ('attach' eq $setup_command) {
193+
$state = 'Initialized';
194+
} elsif ('detach' eq $setup_command) {
195+
$state = 'Detached';
196+
}
197+
readingsSingleUpdate($hash, 'state', $state, 1);
198+
};
179199
defined($subcommand) and do {
180200
if ('tristateCode' eq $subcommand) {
181201
my $tristateCode = shift @$data;

0 commit comments

Comments
 (0)