From 4fe223750cef6d956878d67fdde3667c9e79b73c Mon Sep 17 00:00:00 2001 From: KernSani Date: Fri, 29 Mar 2019 17:44:19 +0000 Subject: [PATCH] 46_TRX_LIGHT.pm: Clean up some version chaos git-svn-id: https://svn.fhem.de/fhem/trunk@19063 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/46_TRX_LIGHT.pm | 90 +++++++++++++++++++++++++++++---------- 1 file changed, 67 insertions(+), 23 deletions(-) diff --git a/fhem/FHEM/46_TRX_LIGHT.pm b/fhem/FHEM/46_TRX_LIGHT.pm index 2f7ecdd7b..9ffe6cbdb 100755 --- a/fhem/FHEM/46_TRX_LIGHT.pm +++ b/fhem/FHEM/46_TRX_LIGHT.pm @@ -34,8 +34,12 @@ ############################################################################## # # CHANGELOG -# +# 29.03.2019 Revised log levels # 21.03.2019 Added subtype ASA for RFY +# 26.12.2018 Support for CUVEO devices +# 09.12.2018 Additional commands for RFY (forum #36451) +# Support for Cuevo (not tested) +# Fix for Selectplus (forum #71568) # 25.03.2018 Summary for Commandref # Use SetExtensions # Fix to trigger events (userreadings) - topic #65899 @@ -86,6 +90,7 @@ my %light_device_codes = ( # HEXSTRING => "NAME", "name of reading", 0x1406 => [ "TRC02", "light" ], # RGB TRC02 # 0x15: Lighting6 0x1500 => [ "BLYSS", "light" ], # Blyss + 0x1501 => [ "CUVEO", "light" ], # Cuveo # 0x16: Chime 0x1600 => [ "BYRONSX", "light" ], # Byron SX 0x1601 => [ "BYRONMP", "chime" ], # Byron MP001 @@ -107,7 +112,7 @@ my %light_device_codes = ( # HEXSTRING => "NAME", "name of reading", 0x1907 => [ "FOREST", "light" ], # Forest 0x1A00 => [ "RFY", "light" ], # RTS RFY 0x1A01 => [ "RFY_ext", "light" ], # RTS RFY ext - 0x1A03 => [ "ASA", "light" ], # ASA + 0x1A03 => [ "ASA", "light" ], # ASA ); my %light_device_commands = ( # HEXSTRING => commands @@ -149,6 +154,7 @@ my %light_device_commands = ( # HEXSTRING => commands 0x1406 => [ "off", "on", "bright", "dim", "vivid", "pale", "color" ], # TRC02 # 0x15: Lighting6 0x1500 => [ "on", "off", "all_on", "all_off" ], # Blyss + 0x1501 => [ "on", "off", "all_on", "all_off" ], # Cuveo # 0x16: Chime 0x1600 => [ "", "tubular3_1", "solo1", "bigben1", "", "tubular2_1", @@ -176,9 +182,11 @@ my %light_device_commands = ( # HEXSTRING => commands 0x1905 => [ "down", "up", "stop" ], # Media Mount 0x1906 => [ "open", "close", "stop", "confirm" ], # DC/RMF/Yooda 0x1907 => [ "open", "close", "stop", "confirm_pair" ], # Forest - 0x1A00 => [ "stop", "up", "", "down", "", "", "", "program" ], # RTS RFY - 0x1A01 => [ "stop", "up", "", "down", "", "", "", "program" ], # RTS RFY ext - 0x1A01 => [ "stop", "up", "", "down", "", "", "", "program" ], # ASA + 0x1A00 => [ + "stop", "up", "", "down", "", "", "", "program", "", "", "", "", "", "", "", "up<0.5s", "down<0.5s", "up>2s", + "down>2s", "enable_sun+wind", "disable_sun" + ], #RFY, forum #36451 + 0x1A01 => [ "stop", "up", "", "down", "", "", "", "program" ], # RTS RFY ext ); my %light_device_c2b; # DEVICE_TYPE->hash (reverse of light_device_codes) @@ -290,9 +298,11 @@ sub TRX_LIGHT_Set($@) { else { Log3 $name, 5, "TRX_LIGHT_Set() PT2262: else arg=$command l='$l'"; - my $error = "Unknown command $command, choose one of $l "; - Log3 $name, 1, "TRX_LIGHT_Set() PT2262" . $error if ( $command ne "?" ); - return $error; + #my $error = "Unknown command $command, choose one of $l "; + return SetExtensions( $hash, $l, $name, @a ); + + #Log3 $name, 1, "TRX_LIGHT_Set() PT2262" . $error if ( $command ne "?" ); + #return $error; } } } @@ -305,14 +315,11 @@ sub TRX_LIGHT_Set($@) { $l =~ s/ color / color:slider,14,2,128 /; } - if ( $l =~ /^[on|off]$/ ) { - Log3 $name, 5, "TRX_LIGHT_Set() using setExtensions"; - return SetExtensions( $hash, $l, $name, @a ); - } - else { - Log3 $name, 5, "TRX_LIGHT_Set() NOT using setExtensions for command $command"; - return "Unknown command $command, choose one of $l"; - } + #my $error = "Unknown command $command, choose one of $l"; + return SetExtensions( $hash, $l, $name, @a ); + + #Log3 $name, 1, "TRX_LIGHT_Set()" . $error if ( $command ne "?" ); + #return $error; } my $seqnr = 0; @@ -455,6 +462,33 @@ sub TRX_LIGHT_Set($@) { "TRX_LIGHT_Set() lighting5 name=$name device_type=$device_type, deviceid=$deviceid command=$command"; Log3 $name, 5, "TRX_LIGHT_Set() lighting5 hexline=$hex_prefix$hex_command"; } + + # Lighting6 + elsif ( $protocol_type == 0x15 ) { + my $id1; + my $id2; + my $unit; + my $group; + if ( $deviceid =~ /(..)(..)(.)(.)/ ) { + $id1 = $1; + $id2 = $2; + $group = $3; + $unit = $4; + } + else { + Log3 $name, 1, + "TRX_LIGHT_Set() lighting6 wrong deviceid: name=$name device_type=$device_type, deviceid=$deviceid"; + return "error set name=$name deviceid=$deviceid"; + } + $hex_prefix = sprintf "0B15"; + $hex_command = sprintf "%02x%02x%s%s%02x%02x%02x%02x0070", $device_type_num & 0xff, $seqnr, $id1, $id2, $group, + $unit, $cmnd, $cmnd; + + Log3 $name, 5, + "TRX_LIGHT_Set() lighting6 name=$name device_type=$device_type, deviceid=$deviceid command=$command $id1$id2"; + Log3 $name, 5, "TRX_LIGHT_Set() lighting2 hexline=$hex_prefix$hex_command"; + + } elsif ( $protocol_type == 0x16 ) { # Chime @@ -546,6 +580,7 @@ sub TRX_LIGHT_Set($@) { "TRX_LIGHT_Set() RFY wrong unitcode: name=$name device_type=$device_type, unitid=$unitid unitcode=$unitcode"; return "error set name=$name deviceid=$deviceid"; } + } else { Log3 $name, 1, @@ -634,6 +669,7 @@ sub TRX_LIGHT_Define($$) { && $type ne "RSL2" && $type ne "LIVOLO" && $type ne "BLYSS" + && $type ne "CUVEO" && $type ne "BYRONSX" && $type ne "SIEMENS_SF01" && $type ne "HARRISON" @@ -775,28 +811,33 @@ sub TRX_LIGHT_parse_X10 ($$) { $data = $bytes->[7]; } elsif ( $type == 0x15 ) { - $device = sprintf '%02x%02x%c%d', $bytes->[3], $bytes->[4], $bytes->[5], $bytes->[6]; + if ( $subtype == 0x00 ) { #Blyss + $device = sprintf '%02x%02x%c%d', $bytes->[3], $bytes->[4], $bytes->[5], $bytes->[6]; + } + else { #Cuveo + $device = sprintf '%02x%02x%d%d', $bytes->[3], $bytes->[4], $bytes->[5], $bytes->[6]; + } $data = $bytes->[7]; } - elsif ( $type == 0x16 ) { #Chime + elsif ( $type == 0x16 ) { #Chime if ( $subtype == 0x00 ) { $device = sprintf '%02x', $bytes->[4]; $data = $bytes->[5]; } else { - $device = sprintf '%02x', $bytes->[3], $bytes->[4]; + $device = sprintf '%04x', $bytes->[4], $bytes->[5]; #forum #71568 $data = 0; } } - elsif ( $type == 0x17 ) { # Fan + elsif ( $type == 0x17 ) { # Fan $device = sprintf '%02x%02x%02x', $bytes->[3], $bytes->[4], $bytes->[5]; $data = $bytes->[6]; } - elsif ( $type == 0x19 ) { # Blinds1 + elsif ( $type == 0x19 ) { # Blinds1 $device = sprintf '%02x%02x%02x%02x', $bytes->[3], $bytes->[4], $bytes->[5], $bytes->[6]; $data = $bytes->[7]; } - elsif ( $type == 0x1A ) { # RFY + elsif ( $type == 0x1A ) { # RFY $device = printf '%02x%02x%02x%02x', $bytes->[3], $bytes->[4], $bytes->[5], $bytes->[6]; $data = $bytes->[7]; } @@ -834,6 +875,8 @@ sub TRX_LIGHT_parse_X10 ($$) { my $firstdevice = 1; my $def = $modules{TRX_LIGHT}{defptr}{$device_name}; + + #Log3 $hash, 1, "TRX_LIGHT_parse_X10() device $device_name"; if ( !$def ) { $firstdevice = 0; $def = $modules{TRX_LIGHT}{defptr2}{$device_name}; @@ -883,7 +926,7 @@ sub TRX_LIGHT_parse_X10 ($$) { readingsBeginUpdate($def); - if ( $type == 0x10 || $type == 0x11 || $type == 0x14 || $type == 0x16 ) { + if ( $type == 0x10 || $type == 0x11 || $type == 0x14 || $type == 0x16 || $type == 0x15 ) { # try to use it for all types: $current = $command; @@ -1170,6 +1213,7 @@ KlikAanKlikUit, NEXA, CHACON, HomeEasy UK.
You need to define an RFXtrx433
  • LIVOLO (Livolo devices. Commands ["all_off", "on_off", "dim+", "dim-"].)
  • TRC02 (RGB TRC02 devices. Commands ["off", "on", "bright", "dim", "vivid", "pale", "color"].)
  • BLYSS (Blyss devices. deviceid: [A-P][1-5]. Commands ["off", "on", "all_off", "all_on"].)
  • +
  • CUVEO (Cuveo devices. deviceid: [A-P][1-5]. Commands ["off", "on", "all_off", "all_on"].)
  • BYRONSX (Byron SX chime devices. deviceid: 00-FF. Commands [ "tubular3_1", "solo1", "bigben1", "tubular2_1", "tubular2_2", "solo2", "tubular3_2"].)
  • SELECTPLUS (SELECTPLUS] chime devices. deviceid: 0000-FFFF. Commands [ "ring"].)
  • SIEMENS_SF01 (Siemens SF01 devices. deviceid: 000000-007FFF. Commands [ "timer", "-", "learn", "+", "confirm", "light", "on", "off" ].)