Tag zusammen,
vielen Dank für das Script! Es funktioniert, jedoch bekomme ich die gleichen Fehlermeldungen wie in #7 und #20 zitiert.
Kann da jemand weiterhelfen?
Gruß,
Christoph
Tag zusammen,
vielen Dank für das Script! Es funktioniert, jedoch bekomme ich die gleichen Fehlermeldungen wie in #7 und #20 zitiert.
Kann da jemand weiterhelfen?
Gruß,
Christoph
hat denn keiner eine Idee, woher diese Fehlermeldungen kommen?
Sonst funzt das ja richtig gut, aber mit den Meldungen im WF nicht wirklich WAF konform…
Vielen Dank für Eure Rückmeldungen
Ich hatte den Fehler bekommen als ich in der vlcPlayer.php Zeile 63 wo man die Adresse des vlc http servers angibt vor der IP-Adresse „http://“ stehen hatte. Nur IP und Port hat dann funktioniert.
…
Aber ich glaube das löst das Problem nicht ganz… bin mir nicht sicher ob er den Server dann überhaupt findet bekommen nämlich keine werte.
…
Soo jetzt gehts und ich schliesse mich mit dem Fehler an
Wen es aber stören sollte kann „error_reporting(0);“ an den anfang setzen und in der vlcPlayer.php setzen.
Hallo Huelke, hab’ mir das mit großem Interesse angesehen. Ich habe auf meinem Media PC im Wohnzimmer allerdings die Windows Media Center Edition laufen, weil ich die immer noch am Besten finde in Bezug auf Funktionsumfang und Darstellung… Kennst Du eine Möglichkeit, wie man die per IPS fernsteuern kann? Gibt es da auch einen HTTP-Server und eine PHP Bibliothek dafür? Vielen Dank.
Servus
falls du sonst nix findest hätte ich folgendes anzubieten:
Kennst du Eventghost ? Damit kannst du neben vielen anderen Mediaplayern auch das MCE ansteueren.
Mit dem hier http://www.ip-symcon.de/forum/f53/android-eventghost-communication-suite-19614/ kommst von IPS nach Eventghost.
Somit gibts einen Weg IPS -> Eventghost -> MCE.
Das drumrum müßtest dir halt entsprechend zusammenbasteln.
gruß
bb
Hallo zusammen,
für ein Halloween Projekt bin ich hier über den Threat gefallen und habs gleich mal erfolglos versucht den VLC per Script zu steuern. Mittlerweile muss man bei VLC für http ein Passwort vergeben. Ich weiß gar nicht, ob das in der class berücksichtigt ist…
Weiß jemand, ob das noch funktioniert? Besser wäre noch eine Ansteuerung per MQTT, aber da muss der VLC Player auch mitmachen
Vielleicht hat ja jemand Lust nach 10 Jahren hier nochmal drüber nachzugrübeln…
Dannke schon mal für eure Hilfe.
Benutzername und Passwort reicht vmtl. in die Datei vlcPlayer.php in ca. Zeile 9 folgendes zu ergänzen
'timeout' => $timeout, // HIER auf das Komma am Ende achten!!
'header' => array('Authorization: Basic ' . base64_encode("benutzer:password"))
Wow, wie schnell, dankeschön
Funktioniert nur leider trotzdem nicht.
Benutzername ist leer, daher habe ich
‚header‘ => array('Authorization: Basic ’ . base64_encode(„:passwort“))
und
‚header‘ => array('Authorization: Basic ’ . base64_encode(„:[passwort“))
getestet.
Woran scheitert es? Hast du dir den HTTP Befehl (nach VLC Handbuch) mal selber zusammengebaut und im Webbrowser ausprobiert?
Der Link könnte so aussehen:
http://:passwort@192.168.123.210:8080/requests/status.xml?command=pl_pause
unten mal ein Screenshot, wie ich zw. Play und Pause toggle.
Ja, wenn ich genau so die URL aufbaue, verlangt er nach nutzer/passwort
Wenn ich das einmal eingegeben habe, dann macht er die Befehle
Nur aus Symcon heraus passiert leider nichts…
Klappt mein ausführlicher PHP Code? Leider ist meine Konsole abgestürzt und ich kann keinen Text herauskopieren, sondern es ging nur der Screenshot. Hat der IP-Symcon Server auch einen Browser oder ein WGET/CURL?
Ja, ist ein Windows PC, wo auch im Edge das Webfront läuft.
Ich wüsste so genau nicht, was ich von dem Code so ohne weiters nutzen könnte. Ich glaube halt, es liegt daran, dass Symcon das Passwort nicht übergeben kann…
Sieht die Datei bei dir so aus?
function get_web_page( $url,$timeout=10 )
{
$options = array( 'http' => array(
'user_agent' => 'spider', // who am i
'max_redirects' => 10, // stop after 10 redirects
'timeout' => $timeout, // timeout on response
'header' => 'Authorization: Basic '.base64_encode(":passwort")
) );
$context = stream_context_create( $options );
$page = @file_get_contents( $url, false, $context );
Achtung: Ich habe hier die innere Array entfernt. Das kann ggf. Probleme machen, wenn man nur einen Wert hat.
Ja, exakt so. Hab es jetzt auch noch ohne array versucht, aber es kommt weiterhin immer die Meldung:
Warning: Trying to access array offset on value of type null in C:\ProgramData\Symcon\scripts\vlcPlayer.php on line 74
Teste es gerade mit der pause-Funktion
// Include Class
require_once(‚vlcPlayer.php‘);
// Erstelle Instanz:
$VLC=new vlcPlayer(„http://192.168.0.20:8080/“,false);
// Datei hinzufügen und abspielen
$VLC->toggle_pause($id=false);
In ca. Zeile 37 müsste return $result;
stehen. Füge mal unmittelbar davor ein print_r($result);
ein.
Und verwende hier im Forum bitte den Vorformatierten-Text Block (Symbol </>).
Habe ich ausprobiert, klappt aber nicht…
Ich schicke vorsichtshalber mal das Ganze:
include(„xml2array.php“);
function get_web_page( $url,$timeout=10 )
{
$options = array( ‚http‘ => array(
‚user_agent‘ => ‚spider‘, // who am i
‚max_redirects‘ => 10, // stop after 10 redirects
‚timeout‘ => $timeout, // timeout on response
‚header‘ => 'Authorization: Basic '.base64_encode(„:timo“)
) );
$context = stream_context_create( $options );
$page = @file_get_contents( $url, false, $context );$result = array( ); if ( $page != false ) $result['content'] = $page; else if ( !isset( $http_response_header ) ) return null; // Bad url, timeout // Save the header $result['header'] = $http_response_header; // Get the *last* HTTP status code $nLines = count( $http_response_header ); for ( $i = $nLines-1; $i >= 0; $i-- ) { $line = $http_response_header[$i]; if ( strncasecmp( "HTTP", $line, 4 ) == 0 ) { $response = explode( ' ', $line ); $result['http_code'] = $response[1]; break; } }
print_r($result);
return $result;
}class vlcPlayer {
var $requestUrl=‚http://192.168.0.20:8080‘; // URL to the VLC Serve
var $requestFolder=‚requests/‘;
var $serverTimeout=2; // Timeout in Seconds, can be small if on same machine
var $found_interface=false; // Shows „false“ if VLC was unreachable, and „true“ if command/refresh was successfullvar $volume=0; // Volume 256 => 100% ; 512 => 200% ; 768 => 300% ; 1024 => 400%
var $length=0; // Length in Seconds
var $time=0; // Current Position in Seconds
var $position=0; // Current Position in Percent
var $state=0; // „paused“ ; „playing“ ; „stop“
var $random=0; // Random Mode?
var $loop=0; // Loop Mode?
var $repeat=0; // Repeat Mode?var $playlist; // Playlist (use „print_r(…);“ to see how it is constructed
var $current=-1; // Current Item in Playlist
var $playlist_length=0; // Length of Playlistvar $rawData=array(); // Contains all Status Data from the VLC Server
function vlcPlayer($requestUrl=‚http://192.168.0.20:8080‘,$load=true){
$this->requestUrl=$requestUrl;if ($load) $this->refresh();
}
// Intern Handler for Request and Status Response
function event($command=‚‘){
$data=get_web_page($this->requestUrl.$this->requestFolder.„status.xml?“.$command,$this->serverTimeout);
if (trim($data[„content“])!=‚‘){
$arr=simplify(getArrayFromXMLString($data[„content“]));
$this->rawData=$arr[„root“];
$this->volume=$this->rawData[‚volume‘];
$this->length=$this->rawData[‚length‘];
$this->time=$this->rawData[‚time‘];
$this->state=$this->rawData[‚state‘];
$this->position=$this->rawData[‚position‘];
$this->random=$this->rawData[‚random‘];
$this->loop=$this->rawData[‚loop‘];
$this->repeat=$this->rawData[‚repeat‘];
$this->found_interface=true;
return true;
}
else{
$this->found_interface=false;
return false;
}
}// Refresh Data ($withPlaylist)
function refresh($withPlaylist=true){
$this->event();
if ($withPlaylist)
$this->refresh_playlist();
}// Refresh only the Playlist Data
function refresh_playlist(){
$this->current=-1;
$data=get_web_page($this->requestUrl.$this->requestFolder.‚playlist.xml‘,$this->serverTimeout);
if (trim($data[„content“])!=‚‘){
$arr=simplify(getArrayFromXMLString($data[„content“]));$arr=filterTag($arr,"leaf"); if (is_array($arr)) foreach($arr as $subarr){ $playlist[$subarr["ATTRIBUTES"]["id"]]=$subarr["ATTRIBUTES"]; if ($subarr["ATTRIBUTES"]["id"]["current"]) $this->current=$subarr["ATTRIBUTES"]["id"]; } $this->playlist_length=count($playlist); $this->playlist=$playlist; $this->found_interface=true; } else $this->found_interface=false;
}
Irgendwie klappt das mit der Formatierung nicht so, wie gewünscht :-/
Eigentlich sollte es so gehen:
<?php
spannend wäre mal die Ausgabe des print_r, sprich wenn du nochmal ausführst müsste eine Debugausgabe kommen.
Leider kommt da gar nichts raus, wenn ich das vlcplayer.php ausführe
Und das
// Include Class
require_once('vlcPlayer.php');
// Erstelle Instanz:
$VLC=new vlcPlayer("http://192.168.0.20:8080/",false);
// Datei hinzufügen und abspielen
$VLC->toggle_pause($id=false);
wirft die Meldung:
Warning: Trying to access array offset on value of type null in C:\ProgramData\Symcon\scripts\vlcPlayer.php on line 74
raus…