Neues Modul 71_PHILIPS_AUDIO.pm für MCi, Streamium und Fidelio Geräte

Begonnen von ra666ack, 21 Februar 2015, 19:58:04

Vorheriges Thema - Nächstes Thema

ra666ack

Hi Paul,

besten Dank für deine Hilfe. In der Tat, dachte ich, dass die Eingänge andere Hintergrundbilder haben...
Ist das wirklich so?

ZitatDanach steht "Digital-in 2 (Optisch)", "Digital-in 1 (Coax)", "Aux-in" oder "MP3 Link".

Das klingt doch gut. Ich brauche irgendeinen Unterschied im HTML. Es muss nicht unbedingt das Hintergrundbild sein.
Kannst du alle HTML Seiten von dig1, dig2, aux und mp3 ganz zu posten?

Danke und Gruß

Radek

Paul Guijt

Hallo Radek,

Alle HTML Seiten von dig1, dig2, aux und mp3 findest du anbei, und noch einige. Ich hatte alle formattiert, weil die original eine ziemliche Schlamperei waren.

Das "Digital-in 2 (Optisch)", "Digital-in 1 (Coax)", "Aux-in" oder "MP3 Link" is Niederländisch, die URL's sind aber nicht vom Sprache abhängig. Für mich wäre vollständig z.B. mit http://192.168.178.29:8889/digin_optical ein Reading state digin_optical zu haben.

Freundliche Grüße,
Paul
RasPi 2B, CUL 433, Jens' FW, Berker, HomeMatic, KlikaanKlikuit, RFXtrx443, Squeezebox, Z-Wave, TradFri in die Niederlände

ra666ack

Danke Paul,

es gibt Hoffnung --> var previousPage = {'url':'/digin_optical'};

Die scheinen immer eindeutig zu sein.

Schau ich mir im Lauf der Woche an.

Ciao

Radek

Paul Guijt

Einfach. Digin_optical war der erste, dann kam z.B. MP3, dann bin ich zurück gegangen und habe ein andere Seite aufgefragt. Wieder zurück und ein dritte Seite. Und so weiter.
RasPi 2B, CUL 433, Jens' FW, Berker, HomeMatic, KlikaanKlikuit, RFXtrx443, Squeezebox, Z-Wave, TradFri in die Niederlände

ra666ack

Hi Paul,

ok, maybe I was too enthusiastic. I'm a bit puzzled about how the AW9000 works. Need some additional help here.

It seems all of the aux inputs (digital/analog) have the same background picture. Is that right?
If so, there's no chance to distinguish between them on HTML level but on actions taken before.
Is this the way the Philips app works?

This might cause an input mismatch in case the AW9000 is controlled outside FHEM.

Need to find a solution, if any...

Ciao

Radek








Paul Guijt

Hi Radek,

> It seems all of the aux inputs (digital/analog) have the same background picture. Is that right? Yes

>  If so, there's no chance to distinguish between them on HTML level but on actions taken before.

Well, earlier I wrote

  Ich denke nicht das es dir helfen wird. Ich habe die HTML Texten aller Seiten verglichen, und das einzige Unterschied ist im Text nach
  Code: [Auswählen]
 
  <body>
   <div  id="outer_panel" >
      <div  id="top_panel" style="border-bottom:1px solid #4d4d4d;">
         <table width="100%" height="100%" border="0" cellspacing="0" cellpadding="0">
         <tr>   <td width="20%" align='left' style="padding-left:6px;"></td>
               <td width="60%"><div align="center">

  Danach steht "Digital-in 2 (Optisch)", "Digital-in 1 (Coax)", "Aux-in" oder "MP3 Link".

With verbose 5 I've evaluated some AW9000 responses and concluded that what I earlier wrote is the only way to determine what's currently cooking. If you could put the current "Digital-in 2 (Optisch)", "Digital-in 1 (Coax)", "Aux-in" or "MP3 Link" into a reading, it would cater my needs.

I want to switch the power to my record player and pre-amplifier on when "Aux-in" is selected, and off in all other cases. Therefore I need an event when Aux is selected and deselected to trigger a notify.

Kind regards,
Paul
RasPi 2B, CUL 433, Jens' FW, Berker, HomeMatic, KlikaanKlikuit, RFXtrx443, Squeezebox, Z-Wave, TradFri in die Niederlände

ra666ack

Hi Paul,

got your point.

I wasn't expecting the same background picture for all inputs.
In that case as you said and already did the only way is to act on HTML file differences. Not really nice...

I'll use the HTML files as provided, hoping they're valid for all AW9000 players and all firmware versions...

We'll see on future postings :)

Implementation of the desired readings should be a no-brainer. I hope. As long as there's no bigger surprises in the firmware...
Will keep you posted.

Ciao

Radek



Kusselin

Hi,
funzt das Modul auch mit einem Philips NP2500?
Hat das schon jemand probiert?

Gruss
Markus

Paul Guijt

Hallo Markus,

Kannst du es bedienen mit http://<adresse> :8889 ?

Grüße,
Paul
RasPi 2B, CUL 433, Jens' FW, Berker, HomeMatic, KlikaanKlikuit, RFXtrx443, Squeezebox, Z-Wave, TradFri in die Niederlände

Kusselin

Zitat von: Paul Guijt am 02 März 2017, 21:10:53
Hallo Markus,

Kannst du es bedienen mit http://<adresse> :8889 ?

Grüße,
Paul

also wenn ich das in den Browswe eingebe mit der ip des NP2500 bekomme ich Netzwerküberschreitung :(

Paul Guijt

Hallo Markus,

Entschuldige.

Ich sehe das ich unabsichtlich ein Zwischenraum eingefügt habe. Es muss sein: http://<adresse>:8889.

Wenn es nicht gelingt, wird mmn das Modul nicht funzen.

Freundliche Grüße,
Paul
RasPi 2B, CUL 433, Jens' FW, Berker, HomeMatic, KlikaanKlikuit, RFXtrx443, Squeezebox, Z-Wave, TradFri in die Niederlände

Paul Guijt

Hi Radek,

This is the raw definition after a shutdown restart and a while:
defmod Fidelio PHILIPS_AUDIO AW9000 192.168.178.29
attr Fidelio alias Luidsprekers
attr Fidelio devStateIcon off:rc_GREEN:off on:rc_YELLOW:on absent:rc_STOP:on
attr Fidelio group Geluid
attr Fidelio model AW9000
attr Fidelio room Media,Overzicht
attr Fidelio stateFormat Mute is  mute
attr Fidelio verbose 5
attr Fidelio webCmd standbyButton:mute:unmute:volume

setstate Fidelio Mute is  off
setstate Fidelio 2017-03-02 21:55:16 albumArt
setstate Fidelio 2017-03-02 21:55:16 elapseTime 00:00:00
setstate Fidelio 2016-06-28 11:03:33 inetRadioFavorite01 Jazz FM
setstate Fidelio 2016-06-28 11:02:24 inetRadioPreset01 BBC Radio 1
setstate Fidelio 2016-06-28 11:02:24 inetRadioPreset02 BBC Radio 2
setstate Fidelio 2016-06-28 11:02:24 inetRadioPreset03 BBC Radio 4
setstate Fidelio 2016-06-28 11:02:24 inetRadioPreset04 BBC Radio 4 Extra
setstate Fidelio 2016-06-28 11:02:24 inetRadioPreset05 Magic 105.4
setstate Fidelio 2017-03-02 21:55:16 mute off
setstate Fidelio 2017-03-02 21:55:16 playing no
setstate Fidelio 2017-03-02 21:55:16 power on
setstate Fidelio 2017-03-02 21:45:50 presence present
setstate Fidelio 2017-03-02 21:55:16 state on
setstate Fidelio 2017-03-02 21:55:16 subtitle
setstate Fidelio 2017-03-02 21:55:16 title
setstate Fidelio 2016-06-28 11:03:33 totalInetRadioFavorites 1
setstate Fidelio 2016-06-28 11:02:24 totalInetRadioPresets 10
setstate Fidelio 2017-03-02 21:55:16 totalTime
setstate Fidelio 2017-03-02 21:55:16 volume 29
setstate Fidelio 2017-03-02 21:55:16 volumeStraight 19


And this the Log it produces:
2017.03.02 21:46:10 1: PERL WARNING: Argument "?" isn't numeric in addition (+) at ./FHEM/98_SB_PLAYER.pm line 1503.
2017.03.02 21:46:47 1: PERL WARNING: Use of uninitialized value $temp in division (/) at ./FHEM/32_SYSSTAT.pm line 578.
2017.03.02 21:50:46 5: PHILIPS_AUDIO (Fidelio) - set Fidelio ?
2017.03.02 21:51:16 5: PHILIPS_AUDIO (Fidelio) - execute nonblocking "nowplay noArg" on Fidelio:
2017.03.02 21:51:16 5: PHILIPS_AUDIO (Fidelio) - received HTTP code 200 for command "nowplay noArg"
2017.03.02 21:51:16 5: PHILIPS_AUDIO (Fidelio) - got response for "nowplay noArg": <!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
<meta name="viewport" content="initial-scale=1.0,maximum-scale=1.0,user-scalable=0" />
<meta name='apple-mobile-web-app-capable' content='yes' />
<meta http-equiv="expires" content="Fri, 31 Dec 2021 18:18:18 GMT" />
<meta http-equiv="cache-control" content="max-age=86400, must-revalidate" />
<meta http-equiv="last-modified" content="Tue, 13 Jan 2012 13:58:59 GMT" />
<script src="res/jquery.min.js"></script>
<link rel="stylesheet" href="res/WKSlider.css"/>
<script type="text/javascript" src="res/WKSlider.js"></script>
<link href="res/now_playing.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="res/iscroll.min.js"></script>
<script src='res/jquery.alerts.js'></script>
<link href='res/jquery.alerts.css' rel='stylesheet' type='text/css' />
<script language='javascript'>
$(document).bind('touchstart', function preventZoom(e) {
        var t2 = e.timeStamp;
        var t1 = $(document).data('lastTouch') || t2;
        var dt = t2 - t1;
        var fingers = e.originalEvent.touches.length;
$(document).data('lastTouch', t2);
        if (!dt || dt > 500 || fingers > 1){
return;}
e.preventDefault();
        $(document).trigger('click').trigger('click');
      });</script>

<script type="text/javascript">
var isWaitforResponse = 0;
var progressSelected = 0 ;
http = new XMLHttpRequest();
        t=setInterval("timedCount()",5000);
function timedCount()
{
    http.open("GET", "/ELAPSE", true);
    http.onreadystatechange=function() {
    if(http.readyState == 4) {
    if( http.responseText != "")
{
    var obj= eval('(' + http.responseText + ')');

    if(obj.command == 'HOME' ||obj.command == 'STOP' || obj.command == 'NOWPLAY'){
    clearInterval(t);
    CalculateAmountOnClick();
window.location = '/nowplay';
    }
else if(obj.command == 'ELAPSE'){
                                            if(obj.mute != playItem.muteStatus)
                                            {
                                                if(obj.mute == 0){
                                                document.getElementById('id-img-mute').src = 'res/Btn_Mute.png';
                                                playItem.muteStatus = 0;}
                                            else if(obj.mute == 1){
                                                document.getElementById('id-img-mute').src = 'res/Btn_Mute_on.png';
                                                playItem.muteStatus = 1;}
                                            }
                                            if(obj.volume != playItem.volume){
if(gVolumebarChanged){
                                gVolumebarChanged=0;}else{
playItem.volume = obj.volume;
                                                changepos_X(obj.volume);}
                                            }
                                        }
}
}
}
http.send();
}

function begin()
{
progressSelected = 1;
}
  var myScroll;
                function loaded() {
                   myScroll = new iScroll('album_art_table', {desktopCompatibility:true});
                    }
                if(!document.addEventListener) {
                document.attachEvent('touchmove,', function (e) {e.preventDefault();}, false);
                        document.attachEvent('DOMContentLoaded',function(){ setTimeout(function(){ loaded(); },100);},false);
                      }
                else {
                       document.addEventListener('touchmove', function (e) { e.preventDefault(); },false);
                       document.addEventListener('DOMContentLoaded',function(){ setTimeout(function(){ loaded(); },100);},false);
                    }
function animatePG()
{
if(progressSelected == 0)
{
$('#progress_panel').animate({
  marginTop: parseInt($('#progress_panel').css('marginTop'),10) == 0 ?
-$('#progress_panel').outerHeight():0
});
}
progressSelected = 0;
}
</script>
<title>Play screen</title>
<script type='text/javascript'>
   var playItem = {
                     'defaultAlbum':1,
                     'defaultAlbumArt':'res/Home_AUX_nowplaying.jpg',
                     'muteStatus':0,
                     'volume':19,
                     'maxvolume':64,
            'favstatus':1,
            'elapsetime':0,
            'totaltime':0 };      var previousPage = {'url':'/digin_optical'};

                        function gotoDevice(){clearInterval(t);
                        window.location = 'philips://remote/action=quit'}
                        function gotoHome(){
                        gotoPage('/index');
                        }

        function gotoNowPlaying(){}

function gotoSettings(){
gotoPage('/settings$01$01$01$0');
}
        function goback(){
        gotoPage(previousPage.url);
}function toggleMute(){
if(playItem.muteStatus==1){
document.getElementById('id-img-mute').src = 'res/Btn_Mute.png';
playItem.muteStatus = 0;
                submitPost('nowplay','/VOLUME$UNMUTE');
}
else{
document.getElementById('id-img-mute').src = 'res/Btn_Mute_on.png';
playItem.muteStatus = 1;
                submitPost('nowplay','/VOLUME$MUTE');
}
}

function goHome(){
gotoPage('/index');
} function CalculateAmountOnClick () {
var curtain = document.body.appendChild( document.createElement('div') );
curtain.id = 'curtain';
curtain.style.height = window.outerHeight + 'px';
curtain.onkeypress = curtain.onclick = function(){ return false; }
}

function submitPost(url,val)
{
var xmlhttp;
if(window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest();
}
else {
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{

}
}
            xmlhttp.open("GET",val,true);
            xmlhttp.send();
}

function Right(str, n){
    if (n <= 0)
       return "";
    else if (n > String(str).length)
       return str;
    else {
       var iLen = String(str).length;
       return String(str).substring(iLen, iLen - n);
}
}function gotoPage(url){
clearInterval(t);
CalculateAmountOnClick();
checkAndClearPrevRequest();
window.location = url;
}
function checkAndClearPrevRequest(){
return;
if(http.readyState != 4 && http.readyState != 0)
{
http.abort();
//sleep(500);
}
}
</script> <style type='text/css' media='all'>
#scroller{float:left;width:100%;padding:0;}
#td_2{border-right:1px solid #4d4d4d;}
</style>

</head><body>
<div  id="outer_panel" >
  <div  id="top_panel" style="border-bottom:1px solid #4d4d4d;">
  <table width="100%" height="100%" border="0" cellspacing="0" cellpadding="0">
      <tr>
         <td width="20%" align='left' style="padding-left:6px;"></td>
         <td width="60%"><div align="center">Digital-in 2 (Optisch)</div></td>
         <td width="20%" align='right' style="padding-right:6px;">
         </td>
</tr>
</table>
  </div>
<div id="middle_panel_aux">
<table id="album_art_table" border="0" cellspacing="0" cellpadding="0" width="100%%">
      <tr align="center">
  <script type='text/javascript'>
if(playItem.defaultAlbum == 0)
document.write('<td><img src="'+playItem.albumArt+'"/></td>');
else
document.write('<td><img src="'+playItem.defaultAlbumArt+'"/></td>');
       </script>
      </tr>
</table>
</div>
<div id='bottom_panel_1'>
<table width="100%"align="center"><tr><td width="15%" align='right'>
<script type='text/javascript'>
                                if(playItem.muteStatus == 0)
                                    document.write('<img id="id-img-mute" width="40px" height="32px" onclick="toggleMute()" src="res/Btn_Mute.png"/>');
                                else
                                        document.write('<img id="id-img-mute" width="40px" height="32px" onclick="toggleMute()" src="res/Btn_Mute_on.png"/>');
                                </script>
</td>
<td width="70%" align='center'>
<div id="slidercontainer">
<div id="mySlider1" class="slider">
                        <div class="track"></div>
                        <div class="knob" role="slider" aria-valuemin="0" aria-valuemax="100"></div>
                    </div>
</div>
</td><td width="15%" align='left'><img src='res/Button_EQ.png' height=32px width=40px onclick="gotoPage('/settings$15$02$01$0');"></td></tr></table><br><br>
                <table id="table_new" height='100%%' width="100%%" style="border-top:1px solid #4d4d4d;">
<tr align='center'><td id='td_2' class='bottom_td' onclick='javascript:gotoDevice()'><div><img src="res/Tab_Home.png" height=48px width=72px style="-o-transform: scale(1);-moz-transform: scale(1);padding-right:4px;" /></div></td>
<td id='td_3' class='bottom_td' onclick='javascript:gotoNowPlaying()'><div><img src="res/Tab_NowPlaying_hl.png" height=48px width=72px style="-o-transform: scale(1);-moz-transform: scale(1);padding-right:4px;" /></div></td>
</tr></table></div>
</div>
<script type='text/javascript'>
var perc = (playItem.volume*100)/playItem.maxvolume;
var volSlider = new WKSlider('mySlider1',perc);
var gVolumebarChanged=0;
volSlider.callback = function (percentage) {
  var vol = Math.round((playItem.maxvolume * percentage)/100);
  playItem.volume = vol;
  gVolumebarChanged = 1;
  submitPost('nowplay','/VOLUME$VAL$'+vol);
}
                                function changepos_X(vol)
                  {
                      var perc = (vol*100)/playItem.maxvolume;
                      volSlider.changePos(perc);
                  }
</script>
</body>
</html>
2017.03.02 21:51:16 5: PHILIPS_AUDIO (Fidelio) - set Fidelio ?


As you see, no luck yet.

Freundliche Grüße,
Paul
RasPi 2B, CUL 433, Jens' FW, Berker, HomeMatic, KlikaanKlikuit, RFXtrx443, Squeezebox, Z-Wave, TradFri in die Niederlände

ra666ack


ra666ack


Paul Guijt

Hi Radek,

Yes, it's working. I see a reading 'input'. Some observations:

  • set aux -> ok
  • set coaxial -> state & presence absent, still Aux after return
  • set mp3link -> no effect
  • set optical -> ok
  • set inetPreset -> ok
  • of course it takes a while till the readings refresh, can an instant refresh be automatically triggered after a set?

Freundliche Grüße,
Paul
RasPi 2B, CUL 433, Jens' FW, Berker, HomeMatic, KlikaanKlikuit, RFXtrx443, Squeezebox, Z-Wave, TradFri in die Niederlände