FHEM Forum

FHEM - Anwendungen => Multimedia => Thema gestartet von: LuckyLuis am 05 Februar 2014, 14:02:47

Titel: Wecker via Airplay-Lautsprecher
Beitrag von: LuckyLuis am 05 Februar 2014, 14:02:47
Hallo,

nachdem ich in den letzten Monaten meine Homematic-Zentrale durch eine Rasp Pi/FHEM-Lösung ersetzt habe (Vielen herzlichen Dank an die vielen Entwickler! Super Arbeit!), kommen jetzt die ersten "like to have"-Themen.
Nachdem ich auch schon ein "WakeUp-Licht" eingerichtet habe, möchte ich gerne nach einer gewissen Zeit meinen Lieblingsradiosender hören. Als Zielausgabegerät soll ein Airplay-Lautsprecher (Standalone) genutzt werden.
Nach einigem Lesen und Probieren (PulseAudio (V1, raop V2 konnte ich auf dem Pi nicht kompilieren), forked-daapd (läuft)) kam ich leider bis jetzt noch zu keiner Lösung, um einen Stream durch FHEM gesteuert auf einem Airplay-Lautsprecher auszugeben.
Es gibt viele Infos, um den Pi als Airplay-Ziel zu nutzen, aber als "Weiterleiter" recht wenig.
Wunschlösung:
- Primär Quelle Webstream, gerne auch zusätzlich lokale Dateien im Verzeichnis ggfs. DLNA
- FHEM sollte Starten, Stoppen und Laut/Leise steuern können
- Auswahl des Zielairplay-Lautsprechers möglich

Für jede Unterstützung/Hinweis auf eine funktionierende Lösung bin ich Dankbar.

PS: Ich möchte dabei gerne ohne einen weiteren Rechner auskommen (z.B. Mac mit iTunes)
Titel: Antw:Wecker via Airplay-Lautsprecher
Beitrag von: Wernieman am 05 Februar 2014, 14:13:55
Habe es zwar selber noch nicht probiert, aber MPD kann AirPlay ansteuern.
Auf die schnelle gefunden:
http://blog.austinseraphin.com/2012/01/06/how-to-make-mpd-work-with-airplay/ (http://blog.austinseraphin.com/2012/01/06/how-to-make-mpd-work-with-airplay/)

Und für MPD gibt es mittlerweile im Multimedia-Bereich ein Modul .... Da ich selber gerade dabei bin, mich in die "Richtung" zu "entwickeln", wo hast Du die Lautsprecher her?
Titel: Antw:Wecker via Airplay-Lautsprecher
Beitrag von: LuckyLuis am 05 Februar 2014, 14:21:56
Die von Dir angebotene Lösung benötigt einen iTunes-Rechner (was ich nicht möchte). Dabei wird iTunes als Airplay-Verteiler genutzt. Dann wäre auch die FHEM-Lösung (Modul) für die iTunes-Fernsteuerung zu bevorzugen. Das Problem ist hauptsächlich die Audioausgabe des Pi auf den Airplay-Lautsprecher umzulenken.

Airplay-Lautsprecher habe ich Sony SN-310 (o.ä) die ganz gut sind und eine  Philips Fidelio AD7000W. Den kann ich nicht empfehlen (sprich "Finger weg!").
Titel: Antw:Wecker via Airplay-Lautsprecher
Beitrag von: Wernieman am 05 Februar 2014, 14:31:21
Der Blogschreiber verwendet es so, aber es ist nicht notwendig.

MPD kann WebStreams abspielen
Als "Output" einen WebStream (für AirPlay) definieren
Lautsprecher darauf "binden"

Prinzipiell mit MPD möglich. Eventuell noch mehr Suche bei Google nötig!

iTunes dafür nicht nötig!
Titel: Antw:Wecker via Airplay-Lautsprecher
Beitrag von: LuckyLuis am 05 Februar 2014, 16:23:54
@Wernieman:

Danke für die Info. Da ich unter den genannten Stichworten nicht finden konnte, würde ich mich über eine kleine weitere "Stichwortliste" freuen. Der Webstream zum Airplay-Receiver muss dem dacp-Protokoll entsprechen, d.h. es muss theoretisch eine Umwandlung/Anreicherung des Streams erfolgen. D.h. das reine "Durchreichen" des Audio-Streams dürfte nicht ausreichen.

Titel: Antw:Wecker via Airplay-Lautsprecher
Beitrag von: Wernieman am 05 Februar 2014, 16:26:53
also ...... mpd kann verdammt viel und ist mit plugins erweiterbar. Da ich selber (noch) keine "WebLautsprecher" habe, kann ich Dir nur Tipsm aber keine weitere Hilfe geben.
Titel: Antw:Wecker via Airplay-Lautsprecher
Beitrag von: justme1968 am 05 Februar 2014, 17:09:23
schau dir mal den post hier an: http://forum.fhem.de/index.php/topic,19173.msg128659.html#msg128659 (http://forum.fhem.de/index.php/topic,19173.msg128659.html#msg128659). ich bin noch nicht dazu gekommen das ins itunes modul mit einzubauen aber wenn dein Lautsprecher wirklich direkt airplay kann dann solltest du hiermit direkt einen internet stream hin schicken können.

gruss
  andre
Titel: Antw:Wecker via Airplay-Lautsprecher
Beitrag von: LuckyLuis am 05 Februar 2014, 17:31:22
Hallo Andre,

das sieht ja sehr vielversprechend aus. Wäre genau, was ich brauche. Wird wohl heute Abend wieder etwas später.....

Vielen Dank an Alle. Werde berichten, ob es funktioniert....
Titel: Antw:Wecker via Airplay-Lautsprecher
Beitrag von: LuckyLuis am 05 Februar 2014, 22:06:55
Hallo,

ein wenig getestet, allerdings funktioniert es nicht. Aber neue Erkenntnisse für mich:
- Unterschied zwischen Airplay (Photo/Video) und RAOP/RTSP (Audio)
- Es gibt wohl tatsächlich eine mpd-Version mit raop-output-modul (anscheinend nicht die aktuelle produktive raspian-version)


Weiter gehts ...

Titel: Antw:Wecker via Airplay-Lautsprecher
Beitrag von: nocomment am 05 Februar 2014, 23:51:36
Halt uns bitte auf dem laufenden!

Interessiere mich auch sehr für das Thema da einige Lautsprecher schon vorhanden sind :)


lg
Titel: Antw:Wecker via Airplay-Lautsprecher
Beitrag von: oliv06 am 06 Februar 2014, 00:07:48
Perheaps xmms2 and xmms2-plugin-airplay is a direction to look at ?
Did not test it but has interesting features (CLI, output to airplay)
Titel: Antw:Wecker via Airplay-Lautsprecher
Beitrag von: LuckyLuis am 07 Februar 2014, 11:41:50
Hallo,

habe jetzt mal http://hfujita.github.io/pulseaudio-raop2/ ausprobiert. Fertig kompiliert, Ausgabegeräte werden erkannt, kann mit SoX eine Ausgabe starten, dann bricht Pulseaudio mit einem Fehler ab.
Werde mir dann als nächstes XMMS2 anschauen...

Es geht weiter.
Titel: Antw:Wecker via Airplay-Lautsprecher
Beitrag von: nocomment am 07 Februar 2014, 12:51:39
Okay cool!

Bleib dran :)

Lg
Titel: Antw:Wecker via Airplay-Lautsprecher
Beitrag von: LuckyLuis am 07 Februar 2014, 16:03:16
Zwischenstand: XMMS2 unterstützt nur das "alte" Airtunes für alte Airport Express.
Das vielversprechenste ist noch immer pulseaudio mit neustem airplay-plugin. Dazu habe ich noch kein Supportforum gefunden. Muss den Entwickler mal direkt anmailen.
Titel: Antw:Wecker via Airplay-Lautsprecher
Beitrag von: drdownload am 07 Februar 2014, 18:44:38
Apple airplay verwendet udp, pa raop TCP
Titel: Antw:Wecker via Airplay-Lautsprecher
Beitrag von: LuckyLuis am 07 Februar 2014, 20:58:56
@drdownload:

Die von mir genannte Version von pulseaudio unterstützt dann auch raop/Airtunes via udp. Raop ist wohl nichts anderes als ein verpacktes RTSP. Und  meine Lautsprecher sind wohl nur via udp ansprechbar.
Titel: Antw:Wecker via Airplay-Lautsprecher
Beitrag von: drdownload am 07 Februar 2014, 22:17:15
ah, sorry am smartphone folge ich nicht allen links.
Titel: Antw:Wecker via Airplay-Lautsprecher
Beitrag von: LuckyLuis am 11 Februar 2014, 22:46:38
So, endlich ein erster Erfolg:

Mit https://www.npmjs.org/package/airtunes konnte ich endlich ein mp3-File auf einem vorgegebenen Airplay-Lautsprecher ausgeben (node play_ffmpeg.js --host 192.168.x.x --port 1195 --volume 30 --ffmpeg "/usr/bin/ffmpeg" --file test.mp3).

Problem ist die dynamische Änderung des Ports meiner Airplay-Lautsprecher. Der voreingestellte Port gilt nur für Apple-TV und Apple Airport Express. Für meine Airplay-LS musste ich via avahi-browser erst mal manuell den Port ermitteln.

Fazit: Damit geht es erst mal weiter. Die Möglichkeiten damit sind für meine Ansprüche mehr als ausreichend und es kann über CLI gesteuert werden.

Nächster Schritt: Ermitteln des aktuellen Ports der jeweiligen Airplay-Lautsprecher.
Titel: Antw:Wecker via Airplay-Lautsprecher
Beitrag von: nocomment am 11 Februar 2014, 23:23:42
TOP :D

Dann schreibst du noch ein nettes Plugin für FHEM  ? (:
Titel: Antw:Wecker via Airplay-Lautsprecher
Beitrag von: LuckyLuis am 14 Februar 2014, 00:26:08
Nachdem die Ausgabe via FFMPEG und Airtunes2 (node.js) auf einen ausgewählten Airplay-Lautsprecher läuft, stellen sich zwei Probleme (die ich bis jetzt leider noch nicht lösen konnte):

1. Wie kann ich in FHEM ein Array aus einem Perl-Script (Die Abfrage der im Netzwerk befindlichen Airplay-Speaker geht über AnyEvent. Darüber erhalte ich hosts und Ports.) zur Auswahl stellen und den ausgewählten host und port zwei Dummies zuordnen?
2. FFMPEG kann nicht mit m3u-Listen aus einem http-Stream umgehen. Ich muss diesen Stream aber in ein Airplay-Konformes Format umwandeln (PCM 44,1khz usw). Zu guter letzt benötige ich für das Streamen zu den Airplay-Speakern den umgewandelten Stream in einer Pipe, damit Airtunes2 (node.js) den Stream an die Airplay-Lautsprecher senden kann.

Vielleicht liest hier jemand mit, der Hilfestellung leisten kann.
Titel: Antw:Wecker via Airplay-Lautsprecher
Beitrag von: LuckyLuis am 14 Februar 2014, 09:33:15
Weiter geht's:

Punkt 2 des obigen Eintrags ist gelöst. Ich nutze jetzt mpg123 -@ http://.../test.m3u -s --stereo -r 44100 -q und leite das über StandartOut an Airtunes2 (node.js). Folgend das play_mpg123.js (angepasste Version eines Beispiels von airtunes2 (play_ffmpeg.js). Node.js ist bei mir unter /opt/node installiert.

var airtunes = require('/opt/node/lib/node_modules/airtunes'),
    spawn = require('child_process').spawn,
    argv = require('/opt/node/lib/node_modules/airtunes/node_modules/optimist')
      .usage('Usage: $0 --host [host] --port [num] --mpg123 [path] --file [path] --volume [num] --password [string]')
      .default('port', 5000)
      .default('volume', 20)
      .default('mpg123', '/usr/bin/mpg123')
      .default('file', 'http://metafiles.gl-systemhaus.de/hr/hr3_2.m3u')
      .demand(['host'])
      .argv;

console.log('adding device: ' + argv.host + ':' + argv.port);
var device = airtunes.add(argv.host, argv);

// when the device is online, spawn mpg123 to transcode the file
device.on('status', function(status) {
  console.log('status: ' + status);

  if(status !== 'ready')
    return;

  var mpg123 = spawn(argv.mpg123, [
    '-@', argv.file,    // Eingabefile/Stream
    '-q',               // Quiet
    '-s',              //StandardOut
    '-r', '44100',              // Sampling 44100 kHz
    '--stereo'          // Stereo
  ]);

  // pipe data to AirTunes
  mpg123.stdout.pipe(airtunes);

  // detect if mpg123 was not spawned correctly
  mpg123.stderr.setEncoding('utf8');
  mpg123.stderr.on('data', function(data) {
    if(/^execvp\(\)/.test(data)) {
      console.log('failed to start ' + argv.mpg123);
      process.exit(1);
    }
  });
});

// monitor buffer events
airtunes.on('buffer', function(status) {
  console.log('buffer ' + status);

  // after the playback ends, give some time to AirTunes devices
  if(status === 'end') {
    console.log('playback ended, waiting for AirTunes devices');
    setTimeout(function() {
      airtunes.stopAll(function() {
        console.log('end');
        process.exit();
      });
    }, 2000);
  }
});


Mit installiertem Perl-Modul AnyEvent erhält man mit folgendem Perlskript alle Airplay-Empfänger im Netzwerk

use AnyEvent::mDNS;

my $cv = AnyEvent->condvar;

AnyEvent::mDNS::discover '_raop._tcp', $cv;

my @services = $cv->recv;

for my $service(@services) {
print "Found $service->{name} ($service->{proto}) running on $service->{host}:$service->{port}\n";
}


Für die Steuerung der Streamausgabe braucht's noch ein paar Wrapper für node.js zur Lautstärkenkontrolle und Stop/Play.
Titel: Antw:Wecker via Airplay-Lautsprecher
Beitrag von: oliv06 am 19 März 2014, 12:06:25
any news ?
Titel: Antw:Wecker via Airplay-Lautsprecher
Beitrag von: LuckyLuis am 27 Juli 2014, 22:25:45
Hi,

das Thema hat sich für mich zerschlagen, da ich FHEM jetzt auf einem MacMini unter Mac OS X betreibe...

Viele Grüße

LuckyLuis