From 1ca03c33d55d69b1e8702be914473f3e2073636a Mon Sep 17 00:00:00 2001 From: justme-1968 Date: Tue, 3 Jun 2014 19:40:33 +0000 Subject: [PATCH] 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 --- FHEM/36_JeeLink.pm | 113 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 89 insertions(+), 24 deletions(-) diff --git a/FHEM/36_JeeLink.pm b/FHEM/36_JeeLink.pm index db62bf77b..2ab3ac1c1 100644 --- a/FHEM/36_JeeLink.pm +++ b/FHEM/36_JeeLink.pm @@ -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{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 = ; + 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 [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($@) {
  • Clients
  • MatchList
  • +
  • initCommands
    + space separated list of commands to send for device initialization