1
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-05-04 22:19:38 +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->{AttrFn} = "JeeLink_Attr";
$hash->{AttrList} = "Clients MatchList"
." hexFile"
." initCommands"
." DebounceTime BeepLong BeepShort BeepDelay"
." tune " . join(" ", map { "tune_$_" } keys %RxListJeeLink)
." $readingFnAttributes";
@ -88,6 +90,7 @@ JeeLink_Fingerprint($$)
{
}
#####################################
sub
JeeLink_Define($$)
@ -168,7 +171,7 @@ JeeLink_Set($@)
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 '');
@ -176,27 +179,76 @@ JeeLink_Set($@)
Log3 $name, 4, "set $name $cmd $arg";
JeeLink_SimpleWrite($hash, $arg);
} elsif( $cmd eq "beep" ) {
# + = Langer Piep
# - = Kurzer Piep
# anderes = Pause
my $longbeep = AttrVal($name, "BeepLong", "250");
my $shortbeep = AttrVal($name, "BeepShort", "100");
my $delaybeep = AttrVal($name, "BeepDelay", "0.25");
} elsif( $cmd eq "beep" ) {
# + = Langer Piep
# - = Kurzer Piep
# anderes = Pause
my $longbeep = AttrVal($name, "BeepLong", "250");
my $shortbeep = AttrVal($name, "BeepShort", "100");
my $delaybeep = AttrVal($name, "BeepDelay", "0.25");
for(my $i=0;$i<length($arg);$i++) {
my $x=substr($arg,$i,1);
if($x eq "+") {
# long beep
JeeLink_Write($hash, "bFF" . $longbeep);
} elsif($x eq "-") {
# short beep
JeeLink_Write($hash, "bFF" . $shortbeep);
}
select(undef, undef, undef, $delaybeep);
}
} elsif( $cmd eq "LaCrossePairForSec" ) {
for(my $i=0;$i<length($arg);$i++) {
my $x=substr($arg,$i,1);
if($x eq "+") {
# long beep
JeeLink_Write($hash, "bFF" . $longbeep);
} elsif($x eq "-") {
# short beep
JeeLink_Write($hash, "bFF" . $shortbeep);
}
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";
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);
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
delete($hash->{XMIT_TIME});
delete($hash->{NR_CMD_LAST_H});
#JeeLink_SimpleWrite($hash, "v" );
return undef;
}
@ -560,7 +615,13 @@ JeeLink_Parse($$$$)
$hash->{model} = $dmsg;
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;
JeeLink_SimpleWrite($hash, "1a" ); # led on
JeeLink_SimpleWrite($hash, "1q" ); # quiet mode
@ -568,9 +629,10 @@ JeeLink_Parse($$$$)
JeeLink_SimpleWrite($hash, "0a" ); # led off
JeeLink_SimpleWrite($hash, "l" ); # list known devices
} elsif( $dmsg =~m /LaCrosseITPlusReader/ ) {
}
elsif( $dmsg =~m /LaCrosseITPlusReader/ ) {
$hash->{MatchList} = \%matchListPCA301;
} elsif( $dmsg =~m /ec3kSerial/ ) {
$hash->{MatchList} = \%matchListPCA301;
#JeeLink_SimpleWrite($hash, "ec", 1);
@ -583,6 +645,7 @@ JeeLink_Parse($$$$)
JeeLink_SimpleWrite($hash, "f"); # get RFM frequence config
JeeLink_SimpleWrite($hash, "m"); # show used ram on jeenode
}
$hash->{STATE} = "Initialized";
}
@ -886,6 +949,8 @@ sub JeeLink_getIndexOfArray($@) {
<ul>
<li>Clients</li>
<li>MatchList</li>
<li>initCommands<br>
space separated list of commands to send for device initialization</li>
</ul>
<br>
</ul>