mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-01-31 18:59:33 +00:00
71_YAMAHA_NP: More secure FM frequency input.
git-svn-id: https://svn.fhem.de/fhem/trunk@10222 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
0bdb591435
commit
ebd5082102
@ -1,5 +1,6 @@
|
||||
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
||||
# Do not insert empty lines here, update check depends on it.
|
||||
- change: 71_YAMAHA_NP: More secure FM frequency input
|
||||
- feature: FHEMWEB/Event Monitor: optional FHEM Log monitor.
|
||||
- feature: 50_Telegrambot: multiple contacts for send etc/removed depreacted
|
||||
messageTo,sendImageTo,sendPhotoTo/allowunknowncontacts
|
||||
|
@ -5,16 +5,21 @@
|
||||
# 71_YAMAHA_NP.pm
|
||||
#
|
||||
# An FHEM Perl module for controlling the Yamaha CD-Receiver CRX-N560(D)
|
||||
# (aka MCR-N560D) via Ethernet connection.
|
||||
# The module should also work with devices controlled by the
|
||||
# Yamaha Network Player App for *OS and Andr*id
|
||||
# (e.g. NP-S2000, CD-N500, CD-N301, R-N500, R-N301).
|
||||
# (aka MCR-N560D) via Ethernet.
|
||||
#
|
||||
# Copyright by Radoslaw Watroba
|
||||
# (e-mail: ra666ack@googlemail.com)
|
||||
# The module might also work with devices such as
|
||||
# NP-S2000, CD-N500, CD-N301, R-N500, R-N301 controlled by the
|
||||
# Yamaha Network Player App.
|
||||
#
|
||||
# Inspired by the 71_YAMAHA_AVR module by Markus Bloch
|
||||
# (e-mail: Notausstieg0309@googlemail.com)
|
||||
# *OS:
|
||||
# https://itunes.apple.com/us/app/network-player-controller-us/id467502483?mt=8
|
||||
#
|
||||
# Andr*id:
|
||||
# https://play.google.com/store/apps/details?id=com.yamaha.npcontroller
|
||||
#
|
||||
# Copyright by Radoslaw Watroba (ra666ack@googlemail.com)
|
||||
#
|
||||
# (Inspired by Markus Bloch and the module 71_YAMAHA_AVR)
|
||||
#
|
||||
# This file is part of fhem.
|
||||
#
|
||||
@ -249,6 +254,8 @@ sub YAMAHA_NP_Set
|
||||
|
||||
Log3 $name, 5, "YAMAHA_NP ($name) - set ".join(" ", @a);
|
||||
|
||||
# Processing of incoming commands.
|
||||
|
||||
if($what eq "on")
|
||||
{
|
||||
YAMAHA_NP_SendCommand($hash, "<YAMAHA_AV cmd=\"PUT\"><System><Power_Control><Power>On</Power></Power_Control></System></YAMAHA_AV>" ,$what, "On");
|
||||
@ -285,17 +292,17 @@ sub YAMAHA_NP_Set
|
||||
}
|
||||
else
|
||||
{
|
||||
return "No inputs are avaible. Please try an statusUpdate.";
|
||||
return "No inputs avaible. Please try an statusRequest.";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return "input can only be used when device is powered on";
|
||||
return "Switch device on first.";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return $inputs_piped eq "" ? "No inputs are available. Please try an statusUpdate." : "No input parameter was given";
|
||||
return $inputs_piped eq "" ? "No inputs available. Please try an statusRequest first." : "No input parameter given.";
|
||||
}
|
||||
}
|
||||
elsif($what eq "mute")
|
||||
@ -319,7 +326,7 @@ sub YAMAHA_NP_Set
|
||||
}
|
||||
else
|
||||
{
|
||||
return "mute can only used when device is powered on";
|
||||
return "Switch device on in order to mute it.";
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -331,7 +338,7 @@ sub YAMAHA_NP_Set
|
||||
}
|
||||
else
|
||||
{
|
||||
return "Dimmer value must be 1..3";
|
||||
return "Dimmer value must be 1 .. 3";
|
||||
}
|
||||
}
|
||||
elsif($what =~ /^(volumeStraight|volume|volumeUp|volumeDown)$/)
|
||||
@ -650,7 +657,7 @@ sub YAMAHA_NP_Set
|
||||
}
|
||||
elsif($what eq "timerVolume")
|
||||
{
|
||||
# if lower than minimum VOLUMESTRAIGHTMIN or higher than max VOLUMESTRAIGHTMAX set target volume to the corresponding limts
|
||||
# if lower than minimum VOLUMESTRAIGHTMIN or higher than max VOLUMESTRAIGHTMAX set target volume to the corresponding limits
|
||||
if($a[2] >= $hash->{helper}{VOLUMESTRAIGHTMIN} and $a[2] <= $hash->{helper}{VOLUMESTRAIGHTMAX})
|
||||
{
|
||||
$hash->{helper}{timerVolume} = $a[2];
|
||||
@ -695,25 +702,47 @@ sub YAMAHA_NP_Set
|
||||
}
|
||||
}
|
||||
elsif($what eq "tunerFMFrequency")
|
||||
{
|
||||
if ( $a[2] =~ /^[0-9,.E]+$/ ) # Check if value is numeric
|
||||
{
|
||||
if( $a[2] >= 87.50 and $a[2] <= 108.00)
|
||||
{
|
||||
my $frequency = $a[2];
|
||||
$frequency =~ s/\.//; # Remove decimal point
|
||||
YAMAHA_NP_SendCommand($hash, "<YAMAHA_AV cmd=\"PUT\"><Tuner><Play_Control><Tuning><FM><Freq>".$frequency."<\/Freq><\/FM><\/Tuning><\/Play_Control><\/Tuner></YAMAHA_AV>", "tunerFMFrequency", $a[2]);
|
||||
}
|
||||
else
|
||||
{
|
||||
return "Frequency value must be in the range 87.50 ... 108.00 of the format (x)xx.xx"
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return "Frequency value must be numeric in the range 87.50 ... 108.00 of the format (x)xx.xx"
|
||||
}
|
||||
}
|
||||
{
|
||||
if(length($a[2]) <= 6 and length($a[2]) >= 5) # Check the string length (x)xx.xx
|
||||
{
|
||||
if ( $a[2] =~ /^[0-9,.E]+$/ ) # Check if value is numeric
|
||||
{
|
||||
if( $a[2] >= 87.50 and $a[2] <= 108.00) # Check if within the value range
|
||||
{
|
||||
if(substr($a[2], -3, 1) eq '.') # Check for decimal point
|
||||
{
|
||||
my $lastDigit = substr($a[2], -1, 1);
|
||||
if(($lastDigit eq "0") or ($lastDigit eq "5"))
|
||||
{
|
||||
my $frequency = $a[2];
|
||||
$frequency =~ s/\.//; # Remove decimal point
|
||||
YAMAHA_NP_SendCommand($hash, "<YAMAHA_AV cmd=\"PUT\"><Tuner><Play_Control><Tuning><FM><Freq>".$frequency."<\/Freq><\/FM><\/Tuning><\/Play_Control><\/Tuner></YAMAHA_AV>", "tunerFMFrequency", $a[2]);
|
||||
}
|
||||
else
|
||||
{
|
||||
return "Last digit must be '0' or '5'";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return "Missing decimal point. Accepted format (x)xx.xx"
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return "Frequency value must be in the range 87.50 ... 108.00 of the format (x)xx.xx";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return "Frequency value must be numeric in the range 87.50 ... 108.00 of the format (x)xx.xx";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return "Frequency length must be 5 or 6 characters e.g. 89.50 or 108.00";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return $usage;
|
||||
@ -1369,7 +1398,7 @@ sub YAMAHA_NP_ParseResponse
|
||||
readingsBulkUpdate($hash, "volume", YAMAHA_NP_volume_abs2rel($hash, $hash->{helper}{targetVolume}));
|
||||
# New "volume"value: The CRX-N560D cannot provide the current volume in time after a volume change.
|
||||
# Therefore updated locally.
|
||||
# Volume will be updated during the next timer loop.
|
||||
# Volume will be updated during the next statusRequest timer loop.
|
||||
}
|
||||
}
|
||||
|
||||
@ -1545,6 +1574,7 @@ sub YAMAHA_NP_html2txt
|
||||
1;
|
||||
|
||||
=pod
|
||||
|
||||
=begin html
|
||||
|
||||
<a name="YAMAHA_NP"></a>
|
||||
@ -1675,7 +1705,6 @@ sub YAMAHA_NP_html2txt
|
||||
<li><b>volumeUp</b> [<VOL_MIN>...<VOL_MAX>] - increases the volume by one device's absolute step. <VOL_MIN> and <VOL_MAX> are read and set from the device automatically.</li>
|
||||
<li><b>volumeDown</b> [<VOL_MIN>...<VOL_MAX>] - increases the volume by one device's absolute step. <VOL_MIN> and <VOL_MAX> are read and set from the device automatically.</li>
|
||||
</ul><br><br>
|
||||
|
||||
A typical example is powering the device remotely and tuning the favourite radio station:<br><br>
|
||||
Add the following code into the <b>fhem.cfg</b> configuration file:<br><br><br>
|
||||
<ul>
|
||||
@ -1701,7 +1730,6 @@ sub YAMAHA_NP_html2txt
|
||||
</ul>
|
||||
<br><br>
|
||||
It's a good idea to insert a 'sleep' instruction between each fhem commands due to internal processing time of the network player. During that time the following commands might be ignored...<br><br>
|
||||
|
||||
Now the function can be called by typing the following line in the FHEM command line or by the notify-definitions:<br><br>
|
||||
<ul>
|
||||
<code>
|
||||
@ -1801,7 +1829,9 @@ sub YAMAHA_NP_html2txt
|
||||
However, even if the standbyMode is set to "Eco" the device can be powered off. In that case it has to be switched on manually.<br>
|
||||
</ul><br>
|
||||
</ul>
|
||||
|
||||
=end html
|
||||
|
||||
=begin html_DE
|
||||
|
||||
<a name="YAMAHA_NP"></a>
|
||||
@ -2048,5 +2078,7 @@ sub YAMAHA_NP_html2txt
|
||||
Das Abschalten funktioniert auch standbyMode "Normal" Modus.<br>
|
||||
</ul><br>
|
||||
</ul>
|
||||
|
||||
=end html_DE
|
||||
|
||||
=cut
|
||||
|
Loading…
Reference in New Issue
Block a user