Modul StreamRadio Einrichtungshilfe: Unterschied zwischen den Versionen
Fiedel (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Fiedel (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 12: | Zeile 12: | ||
== Anwendungsbeispiele == | == Anwendungsbeispiele == | ||
Kommandos innerhalb FHEM: | |||
<nowiki>set <name> PLAY <StreamURL/Stationname aus Playlist> | |||
set <name> STOP | |||
set <name> VOLUME <Lautstärke in %></nowiki> | |||
== Voraussetzungen Betriebssystem == | == Voraussetzungen Betriebssystem == | ||
Zeile 40: | Zeile 43: | ||
'''Hinweis:''' Mit diesem Eintrag in die sudo- Konfigdatei werden dem Benutzer fhem weitreichende Befugnisse eingeräumt. Diese können später sinnvoll eingeschränkt werden, indem man den Vollzugriff nur für bestimmte Befehle/Anwendungen freigibt. | '''Hinweis:''' Mit diesem Eintrag in die sudo- Konfigdatei werden dem Benutzer fhem weitreichende Befugnisse eingeräumt. Diese können später sinnvoll eingeschränkt werden, indem man den Vollzugriff nur für bestimmte Befehle/Anwendungen freigibt. | ||
== Testen des mplayer und auslesen der Mixer- Steuerbefehle == | |||
== Testen des mplayer und auslesen der Steuerbefehle == | |||
Absspielen eines Radiostreams auf der Kommandozeile um Funktion bis hier hin zu testen: | Absspielen eines Radiostreams auf der Kommandozeile um Funktion bis hier hin zu testen: | ||
<nowiki>user@debian:~# sudo mplayer -ao alsa http://fritz.de/livemp3</nowiki> | <nowiki>user@debian:~# sudo mplayer -ao alsa http://fritz.de/livemp3</nowiki> | ||
Die Lautstärke kann während der | Die Lautstärke kann während der Wiedergabe mit "/" und "*" geändert werden. | ||
Für die Steuerung des Mixers von FHEM aus benötigen wir dessen Steuercodes.<br> | Für die Steuerung des Mixers von FHEM aus benötigen wir dessen Steuercodes.<br> | ||
Zeile 63: | Zeile 65: | ||
Zuerst muss der Telnet- Port geöffnet und frei von Passwortschutz sein (CFG): | Zuerst muss der Telnet- Port geöffnet und frei von Passwortschutz sein (CFG): | ||
<nowiki>define telnetPort telnet 7072</nowiki> | <nowiki>define telnetPort telnet 7072</nowiki> | ||
Dann muss in einem sinnvoll gewählten Verzeichnis die Datei "WebStreams.txt" erstellt und gefüllt werden: | Dann muss in einem sinnvoll gewählten Verzeichnis die Datei "WebStreams.txt" erstellt und gefüllt werden.<br> | ||
<nowiki>user@debian: | Darin wird die Liste der Sender gespeichert in der Form "Sendername|URL": | ||
<nowiki>user@debian:/opt/fhem# sudo nano WebStreams.txt</nowiki> | |||
Mit dem Inhalt: | Mit dem Inhalt: | ||
<nowiki>Eins Live|http://www.wdr.de/wdrlive/media/einslive.m3u | <nowiki>Eins Live|http://www.wdr.de/wdrlive/media/einslive.m3u | ||
Zeile 70: | Zeile 73: | ||
FFH Top 40|http://streams.ffh.de/ffhchannels/mp3/hqtop40.m3u | FFH Top 40|http://streams.ffh.de/ffhchannels/mp3/hqtop40.m3u | ||
FFH 80er|http://streams.ffh.de/ffhchannels/mp3/hq80er.m3u | FFH 80er|http://streams.ffh.de/ffhchannels/mp3/hq80er.m3u | ||
Radio Fritz|http://fritz.de/livemp3 | Radio Fritz|http://fritz.de/livemp3</nowiki> | ||
</nowiki> | |||
Und der Berechtigung: | Und der Berechtigung: | ||
<nowiki>user@debian: | <nowiki>user@debian:/opt/fhem# sudo chown fhem:root WebStreams.txt | ||
user@debian: | user@debian:/opt/fhem# sudo chmod 660 WebStreams.txt</nowiki> | ||
Das Radio selbst wird beispielsweise so definiert (CFG): | Das Radio selbst wird beispielsweise so definiert (CFG): | ||
Zeile 88: | Zeile 90: | ||
Dazu bitte die Ausgabe von "sudo amixer controls" wie oben gezeigt heranziehen. | Dazu bitte die Ausgabe von "sudo amixer controls" wie oben gezeigt heranziehen. | ||
== | == Zusatzufunktion Volume- Slider und Bedienung per FS20- Wandtaster == | ||
Einfach in die fhem.cfg einfügen und speichern: | Einfach in die fhem.cfg einfügen und speichern: | ||
Zeile 142: | Zeile 144: | ||
== | == Zusatzufunktion Radiowiedergabe bei Text to Speech- Meldungen unterbrechen == | ||
Funktion fährt für die Ansage die Lautstärke hoch und merkt sich den Sender.<br> | Funktion fährt für die Ansage die Lautstärke hoch und merkt sich den Sender.<br> | ||
Einfach in die fhem.cfg einfügen und speichern: | Einfach in die fhem.cfg einfügen und speichern: |
Version vom 29. Dezember 2014, 14:19 Uhr
(in Bearbeitung!)Modul StreamRadio zum hören von Webradiostreams über FHEM und Linux
Diese Anleitung basiert auf diesem Thread: [1]
Download StreamRadio- Modul mit Radiotext (Fehlerbehaftet aber funktionsfähig): [2]
Download StreamRadio- Modul ohne Radiotext: [3]
Aufgabenstellung
Mit dieser Anleitung soll der unübersichtliche Inhalt des o.g. Ursprungsthreads zusammengefasst werden.
Was kann das Modul?
Es handelt sich um ein Device, welches das Abspielen von WebStreams auf dem Raspberry oder anderen vollwertigen Linux- Plattformen ermöglicht. Das Modul kann beliebige WebStreams per MPlayer abspielen und auch deren Metadaten, z.B. aktuell laufender Titel anzeigen. Das ganze wird direkt in der Raumübersicht angezeigt.
Anwendungsbeispiele
Kommandos innerhalb FHEM:
set <name> PLAY <StreamURL/Stationname aus Playlist> set <name> STOP set <name> VOLUME <Lautstärke in %>
Voraussetzungen Betriebssystem
Es muss Internetzugang eingerichtet sein. Installation des mplayer, falls nicht bereits vorhanden:
user@debian:~# sudo apt-get install mplayer user@debian:~# sudo apt-get install alsa-utils
Berechtigungen für Benutzer fhem unter Linux vorbereiten.
Diese Schritte sind generell (nicht nur für das Radio) notwendig,
wenn FHEM auf Linux- Shellbefehle zugreifen können soll:
Benutzer fhem zu den Gruppen "dialout", "audio", "mail" und "sudoers" hinzufügen:
user@debian:~# sudo addgroup fhem dialout user@debian:~# sudo addgroup fhem mail user@debian:~# sudo addgroup fhem audio user@debian:~# sudo addgroup fhem sudo
Überprüfen kann man die Zuordnung mit:
user@debian:~# sudo groups fhem fhem : dialout mail sudo audio
Bearbeiten der sudo- Konfiguration (damit fhem bei sudo- Zugriffen kein Passwort liefern muss):
user@debian:~# sudo visudo
Im nun geöffneten Editorfenster unter den ggf. bereits vorhandenen Einträgen folgende Zeile einfügen:
fhem ALL=NOPASSWD: ALL
Datei jetzt speichern und den Rechner neu starten.
Hinweis: Mit diesem Eintrag in die sudo- Konfigdatei werden dem Benutzer fhem weitreichende Befugnisse eingeräumt. Diese können später sinnvoll eingeschränkt werden, indem man den Vollzugriff nur für bestimmte Befehle/Anwendungen freigibt.
Testen des mplayer und auslesen der Mixer- Steuerbefehle
Absspielen eines Radiostreams auf der Kommandozeile um Funktion bis hier hin zu testen:
user@debian:~# sudo mplayer -ao alsa http://fritz.de/livemp3
Die Lautstärke kann während der Wiedergabe mit "/" und "*" geändert werden.
Für die Steuerung des Mixers von FHEM aus benötigen wir dessen Steuercodes.
Diese lesen wir wie folgt aus:
user@debian:~# sudo amixer controls numid=1,iface=MIXER,name='PCM Playback Switch' numid=2,iface=MIXER,name='PCM Playback Volume' numid=3,iface=MIXER,name='Mic Capture Switch' numid=4,iface=MIXER,name='Mic Capture Volume' numid=5,iface=MIXER,name='Auto Gain Control'
Die Anzahl der Steuermöglichkeiten und die zugehörige "numid" variiert von Version zu Version. Für die Einrichtung des Attributs für die Lautstärke des StreamRadio benötigen wir hier die numid des controls "PCM Playback Volume"(2).
Hinweis: Sollte durch eventuell zuvor erfolgte Versuche das StreamRadio durch eine falsche numid die Wiedergabe stummgeschaltet haben, kann man sie mit folgendem Befehl einschalten (numid muss auch hier zu den controls des eigenen amixer passen!):
user@debian:~# sudo amixer cset numid=1 -- 1
Es wird der "PCM Playback Switch" von 0 auf 1 gesetzt.
Definition unter FHEM
Zuerst muss der Telnet- Port geöffnet und frei von Passwortschutz sein (CFG):
define telnetPort telnet 7072
Dann muss in einem sinnvoll gewählten Verzeichnis die Datei "WebStreams.txt" erstellt und gefüllt werden.
Darin wird die Liste der Sender gespeichert in der Form "Sendername|URL":
user@debian:/opt/fhem# sudo nano WebStreams.txt
Mit dem Inhalt:
Eins Live|http://www.wdr.de/wdrlive/media/einslive.m3u Hitradio FFH|http://streams.ffh.de/radioffh/mp3/hqlivestream.m3u FFH Top 40|http://streams.ffh.de/ffhchannels/mp3/hqtop40.m3u FFH 80er|http://streams.ffh.de/ffhchannels/mp3/hq80er.m3u Radio Fritz|http://fritz.de/livemp3
Und der Berechtigung:
user@debian:/opt/fhem# sudo chown fhem:root WebStreams.txt user@debian:/opt/fhem# sudo chmod 660 WebStreams.txt
Das Radio selbst wird beispielsweise so definiert (CFG):
# Stream Radio: define SRadio StreamRadio /opt/fhem/WebStreams.txt attr SRadio telnetport 7072 # attr SRadio volume_command amixer cset numid=2 -- %s%% attr SRadio room Radio attr SRadio group Radio
Hinweis: Das attr. "volume_command" steht standartmäßig (undefiniert) auf "amixer cset numid=2 -- %s%%".
Sollte sich die Lautstärke nicht verstellen lassen, kann die numid entsprechend angepasst werden.
Dazu bitte die Ausgabe von "sudo amixer controls" wie oben gezeigt heranziehen.
Zusatzufunktion Volume- Slider und Bedienung per FS20- Wandtaster
Einfach in die fhem.cfg einfügen und speichern:
# Dummy für Volume- Slider define Dum_Volume_D dummy attr Dum_Volume_D alias Volume attr Dum_Volume_D setList state:slider,0,1,100 attr Dum_Volume_D webCmd state attr Dum_Volume_D room Radio attr Dum_Volume_D group Volume # Notify für Volume- Slider define Func_Volume_N notify Dum_Volume_D {\ my $vol = Value("Dum_Volume_D");;\ fhem "set SRadio VOLUME $vol";;\ } attr Func_Volume_N room Radio # FS20 Tastenpaar Radio Play/Stop und Vol+/Vol- define Radio FS20 1111 11 attr Radio dummy 1 attr Radio group Geräte_Taster attr Radio icon rc_RADIO attr Radio room Radio # Radio ein-/ ausschalten und Lautstärke einstellen: define Func_Radio_Play_N notify Radio:* { \ \ my $R_State = (ReadingsVal("Radio", "state", "off"));;\ my $Vol_plus = Value("Dum_Volume_D") + 10;;\ my $Vol_minus = Value("Dum_Volume_D") - 10;;\ \ if ($R_State eq "on") { \ fhem("set SRadio PLAY Eins Live");;\ } \ if ($R_State eq "off") { \ fhem("set SRadio STOP");;\ } \ if ($R_State eq "dimup" and $Vol_plus >= 100) { \ fhem("set Dum_Volume_D 100");;\ } \ if ($R_State eq "dimdown" and $Vol_minus <= 0) { \ fhem("set Dum_Volume_D 0");;\ } \ if ($R_State eq "dimup" and $Vol_plus <= 100) { \ fhem("set Dum_Volume_D $Vol_plus");;\ } \ if ($R_State eq "dimdown" and $Vol_minus >= 0) { \ fhem("set Dum_Volume_D $Vol_minus");;\ } \ } attr Func_Radio_Play_N room Radio
Zusatzufunktion Radiowiedergabe bei Text to Speech- Meldungen unterbrechen
Funktion fährt für die Ansage die Lautstärke hoch und merkt sich den Sender.
Einfach in die fhem.cfg einfügen und speichern:
</nowiki># Bei TTS- Meldung Radio unterbrechen, Lautstärke hochfahren,
- nach Ansage Radio wieder einschalten, Lautstärke auf alten Wert fahren.
define Func_VolAut_N notify myTTS { \ \
my $Radio = (Value("SRadio"));;\ my $Station = ReadingsVal("SRadio", "StreamURL", "");;\ my $Old_Vol = (OldValue("Dum_Volume_D"));;\
\
if ($Radio eq "playing") { \ fhem("set SRadio STOP ;; set Dum_Volume_D 99");;\ fhem("define Radio_Comeback_A at +00:00:10 set SRadio PLAY $Station;;;; set Dum_Volume_D $Old_Vol");;\ } \ if ($Radio eq "stopped") { \ fhem("set Dum_Volume_D 99");;\ fhem("define Vol_Res_A at +00:00:10 set Dum_Volume_D $Old_Vol");;\ } \
} attr Func_VolAut_N room Radio<nowiki>
Verwendung
Beschreibung der Funktion
Temporär: Bearbeitungsquellen aus Thread
- Das angehängte Script "74_StreamRadio" ins Modul Verzeichnis kopieren, also wahrscheinlich nach /opt/fhem/FHEM
- irgendwo eine Datei mit den WebStreams anlegen. Diese Datei sollte pro Zeile immer den Namen des Streams gefolgt von "|" und dann die URL enthalten.
also z.B.
Code: [Auswählen]
testradio|http://bla.com/34.m3u
. Eine Sample Datei ist ebenfalls dabei
Define Code: [Auswählen]
define streamradio StreamRadio /opt/fhem/log/WebStreams.txt
unter der Vorraussetzung, dass ihr die WebStreams.txt dort abgelegt habt.
Attribute volume_command <= das shell kommando, um die Lautstärke einzustellen. Es kann die Platzhalter von sprintf verwendet werden. Für den raspi z.B. "amixer cset numid=1 -- %s%%". Dies ist der Default, nach einem neuen define telnetport <= Der lokale telnetport für FHEM. Achtung: Es darf keine Authentifizierung eingerichtet sein aodevice <= -ao Parameter für mplayer, um das output device anzugeben
Commands set <name> PLAY <StreamURL/Stationname aus Playlist> set <name> STOP set <name> VOLUME <Lautstärke in %>
Aktuelle Version
(Update erfolgt immer hier im ersten Posting)
V0.5
- Reading für "state" funktioniert wieder
- Die Playlist wird nach Namen sortiert angezeigt
- set PLAY kann jetzt auch der Stationname anstelle der URL angegeben werden
- Die Lautstärke veränderung in % sollte jetzt proportional erfolgen
- V.04 Neues Attribut "aodev", um das aodevice für mplayer festzulegen - V0.3 Neuer Befehl "VOLUME", Mehr Metadaten, Das MPlayer log wird nicht mehr geparsed sondern direkt STDOUT. Das dürfte deutlich performanter sein - V0.2 Umbau auf Benutzung von BlockingCall - V0.1 (initiale Version
Das war es auch schon. Als Attribut kann man noch das Logfile für den MPlayer festlegen, welches für die Ermittlung der Metadaten verwendet wird.
Noch offene Punkte - Da der MPlayer seinerseits auch noch weitere MPlayer Prozesse forked, hat ein Kill direkt auf die PID nicht funktioniert. Derzeit klappt es nur sauber mit killall - Telnetport der von Blocking.pm erstellt wird ermitteln. Das hat bisher leider noch nicht geklappt.