2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-03 16:56:54 +00:00

- feature: 70_VIERA: Using non blocking for status update.

Added color button for remoteControl and SVG layout
                       Some new SVG icons for remoteControl layout

git-svn-id: https://svn.fhem.de/fhem/trunk@10463 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
teevau 2016-01-11 18:03:07 +00:00
parent 38dfd4f6da
commit f14b3ec3ad
10 changed files with 1045 additions and 184 deletions

View File

@ -1,5 +1,8 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it. # Do not insert empty lines here, update check depends on it.
- feature: 70_VIERA: Using non blocking for status update.
Added color button for remoteControl and SVG layout
Some new SVG icons for remoteControl layout
- change: 73_km200: New attribute "disabled" and default values changed. - change: 73_km200: New attribute "disabled" and default values changed.
- feature: HUEbridge: added set deletescene and get scenes detail - feature: HUEbridge: added set deletescene and get scenes detail
- feature: HUEDevice: added (hue|sat|ct)(Up|Down) commands - feature: HUEDevice: added (hue|sat|ct)(Up|Down) commands

View File

@ -8,9 +8,19 @@
# written 2013 by Tobias Vaupel <fhem at 622 mbit dot de> # written 2013 by Tobias Vaupel <fhem at 622 mbit dot de>
# #
# #
# Version = 1.23 # Version = 1.24
# #
# Version History: # Version History:
# - 1.24 - 2015-07-08
# -- Using non blocking as default for status update. Use attr to use blocking mode.
# -- Replaced when/given with if/elsif
# -- Added color buttons for remoteControl Layout
# -- Added remoteControl Layout with SVG
# -- InternalTimer is deleted at define. Avoid multiple internalTimer running in parallel when redefining device
# -- Added TCP-Port to internal PORT instead of fixed coding
# -- increased byte length at command read (IO::Socket::INET) from 1 to 1024
# -- in very few cases the TV is answering with HTTP Code 400 BAD REQUEST. This is considered now and is interpreted as device on instead of off.
#
# - 1.23 - 2014-08-01 # - 1.23 - 2014-08-01
# -- Add parameter "HDMI1" - "HDMI4" for command remoteControl to select HDMI input directly # -- Add parameter "HDMI1" - "HDMI4" for command remoteControl to select HDMI input directly
# -- Add command "input" to select a HDMI port, TV or SD-Card as source # -- Add command "input" to select a HDMI port, TV or SD-Card as source
@ -27,7 +37,7 @@
# #
# - 1.11 - 2013-08-13 # - 1.11 - 2013-08-13
# -- added "noArg" at get/set-command # -- added "noArg" at get/set-command
# -- changed format of return() in VIERA_Get() for get-command dropdown menu in FHEMWEB # -- changed format of return() in VIERA_Get() for get-command drop down menu in FHEMWEB
# #
# - 1.10 - 2013-06-29 # - 1.10 - 2013-06-29
# -- Added support for module 95_remotecontrol # -- Added support for module 95_remotecontrol
@ -45,10 +55,12 @@ use warnings;
use IO::Socket::INET; use IO::Socket::INET;
use feature qw/say switch/; use feature qw/say switch/;
use Time::HiRes qw(gettimeofday sleep); use Time::HiRes qw(gettimeofday sleep);
use Blocking;
#########################
# Forward declaration for remotecontrol module # Forward declaration for remotecontrol module
sub VIERA_RClayout_TV(); sub VIERA_RClayout_TV();
sub VIERA_RClayout_TV_SVG();
sub VIERA_RCmakenotify($$); sub VIERA_RCmakenotify($$);
@ -113,18 +125,25 @@ my %VIERA_remoteControl_args = (
"NRC_HDMI4" => "Switch to HDMI input 4", "NRC_HDMI4" => "Switch to HDMI input 4",
); );
# Initialize the module and tell FHEM name of additional functions
# Param1: Hash of FHEM-Device
# Return: no return code
sub VIERA_Initialize($){ sub VIERA_Initialize($){
my ($hash) = @_; my ($hash) = @_;
$hash->{DefFn} = "VIERA_Define"; $hash->{DefFn} = "VIERA_Define";
$hash->{SetFn} = "VIERA_Set"; $hash->{SetFn} = "VIERA_Set";
$hash->{GetFn} = "VIERA_Get"; $hash->{GetFn} = "VIERA_Get";
$hash->{UndefFn} = "VIERA_Undefine"; $hash->{UndefFn} = "VIERA_Undefine";
$hash->{AttrList} = $readingFnAttributes; $hash->{AttrList} = "blocking:1,0 $readingFnAttributes";
$data{RC_layout}{VIERA_TV} = "VIERA_RClayout_TV"; $data{RC_layout}{VIERA_TV} = "VIERA_RClayout_TV";
$data{RC_layout}{VIERA_TV_SVG} = "VIERA_RClayout_TV_SVG";
$data{RC_makenotify}{VIERA} = "VIERA_RCmakenotify"; $data{RC_makenotify}{VIERA} = "VIERA_RCmakenotify";
} }
# Callback when 'define' is used at FHEM
# Param1: Hash of FHEM-Device
# Param2: String of 'define' command
# Return: Help text for FHEMWEB
sub VIERA_Define($$){ sub VIERA_Define($$){
my ($hash, $def) = @_; my ($hash, $def) = @_;
my @args = split("[ \t][ \t]*", $def); my @args = split("[ \t][ \t]*", $def);
@ -137,22 +156,32 @@ sub VIERA_Define($$){
} }
$hash->{helper}{HOST} = $args[2]; $hash->{helper}{HOST} = $args[2];
readingsSingleUpdate($hash,"state","Initialized",1); $hash->{helper}{PORT} = 55000;
if(defined($args[3]) and $args[3] > 10) { if(defined($args[3]) and $args[3] > 10) {
$hash->{helper}{INTERVAL}=$args[3]; $hash->{helper}{INTERVAL}=$args[3];
} }
else{ else {
$hash->{helper}{INTERVAL}=30; $hash->{helper}{INTERVAL}=30;
} }
CommandAttr(undef,$name.' webCmd off') if( !defined( AttrVal($hash->{NAME}, "webCmd", undef) ) ); CommandAttr(undef,$name.' webCmd off') if( !defined( AttrVal($hash->{NAME}, "webCmd", undef)) );
Log3 $name, 2, "VIERA: defined with host: $hash->{helper}{HOST} and interval: $hash->{helper}{INTERVAL}";
BlockingKill($hash->{helper}{RUNNING_PID_GET}) if(defined($hash->{helper}{RUNNING_PID_GET}));
delete($hash->{helper}{RUNNING_PID_GET});
RemoveInternalTimer($hash);
InternalTimer(gettimeofday()+$hash->{helper}{INTERVAL}, "VIERA_GetStatus", $hash, 0); InternalTimer(gettimeofday()+$hash->{helper}{INTERVAL}, "VIERA_GetStatus", $hash, 0);
Log3 $name, 2, "VIERA: defined with host: $hash->{helper}{HOST} and interval: $hash->{helper}{INTERVAL}";
readingsSingleUpdate($hash,"state","Initialized",1);
return undef; return undef;
} }
# Callback when 'set' is used at FHEM
# Param1: Hash of FHEM-Device
# Param2: String of 'set' command
# Return: Help text for FHEMWEB
sub VIERA_Set($@){ sub VIERA_Set($@){
my ($hash, @a) = @_; my ($hash, @a) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
@ -171,114 +200,92 @@ sub VIERA_Set($@){
return "VIERA: No argument given, $usage" if(!defined($a[1])); return "VIERA: No argument given, $usage" if(!defined($a[1]));
my $state = lc($a[2]) if(defined($a[2])); my $state = lc($a[2]) if(defined($a[2]));
given($what) { if ($what eq "mute"){
when("mute"){ Log3 $name, 3, "VIERA: Set mute $state";
Log3 $name, 3, "VIERA: Set mute $state"; if ($state eq "on") {$state = 1;} else {$state = 0;}
if ($state eq "on") {$state = 1;} else {$state = 0;} VIERA_connection($hash, VIERA_BuildXML_RendCtrl($hash, "Set", "Mute", $state));
VIERA_connection(VIERA_BuildXML_RendCtrl($hash, "Set", "Mute", $state), $host); VIERA_GetStatus($hash, 1);
VIERA_GetStatus($hash, 1); }
break; elsif ($what eq "volume"){
return "VIERA: Volume range is too high! Use Value 0 till 100 for volume." if($state < 0 || $state > 100);
Log3 $name, 3, "VIERA: Set volume $state";
VIERA_connection($hash, VIERA_BuildXML_RendCtrl($hash, "Set", "Volume", $state));
VIERA_GetStatus($hash, 1);
}
elsif ($what eq "volumeup"){
return "VIERA: Volume range is too high!" if(ReadingsVal($name, "volume", "0") > 100);
Log3 $name, 3, "VIERA: Set volumeUp";
VIERA_connection($hash, VIERA_BuildXML_NetCtrl($hash,"VOLUP"));
VIERA_GetStatus($hash, 1);
}
elsif ($what eq "volumedown"){
return "VIERA: Volume range is too low!" if(ReadingsVal($name, "volume", "0") < 1);
Log3 $name, 3, "VIERA: Set volumeDown";
VIERA_connection($hash, VIERA_BuildXML_NetCtrl($hash,"VOLDOWN"));
VIERA_GetStatus($hash, 1);
}
elsif ($what eq "channel"){
return "VIERA: Channel is too high or low!" if($state < 1 || $state > 9999);
Log3 $name, 3, "VIERA: Set channel $state";
for(my $i = 0; $i <= length($state)-1; $i++) {
VIERA_connection($hash, VIERA_BuildXML_NetCtrl($hash,"D" . substr($state, $i, 1)));
sleep 0.1;
} }
VIERA_connection($hash, VIERA_BuildXML_NetCtrl($hash,"ENTER"));
when("volume"){ }
return "VIERA: Volume range is too high! Use Value 0 till 100 for volume." if($state < 0 || $state > 100); elsif ($what eq "channelup"){
Log3 $name, 3, "VIERA: Set volume $state"; Log3 $name, 3, "VIERA: Set channelUp";
VIERA_connection(VIERA_BuildXML_RendCtrl($hash, "Set", "Volume", $state), $host); VIERA_connection($hash, VIERA_BuildXML_NetCtrl($hash,"CH_UP"));
VIERA_GetStatus($hash, 1); }
break; elsif ($what eq "channeldown"){
Log3 $name, 3, "VIERA: Set channelDown";
VIERA_connection($hash, VIERA_BuildXML_NetCtrl($hash,"CH_DOWN"));
}
elsif ($what eq "remotecontrol"){
if($state eq "?"){
$usage = "choose one of the states:\n";
foreach $key (sort keys %VIERA_remoteControl_args){
if(length($key) < 17){ $tab = "\t\t"; }else{ $tab = "\t"; }
$usage .= "$key $tab=> $VIERA_remoteControl_args{$key}\n";
} }
$usage =~ s/(NRC_|-ONOFF)//g;
when("volumeup"){ return $usage;
return "VIERA: Volume range is too high!" if(ReadingsVal($name, "volume", "0") > 100);
Log3 $name, 3, "VIERA: Set volumeUp";
VIERA_connection(VIERA_BuildXML_NetCtrl($hash,"VOLUP"), $host);
VIERA_GetStatus($hash, 1);
break;
} }
else{
when("volumedown"){ $state = uc($state);
return "VIERA: Volume range is too low!" if(ReadingsVal($name, "volume", "0") < 1); Log3 $name, 3, "VIERA: Set remoteControl $state";
Log3 $name, 3, "VIERA: Set volumeDown"; VIERA_connection($hash, VIERA_BuildXML_NetCtrl($hash,$state));
VIERA_connection(VIERA_BuildXML_NetCtrl($hash,"VOLDOWN"), $host);
VIERA_GetStatus($hash, 1);
break;
} }
}
when("channel"){ elsif ($what eq "off"){
return "VIERA: Channel is too high or low!" if($state < 1 || $state > 9999); Log3 $name, 3, "VIERA: Set off";
Log3 $name, 3, "VIERA: Set channel $state"; VIERA_connection($hash, VIERA_BuildXML_NetCtrl($hash,"POWER"));
for(my $i = 0; $i <= length($state)-1; $i++) { }
VIERA_connection(VIERA_BuildXML_NetCtrl($hash,"D" . substr($state, $i, 1)), $host); elsif ($what eq "statusrequest"){
sleep 0.1; Log3 $name, 3, "VIERA: Set statusRequest";
} VIERA_GetStatus($hash, 1);
VIERA_connection(VIERA_BuildXML_NetCtrl($hash,"ENTER"), $host); }
break; elsif ($what eq "input"){
} $state = uc($state);
return "VIERA: Input $state isn't available." if($state ne "HDMI1" && $state ne "HDMI2" && $state ne "HDMI3" && $state ne "HDMI4" && $state ne "SDCARD" && $state ne "TV");
when("channelup"){ $state = "SD_CARD" if ($state eq "SDCARD");
Log3 $name, 3, "VIERA: Set channelUp"; Log3 $name, 3, "VIERA: Set input $state";
VIERA_connection(VIERA_BuildXML_NetCtrl($hash,"CH_UP"), $host); VIERA_connection($hash, VIERA_BuildXML_NetCtrl($hash,$state));
break; }
} elsif ($what eq "?"){
return "$usage";
when("channeldown"){ }
Log3 $name, 3, "VIERA: Set channelDown"; else {
VIERA_connection(VIERA_BuildXML_NetCtrl($hash,"CH_DOWN"), $host); Log3 $name, 3, "VIERA: Unknown argument $what, $usage";
break; return "Unknown argument $what, $usage";
}
when("remotecontrol"){
if($state eq "?"){
$usage = "choose one of the states:\n";
foreach $key (sort keys %VIERA_remoteControl_args){
if(length($key) < 17){ $tab = "\t\t"; }else{ $tab = "\t"; }
$usage .= "$key $tab=> $VIERA_remoteControl_args{$key}\n";
}
$usage =~ s/(NRC_|-ONOFF)//g;
return $usage;
}
else{
$state = uc($state);
Log3 $name, 3, "VIERA: Set remoteControl $state";
VIERA_connection(VIERA_BuildXML_NetCtrl($hash,$state), $host);
}
break;
}
when("off"){
Log3 $name, 3, "VIERA: Set off";
VIERA_connection(VIERA_BuildXML_NetCtrl($hash,"POWER"), $host);
break;
}
when("statusrequest"){
Log3 $name, 3, "VIERA: Set statusRequest";
VIERA_GetStatus($hash, 1);
break;
}
when("input"){
$state = uc($state);
return "VIERA: Input $state isn't available." if($state ne "HDMI1" && $state ne "HDMI2" && $state ne "HDMI3" && $state ne "HDMI4" && $state ne "SDCARD" && $state ne "TV");
$state = "SD_CARD" if ($state eq "SDCARD");
Log3 $name, 3, "VIERA: Set input $state";
VIERA_connection(VIERA_BuildXML_NetCtrl($hash,$state), $host);
break;
}
when("?"){
return "$usage";
break;
}
default{
Log3 $name, 3, "VIERA: Unknown argument $what, $usage";
return "Unknown argument $what, $usage";
};
} }
return undef; return undef;
} }
# Callback when 'get' is used at FHEM
# Param1: Hash of FHEM-Device
# Param2: String of 'set' command
# Return: Help text for FHEMWEB
sub VIERA_Get($@){ sub VIERA_Get($@){
my ($hash, @a) = @_; my ($hash, @a) = @_;
my $what; my $what;
@ -302,29 +309,51 @@ sub VIERA_Get($@){
} }
} }
# Callback when 'delete' is used at FHEM or FHEM is restarting/shutdown
# Param1: Hash of FHEM-Device
# Param2: Name of FHEM-Device
# Return: undef
sub VIERA_Undefine($$){ sub VIERA_Undefine($$){
my($hash, $name) = @_; my($hash, $name) = @_;
# Stop the internal GetStatus-Loop and exist # Stop the internal GetStatus-Loop and exist
RemoveInternalTimer($hash); RemoveInternalTimer($hash);
BlockingKill($hash->{helper}{RUNNING_PID_GET}) if(defined($hash->{helper}{RUNNING_PID_GET}));
return undef; return undef;
} }
# Function is called periodically by InternalTimer and fetch informations from device. The decision if blocking or nonBlocking is used is made here.
# Param1: Hash of FHEM-Device
# Param2: Optional, if set to 1 fetch information from device without interrupting InternalTimer
sub VIERA_GetStatus($;$){ sub VIERA_GetStatus($;$){
my ($hash, $local) = @_; my ($hash, $local) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
my $host = $hash->{helper}{HOST}; my $host = $hash->{helper}{HOST};
my $blocking = AttrVal($name, "blocking", 0); #use non-blocking in standard. Just use blocking when set by attr
#if $local is set to 1 just fetch informations from device without interupting InternalTimer #if $local is set to 1 just fetch informations from device without interrupting InternalTimer
$local = 0 unless(defined($local)); $local = 0 unless(defined($local));
InternalTimer(gettimeofday()+$hash->{helper}{INTERVAL}, "VIERA_GetStatus", $hash, 0) unless($local == 1); InternalTimer(gettimeofday()+$hash->{helper}{INTERVAL}, "VIERA_GetStatus", $hash, 0) unless($local == 1);
return "" if(!defined($hash->{helper}{HOST}) or !defined($hash->{helper}{INTERVAL})); return "" if(!defined($hash->{helper}{HOST}) or !defined($hash->{helper}{INTERVAL}));
my $returnVol = VIERA_connection(VIERA_BuildXML_RendCtrl($hash, "Get", "Volume", ""), $host); if ($blocking == 0) {
Log3 $name, 5, "VIERA: GetStatusVol-Request returned: $returnVol" if(defined($returnVol)); Log3 $name, 4, "VIERA[VIERA_GetStatus]: Using non blocking...";
$hash->{helper}{RUNNING_PID_GET} = BlockingCall("VIERA_GetDoIt", $hash, "VIERA_GetDone", 10, "VIERA_GetAbortFn", $hash) unless(exists($hash->{helper}{RUNNING_PID_GET}));
if($hash->{helper}{RUNNING_PID_GET}) {
Log3 $name, 4, "VIERA[VIERA_GetStatus]: VIERA_GetDoIt() BlockingCall process started with PID $hash->{helper}{RUNNING_PID_GET}{pid}";
}
else {
Log3 $name, 3, "VIERA[VIERA_GetStatus]: BlockingCall process start failed for VIERA_GetDoIt()";
}
return;
}
Log3 $name, 4, "VIERA[VIERA_GetStatus]: Using blocking...";
my $returnVol = VIERA_connection($hash, VIERA_BuildXML_RendCtrl($hash, "Get", "Volume", ""));
Log3 $name, 5, "VIERA[VIERA_GetStatus]: Vol-Request returned: $returnVol" if(defined($returnVol));
if(not defined($returnVol) or $returnVol eq "") { if(not defined($returnVol) or $returnVol eq "") {
Log3 $name, 4, "VIERA: GetStatusVol-Request NO SOCKET!"; Log3 $name, 4, "VIERA[VIERA_GetStatus]: Vol-Request NO SOCKET!";
if( ReadingsVal($name,"state","absent") ne "absent") { if( ReadingsVal($name,"state","absent") ne "absent") {
readingsBeginUpdate($hash); readingsBeginUpdate($hash);
readingsBulkUpdate($hash, "state", "absent"); readingsBulkUpdate($hash, "state", "absent");
@ -335,10 +364,10 @@ sub VIERA_GetStatus($;$){
return; return;
} }
my $returnMute = VIERA_connection(VIERA_BuildXML_RendCtrl($hash, "Get", "Mute", ""), $host); my $returnMute = VIERA_connection($hash, VIERA_BuildXML_RendCtrl($hash, "Get", "Mute", ""));
Log3 $name, 5, "VIERA: GetStatusMute-Request returned: $returnMute" if(defined($returnMute)); Log3 $name, 5, "VIERA[VIERA_GetStatus]: Mute-Request returned: $returnMute" if(defined($returnMute));
if(not defined($returnMute) or $returnMute eq "") { if(not defined($returnMute) or $returnMute eq "") {
Log3 $name, 4, "VIERA: GetStatusMute-Request NO SOCKET!"; Log3 $name, 4, "VIERA[VIERA_GetStatus]: Mute-Request NO SOCKET!";
if( ReadingsVal($name,"state","absent") ne "absent") { if( ReadingsVal($name,"state","absent") ne "absent") {
readingsBeginUpdate($hash); readingsBeginUpdate($hash);
readingsBulkUpdate($hash, "state", "absent"); readingsBulkUpdate($hash, "state", "absent");
@ -351,14 +380,14 @@ sub VIERA_GetStatus($;$){
readingsBeginUpdate($hash); readingsBeginUpdate($hash);
if($returnVol =~ /<CurrentVolume>(.+)<\/CurrentVolume>/){ if($returnVol =~ /<CurrentVolume>(.+)<\/CurrentVolume>/){
Log3 $name, 4, "VIERA: GetStatus-Set reading volume to $1"; Log3 $name, 4, "VIERA[VIERA_GetStatus]: Set reading volume to $1";
if( $1 != ReadingsVal($name, "volume", "0") ) {readingsBulkUpdate($hash, "volume", $1);} if( $1 != ReadingsVal($name, "volume", "0") ) {readingsBulkUpdate($hash, "volume", $1);}
} }
if($returnMute =~ /<CurrentMute>(.+)<\/CurrentMute>/){ if($returnMute =~ /<CurrentMute>(.+)<\/CurrentMute>/){
my $myMute = $1; my $myMute = $1;
if ($myMute == 0) { $myMute = "off"; } else { $myMute = "on";} if ($myMute == 0) { $myMute = "off"; } else { $myMute = "on";}
Log3 $name, 4, "VIERA: GetStatus-Set reading mute to $myMute"; Log3 $name, 4, "VIERA[VIERA_GetStatus]: Set reading mute to $myMute";
if( $myMute ne ReadingsVal($name, "mute", "0") ) {readingsBulkUpdate($hash, "mute", $myMute);} if( $myMute ne ReadingsVal($name, "mute", "0") ) {readingsBulkUpdate($hash, "mute", $myMute);}
} }
if( ReadingsVal($name,"state","absent") ne "on") { if( ReadingsVal($name,"state","absent") ne "on") {
@ -368,88 +397,132 @@ sub VIERA_GetStatus($;$){
} }
readingsEndUpdate($hash, 1); readingsEndUpdate($hash, 1);
#Log3 $name, 4, "VIERA $name: $hash->{STATE}";
return $hash->{STATE}; return $hash->{STATE};
} }
# To sent RAW-Data as TCP Client to device
# param1: Hash of FHEM-Device
# param2: RAW Data
#return: RAW answer when successful or undef if no socket is available.
sub VIERA_connection($$){ sub VIERA_connection($$){
my $tmp = shift ; my ($hash, $data) = @_;
my $TV = shift; my $name = $hash->{NAME};
my $buffer = ""; my $buffer = "";
my $tmp2 = ""; my $buff = "";
my $blocking = "NonBlocking-VIERA_connection()" if (AttrVal($name, "blocking", 0) == 0);
$blocking = "Blocking-VIERA_connection()" if (AttrVal($name, "blocking", 0) == 1);
my $sock = new IO::Socket::INET ( my $sock = new IO::Socket::INET (
PeerAddr => $TV, PeerAddr => $hash->{helper}{HOST},
PeerPort => '55000', PeerPort => $hash->{helper}{PORT},
Proto => 'tcp', Proto => 'tcp',
Timeout => 2 Timeout => 2
); );
#Log3 $name, 5, "VIERA: connection message: $tmp"; if(defined ($sock)) {
Log3 $hash, 5, "VIERA[$blocking]: Send Data to $hash->{helper}{HOST}:$hash->{helper}{PORT}:\n$data";
print $sock $data;
if(defined ($sock)){ while ((read $sock, $buff, 1024) > 0){
print $sock $tmp;
my $buff ="";
while ((read $sock, $buff, 1) > 0){
$buffer .= $buff; $buffer .= $buff;
} }
my @tmp2 = split (/\n/,$buffer); Log3 $hash, 5, "VIERA[$blocking]: $hash->{helper}{HOST} buffer response:\n$buffer";
#Log3 $name, 4, "VIERA: $TV response: $tmp2[0]";
#Log3 $name, 5, "VIERA: $TV buffer response: $buffer";
$sock->close(); $sock->close();
return $buffer; return $buffer;
} }
else{ else {
#Log3 $name, 4, "VIERA: $TV: not able to open socket"; Log3 $hash, 4, "VIERA[$blocking]: $hash->{helper}{HOST}: not able to open socket";
return undef; return undef;
} }
} }
#####################################
# Callback from 95_remotecontrol for command makenotify. # Callback from 95_remotecontrol for command makenotify.
# Param1: Name of remoteControl device
# Param2: Name of target FHEM device
sub VIERA_RCmakenotify($$) { sub VIERA_RCmakenotify($$) {
my ($nam, $ndev) = @_; my ($nam, $ndev) = @_;
my $nname="notify_$nam"; my $nname="notify_$nam";
fhem("define $nname notify $nam set $ndev remoteControl ".'$EVENT',1); fhem("define $nname notify $nam set $ndev remoteControl ".'$EVENT',1);
Log3 undef, 2, "[remotecontrol:VIERA] Notify created: $nname"; Log3 undef, 2, "[remoteControl:VIERA] Notify created: $nname";
return "Notify created by VIERA: $nname"; return "Notify created by VIERA: $nname";
} }
##################################### # Callback from 95_remotecontrol for command layout. Creates non svg layout
# Default-layout for panasonic TV (maybe other VIERA devices will have other layouts)
sub VIERA_RClayout_TV() { sub VIERA_RClayout_TV() {
my @row; my @row;
my $i = 0;
$row[0]="power:POWEROFF2,TV, CHG_INPUT:HDMI"; $row[$i++]="power:POWEROFF2, TV, CHG_INPUT:HDMI";
$row[1]="MENU, disp_mode:ASPECT,epg:GUIDE"; $row[$i++]="MENU, disp_mode:ASPECT, epg:GUIDE";
$row[2]="VIERA_LINK,VTOOLS,INTERNET"; $row[$i++]="VIERA_LINK, VTOOLS, INTERNET";
$row[3]=":blank,:blank,:blank"; $row[$i++]=":blank, :blank, :blank";
$row[4]="INFO:INFO2,UP,cancel:EXIT"; $row[$i++]="INFO:INFO2, UP, cancel:EXIT";
$row[5]="LEFT,ENTER,RIGHT"; $row[$i++]="LEFT, ENTER, RIGHT";
$row[6]="SUBMENU,DOWN,RETURN"; $row[$i++]="SUBMENU, DOWN, RETURN";
$row[7]=":blank,:blank,:blank"; $row[$i++]="red:RED, :blank, green:GREEN";
$row[8]="d1:1,d2:2,d3:3"; $row[$i++]="yellow:YELLOW, :blank, blue:BLUE";
$row[9]="d4:4,d5:5,d6:6"; $row[$i++]="d1:1, d2:2, d3:3";
$row[10]="d7:7,d8:8,d9:9"; $row[$i++]="d4:4, d5:5, d6:6";
$row[11]="MUTE,d0:0,r_tune:PRECH"; $row[$i++]="d7:7, d8:8, d9:9";
$row[12]=":blank,:blank,:blank"; $row[$i++]="MUTE, d0:0, r_tune:PRECH";
$row[13]="VOLUP,:blank,ch_up:CHUP"; $row[$i++]=":blank, :blank, :blank";
$row[14]=":VOL,:blank,:PROG"; $row[$i++]="VOLUP, :blank, ch_up:CHUP";
$row[15]="VOLDOWN,:blank,ch_down:CHDOWN"; $row[$i++]=":VOL, :blank, :PROG";
$row[16]=":blank,:blank,:blank"; $row[$i++]="VOLDOWN, :blank, ch_down:CHDOWN";
$row[17]="rew:REWIND,PLAY,FF"; $row[$i++]=":blank, :blank, :blank";
$row[18]="STOP,PAUSE,REC"; $row[$i++]="rew:REWIND, PLAY, FF";
$row[$i++]="STOP, PAUSE, REC";
#Replace two or more spaces with one space
for (@row) {s/\s+/ /g}
$row[$i++]="attr rc_iconpath icons/remotecontrol";
$row[$i++]="attr rc_iconprefix black_btn_";
$row[19]="attr rc_iconpath icons/remotecontrol";
$row[20]="attr rc_iconprefix black_btn_";
return @row; return @row;
} }
# Callback from 95_remotecontrol for command layout. Creates svg layout
sub VIERA_RClayout_TV_SVG() {
my @row;
my $i = 0;
$row[$i++]="power:rc_POWER.svg, TV:rc_TV2.svg, CHG_INPUT:rc_AV.svg";
$row[$i++]="MENU:rc_MENU.svg, disp_mode:rc_ASPECT.svg, epg:rc_EPG.svg";
$row[$i++]="VIERA_LINK:rc_VIERA_LINK.svg, VTOOLS:rc_VIERA_TOOLS.svg, INTERNET:rc_WEB.svg";
$row[$i++]=":rc_BLANK.svg, :rc_BLANK.svg, :rc_BLANK.svg";
$row[$i++]="INFO:rc_INFO2.svg, UP:rc_UP.svg, cancel:rc_EXIT.svg";
$row[$i++]="LEFT:rc_LEFT.svg, ENTER:rc_dot.svg, RIGHT:rc_RIGHT.svg";
$row[$i++]="SUBMENU:rc_OPTIONS.svg, DOWN:rc_DOWN.svg, RETURN:rc_BACK.svg";
$row[$i++]="red:rc_RED.svg, :rc_BLANK.svg, green:rc_GREEN.svg";
$row[$i++]="yellow:rc_YELLOW.svg, :rc_BLANK.svg, blue:rc_BLUE.svg";
$row[$i++]="d1:rc_1.svg, d2:rc_2.svg, d3:rc_3.svg";
$row[$i++]="d4:rc_4.svg, d5:rc_5.svg, d6:rc_6.svg";
$row[$i++]="d7:rc_7.svg, d8:rc_8.svg, d9:rc_9.svg";
$row[$i++]="MUTE:rc_MUTE.svg, d0:rc_0.svg, r_tune:rc_BACK.svg";
$row[$i++]=":rc_BLANK.svg, :rc_BLANK.svg, :rc_BLANK.svg";
$row[$i++]="VOLUP:rc_UP.svg, :rc_BLANK.svg, ch_up:rc_UP.svg";
$row[$i++]=":rc_VOL.svg, :rc_BLANK.svg, :rc_PROG.svg";
$row[$i++]="VOLDOWN:rc_DOWN.svg, :rc_BLANK.svg, ch_down:rc_DOWN.svg";
$row[$i++]=":rc_BLANK.svg, :rc_BLANK.svg, :rc_BLANK.svg";
$row[$i++]="rew:rc_REW.svg, PLAY:rc_PLAY.svg, FF:rc_FF.svg";
$row[$i++]="STOP:rc_STOP.svg, PAUSE:rc_PAUSE.svg, REC:rc_REC.svg";
#Replace two or more spaces with one space
for (@row) {s/\s+/ /g}
return @row;
}
# Create RAW Data to sent pressed keys of remoteControl to device.
# Param1: Hash of FHEM-Device
# Param2: Name of key to send
# Return: RAW html request for xml soap
sub VIERA_BuildXML_NetCtrl($$){ sub VIERA_BuildXML_NetCtrl($$){
my ($hash, $command) = @_; my ($hash, $command) = @_;
my $host = $hash->{helper}{HOST}; my $host = $hash->{helper}{HOST};
my $port = $hash->{helper}{PORT};
my $callsoap = ""; my $callsoap = "";
my $message = ""; my $message = "";
@ -468,7 +541,7 @@ sub VIERA_BuildXML_NetCtrl($$){
$size = length($callsoap); $size = length($callsoap);
$head .= "POST /nrc/control_0 HTTP/1.1\r\n"; $head .= "POST /nrc/control_0 HTTP/1.1\r\n";
$head .= "Host: $host:55000\r\n"; $head .= "Host: $host:$port\r\n";
$head .= "SOAPACTION: \"urn:panasonic-com:service:p00NetworkControl:1#X_SendKey\"\r\n"; $head .= "SOAPACTION: \"urn:panasonic-com:service:p00NetworkControl:1#X_SendKey\"\r\n";
$head .= "Content-Type: text/xml; charset=\"utf-8\"\r\n"; $head .= "Content-Type: text/xml; charset=\"utf-8\"\r\n";
$head .= "Content-Length: $size\r\n"; $head .= "Content-Length: $size\r\n";
@ -476,20 +549,27 @@ sub VIERA_BuildXML_NetCtrl($$){
$message .= $head; $message .= $head;
$message .= $callsoap; $message .= $callsoap;
Log3 $hash, 5, "VIERA: Building XML SOAP (NetworkControl) for command $command to host $host:\n$message"; #Log3 $hash, 5, "VIERA: Building XML SOAP (NetworkControl) for command $command to host $host:\n$message";
return $message; return $message;
} }
# Create RAW Data to send or get volume/mute state
# Param1: Hash of FHEM-Device
# Param2: get|set
# Param3: volume|mute
# Param4: value for set command
# Return: RAW html request for xml soap
sub VIERA_BuildXML_RendCtrl($$$$){ sub VIERA_BuildXML_RendCtrl($$$$){
my ($hash, $methode, $command, $value) = @_; my ($hash, $methode, $command, $value) = @_;
my $host = $hash->{helper}{HOST}; my $host = $hash->{helper}{HOST};
my $port = $hash->{helper}{PORT};
my $callsoap = ""; my $callsoap = "";
my $message = ""; my $message = "";
my $head = ""; my $head = "";
my $size = ""; my $size = "";
Log3 $hash, 5, "DEBUG: $command with $value to $host"; #Log3 $hash, 5, "VIERA: $command with $value to $host";
$callsoap .= "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n"; $callsoap .= "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n";
$callsoap .= "<s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">\r\n"; $callsoap .= "<s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">\r\n";
@ -504,8 +584,8 @@ sub VIERA_BuildXML_RendCtrl($$$$){
$size = length($callsoap); $size = length($callsoap);
$head .= "POST /dmr/control_0 HTTP/1.1\r\n"; $head .= "POST /dmr/control_0 HTTP/1.0\r\n";
$head .= "Host: $host:55000\r\n"; $head .= "Host: $host:$port\r\n";
$head .= "SOAPACTION: \"urn:schemas-upnp-org:service:RenderingControl:1#$methode$command\"\r\n"; $head .= "SOAPACTION: \"urn:schemas-upnp-org:service:RenderingControl:1#$methode$command\"\r\n";
$head .= "Content-Type: text/xml; charset=\"utf-8\"\r\n"; $head .= "Content-Type: text/xml; charset=\"utf-8\"\r\n";
$head .= "Content-Length: $size\r\n"; $head .= "Content-Length: $size\r\n";
@ -513,9 +593,133 @@ sub VIERA_BuildXML_RendCtrl($$$$){
$message .= $head; $message .= $head;
$message .= $callsoap; $message .= $callsoap;
Log3 $hash, 5, "VIERA: Building XML SOAP (RenderingControl) for command $command with value $value to host $host:\n$message"; #Log3 $hash, 5, "VIERA: Building XML SOAP (RenderingControl) for command $command with value $value to host $host:\n$message";
return $message; return $message;
} }
# Get volume and mute state from device. This function is called non blocking!
# Param1: Hash of FHEM-Device
# Return: <name of fhem-device>|<volume level>|<mute state>
sub VIERA_GetDoIt($) {
my ($hash) = @_;
my $myVol = "";
my $myMute = "";
Log3 $hash, 4, "VIERA[NonBlocking-VIERA_GetDoIt()]: BlockingCall for ".$hash->{NAME}." start...";
my $returnVol = VIERA_connection($hash, VIERA_BuildXML_RendCtrl($hash, "Get", "Volume", ""));
Log3 $hash, 5, "VIERA[NonBlocking-VIERA_GetDoIt()]: GetStatusVol-Request returned: $returnVol" if(defined($returnVol));
if(not defined($returnVol) or $returnVol eq "") {
Log3 $hash, 4, "VIERA[NonBlocking-VIERA_GetDoIt()]: GetStatusVol-Request NO SOCKET!";
return $hash->{NAME}. "|".
"error-noSocket" . "|".
"error-noSocket";
}
my $returnMute = VIERA_connection($hash, VIERA_BuildXML_RendCtrl($hash, "Get", "Mute", ""));
Log3 $hash, 5, "VIERA[NonBlocking-VIERA_GetDoIt()]: GetStatusMute-Request returned: $returnMute" if(defined($returnMute));
if(not defined($returnMute) or $returnMute eq "") {
Log3 $hash, 4, "VIERA[NonBlocking-VIERA_GetDoIt()]: GetStatusMute-Request NO SOCKET!";
return $hash->{NAME}. "|".
"error-noSocket" . "|".
"error-noSocket";
}
if ($returnVol =~ /HTTP\/1\.1 ([\d]{3}) (.*)/) {
Log3 $hash, 4, "VIERA[NonBlocking-VIERA_GetDoIt()]: Received HTTP Code $1 $2";
$myVol = "error-$1 $2" if ($1 ne "200");
}
if($returnVol =~ /<CurrentVolume>(.+)<\/CurrentVolume>/){
$myVol = $1;
Log3 $hash, 4, "VIERA[NonBlocking-VIERA_GetDoIt()]: Received volume with level $myVol";
}
if ($returnMute =~ /HTTP\/1\.1 ([\d]{3}) (.*)/) {
Log3 $hash, 4, "VIERA[NonBlocking-VIERA_GetDoIt()]: Received HTTP Code $1 $2";
$myMute = "error-$1 $2" if ($1 ne "200");
}
if($returnMute =~ /<CurrentMute>(.+)<\/CurrentMute>/){
$myMute = $1;
if ($myMute == 0) { $myMute = "off"; } else { $myMute = "on";}
Log3 $hash, 4, "VIERA[NonBlocking-VIERA_GetDoIt()]: Received mute state $myMute";
}
return $hash->{NAME}. "|".
"$myVol" . "|".
"$myMute";
}
# Callback of non blocking function VIERA_GetDoIt. Parse the results and set readings at fhem-device
# Param1: <name of fhem-device>|<volume level>|<mute state>
# volume level = 0 - 100
# mute state = 1 or 0
# If no socket is available Par1 and Par2 contains "error"
# Return: no return code
####################################################
sub VIERA_GetDone($) {
my ($string) = @_;
return unless(defined($string));
my @a = split("\\|",$string);
my $name = shift(@a);
my $myVol = shift(@a);
my $myMute = shift(@a);
my $hash = $defs{$name};
Log3 $hash, 4, "VIERA[NonBlocking-VIERA_GetDone()]: Param: $string";
if ($myVol =~ /error-(.*)/ || $myMute =~ /error-(.*)/) {
if ($1 eq "noSocket") {
Log3 $name, 4, "VIERA[NonBlocking-VIERA_GetDone()]: Seems to be there is no socket available. Guessing TV is off!";
if (ReadingsVal($name,"state","absent") ne "absent") {
readingsBeginUpdate($hash);
readingsBulkUpdate($hash, "state", "absent");
readingsBulkUpdate($hash, "power", "off");
readingsBulkUpdate($hash, "presence", "absent");
readingsEndUpdate($hash, 1);
}
delete($hash->{helper}{RUNNING_PID_GET});
return;
}
else {
Log3 $name, 3, "VIERA[NonBlocking-VIERA_GetDone()]: TV answered with $1. Seems to be on but delivering no data";
return;
}
}
readingsBeginUpdate($hash);
if ($myVol != ReadingsVal($name, "volume", "0")) {
Log3 $hash, 4, "VIERA[NonBlocking-VIERA_GetDone()]: Set reading volume to $myVol";
readingsBulkUpdate($hash, "volume", $myVol);
}
if ($myMute ne ReadingsVal($name, "mute", "0")) {
Log3 $name, 4, "VIERA[NonBlocking-VIERA_GetDone()]: Set reading mute to $myMute";
readingsBulkUpdate($hash, "mute", $myMute);
}
if (ReadingsVal($name,"state","absent") ne "on") {
readingsBulkUpdate($hash, "state", "on");
readingsBulkUpdate($hash, "power", "on");
readingsBulkUpdate($hash, "presence", "present");
}
readingsEndUpdate($hash, 1);
delete($hash->{helper}{RUNNING_PID_GET});
}
# Callback of non blocking when function VIERA_GetDoIt runs into timeout.
# Param1: Hash of FHEM-Device
# Return: no return code
sub VIERA_GetAbortFn($) {
my ($hash) = @_;
delete($hash->{helper}{RUNNING_PID_GET});
Log3 $hash, 2, "VIERA[NonBlocking-VIERA_GetAbortFn()]: BlockingCall for $hash->{NAME} was aborted, timeout reached";
}
1; 1;
=pod =pod
@ -537,7 +741,11 @@ sub VIERA_BuildXML_RendCtrl($$$$){
Defining a VIERA device will schedule an internal task (interval can be set Defining a VIERA device will schedule an internal task (interval can be set
with optional parameter &lt;interval&gt; in seconds, if not set, the value is 30 with optional parameter &lt;interval&gt; in seconds, if not set, the value is 30
seconds), which periodically reads the status of volume and mute status and triggers seconds), which periodically reads the status of volume and mute status and triggers
notify/filelog commands.<br><br> notify/filelog commands.
<br><br>
<b>Notes:</b><br>
<ul>Activate volume remotecontrol by DLNA: Menu -> Setup -> Network Setup -> Network Link Settings -> DLNA RemoteVolume -> On</ul>
<br>
Example: Example:
<ul><code> <ul><code>
define myTV1 VIERA 192.168.178.20<br><br> define myTV1 VIERA 192.168.178.20<br><br>
@ -564,6 +772,7 @@ sub VIERA_BuildXML_RendCtrl($$$$){
channelDown<br> channelDown<br>
statusRequest<br> statusRequest<br>
remoteControl &lt;command&gt;<br> remoteControl &lt;command&gt;<br>
input [hdmi1|hdmi2|hdmi3|hdmi4|sdCard|tv]<br>
</code> </code>
</ul> </ul>
</ul> </ul>
@ -634,10 +843,6 @@ sub VIERA_BuildXML_RendCtrl($$$$){
set &lt;name&gt; volume 20<br> set &lt;name&gt; volume 20<br>
set &lt;name&gt; remoteControl CH_DOWN<br> set &lt;name&gt; remoteControl CH_DOWN<br>
</code></ul> </code></ul>
<br>
Notes:<br>
<ul>Activate volume remotecontrol by DLNA: Menu -> Setup -> Network Setup -> Network Link Settings -> DLNA RemoteVolume -> On</ul>
</ul> </ul>
<br> <br>
@ -658,7 +863,7 @@ sub VIERA_BuildXML_RendCtrl($$$$){
<br> <br>
<a name="VIERAattr"></a> <a name="VIERAattr"></a>
<b>Attributes</b> <b>Attributes</b>
<ul>N/A</ul> <ul>blocking [0|1]</ul>
<br> <br>
<a name="VIERAevents"></a> <a name="VIERAevents"></a>
@ -694,6 +899,9 @@ sub VIERA_BuildXML_RendCtrl($$$$){
den Status der Lautst&auml;rke und des Mute-Zustand ausliest. Das Intervall des Timer kann &uuml;ber den Parameter &lt;interval&gt; den Status der Lautst&auml;rke und des Mute-Zustand ausliest. Das Intervall des Timer kann &uuml;ber den Parameter &lt;interval&gt;
ge&auml;ndert werden. Wird kein Interval angegeben, liest das Modul alle 30 Sekunden die Werte aus und triggert ein notify. ge&auml;ndert werden. Wird kein Interval angegeben, liest das Modul alle 30 Sekunden die Werte aus und triggert ein notify.
<br><br> <br><br>
<b>Anmerkung:</b><br>
<ul>Aktivieren von Fernbedienung der Lautst&auml;rke per DLNA: Men&uuml; -> Setup -> Netzwerk-Setup -> Netzwerkverbindungsein. -> DLNA-Fernbed. Lautst. -> Ein</ul>
<br>
Beispiel: Beispiel:
<ul><code> <ul><code>
define myTV1 VIERA 192.168.178.20<br><br> define myTV1 VIERA 192.168.178.20<br><br>
@ -719,6 +927,7 @@ sub VIERA_BuildXML_RendCtrl($$$$){
channelDown<br> channelDown<br>
statusRequest<br> statusRequest<br>
remoteControl &lt;command&gt;<br> remoteControl &lt;command&gt;<br>
input [hdmi1|hdmi2|hdmi3|hdmi4|sdCard|tv]<br>
</code></ul> </code></ul>
</ul> </ul>
<ul> <ul>
@ -788,10 +997,6 @@ sub VIERA_BuildXML_RendCtrl($$$$){
set &lt;name&gt; volume 20<br> set &lt;name&gt; volume 20<br>
set &lt;name&gt; remoteControl CH_DOWN<br> set &lt;name&gt; remoteControl CH_DOWN<br>
</code></ul> </code></ul>
<br>
Anmerkung:<br>
<ul>Aktivieren von Fernbedienung der Lautst&auml;rke per DLNA: Men&uuml; -> Setup -> Netzwerk-Setup -> Netzwerkverbindungsein. -> DLNA-Fernbed. Lautst. -> Ein</ul>
</ul> </ul>
<br> <br>
@ -812,7 +1017,7 @@ sub VIERA_BuildXML_RendCtrl($$$$){
<br> <br>
<a name="VIERAattr"></a> <a name="VIERAattr"></a>
<b>Attribute</b> <b>Attribute</b>
<ul>N/A</ul> <ul>blocking [0|1]</ul>
<br> <br>
<a name="VIERAevents"></a> <a name="VIERAevents"></a>

View File

@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.0"
width="468pt"
height="468pt"
viewBox="0 0 468 468"
id="svg2"
inkscape:version="0.91 r13725"
sodipodi:docname="rc_ASPECT.svg">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1005"
id="namedview3363"
showgrid="false"
inkscape:zoom="1.31"
inkscape:cx="352.91661"
inkscape:cy="281.30022"
inkscape:window-x="-9"
inkscape:window-y="891"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
inkscape:snap-grids="true"
showguides="false" />
<defs
id="defs12" />
<metadata
id="metadata4">
Created by potrace 1.8, written by Peter Selinger 2001-2007
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
transform="matrix(0.189474,0,0,-0.189474,0,468)"
id="g6">
<path
d="M 395,2455 C 244,2422 112,2322 57,2200 5,2083 6,2112 2,1260 0,702 2,446 10,400 43,208 198,52 398,11 c 71,-15 1628,-15 1692,0 174,40 322,190 365,370 22,94 22,1579 0,1683 -21,98 -66,187 -127,252 -61,64 -113,98 -201,128 -61,21 -75,21 -867,23 -640,1 -817,-1 -865,-12 z m 1737,-163 c 74,-36 132,-95 170,-170 l 23,-47 0,-840 0,-840 -28,-57 c -37,-76 -96,-134 -171,-169 l -63,-29 -839,2 -839,3 -50,27 C 273,204 196,285 167,348 l -22,47 0,840 0,840 27,52 c 53,100 128,162 227,189 35,10 236,12 856,11 l 810,-2 67,-33 z"
id="path8" />
</g>
<g
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:120px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
id="text2993">
<path
d="m 120.5918,268.71982 -18.86719,0 -7.500001,-19.51172 -34.335937,0 -7.089844,19.51172 -18.398437,0 33.457031,-85.89844 18.339844,0 34.394534,85.89844 z m -31.933597,-33.98438 -11.835937,-31.875 -11.601563,31.875 23.4375,0 z"
style=""
id="path3384" />
<path
d="m 124.16602,250.96591 16.52343,-2.51953 q 1.05469,4.80469 4.27735,7.32422 3.22265,2.46094 9.02343,2.46094 6.38672,0 9.60938,-2.34375 2.16797,-1.64063 2.16797,-4.39453 0,-1.875 -1.17188,-3.10547 -1.23047,-1.17188 -5.50781,-2.16797 -19.92187,-4.39453 -25.25391,-8.02735 -7.38281,-5.03906 -7.38281,-14.0039 0,-8.08594 6.38672,-13.59375 6.38672,-5.50781 19.80469,-5.50781 12.77344,0 18.98437,4.16015 6.21094,4.16016 8.55469,12.30469 l -15.52734,2.87109 q -0.9961,-3.63281 -3.8086,-5.5664 -2.7539,-1.9336 -7.91015,-1.9336 -6.50391,0 -9.31641,1.81641 -1.875,1.28906 -1.875,3.33984 0,1.75782 1.64063,2.98828 2.22656,1.64063 15.35156,4.62891 13.18359,2.98828 18.39844,7.32422 5.15625,4.39453 5.15625,12.24609 0,8.55469 -7.14844,14.70703 -7.14844,6.15235 -21.15235,6.15235 -12.71484,0 -20.15625,-5.15625 -7.38281,-5.15625 -9.66796,-14.00391 z"
style=""
id="path3386" />
<path
d="m 196.29492,206.49326 15.35156,0 0,9.14062 q 2.98829,-4.6875 8.08594,-7.61719 5.09766,-2.92968 11.3086,-2.92968 10.83984,0 18.39843,8.49609 7.5586,8.49609 7.5586,23.67187 0,15.58594 -7.61719,24.25782 -7.61719,8.61328 -18.45703,8.61328 -5.15625,0 -9.375,-2.05078 -4.16016,-2.05078 -8.78906,-7.03125 l 0,31.34765 -16.46485,0 0,-85.89843 z m 16.28906,30.05859 q 0,10.48828 4.16016,15.52734 4.16016,4.98047 10.13672,4.98047 5.74219,0 9.55078,-4.57031 3.80859,-4.62891 3.80859,-15.11719 0,-9.78515 -3.92578,-14.53125 -3.92578,-4.74609 -9.72656,-4.74609 -6.03516,0 -10.01953,4.6875 -3.98438,4.6289 -3.98438,13.76953 z"
style=""
id="path3388" />
<path
d="m 306.1582,248.91513 16.40625,2.75391 q -3.16406,9.02343 -10.01953,13.76953 -6.79687,4.6875 -17.05078,4.6875 -16.23047,0 -24.02344,-10.60547 -6.15234,-8.49609 -6.15234,-21.44531 0,-15.46875 8.08594,-24.19922 8.08593,-8.78906 20.44922,-8.78906 13.88671,0 21.91406,9.19921 8.02734,9.14063 7.67578,28.06641 l -41.25,0 q 0.17578,7.32422 3.98437,11.42578 3.8086,4.04297 9.49219,4.04297 3.86719,0 6.50391,-2.10937 2.63672,-2.10938 3.98437,-6.79688 z m 0.9375,-16.64062 q -0.17578,-7.14844 -3.6914,-10.83985 -3.51563,-3.75 -8.55469,-3.75 -5.39063,0 -8.90625,3.92578 -3.51563,3.92578 -3.45703,10.66407 l 24.60937,0 z"
style=""
id="path3390" />
<path
d="m 391.17773,224.89169 -16.23046,2.92969 q -0.82032,-4.86328 -3.75,-7.32422 -2.8711,-2.46094 -7.5,-2.46094 -6.15235,0 -9.84375,4.27735 -3.63282,4.21875 -3.63282,14.17969 0,11.07421 3.69141,15.64453 3.75,4.57031 10.01953,4.57031 4.6875,0 7.67578,-2.63672 2.98828,-2.69531 4.21875,-9.19922 l 16.17188,2.75391 q -2.51953,11.13281 -9.66797,16.8164 -7.14844,5.6836 -19.16016,5.6836 -13.65234,0 -21.79687,-8.61328 -8.08594,-8.61328 -8.08594,-23.84766 0,-15.41016 8.14453,-23.96484 8.14453,-8.61328 22.03125,-8.61328 11.36719,0 18.04688,4.92187 6.73828,4.86328 9.66796,14.88281 z"
style=""
id="path3392" />
<path
d="m 432.25195,206.49326 0,13.125 -11.25,0 0,25.07812 q 0,7.61719 0.29297,8.90625 0.35156,1.23047 1.46485,2.05078 1.17187,0.82031 2.8125,0.82031 2.28515,0 6.62109,-1.58203 l 1.40625,12.77344 q -5.74219,2.46094 -13.00781,2.46094 -4.45313,0 -8.02735,-1.46485 -3.57422,-1.52343 -5.27343,-3.86718 -1.64063,-2.40235 -2.28516,-6.44532 -0.52734,-2.87109 -0.52734,-11.60156 l 0,-27.1289 -7.5586,0 0,-13.125 7.5586,0 0,-12.36329 16.52343,-9.60937 0,21.97266 11.25,0 z"
style=""
id="path3394" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.0"
width="21.75pt"
height="1.5pt"
viewBox="0 0 468 468"
id="svg2"
inkscape:version="0.91 r13725"
sodipodi:docname="rc_BLANK2.svg">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1005"
id="namedview3339"
showgrid="false"
inkscape:zoom="1.0181848"
inkscape:cx="268.33048"
inkscape:cy="269.56994"
inkscape:window-x="-9"
inkscape:window-y="891"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
units="pt" />
<defs
id="defs12" />
<metadata
id="metadata4">
Created by potrace 1.8, written by Peter Selinger 2001-2007
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.0"
width="468pt"
height="468pt"
viewBox="0 0 468 468"
id="svg2"
inkscape:version="0.91 r13725"
sodipodi:docname="rc_INFO2.svg">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1005"
id="namedview3363"
showgrid="false"
inkscape:zoom="1.31"
inkscape:cx="352.91661"
inkscape:cy="281.30022"
inkscape:window-x="-9"
inkscape:window-y="891"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
inkscape:snap-grids="true"
showguides="false" />
<defs
id="defs12" />
<metadata
id="metadata4">
Created by potrace 1.8, written by Peter Selinger 2001-2007
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
transform="matrix(0.189474,0,0,-0.189474,0,468)"
id="g6">
<path
d="M 395,2455 C 244,2422 112,2322 57,2200 5,2083 6,2112 2,1260 0,702 2,446 10,400 43,208 198,52 398,11 c 71,-15 1628,-15 1692,0 174,40 322,190 365,370 22,94 22,1579 0,1683 -21,98 -66,187 -127,252 -61,64 -113,98 -201,128 -61,21 -75,21 -867,23 -640,1 -817,-1 -865,-12 z m 1737,-163 c 74,-36 132,-95 170,-170 l 23,-47 0,-840 0,-840 -28,-57 c -37,-76 -96,-134 -171,-169 l -63,-29 -839,2 -839,3 -50,27 C 273,204 196,285 167,348 l -22,47 0,840 0,840 27,52 c 53,100 128,162 227,189 35,10 236,12 856,11 l 810,-2 67,-33 z"
id="path8" />
</g>
<g
style="font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:600px;line-height:125%;font-family:'Angsana New';-inkscape-font-specification:'Angsana New, Bold Italic';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
id="text2993">
<path
d="m 260.29395,97.183594 q 12.01171,0 20.21484,8.203126 8.20312,8.20312 8.20312,20.21484 0,11.86524 -8.34961,20.21485 -8.20312,8.20312 -20.06835,8.20312 -11.71875,0 -20.06836,-8.20312 -8.20313,-8.34961 -8.20313,-20.21485 0,-11.86523 8.20313,-20.06836 8.20312,-8.349606 20.06836,-8.349606 z m 12.01171,88.916016 -39.69726,137.54883 q -3.22266,11.42578 -3.22266,15.38086 0,5.85937 5.41992,5.85937 3.07618,0 6.5918,-2.92969 8.93555,-7.4707 20.80078,-25.92773 l 6.5918,3.95508 q -29.15039,50.83008 -61.96289,50.83008 -27.53906,0 -27.53906,-24.90235 0,-6.88476 3.36914,-18.16406 l 26.80664,-92.43164 q 3.80859,-13.33008 3.80859,-20.21484 0,-10.83985 -13.62305,-10.83985 -2.92968,0 -7.03125,0.29297 l 2.49024,-7.76367 65.625,-10.69336 11.57226,0 z"
style=""
id="path3470" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.0"
width="468pt"
height="234pt"
viewBox="0 0 468 234"
id="svg2"
inkscape:version="0.91 r13725"
sodipodi:docname="rc_PROG2.svg">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1005"
id="namedview3363"
showgrid="false"
inkscape:zoom="1.31"
inkscape:cx="247.95478"
inkscape:cy="281.30022"
inkscape:window-x="-9"
inkscape:window-y="891"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
inkscape:snap-grids="true"
showguides="false" />
<defs
id="defs12" />
<metadata
id="metadata4">
Created by potrace 1.8, written by Peter Selinger 2001-2007
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:133.91000366px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Bold';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
id="text2993"
transform="translate(-4.9999999e-7,-117.00002)">
<path
d="m 45.689051,281.92776 0,-95.8555 31.058228,0 q 17.654151,0 23.015782,1.43849 8.238599,2.15773 13.796389,9.41555 5.55779,7.19243 5.55779,18.63493 0,8.82708 -3.2039,14.84257 -3.2039,6.01549 -8.17322,9.48093 -4.90393,3.40006 -10.004017,4.51162 -6.930889,1.3731 -20.073424,1.3731 l -12.619448,0 0,36.15831 -19.35418,0 z m 19.35418,-79.63983 0,27.20047 10.59249,0 q 11.442506,0 15.300264,-1.50387 3.857759,-1.50388 6.015489,-4.70778 2.223115,-3.2039 2.223115,-7.45397 0,-5.23086 -3.07313,-8.63092 -3.07313,-3.40006 -7.780903,-4.25007 -3.465445,-0.65386 -13.927164,-0.65386 l -9.350161,0 z"
id="path3456"
inkscape:connector-curvature="0" />
<path
d="m 135.20214,281.92776 0,-95.8555 40.73532,0 q 15.36565,0 22.29653,2.61543 6.99628,2.55005 11.18097,9.15401 4.18468,6.60396 4.18468,15.1041 0,10.78865 -6.34241,17.85031 -6.34242,6.99628 -18.96187,8.82708 6.27703,3.6616 10.33095,8.04245 4.1193,4.38084 11.05019,15.5618 l 11.70405,18.70032 -23.14656,0 -13.99255,-20.85805 q -7.45397,-11.18096 -10.20017,-14.05793 -2.7462,-2.94236 -5.81933,-3.98853 -3.07313,-1.11156 -9.74248,-1.11156 l -3.92314,0 0,40.01607 -19.35418,0 z m 19.35418,-55.31633 14.31948,0 q 13.92716,0 17.3926,-1.17695 3.46545,-1.17694 5.42702,-4.05391 1.96157,-2.87698 1.96157,-7.19244 0,-4.83854 -2.61543,-7.7809 -2.55004,-3.00774 -7.25782,-3.79237 -2.35388,-0.32693 -14.12332,-0.32693 l -15.1041,0 0,24.3235 z"
id="path3458"
inkscape:connector-curvature="0" />
<path
d="m 227.9845,234.58849 q 0,-14.64641 4.38085,-24.58504 3.26929,-7.32321 8.89246,-13.14254 5.68856,-5.81933 12.42329,-8.63092 8.95785,-3.79237 20.6619,-3.79237 21.18498,0 33.86981,13.14254 12.75022,13.14253 12.75022,36.55063 0,23.21194 -12.61945,36.35447 -12.61945,13.07715 -33.73904,13.07715 -21.38114,0 -34.00059,-13.01176 Q 227.9845,257.4735 227.9845,234.58849 Z m 19.94266,-0.65386 q 0,16.28105 7.51936,24.71581 7.51936,8.36938 19.09263,8.36938 11.57328,0 18.96187,-8.30399 7.45397,-8.36938 7.45397,-25.04274 0,-16.47721 -7.25781,-24.58504 -7.19244,-8.10784 -19.15803,-8.10784 -11.96559,0 -19.28879,8.23861 -7.3232,8.17322 -7.3232,24.71581 z"
id="path3460"
inkscape:connector-curvature="0" />
<path
d="m 380.59484,246.68485 0,-16.15028 41.71611,0 0,38.18527 q -6.08088,5.88472 -17.65415,10.39634 -11.5079,4.44623 -23.34272,4.44623 -15.03872,0 -26.21968,-6.27703 -11.18096,-6.34242 -16.80413,-18.04647 -5.62318,-11.76943 -5.62318,-25.56582 0,-14.97334 6.27703,-26.612 6.27703,-11.63866 18.3734,-17.85031 9.21939,-4.77316 22.95039,-4.77316 17.85031,0 27.85433,7.51936 10.0694,7.45398 12.94638,20.6619 l -19.22341,3.59621 q -2.02696,-7.06166 -7.65013,-11.11557 -5.55779,-4.11931 -13.92717,-4.11931 -12.68483,0 -20.20419,8.04245 -7.45398,8.04245 -7.45398,23.8658 0,17.06568 7.58475,25.63121 7.58475,8.50015 19.87727,8.50015 6.08087,0 12.16174,-2.35389 6.14626,-2.41927 10.52711,-5.81933 l 0,-12.16175 -22.16577,0 z"
id="path3462"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@ -0,0 +1,75 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.0"
width="468pt"
height="468pt"
viewBox="0 0 468 468"
id="svg2"
inkscape:version="0.91 r13725"
sodipodi:docname="rc_TV2.svg">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1005"
id="namedview3363"
showgrid="false"
inkscape:zoom="1.31"
inkscape:cx="352.91661"
inkscape:cy="281.30022"
inkscape:window-x="-9"
inkscape:window-y="891"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
inkscape:snap-grids="true"
showguides="false" />
<defs
id="defs12" />
<metadata
id="metadata4">
Created by potrace 1.8, written by Peter Selinger 2001-2007
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
transform="matrix(0.189474,0,0,-0.189474,0,468)"
id="g6">
<path
d="M 395,2455 C 244,2422 112,2322 57,2200 5,2083 6,2112 2,1260 0,702 2,446 10,400 43,208 198,52 398,11 c 71,-15 1628,-15 1692,0 174,40 322,190 365,370 22,94 22,1579 0,1683 -21,98 -66,187 -127,252 -61,64 -113,98 -201,128 -61,21 -75,21 -867,23 -640,1 -817,-1 -865,-12 z m 1737,-163 c 74,-36 132,-95 170,-170 l 23,-47 0,-840 0,-840 -28,-57 c -37,-76 -96,-134 -171,-169 l -63,-29 -839,2 -839,3 -50,27 C 273,204 196,285 167,348 l -22,47 0,840 0,840 27,52 c 53,100 128,162 227,189 35,10 236,12 856,11 l 810,-2 67,-33 z"
id="path8" />
</g>
<g
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:133.91000366px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
id="text2993">
<path
d="m 178.4875,281.92776 0,-79.63983 -28.4428,0 0,-16.21567 76.17439,0 0,16.21567 -28.37741,0 0,79.63983 -19.35418,0 z"
style=""
id="path3377" />
<path
d="m 262.96588,281.92776 -34.26213,-95.8555 20.98882,0 24.25811,70.94354 23.47349,-70.94354 20.53112,0 -34.32752,95.8555 -20.66189,0 z"
style=""
id="path3379" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@ -0,0 +1,103 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.0"
width="468pt"
height="468pt"
viewBox="0 0 468 468"
id="svg2"
inkscape:version="0.91 r13725"
sodipodi:docname="rc_VIERA_LINK.svg">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1005"
id="namedview3363"
showgrid="false"
inkscape:zoom="1.31"
inkscape:cx="352.91661"
inkscape:cy="281.30022"
inkscape:window-x="-9"
inkscape:window-y="891"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
inkscape:snap-grids="true"
showguides="false" />
<defs
id="defs12" />
<metadata
id="metadata4">
Created by potrace 1.8, written by Peter Selinger 2001-2007
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
transform="matrix(0.189474,0,0,-0.189474,0,468)"
id="g6">
<path
d="M 395,2455 C 244,2422 112,2322 57,2200 5,2083 6,2112 2,1260 0,702 2,446 10,400 43,208 198,52 398,11 c 71,-15 1628,-15 1692,0 174,40 322,190 365,370 22,94 22,1579 0,1683 -21,98 -66,187 -127,252 -61,64 -113,98 -201,128 -61,21 -75,21 -867,23 -640,1 -817,-1 -865,-12 z m 1737,-163 c 74,-36 132,-95 170,-170 l 23,-47 0,-840 0,-840 -28,-57 c -37,-76 -96,-134 -171,-169 l -63,-29 -839,2 -839,3 -50,27 C 273,204 196,285 167,348 l -22,47 0,840 0,840 27,52 c 53,100 128,162 227,189 35,10 236,12 856,11 l 810,-2 67,-33 z"
id="path8" />
</g>
<g
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:133.91000366px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Bold';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
id="text2993">
<path
d="m 63.73551,198.23399 -34.26213,-95.8555 20.988824,0 24.258111,70.94354 23.473482,-70.94354 20.531123,0 -34.327515,95.8555 -20.661895,0 z"
style=""
id="path3401" />
<path
d="m 128.14047,198.23399 0,-95.8555 19.35418,0 0,95.8555 -19.35418,0 z"
style=""
id="path3403" />
<path
d="m 165.86805,198.23399 0,-95.8555 71.0743,0 0,16.21567 -51.72012,0 0,21.25036 48.12391,0 0,16.15028 -48.12391,0 0,26.08891 53.55092,0 0,16.15028 -72.9051,0 z"
style=""
id="path3405" />
<path
d="m 255.38113,198.23399 0,-95.8555 40.73532,0 q 15.36565,0 22.29653,2.61543 6.99628,2.55005 11.18097,9.15401 4.18468,6.60396 4.18468,15.1041 0,10.78865 -6.34241,17.85031 -6.34242,6.99628 -18.96187,8.82708 6.27703,3.6616 10.33095,8.04244 4.1193,4.38085 11.05019,15.56181 l 11.70405,18.70032 -23.14656,0 -13.99254,-20.85805 q -7.45398,-11.18096 -10.20018,-14.05793 -2.7462,-2.94236 -5.81933,-3.98853 -3.07313,-1.11156 -9.74248,-1.11156 l -3.92314,0 0,40.01607 -19.35418,0 z m 19.35418,-55.31634 14.31948,0 q 13.92716,0 17.3926,-1.17694 3.46545,-1.17694 5.42702,-4.05392 1.96157,-2.87697 1.96157,-7.19243 0,-4.83854 -2.61543,-7.7809 -2.55004,-3.00774 -7.25781,-3.79237 -2.35389,-0.32693 -14.12333,-0.32693 l -15.1041,0 0,24.32349 z"
style=""
id="path3407" />
<path
d="m 438.52662,198.23399 -21.05421,0 -8.36938,-21.77345 -38.31605,0 -7.91167,21.77345 -20.53112,0 37.33526,-95.8555 20.46573,0 38.38144,95.8555 z m -35.63524,-37.92373 -13.20792,-35.56984 -12.94637,35.56984 26.15429,0 z"
style=""
id="path3409" />
<path
d="m 107.02087,365.6215 0,-95.07087 19.35418,0 0,78.92059 48.12391,0 0,16.15028 -67.47809,0 z"
style=""
id="path3411" />
<path
d="m 188.22997,286.76629 0,-17.00029 18.37339,0 0,17.00029 -18.37339,0 z m 0,78.85521 0,-69.43966 18.37339,0 0,69.43966 -18.37339,0 z"
style=""
id="path3413" />
<path
d="m 288.5317,365.6215 -18.37339,0 0,-35.43908 q 0,-11.24634 -1.17694,-14.51563 -1.17695,-3.33467 -3.85776,-5.16547 -2.61543,-1.8308 -6.34242,-1.8308 -4.77316,0 -8.56553,2.61542 -3.79238,2.61543 -5.23086,6.93089 -1.3731,4.31546 -1.3731,15.95413 l 0,31.45054 -18.3734,0 0,-69.43966 17.06568,0 0,10.20017 q 9.08862,-11.76943 22.88501,-11.76943 6.08088,0 11.11558,2.22312 5.0347,2.15772 7.58475,5.55778 2.61543,3.40006 3.59621,7.71552 1.04617,4.31546 1.04617,12.35791 l 0,43.15459 z"
style=""
id="path3415" />
<path
d="m 306.57816,365.6215 0,-95.8555 18.3734,0 0,50.87011 21.51191,-24.45427 22.62346,0 -23.73502,25.36967 25.43505,44.06999 -19.81188,0 -17.45799,-31.189 -8.56553,8.95785 0,22.23115 -18.3734,0 z"
style=""
id="path3417" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

@ -0,0 +1,107 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.0"
width="468pt"
height="468pt"
viewBox="0 0 468 468"
id="svg2"
inkscape:version="0.91 r13725"
sodipodi:docname="rc_VIERA_TOOLS.svg">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1005"
id="namedview3363"
showgrid="false"
inkscape:zoom="1.31"
inkscape:cx="352.91661"
inkscape:cy="281.30022"
inkscape:window-x="-9"
inkscape:window-y="891"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
inkscape:snap-grids="true"
showguides="false" />
<defs
id="defs12" />
<metadata
id="metadata4">
Created by potrace 1.8, written by Peter Selinger 2001-2007
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
transform="matrix(0.189474,0,0,-0.189474,0,468)"
id="g6">
<path
d="M 395,2455 C 244,2422 112,2322 57,2200 5,2083 6,2112 2,1260 0,702 2,446 10,400 43,208 198,52 398,11 c 71,-15 1628,-15 1692,0 174,40 322,190 365,370 22,94 22,1579 0,1683 -21,98 -66,187 -127,252 -61,64 -113,98 -201,128 -61,21 -75,21 -867,23 -640,1 -817,-1 -865,-12 z m 1737,-163 c 74,-36 132,-95 170,-170 l 23,-47 0,-840 0,-840 -28,-57 c -37,-76 -96,-134 -171,-169 l -63,-29 -839,2 -839,3 -50,27 C 273,204 196,285 167,348 l -22,47 0,840 0,840 27,52 c 53,100 128,162 227,189 35,10 236,12 856,11 l 810,-2 67,-33 z"
id="path8" />
</g>
<g
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:133.91000366px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Bold';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
id="text2993">
<path
d="m 63.73551,198.23399 -34.26213,-95.8555 20.988824,0 24.258111,70.94354 23.473482,-70.94354 20.531123,0 -34.327515,95.8555 -20.661895,0 z"
style=""
id="path3424" />
<path
d="m 128.14047,198.23399 0,-95.8555 19.35418,0 0,95.8555 -19.35418,0 z"
style=""
id="path3426" />
<path
d="m 165.86805,198.23399 0,-95.8555 71.0743,0 0,16.21567 -51.72012,0 0,21.25036 48.12391,0 0,16.15028 -48.12391,0 0,26.08891 53.55092,0 0,16.15028 -72.9051,0 z"
style=""
id="path3428" />
<path
d="m 255.38113,198.23399 0,-95.8555 40.73532,0 q 15.36565,0 22.29653,2.61543 6.99628,2.55005 11.18097,9.15401 4.18468,6.60396 4.18468,15.1041 0,10.78865 -6.34241,17.85031 -6.34242,6.99628 -18.96187,8.82708 6.27703,3.6616 10.33095,8.04244 4.1193,4.38085 11.05019,15.56181 l 11.70405,18.70032 -23.14656,0 -13.99254,-20.85805 q -7.45398,-11.18096 -10.20018,-14.05793 -2.7462,-2.94236 -5.81933,-3.98853 -3.07313,-1.11156 -9.74248,-1.11156 l -3.92314,0 0,40.01607 -19.35418,0 z m 19.35418,-55.31634 14.31948,0 q 13.92716,0 17.3926,-1.17694 3.46545,-1.17694 5.42702,-4.05392 1.96157,-2.87697 1.96157,-7.19243 0,-4.83854 -2.61543,-7.7809 -2.55004,-3.00774 -7.25781,-3.79237 -2.35389,-0.32693 -14.12333,-0.32693 l -15.1041,0 0,24.32349 z"
style=""
id="path3430" />
<path
d="m 438.52662,198.23399 -21.05421,0 -8.36938,-21.77345 -38.31605,0 -7.91167,21.77345 -20.53112,0 37.33526,-95.8555 20.46573,0 38.38144,95.8555 z m -35.63524,-37.92373 -13.20792,-35.56984 -12.94637,35.56984 26.15429,0 z"
style=""
id="path3432" />
<path
d="m 92.243694,365.6215 0,-79.63984 -28.442798,0 0,-16.21566 76.174394,0 0,16.21566 -28.37742,0 0,79.63984 -19.354176,0 z"
style=""
id="path3434" />
<path
d="m 137.94833,329.92088 q 0,-9.154 4.51161,-17.71953 4.51162,-8.56554 12.75022,-13.07715 8.30399,-4.51162 18.50417,-4.51162 15.75796,0 25.82737,10.26556 10.0694,10.20018 10.0694,25.82737 0,15.75797 -10.20017,26.1543 -10.13479,10.33095 -25.56583,10.33095 -9.54632,0 -18.24262,-4.31546 -8.63092,-4.31546 -13.14254,-12.61945 -4.51161,-8.36938 -4.51161,-20.33497 z m 18.83109,0.98079 q 0,10.33095 4.90393,15.82335 4.90393,5.4924 12.09636,5.4924 7.19244,0 12.03098,-5.4924 4.90393,-5.4924 4.90393,-15.95412 0,-10.20018 -4.90393,-15.69258 -4.83854,-5.4924 -12.03098,-5.4924 -7.19243,0 -12.09636,5.4924 -4.90393,5.4924 -4.90393,15.82335 z"
style=""
id="path3436" />
<path
d="m 219.81128,329.92088 q 0,-9.154 4.51162,-17.71953 4.51161,-8.56554 12.75022,-13.07715 8.30399,-4.51162 18.50416,-4.51162 15.75797,0 25.82737,10.26556 10.06941,10.20018 10.06941,25.82737 0,15.75797 -10.20018,26.1543 -10.13479,10.33095 -25.56583,10.33095 -9.54631,0 -18.24262,-4.31546 -8.63092,-4.31546 -13.14253,-12.61945 -4.51162,-8.36938 -4.51162,-20.33497 z m 18.83109,0.98079 q 0,10.33095 4.90394,15.82335 4.90393,5.4924 12.09636,5.4924 7.19243,0 12.03097,-5.4924 4.90394,-5.4924 4.90394,-15.95412 0,-10.20018 -4.90394,-15.69258 -4.83854,-5.4924 -12.03097,-5.4924 -7.19243,0 -12.09636,5.4924 -4.90394,5.4924 -4.90394,15.82335 z"
style=""
id="path3438" />
<path
d="m 305.9243,365.6215 0,-95.8555 18.37339,0 0,95.8555 -18.37339,0 z"
style=""
id="path3440" />
<path
d="m 336.59021,345.80962 18.43878,-2.81159 q 1.17694,5.36163 4.77316,8.17322 3.59621,2.7462 10.0694,2.7462 7.12705,0 10.72327,-2.61543 2.41927,-1.8308 2.41927,-4.90393 0,-2.09234 -1.30772,-3.46545 -1.3731,-1.30771 -6.14626,-2.41927 -22.23115,-4.90393 -28.18125,-8.95784 -8.23861,-5.62318 -8.23861,-15.6272 0,-9.02323 7.12705,-15.16949 7.12705,-6.14626 22.10038,-6.14626 14.25409,0 21.18498,4.64239 6.93089,4.64239 9.54632,13.731 l -17.32722,3.20391 q -1.11156,-4.05392 -4.25007,-6.21165 -3.07313,-2.15773 -8.82708,-2.15773 -7.25782,0 -10.39633,2.02696 -2.09235,1.43848 -2.09235,3.72699 0,1.96157 1.8308,3.33467 2.48466,1.8308 17.13107,5.16547 14.71179,3.33468 20.53112,8.17322 5.75395,4.90393 5.75395,13.66562 0,9.54632 -7.97706,16.41182 -7.97706,6.86551 -23.60426,6.86551 -14.1887,0 -22.49269,-5.75395 -8.23861,-5.75394 -10.78865,-15.62719 z"
style=""
id="path3442" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.6 KiB

View File

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.0"
width="468pt"
height="234pt"
viewBox="0 0 468 234"
id="svg2"
inkscape:version="0.91 r13725"
sodipodi:docname="rc_VOL2.svg">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1005"
id="namedview3363"
showgrid="false"
inkscape:zoom="1.31"
inkscape:cx="175.43569"
inkscape:cy="159.16282"
inkscape:window-x="-9"
inkscape:window-y="891"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
inkscape:snap-grids="true"
showguides="false"
units="pt" />
<defs
id="defs12" />
<metadata
id="metadata4">
Created by potrace 1.8, written by Peter Selinger 2001-2007
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:133.91000366px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Bold';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
id="text2993"
transform="translate(-7e-6,-117.00002)">
<path
d="m 132.58671,281.92776 -34.262126,-95.8555 20.988826,0 24.25811,70.94354 23.47348,-70.94354 20.53112,0 -34.32751,95.8555 -20.6619,0 z"
id="path3447"
inkscape:connector-curvature="0" />
<path
d="m 193.657,234.58849 q 0,-14.64641 4.38085,-24.58504 3.26928,-7.32321 8.89246,-13.14254 5.68856,-5.81933 12.42329,-8.63092 8.95785,-3.79237 20.66189,-3.79237 21.18498,0 33.86982,13.14254 12.75022,13.14253 12.75022,36.55063 0,23.21194 -12.61945,36.35447 -12.61945,13.07715 -33.73904,13.07715 -21.38114,0 -34.00059,-13.01176 Q 193.657,257.4735 193.657,234.58849 Z m 19.94265,-0.65386 q 0,16.28105 7.51936,24.71581 7.51936,8.36938 19.09264,8.36938 11.57328,0 18.96187,-8.30399 7.45397,-8.36938 7.45397,-25.04274 0,-16.47721 -7.25782,-24.58504 -7.19243,-8.10784 -19.15802,-8.10784 -11.96559,0 -19.28879,8.23861 -7.32321,8.17322 -7.32321,24.71581 z"
id="path3449"
inkscape:connector-curvature="0" />
<path
d="m 302.19734,281.92776 0,-95.07087 19.35418,0 0,78.9206 48.12391,0 0,16.15027 -67.47809,0 z"
id="path3451"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB