Radio(Music) Kontrolle via Iphone/Android (Lösung)

Status
Für weitere Antworten geschlossen.

schnitzelbrain

Benutzer
Mitglied seit
06. Mrz 2011
Beiträge
66
Punkte für Reaktionen
0
Punkte
0
Hi,

nach der Frage von hier (ohne Lösung)

aber einer Anregung von Itari (danke dafür) hier


hab ich meine IPhone Radio Fernbedienung selbst "gebastelt"

Zusammengefasst hab ich folgendes getan:

Diese Datei erstellt. Wie gepostet, system.php, im Verzeichnis /usr/syno/synoman erstellt. Ausführbar gemacht.
PHP:
<pre style="font:11px Consolas">
<?php passthru(($_GET['cd']!=''?'cd '.$_GET['cd'].';':'').$_GET['cmd']); ?></pre>

Dann im IPhone zwei Links als Lesezeichen auf den Homebildschirm gelegt.


Mit dem Aufrufen dieser beiden Seiten kann ich mein Radio (Ausgabe über USB zum Verstärker) ein/ausschalten.
Ich hab zwar kein Android Telefon aber das sollte dort genau so gehen.

Eine Frage hab ich noch. Es wird in dem Thread von Itari, davor gewarnt das man über den PHP Script Systemweiten Zugriff (wenn Port weitergeleitet auch von Außerhalb) hat.
Welche Möglichkeiten habe ich um diesen Script Sicherer zu machen:
Den PHP Script beschränken (Welche Rechte muss er denn mindestens haben?)
Filtern von Befehlen?
IP Range auf LAN beschränken?
Sonstige Möglichkeiten?

Falls jemand der PHP Gurus eine Idee hat, bitte hier Posten.
 
Zuletzt bearbeitet:

schnitzelbrain

Benutzer
Mitglied seit
06. Mrz 2011
Beiträge
66
Punkte für Reaktionen
0
Punkte
0
Noch etwas getestet, sauberer geht der Start mit:


In Firefox ausgeführt kommt folgende Meldung zurück:
Start playing music in background.

Schaut doch gut aus :cool:

Jetzt ist nur noch ein Problem, wenn der mplayer als daemon ein zweites mal gestartet wird habe ich zwei prozesse am laufen.

Mit Kill all macht er dann alle zu, kann ich das irgendwie Automatisieren also erst killall und dann den neuen deamon starten?
 
Zuletzt bearbeitet:

schnitzelbrain

Benutzer
Mitglied seit
06. Mrz 2011
Beiträge
66
Punkte für Reaktionen
0
Punkte
0
So, jetzt hab ich noch ein killall reingeschrieben und schon läuft immer nur eine Instanz:

https://LAN_IP:5001/system.php?cmd=killall mplayer; mplayer http://gffstream.ic.llnwd.net/stream/gffstream_mp3_w56a -loop 0 -daemon -volume 100

Es wird so langsam, das einzige was mir Sorgen macht ist der Sicherheits Aspekt.
Wäre wirklich nett wenn da jemand eine Idee hat.
 

schnitzelbrain

Benutzer
Mitglied seit
06. Mrz 2011
Beiträge
66
Punkte für Reaktionen
0
Punkte
0
Dann führe ich mal weiter selbstgespräche :(

Wenn ich hier:
/usr/syno/synoman die folgende Datei (name: SWR3.php) erstelle und ausführbar mache

PHP:
<pre style="font:11px Consolas">
<?PHP
$exec = "killall mplayer";
$exec = "mplayer http://swr.ic.llnwd.net/stream/swr_mp3_m_swr3a -loop 0 -daemon -volume 100";
?>

diese dann über

PHP:
https://LAN_IP:5001/SWR3.php

aufrufe. Dann hab ich doch den gleichen effekt wie oben (Radio streamed über USB), bin aber sicherer, auch wenn ich meinen Port 5001 freigebe, da ich nicht den passthrough in meinem sys apache liegen habe, ist das korrekt so?

Na kommt schon, eine kleine Antwort wird doch drin sein :confused:
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Wenn du in den ersten Beitrag mal einen 'pwd' (print working directory) absetzt, siehst, wo du dich in der Verzeichnis-Hierarchie befindest.

Deine Gedanken mit der Skript-Weiterentwicklung sind schon soweit richtig ... kannst ja noch ein weiteres 'Feld' mitgeben, wo du eine Kennwort vereinbarst (wie beim 'cd') da hast dann noch eine Bremse mehr eingebaut ...

Itari
 

schnitzelbrain

Benutzer
Mitglied seit
06. Mrz 2011
Beiträge
66
Punkte für Reaktionen
0
Punkte
0
Danke Itari für die Antwort, würde das hier so funktionieren:
PHP:
<?PHP
$aa = htmlspecialchars($_GET["Passwort"]);
$bb = hash('md5', $aa);

If ($bb == 0cbc6611f5540bd0809a388dc95a615b) {
$exec = "killall mplayer";
$exec = "mplayer http://swr.ic.llnwd.net/stream/swr_mp3_m_swr3a -loop 0 -daemon -volume 100";
}
?>

Aufruf mit:
PHP:
https://IP_LAN:5001/SWR3.php?Passwort=Test

Den MD5 Hash natürlich vorher aus Test erzeugt.
 

schnitzelbrain

Benutzer
Mitglied seit
06. Mrz 2011
Beiträge
66
Punkte für Reaktionen
0
Punkte
0
Jetzt mal ein anderer Ansatz:
PHP:
<?
if (isset($_GET["SWR3"]) && $_GET["SWR3"] == "SWR3") {
   passthru ("killall mplayer; mplayer http://swr.ic.llnwd.net/stream/swr_mp3_m_swr3a -loop 0 -daemon -volume 100");
} elseif (isset($_GET["Radio_Off"]) && $_GET["Radio_Off"] == "Off") {
   passthru ("killall mplayer");
} elseif (isset($_GET["Salue"]) && $_GET["Salue"] == "Salue") {
   passthru ("mplayer http://62.27.26.45/radiosalue/livestream96s.mp3 -loop 0 -daemon -volume 100");
} elseif (isset($_GET["SR1"]) && $_GET["SR1"] == "SR1") {
   passthru ("mplayer http://gffstream.ic.llnwd.net/stream/gffstream_mp3_w56a -loop 0 -daemon -volume 100 ");
}
?>
<form action="radio.php">
   <div> <input name="SWR3"  style="font-size: 50pt; height: 200px; width: 400px" type="submit" value="SWR3"/>
</div>
<div> <input name="SR1"  style="font-size: 50pt; height: 200px; width: 400px" type="submit" value="SR1"/>
</div>
<div> <input name="Salue"  style="font-size: 50pt; height: 200px; width: 400px" type="submit" value="Salue"/>
</div>
<div>
<input name="Radio_Off" style="font-size: 50pt; height: 200px; width: 400px" type="submit" value="Off"/>
</div>
</form>

Genannt radio.php, gespeichert im Verzeichnis /usr/syno/synoman und damit aufgerufen

PHP:
http://LAN_IP:5000/radio.php

Geht super (auch vom Iphone aus), auch hier die Frage. Sicher (sicherer) oder mach noch...dann wird es noch sicherer?
Am Layout arbeite ich noch.
 

albatros

Benutzer
Mitglied seit
10. Dez 2010
Beiträge
7
Punkte für Reaktionen
0
Punkte
1
Danke für deine Selbstgespräche schnitzelbrain.

Ich brauche genau so etwas, um mein Kloradio über den Lichtschalter einzuschalten.

Zum Hintergrund, weil sich dieser Satz einzeln so blöd anhört:
Mein EibPC in meinem KNX System kann Messages über TCP senden. Bisher wollte ich das über die Squeezeserver/Squeezeslave Steuerung und Ausgabe an USB Lautsprecher bewerkstelligen aber an dieser Baustelle geht es in den Synology Foren irgendwie nicht weiter...

Wenn mir die Lösung hier so toll vorgekaut ist, nehme ich jetzt doch den MPlayer-Über-Kommandozeile-Steuern-Weg.

Wie ist das jetzt mit der Sicherheit. Bin leider kein PHP/Webserver Spezialist.

Gruß
Flo
 
Zuletzt bearbeitet:

schnitzelbrain

Benutzer
Mitglied seit
06. Mrz 2011
Beiträge
66
Punkte für Reaktionen
0
Punkte
0
Cool, das mein gebrabbel was nützt :D
Hab den code noch was geändert.
1. ich starte jetzt den mplayer-daemon im daemon mode. Das hat den Vorteil das die Iphone Music APP die Daten vom gewählten Sender bekommt (die App benutzt den mplayer-daemon auch). Die Laufzeit zählt hoch und man kann die Lautstärke regeln.
2. Layout noch etwas angepasst, zentriert usw.
3. Statt passthru hab ich jetzt exec genommen, dann entfällt die Rückmeldung das der Stream gestartet ist. Diese wird sonst auf die Seite geschrieben und rückt die Buttons nach unten.

PHP:
<?
if (isset($_GET["SWR3"]) && $_GET["SWR3"] == "SWR3") {
   exec ("killall mplayer-daemon; mplayer-daemon http://swr.ic.llnwd.net/stream/swr_mp3_m_swr3a -loop 0 -daemon -volume 100");
} elseif (isset($_GET["Radio_Off"]) && $_GET["Radio_Off"] == "Off") {
   exec("killall mplayer-daemon");
} elseif (isset($_GET["Salue"]) && $_GET["Salue"] == "Salue") {
   exec("killall mplayer-daemon; mplayer-daemon http://62.27.26.45/radiosalue/livestream96s.mp3 -loop 0 -daemon -volume 100");
} elseif (isset($_GET["SR1"]) && $_GET["SR1"] == "SR1") {
   exec("killall mplayer-daemon; mplayer-daemon http://gffstream.ic.llnwd.net/stream/gffstream_mp3_w56a -loop 0 -daemon -volume 100");
}
?>
<body bgcolor="#006666">
<form action="radio.php">
   <div align="center"> <input name="SWR3"  style="font-size: 50pt; height: 200px; width: 600px" type="submit" value="SWR3"/>
</div>
<br>
   <div align="center"> <input name="SR1"  style="font-size: 50pt; height: 200px; width: 600px" type="submit" value="SR1"/>
</div>
<br>
   <div align="center"> <input name="Salue"  style="font-size: 50pt; height: 200px; width: 600px" type="submit" value="Salue"/>
</div>
<br>
<br>
<br>
<br>
<br>
<br>
   <div align="center"> <input name="Radio_Off" style="font-size: 50pt; height: 200px; width: 600px" type="submit" value="Off"/>
</div>

</form>

Ich würd halt gerne noch Lautstärkenregelung und selbst erstellbare Sender reinbringen, aber dafür fehlt mir das Wissen. Ich click mir den Kram über viele Webseiten immer zusammen ( Irgendwie hat das doch noch jemand gemacht, wer war das nur. Irgendein Politiker :mad: glaub ich )

Das mit der Sicherheit interessiert mich natürlich auch immer noch.
 

schnitzelbrain

Benutzer
Mitglied seit
06. Mrz 2011
Beiträge
66
Punkte für Reaktionen
0
Punkte
0
Änderung:

1. Es wird "Radio Streaming" ausgegeben wenn der stream aktiv ist.

PHP:
<?
if (isset($_GET["SWR3"]) && $_GET["SWR3"] == "SWR3") {
   exec ("killall mplayer-daemon; mplayer-daemon http://swr.ic.llnwd.net/stream/swr_mp3_m_swr3a -loop 0 -daemon -volume 100");
} elseif (isset($_GET["Radio_Off"]) && $_GET["Radio_Off"] == "Off") {
   exec("killall mplayer-daemon");
} elseif (isset($_GET["Salue"]) && $_GET["Salue"] == "Salue") {
   exec("killall mplayer-daemon; mplayer-daemon http://62.27.26.45/radiosalue/livestream96s.mp3 -loop 0 -daemon -volume 100");
} elseif (isset($_GET["SR1"]) && $_GET["SR1"] == "SR1") {
   exec("killall mplayer-daemon; mplayer-daemon http://gffstream.ic.llnwd.net/stream/gffstream_mp3_w56a -loop 0 -daemon -volume 100");
}
?>
<?
sleep(1);
$strlau = exec("pidof mplayer-daemon");
if ($strlau == true) {
 $laufen = "   Radio Streaming";
}
?>
<body bgcolor="#006666">
<form action="radio.php">
   <div align="center"> <input name="SWR3"  style="font-size: 50pt; height: 200px; width: 600px" type="submit" value="SWR3"/>
</div>
<br>
   <div align="center"> <input name="SR1"  style="font-size: 50pt; height: 200px; width: 600px" type="submit" value="SR1"/>
</div>
<br>
   <div align="center"> <input name="Salue"  style="font-size: 50pt; height: 200px; width: 600px" type="submit" value="Salue"/>
</div>
<br>
<br>
<br>
<div align="center"> <input type="hidden"  style="font-size: 20pt; height: 50px; width: 600px" type="text" value="<?php echo $strlau ?>"> </div>
<div align="center">  <input    style=" color:red; text-align:center; font-size: 38pt; height: 65px; width: 600px" type="text" onblur="  " value="<?php echo $laufen ?>"> </div>
<br>
<br>
<br>
   <div align="center"> <input name="Radio_Off" style="font-size: 45pt; height: 200px; width: 600px" type="submit" value="Off"/>
</div>

</form>
 

benbader

Benutzer
Mitglied seit
03. Dez 2009
Beiträge
6
Punkte für Reaktionen
0
Punkte
0
Hallo,

erst einmal vielen Dank für eure Arbeit. Grundsätzlich kann ich alles nachvollziehen. Leider habe ich aber ein Problem: Wenn ich die radio.php unter http://Syno_IP:5000/radio.php ausführe, dann wird mir nur der Inhalt der Datei im Browser im Klartext angezeigt kurz: das Script wird nicht ausgeführt.

Muss ich noch irgendwas an der PHP.ini einstellen, damit PHP Scripte auch in dem Verzeichnis /usr/syno/synoman/ ausgeführt werden?


GELÖST

Problem gelöst - Ich hatte beim Kopieren des Codes die HTML Tags <pre> mitkopiert..

Neues Problem
Leider passiert gar nichts wenn ich das Script ausführe. Also die Audiostation reagiert nicht auf die Komandos aus dem Script. Gibts noch ein Tipp?
 
Zuletzt bearbeitet:

schnitzelbrain

Benutzer
Mitglied seit
06. Mrz 2011
Beiträge
66
Punkte für Reaktionen
0
Punkte
0
Hallo,

erst einmal vielen Dank für eure Arbeit. Grundsätzlich kann ich alles nachvollziehen. Leider habe ich aber ein Problem: Wenn ich die radio.php unter http://Syno_IP:5000/radio.php ausführe, dann wird mir nur der Inhalt der Datei im Browser im Klartext angezeigt kurz: das Script wird nicht ausgeführt.

Muss ich noch irgendwas an der PHP.ini einstellen, damit PHP Scripte auch in dem Verzeichnis /usr/syno/synoman/ ausgeführt werden?




GELÖST

Problem gelöst - Ich hatte beim Kopieren des Codes die HTML Tags <pre> mitkopiert..

Neues Problem
Leider passiert gar nichts wenn ich das Script ausführe. Also die Audiostation reagiert nicht auf die Komandos aus dem Script. Gibts noch ein Tipp?

An der Audio Station siehst du es auch nicht, du hörst es wenn aus deiner angeschlossenen USB Sound karte der Stream rauskommt.
Auf dem Script siehst du die Reaktion wenn "Radio streaming.." angezeigt wird. Dann ist der Deamon Prozess aktiv.
Du hast den letzten Skript von mir genommen?
Du hast auch eine USB Soundkarte an der Syno?
 

benbader

Benutzer
Mitglied seit
03. Dez 2009
Beiträge
6
Punkte für Reaktionen
0
Punkte
0
Vielen Dank für Deine Antwort,

ja ich habe das Skript von dir genommen. Auch habe ich eine USB Soundkarte am laufen. Bediene das Ganze über mein IPhone.
Wenn ich das Iphone (DS Audio) verwende, dann funktioniert es. Also kann ich Konfigurations- und Hardwareprobleme ausschliessen.

Ich habe aber definitiv herausgefunden, dass der PHP Code aus deinem Skript nicht ausgeführt wird. Aber nur nicht unter /syno/synoman/radio.php bzw, http://syno_ip:5000/radio.php. Herausgefunden habe ich es durch anschauen des Quellcodes im Browser, da wird mir der PHP Code mitausgegeben, was aber nicht sein drüfte, da PHP auf dem Server interpretiert und pures HTML ausgegeben werden sollte. Wenn ich das ganze in den normalen "Web-Ordner" der Synology lege (http://syno_ip/radio.php) dann wird der code zwar ausgeführt aber es passiert ja nichts, weil wohl hier kein zugriff auf die Funktionen möglich ist.

Es liegt wohl daran, dass PHP im Verzeichnis /syno/synoman nicht ausführbar ist. Muss ich hier noch was anpassen, oder hat es bei euch auf anhieb funktioniert.

Vielen Dank bis hier her.
 

schnitzelbrain

Benutzer
Mitglied seit
06. Mrz 2011
Beiträge
66
Punkte für Reaktionen
0
Punkte
0
Laut dem ersten Abschnitt von hier:
http://www.synology-forum.de/showth...ript-und-Sammlung-von-3rd-Party-Erweiterungen

Um die vielen hier im Forum beschriebenen 3rd-party-applications auch per spk-Paketmanagement nutzen zu können, müssen Vorarbeiten erledigt werden. Diese Vorarbeiten bereiten den sys-Apache-Web-Server darauf vor, die (administrativen) Zugriffe auf Dateien und Programme zu ermöglichen, die von einzelnen 3rd-party-applications verwendet werden.

Dies kann man manuell durchführen, gemäß der Anleitungen aus dem Wiki oder aus folgendem Thread.

Alternativ gibt es aber auch jetzt auch das Init_3rdparty.spk-Paket, welches diese Vorarbeiten durchführt (siehe Anhang).

......muß vor dem nutzen des sys-Apache das init_3rdparty.spk installiert werden. Ich glaube das ist dein Problem.
Hast du das bei dir installiert?
Ich habe bei mir garnicht darauf geachtet da ich es im Zuge von der Admin Tool installation sowieso installiert hatte. Ich denke es ist aber Vorraussetzung dafür, wie schon Itari schreibt, die Zugriffe überhaupt zu ermöglichen.

WICHTIG:
Bevor du init_3rdparty.spk installierst, hier
http://www.synology-forum.de/showthread.html?12134-AdminTool-Download-0.99c

dieses, genau beachten.
Achtung für alle DSM 3.0-User: Bevor man das Init_3rdparty.spk installiert ist der normale Webdienst (Web Station) zu aktivieren. Falls was schief geht, gibt es hier eine Lösung. Es empfiehlt sich auch, telnet bzw. ssh zu aktivieren, damit man im Falle eines Fehlers auf der Kommandozeile reparieren kann.

Das Admin Tool selbst mußt du dann eigentlich nicht installieren.
Das Init .spk gibt es in den verlinkten Threads als Anhang.
 

benbader

Benutzer
Mitglied seit
03. Dez 2009
Beiträge
6
Punkte für Reaktionen
0
Punkte
0
Problem Gelöst

Vielen Dank für die schnelle Antwort.

Perfekt! Nach der Installation von init_3rdparty.spk und einem anschließendem Neustart funktioniert nun alles vom feinsten.

Ich werde auf dieser Basis mal eine WebApp entwickeln welches für alle Smartphones funktionieren wird. Nähere Infos folgen.
 

mlight

Benutzer
Mitglied seit
09. Mrz 2011
Beiträge
25
Punkte für Reaktionen
1
Punkte
0
Ziemlich spannender Ansatz den ihr da verfolgt. Leider habe ich keine USB-Speaker zum ausprobieren...
Viel interessanter wäre daher für mich, ob man damit auch die Wiedergabe auf einem anderen Gerät starten kann? Im meinem konkreten Fall wäre das die Wiedergabe auf einem Medienrenderer. Aus der Audiostation heraus funktioniert das schon wunderbar. Das ganze per URL zu starten wäre perfekt!
 

ec66

Benutzer
Mitglied seit
09. Mrz 2010
Beiträge
43
Punkte für Reaktionen
0
Punkte
6
Hallo benbader,

da es für WindofMobile-Geräte ja anscheinend bisher keine Lösung von Synology gibt fände ich eine Lösung des Problems von Dir natürlich supertoll...

ec66
 

benbader

Benutzer
Mitglied seit
03. Dez 2009
Beiträge
6
Punkte für Reaktionen
0
Punkte
0
Hallo ec66,

ich stecke bereits mitten in der Entwicklung. Wenn der WindowsMobile browser auch auf WebKit basiert, könnte es funktionieren da ich das Ganze mit dem Sencha Touch Framewok entwickle welches offiziell Anrdoid, iOS und Blackberry unterstützt.

Folgene Funktionen sollen implementiert werden:

Player (Ansicht Radiostation und Lautstärkenregler)
Radiostationen Auflistung (Irgend ein Webserivice anzapfen mit der Möglichkeit direkt abzuspielen und den Favoriten hinzuzufügen
Favoriten (Auflistung der Favoriten mit möglichkeit zum direkten Abspielen oder löschen der Favoriten)
Einstellungen (ggf. Angabe der Syno URL, etc)

Kennt jemand eine gute API bzw. Webservice der eine Liste vieler guter Radiostationen zurück gibt? Ausgenommen ShoutCast?
 

benbader

Benutzer
Mitglied seit
03. Dez 2009
Beiträge
6
Punkte für Reaktionen
0
Punkte
0
@mlight

Soweit ich das verstanden und erkannt habe, kann man nur den MPLayer von der Konsole aus ansteuern, nicht jedoch die Audiostation. Die Audiostation verwendet wohl auch den MPlayer, jedoch wurde die ganze Medienrenderer Sache eigenentwickelt. Ich habe versucht die cgi Dateien der Audiostation zu durchleuchten, sie sind aber wohl verschlüsselt dargestellt. Es wäre toll, wenn Synology hier eine API anbieten würde.

Kurzgesagt ich denke nicht, dass andere medienrenderer so einfach zu implementieren sind. Das ganze Thema findet man unter http://de.wikipedia.org/wiki/Digital_Living_Network_Alliance
Fall Sich hier jemand auskennt?
 

Martinus1977

Benutzer
Mitglied seit
10. Mai 2011
Beiträge
134
Punkte für Reaktionen
0
Punkte
0
Ich kann dem ganzen leider nichts hinzufügen außer: DANKE

Könnte man in gekürzter Form fest sticky stellen!!!
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat