diff --git a/fhem/FHEM/70_ENIGMA2.pm b/fhem/FHEM/70_ENIGMA2.pm
index f7c264661..fff95b510 100644
--- a/fhem/FHEM/70_ENIGMA2.pm
+++ b/fhem/FHEM/70_ENIGMA2.pm
@@ -24,9 +24,12 @@
# along with fhem. If not, see .
#
#
-# Version: 1.0.0
+# Version: 1.0.1
#
# Version History:
+# - 1.0.1 - 2013-12-15
+# -- Bugfix release
+#
# - 1.0.0 - 2013-09-23
# -- First release
#
@@ -36,18 +39,17 @@ package main;
use strict;
use warnings;
-use LWP::UserAgent;
-use HTTP::Request;
use XML::Simple;
use IO::Socket;
+use HttpUtils;
+use Encode;
-sub ENIGMA2_Define($$);
+sub ENIGMA2_Set($@);
+sub ENIGMA2_Get($@);
sub ENIGMA2_GetStatus($;$);
+sub ENIGMA2_Define($$);
sub ENIGMA2_Undefine($$);
-
-
-
#########################
# Forward declaration for remotecontrol module
sub ENIGMA2_RClayout_TV();
@@ -55,795 +57,1066 @@ sub ENIGMA2_RCmakenotify($$);
###################################
sub ENIGMA2_Initialize($) {
- my ($hash) = @_;
+ my ($hash) = @_;
- $hash->{GetFn} = "ENIGMA2_Get";
- $hash->{SetFn} = "ENIGMA2_Set";
- $hash->{DefFn} = "ENIGMA2_Define";
- $hash->{UndefFn} = "ENIGMA2_Undefine";
+ $hash->{GetFn} = "ENIGMA2_Get";
+ $hash->{SetFn} = "ENIGMA2_Set";
+ $hash->{DefFn} = "ENIGMA2_Define";
+ $hash->{UndefFn} = "ENIGMA2_Undefine";
- $hash->{AttrList} = "".
- $readingFnAttributes;
+ $hash->{AttrList} = "" . $readingFnAttributes;
+
+ $data{RC_layout}{ENIGMA2_DreamMultimedia_DM500_DM800_SVG} =
+ "ENIGMA2_RClayout_DM800_SVG";
+ $data{RC_layout}{ENIGMA2_DreamMultimedia_DM500_DM800} =
+ "ENIGMA2_RClayout_DM800";
+ $data{RC_layout}{ENIGMA2_DreamMultimedia_DM8000_DM800se_SVG} =
+ "ENIGMA2_RClayout_DM8000_SVG";
+ $data{RC_layout}{ENIGMA2_DreamMultimedia_DM8000_DM800se} =
+ "ENIGMA2_RClayout_DM8000";
+ $data{RC_layout}{ENIGMA2_DreamMultimedia_RC10_SVG} =
+ "ENIGMA2_RClayout_RC10_SVG";
+ $data{RC_layout}{ENIGMA2_DreamMultimedia_RC10} = "ENIGMA2_RClayout_RC10";
- $data{RC_layout}{ENIGMA2_DreamMultimedia_DM500_DM800_SVG} = "ENIGMA2_RClayout_DM800_SVG";
- $data{RC_layout}{ENIGMA2_DreamMultimedia_DM500_DM800} = "ENIGMA2_RClayout_DM800";
- $data{RC_layout}{ENIGMA2_DreamMultimedia_DM8000_DM800se_SVG} = "ENIGMA2_RClayout_DM8000_SVG";
- $data{RC_layout}{ENIGMA2_DreamMultimedia_DM8000_DM800se} = "ENIGMA2_RClayout_DM8000";
- $data{RC_layout}{ENIGMA2_DreamMultimedia_RC10_SVG} = "ENIGMA2_RClayout_RC10_SVG";
- $data{RC_layout}{ENIGMA2_DreamMultimedia_RC10} = "ENIGMA2_RClayout_RC10";
# $data{RC_layout}{ENIGMA2_VUplus_Solo2_SVG} = "ENIGMA2_RClayout_VUplusSolo2_SVG";
# $data{RC_layout}{ENIGMA2_VUplus_Solo2} = "ENIGMA2_RClayout_VUplusSolo2";
- $data{RC_layout}{ENIGMA2_VUplus_Duo2_SVG} = "ENIGMA2_RClayout_VUplusDuo2_SVG";
- $data{RC_layout}{ENIGMA2_VUplus_Duo2} = "ENIGMA2_RClayout_VUplusDuo2";
+ $data{RC_layout}{ENIGMA2_VUplus_Duo2_SVG} =
+ "ENIGMA2_RClayout_VUplusDuo2_SVG";
+ $data{RC_layout}{ENIGMA2_VUplus_Duo2} = "ENIGMA2_RClayout_VUplusDuo2";
+
# $data{RC_layout}{ENIGMA2_VUplus_Ultimo_SVG} = "ENIGMA2_RClayout_VUplusUltimo_SVG";
# $data{RC_layout}{ENIGMA2_VUplus_Ultimo} = "ENIGMA2_RClayout_VUplusUltimo";
- $data{RC_makenotify}{ENIGMA2} = "ENIGMA2_RCmakenotify";
+ $data{RC_makenotify}{ENIGMA2} = "ENIGMA2_RCmakenotify";
}
#####################################
sub ENIGMA2_GetStatus($;$) {
- my ($hash, $local) = @_;
- my $name = $hash->{NAME};
- my $interval = $hash->{INTERVAL};
- my $state='';
- my $boxinfo;
- my $serviceinfo;
- my $eventinfo;
- my $signalinfo;
- my $vol;
- my $changecount = 0;
-
- $local = 0 unless(defined($local));
+ my ( $hash, $local ) = @_;
+ my $name = $hash->{NAME};
+ my $interval = $hash->{INTERVAL};
+ my $state = '';
+ my $boxinfo;
+ my $serviceinfo;
+ my $eventinfo;
+ my $signalinfo;
+ my $vol;
+ my $changecount = 0;
- InternalTimer(gettimeofday()+$interval, "ENIGMA2_GetStatus", $hash, 0) unless($local == 1);
+ $local = 0 unless ( defined($local) );
- # Read powerstate
- #
- my $powerstate = ENIGMA2_SendCommand($hash, "powerstate", "");
+ InternalTimer( gettimeofday() + $interval, "ENIGMA2_GetStatus", $hash, 0 )
+ unless ( $local == 1 );
- if (defined($powerstate) && ref($powerstate) eq "HASH") {
- if ($powerstate->{e2instandby} eq "true") {
- $state = "off";
- } else {
- $state = "on";
- # Read Boxinfo
- $boxinfo = ENIGMA2_SendCommand($hash, "about", "");
- $serviceinfo = ENIGMA2_SendCommand($hash, "subservices", "");
- $signalinfo = ENIGMA2_SendCommand($hash, "signal", "");
- $vol = ENIGMA2_SendCommand($hash, "vol", "");
- if (ref($serviceinfo) eq "HASH" && defined($serviceinfo->{e2service}{e2servicereference}) && $serviceinfo->{e2service}{e2servicereference} ne "") {
- $eventinfo = ENIGMA2_SendCommand($hash, "epgservicenow", "sRef=".urlEncode($serviceinfo->{e2service}{e2servicereference}));
- }
+ # Read powerstate
+ #
+ my $powerstate = ENIGMA2_SendCommand( $hash, "powerstate", "" );
+
+ if ( defined($powerstate) && ref($powerstate) eq "HASH" ) {
+ if ( $powerstate->{e2instandby} eq "true" ) {
+ $state = "off";
+ }
+ else {
+ $state = "on";
+
+ # Read Boxinfo
+ $boxinfo = ENIGMA2_SendCommand( $hash, "about", "" );
+ $serviceinfo = ENIGMA2_SendCommand( $hash, "subservices", "" );
+ $signalinfo = ENIGMA2_SendCommand( $hash, "signal", "" );
+ $vol = ENIGMA2_SendCommand( $hash, "vol", "" );
+
+ #FIXME workaround for option channels
+ if ( ref($serviceinfo) eq "HASH"
+ && ref( $serviceinfo->{e2service} ) eq "ARRAY" )
+ {
+ $serviceinfo = (
+ e2service => $serviceinfo->{e2service},
+ e2servicereference =>
+ $serviceinfo->{e2service}[0]{e2servicereference}
+ );
+ }
+
+ if ( ref($serviceinfo) eq "HASH"
+ && defined( $serviceinfo->{e2service}{e2servicereference} )
+ && $serviceinfo->{e2service}{e2servicereference} ne "" )
+ {
+ $eventinfo = ENIGMA2_SendCommand(
+ $hash,
+ "epgservicenow",
+ "sRef="
+ . urlEncode(
+ $serviceinfo->{e2service}{e2servicereference}
+ )
+ );
+ }
+ }
}
- } elsif ($hash->{helper}{AVAILABLE} == 1) {
- $state = "undefined";
- } else {
- $state = "absent";
- }
-
- readingsBeginUpdate($hash);
-
- # Set reading for power
- #
- my $readingPower = "off";
- if ($state eq "on") {
- $readingPower = "on";
- }
- if (!defined($hash->{READINGS}{power}{VAL}) || $hash->{READINGS}{power}{VAL} ne $readingPower) {
- readingsBulkUpdate($hash, "power", $readingPower, 1);
- }
-
- # Set reading for state
- #
- if (!defined($hash->{READINGS}{state}{VAL}) || $hash->{READINGS}{state}{VAL} ne $state) {
- readingsBulkUpdate($hash, "state", $state, 1);
- }
-
- # Set reading for Boxinfos
- #
- if (ref($boxinfo) eq "HASH") {
- my $reading;
- my $e2reading;
-
- # General
- foreach ( "enigmaversion",
- "imageversion",
- "webifversion",
- "fpversion",
- "lanmac",
- "model",
- "servicenamespace",
- "serviceaspect",
- "serviceprovider",
- "servicevideosize",
- "videowidth",
- "videoheight",
- "apid",
- "vpid",
- "pcrpid",
- "servicevideosize",
- "pmtpid",
- "txtpid",
- "tsid",
- "onid",
- "sid"
- ) {
- $reading = $_;
- $e2reading = "e2".$_;
-
- if (defined($boxinfo->{e2about}{$e2reading})) {
- if ($boxinfo->{e2about}{$e2reading} eq "False" || $boxinfo->{e2about}{$e2reading} eq "True") {
- if (!defined($hash->{READINGS}{$reading}{VAL}) || $hash->{READINGS}{$reading}{VAL} ne lc($boxinfo->{e2about}{$e2reading})) {
- readingsBulkUpdate($hash, $reading, lc($boxinfo->{e2about}{$e2reading}), 1);
- }
- } else {
- if (!defined($hash->{READINGS}{$reading}{VAL}) || $hash->{READINGS}{$reading}{VAL} ne $boxinfo->{e2about}{$e2reading}) {
- readingsBulkUpdate($hash, $reading, $boxinfo->{e2about}{$e2reading}, 1);
- }
- }
- } else {
- if (!defined($hash->{READINGS}{$reading}{VAL}) || $hash->{READINGS}{$reading}{VAL} ne "-") {
- readingsBulkUpdate($hash, $reading, "-", 1);
- }
- }
+ elsif ( $hash->{helper}{AVAILABLE} == 1 ) {
+ $state = "undefined";
+ }
+ else {
+ $state = "absent";
}
- # servicename + channel
- $reading = "servicename";
- $e2reading = "e2".$reading;
- if (defined($boxinfo->{e2about}{$e2reading})) {
- if (!defined($hash->{READINGS}{$reading}{VAL}) || $hash->{READINGS}{$reading}{VAL} ne $boxinfo->{e2about}{$e2reading}) {
- readingsBulkUpdate($hash, $reading, $boxinfo->{e2about}{$e2reading}, 1);
- readingsBulkUpdate($hash, "channel", $boxinfo->{e2about}{$e2reading}, 1);
- }
- } else {
- if (!defined($hash->{READINGS}{$reading}{VAL}) || $hash->{READINGS}{$reading}{VAL} ne "-") {
- readingsBulkUpdate($hash, $reading, "-", 1);
- readingsBulkUpdate($hash, "channel", "-", 1);
- }
+ readingsBeginUpdate($hash);
+
+ # Set reading for power
+ #
+ my $readingPower = "off";
+ if ( $state eq "on" ) {
+ $readingPower = "on";
+ }
+ if ( !defined( $hash->{READINGS}{power}{VAL} )
+ || $hash->{READINGS}{power}{VAL} ne $readingPower )
+ {
+ readingsBulkUpdate( $hash, "power", $readingPower, 1 );
}
- # HDD
- # multiple
- if (defined($boxinfo->{e2about}{e2hddinfo}) && ref($boxinfo->{e2about}{e2hddinfo}) eq "ARRAY") {
- my $i=0;
- my $arr_size=@{ $boxinfo->{e2about}{e2hddinfo} };
-
- while ($i < $arr_size) {
- my $counter = $i + 1;
- my $readingname = "hdd".$counter."_model";
- if (!defined($hash->{READINGS}{$readingname}{VAL}) || $hash->{READINGS}{$readingname}{VAL} ne $boxinfo->{e2about}{e2hddinfo}[$i]{model}) {
- readingsBulkUpdate($hash, $readingname, $boxinfo->{e2about}{e2hddinfo}[$i]{model}, 1);
- }
-
- $readingname = "hdd".$counter."_capacity";
- my @value = split(/ /, $boxinfo->{e2about}{e2hddinfo}[$i]{capacity});
- if (!defined($hash->{READINGS}{$readingname}{VAL}) || $hash->{READINGS}{$readingname}{VAL} ne $value[0]) {
- readingsBulkUpdate($hash, $readingname, $value[0], 1);
- }
-
- $readingname = "hdd".$counter."_free";
- @value = split(/ /, $boxinfo->{e2about}{e2hddinfo}[$i]{free});
- if (!defined($hash->{READINGS}{$readingname}{VAL}) || $hash->{READINGS}{$readingname}{VAL} ne $value[0]) {
- readingsBulkUpdate($hash, $readingname, $value[0], 1);
- }
-
- $i++;
- }
- # single
- } elsif(defined($boxinfo->{e2about}{e2hddinfo}) && ref($boxinfo->{e2about}{e2hddinfo}) eq "HASH") {
- my $readingname = "hdd1_model";
- if (!defined($hash->{READINGS}{$readingname}{VAL}) || $hash->{READINGS}{$readingname}{VAL} ne $boxinfo->{e2about}{e2hddinfo}{model}) {
- readingsBulkUpdate($hash, $readingname, $boxinfo->{e2about}{e2hddinfo}{model}, 1);
- }
-
- $readingname = "hdd1_capacity";
- my @value = split(/ /, $boxinfo->{e2about}{e2hddinfo}{capacity});
- if (!defined($hash->{READINGS}{$readingname}{VAL}) || $hash->{READINGS}{$readingname}{VAL} ne $value[0]) {
- readingsBulkUpdate($hash, $readingname, $value[0], 1);
- }
-
- $readingname = "hdd1_free";
- @value = split(/ /, $boxinfo->{e2about}{e2hddinfo}{free});
- if (!defined($hash->{READINGS}{$readingname}{VAL}) || $hash->{READINGS}{$readingname}{VAL} ne $value[0]) {
- readingsBulkUpdate($hash, $readingname, $value[0], 1);
- }
+ # Set reading for state
+ #
+ if ( !defined( $hash->{READINGS}{state}{VAL} )
+ || $hash->{READINGS}{state}{VAL} ne $state )
+ {
+ readingsBulkUpdate( $hash, "state", $state, 1 );
}
- # Tuner
- if (defined($boxinfo->{e2about}{e2tunerinfo}{e2nim})) {
- my %tuner= %{ $boxinfo->{e2about}{e2tunerinfo}{e2nim} };
- # single
- if ( defined($tuner{type}) ) {
- my $tunerRef = \%tuner;
- my $tuner_name=lc($$tunerRef{name});
- $tuner_name =~ s/\s/_/g;
+ # Set reading for Boxinfos
+ #
+ if ( ref($boxinfo) eq "HASH" ) {
+ my $reading;
+ my $e2reading;
- if (!defined($hash->{READINGS}{$tuner_name}{VAL}) || $hash->{READINGS}{$tuner_name}{VAL} ne $$tunerRef{type}) {
- readingsBulkUpdate($hash, $tuner_name, $$tunerRef{type}, 1);
+ # General
+ foreach (
+ "enigmaversion", "imageversion", "webifversion",
+ "fpversion", "lanmac", "model",
+ "servicenamespace", "serviceaspect", "serviceprovider",
+ "servicevideosize", "videowidth", "videoheight",
+ "apid", "vpid", "pcrpid",
+ "servicevideosize", "pmtpid", "txtpid",
+ "tsid", "onid", "sid"
+ )
+ {
+ $reading = $_;
+ $e2reading = "e2" . $_;
+
+ if ( defined( $boxinfo->{e2about}{$e2reading} ) ) {
+ if ( $boxinfo->{e2about}{$e2reading} eq "False"
+ || $boxinfo->{e2about}{$e2reading} eq "True" )
+ {
+ if ( !defined( $hash->{READINGS}{$reading}{VAL} )
+ || $hash->{READINGS}{$reading}{VAL} ne
+ lc( $boxinfo->{e2about}{$e2reading} ) )
+ {
+ readingsBulkUpdate( $hash, $reading,
+ lc( $boxinfo->{e2about}{$e2reading} ), 1 );
+ }
+ }
+ else {
+ if ( !defined( $hash->{READINGS}{$reading}{VAL} )
+ || $hash->{READINGS}{$reading}{VAL} ne
+ $boxinfo->{e2about}{$e2reading} )
+ {
+ readingsBulkUpdate( $hash, $reading,
+ $boxinfo->{e2about}{$e2reading}, 1 );
+ }
+ }
+ }
+ else {
+ if ( !defined( $hash->{READINGS}{$reading}{VAL} )
+ || $hash->{READINGS}{$reading}{VAL} ne "-" )
+ {
+ readingsBulkUpdate( $hash, $reading, "-", 1 );
+ }
+ }
}
- # multiple
- } else {
- for (keys %tuner) {
- my $tuner_name=lc($_);
- $tuner_name =~ s/\s/_/g;
- my $tuner_type=$tuner{$_}{type};
-
- if (!defined($hash->{READINGS}{$tuner_name}{VAL}) || $hash->{READINGS}{$tuner_name}{VAL} ne $tuner_type) {
- readingsBulkUpdate($hash, $tuner_name, $tuner_type, 1);
- }
+ # servicename + channel
+ $reading = "servicename";
+ $e2reading = "e2" . $reading;
+ if ( defined( $boxinfo->{e2about}{$e2reading} ) ) {
+ if ( !defined( $hash->{READINGS}{$reading}{VAL} )
+ || $hash->{READINGS}{$reading}{VAL} ne
+ $boxinfo->{e2about}{$e2reading} )
+ {
+ readingsBulkUpdate( $hash, $reading,
+ $boxinfo->{e2about}{$e2reading}, 1 );
+ readingsBulkUpdate( $hash, "channel",
+ $boxinfo->{e2about}{$e2reading}, 1 );
+ }
}
- }
+ else {
+ if ( !defined( $hash->{READINGS}{$reading}{VAL} )
+ || $hash->{READINGS}{$reading}{VAL} ne "-" )
+ {
+ readingsBulkUpdate( $hash, $reading, "-", 1 );
+ readingsBulkUpdate( $hash, "channel", "-", 1 );
+ }
+ }
+
+ # HDD
+ # multiple
+ if ( defined( $boxinfo->{e2about}{e2hddinfo} )
+ && ref( $boxinfo->{e2about}{e2hddinfo} ) eq "ARRAY" )
+ {
+ my $i = 0;
+ my $arr_size = @{ $boxinfo->{e2about}{e2hddinfo} };
+
+ while ( $i < $arr_size ) {
+ my $counter = $i + 1;
+ my $readingname = "hdd" . $counter . "_model";
+ if ( !defined( $hash->{READINGS}{$readingname}{VAL} )
+ || $hash->{READINGS}{$readingname}{VAL} ne
+ $boxinfo->{e2about}{e2hddinfo}[$i]{model} )
+ {
+ readingsBulkUpdate( $hash, $readingname,
+ $boxinfo->{e2about}{e2hddinfo}[$i]{model}, 1 );
+ }
+
+ $readingname = "hdd" . $counter . "_capacity";
+ my @value =
+ split( / /, $boxinfo->{e2about}{e2hddinfo}[$i]{capacity} );
+ if (
+ !defined( $hash->{READINGS}{$readingname}{VAL} )
+ || ( ref(@value) eq "ARRAY"
+ && $hash->{READINGS}{$readingname}{VAL} ne $value[0] )
+ )
+ {
+ readingsBulkUpdate( $hash, $readingname, $value[0], 1 );
+ }
+
+ $readingname = "hdd" . $counter . "_free";
+ @value = split( / /, $boxinfo->{e2about}{e2hddinfo}[$i]{free} );
+ if (
+ !defined( $hash->{READINGS}{$readingname}{VAL} )
+ || ( ref(@value) eq "ARRAY"
+ && $hash->{READINGS}{$readingname}{VAL} ne $value[0] )
+ )
+ {
+ readingsBulkUpdate( $hash, $readingname, $value[0], 1 );
+ }
+
+ $i++;
+ }
+
+ }
+
+ # single
+ elsif ( defined( $boxinfo->{e2about}{e2hddinfo} )
+ && ref( $boxinfo->{e2about}{e2hddinfo} ) eq "HASH" )
+ {
+ my $readingname = "hdd1_model";
+ if ( !defined( $hash->{READINGS}{$readingname}{VAL} )
+ || $hash->{READINGS}{$readingname}{VAL} ne
+ $boxinfo->{e2about}{e2hddinfo}{model} )
+ {
+ readingsBulkUpdate( $hash, $readingname,
+ $boxinfo->{e2about}{e2hddinfo}{model}, 1 );
+ }
+
+ $readingname = "hdd1_capacity";
+ my @value = split( / /, $boxinfo->{e2about}{e2hddinfo}{capacity} );
+ if (
+ !defined( $hash->{READINGS}{$readingname}{VAL} )
+ || ( ref(@value) eq "ARRAY"
+ && $hash->{READINGS}{$readingname}{VAL} ne $value[0] )
+ )
+ {
+ readingsBulkUpdate( $hash, $readingname, $value[0], 1 );
+ }
+
+ $readingname = "hdd1_free";
+ @value = split( / /, $boxinfo->{e2about}{e2hddinfo}{free} );
+ if (
+ !defined( $hash->{READINGS}{$readingname}{VAL} )
+ || ( ref(@value) eq "ARRAY"
+ && $hash->{READINGS}{$readingname}{VAL} ne $value[0] )
+ )
+ {
+ readingsBulkUpdate( $hash, $readingname, $value[0], 1 );
+ }
+ }
+
+ # Tuner
+ if ( defined( $boxinfo->{e2about}{e2tunerinfo}{e2nim} ) ) {
+ my %tuner = %{ $boxinfo->{e2about}{e2tunerinfo}{e2nim} };
+
+ # single
+ if ( defined( $tuner{type} ) ) {
+ my $tunerRef = \%tuner;
+ my $tuner_name = lc( $$tunerRef{name} );
+ $tuner_name =~ s/\s/_/g;
+
+ if ( !defined( $hash->{READINGS}{$tuner_name}{VAL} )
+ || $hash->{READINGS}{$tuner_name}{VAL} ne $$tunerRef{type} )
+ {
+ readingsBulkUpdate( $hash, $tuner_name, $$tunerRef{type},
+ 1 );
+ }
+
+ }
+
+ # multiple
+ else {
+ for ( keys %tuner ) {
+ my $tuner_name = lc($_);
+ $tuner_name =~ s/\s/_/g;
+ my $tuner_type = $tuner{$_}{type};
+
+ if ( !defined( $hash->{READINGS}{$tuner_name}{VAL} )
+ || $hash->{READINGS}{$tuner_name}{VAL} ne $tuner_type )
+ {
+ readingsBulkUpdate( $hash, $tuner_name, $tuner_type,
+ 1 );
+ }
+ }
+ }
+ }
+
+ # Volume
+ if ( ref($vol) eq "HASH" && defined( $vol->{e2current} ) ) {
+ if ( !defined( $hash->{READINGS}{volume}{VAL} )
+ || $hash->{READINGS}{volume}{VAL} ne $vol->{e2current} )
+ {
+ readingsBulkUpdate( $hash, "volume", $vol->{e2current}, 1 );
+ }
+ }
+ if ( ref($vol) eq "HASH" && defined( $vol->{e2ismuted} ) ) {
+ my $muteState = "on";
+ if ( lc( $vol->{e2ismuted} ) eq "false" ) {
+ $muteState = "off";
+ }
+ if ( !defined( $hash->{READINGS}{mute}{VAL} )
+ || $hash->{READINGS}{mute}{VAL} ne $muteState )
+ {
+ readingsBulkUpdate( $hash, "mute", $muteState, 1 );
+ }
+ }
+
+ #FIXME workaround for option channels
+ if ( ref($serviceinfo) eq "HASH"
+ && ref( $serviceinfo->{e2service} ) eq "ARRAY" )
+ {
+ $serviceinfo = (
+ e2service => $serviceinfo->{e2service},
+ e2servicereference =>
+ $serviceinfo->{e2service}[0]{e2servicereference}
+ );
+ }
+
+ # servicereference + input + currentMedia
+ if ( ref($serviceinfo) eq "HASH"
+ && defined( $serviceinfo->{e2service} ) )
+ {
+ if ( $serviceinfo->{e2service}{e2servicereference} ne "" ) {
+ if ( !defined( $hash->{READINGS}{servicereference}{VAL} )
+ || $hash->{READINGS}{servicereference}{VAL} ne
+ $serviceinfo->{e2service}{e2servicereference} )
+ {
+ readingsBulkUpdate( $hash, "servicereference",
+ $serviceinfo->{e2service}{e2servicereference}, 1 );
+ readingsBulkUpdate( $hash, "currentMedia",
+ $serviceinfo->{e2service}{e2servicereference}, 1 );
+
+ my @servicetype = split( /:/,
+ $serviceinfo->{e2service}{e2servicereference} );
+ if ( ref(@servicetype) eq "ARRAY"
+ && $servicetype[2] eq "2" )
+ {
+ readingsBulkUpdate( $hash, "input", "radio", 1 );
+ }
+ else {
+ readingsBulkUpdate( $hash, "input", "tv", 1 );
+ }
+ }
+ }
+ elsif ( $hash->{READINGS}{servicereference}{VAL} ne "-" ) {
+ readingsBulkUpdate( $hash, "servicereference", "-", 1 );
+ readingsBulkUpdate( $hash, "currentMedia", "-", 1 );
+ }
+ }
+
+ # Event
+ if ( ref($eventinfo) eq "HASH" && defined( $eventinfo->{e2event} ) ) {
+ foreach ( "eventstart", "eventduration", "eventdescription", ) {
+ $reading = $_;
+ $e2reading = "e2" . $_;
+
+ if ( defined( $eventinfo->{e2event}{$e2reading} ) ) {
+ if ( !defined( $hash->{READINGS}{$reading}{VAL} )
+ || $hash->{READINGS}{$reading}{VAL} ne
+ $eventinfo->{e2event}{$e2reading} )
+ {
+ readingsBulkUpdate( $hash, $reading,
+ $eventinfo->{e2event}{$e2reading}, 1 );
+ }
+ }
+ else {
+ if ( !defined( $hash->{READINGS}{$reading}{VAL} )
+ || $hash->{READINGS}{$reading}{VAL} ne "-" )
+ {
+ readingsBulkUpdate( $hash, $reading, "-", 1 );
+ }
+ }
+ }
+
+ # eventtitle + currentTitle
+ $reading = "eventtitle";
+ $e2reading = "e2" . $reading;
+ if ( defined( $eventinfo->{e2event}{$e2reading} )
+ && $eventinfo->{e2event}{$e2reading} ne "N/A" )
+ {
+ if ( !defined( $hash->{READINGS}{$reading}{VAL} )
+ || $hash->{READINGS}{$reading}{VAL} ne
+ $eventinfo->{e2event}{$e2reading} )
+ {
+ readingsBulkUpdate( $hash, $reading,
+ $eventinfo->{e2event}{$e2reading}, 1 );
+ readingsBulkUpdate( $hash, "currentTitle",
+ $eventinfo->{e2event}{$e2reading}, 1 );
+ }
+ }
+ else {
+ if ( !defined( $hash->{READINGS}{$reading}{VAL} )
+ || $hash->{READINGS}{$reading}{VAL} ne
+ $boxinfo->{e2about}{e2servicename} )
+ {
+ readingsBulkUpdate( $hash, $reading,
+ $boxinfo->{e2about}{e2servicename}, 1 );
+ readingsBulkUpdate( $hash, "currentTitle",
+ $boxinfo->{e2about}{e2servicename}, 1 );
+ }
+ }
+
+ # eventstart_hr
+ $reading = "eventstart_hr";
+ $e2reading = "e2eventstart";
+ if ( defined( $eventinfo->{e2event}{$e2reading} )
+ && $eventinfo->{e2event}{$e2reading} ne "0" )
+ {
+ my $timestring =
+ FmtDateTime( $eventinfo->{e2event}{$e2reading} );
+ if ( !defined( $hash->{READINGS}{$reading}{VAL} )
+ || $hash->{READINGS}{$reading}{VAL} ne $timestring )
+ {
+ readingsBulkUpdate( $hash, $reading, $timestring, 1 );
+ }
+ }
+ else {
+ if ( !defined( $hash->{READINGS}{$reading}{VAL} )
+ || $hash->{READINGS}{$reading}{VAL} ne "-" )
+ {
+ readingsBulkUpdate( $hash, $reading, "-", 1 );
+ }
+ }
+ }
+
+ # Signal
+ if ( ref($signalinfo) eq "HASH" && defined( $signalinfo->{e2snrdb} ) ) {
+ foreach ( "snrdb", "snr", "ber", "acg", ) {
+ $reading = $_;
+ $e2reading = "e2" . $_;
+
+ if ( defined( $signalinfo->{$e2reading} ) ) {
+ my @value = split( / /, $signalinfo->{$e2reading} );
+ if ( defined( $value[1] ) || $reading eq "ber" ) {
+ readingsBulkUpdate( $hash, $reading, $value[0], 1 );
+ }
+ else {
+ readingsBulkUpdate( $hash, $reading, "0", 1 );
+ }
+ }
+ else {
+ readingsBulkUpdate( $hash, $reading, "0", 1 );
+ }
+ }
+ }
+
+ }
+ else {
+
+# Set ENIGMA2 online-only readings to "-" in case box is in offline or in standby mode
+ foreach (
+ 'servicename', 'servicenamespace', 'serviceaspect',
+ 'serviceprovider', 'servicereference', 'videowidth',
+ 'videoheight', 'servicevideosize', 'apid',
+ 'vpid', 'pcrpid', 'pmtpid',
+ 'txtpid', 'tsid', 'onid',
+ 'sid', 'mute', 'volume',
+ 'channel', 'currentTitle', 'input',
+ 'eventcurrenttime', 'eventcurrenttime_hr', 'eventdescription',
+ 'eventduration', 'eventstart', 'eventstart_hr',
+ 'eventtitle', 'currentMedia',
+ )
+ {
+ if ( !defined( $hash->{READINGS}{$_}{VAL} )
+ || $hash->{READINGS}{$_}{VAL} ne "-" )
+ {
+ readingsBulkUpdate( $hash, $_, "-", 1 );
+ }
+ }
+
+# Set ENIGMA2 online-only readings to "-" in case box is in offline or in standby mode
+ foreach ( 'acg', 'ber', 'snr', 'snrdb', ) {
+ if ( !defined( $hash->{READINGS}{$_}{VAL} )
+ || $hash->{READINGS}{$_}{VAL} ne "0" )
+ {
+ readingsBulkUpdate( $hash, $_, "0", 1 );
+ }
+ }
+
}
- # Volume
- if (ref($vol) eq "HASH" && defined($vol->{e2current})) {
- if (!defined($hash->{READINGS}{volume}{VAL}) || $hash->{READINGS}{volume}{VAL} ne $vol->{e2current}) {
- readingsBulkUpdate($hash, "volume", $vol->{e2current}, 1);
- }
- }
- if (ref($vol) eq "HASH" && defined($vol->{e2ismuted})) {
- my $muteState = "on";
- if (lc($vol->{e2ismuted}) eq "false") {
- $muteState = "off";
- }
- if (!defined($hash->{READINGS}{mute}{VAL}) || $hash->{READINGS}{mute}{VAL} ne $muteState) {
- readingsBulkUpdate($hash, "mute", $muteState, 1);
- }
- }
+ readingsEndUpdate( $hash, 1 );
- # servicereference + input + currentMedia
- if (ref($serviceinfo) eq "HASH" && defined($serviceinfo->{e2service})) {
- if ($serviceinfo->{e2service}{e2servicereference} ne "") {
- if (!defined($hash->{READINGS}{servicereference}{VAL}) || $hash->{READINGS}{servicereference}{VAL} ne $serviceinfo->{e2service}{e2servicereference}) {
- readingsBulkUpdate($hash, "servicereference", $serviceinfo->{e2service}{e2servicereference}, 1);
- readingsBulkUpdate($hash, "currentMedia", $serviceinfo->{e2service}{e2servicereference}, 1);
+ Log3 $name, 4, "ENIGMA2 $name: " . $hash->{STATE};
- my @servicetype = split(/:/, $serviceinfo->{e2service}{e2servicereference});
- if ($servicetype[2] eq "2") {
- readingsBulkUpdate($hash, "input", "radio", 1);
- } else {
- readingsBulkUpdate($hash, "input", "tv", 1);
- }
- }
- } elsif($hash->{READINGS}{servicereference}{VAL} ne "-") {
- readingsBulkUpdate($hash, "servicereference", "-", 1);
- readingsBulkUpdate($hash, "currentMedia", "-", 1);
- }
- }
-
- # Event
- if (ref($eventinfo) eq "HASH" && defined($eventinfo->{e2event})) {
- foreach ( "eventstart",
- "eventduration",
- "eventdescription",
- ) {
- $reading = $_;
- $e2reading = "e2".$_;
-
- if (defined($eventinfo->{e2event}{$e2reading})) {
- if (!defined($hash->{READINGS}{$reading}{VAL}) || $hash->{READINGS}{$reading}{VAL} ne $eventinfo->{e2event}{$e2reading}) {
- readingsBulkUpdate($hash, $reading, $eventinfo->{e2event}{$e2reading}, 1);
- }
- } else {
- if (!defined($hash->{READINGS}{$reading}{VAL}) || $hash->{READINGS}{$reading}{VAL} ne "-") {
- readingsBulkUpdate($hash, $reading, "-", 1);
- }
- }
- }
-
- # eventtitle + currentTitle
- $reading = "eventtitle";
- $e2reading = "e2".$reading;
- if (defined($eventinfo->{e2event}{$e2reading}) && $eventinfo->{e2event}{$e2reading} ne "N/A") {
- if (!defined($hash->{READINGS}{$reading}{VAL}) || $hash->{READINGS}{$reading}{VAL} ne $eventinfo->{e2event}{$e2reading}) {
- readingsBulkUpdate($hash, $reading, $eventinfo->{e2event}{$e2reading}, 1);
- readingsBulkUpdate($hash, "currentTitle", $eventinfo->{e2event}{$e2reading}, 1);
- }
- } else {
- if (!defined($hash->{READINGS}{$reading}{VAL}) || $hash->{READINGS}{$reading}{VAL} ne $boxinfo->{e2about}{e2servicename}) {
- readingsBulkUpdate($hash, $reading, $boxinfo->{e2about}{e2servicename}, 1);
- readingsBulkUpdate($hash, "currentTitle", $boxinfo->{e2about}{e2servicename}, 1);
- }
- }
-
- # eventstart_hr
- $reading = "eventstart_hr";
- $e2reading = "e2eventstart";
- if (defined($eventinfo->{e2event}{$e2reading}) && $eventinfo->{e2event}{$e2reading} ne "0") {
- my $timestring = FmtDateTime($eventinfo->{e2event}{$e2reading});
- if (!defined($hash->{READINGS}{$reading}{VAL}) || $hash->{READINGS}{$reading}{VAL} ne $timestring) {
- readingsBulkUpdate($hash, $reading, $timestring, 1);
- }
- } else {
- if (!defined($hash->{READINGS}{$reading}{VAL}) || $hash->{READINGS}{$reading}{VAL} ne "-") {
- readingsBulkUpdate($hash, $reading, "-", 1);
- }
- }
- }
-
- # Signal
- if (ref($signalinfo) eq "HASH" && defined($signalinfo->{e2snrdb})) {
- foreach ( "snrdb",
- "snr",
- "ber",
- "acg",
- ) {
- $reading = $_;
- $e2reading = "e2".$_;
-
- if (defined($signalinfo->{$e2reading})) {
- my @value = split(/ /, $signalinfo->{$e2reading});
- if (defined($value[1]) || $reading eq "ber") {
- readingsBulkUpdate($hash, $reading, $value[0], 1);
- } else {
- readingsBulkUpdate($hash, $reading, "0", 1);
- }
- } else {
- readingsBulkUpdate($hash, $reading, "0", 1);
- }
- }
- }
-
- } else {
-
- # Set ENIGMA2 online-only readings to "-" in case box is in offline or in standby mode
- foreach ( 'servicename',
- 'servicenamespace',
- 'serviceaspect',
- 'serviceprovider',
- 'servicereference',
- 'videowidth',
- 'videoheight',
- 'servicevideosize',
- 'apid',
- 'vpid',
- 'pcrpid',
- 'pmtpid',
- 'txtpid',
- 'tsid',
- 'onid',
- 'sid',
- 'mute',
- 'volume',
- 'channel',
- 'currentTitle',
- 'input',
- 'eventcurrenttime',
- 'eventcurrenttime_hr',
- 'eventdescription',
- 'eventduration',
- 'eventstart',
- 'eventstart_hr',
- 'eventtitle',
- 'currentMedia',
- ) {
- if (!defined($hash->{READINGS}{$_}{VAL}) || $hash->{READINGS}{$_}{VAL} ne "-") {
- readingsBulkUpdate($hash, $_, "-", 1);
- }
- }
-
- # Set ENIGMA2 online-only readings to "-" in case box is in offline or in standby mode
- foreach ( 'acg',
- 'ber',
- 'snr',
- 'snrdb',
- ) {
- if (!defined($hash->{READINGS}{$_}{VAL}) || $hash->{READINGS}{$_}{VAL} ne "0") {
- readingsBulkUpdate($hash, $_, "0", 1);
- }
- }
-
- }
-
- readingsEndUpdate($hash, 1);
-
- Log3 $name, 4, "ENIGMA2 $name: ".$hash->{STATE};
-
- return $hash->{STATE};
+ return $hash->{STATE};
}
###################################
sub ENIGMA2_Get($@) {
- my ($hash, @a) = @_;
- my $what;
+ my ( $hash, @a ) = @_;
+ my $what;
- return "argument is missing" if(int(@a) < 2);
-
- $what = $a[1];
+ return "argument is missing" if ( int(@a) < 2 );
- if($what =~ /^(power|input|volume|mute|channel|currentMedia|currentTitle|serviceprovider|servicevideosize)$/) {
- ENIGMA2_GetStatus($hash, 1);
+ $what = $a[1];
- if(defined($hash->{READINGS}{$what})) {
- return $hash->{READINGS}{$what}{VAL};
- } else {
- return "no such reading: $what";
- }
+ if ( $what =~
+/^(power|input|volume|mute|channel|currentMedia|currentTitle|serviceprovider|servicevideosize)$/
+ )
+ {
+ ENIGMA2_GetStatus( $hash, 1 );
- # streamUrl
- } elsif($what eq "streamUrl") {
- if (defined($a[2]) && $a[2] eq "mobile") {
- return "http://".$hash->{helper}{ADDRESS}.":".$hash->{helper}{PORT}."/web/stream.m3u?ref=".urlEncode($hash->{READINGS}{servicereference}{VAL})."&device=phone";
- } else {
- return "http://".$hash->{helper}{ADDRESS}.":".$hash->{helper}{PORT}."/web/stream.m3u?ref=".urlEncode($hash->{READINGS}{servicereference}{VAL})."&device=etc";
+ if ( defined( $hash->{READINGS}{$what} ) ) {
+ return $hash->{READINGS}{$what}{VAL};
+ }
+ else {
+ return "no such reading: $what";
+ }
+ }
+
+ # streamUrl
+ elsif ( $what eq "streamUrl" ) {
+ if ( defined( $a[2] ) && $a[2] eq "mobile" ) {
+ return
+ "http://"
+ . $hash->{helper}{ADDRESS} . ":"
+ . $hash->{helper}{PORT}
+ . "/web/stream.m3u?ref="
+ . urlEncode( $hash->{READINGS}{servicereference}{VAL} )
+ . "&device=phone";
+ }
+ else {
+ return
+ "http://"
+ . $hash->{helper}{ADDRESS} . ":"
+ . $hash->{helper}{PORT}
+ . "/web/stream.m3u?ref="
+ . urlEncode( $hash->{READINGS}{servicereference}{VAL} )
+ . "&device=etc";
+ }
+ }
+ else {
+ return
+"Unknown argument $what, choose one of power:noArg input:noArg volume:noArg mute:noArg channel:noArg currentMedia:noArf currentTitle:noArg serviceprovider:noArg servicevideosize:noArg streamUrl:,mobile ";
}
- } else {
- return "Unknown argument $what, choose one of power:noArg input:noArg volume:noArg mute:noArg channel:noArg currentMedia:noArf currentTitle:noArg serviceprovider:noArg servicevideosize:noArg streamUrl:,mobile ";
- }
}
###################################
sub ENIGMA2_Set($@) {
- my ($hash, @a) = @_;
- my $name=$hash->{NAME};
-
- return "No Argument given" if(!defined($a[1]));
+ my ( $hash, @a ) = @_;
+ my $name = $hash->{NAME};
- my $usage = "Unknown argument ".$a[1].", choose one of statusRequest:noArg toogle:noArg on:noArg off:noArg reboot:noArg restartGui:noArg shutdown:noArg volume:slider,0,1,100 volumeUp:noArg volumeDown:noArg mute:on,off msg remoteControl:UP,DOWN,LEFT,RIGHT,OK,MENU,EPG,ESC,EXIT,RECORD,RED,GREEN,YELLOW,BLUE,AUDIO channel:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 channelUp:noArg channelDown:noArg input:tv,radio play:noArg pause:noArg stop:noArg showText ";
- my $cmd='';
- my $result;
+ return "No Argument given" if ( !defined( $a[1] ) );
+
+ my $usage =
+ "Unknown argument "
+ . $a[1]
+ . ", choose one of statusRequest:noArg toggle:noArg on:noArg off:noArg reboot:noArg restartGui:noArg shutdown:noArg volume:slider,0,1,100 volumeUp:noArg volumeDown:noArg mute:on,off msg remoteControl:UP,DOWN,LEFT,RIGHT,OK,MENU,EPG,ESC,EXIT,RECORD,RED,GREEN,YELLOW,BLUE,AUDIO channel:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 channelUp:noArg channelDown:noArg input:tv,radio play:noArg pause:noArg stop:noArg showText ";
+ my $cmd = '';
+ my $result;
+
+ # statusRequest
+ if ( $a[1] eq "statusRequest" ) {
+
+ # Will be executed anyway on the end of the function
- # statusRequest
- if($a[1] eq "statusRequest") {
- # Will be executed anyway on the end of the function
- # toogle
- } elsif($a[1] eq "toogle") {
- if($hash->{READINGS}{power}{VAL} eq "off") {
- ENIGMA2_Set($hash, "on");
- return undef;
- } else {
- ENIGMA2_Set($hash, "off");
- return undef;
}
- # shutdown
- } elsif($a[1] eq "shutdown") {
- if($hash->{READINGS}{state}{VAL} ne "absent") {
- $cmd = "newstate=1";
- $result = ENIGMA2_SendCommand($hash, "powerstate", $cmd);
- readingsBeginUpdate($hash);
- if (!defined($hash->{READINGS}{state}{VAL}) || $hash->{READINGS}{power}{VAL} ne "off") {
- readingsBulkUpdate($hash, "power", "off");
- }
- if (!defined($hash->{READINGS}{presence}{VAL}) || $hash->{READINGS}{presence}{VAL} ne "absent") {
- $hash->{helper}{AVAILABLE} = 0;
- readingsBulkUpdate($hash, "presence", "absent");
- }
- if (!defined($hash->{READINGS}{state}{VAL}) || $hash->{READINGS}{state}{VAL} ne "absent") {
- readingsBulkUpdate($hash, "state", "absent");
- }
- readingsEndUpdate($hash, 1);
- } else {
- return "Device needs to be ON to set to standby mode.";
- }
-
- # reboot
- } elsif($a[1] eq "reboot") {
- if($hash->{READINGS}{state}{VAL} ne "absent") {
- $cmd = "newstate=2";
- $result = ENIGMA2_SendCommand($hash, "powerstate", $cmd);
- } else {
- return "Device needs to be reachable to be rebooted.";
- }
-
- # restartGui
- } elsif($a[1] eq "restartGui") {
- if($hash->{READINGS}{state}{VAL} eq "on") {
- $cmd = "newstate=3";
- $result = ENIGMA2_SendCommand($hash, "powerstate", $cmd);
- } else {
- return "Device needs to be ON to restart the GUI.";
- }
-
- # on
- } elsif($a[1] eq "on") {
- if ($hash->{READINGS}{state}{VAL} eq "absent") {
- if (defined($hash->{READINGS}{lanmac}{VAL}) && $hash->{READINGS}{lanmac}{VAL} ne "-") {
- $result = ENIGMA2_wake($hash);
- } else {
- return "Device MAC address unknown. Please turn on the device manually once.";
- }
- } else {
- $cmd = "newstate=4";
- $result = ENIGMA2_SendCommand($hash, "powerstate", $cmd);
- readingsBeginUpdate($hash);
- if (!defined($hash->{READINGS}{power}{VAL}) || $hash->{READINGS}{power}{VAL} ne "on") {
- readingsBulkUpdate($hash, "power", "on");
- }
- if (!defined($hash->{READINGS}{state}{VAL}) || $hash->{READINGS}{state}{VAL} ne "on") {
- readingsBulkUpdate($hash, "state", "on");
- }
- readingsEndUpdate($hash, 1);
- ENIGMA2_GetStatus($hash, 1);
- }
-
- # off
- } elsif($a[1] eq "off") {
- if($hash->{READINGS}{state}{VAL} ne "absent") {
- $cmd = "newstate=5";
- $result = ENIGMA2_SendCommand($hash, "powerstate", $cmd);
- readingsBeginUpdate($hash);
- if (!defined($hash->{READINGS}{power}{VAL}) || $hash->{READINGS}{power}{VAL} ne "off") {
- readingsBulkUpdate($hash, "power", "off");
- }
- if (!defined($hash->{READINGS}{state}{VAL}) || $hash->{READINGS}{state}{VAL} ne "off") {
- readingsBulkUpdate($hash, "state", "off");
- }
- readingsEndUpdate($hash, 1);
- } else {
- return "Device needs to be reachable to be set to standby mode.";
- }
-
- # volume
- } elsif($a[1] eq "volume") {
- return "No argument given" if(!defined($a[2]));
-
- if($hash->{READINGS}{state}{VAL} eq "on") {
- my $_ = $a[2];
- if ( m/^\d+$/ && $_ >= 0 && $_ <= 100 ) {
- $cmd = "set=set".$a[2];
- if (!defined($hash->{READINGS}{volume}{VAL}) || $hash->{READINGS}{volume}{VAL} ne $a[2]) {
- readingsSingleUpdate($hash, "volume", $a[2], 1);
+ # toggle
+ elsif ( $a[1] eq "toggle" ) {
+ if ( $hash->{READINGS}{power}{VAL} eq "off" ) {
+ ENIGMA2_Set( $hash, "on" );
+ return undef;
}
- } else {
- return "Argument does not seem to be a valid integer between 0 and 100";
- }
- $result = ENIGMA2_SendCommand($hash, "vol", $cmd);
- } else {
- return "Device needs to be ON to adjust volume.";
- }
-
- # volumeUp/volumeDown
- } elsif($a[1] =~ /^(volumeUp|volumeDown)$/) {
- if($hash->{READINGS}{state}{VAL} eq "on") {
- if($a[2] eq "volumeUp") {
- $cmd = "set=up";
- } else {
- $cmd = "set=down";
- }
- $result = ENIGMA2_SendCommand($hash, "vol", $cmd);
- } else {
- return "Device needs to be ON to adjust volume.";
- }
-
- # mute
- } elsif($a[1] eq "mute") {
- return "No argument given, choose one of on off toogle" if(!defined($a[2]));
- if($hash->{READINGS}{state}{VAL} eq "on") {
- if($a[2] eq "off") {
- if ($hash->{READINGS}{mute}{VAL} ne "off") {
- $cmd = "set=mute";
- readingsSingleUpdate($hash, "mute", $a[2], 1);
+ else {
+ ENIGMA2_Set( $hash, "off" );
+ return undef;
}
- } elsif($a[2] eq "on") {
- if ($hash->{READINGS}{mute}{VAL} ne "on") {
- $cmd = "set=mute";
- readingsSingleUpdate($hash, "mute", $a[2], 1);
+
+ }
+
+ # shutdown
+ elsif ( $a[1] eq "shutdown" ) {
+ if ( $hash->{READINGS}{state}{VAL} ne "absent" ) {
+ $cmd = "newstate=1";
+ $result = ENIGMA2_SendCommand( $hash, "powerstate", $cmd );
+ readingsBeginUpdate($hash);
+ if ( !defined( $hash->{READINGS}{state}{VAL} )
+ || $hash->{READINGS}{power}{VAL} ne "off" )
+ {
+ readingsBulkUpdate( $hash, "power", "off" );
+ }
+ if ( !defined( $hash->{READINGS}{presence}{VAL} )
+ || $hash->{READINGS}{presence}{VAL} ne "absent" )
+ {
+ $hash->{helper}{AVAILABLE} = 0;
+ readingsBulkUpdate( $hash, "presence", "absent" );
+ }
+ if ( !defined( $hash->{READINGS}{state}{VAL} )
+ || $hash->{READINGS}{state}{VAL} ne "absent" )
+ {
+ readingsBulkUpdate( $hash, "state", "absent" );
+ }
+ readingsEndUpdate( $hash, 1 );
}
- } elsif($a[2] eq "toogle") {
- $cmd = "set=mute";
- if ($hash->{READINGS}{mute}{VAL} eq "off") {
- readingsSingleUpdate($hash, "mute", "on", 1);
- } else {
- readingsSingleUpdate($hash, "mute", "off", 1);
+ else {
+ return "Device needs to be ON to be set to standby mode.";
}
- } else {
- return "Unknown argument ".$a[2];
- }
- $result = ENIGMA2_SendCommand($hash, "vol", $cmd);
- } else {
- return "Device needs to be ON to mute/unmute audio.";
}
- # msg
- } elsif($a[1] eq "msg") {
- if($hash->{READINGS}{state}{VAL} ne "absent") {
- return "No 1st argument given, choose one of yesno info message attention " if(!defined($a[2]));
- return "No 2nd argument given, choose one of timeout " if(!defined($a[3]));
- return "No 3nd argument given, choose one of messagetext " if(!defined($a[4]));
- $_ = $a[3];
- return "Argument ".$_." is not a valid integer between 5 and 49680" if ( !m/^\d+$/ || $_ < 5 || $_ > 49680 );
- my $i=4;
- my $text=$a[$i];
- $i++;
- if (defined($a[$i])) {
- my $arr_size=@a;
- while ($i < $arr_size) {
- $text = $text ." ". $a[$i];
- $i++;
+ # reboot
+ elsif ( $a[1] eq "reboot" ) {
+ if ( $hash->{READINGS}{state}{VAL} ne "absent" ) {
+ $cmd = "newstate=2";
+ $result = ENIGMA2_SendCommand( $hash, "powerstate", $cmd );
}
- }
- if($a[2] eq "yesno") {
- $cmd = "type=0&timeout=".$a[3]."&text=".urlEncode($text);
- } elsif($a[2] eq "info") {
- $cmd = "type=1&timeout=".$a[3]."&text=".urlEncode($text);
- } elsif($a[2] eq "message") {
- $cmd = "type=2&timeout=".$a[3]."&text=".urlEncode($text);
- } elsif($a[2] eq "attention") {
- $cmd = "type=3&timeout=".$a[3]."&text=".urlEncode($text);
- } else {
- return "Unknown argument ".$a[2].", choose one of yesno info message attention ";
- }
- $result = ENIGMA2_SendCommand($hash, "message", $cmd);
- } else {
- return "Device needs to be reachable to send a message to screen.";
- }
-
- # remoteControl
- } elsif($a[1] eq "remoteControl") {
- if($hash->{READINGS}{state}{VAL} ne "absent") {
- if(!defined($a[2])) {
- my $commandKeys = "";
- for (sort keys %{ ENIGMA2_GetRemotecontrolCommand("GetRemotecontrolCommands") } ) {
- $commandKeys = $commandKeys . " " . $_;
+ else {
+ return "Device needs to be reachable to be rebooted.";
}
- return "No argument given, choose one of".$commandKeys;
- }
+ }
- my $request = ENIGMA2_GetRemotecontrolCommand(uc($a[2]));
-
- if ($request eq "POWER") {
- ENIGMA2_Set($hash, "toogle");
- return undef;
- } elsif ($request ne "") {
- $cmd = "command=".ENIGMA2_GetRemotecontrolCommand($a[2]);
- } else {
- my $commandKeys = "";
- for (sort keys %{ ENIGMA2_GetRemotecontrolCommand("GetRemotecontrolCommands") } ) {
- $commandKeys = $commandKeys . " " . $_;
+ # restartGui
+ elsif ( $a[1] eq "restartGui" ) {
+ if ( $hash->{READINGS}{state}{VAL} eq "on" ) {
+ $cmd = "newstate=3";
+ $result = ENIGMA2_SendCommand( $hash, "powerstate", $cmd );
}
- return "Unknown argument ".$a[2].", choose one of".$commandKeys;
- }
-
- $result = ENIGMA2_SendCommand($hash, "remotecontrol", $cmd);
- } else {
- return "Device needs to be reachable to be controlled remotely.";
- }
-
- # channel
- } elsif($a[1] eq "channel") {
- return "No argument given, choose one of channelNumber servicereference " if(!defined($a[2]));
- if($hash->{READINGS}{state}{VAL} eq "on") {
- my $_ = $a[2];
- if ( m/^(\d+):(.*):$/ ) {
- $result = ENIGMA2_SendCommand($hash, "zap", "sRef=".$_);
- } elsif ( m/^\d+$/ && $_ > 0 && $_ < 10000 ) {
- for (split(//, $a[2])) {
- $cmd = "command=".ENIGMA2_GetRemotecontrolCommand($_);
- $result = ENIGMA2_SendCommand($hash, "remotecontrol", $cmd);
+ else {
+ return "Device needs to be ON to restart the GUI.";
}
- $result = ENIGMA2_SendCommand($hash, "remotecontrol", "command=".ENIGMA2_GetRemotecontrolCommand("OK"));
- } else {
- return "Argument ".$_." is not a valid integer between 0 and 9999 or servicereference is invalid";
- }
- } else {
- return "Device needs to be ON to switch to a specific channel.";
}
- # channelUp/channelDown
- } elsif($a[1] =~ /^(channelUp|channelDown)$/) {
- if($hash->{READINGS}{state}{VAL} eq "on") {
- if($a[1] eq "channelUp") {
- $cmd = "command=".ENIGMA2_GetRemotecontrolCommand("RIGHT");
- } else {
- $cmd = "command=".ENIGMA2_GetRemotecontrolCommand("LEFT");
- }
- $result = ENIGMA2_SendCommand($hash, "remotecontrol", $cmd);
- } else {
- return "Device needs to be ON to switch channel.";
- }
-
- # input
- } elsif($a[1] eq "input") {
- if($hash->{READINGS}{state}{VAL} eq "on") {
- if($a[2] eq "tv" || $a[2] eq "TV") {
- $cmd = "command=".ENIGMA2_GetRemotecontrolCommand("TV");
- readingsSingleUpdate($hash, "input", "tv", 1);
- } elsif($a[2] eq "radio" || $a[2] eq "RADIO") {
- $cmd = "command=".ENIGMA2_GetRemotecontrolCommand("RADIO");
- readingsSingleUpdate($hash, "input", "radio", 1);
- } else {
- return "Argument ".$a[2]." is not a valid, please choose one from tv radio ";
- }
- $result = ENIGMA2_SendCommand($hash, "remotecontrol", $cmd);
- } else {
- return "Device needs to be ON to switch input.";
- }
-
- # play / pause
- } elsif($a[1] =~ /^(play|pause)$/) {
- if($hash->{READINGS}{state}{VAL} eq "on") {
- $cmd = "command=".ENIGMA2_GetRemotecontrolCommand("PLAYPAUSE");
- $result = ENIGMA2_SendCommand($hash, "remotecontrol", $cmd);
- } else {
- return "Device needs to be ON to play or pause video.";
- }
-
- # stop
- } elsif($a[1] eq "stop") {
- if($hash->{READINGS}{state}{VAL} eq "on") {
- $cmd = "command=".ENIGMA2_GetRemotecontrolCommand("STOP");
- $result = ENIGMA2_SendCommand($hash, "remotecontrol", $cmd);
- } else {
- return "Device needs to be ON to stop video.";
- }
-
- # showText
- } elsif($a[1] eq "showText") {
- if($hash->{READINGS}{state}{VAL} ne "absent") {
- return "No argument given, choose one of messagetext " if(!defined($a[2]));
- my $i=2;
- my $text=$a[$i];
- $i++;
- if (defined($a[$i])) {
- my $arr_size=@a;
- while ($i < $arr_size) {
- $text = $text ." ". $a[$i];
- $i++;
+ # on
+ elsif ( $a[1] eq "on" ) {
+ if ( $hash->{READINGS}{state}{VAL} eq "absent" ) {
+ if ( defined( $hash->{READINGS}{lanmac}{VAL} )
+ && $hash->{READINGS}{lanmac}{VAL} ne "-" )
+ {
+ $result = ENIGMA2_wake($hash);
+ }
+ else {
+ return
+"Device MAC address unknown. Please turn on the device manually once.";
+ }
+ }
+ else {
+ $cmd = "newstate=4";
+ $result = ENIGMA2_SendCommand( $hash, "powerstate", $cmd );
+ readingsBeginUpdate($hash);
+ if ( !defined( $hash->{READINGS}{power}{VAL} )
+ || $hash->{READINGS}{power}{VAL} ne "on" )
+ {
+ readingsBulkUpdate( $hash, "power", "on" );
+ }
+ if ( !defined( $hash->{READINGS}{state}{VAL} )
+ || $hash->{READINGS}{state}{VAL} ne "on" )
+ {
+ readingsBulkUpdate( $hash, "state", "on" );
+ }
+ readingsEndUpdate( $hash, 1 );
+ ENIGMA2_GetStatus( $hash, 1 );
}
- }
- $cmd = "type=1&timeout=8&text=".urlEncode($text);
- $result = ENIGMA2_SendCommand($hash, "message", $cmd);
- } else {
- return "Device needs to be reachable to send a message to screen.";
}
- # return usage hint
- } else {
- return $usage;
- }
+ # off
+ elsif ( $a[1] eq "off" ) {
+ if ( $hash->{READINGS}{state}{VAL} ne "absent" ) {
+ $cmd = "newstate=5";
+ $result = ENIGMA2_SendCommand( $hash, "powerstate", $cmd );
+ readingsBeginUpdate($hash);
+ if ( !defined( $hash->{READINGS}{power}{VAL} )
+ || $hash->{READINGS}{power}{VAL} ne "off" )
+ {
+ readingsBulkUpdate( $hash, "power", "off" );
+ }
+ if ( !defined( $hash->{READINGS}{state}{VAL} )
+ || $hash->{READINGS}{state}{VAL} ne "off" )
+ {
+ readingsBulkUpdate( $hash, "state", "off" );
+ }
+ readingsEndUpdate( $hash, 1 );
+ }
+ else {
+ return "Device needs to be reachable to be set to standby mode.";
+ }
+ }
- # Call the GetStatus() Function to retrieve the new values after setting something (with local flag, so the internal timer is not getting interupted)
- if($a[1] ne "shutdown" && $a[1] ne "on" && $a[1] ne "restartGui" && $a[1] ne "reboot") {
- ENIGMA2_GetStatus($hash, 1);
- }
+ # volume
+ elsif ( $a[1] eq "volume" ) {
+ return "No argument given" if ( !defined( $a[2] ) );
- return undef;
+ if ( $hash->{READINGS}{state}{VAL} eq "on" ) {
+ my $_ = $a[2];
+ if ( m/^\d+$/ && $_ >= 0 && $_ <= 100 ) {
+ $cmd = "set=set" . $a[2];
+ if ( !defined( $hash->{READINGS}{volume}{VAL} )
+ || $hash->{READINGS}{volume}{VAL} ne $a[2] )
+ {
+ readingsSingleUpdate( $hash, "volume", $a[2], 1 );
+ }
+ }
+ else {
+ return
+"Argument does not seem to be a valid integer between 0 and 100";
+ }
+ $result = ENIGMA2_SendCommand( $hash, "vol", $cmd );
+ }
+ else {
+ return "Device needs to be ON to adjust volume.";
+ }
+ }
+
+ # volumeUp/volumeDown
+ elsif ( $a[1] =~ /^(volumeUp|volumeDown)$/ ) {
+ if ( $hash->{READINGS}{state}{VAL} eq "on" ) {
+ if ( $a[1] eq "volumeUp" ) {
+ $cmd = "set=up";
+ }
+ else {
+ $cmd = "set=down";
+ }
+ $result = ENIGMA2_SendCommand( $hash, "vol", $cmd );
+ }
+ else {
+ return "Device needs to be ON to adjust volume.";
+ }
+ }
+
+ # mute
+ elsif ( $a[1] eq "mute" ) {
+ if ( $hash->{READINGS}{state}{VAL} eq "on" ) {
+ if ( $a[2] eq "off" ) {
+ if ( $hash->{READINGS}{mute}{VAL} ne "off" ) {
+ $cmd = "set=mute";
+ readingsSingleUpdate( $hash, "mute", $a[2], 1 );
+ }
+ }
+ elsif ( $a[2] eq "on" ) {
+ if ( $hash->{READINGS}{mute}{VAL} ne "on" ) {
+ $cmd = "set=mute";
+ readingsSingleUpdate( $hash, "mute", $a[2], 1 );
+ }
+ }
+ elsif ( $a[2] eq "toggle" || !defined( $a[2] ) ) {
+ $cmd = "set=mute";
+ if ( $hash->{READINGS}{mute}{VAL} eq "off" ) {
+ readingsSingleUpdate( $hash, "mute", "on", 1 );
+ }
+ else {
+ readingsSingleUpdate( $hash, "mute", "off", 1 );
+ }
+ }
+ else {
+ return "Unknown argument " . $a[2];
+ }
+ $result = ENIGMA2_SendCommand( $hash, "vol", $cmd );
+ }
+ else {
+ return "Device needs to be ON to mute/unmute audio.";
+ }
+ }
+
+ # msg
+ elsif ( $a[1] eq "msg" ) {
+ if ( $hash->{READINGS}{state}{VAL} ne "absent" ) {
+ return
+"No 1st argument given, choose one of yesno info message attention "
+ if ( !defined( $a[2] ) );
+ return "No 2nd argument given, choose one of timeout "
+ if ( !defined( $a[3] ) );
+ return "No 3nd argument given, choose one of messagetext "
+ if ( !defined( $a[4] ) );
+ $_ = $a[3];
+ return
+ "Argument "
+ . $_
+ . " is not a valid integer between 5 and 49680"
+ if ( !m/^\d+$/ || $_ < 5 || $_ > 49680 );
+ my $i = 4;
+ my $text = $a[$i];
+ $i++;
+
+ if ( defined( $a[$i] ) ) {
+ my $arr_size = @a;
+ while ( $i < $arr_size ) {
+ $text = $text . " " . $a[$i];
+ $i++;
+ }
+ }
+ if ( $a[2] eq "yesno" ) {
+ $cmd = "type=0&timeout=" . $a[3] . "&text=" . urlEncode($text);
+ }
+ elsif ( $a[2] eq "info" ) {
+ $cmd = "type=1&timeout=" . $a[3] . "&text=" . urlEncode($text);
+ }
+ elsif ( $a[2] eq "message" ) {
+ $cmd = "type=2&timeout=" . $a[3] . "&text=" . urlEncode($text);
+ }
+ elsif ( $a[2] eq "attention" ) {
+ $cmd = "type=3&timeout=" . $a[3] . "&text=" . urlEncode($text);
+ }
+ else {
+ return
+ "Unknown argument "
+ . $a[2]
+ . ", choose one of yesno info message attention ";
+ }
+ $result = ENIGMA2_SendCommand( $hash, "message", $cmd );
+ }
+ else {
+ return "Device needs to be reachable to send a message to screen.";
+ }
+ }
+
+ # remoteControl
+ elsif ( $a[1] eq "remoteControl" ) {
+ if ( $hash->{READINGS}{state}{VAL} ne "absent" ) {
+ if ( !defined( $a[2] ) ) {
+ my $commandKeys = "";
+ for (
+ sort keys %{
+ ENIGMA2_GetRemotecontrolCommand(
+ "GetRemotecontrolCommands")
+ }
+ )
+ {
+ $commandKeys = $commandKeys . " " . $_;
+ }
+ return "No argument given, choose one of" . $commandKeys;
+ }
+
+ my $request = ENIGMA2_GetRemotecontrolCommand( uc( $a[2] ) );
+
+ if ( $request eq "POWER" ) {
+ ENIGMA2_Set( $hash, "toggle" );
+ return undef;
+ }
+ elsif ( $request ne "" ) {
+ $cmd = "command=" . ENIGMA2_GetRemotecontrolCommand( $a[2] );
+ }
+ else {
+ my $commandKeys = "";
+ for (
+ sort keys %{
+ ENIGMA2_GetRemotecontrolCommand(
+ "GetRemotecontrolCommands")
+ }
+ )
+ {
+ $commandKeys = $commandKeys . " " . $_;
+ }
+ return
+ "Unknown argument "
+ . $a[2]
+ . ", choose one of"
+ . $commandKeys;
+ }
+
+ $result = ENIGMA2_SendCommand( $hash, "remotecontrol", $cmd );
+ }
+ else {
+ return "Device needs to be reachable to be controlled remotely.";
+ }
+ }
+
+ # channel
+ elsif ( $a[1] eq "channel" ) {
+ return
+ "No argument given, choose one of channelNumber servicereference "
+ if ( !defined( $a[2] ) );
+ if ( $hash->{READINGS}{state}{VAL} eq "on" ) {
+ my $_ = $a[2];
+ if (m/^(\d+):(.*):$/) {
+ $result = ENIGMA2_SendCommand( $hash, "zap", "sRef=" . $_ );
+ }
+ elsif ( m/^\d+$/ && $_ > 0 && $_ < 10000 ) {
+ for ( split( //, $a[2] ) ) {
+ $cmd = "command=" . ENIGMA2_GetRemotecontrolCommand($_);
+ $result =
+ ENIGMA2_SendCommand( $hash, "remotecontrol", $cmd );
+ }
+ $result = ENIGMA2_SendCommand( $hash, "remotecontrol",
+ "command=" . ENIGMA2_GetRemotecontrolCommand("OK") );
+ }
+ else {
+ return "Argument " . $_
+ . " is not a valid integer between 0 and 9999 or servicereference is invalid";
+ }
+ }
+ else {
+ return "Device needs to be ON to switch to a specific channel.";
+ }
+ }
+
+ # channelUp/channelDown
+ elsif ( $a[1] =~ /^(channelUp|channelDown)$/ ) {
+ if ( $hash->{READINGS}{state}{VAL} eq "on" ) {
+ if ( $a[1] eq "channelUp" ) {
+ $cmd = "command=" . ENIGMA2_GetRemotecontrolCommand("RIGHT");
+ }
+ else {
+ $cmd = "command=" . ENIGMA2_GetRemotecontrolCommand("LEFT");
+ }
+ $result = ENIGMA2_SendCommand( $hash, "remotecontrol", $cmd );
+ }
+ else {
+ return "Device needs to be ON to switch channel.";
+ }
+ }
+
+ # input
+ elsif ( $a[1] eq "input" ) {
+ if ( $hash->{READINGS}{state}{VAL} eq "on" ) {
+ if ( $a[2] eq "tv" || $a[2] eq "TV" ) {
+ $cmd = "command=" . ENIGMA2_GetRemotecontrolCommand("TV");
+ readingsSingleUpdate( $hash, "input", "tv", 1 );
+ }
+ elsif ( $a[2] eq "radio" || $a[2] eq "RADIO" ) {
+ $cmd = "command=" . ENIGMA2_GetRemotecontrolCommand("RADIO");
+ readingsSingleUpdate( $hash, "input", "radio", 1 );
+ }
+ else {
+ return
+ "Argument "
+ . $a[2]
+ . " is not a valid, please choose one from tv radio ";
+ }
+ $result = ENIGMA2_SendCommand( $hash, "remotecontrol", $cmd );
+ }
+ else {
+ return "Device needs to be ON to switch input.";
+ }
+ }
+
+ # play / pause
+ elsif ( $a[1] =~ /^(play|pause)$/ ) {
+ if ( $hash->{READINGS}{state}{VAL} eq "on" ) {
+ $cmd = "command=" . ENIGMA2_GetRemotecontrolCommand("PLAYPAUSE");
+ $result = ENIGMA2_SendCommand( $hash, "remotecontrol", $cmd );
+ }
+ else {
+ return "Device needs to be ON to play or pause video.";
+ }
+ }
+
+ # stop
+ elsif ( $a[1] eq "stop" ) {
+ if ( $hash->{READINGS}{state}{VAL} eq "on" ) {
+ $cmd = "command=" . ENIGMA2_GetRemotecontrolCommand("STOP");
+ $result = ENIGMA2_SendCommand( $hash, "remotecontrol", $cmd );
+ }
+ else {
+ return "Device needs to be ON to stop video.";
+ }
+ }
+
+ # showText
+ elsif ( $a[1] eq "showText" ) {
+ if ( $hash->{READINGS}{state}{VAL} ne "absent" ) {
+ return "No argument given, choose one of messagetext "
+ if ( !defined( $a[2] ) );
+ my $i = 2;
+ my $text = $a[$i];
+ $i++;
+ if ( defined( $a[$i] ) ) {
+ my $arr_size = @a;
+ while ( $i < $arr_size ) {
+ $text = $text . " " . $a[$i];
+ $i++;
+ }
+ }
+ $cmd = "type=1&timeout=8&text=" . urlEncode($text);
+ $result = ENIGMA2_SendCommand( $hash, "message", $cmd );
+ }
+ else {
+ return "Device needs to be reachable to send a message to screen.";
+ }
+ }
+
+ # return usage hint
+ else {
+ return $usage;
+ }
+
+ # Call the GetStatus() Function to retrieve the new values after setting
+ # something (with local flag, so the internal timer is not getting interupted)
+ if ( $a[1] ne "shutdown"
+ && $a[1] ne "on"
+ && $a[1] ne "restartGui"
+ && $a[1] ne "reboot" )
+ {
+ ENIGMA2_GetStatus( $hash, 1 );
+ }
+
+ return undef;
}
###################################
sub ENIGMA2_Define($$) {
- my ($hash, $def) = @_;
- my @a = split("[ \t][ \t]*", $def);
- my $name=$hash->{NAME};
+ my ( $hash, $def ) = @_;
+ my @a = split( "[ \t][ \t]*", $def );
+ my $name = $hash->{NAME};
- if (int(@a) < 3) {
- my $msg = "Wrong syntax: define ENIGMA2 [] [] []";
- Log3 $name, 4, $msg;
- return $msg;
- }
+ if ( int(@a) < 3 ) {
+ my $msg =
+"Wrong syntax: define ENIGMA2 [] [] []";
+ Log3 $name, 4, $msg;
+ return $msg;
+ }
- my $address = $a[2];
- $hash->{helper}{ADDRESS} = $address;
+ my $address = $a[2];
+ $hash->{helper}{ADDRESS} = $address;
- # use port 80 if not defined
- my $port = $a[3]||80;
- $hash->{helper}{PORT} = $port;
+ # use port 80 if not defined
+ my $port = $a[3] || 80;
+ $hash->{helper}{PORT} = $port;
- # use interval of 75sec if not defined
- my $interval=$a[4]||75;
- $hash->{INTERVAL}=$interval;
+ # use interval of 75sec if not defined
+ my $interval = $a[4] || 75;
+ $hash->{INTERVAL} = $interval;
- # set http user if defined
- my $http_user=$a[5];
- $hash->{helper}{USER}=$http_user if $http_user;
+ # set http user if defined
+ my $http_user = $a[5];
+ $hash->{helper}{USER} = $http_user if $http_user;
- # set http password if defined
- my $http_passwd=$a[6];
- $hash->{helper}{PASSWORD}=$http_passwd if $http_passwd;
+ # set http password if defined
+ my $http_passwd = $a[6];
+ $hash->{helper}{PASSWORD} = $http_passwd if $http_passwd;
- unless(exists($hash->{helper}{AVAILABLE}) and ($hash->{helper}{AVAILABLE} == 0)) {
- $hash->{helper}{AVAILABLE} = 1;
- readingsSingleUpdate($hash, "presence", "present", 1);
- }
+ unless ( exists( $hash->{helper}{AVAILABLE} )
+ and ( $hash->{helper}{AVAILABLE} == 0 ) )
+ {
+ $hash->{helper}{AVAILABLE} = 1;
+ readingsSingleUpdate( $hash, "presence", "present", 1 );
+ }
- # start the status update timer
- RemoveInternalTimer($hash);
- InternalTimer(gettimeofday()+2, "ENIGMA2_GetStatus", $hash, 0);
-
- return undef;
+ # start the status update timer
+ RemoveInternalTimer($hash);
+ InternalTimer( gettimeofday() + 2, "ENIGMA2_GetStatus", $hash, 0 );
+
+ return undef;
}
#############################################################################################################
@@ -852,122 +1125,160 @@ sub ENIGMA2_Define($$) {
#
############################################################################################################
-
-
###################################
sub ENIGMA2_SendCommand($$;$) {
- my ($hash, $service, $cmd) = @_;
- my $name=$hash->{NAME};
- my $address = $hash->{helper}{ADDRESS};
- my $port = $hash->{helper}{PORT};
- $cmd = "" if(!defined($cmd));
+ my ( $hash, $service, $cmd ) = @_;
+ my $name = $hash->{NAME};
+ my $address = $hash->{helper}{ADDRESS};
+ my $port = $hash->{helper}{PORT};
- my $http_user = $hash->{helper}{USER} if(defined($hash->{helper}{USER}));
- my $http_passwd = $hash->{helper}{PASSWORD} if(defined($hash->{helper}{PASSWORD}));
- my $URL;
- my $response;
- my $return;
-
- Log3 $name, 5, "ENIGMA2: execute on $name: $service -> $cmd";
+ my $http_user = $hash->{helper}{USER}
+ if ( defined( $hash->{helper}{USER} ) );
+ my $http_passwd = $hash->{helper}{PASSWORD}
+ if ( defined( $hash->{helper}{PASSWORD} ) );
+ my $URL;
+ my $response;
+ my $return;
- if (defined($http_user) && defined($http_passwd)) {
- $URL="http://".$http_user.":".$http_passwd."@".$address.":".$port."/web/".$service."?".$cmd."&";
- } elsif (defined($http_user)) {
- $URL="http://".$http_user."@".$address.":".$port."/web/".$service."?".$cmd."&";
- } else {
- $URL="http://".$address.":".$port."/web/".$service."?".$cmd."&";
- }
-
- $response = CustomGetFileFromURL(0, $URL, 4, $cmd, 0, 5);
-
- Log3 $name, 5, "ENIGMA2: got response for $name: $service" if(defined($response));
-
- unless (defined($response)) {
- if((not exists($hash->{helper}{AVAILABLE})) or (exists($hash->{helper}{AVAILABLE}) and $hash->{helper}{AVAILABLE} eq 1)) {
- Log3 $name, 3, "ENIGMA2: device $name is unavailable";
- readingsSingleUpdate($hash, "presence", "absent", 1);
- }
- } else {
- if (defined($hash->{helper}{AVAILABLE}) and $hash->{helper}{AVAILABLE} eq 0) {
- Log3 $name, 3, "ENIGMA2: device $name is available";
- readingsSingleUpdate($hash, "presence", "present", 1);
+ if ( !defined($cmd) ) {
+ my $cmd = "";
+ }
+ else {
+ $cmd = $cmd . "&";
}
- if ($response ne "") {
- my $parser = XML::Simple->new(
- NormaliseSpace => 2,
- KeepRoot => 0,
- ForceArray => 0,
- SuppressEmpty => 1
- );
- $return = $parser->XMLin($response);
+ Log3 $name, 5, "ENIGMA2: execute on $name: $service -> $cmd";
+
+ if ( defined($http_user) && defined($http_passwd) ) {
+ $URL =
+ "http://"
+ . $http_user . ":"
+ . $http_passwd . "@"
+ . $address . ":"
+ . $port . "/web/"
+ . $service . "?"
+ . $cmd;
+ }
+ elsif ( defined($http_user) ) {
+ $URL =
+ "http://"
+ . $http_user . "@"
+ . $address . ":"
+ . $port . "/web/"
+ . $service . "?"
+ . $cmd;
+ }
+ else {
+ $URL =
+ "http://" . $address . ":" . $port . "/web/" . $service . "?" . $cmd;
}
- $hash->{helper}{AVAILABLE} = (defined($response) ? 1 : 0);
+ $response =
+ Encode::encode_utf8( CustomGetFileFromURL( 0, $URL, 4, $cmd, 0, 5 ) );
- if(ref($return) eq "HASH") {
- return $return;
- } else {
- return $response;
+ Log3 $name, 5, "ENIGMA2: got response for $name: $service"
+ if ( defined($response) );
+
+ unless ( defined($response) ) {
+ if (
+ ( not exists( $hash->{helper}{AVAILABLE} ) )
+ or ( exists( $hash->{helper}{AVAILABLE} )
+ and $hash->{helper}{AVAILABLE} eq 1 )
+ )
+ {
+ Log3 $name, 3, "ENIGMA2: device $name is unavailable";
+ readingsSingleUpdate( $hash, "presence", "absent", 1 );
+ }
}
- }
+ else {
+ if ( defined( $hash->{helper}{AVAILABLE} )
+ and $hash->{helper}{AVAILABLE} eq 0 )
+ {
+ Log3 $name, 3, "ENIGMA2: device $name is available";
+ readingsSingleUpdate( $hash, "presence", "present", 1 );
+ }
- $hash->{helper}{AVAILABLE} = (defined($response) ? 1 : 0);
+ if ( $response ne "" ) {
+ my $parser = XML::Simple->new(
+ NormaliseSpace => 2,
+ KeepRoot => 0,
+ ForceArray => 0,
+ SuppressEmpty => 1
+ );
+ $return = $parser->XMLin($response);
+ }
- return undef;
+ $hash->{helper}{AVAILABLE} = ( defined($response) ? 1 : 0 );
+
+ if ( ref($return) eq "HASH" ) {
+ return $return;
+ }
+ else {
+ return $response;
+ }
+ }
+
+ $hash->{helper}{AVAILABLE} = ( defined($response) ? 1 : 0 );
+
+ return undef;
}
###################################
sub ENIGMA2_Undefine($$) {
- my ($hash, $arg) = @_;
-
- # Stop the internal GetStatus-Loop and exit
- RemoveInternalTimer($hash);
- return undef;
+ my ( $hash, $arg ) = @_;
+
+ # Stop the internal GetStatus-Loop and exit
+ RemoveInternalTimer($hash);
+ return undef;
}
###################################
sub ENIGMA2_wake ($) {
- my ($hash) = @_;
- my $name=$hash->{NAME};
- my $mac_addr = $hash->{READINGS}{lanmac}{VAL};
- my $address;
- my $port;
+ my ($hash) = @_;
+ my $name = $hash->{NAME};
+ my $mac_addr = $hash->{READINGS}{lanmac}{VAL};
+ my $address;
+ my $port;
- if ($mac_addr ne "-") {
- if (! defined $address) { $address = '255.255.255.255' }
- if (! defined $port || $port !~ /^\d+$/ ) { $port = 9 }
+ if ( $mac_addr ne "-" ) {
+ if ( !defined $address ) { $address = '255.255.255.255' }
+ if ( !defined $port || $port !~ /^\d+$/ ) { $port = 9 }
- my $sock = new IO::Socket::INET(Proto=>'udp') or die "socket : $!";
- die "Can't create WOL socket" if(!$sock);
-
- my $ip_addr = inet_aton($address);
- my $sock_addr = sockaddr_in($port, $ip_addr);
- $mac_addr =~ s/://g;
- my $packet = pack('C6H*', 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, $mac_addr x 16);
+ my $sock = new IO::Socket::INET( Proto => 'udp' ) or die "socket : $!";
+ die "Can't create WOL socket" if ( !$sock );
- setsockopt($sock, SOL_SOCKET, SO_BROADCAST, 1) or die "setsockopt : $!";
-
-
- Log3 $name, 4, "ENIGMA2: Waking up $name by sending Wake-On-Lan magic package to ".$mac_addr;
- send($sock, $packet, 0, $sock_addr) or die "send : $!";
- close ($sock);
- } else {
- Log3 $name, 3, "ENIGMA2: MAC address for $name unknown. Please turn on manually once.";
- }
+ my $ip_addr = inet_aton($address);
+ my $sock_addr = sockaddr_in( $port, $ip_addr );
+ $mac_addr =~ s/://g;
+ my $packet =
+ pack( 'C6H*', 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, $mac_addr x 16 );
- return 1;
+ setsockopt( $sock, SOL_SOCKET, SO_BROADCAST, 1 )
+ or die "setsockopt : $!";
+
+ Log3 $name, 4,
+ "ENIGMA2: Waking up $name by sending Wake-On-Lan magic package to "
+ . $mac_addr;
+ send( $sock, $packet, 0, $sock_addr ) or die "send : $!";
+ close($sock);
+ }
+ else {
+ Log3 $name, 3,
+"ENIGMA2: MAC address for $name unknown. Please turn on manually once.";
+ }
+
+ return 1;
}
#####################################
# Callback from 95_remotecontrol for command makenotify.
sub ENIGMA2_RCmakenotify($$) {
- my ($nam, $ndev) = @_;
- my $nname="notify_$nam";
-
- fhem("define $nname notify $nam set $ndev remoteControl ".'$EVENT',1);
- Log3 undef, 2, "[remotecontrol:ENIGMA2] Notify created: $nname";
- return "Notify created by ENIGMA2: $nname";
+ my ( $nam, $ndev ) = @_;
+ my $nname = "notify_$nam";
+
+ fhem( "define $nname notify $nam set $ndev remoteControl " . '$EVENT', 1 );
+ Log3 undef, 2, "[remotecontrol:ENIGMA2] Notify created: $nname";
+ return "Notify created by ENIGMA2: $nname";
}
#####################################
@@ -975,565 +1286,580 @@ sub ENIGMA2_RCmakenotify($$) {
# Dreambox DM500 + DM800 with SVG
sub ENIGMA2_RClayout_DM800_SVG() {
- my @row;
+ my @row;
- $row[0]=":rc_BLANK.svg,:rc_BLANK.svg,POWER:rc_POWER.svg";
- $row[1]=":rc_BLANK.svg,:rc_BLANK.svg,:rc_BLANK.svg";
+ $row[0] = ":rc_BLANK.svg,:rc_BLANK.svg,POWER:rc_POWER.svg";
+ $row[1] = ":rc_BLANK.svg,:rc_BLANK.svg,:rc_BLANK.svg";
- $row[2]="1:rc_1.svg,2:rc_2.svg,3:rc_3.svg";
- $row[3]="4:rc_4.svg,5:rc_5.svg,6:rc_6.svg";
- $row[4]="7:rc_7.svg,8:rc_8.svg,9:rc_9.svg";
- $row[5]="LEFTBRACE:rc_PREVIOUS.svg,0:rc_0.svg,RIGHTBRACE:rc_NEXT.svg";
- $row[6]=":rc_BLANK.svg,:rc_BLANK.svg,:rc_BLANK.svg";
+ $row[2] = "1:rc_1.svg,2:rc_2.svg,3:rc_3.svg";
+ $row[3] = "4:rc_4.svg,5:rc_5.svg,6:rc_6.svg";
+ $row[4] = "7:rc_7.svg,8:rc_8.svg,9:rc_9.svg";
+ $row[5] = "LEFTBRACE:rc_PREVIOUS.svg,0:rc_0.svg,RIGHTBRACE:rc_NEXT.svg";
+ $row[6] = ":rc_BLANK.svg,:rc_BLANK.svg,:rc_BLANK.svg";
- $row[7]="VOLUMEUP:rc_VOLPLUS.svg,MUTE:rc_MUTE.svg,CHANNELUP:rc_UP.svg";
- $row[8]="VOLUMEDOWN:rc_VOLMINUS.svg,EXIT:rc_EXIT.svg,CHANNELDOWN:rc_DOWN.svg";
- $row[9]=":rc_BLANK.svg,:rc_BLANK.svg,:rc_BLANK.svg";
+ $row[7] = "VOLUMEUP:rc_VOLPLUS.svg,MUTE:rc_MUTE.svg,CHANNELUP:rc_UP.svg";
+ $row[8] =
+ "VOLUMEDOWN:rc_VOLMINUS.svg,EXIT:rc_EXIT.svg,CHANNELDOWN:rc_DOWN.svg";
+ $row[9] = ":rc_BLANK.svg,:rc_BLANK.svg,:rc_BLANK.svg";
- $row[10]="INFO:rc_INFO.svg,UP:rc_UP.svg,MENU:rc_MENU.svg";
- $row[11]="LEFT:rc_LEFT.svg,OK:rc_OK.svg,RIGHT:rc_RIGHT.svg";
- $row[12]="AUDIO:rc_AUDIO.svg,DOWN:rc_DOWN.svg,VIDEO:rc_VIDEO.svg";
- $row[13]=":rc_BLANK.svg,EXIT:rc_EXIT.svg,:rc_BLANK.svg";
+ $row[10] = "INFO:rc_INFO.svg,UP:rc_UP.svg,MENU:rc_MENU.svg";
+ $row[11] = "LEFT:rc_LEFT.svg,OK:rc_OK.svg,RIGHT:rc_RIGHT.svg";
+ $row[12] = "AUDIO:rc_AUDIO.svg,DOWN:rc_DOWN.svg,VIDEO:rc_VIDEO.svg";
+ $row[13] = ":rc_BLANK.svg,EXIT:rc_EXIT.svg,:rc_BLANK.svg";
- $row[14]="RED:rc_REWred.svg,GREEN:rc_PLAYgreen.svg,YELLOW:rc_PAUSEyellow.svg,BLUE:rc_FFblue.svg";
- $row[15]="TV:rc_TVstop.svg,RADIO:rc_RADIOred.svg,TEXT:rc_TEXT.svg,HELP:rc_HELP.svg";
+ $row[14] =
+"RED:rc_REWred.svg,GREEN:rc_PLAYgreen.svg,YELLOW:rc_PAUSEyellow.svg,BLUE:rc_FFblue.svg";
+ $row[15] =
+"TV:rc_TVstop.svg,RADIO:rc_RADIOred.svg,TEXT:rc_TEXT.svg,HELP:rc_HELP.svg";
- $row[16]="attr rc_iconpath icons/remotecontrol";
- $row[17]="attr rc_iconprefix black_btn_";
- return @row;
+ $row[16] = "attr rc_iconpath icons/remotecontrol";
+ $row[17] = "attr rc_iconprefix black_btn_";
+ return @row;
}
# Dreambox DM500 + DM800 with PNG
sub ENIGMA2_RClayout_DM800() {
- my @row;
+ my @row;
- $row[0]=":blank,:blank,POWER:POWEROFF";
- $row[1]=":blank,:blank,:blank";
+ $row[0] = ":blank,:blank,POWER:POWEROFF";
+ $row[1] = ":blank,:blank,:blank";
- $row[2]="1,2,3";
- $row[3]="4,5,6";
- $row[4]="7,8,9";
- $row[5]="LEFTBRACE:LEFT2,0:0,RIGHTBRACE:RIGHT2";
- $row[6]=":blank,:blank,:blank";
+ $row[2] = "1,2,3";
+ $row[3] = "4,5,6";
+ $row[4] = "7,8,9";
+ $row[5] = "LEFTBRACE:LEFT2,0:0,RIGHTBRACE:RIGHT2";
+ $row[6] = ":blank,:blank,:blank";
- $row[7]="VOLUMEUP:VOLUP,MUTE,CHANNELUP:CHUP2";
- $row[8]="VOLUMEDOWN:VOLDOWN,EXIT,CHANNELDOWN:CHDOWN2";
- $row[9]=":blank,:blank,:blank";
+ $row[7] = "VOLUMEUP:VOLUP,MUTE,CHANNELUP:CHUP2";
+ $row[8] = "VOLUMEDOWN:VOLDOWN,EXIT,CHANNELDOWN:CHDOWN2";
+ $row[9] = ":blank,:blank,:blank";
- $row[10]="INFO,UP,MENU";
- $row[11]="LEFT,OK,RIGHT";
- $row[12]="AUDIO,DOWN,VIDEO";
- $row[13]=":blank,:blank,:blank";
+ $row[10] = "INFO,UP,MENU";
+ $row[11] = "LEFT,OK,RIGHT";
+ $row[12] = "AUDIO,DOWN,VIDEO";
+ $row[13] = ":blank,:blank,:blank";
- $row[14]="RED:REWINDred,GREEN:PLAYgreen,YELLOW:PAUSEyellow,BLUE:FFblue";
- $row[15]="TV:TVstop,RADIO:RADIOred,TEXT,HELP";
+ $row[14] = "RED:REWINDred,GREEN:PLAYgreen,YELLOW:PAUSEyellow,BLUE:FFblue";
+ $row[15] = "TV:TVstop,RADIO:RADIOred,TEXT,HELP";
- $row[16]="attr rc_iconpath icons/remotecontrol";
- $row[17]="attr rc_iconprefix black_btn_";
- return @row;
+ $row[16] = "attr rc_iconpath icons/remotecontrol";
+ $row[17] = "attr rc_iconprefix black_btn_";
+ return @row;
}
# Dreambox DM800se + DM8000 with SVG
sub ENIGMA2_RClayout_DM8000_SVG() {
- my @row;
+ my @row;
- $row[0]=":rc_BLANK.svg,:rc_BLANK.svg,POWER:rc_POWER.svg";
- $row[1]=":rc_BLANK.svg,:rc_BLANK.svg,:rc_BLANK.svg";
+ $row[0] = ":rc_BLANK.svg,:rc_BLANK.svg,POWER:rc_POWER.svg";
+ $row[1] = ":rc_BLANK.svg,:rc_BLANK.svg,:rc_BLANK.svg";
- $row[2]="1:rc_1.svg,2:rc_2.svg,3:rc_3.svg";
- $row[3]="4:rc_4.svg,5:rc_5.svg,6:rc_6.svg";
- $row[4]="7:rc_7.svg,8:rc_8.svg,9:rc_9.svg";
- $row[5]="LEFTBRACE:rc_PREVIOUS.svg,0:rc_0.svg,RIGHTBRACE:rc_NEXT.svg";
- $row[6]=":rc_BLANK.svg,:rc_BLANK.svg,:rc_BLANK.svg";
+ $row[2] = "1:rc_1.svg,2:rc_2.svg,3:rc_3.svg";
+ $row[3] = "4:rc_4.svg,5:rc_5.svg,6:rc_6.svg";
+ $row[4] = "7:rc_7.svg,8:rc_8.svg,9:rc_9.svg";
+ $row[5] = "LEFTBRACE:rc_PREVIOUS.svg,0:rc_0.svg,RIGHTBRACE:rc_NEXT.svg";
+ $row[6] = ":rc_BLANK.svg,:rc_BLANK.svg,:rc_BLANK.svg";
- $row[7]="VOLUMEUP:rc_VOLPLUS.svg,MUTE:rc_MUTE.svg,CHANNELUP:rc_UP.svg";
- $row[8]="VOLUMEDOWN:rc_VOLMINUS.svg,EXIT:rc_EXIT.svg,CHANNELDOWN:rc_DOWN.svg";
- $row[9]=":rc_BLANK.svg,:rc_BLANK.svg,:rc_BLANK.svg";
+ $row[7] = "VOLUMEUP:rc_VOLPLUS.svg,MUTE:rc_MUTE.svg,CHANNELUP:rc_UP.svg";
+ $row[8] =
+ "VOLUMEDOWN:rc_VOLMINUS.svg,EXIT:rc_EXIT.svg,CHANNELDOWN:rc_DOWN.svg";
+ $row[9] = ":rc_BLANK.svg,:rc_BLANK.svg,:rc_BLANK.svg";
- $row[10]="INFO:rc_INFO.svg,UP:rc_UP.svg,MENU:rc_MENU.svg";
- $row[11]="LEFT:rc_LEFT.svg,OK:rc_OK.svg,RIGHT:rc_RIGHT.svg";
- $row[12]="AUDIO:rc_AUDIO.svg,DOWN:rc_DOWN.svg,VIDEO:rc_VIDEO.svg";
- $row[13]=":rc_BLANK.svg,EXIT:rc_EXIT.svg,:rc_BLANK.svg";
+ $row[10] = "INFO:rc_INFO.svg,UP:rc_UP.svg,MENU:rc_MENU.svg";
+ $row[11] = "LEFT:rc_LEFT.svg,OK:rc_OK.svg,RIGHT:rc_RIGHT.svg";
+ $row[12] = "AUDIO:rc_AUDIO.svg,DOWN:rc_DOWN.svg,VIDEO:rc_VIDEO.svg";
+ $row[13] = ":rc_BLANK.svg,EXIT:rc_EXIT.svg,:rc_BLANK.svg";
- $row[14]="RED:rc_RED.svg,GREEN:rc_GREEN.svg,YELLOW:rc_YELLOW.svg,BLUE:rc_BLUE.svg";
- $row[15]="REWIND:rc_REW.svg,PLAY:rc_PLAY.svg,STOP:rc_STOP.svg,FASTFORWARD:rc_FF.svg";
- $row[16]="TV:rc_TV.svg,RADIO:rc_RADIO.svg,TEXT:rc_TEXT.svg,RECORD:rc_REC.svg";
+ $row[14] =
+ "RED:rc_RED.svg,GREEN:rc_GREEN.svg,YELLOW:rc_YELLOW.svg,BLUE:rc_BLUE.svg";
+ $row[15] =
+"REWIND:rc_REW.svg,PLAY:rc_PLAY.svg,STOP:rc_STOP.svg,FASTFORWARD:rc_FF.svg";
+ $row[16] =
+ "TV:rc_TV.svg,RADIO:rc_RADIO.svg,TEXT:rc_TEXT.svg,RECORD:rc_REC.svg";
- $row[17]="attr rc_iconpath icons/remotecontrol";
- $row[18]="attr rc_iconprefix black_btn_";
- return @row;
+ $row[17] = "attr rc_iconpath icons/remotecontrol";
+ $row[18] = "attr rc_iconprefix black_btn_";
+ return @row;
}
# Dreambox DM800se + DM8000 with PNG
sub ENIGMA2_RClayout_DM8000() {
- my @row;
+ my @row;
- $row[0]=":blank,:blank,POWER:POWEROFF";
- $row[1]=":blank,:blank,:blank";
+ $row[0] = ":blank,:blank,POWER:POWEROFF";
+ $row[1] = ":blank,:blank,:blank";
- $row[2]="1,2,3";
- $row[3]="4,5,6";
- $row[4]="7,8,9";
- $row[5]="LEFTBRACE:LEFT2,0:0,RIGHTBRACE:RIGHT2";
- $row[6]=":blank,:blank,:blank";
+ $row[2] = "1,2,3";
+ $row[3] = "4,5,6";
+ $row[4] = "7,8,9";
+ $row[5] = "LEFTBRACE:LEFT2,0:0,RIGHTBRACE:RIGHT2";
+ $row[6] = ":blank,:blank,:blank";
- $row[7]="VOLUMEUP:VOLUP,MUTE,CHANNELUP:CHUP2";
- $row[8]="VOLUMEDOWN:VOLDOWN,EXIT,CHANNELDOWN:CHDOWN2";
- $row[9]=":blank,:blank,:blank";
+ $row[7] = "VOLUMEUP:VOLUP,MUTE,CHANNELUP:CHUP2";
+ $row[8] = "VOLUMEDOWN:VOLDOWN,EXIT,CHANNELDOWN:CHDOWN2";
+ $row[9] = ":blank,:blank,:blank";
- $row[10]="INFO,UP,MENU";
- $row[11]="LEFT,OK,RIGHT";
- $row[12]="AUDIO,DOWN,VIDEO";
- $row[13]=":blank,:blank,:blank";
+ $row[10] = "INFO,UP,MENU";
+ $row[11] = "LEFT,OK,RIGHT";
+ $row[12] = "AUDIO,DOWN,VIDEO";
+ $row[13] = ":blank,:blank,:blank";
- $row[14]="RED,GREEN,YELLOW,BLUE";
- $row[15]="REWIND,PLAY,STOP,FASTFORWARD:FF";
- $row[16]="TV,RADIO,TEXT,RECORD:REC";
+ $row[14] = "RED,GREEN,YELLOW,BLUE";
+ $row[15] = "REWIND,PLAY,STOP,FASTFORWARD:FF";
+ $row[16] = "TV,RADIO,TEXT,RECORD:REC";
- $row[17]="attr rc_iconpath icons/remotecontrol";
- $row[18]="attr rc_iconprefix black_btn_";
- return @row;
+ $row[17] = "attr rc_iconpath icons/remotecontrol";
+ $row[18] = "attr rc_iconprefix black_btn_";
+ return @row;
}
# Dreambox RC10 with SVG
sub ENIGMA2_RClayout_RC10_SVG() {
- my @row;
+ my @row;
- $row[0]=":rc_BLANK.svg,:rc_BLANK.svg,POWER:rc_POWER.svg";
- $row[1]=":rc_BLANK.svg,:rc_BLANK.svg,:rc_BLANK.svg";
+ $row[0] = ":rc_BLANK.svg,:rc_BLANK.svg,POWER:rc_POWER.svg";
+ $row[1] = ":rc_BLANK.svg,:rc_BLANK.svg,:rc_BLANK.svg";
- $row[2]="1:rc_1.svg,2:rc_2.svg,3:rc_3.svg";
- $row[3]="4:rc_4.svg,5:rc_5.svg,6:rc_6.svg";
- $row[4]="7:rc_7.svg,8:rc_8.svg,9:rc_9.svg";
- $row[5]="LEFTBRACE:rc_PREVIOUS.svg,0:rc_0.svg,RIGHTBRACE:rc_NEXT.svg";
- $row[6]="RED:rc_RED.svg,GREEN:rc_GREEN.svg,YELLOW:rc_YELLOW.svg,BLUE:rc_BLUE.svg";
- $row[7]=":rc_BLANK.svg,:rc_BLANK.svg,:rc_BLANK.svg";
+ $row[2] = "1:rc_1.svg,2:rc_2.svg,3:rc_3.svg";
+ $row[3] = "4:rc_4.svg,5:rc_5.svg,6:rc_6.svg";
+ $row[4] = "7:rc_7.svg,8:rc_8.svg,9:rc_9.svg";
+ $row[5] = "LEFTBRACE:rc_PREVIOUS.svg,0:rc_0.svg,RIGHTBRACE:rc_NEXT.svg";
+ $row[6] =
+ "RED:rc_RED.svg,GREEN:rc_GREEN.svg,YELLOW:rc_YELLOW.svg,BLUE:rc_BLUE.svg";
+ $row[7] = ":rc_BLANK.svg,:rc_BLANK.svg,:rc_BLANK.svg";
- $row[8]="INFO:rc_INFO.svg,UP:rc_UP.svg,MENU:rc_MENU.svg";
- $row[9]="LEFT:rc_LEFT.svg,OK:rc_OK.svg,RIGHT:rc_RIGHT.svg";
- $row[10]="AUDIO:rc_AUDIO.svg,DOWN:rc_DOWN.svg,VIDEO:rc_VIDEO.svg";
- $row[11]=":rc_BLANK.svg,EXIT:rc_EXIT.svg,:rc_BLANK.svg";
+ $row[8] = "INFO:rc_INFO.svg,UP:rc_UP.svg,MENU:rc_MENU.svg";
+ $row[9] = "LEFT:rc_LEFT.svg,OK:rc_OK.svg,RIGHT:rc_RIGHT.svg";
+ $row[10] = "AUDIO:rc_AUDIO.svg,DOWN:rc_DOWN.svg,VIDEO:rc_VIDEO.svg";
+ $row[11] = ":rc_BLANK.svg,EXIT:rc_EXIT.svg,:rc_BLANK.svg";
- $row[12]="VOLUMEUP:rc_VOLPLUS.svg,:rc_BLANK.svg,CHANNELUP:rc_UP.svg";
- $row[13]="VOLUMEDOWN:rc_VOLMINUS.svg,MUTE:rc_MUTE.svg,CHANNELDOWN:rc_DOWN.svg";
- $row[14]=":rc_BLANK.svg,:rc_BLANK.svg,:rc_BLANK.svg";
+ $row[12] = "VOLUMEUP:rc_VOLPLUS.svg,:rc_BLANK.svg,CHANNELUP:rc_UP.svg";
+ $row[13] =
+ "VOLUMEDOWN:rc_VOLMINUS.svg,MUTE:rc_MUTE.svg,CHANNELDOWN:rc_DOWN.svg";
+ $row[14] = ":rc_BLANK.svg,:rc_BLANK.svg,:rc_BLANK.svg";
- $row[15]="REWIND:rc_REW.svg,PLAY:rc_PLAY.svg,STOP:rc_STOP.svg,FASTFORWARD:rc_FF.svg";
- $row[16]="TV:rc_TV.svg,RADIO:rc_RADIO.svg,TEXT:rc_TEXT.svg,RECORD:rc_REC.svg";
+ $row[15] =
+"REWIND:rc_REW.svg,PLAY:rc_PLAY.svg,STOP:rc_STOP.svg,FASTFORWARD:rc_FF.svg";
+ $row[16] =
+ "TV:rc_TV.svg,RADIO:rc_RADIO.svg,TEXT:rc_TEXT.svg,RECORD:rc_REC.svg";
- $row[17]="attr rc_iconpath icons";
- $row[18]="attr rc_iconprefix rc_";
- return @row;
+ $row[17] = "attr rc_iconpath icons";
+ $row[18] = "attr rc_iconprefix rc_";
+ return @row;
}
# Dreambox RC10 with PNG
sub ENIGMA2_RClayout_RC10() {
- my @row;
+ my @row;
- $row[0]=":blank,:blank,POWER:POWEROFF";
- $row[1]=":blank,:blank,:blank";
+ $row[0] = ":blank,:blank,POWER:POWEROFF";
+ $row[1] = ":blank,:blank,:blank";
- $row[2]="1,2,3";
- $row[3]="4,5,6";
- $row[4]="7,8,9";
- $row[5]="LEFTBRACE:LEFT2,0:0,RIGHTBRACE:RIGHT2";
- $row[6]="RED,GREEN,YELLOW,BLUE";
- $row[7]=":blank,:blank,:blank";
+ $row[2] = "1,2,3";
+ $row[3] = "4,5,6";
+ $row[4] = "7,8,9";
+ $row[5] = "LEFTBRACE:LEFT2,0:0,RIGHTBRACE:RIGHT2";
+ $row[6] = "RED,GREEN,YELLOW,BLUE";
+ $row[7] = ":blank,:blank,:blank";
- $row[8]="INFO,UP,MENU";
- $row[9]="LEFT,OK,RIGHT";
- $row[10]="AUDIO,DOWN,VIDEO";
- $row[11]=":blank,EXIT,:blank";
+ $row[8] = "INFO,UP,MENU";
+ $row[9] = "LEFT,OK,RIGHT";
+ $row[10] = "AUDIO,DOWN,VIDEO";
+ $row[11] = ":blank,EXIT,:blank";
- $row[12]="VOLUMEUP:VOLUP,:blank,CHANNELUP:CHUP2";
- $row[13]="VOLUMEDOWN:VOLDOWN,MUTE,CHANNELDOWN:CHDOWN2";
- $row[14]=":blank,:blank,:blank";
+ $row[12] = "VOLUMEUP:VOLUP,:blank,CHANNELUP:CHUP2";
+ $row[13] = "VOLUMEDOWN:VOLDOWN,MUTE,CHANNELDOWN:CHDOWN2";
+ $row[14] = ":blank,:blank,:blank";
- $row[15]="REWIND,PLAY,STOP,FASTFORWARD:FF";
- $row[16]="TV,RADIO,TEXT,RECORD:REC";
+ $row[15] = "REWIND,PLAY,STOP,FASTFORWARD:FF";
+ $row[16] = "TV,RADIO,TEXT,RECORD:REC";
- $row[17]="attr rc_iconpath icons/remotecontrol";
- $row[18]="attr rc_iconprefix black_btn_";
- return @row;
+ $row[17] = "attr rc_iconpath icons/remotecontrol";
+ $row[18] = "attr rc_iconprefix black_btn_";
+ return @row;
}
# VU+ Duo2 with SVG
sub ENIGMA2_RClayout_VUplusDuo2_SVG() {
- my @row;
+ my @row;
- $row[0]=":rc_BLANK.svg,MUTE:rc_MUTE.svg,POWER:rc_POWER.svg";
- $row[1]=":rc_BLANK.svg,:rc_BLANK.svg,:rc_BLANK.svg";
+ $row[0] = ":rc_BLANK.svg,MUTE:rc_MUTE.svg,POWER:rc_POWER.svg";
+ $row[1] = ":rc_BLANK.svg,:rc_BLANK.svg,:rc_BLANK.svg";
- $row[2]="REWIND:rc_REW.svg,PLAY:rc_PLAY.svg,FASTFORWARD:rc_FF.svg";
- $row[3]="RECORD:rc_REC.svg,STOP:rc_STOP.svg,VIDEO:rc_VIDEO.svg";
- $row[4]=":rc_BLANK.svg,:rc_BLANK.svg,:rc_BLANK.svg";
+ $row[2] = "REWIND:rc_REW.svg,PLAY:rc_PLAY.svg,FASTFORWARD:rc_FF.svg";
+ $row[3] = "RECORD:rc_REC.svg,STOP:rc_STOP.svg,VIDEO:rc_VIDEO.svg";
+ $row[4] = ":rc_BLANK.svg,:rc_BLANK.svg,:rc_BLANK.svg";
- $row[5]="TV:rc_TV.svg,AUDIO:rc_AUDIO.svg,RADIO:rc_RADIO.svg";
- $row[6]="TEXT:rc_TEXT.svg,HELP:rc_HELP.svg,AV:rc_AV.svg";
- $row[7]="INFO:rc_EPG.svg,MENU:rc_MENU.svg,EXIT:rc_EXIT.svg";
- $row[8]=":rc_BLANK.svg,:rc_BLANK.svg,:rc_BLANK.svg";
+ $row[5] = "TV:rc_TV.svg,AUDIO:rc_AUDIO.svg,RADIO:rc_RADIO.svg";
+ $row[6] = "TEXT:rc_TEXT.svg,HELP:rc_HELP.svg,AV:rc_AV.svg";
+ $row[7] = "INFO:rc_EPG.svg,MENU:rc_MENU.svg,EXIT:rc_EXIT.svg";
+ $row[8] = ":rc_BLANK.svg,:rc_BLANK.svg,:rc_BLANK.svg";
- $row[9]="VOLUMEUP:rc_VOLPLUS.svg,UP:rc_UP.svg,CHANNELUP:rc_PLUS.svg";
- $row[10]="LEFT:rc_LEFT.svg,OK:rc_OK.svg,RIGHT:rc_RIGHT.svg";
- $row[11]="VOLUMEDOWN:rc_VOLMINUS.svg,DOWN:rc_DOWN.svg,CHANNELDOWN:rc_MINUS.svg";
+ $row[9] = "VOLUMEUP:rc_VOLPLUS.svg,UP:rc_UP.svg,CHANNELUP:rc_PLUS.svg";
+ $row[10] = "LEFT:rc_LEFT.svg,OK:rc_OK.svg,RIGHT:rc_RIGHT.svg";
+ $row[11] =
+ "VOLUMEDOWN:rc_VOLMINUS.svg,DOWN:rc_DOWN.svg,CHANNELDOWN:rc_MINUS.svg";
- $row[12]=":rc_BLANK.svg,:rc_BLANK.svg,:rc_BLANK.svg";
+ $row[12] = ":rc_BLANK.svg,:rc_BLANK.svg,:rc_BLANK.svg";
- $row[13]="RED:rc_RED.svg,GREEN:rc_GREEN.svg,YELLOW:rc_YELLOW.svg,BLUE:rc_BLUE.svg";
- $row[14]="1:rc_1.svg,2:rc_2.svg,3:rc_3.svg";
- $row[15]="4:rc_4.svg,5:rc_5.svg,6:rc_6.svg";
- $row[16]="7:rc_7.svg,8:rc_8.svg,9:rc_9.svg";
- $row[17]="LEFTBRACE:rc_PREVIOUS.svg,0:rc_0.svg,RIGHTBRACE:rc_NEXT.svg";
+ $row[13] =
+ "RED:rc_RED.svg,GREEN:rc_GREEN.svg,YELLOW:rc_YELLOW.svg,BLUE:rc_BLUE.svg";
+ $row[14] = "1:rc_1.svg,2:rc_2.svg,3:rc_3.svg";
+ $row[15] = "4:rc_4.svg,5:rc_5.svg,6:rc_6.svg";
+ $row[16] = "7:rc_7.svg,8:rc_8.svg,9:rc_9.svg";
+ $row[17] = "LEFTBRACE:rc_PREVIOUS.svg,0:rc_0.svg,RIGHTBRACE:rc_NEXT.svg";
- $row[18]="attr rc_iconpath icons";
- $row[19]="attr rc_iconprefix rc_";
- return @row;
+ $row[18] = "attr rc_iconpath icons";
+ $row[19] = "attr rc_iconprefix rc_";
+ return @row;
}
# VU+ Duo2 with PNG
sub ENIGMA2_RClayout_VUplusDuo2() {
- my @row;
+ my @row;
- $row[0]=":blank,:MUTE,POWER:POWEROFF";
- $row[1]=":blank,:blank,:blank";
+ $row[0] = ":blank,:MUTE,POWER:POWEROFF";
+ $row[1] = ":blank,:blank,:blank";
- $row[2]="REWIND,PLAY,FASTFORWARD:FF";
- $row[3]="RECORD:REC,STOP,VIDEO";
- $row[4]=":blank,:blank,:blank";
+ $row[2] = "REWIND,PLAY,FASTFORWARD:FF";
+ $row[3] = "RECORD:REC,STOP,VIDEO";
+ $row[4] = ":blank,:blank,:blank";
- $row[5]="TV,AUDIO,RADIO:RADIO";
- $row[6]="TEXT,HELP,AV";
- $row[7]="INFO,MENU,EXIT";
- $row[8]=":blank,:blank,:blank";
+ $row[5] = "TV,AUDIO,RADIO:RADIO";
+ $row[6] = "TEXT,HELP,AV";
+ $row[7] = "INFO,MENU,EXIT";
+ $row[8] = ":blank,:blank,:blank";
- $row[9]="VOLUMEUP:VOLUP,UP,CHANNELUP:CHUP2";
- $row[10]="LEFT,OK,RIGHT";
- $row[11]="VOLUMEDOWN:VOLDOWN,DOWN,CHANNELDOWN:CHDOWN2";
+ $row[9] = "VOLUMEUP:VOLUP,UP,CHANNELUP:CHUP2";
+ $row[10] = "LEFT,OK,RIGHT";
+ $row[11] = "VOLUMEDOWN:VOLDOWN,DOWN,CHANNELDOWN:CHDOWN2";
- $row[12]=":blank,:blank,:blank";
+ $row[12] = ":blank,:blank,:blank";
- $row[13]="RED,GREEN,YELLOW,BLUE";
- $row[14]="1,2,3";
- $row[15]="4,5,6";
- $row[16]="7,8,9";
- $row[17]="LEFTBRACE:LEFT2,0:0,RIGHTBRACE:RIGHT2";
+ $row[13] = "RED,GREEN,YELLOW,BLUE";
+ $row[14] = "1,2,3";
+ $row[15] = "4,5,6";
+ $row[16] = "7,8,9";
+ $row[17] = "LEFTBRACE:LEFT2,0:0,RIGHTBRACE:RIGHT2";
- $row[18]="attr rc_iconpath icons/remotecontrol";
- $row[19]="attr rc_iconprefix black_btn_";
- return @row;
+ $row[18] = "attr rc_iconpath icons/remotecontrol";
+ $row[19] = "attr rc_iconprefix black_btn_";
+ return @row;
}
###################################
sub ENIGMA2_GetRemotecontrolCommand($) {
- my ($command) = @_;
- my $commands = {
- 'RESERVED' => 0,
- 'ESC' => 1,
- '1' => 2,
- '2' => 3,
- '3' => 4,
- '4' => 5,
- '5' => 6,
- '6' => 7,
- '7' => 8,
- '8' => 9,
- '9' => 10,
- '0' => 11,
- 'MINUS' => 12,
- 'EQUAL' => 13,
- 'BACKSPACE' => 14,
- 'TAB' => 15,
- 'Q' => 16,
- 'W' => 17,
- 'E' => 18,
- 'R' => 19,
- 'T' => 20,
- 'Y' => 21,
- 'U' => 22,
- 'I' => 23,
- 'O' => 24,
- 'P' => 25,
- 'LEFTBRACE' => 26,
- 'RIGHTBRACE' => 27,
- 'ENTER' => 28,
- 'LEFTCTRL' => 29,
- 'A' => 30,
- 'S' => 31,
- 'D' => 32,
- 'F' => 33,
- 'G' => 34,
- 'H' => 35,
- 'J' => 36,
- 'K' => 37,
- 'L' => 38,
- 'SEMICOLON' => 39,
- 'APOSTROPHE' => 40,
- 'GRAVE' => 41,
- 'LEFTSHIFT' => 42,
- 'BACKSLASH' => 43,
- 'Z' => 44,
- 'X' => 45,
- 'C' => 46,
- 'V' => 47,
- 'B' => 48,
- 'N' => 49,
- 'M' => 50,
- 'COMMA' => 51,
- 'DOT' => 52,
- 'SLASH' => 53,
- 'RIGHTSHIFT' => 54,
- 'KPASTERISK' => 55,
- 'LEFTALT' => 56,
- 'SPACE' => 57,
- 'CAPSLOCK' => 58,
- 'F1' => 59,
- 'F2' => 60,
- 'F3' => 61,
- 'F4' => 62,
- 'F5' => 63,
- 'F6' => 64,
- 'F7' => 65,
- 'F8' => 66,
- 'F9' => 67,
- 'F10' => 68,
- 'NUMLOCK' => 69,
- 'SCROLLLOCK' => 70,
- 'KP7' => 71,
- 'KP8' => 72,
- 'KP9' => 73,
- 'KPMINUS' => 74,
- 'KP4' => 75,
- 'KP5' => 76,
- 'KP6' => 77,
- 'KPPLUS' => 78,
- 'KP1' => 79,
- 'KP2' => 80,
- 'KP3' => 81,
- 'KP0' => 82,
- 'KPDOT' => 83,
- '103RD' => 84,
- 'F13' => 85,
- '102ND' => 86,
- 'F11' => 87,
- 'F12' => 88,
- 'F14' => 89,
- 'F15' => 90,
- 'F16' => 91,
- 'F17' => 92,
- 'F18' => 93,
- 'F19' => 94,
- 'F20' => 95,
- 'KPENTER' => 96,
- 'RIGHTCTRL' => 97,
- 'KPSLASH' => 98,
- 'SYSRQ' => 99,
- 'RIGHTALT' => 100,
- 'LINEFEED' => 101,
- 'HOME' => 102,
- 'UP' => 103,
- 'PAGEUP' => 104,
- 'LEFT' => 105,
- 'RIGHT' => 106,
- 'END' => 107,
- 'DOWN' => 108,
- 'PAGEDOWN' => 109,
- 'INSERT' => 110,
- 'DELETE' => 111,
- 'MACRO' => 112,
- 'MUTE' => 113,
- 'VOLUMEDOWN' => 114,
- 'VOLUMEUP' => 115,
- 'POWER' => 116,
- 'KPEQUAL' => 117,
- 'KPPLUSMINUS' => 118,
- 'PAUSE' => 119,
- 'F21' => 120,
- 'F22' => 121,
- 'F23' => 122,
- 'F24' => 123,
- 'KPCOMMA' => 124,
- 'LEFTMETA' => 125,
- 'RIGHTMETA' => 126,
- 'COMPOSE' => 127,
- 'STOP' => 128,
- 'AGAIN' => 129,
- 'PROPS' => 130,
- 'UNDO' => 131,
- 'FRONT' => 132,
- 'COPY' => 133,
- 'OPEN' => 134,
- 'PASTE' => 135,
- 'FIND' => 136,
- 'CUT' => 137,
- 'HELP' => 138,
- 'MENU' => 139,
- 'CALC' => 140,
- 'SETUP' => 141,
- 'SLEEP' => 142,
- 'WAKEUP' => 143,
- 'FILE' => 144,
- 'SENDFILE' => 145,
- 'DELETEFILE' => 146,
- 'XFER' => 147,
- 'PROG1' => 148,
- 'PROG2' => 149,
- 'WWW' => 150,
- 'MSDOS' => 151,
- 'COFFEE' => 152,
- 'DIRECTION' => 153,
- 'CYCLEWINDOWS' => 154,
- 'MAIL' => 155,
- 'BOOKMARKS' => 156,
- 'COMPUTER' => 157,
- 'BACK' => 158,
- 'FORWARD' => 159,
- 'CLOSECD' => 160,
- 'EJECTCD' => 161,
- 'EJECTCLOSECD' => 162,
- 'NEXTSONG' => 163,
- 'PLAYPAUSE' => 164,
- 'PREVIOUSSONG' => 165,
- 'STOPCD' => 166,
- 'RECORD' => 167,
- 'REWIND' => 168,
- 'PHONE' => 169,
- 'ISO' => 170,
- 'CONFIG' => 171,
- 'HOMEPAGE' => 172,
- 'REFRESH' => 173,
- 'EXIT' => 174,
- 'MOVE' => 175,
- 'EDIT' => 176,
- 'SCROLLUP' => 177,
- 'SCROLLDOWN' => 178,
- 'KPLEFTPAREN' => 179,
- 'KPRIGHTPAREN' => 180,
- 'INTL1' => 181,
- 'INTL2' => 182,
- 'INTL3' => 183,
- 'INTL4' => 184,
- 'INTL5' => 185,
- 'INTL6' => 186,
- 'INTL7' => 187,
- 'INTL8' => 188,
- 'INTL9' => 189,
- 'LANG1' => 190,
- 'LANG2' => 191,
- 'LANG3' => 192,
- 'LANG4' => 193,
- 'LANG5' => 194,
- 'LANG6' => 195,
- 'LANG7' => 196,
- 'LANG8' => 197,
- 'LANG9' => 198,
- 'PLAYCD' => 200,
- 'PAUSECD' => 201,
- 'PROG3' => 202,
- 'PROG4' => 203,
- 'SUSPEND' => 205,
- 'CLOSE' => 206,
- 'PLAY' => 207,
- 'FASTFORWARD' => 208,
- 'BASSBOOST' => 209,
- 'PRINT' => 210,
- 'HP' => 211,
- 'CAMERA' => 212,
- 'SOUND' => 213,
- 'QUESTION' => 214,
- 'EMAIL' => 215,
- 'CHAT' => 216,
- 'SEARCH' => 217,
- 'CONNECT' => 218,
- 'FINANCE' => 219,
- 'SPORT' => 220,
- 'SHOP' => 221,
- 'ALTERASE' => 222,
- 'CANCEL' => 223,
- 'BRIGHTNESSDOWN' => 224,
- 'BRIGHTNESSUP' => 225,
- 'MEDIA' => 226,
- 'UNKNOWN' => 240,
- 'OK' => 352,
- 'SELECT' => 353,
- 'GOTO' => 354,
- 'CLEAR' => 355,
- 'POWER2' => 356,
- 'OPTION' => 357,
- 'INFO' => 358,
- 'TIME' => 359,
- 'VENDOR' => 360,
- 'ARCHIVE' => 361,
- 'PROGRAM' => 362,
- 'CHANNEL' => 363,
- 'FAVORITES' => 364,
- 'EPG' => 365,
- 'PVR' => 366,
- 'MHP' => 367,
- 'LANGUAGE' => 368,
- 'TITLE' => 369,
- 'SUBTITLE' => 370,
- 'ANGLE' => 371,
- 'ZOOM' => 372,
- 'MODE' => 373,
- 'KEYBOARD' => 374,
- 'SCREEN' => 375,
- 'PC' => 376,
- 'TV' => 377,
- 'TV2' => 378,
- 'VCR' => 379,
- 'VCR2' => 380,
- 'SAT' => 381,
- 'SAT2' => 382,
- 'CD' => 383,
- 'TAPE' => 384,
- 'RADIO' => 385,
- 'TUNER' => 386,
- 'PLAYER' => 387,
- 'TEXT' => 388,
- 'DVD' => 389,
- 'AUX' => 390,
- 'MP3' => 391,
- 'AUDIO' => 392,
- 'VIDEO' => 393,
- 'DIRECTORY' => 394,
- 'LIST' => 395,
- 'MEMO' => 396,
- 'CALENDAR' => 397,
- 'RED' => 398,
- 'GREEN' => 399,
- 'YELLOW' => 400,
- 'BLUE' => 401,
- 'CHANNELUP' => 402,
- 'CHANNELDOWN' => 403,
- 'FIRST' => 404,
- 'LAST' => 405,
- 'AB' => 406,
- 'NEXT' => 407,
- 'RESTART' => 408,
- 'SLOW' => 409,
- 'SHUFFLE' => 410,
- 'BREAK' => 411,
- 'PREVIOUS' => 412,
- 'DIGITS' => 413,
- 'TEEN' => 414,
- 'TWEN' => 415,
- 'DEL_EOL' => 448,
- 'DEL_EOS' => 449,
- 'INS_LINE' => 450,
- 'DEL_LINE' => 451,
- 'ASCII' => 510,
- 'MAX' => 511,
- 'BTN_0' => 256,
- 'BTN_1' => 257
- };
+ my ($command) = @_;
+ my $commands = {
+ 'RESERVED' => 0,
+ 'ESC' => 1,
+ '1' => 2,
+ '2' => 3,
+ '3' => 4,
+ '4' => 5,
+ '5' => 6,
+ '6' => 7,
+ '7' => 8,
+ '8' => 9,
+ '9' => 10,
+ '0' => 11,
+ 'MINUS' => 12,
+ 'EQUAL' => 13,
+ 'BACKSPACE' => 14,
+ 'TAB' => 15,
+ 'Q' => 16,
+ 'W' => 17,
+ 'E' => 18,
+ 'R' => 19,
+ 'T' => 20,
+ 'Y' => 21,
+ 'U' => 22,
+ 'I' => 23,
+ 'O' => 24,
+ 'P' => 25,
+ 'LEFTBRACE' => 26,
+ 'RIGHTBRACE' => 27,
+ 'ENTER' => 28,
+ 'LEFTCTRL' => 29,
+ 'A' => 30,
+ 'S' => 31,
+ 'D' => 32,
+ 'F' => 33,
+ 'G' => 34,
+ 'H' => 35,
+ 'J' => 36,
+ 'K' => 37,
+ 'L' => 38,
+ 'SEMICOLON' => 39,
+ 'APOSTROPHE' => 40,
+ 'GRAVE' => 41,
+ 'LEFTSHIFT' => 42,
+ 'BACKSLASH' => 43,
+ 'Z' => 44,
+ 'X' => 45,
+ 'C' => 46,
+ 'V' => 47,
+ 'B' => 48,
+ 'N' => 49,
+ 'M' => 50,
+ 'COMMA' => 51,
+ 'DOT' => 52,
+ 'SLASH' => 53,
+ 'RIGHTSHIFT' => 54,
+ 'KPASTERISK' => 55,
+ 'LEFTALT' => 56,
+ 'SPACE' => 57,
+ 'CAPSLOCK' => 58,
+ 'F1' => 59,
+ 'F2' => 60,
+ 'F3' => 61,
+ 'F4' => 62,
+ 'F5' => 63,
+ 'F6' => 64,
+ 'F7' => 65,
+ 'F8' => 66,
+ 'F9' => 67,
+ 'F10' => 68,
+ 'NUMLOCK' => 69,
+ 'SCROLLLOCK' => 70,
+ 'KP7' => 71,
+ 'KP8' => 72,
+ 'KP9' => 73,
+ 'KPMINUS' => 74,
+ 'KP4' => 75,
+ 'KP5' => 76,
+ 'KP6' => 77,
+ 'KPPLUS' => 78,
+ 'KP1' => 79,
+ 'KP2' => 80,
+ 'KP3' => 81,
+ 'KP0' => 82,
+ 'KPDOT' => 83,
+ '103RD' => 84,
+ 'F13' => 85,
+ '102ND' => 86,
+ 'F11' => 87,
+ 'F12' => 88,
+ 'F14' => 89,
+ 'F15' => 90,
+ 'F16' => 91,
+ 'F17' => 92,
+ 'F18' => 93,
+ 'F19' => 94,
+ 'F20' => 95,
+ 'KPENTER' => 96,
+ 'RIGHTCTRL' => 97,
+ 'KPSLASH' => 98,
+ 'SYSRQ' => 99,
+ 'RIGHTALT' => 100,
+ 'LINEFEED' => 101,
+ 'HOME' => 102,
+ 'UP' => 103,
+ 'PAGEUP' => 104,
+ 'LEFT' => 105,
+ 'RIGHT' => 106,
+ 'END' => 107,
+ 'DOWN' => 108,
+ 'PAGEDOWN' => 109,
+ 'INSERT' => 110,
+ 'DELETE' => 111,
+ 'MACRO' => 112,
+ 'MUTE' => 113,
+ 'VOLUMEDOWN' => 114,
+ 'VOLUMEUP' => 115,
+ 'POWER' => 116,
+ 'KPEQUAL' => 117,
+ 'KPPLUSMINUS' => 118,
+ 'PAUSE' => 119,
+ 'F21' => 120,
+ 'F22' => 121,
+ 'F23' => 122,
+ 'F24' => 123,
+ 'KPCOMMA' => 124,
+ 'LEFTMETA' => 125,
+ 'RIGHTMETA' => 126,
+ 'COMPOSE' => 127,
+ 'STOP' => 128,
+ 'AGAIN' => 129,
+ 'PROPS' => 130,
+ 'UNDO' => 131,
+ 'FRONT' => 132,
+ 'COPY' => 133,
+ 'OPEN' => 134,
+ 'PASTE' => 135,
+ 'FIND' => 136,
+ 'CUT' => 137,
+ 'HELP' => 138,
+ 'MENU' => 139,
+ 'CALC' => 140,
+ 'SETUP' => 141,
+ 'SLEEP' => 142,
+ 'WAKEUP' => 143,
+ 'FILE' => 144,
+ 'SENDFILE' => 145,
+ 'DELETEFILE' => 146,
+ 'XFER' => 147,
+ 'PROG1' => 148,
+ 'PROG2' => 149,
+ 'WWW' => 150,
+ 'MSDOS' => 151,
+ 'COFFEE' => 152,
+ 'DIRECTION' => 153,
+ 'CYCLEWINDOWS' => 154,
+ 'MAIL' => 155,
+ 'BOOKMARKS' => 156,
+ 'COMPUTER' => 157,
+ 'BACK' => 158,
+ 'FORWARD' => 159,
+ 'CLOSECD' => 160,
+ 'EJECTCD' => 161,
+ 'EJECTCLOSECD' => 162,
+ 'NEXTSONG' => 163,
+ 'PLAYPAUSE' => 164,
+ 'PREVIOUSSONG' => 165,
+ 'STOPCD' => 166,
+ 'RECORD' => 167,
+ 'REWIND' => 168,
+ 'PHONE' => 169,
+ 'ISO' => 170,
+ 'CONFIG' => 171,
+ 'HOMEPAGE' => 172,
+ 'REFRESH' => 173,
+ 'EXIT' => 174,
+ 'MOVE' => 175,
+ 'EDIT' => 176,
+ 'SCROLLUP' => 177,
+ 'SCROLLDOWN' => 178,
+ 'KPLEFTPAREN' => 179,
+ 'KPRIGHTPAREN' => 180,
+ 'INTL1' => 181,
+ 'INTL2' => 182,
+ 'INTL3' => 183,
+ 'INTL4' => 184,
+ 'INTL5' => 185,
+ 'INTL6' => 186,
+ 'INTL7' => 187,
+ 'INTL8' => 188,
+ 'INTL9' => 189,
+ 'LANG1' => 190,
+ 'LANG2' => 191,
+ 'LANG3' => 192,
+ 'LANG4' => 193,
+ 'LANG5' => 194,
+ 'LANG6' => 195,
+ 'LANG7' => 196,
+ 'LANG8' => 197,
+ 'LANG9' => 198,
+ 'PLAYCD' => 200,
+ 'PAUSECD' => 201,
+ 'PROG3' => 202,
+ 'PROG4' => 203,
+ 'SUSPEND' => 205,
+ 'CLOSE' => 206,
+ 'PLAY' => 207,
+ 'FASTFORWARD' => 208,
+ 'BASSBOOST' => 209,
+ 'PRINT' => 210,
+ 'HP' => 211,
+ 'CAMERA' => 212,
+ 'SOUND' => 213,
+ 'QUESTION' => 214,
+ 'EMAIL' => 215,
+ 'CHAT' => 216,
+ 'SEARCH' => 217,
+ 'CONNECT' => 218,
+ 'FINANCE' => 219,
+ 'SPORT' => 220,
+ 'SHOP' => 221,
+ 'ALTERASE' => 222,
+ 'CANCEL' => 223,
+ 'BRIGHTNESSDOWN' => 224,
+ 'BRIGHTNESSUP' => 225,
+ 'MEDIA' => 226,
+ 'UNKNOWN' => 240,
+ 'OK' => 352,
+ 'SELECT' => 353,
+ 'GOTO' => 354,
+ 'CLEAR' => 355,
+ 'POWER2' => 356,
+ 'OPTION' => 357,
+ 'INFO' => 358,
+ 'TIME' => 359,
+ 'VENDOR' => 360,
+ 'ARCHIVE' => 361,
+ 'PROGRAM' => 362,
+ 'CHANNEL' => 363,
+ 'FAVORITES' => 364,
+ 'EPG' => 365,
+ 'PVR' => 366,
+ 'MHP' => 367,
+ 'LANGUAGE' => 368,
+ 'TITLE' => 369,
+ 'SUBTITLE' => 370,
+ 'ANGLE' => 371,
+ 'ZOOM' => 372,
+ 'MODE' => 373,
+ 'KEYBOARD' => 374,
+ 'SCREEN' => 375,
+ 'PC' => 376,
+ 'TV' => 377,
+ 'TV2' => 378,
+ 'VCR' => 379,
+ 'VCR2' => 380,
+ 'SAT' => 381,
+ 'SAT2' => 382,
+ 'CD' => 383,
+ 'TAPE' => 384,
+ 'RADIO' => 385,
+ 'TUNER' => 386,
+ 'PLAYER' => 387,
+ 'TEXT' => 388,
+ 'DVD' => 389,
+ 'AUX' => 390,
+ 'MP3' => 391,
+ 'AUDIO' => 392,
+ 'VIDEO' => 393,
+ 'DIRECTORY' => 394,
+ 'LIST' => 395,
+ 'MEMO' => 396,
+ 'CALENDAR' => 397,
+ 'RED' => 398,
+ 'GREEN' => 399,
+ 'YELLOW' => 400,
+ 'BLUE' => 401,
+ 'CHANNELUP' => 402,
+ 'CHANNELDOWN' => 403,
+ 'FIRST' => 404,
+ 'LAST' => 405,
+ 'AB' => 406,
+ 'NEXT' => 407,
+ 'RESTART' => 408,
+ 'SLOW' => 409,
+ 'SHUFFLE' => 410,
+ 'BREAK' => 411,
+ 'PREVIOUS' => 412,
+ 'DIGITS' => 413,
+ 'TEEN' => 414,
+ 'TWEN' => 415,
+ 'DEL_EOL' => 448,
+ 'DEL_EOS' => 449,
+ 'INS_LINE' => 450,
+ 'DEL_LINE' => 451,
+ 'ASCII' => 510,
+ 'MAX' => 511,
+ 'BTN_0' => 256,
+ 'BTN_1' => 257
+ };
- if (defined($commands->{$command})) {
- return $commands->{$command};
- } elsif ($command eq "GetRemotecontrolCommands") {
- return $commands;
- } else {
- return "";
- }
+ if ( defined( $commands->{$command} ) ) {
+ return $commands->{$command};
+ }
+ elsif ( $command eq "GetRemotecontrolCommands" ) {
+ return $commands;
+ }
+ else {
+ return "";
+ }
}
1;
@@ -1579,7 +1905,7 @@ sub ENIGMA2_GetRemotecontrolCommand($) {
- on - powers on the device and send a WoL magic package if needed
- off - turns the device in standby mode
- - toogle - switch between on and off
+ - toggle - switch between on and off
- shutdown - turns the device in deepstandby mode
- reboot - reboots the device
- restartGui - restarts the GUI / ENIGMA2 process