[Neues Modul] StreamRadio

Begonnen von gemx, 08 Januar 2014, 19:31:54

Vorheriges Thema - Nächstes Thema

svenr

Hallo,

muss es in der Funktion StreamRadio_Play nicht heißen:
open my $proc, '-|', "mplayer $aoString -nolirc $PLString $StreamURL";

Die Variable $aoString sollte nicht zwischen $PLString und $StreamURL stehen.
Bei mir ging es sonst mit einem alsa bluetooth device nicht.

Viele Grüße
Sven

fiedel

#61
Ich schon wieder  ;)

Hier im Thread gab es die Diskussion, warum wir nicht "mpg321" nehmen, der mplayer ist ja so ressourcenhungrig...

Ich benutze seit langem "madplay", welches auch mit der MAD- Basis läuft, genau wie "mpg321". Und nun seht euch mal die Screenshots an! Alles gestreamtes Radio mit den 3 Playern. Ist da an meinem System was faul, oder sollten wir doch lieber bei mplayer bleiben???
Madplay braucht bei mir zwar nur 3% CPU und ist damit theoretisch absolute Spitze, aber dafür spuckt es vermutlich keine Infos aus, die sich im WebIF anzeigen lassen.

Gruß

Frank
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

fiedel

#62
Ha, jetzt hab ich den Thread für mich...  ;D ;)

Hier mal der angesprochene Slider. Ich habe ihn einfach per Dummy extern angelegt:

Edit1: Erweiterung Slider und per FS20- Tastenpaar Radio Play/Stop und Vol+/Vol- (mit der Dim- Funktion).
          Die Funktion Play/Stop unterstützt dabei nur den im Notify eingetragenen "Lieblingssender".
          Bei einem FS20- 4fach Taster könnte man natürlich auch noch die Sender durchschalten... 8)

Edit2:
Zitat von: Rince am 15 Januar 2014, 08:44:46
Daher ein Verbesserungsvorschlag:
Würdest du es bitte so lösen:
Die Lautstärke vom Streamradio wird beim beenden in einem Reading gespeichert
Dann wird der Stream gestoppt
Die Lautstärke wieder auf 100 gestellt
Beim starten die Lautstärke auf den letzten Wert gestellt, bevor das Playback losläuft?

Das macht sich besser außerhalb des Moduls. Ich hab ganz unten im Code mal sowas programmiert. Einziger Haken an der Sache:
Es gibt vom TTS- Modul kein Event, wann die Ansage zuende ist. Das lässt sich wahrscheinlich auch schwer realisieren. Deshalb habe ich in meinem Beispiel eine Zeit von 10 Sek. drin, nach der das Radio wieder gestartet und die Lautstärke zurückgefahren wird. Diese Zeit muss man sich individuell anpassen, oder sogar durch eine Var. esetzen. Dann kann man bei längeren Ansagen auch die Zeit temporär verlängern.



# 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

# 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

# 1212 1212 1212 ; 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

# 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


Gruß

Frank
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

Rince

Von wegen alleine ;)
Aber ich surfe immer noch mit 64Kbit. Da macht Webradio wenig Spaß.

Deshalb nehme ich interessiert zur Kenntnis, was ihr so treibt, halte mich aber raus.
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

fiedel

Hey Rince, raus aus meinem Thread!  ;) ;D
Bist du etwa der DrosselKom zum Opfer gefallen??? Zu viel gesaugt...  ;D

So, Spaß beiseite. Guck dir mal oben meinen 2. Edit an, der dürfte dich interessieren!

Gruß und baldige Bandbreitenbesserung! ;D

Frank
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

Rince

Mal sehen.
Wir versuchen jetzt den 3ten Porttausch am dslam. Seit 1 Stunde habe ich Netz. 50MBit rockt ;) Mal sehen, wie lange es stabil bleibt.
Back to toppic:



Es klingt spannend. Machst du jetzt das Radio für gemx weiter?

Wegen der Umlaute
Ich hab den Code grade nicht da. Kannst du mal checken ob
use utf8;
Was bringt (wenn es nicht schon gelöst ist) ?
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

fiedel

ZitatMachst du jetzt das Radio für gemx weiter?

Nee, nee. Ich versuche mir das nur so perfekt wie möglich einzurichten, damit ich es dann vergessen und einfach benutzen kann. Um größere Sachen zu machen, fehlt mir auch das Wissen.

Wo wir beim Thema wären  ;D: Das mit dem Charset ist noch offen. Ich hab mal utf8 getestet, aber ohne Erfolg. Da muss wohl gemx bei Gelegenheit noch mal drübergucken. Und auch bei der Fehlermeldung "Timeout for StreamRadio_Play reached, terminated process". Da fehlen mir völlig die Zusammenhänge. Hast du die Meldung eigentlich auch?

Gruß

Frank
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

Rince

Sorry,
bin grade erst aufgestanden. Ich werde mir das später ansehen.
Jetzt schau ich erst mal, ob ich bei deinem Mod von Text2Speech die Stille VOR der Ansage einfügen kann :)
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Kakaomonster

Guten Morgen zusammen,

erstmal muss ich sagen ein tolles Modul, Radio gehört ja schliesslich immer dazu :-)

Da ich fhem jedoch auf meinem BBB installiert habe und dies im Wohnzimmer brav in einer Ecke steht, möchte ich gerne das Radio über fhem an die einzelnen Tablets senden auf denen ich WebViewControl drauf habe.

Ist das möglich oder in Planung? Aktuell arbeite ich mit

#Tablet Radio
define EINSLIVE dummy
attr EINSLIVE alias EinsLive
attr EINSLIVE eventMap B0:off BI:on
attr EINSLIVE group Tablet Radio
attr EINSLIVE room Radio

define EINSLIVE_AN notify EINSLIVE.on sleep 1 ;;set androidTablet audioPlay http://1live.akacast.akamaistream.net/7/706/119434/v1/gnl.akacast.akamaistream.net/1live
define EINSLIVE_OFF notify EINSLIVE.off sleep 1 ;;set androidTablet audioStop


Aber für mehrere Sender ist es nicht so schön und ich muss auch jedes Tablet seperat anlegen. Wenn ich den Stream von dem Modul hier nehmen könnte, dass dieser dann wo anders hin geht, gäbe es sicherlich doch auch eine möglichkeit mit einem "schalter" zu sagen auf welchem tablet es gespielt werden soll oder auf allen oder nur bestimmten... sozusagen als scene. Frühstück= Küche, Party=Küche, Esszimmer, Wohnzimmer, Besuch= Küche Esszimmer usw.

Jemand eine Idee?

Danke und schönen sonningen Tag noch, Ralf
FHEM auf Raspi m.12cm Antenne, BBB als Server für Zusatz (apache,php,sql)
1 USB CUL/RAW (ReadAnswer):  V 1.61
2 MAX Thermostate, 1 MAX Wanthermostast
1 FHT8V Thermostat, Schaltaktoren,Bewegungsmelder, Wandtatser Elro & IT
1 HMT 360, 4 7"Tablets, FB 7490

Rince

Du könntest die Teile mit Notifies schalten lassen.

Oder aber, keine Ahnung ob das geht, theoretisch müsste das Modul lightscene sowas auch können ;)


Bau dir doch mal eine Lightscene mit den entsprechenden Radio Dummys :)
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Kakaomonster

Hallo Rince,

danke für Deine Idee, ich werde mich da mal dran machen und sehen ob das mit dem LightScene funktioniert. Zumindest wäre es für meine Sender wie o.g. aktuell schöner.

Was ich aber immer noch suche ist, wie ich den Stream aus dem Modul hier vom BBB nun weg auf ein anderes Gerät bekommen kann. Mit notifys fällt mir da nichts ein :-(

VIelleicht kommt ja noch eine Hilfe, derweilen schaue ich mal wie ich das mit der LightScene basteln kann :-) Danke, Gruss Ralf
FHEM auf Raspi m.12cm Antenne, BBB als Server für Zusatz (apache,php,sql)
1 USB CUL/RAW (ReadAnswer):  V 1.61
2 MAX Thermostate, 1 MAX Wanthermostast
1 FHT8V Thermostat, Schaltaktoren,Bewegungsmelder, Wandtatser Elro & IT
1 HMT 360, 4 7"Tablets, FB 7490

linuxq

@fiedel:  Danke für Deine Erweiterungen. Aber es regelt bei mir nicht die Lautstärke! Wenn ich manuell den Befehlt "set SRadio VOLUME 90" ausführe oder ähnlich, geht es. Mit dem Slider erscheint im Log:

Zitat2014.05.08 16:35:13 3: set Radio VOLUME 8 : Unknown argument VOLUME, choose one of dim06% dim100% dim12% dim18% dim25% dim31% dim37% dim43% dim50% dim56% dim62% dim68% dim75% dim81% dim87% dim93% dimdown dimup dimupdown off off-for-timer on on-100-for-timer-prev on-for-timer on-old-for-timer on-old-for-timer-prev on-till ramp-off-time ramp-on-time reset sendstate timer toggle dim:slider,0,6.25,100 blink intervals off-till
2014.05.08 16:35:13 3: Func_Volume_N return value: Unknown argument VOLUME, choose one of dim06% dim100% dim12% dim18% dim25% dim31% dim37% dim43% dim50% dim56% dim62% dim68% dim75% dim81% dim87% dim93% dimdown dimup dimupdown off off-for-timer on on-100-for-timer-prev on-for-timer on-old-for-timer on-old-for-timer-prev on-till ramp-off-time ramp-on-time reset sendstate timer toggle dim:slider,0,6.25,100 blink intervals off-till

Gruß

LinuxQ

fiedel

Hi LinuxQ,

das muss an deiner Namenssyntax liegen. Beim manuellen set nennst du es "SRadio", im Slider heißt es bei dir "Radio". Das musst du vermutlich nur anpassen. Bei mir läuft die Funktion so schon lange problemlos.

Gruß

Frank
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

linuxq

Ich habe es aber genau aus Deinem Post oben so übernommen!


# Stream Radio:
define SRadio StreamRadio /opt/fhem/log/webstreams.txt
attr SRadio telnetport 7080
attr SRadio volume_command amixer cset numid=1 -- %s%%
attr SRadio room Radio
attr SRadio group Radio

# 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 Radio

# Notify für Volume- Slider
define Func_Volume_N notify Dum_Volume_D {\
my $vol = Value("Dum_Volume_D");;\
fhem "set Radio VOLUME $vol";;\
}
attr Func_Volume_N room Radio

# 1212 1212 1212 ; FS20 Tastenpaar Radio Play/Stop und Vol+/Vol-
define Radio FS20 1111 11
attr Radio dummy 1
# attr Radio alias SWR3
attr Radio group Radio
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 SWR3");;\
  } \
  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

# 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



Nur diese Zeilen angepasst:

define SRadio StreamRadio /opt/fhem/log/webstreams.txt
attr SRadio telnetport 7080
attr SRadio volume_command amixer cset numid=1 -- %s%%


Der Slider und das StreamRadio können ja nicht den gleichen Namen haben. Ansonsten ist es identisch Dein Code!

fiedel

Es war so wie ich sagte:

fhem "set Radio VOLUME $vol";;\

muss heißen:

fhem "set SRadio VOLUME $vol";;\

War natürlich ein Fehler aus meinem Code und ich habs in meinem Post gleich korrigiert.

ZitatDer Slider und das StreamRadio können ja nicht den gleichen Namen haben.

Haben sie ja auch nicht, aber der Slider steuert den Parameter "VOLUME" des SRadios.

Gruß

Frank
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423