1
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-05-07 22:29:19 +00:00

70_ENIGMA2.pm: make module more Perl version independent (forum #msg464402)

git-svn-id: https://svn.fhem.de/fhem/trunk@11703 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
jpawlowski 2016-06-21 19:37:34 +00:00
parent 05fc1f2202
commit a0f3d35ffd

View File

@ -27,7 +27,7 @@
package main; package main;
use 5.012; #use 5.012;
use strict; use strict;
use warnings; use warnings;
use Data::Dumper; use Data::Dumper;
@ -36,7 +36,6 @@ use HttpUtils;
use Encode; use Encode;
no if $] >= 5.017011, warnings => 'experimental::smartmatch'; no if $] >= 5.017011, warnings => 'experimental::smartmatch';
no if $] >= 5.017011, warnings => 'experimental::lexical_topic';
no warnings "all"; no warnings "all";
@ -373,8 +372,7 @@ sub ENIGMA2_Set($@) {
Log3 $name, 3, "ENIGMA2 set $name " . $a[1] . " " . $a[2]; Log3 $name, 3, "ENIGMA2 set $name " . $a[1] . " " . $a[2];
if ( $state eq "on" ) { if ( $state eq "on" ) {
my $_ = $a[2]; if ( $a[2] =~ m/^\d+$/ && $a[2] >= 0 && $a[2] <= 100 ) {
if ( m/^\d+$/ && $_ >= 0 && $_ <= 100 ) {
$cmd = "set=set" . $a[2]; $cmd = "set=set" . $a[2];
} }
else { else {
@ -453,13 +451,11 @@ sub ENIGMA2_Set($@) {
return "No 3nd argument given, choose one of messagetext " return "No 3nd argument given, choose one of messagetext "
if ( !defined( $a[4] ) ); if ( !defined( $a[4] ) );
$_ = $a[3];
return return
"Argument " "Argument "
. $_ . $a[3]
. " is not a valid integer between 0 and 49680" . " is not a valid integer between 0 and 49680"
if ( !m/^\d+$/ || $_ < 0 || $_ > 49680 ); if ( $a[3] !~ m/^\d+$/ || $a[3] < 0 || $a[3] > 49680 );
Log3 $name, 3, "ENIGMA2 set $name " . $a[1] . " " . $a[2]; Log3 $name, 3, "ENIGMA2 set $name " . $a[1] . " " . $a[2];
@ -509,17 +505,11 @@ sub ENIGMA2_Set($@) {
"ENIGMA2 set $name " . $a[1] . " " . $a[2] . " " . $a[3] "ENIGMA2 set $name " . $a[1] . " " . $a[2] . " " . $a[3]
if defined( $a[3] ); if defined( $a[3] );
my $commandKeys = join( " ", sort keys %{
ENIGMA2_GetRemotecontrolCommand(
"GetRemotecontrolCommands")
});
if ( !defined( $a[2] ) ) { if ( !defined( $a[2] ) ) {
my $commandKeys = "";
for (
sort keys %{
ENIGMA2_GetRemotecontrolCommand(
"GetRemotecontrolCommands")
}
)
{
$commandKeys = $commandKeys . " " . $_;
}
return "No argument given, choose one of" . $commandKeys; return "No argument given, choose one of" . $commandKeys;
} }
@ -541,16 +531,6 @@ sub ENIGMA2_Set($@) {
if ( defined( $a[3] ) && lc( $a[3] ) eq "long" ); if ( defined( $a[3] ) && lc( $a[3] ) eq "long" );
} }
else { else {
my $commandKeys = "";
for (
sort keys %{
ENIGMA2_GetRemotecontrolCommand(
"GetRemotecontrolCommands")
}
)
{
$commandKeys = $commandKeys . " " . $_;
}
return return
"Unknown argument " "Unknown argument "
. $a[2] . $a[2]
@ -583,34 +563,34 @@ sub ENIGMA2_Set($@) {
Log3 $name, 3, "ENIGMA2 set $name " . $a[1] . " " . $a[2]; Log3 $name, 3, "ENIGMA2 set $name " . $a[1] . " " . $a[2];
if ( $state eq "on" ) { if ( $state eq "on" ) {
my $_ = $a[2]; my $cname = $a[2];
if ( defined( $hash->{helper}{bouquet}{$input}{$_}{sRef} ) ) { if ( defined( $hash->{helper}{bouquet}{$input}{$cname}{sRef} ) ) {
$result = ENIGMA2_SendCommand( $hash, "zap", $result = ENIGMA2_SendCommand( $hash, "zap",
"sRef=" "sRef="
. urlEncode( $hash->{helper}{bouquet}{$input}{$_}{sRef} ) . urlEncode( $hash->{helper}{bouquet}{$input}{$cname}{sRef} )
); );
} }
elsif (m/^(\d+):(.*):$/) { elsif ( $cname =~ m/^(\d+):(.*):$/) {
$result = $result =
ENIGMA2_SendCommand( $hash, "zap", "sRef=" . urlEncode($_) ); ENIGMA2_SendCommand( $hash, "zap", "sRef=" . urlEncode($cname) );
} }
elsif ( m/^\d+$/ && $_ > 0 && $_ < 10000 ) { elsif ( $cname =~ m/^\d+$/ && $cname > 0 && $cname < 10000 ) {
for ( split( //, $a[2] ) ) { for ( split( //, $a[2] ) ) {
$cmd = "command=" . ENIGMA2_GetRemotecontrolCommand($_); $cmd = "command=" . ENIGMA2_GetRemotecontrolCommand($cname);
$result = $result =
ENIGMA2_SendCommand( $hash, "remotecontrol", $cmd ); ENIGMA2_SendCommand( $hash, "remotecontrol", $cmd );
} }
$result = ENIGMA2_SendCommand( $hash, "remotecontrol", $result = ENIGMA2_SendCommand( $hash, "remotecontrol",
"command=" . ENIGMA2_GetRemotecontrolCommand("OK") ); "command=" . ENIGMA2_GetRemotecontrolCommand("OK") );
} }
elsif ( m/^\d+$/ && ( $_ <= 0 || $_ >= 10000 ) ) { elsif ( m/^\d+$/ && ( $cname <= 0 || $cname >= 10000 ) ) {
return "Numeric channel addressing '" . $_ return "Numeric channel addressing '" . $cname
. "' needs to be a number between 1 and 9999."; . "' needs to be a number between 1 and 9999.";
} }
else { else {
return return
"'" "'"
. $_ . $cname
. "' does not seem to be a valid channel. Known channels: " . "' does not seem to be a valid channel. Known channels: "
. $channels; . $channels;
} }
@ -1280,26 +1260,25 @@ sub ENIGMA2_ReceiveCommand($$$) {
{ {
my $i = 0; my $i = 0;
# TODO this loop is >5.012 only foreach my $key ( keys @{ $return->{e2service} } ) {
for ( keys @{ $return->{e2service} } ) {
my $channel = my $channel =
$return->{e2service}[$_]{e2servicename}; $return->{e2service}[$key]{e2servicename};
$channel =~ s/\s/_/g; $channel =~ s/\s/_/g;
# ignore markers # ignore markers
if ( $return->{e2service}[$_]{e2servicereference} =~ if ( $return->{e2service}[$key]{e2servicereference} =~
/^1:64:/ ) /^1:64:/ )
{ {
Log3 $name, 4, Log3 $name, 4,
"ENIGMA2 $name: Ignoring marker " "ENIGMA2 $name: Ignoring marker "
. $return->{e2service}[$_]{e2servicename}; . $return->{e2service}[$key]{e2servicename};
next; next;
} }
if ( $channel ne "" ) { if ( $channel ne "" ) {
$hash->{helper}{bouquet}{$input}{$channel} = $hash->{helper}{bouquet}{$input}{$channel} =
{ 'sRef' => { 'sRef' =>
$return->{e2service}[$_]{e2servicereference} $return->{e2service}[$key]{e2servicereference}
}; };
$hash->{helper}{channels}{$input}[$i] = $hash->{helper}{channels}{$input}[$i] =
@ -1382,13 +1361,12 @@ sub ENIGMA2_ReceiveCommand($$$) {
if ( ref($return) eq "HASH" ) { if ( ref($return) eq "HASH" ) {
# General readings # General readings
foreach ( foreach my $reading (
"enigmaversion", "imageversion", "webifversion", "enigmaversion", "imageversion", "webifversion",
"fpversion", "lanmac", "model", "fpversion", "lanmac", "model",
) )
{ {
$reading = $_; $e2reading = "e2" . $reading;
$e2reading = "e2" . $_;
if ( defined( $return->{e2about}{$e2reading} ) ) { if ( defined( $return->{e2about}{$e2reading} ) ) {
if ( $return->{e2about}{$e2reading} eq "False" if ( $return->{e2about}{$e2reading} eq "False"
@ -1558,7 +1536,7 @@ sub ENIGMA2_ReceiveCommand($$$) {
if ( ref($return) eq "HASH" ) { if ( ref($return) eq "HASH" ) {
# Service readings # Service readings
foreach ( foreach my $reading (
"servicereference", "servicename", "servicereference", "servicename",
"providername", "servicevideosize", "providername", "servicevideosize",
"videowidth", "videoheight", "videowidth", "videoheight",
@ -1569,8 +1547,7 @@ sub ENIGMA2_ReceiveCommand($$$) {
"sid" "sid"
) )
{ {
$reading = $_; $e2reading = "e2" . $reading;
$e2reading = "e2" . $_;
if ( defined( $return->{e2service}{$e2reading} ) if ( defined( $return->{e2service}{$e2reading} )
&& lc( $return->{e2service}{$e2reading} ) ne "n/a" && lc( $return->{e2service}{$e2reading} ) ne "n/a"
@ -1678,15 +1655,14 @@ sub ENIGMA2_ReceiveCommand($$$) {
$eventNow = $return->{e2eventlist}{e2event}; $eventNow = $return->{e2eventlist}{e2event};
} }
foreach ( foreach my $reading (
"eventstart", "eventduration", "eventstart", "eventduration",
"eventremaining", "eventcurrenttime", "eventremaining", "eventcurrenttime",
"eventdescription", "eventdescriptionextended", "eventdescription", "eventdescriptionextended",
"eventtitle", "eventname", "eventtitle", "eventname",
) )
{ {
$reading = $_; $e2reading = "e2" . $reading;
$e2reading = "e2" . $_;
# current event # current event
if ( defined( $eventNow->{$e2reading} ) if ( defined( $eventNow->{$e2reading} )
@ -1723,7 +1699,7 @@ sub ENIGMA2_ReceiveCommand($$$) {
} }
# next event # next event
$reading = $_ . "_next"; my $readingN = $reading . "_next";
if ( defined( $eventNext->{$e2reading} ) if ( defined( $eventNext->{$e2reading} )
&& lc( $eventNext->{$e2reading} ) ne "n/a" && lc( $eventNext->{$e2reading} ) ne "n/a"
&& $eventNext->{$e2reading} ne "0" && $eventNext->{$e2reading} ne "0"
@ -1732,40 +1708,40 @@ sub ENIGMA2_ReceiveCommand($$$) {
Log3 $name, 5, Log3 $name, 5,
"ENIGMA2 $name: detected valid reading $e2reading for next event"; "ENIGMA2 $name: detected valid reading $e2reading for next event";
if ( ReadingsVal( $name, $reading, "" ) ne if ( ReadingsVal( $name, $readingN, "" ) ne
$eventNext->{$e2reading} ) $eventNext->{$e2reading} )
{ {
readingsBulkUpdate( $hash, $reading, readingsBulkUpdate( $hash, $readingN,
$eventNext->{$e2reading} ); $eventNext->{$e2reading} );
# nextTitle # nextTitle
readingsBulkUpdate( $hash, "nextTitle", readingsBulkUpdate( $hash, "nextTitle",
$eventNext->{$e2reading} ) $eventNext->{$e2reading} )
if $reading eq "eventtitle_next"; if $readingN eq "eventtitle_next";
} }
} }
else { else {
Log3 $name, 5, Log3 $name, 5,
"ENIGMA2 $name: no valid reading $e2reading found for next event"; "ENIGMA2 $name: no valid reading $e2reading found for next event";
if ( ReadingsVal( $name, $reading, "" ) ne "-" ) { if ( ReadingsVal( $name, $readingN, "" ) ne "-" ) {
readingsBulkUpdate( $hash, $reading, "-" ); readingsBulkUpdate( $hash, $readingN, "-" );
# nextTitle # nextTitle
readingsBulkUpdate( $hash, "nextTitle", "-" ) readingsBulkUpdate( $hash, "nextTitle", "-" )
if $reading eq "eventtitle_next"; if $readingN eq "eventtitle_next";
} }
} }
} }
# convert date+time into human readable formats # convert date+time into human readable formats
foreach ( foreach my $readingO (
"eventstart", "eventcurrenttime", "eventstart", "eventcurrenttime",
"eventduration", "eventremaining" "eventduration", "eventremaining"
) )
{ {
$reading = $_ . "_hr"; $reading = $readingO . "_hr";
$e2reading = "e2" . $_; $e2reading = "e2" . $readingO;
# current event # current event
if ( defined( $eventNow->{$e2reading} ) if ( defined( $eventNow->{$e2reading} )
@ -1773,8 +1749,8 @@ sub ENIGMA2_ReceiveCommand($$$) {
&& $eventNow->{$e2reading} ne "" ) && $eventNow->{$e2reading} ne "" )
{ {
my $timestring; my $timestring;
if ( $_ eq "eventduration" if ( $readingO eq "eventduration"
|| $_ eq "eventremaining" ) || $readingO eq "eventremaining" )
{ {
my @t = localtime( $eventNow->{$e2reading} ); my @t = localtime( $eventNow->{$e2reading} );
$timestring = sprintf( "%02d:%02d:%02d", $timestring = sprintf( "%02d:%02d:%02d",
@ -1798,14 +1774,14 @@ sub ENIGMA2_ReceiveCommand($$$) {
} }
# next event # next event
$reading = $_ . "_next_hr"; $reading = $readingO . "_next_hr";
if ( defined( $eventNext->{$e2reading} ) if ( defined( $eventNext->{$e2reading} )
&& $eventNext->{$e2reading} ne "0" && $eventNext->{$e2reading} ne "0"
&& $eventNext->{$e2reading} ne "" ) && $eventNext->{$e2reading} ne "" )
{ {
my $timestring; my $timestring;
if ( $_ eq "eventduration" if ( $readingO eq "eventduration"
|| $_ eq "eventremaining" ) || $readingO eq "eventremaining" )
{ {
my @t = localtime( $eventNext->{$e2reading} ); my @t = localtime( $eventNext->{$e2reading} );
$timestring = sprintf( "%02d:%02d:%02d", $timestring = sprintf( "%02d:%02d:%02d",
@ -2118,9 +2094,8 @@ sub ENIGMA2_ReceiveCommand($$$) {
if ( ref($return) eq "HASH" if ( ref($return) eq "HASH"
&& defined( $return->{e2snrdb} ) ) && defined( $return->{e2snrdb} ) )
{ {
foreach ( "snrdb", "snr", "ber", "acg", ) { foreach my $reading ( "snrdb", "snr", "ber", "acg", ) {
$reading = $_; $e2reading = "e2" . $reading;
$e2reading = "e2" . $_;
if ( defined( $return->{$e2reading} ) if ( defined( $return->{$e2reading} )
&& lc( $return->{$e2reading} ) ne "n/a" ) && lc( $return->{$e2reading} ) ne "n/a" )
@ -2169,7 +2144,7 @@ sub ENIGMA2_ReceiveCommand($$$) {
|| $state eq "absent" || $state eq "absent"
|| $state eq "undefined" ) || $state eq "undefined" )
{ {
foreach ( foreach my $reading (
'servicename', 'providername', 'servicename', 'providername',
'servicereference', 'videowidth', 'servicereference', 'videowidth',
'videoheight', 'servicevideosize', 'videoheight', 'servicevideosize',
@ -2195,14 +2170,14 @@ sub ENIGMA2_ReceiveCommand($$$) {
'eventname_next', 'eventname_next',
) )
{ {
readingsBulkUpdate( $hash, $_, "-" ) readingsBulkUpdate( $hash, $reading, "-" )
if ( ReadingsVal( $name, $_, "" ) ne "-" ); if ( ReadingsVal( $name, $reading, "" ) ne "-" );
} }
# special handling for signal values # special handling for signal values
foreach ( 'acg', 'ber', 'snr', 'snrdb', ) { foreach my $reading ( 'acg', 'ber', 'snr', 'snrdb', ) {
readingsBulkUpdate( $hash, $_, "0" ) readingsBulkUpdate( $hash, $reading, "0" )
if ( ReadingsVal( $name, $_, "" ) ne "0" ); if ( ReadingsVal( $name, $reading, "" ) ne "0" );
} }
} }