From 5a2bf876e10441e231e396cc02241d50278091a6 Mon Sep 17 00:00:00 2001 From: klaus-schauer Date: Wed, 8 May 2013 14:52:25 +0000 Subject: [PATCH] TCM120: Telegrams 1BS, 4BS now supported git-svn-id: https://svn.fhem.de/fhem/trunk@3160 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/00_TCM.pm | 77 ++++++++++++++++++++++++++++++--------------- 1 file changed, 52 insertions(+), 25 deletions(-) diff --git a/fhem/FHEM/00_TCM.pm b/fhem/FHEM/00_TCM.pm index 7667c7b83..84961cf41 100755 --- a/fhem/FHEM/00_TCM.pm +++ b/fhem/FHEM/00_TCM.pm @@ -86,34 +86,59 @@ TCM_Define($$) ##################################### -# Input is HEX, without header and CRC +# Input is header and data (HEX), without CRC sub TCM_Write($$$) { my ($hash,$fn,$msg) = @_; my $name = $hash->{NAME}; + my $ll2 = GetLogLevel($name,2); my $ll5 = GetLogLevel($name,5); return if(!defined($fn)); my $bstring; if($hash->{MODEL} eq "120") { - $bstring = "$fn$msg"; - $bstring = "A55A".$bstring.TCM_CSUM($bstring); - - } else { # 310 / ESP3 - - if(!$fn) { # "Old-Type" Radio Packet - $msg =~ m/^6B05(..)000000(........)(..)$/; - $fn = "00070701"; - $msg = "F6$1$2${3}03FFFFFFFFFF00"; + # TCM 120 (ESP2) + if (!$fn) { + # command with ESP2 format + $bstring = $msg; + } else { + # command with ESP3 format + my $packetType = hex (substr ($fn, 6, 2)); + if ($packetType != 1) { + Log $ll2, "TCM120 $name: Packet Type not supported."; + return; + } + my $odataLen = hex (substr ($fn, 4, 2)); + if ($odataLen != 0) { + Log $ll2, "TCM120 $name: Radio Telegram with optional Data not supported."; + return; + } + #my $mdataLen = hex (substr ($fn, 0, 4)); + my $rorg = substr ($msg, 0, 2); + # translate the RORG to ORG + my %rorgmap = ("F6"=>"05", + "D5"=>"06", + "A5"=>"07", + ); + if($rorgmap{$rorg}) { + $rorg = $rorgmap{$rorg}; + } else { + Log $ll2, "TCM120 $name: unknown RORG mapping for $rorg"; + } + if ($rorg eq "05" || $rorg eq "06") { + $bstring = "6B" . $rorg . substr ($msg, 2, 2) . "000000" . substr ($msg, 4); + } else { + $bstring = "6B" . $rorg . substr ($msg, 2); + } } - $bstring = sprintf("55%s%s%s%s", # $fn == Header, $msg == DATA - $fn, TCM_CRC8($fn), $msg, TCM_CRC8($msg)); - + $bstring = "A55A" . $bstring . TCM_CSUM($bstring); + } else { + # TCM 310 (ESP3) + $bstring = "55" . $fn . TCM_CRC8($fn) . $msg . TCM_CRC8($msg); } - Log $ll5, "$hash->{NAME} sending $bstring"; - + Log $ll5, "TCM $name sending $bstring"; DevIo_SimpleWrite($hash, $bstring, 1); } @@ -421,18 +446,20 @@ my %gets120 = ( ); my %gets310 = ( - "sw_ver" => {cmd=>"03", - APPVersion => "1,4", - APIVersion => "5,4", - ChipID => "9,4", - ChipVersion => "13,4", - Desc => "17,16,STR", }, - "idbase" => {cmd=>"08", - BaseId => "1,4", - RemainingWriteCycles => "5,1",}, + "sw_ver" => {cmd => "03", + APPVersion => "1,4", + APIVersion => "5,4", + ChipID => "9,4", + ChipVersion => "13,4", + Desc => "17,16,STR",}, + "idbase" => {cmd => "08", + BaseId => "1,4", + RemainingWriteCycles => "5,1",}, + "repeater" => {cmd => "10", + repEnable => "1,1", + repLevel => "2,1",}, ); - sub TCM_Get($@) {