1
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-05-07 22:29:19 +00:00

added initCommands attribute (by HCS)

added flash command (by HCS)


git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@6050 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
justme-1968 2014-06-03 19:40:33 +00:00
parent 0ff0ec588b
commit 1ca03c33d5

View File

@ -76,6 +76,8 @@ JeeLink_Initialize($)
$hash->{SetFn} = "JeeLink_Set"; $hash->{SetFn} = "JeeLink_Set";
$hash->{AttrFn} = "JeeLink_Attr"; $hash->{AttrFn} = "JeeLink_Attr";
$hash->{AttrList} = "Clients MatchList" $hash->{AttrList} = "Clients MatchList"
." hexFile"
." initCommands"
." DebounceTime BeepLong BeepShort BeepDelay" ." DebounceTime BeepLong BeepShort BeepDelay"
." tune " . join(" ", map { "tune_$_" } keys %RxListJeeLink) ." tune " . join(" ", map { "tune_$_" } keys %RxListJeeLink)
." $readingFnAttributes"; ." $readingFnAttributes";
@ -88,6 +90,7 @@ JeeLink_Fingerprint($$)
{ {
} }
##################################### #####################################
sub sub
JeeLink_Define($$) JeeLink_Define($$)
@ -168,7 +171,7 @@ JeeLink_Set($@)
my $arg = join(" ", @a); my $arg = join(" ", @a);
my $list = "beep raw led:on,off led-on-for-timer reset LaCrossePairForSec setReceiverMode:LaCrosse,HX2272,FS20"; my $list = "beep raw led:on,off led-on-for-timer reset LaCrossePairForSec setReceiverMode:LaCrosse,HX2272,FS20 flash";
return $list if( $cmd eq '?' || $cmd eq ''); return $list if( $cmd eq '?' || $cmd eq '');
@ -176,27 +179,76 @@ JeeLink_Set($@)
Log3 $name, 4, "set $name $cmd $arg"; Log3 $name, 4, "set $name $cmd $arg";
JeeLink_SimpleWrite($hash, $arg); JeeLink_SimpleWrite($hash, $arg);
} elsif( $cmd eq "beep" ) { } elsif( $cmd eq "beep" ) {
# + = Langer Piep # + = Langer Piep
# - = Kurzer Piep # - = Kurzer Piep
# anderes = Pause # anderes = Pause
my $longbeep = AttrVal($name, "BeepLong", "250"); my $longbeep = AttrVal($name, "BeepLong", "250");
my $shortbeep = AttrVal($name, "BeepShort", "100"); my $shortbeep = AttrVal($name, "BeepShort", "100");
my $delaybeep = AttrVal($name, "BeepDelay", "0.25"); my $delaybeep = AttrVal($name, "BeepDelay", "0.25");
for(my $i=0;$i<length($arg);$i++) { for(my $i=0;$i<length($arg);$i++) {
my $x=substr($arg,$i,1); my $x=substr($arg,$i,1);
if($x eq "+") { if($x eq "+") {
# long beep # long beep
JeeLink_Write($hash, "bFF" . $longbeep); JeeLink_Write($hash, "bFF" . $longbeep);
} elsif($x eq "-") { } elsif($x eq "-") {
# short beep # short beep
JeeLink_Write($hash, "bFF" . $shortbeep); JeeLink_Write($hash, "bFF" . $shortbeep);
} }
select(undef, undef, undef, $delaybeep); select(undef, undef, undef, $delaybeep);
} }
}
elsif( $cmd eq "flash" ) {
my @args = split(' ', $arg);
my $log = "";
my $hexFile = "";
my @deviceName = split('@', $hash->{DeviceName});
my $port = $deviceName[0];
my $logFile = "./log/JeeLinkFlash.log";
my $defaultHexFile = "./hexfiles/$hash->{TYPE}-LaCrosseITPlusReader10.hex";
} elsif( $cmd eq "LaCrossePairForSec" ) { if(!$arg || $args[0] !~ m/^(\w|\/|.)+$/) {
$hexFile = AttrVal($name, "hexFile", "");
if ($hexFile eq "") {
$hexFile = $defaultHexFile;
}
}
else {
$hexFile = $args[0];
}
return "Usage: set $name flash [filename]\n\nor use the hexFile attribute" if($hexFile !~ m/^(\w|\/|.)+$/);
$log .= "flashing JeeLink $name\n";
$log .= "hex file: $hexFile\n";
$log .= "port: $port\n";
$log .= "log file: $logFile\n";
DevIo_CloseDev($hash);
$hash->{STATE} = "disconnected";
$log .= "$name closed\n";
my $avrdude = "avrdude -p atmega328P -c arduino -P $port -D -U flash:w:$hexFile 2>$logFile";
$log .= "command: $avrdude\n\n";
`$avrdude`;
local $/=undef;
open FILE, $logFile or die "Couldn't open file: $!";
my $logText = <FILE>;
close FILE;
$log .= "--- AVRDUDE ---------------------------------------------------------------------------------\n";
$log .= $logText;
$log .= "--- AVRDUDE ---------------------------------------------------------------------------------\n\n";
DevIo_OpenDev($hash, 0, "JeeLink_DoInit");
$hash->{STATE} = "Opened";
$log .= "$name opened\n";
return $log;
}
elsif( $cmd eq "LaCrossePairForSec" ) {
my @args = split(' ', $arg); my @args = split(' ', $arg);
return "Usage: set $name LaCrossePairForSec <seconds_active> [ignore_battery]" if(!$arg || $args[0] !~ m/^\d+$/ || ($args[1] && $args[1] ne "ignore_battery") ); return "Usage: set $name LaCrossePairForSec <seconds_active> [ignore_battery]" if(!$arg || $args[0] !~ m/^\d+$/ || ($args[1] && $args[1] ne "ignore_battery") );
@ -335,6 +387,9 @@ JeeLink_DoInit($)
# Reset the counter # Reset the counter
delete($hash->{XMIT_TIME}); delete($hash->{XMIT_TIME});
delete($hash->{NR_CMD_LAST_H}); delete($hash->{NR_CMD_LAST_H});
#JeeLink_SimpleWrite($hash, "v" );
return undef; return undef;
} }
@ -560,7 +615,13 @@ JeeLink_Parse($$$$)
$hash->{model} = $dmsg; $hash->{model} = $dmsg;
if( $hash->{STATE} eq "Opened" ) { if( $hash->{STATE} eq "Opened" ) {
if( $dmsg =~m /pcaSerial/ ) { if( my $initCommandsString = AttrVal($name, "initCommands", undef) ) {
my @initCommands = split(' ', $initCommandsString);
foreach my $command (@initCommands) {
JeeLink_SimpleWrite($hash, $command);
}
} elsif( $dmsg =~m /pcaSerial/ ) {
$hash->{MatchList} = \%matchListPCA301; $hash->{MatchList} = \%matchListPCA301;
JeeLink_SimpleWrite($hash, "1a" ); # led on JeeLink_SimpleWrite($hash, "1a" ); # led on
JeeLink_SimpleWrite($hash, "1q" ); # quiet mode JeeLink_SimpleWrite($hash, "1q" ); # quiet mode
@ -568,7 +629,8 @@ JeeLink_Parse($$$$)
JeeLink_SimpleWrite($hash, "0a" ); # led off JeeLink_SimpleWrite($hash, "0a" ); # led off
JeeLink_SimpleWrite($hash, "l" ); # list known devices JeeLink_SimpleWrite($hash, "l" ); # list known devices
} elsif( $dmsg =~m /LaCrosseITPlusReader/ ) { }
elsif( $dmsg =~m /LaCrosseITPlusReader/ ) {
$hash->{MatchList} = \%matchListPCA301; $hash->{MatchList} = \%matchListPCA301;
} elsif( $dmsg =~m /ec3kSerial/ ) { } elsif( $dmsg =~m /ec3kSerial/ ) {
@ -583,6 +645,7 @@ JeeLink_Parse($$$$)
JeeLink_SimpleWrite($hash, "f"); # get RFM frequence config JeeLink_SimpleWrite($hash, "f"); # get RFM frequence config
JeeLink_SimpleWrite($hash, "m"); # show used ram on jeenode JeeLink_SimpleWrite($hash, "m"); # show used ram on jeenode
} }
$hash->{STATE} = "Initialized"; $hash->{STATE} = "Initialized";
} }
@ -886,6 +949,8 @@ sub JeeLink_getIndexOfArray($@) {
<ul> <ul>
<li>Clients</li> <li>Clients</li>
<li>MatchList</li> <li>MatchList</li>
<li>initCommands<br>
space separated list of commands to send for device initialization</li>
</ul> </ul>
<br> <br>
</ul> </ul>