Zurück   KNX-User-Forum > Öffentlicher Bereich > KNX EIB Forum > Code-Schnipsel
knx-user-forum - International KNX Award Winner 2010


Links
Kalender
Spende

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 20.02.2011, 17:40
Benutzer
 
Registriert seit: 16.12.2008
Beiträge: 188
panzaeron wird schon bald berühmt werden
Standard XBMC Fernsteuerung und "Radio"

Dieses Plugin dient dazu ein XBMC MediaCenter über den KNX-Bus fernzusteuern (ausgelegt für den Denro One, funktioniert aber auch mit allen anderen Tastern).
Gedacht ist es für folgendes Szenario:

Szenario
In einem Raum (Küche, Bad, usw.) steht ein Fernseher mit aktiven Lautsprechern und ein MediaCenter-PC mit XBMC dient als Zuspieler. Dies Plugin macht zusammen mit einem 2 bis 4-fach Tastsensor (eventuell mit Infodisplay) eine Fernsteuerung bzw. ein Radio, ähnlich wie die klassischen Unterputz-Radios. Radio deshalb, weil zur Bedienung nicht der Fernseher benötigt wird, die Bedienung mit KNX-Tastern erfolgt und standardmäßig Streams von Radiostationen ausgewählt und abgespielt werden. Die Bedienung ist auf die wichtigsten Grundfunktion beschränkt (vergleichbar mit den einfachen Unterputzradios).

Funktionsweise
Ein- und Ausgeschaltet wir das MediaCenter über eine schaltbare Steckdose oder das Power On/Off WOL-Plugin. Das Ein-/Ausschalten könnte z.B. zusammen mit dem Licht oder durch einen Präsenzmelder erfolgen, auch ein Ein-/Ausschalten über die GA für "Play" ist natürlich möglich.
Beim Einschalten wird eine Playlist mit Radiostreams (Beispiel im Anhang) automatisch abgespielt (Einstellbar im XBMC unter System -> Einstellungen -> Skin -> Allgemein, die Funktion ist abhängig vom verwendeten Skin).
Mit Vor- und Zurücktasten kann in der Playlist gesprungen und damit eine Radiostation ausgewählt werden. Die Standardfunktion wie Play/Pause und Mute/Lautstärke sind natürlich auch vorhanden.
Das Plugin reagiert unterschiedlich, je nach aktueller Situation:
  • Wenn z.B. ein Video geschaut wird, dann fungiert das Plugin als Fernbedienung, d.h. die Wiedergabe kann z.B. pausiert und die Lautstärke geändert werden.
  • Läuft gerade keine Musik oder ein Film, dann wird bei einem Druck auf Play eine Standardplaylist mit Streams zu den Radiostationen geladen und das Abspielen gestartet, d.h. das Plugin arbeitet wie oben beschrieben als "Radio".
Der Denro One hat einen Nachteil, dass trotz des schönen Displays keine über den KNX-Bus übertragenen freien Texte anzeigen werden können. Sollte ein Infodisplay oder z.B. der Gira Tastsensor 3 Plus im Einsatz sein, dann kann der Name des aktuellen Streams ebenfalls angezeigt werden.

Konfiguration
Als Voraussetzung wird mindestens XBMC "Dharma" 10.0 benötigt (erst dieses bietet die verwendete JSON-RPC-Schnittstelle).
  • Im XBMC muss der Webserver aktiviert sein (System -> Einstellungen -> Netzwerk)
  • Anschließend wird bei XBMC eine Standard-Playlist benötigt, diese kann in XBMC erzeugt oder als Vorlage die angehängte in das Benutzerverzeichnis kopiert werden (bei Linux mit XBMC Live ist es "/home/xbmc/.xbmc/userdata/playlists/music/")
  • Als nächstes das Plugin im Wiregate Gateway erzeugen und die Gruppenadressen (GA) im Definitionsbereich anpassen. Wenn eine GA nicht verwendet wird, diese einfach leer lassen.
    Die Funktion der einzelnen GAs kann den Kommentaren entnommen werden.
  • Dann muss XBMC noch ein- und ausgeschaltet werden, dies geschieht z. B. über das Power On/Off-Plugin oder einer schaltbaren Steckdose.
  • Jetzt noch die GAs den Tasten eines Tastsensors zuordnen bzw. in meinem Fall der Audio-GAs des Denro One und schon sollte es funktionieren

Hier ist der Quellcode des Plugins:
Code:
# Plugin um ein XBMC-MediaCenter als "Radio" zu verwenden
# 

### Definitionen
# Gruppenadressen zur Steuerung mit dem Denro One
# Nicht benötigte Gruppenadressen leer lassen
my $volume_ga = "8/1/0"; 	# Obj. 211 Audio-Lautstärke
my $volume_status_ga = "8/1/1";	# Obj. 212 Status der Audio-Lautstärke
my $mute_ga = "8/1/2";		# Obj. 213 Audio-Stumm
my $back_ga = "8/1/3";		# Obj. 214 Audio-Zurück, bzw. Vor-/Zurückspringen (1/0) wenn $next_ga = ""
my $play_ga = "8/1/4";		# Obj. 215 Audio-Abspielen
my $play_status_ga = "8/1/5";	# Obj. 216 Status der Audio-Wiedergabe
my $next_ga = "";		# Obj. 217 Audio-Vor, bzw. wenn "" dann ist $back_ga Vor-/Zurückspringen (beim Denro One nicht verwendet)
# Weitere Gruppenadressen
my $stop_ga = "";		# Wiedergabe beenden
my $title_status_ga = "";	# Aktuell abgespielter Titel
my $rewind_ga = "";             # Zurückspulen, bzw. Vor-/Zurückspulen (1/0) wenn $fast_forward_ga = ""
my $fast_forward_ga = "";       # Vorspulen, bzw. wenn "" dann ist $rewind_ga Vor-/Zurückspulen

# XBMC Einstellungen
my $xbmc_ip = "192.168.0.24";		# IP-Adresse vom MediaCenter mit XBMC
my $xbmc_port = "8080";			# Port des XBMC-Webservers
my $user = "xbmc";			# Benutzername für Login
my $password = "xbmc";			# Passwort des Benutzers
my $default_volume = "50";		# Lautstärke beim Einschalten von 0 bis 100 und "" für keine Default-Lautstärke
my $path_to_playlist = "/home/xbmc/.xbmc/userdata/playlists/music/Radio.m3u"; # Pfad zur Radio-Playlist auf dem XBMC
### Ende Definitionen

# Eigenen Aufruf-Zyklus auf 15 Sekunden setzen
# der Aufrufzyklus ist unabhängig von der Taktzeit und muss kürzer sein!
$plugin_info{$plugname.'_cycle'} = 15;

# Plugin an Gruppenadressen "anmelden"
if ( $volume_ga ) { $plugin_subscribe{$volume_ga}{$plugname} = 1; }
if ( $mute_ga ) { $plugin_subscribe{$mute_ga}{$plugname} = 1; }
if ( $back_ga ) { $plugin_subscribe{$back_ga}{$plugname} = 1; }
if ( $play_ga ) { $plugin_subscribe{$play_ga}{$plugname} = 1; }
if ( $next_ga ) { $plugin_subscribe{$next_ga}{$plugname} = 1; }
if ( $stop_ga ) { $plugin_subscribe{$stop_ga}{$plugname} = 1; }

# Weitere globale Variablen
my $playlist_id;         # ID der aktuellen Playlist
my $current_volume;      # Aktuelle Lautstärke
my $current_title;       # Aktuell abgespielter Titel
my $current_play_status; # Status des Player (Wiedergabe/Pause)
my $current_volume;      # Aktuelle Laustärke

if (%msg) { 
    if ($msg{'apci'} eq "A_GroupValue_Write") { 
       if ($msg{'dst'} eq $volume_ga) {
          #Wert vom Bus
          if (defined $msg{'value'}) {
             $current_volume = volume($msg{'value'});
             knx_write($volume_status_ga,$current_volume,5);
          }
       } elsif ($msg{'dst'} eq $mute_ga) {
          if (defined $msg{'value'}) { 
             #$current_volume = volume_status();
             #if ( $msg{'value'} == "1" && $current_volume > 0) {
             #   mute();
             #} elsif ($msg{'value'} == "0" && $current_volume == 0) {
             #   mute();
             #}
             $current_volume = volume(0);
             knx_write($volume_status_ga,$current_volume,5);
          }
       } elsif ($msg{'dst'} eq $back_ga) {
          if (defined $msg{'value'}) { 
             if ( !$next_ga ) {
                if ( $msg{'value'} == "1" ) {
                   skip_next();
                } else {
                   skip_back();
                }
             } else {
               if ( $msg{'value'} == "1" ) {
                  skip_back();
               }
            }
          }
       } elsif ($msg{'dst'} eq $rewind_ga) {
          if (defined $msg{'value'}) { 
             if ( !$fast_forward_ga ) {
                if ( $msg{'value'} == "1" ) {
                   fast_forward();
                } else {
                   rewind();
                }
             } else {
               if ( $msg{'value'} == "1" ) {
                  rewind();
               }
            }
          }
       } elsif ($msg{'dst'} eq $fast_forward_ga) {
          if (defined $msg{'value'}) { 
             if ( $msg{'value'} == "1" ) {
                fast_forward();
             }
          }
       } elsif ($msg{'dst'} eq $play_ga) {
          my $play_status = play_status();
          if ( $msg{'value'} == "1" && $play_status == "0") {
             $current_play_status = play();
          } elsif ($msg{'value'} == "0" && $play_status == "1") {
             $current_play_status = pause();
          }
          knx_write($play_status_ga,$current_play_status,1);
       } elsif ($msg{'dst'} eq $next_ga) {
          if (defined $msg{'value'}) { 
             if ( $msg{'value'} == "1" ) {
                skip_next();
             }
          }
       }
    }
}

# Um die Busbelastung zu minimieren, wird der Status nur aktualisiert, 
#   wenn das MediaCenter auf einen Ping antwortet
my $ping_result = ping_test( $xbmc_ip );
if ( $ping_result == 1 ) {
    # Status aktualisieren
    if ( $volume_status_ga ) {
       $current_volume = volume_status();
       knx_write($volume_status_ga,int($current_volume),5);
    }

    if ( $play_status_ga ) {
       $current_play_status = play_status();
       knx_write($play_status_ga,$current_play_status,1);
    }

    if ( $title_status_ga ) {
       $current_title = current_title();
       knx_write($title_status_ga,$current_title,16);
    }
}

return;

sub volume {
  my ($volume) = @_;
  if ( $volume eq "" ) { $volume == 0; }
  my $method = "XBMC.SetVolume";
  my $result = json_request($method, int($volume));
  $result =~ m#.*"result"\s:\s(\d*).*#s;  
  return $1;  
}

sub volume_status {
  my $method = "XBMC.GetVolume";
  my $result = json_request($method);
  #print $result."\n";
  $result =~ m#.*"result"\s:\s(\d*).*#s;  
  return $1;
}

sub mute {
  my $method = "XBMC.ToggleMute";
  my $result = json_request($method);
  #print $result."\n";
  $result =~ m#.*"result"\s:\s(\d*).*#s;  
  return $1;
}

sub skip_back {
  my $player = active_player();
  if ( !$player ) { return 0; } # Wenn nichts aktiv die Funktion verlassen
  my $method = $player."Player.SkipPrevious";
  my $result = json_request($method);
  $result =~ m#.*"result"\s:\s"(\w*)".*#s;  
  return $1;
}

sub play {
  my $player = active_player();
  if ( $player eq "" ) { 
     $player = "Audio";
     radio_playlist_create();   # Neue Radio-Playlist erzeugen
     volume( $default_volume ); # Default-Lautstärke setzen
     play_list( $player );      # Ersten Eintrag der Playlist abspielen
     return 1;
  }
  my $playStatus = play_status( $player );
  if ( $playStatus == "1" ) {
     return 1;
  } else {
     my $method = $player."Player.PlayPause";
     my $result = json_request($method);
     #print $result."\n";
     $result =~ m#.*"paused"\s:\s(\w*).*"playing"\s:\s(\w*).*#s;  
     my $pause = $1;
     my $playing = $2;
     #print "Playing: $playing Pause: $pause\n";
     if ( $playing eq "true" && $pause eq "false" ) {
        return 1;
     } else {
        return 0;
     }
  }
  return 0;
}

sub pause {
  my $player = active_player();
  if ( !$player ) { return 0; };
  my $playStatus = play_status( $player );
  if ( $playStatus == 0 ) {
     return 0;
  } else {
     my $method = $player."Player.PlayPause";
     my $result = json_request($method);
     #print $result."\n";
     $result =~ m#.*"paused"\s:\s(\w*).*"playing"\s:\s(\w*).*#s;  
     my $pause = $1;
     my $playing = $2;
     #print "Playing: $playing Pause: $pause\n";
     if ( $playing eq "true" && $pause eq "false" ) {
        return 1;
     } else {
        return 0;
     }
  }
  return 0;
}

sub play_list {
  (my $player) = @_;
  if ( !$player ) { 
      $player = active_player();
      if ( !$player ) { 
	     return 0;     # Wenn nichts aktiv die Funktion verlassen
      }
  }
  my $method = $player."Playlist.Play"; 
  my $playing_id = get_playing_id($player);
  if ( $playing_id eq "" ) { $playing_id = 0; }
  my $result = json_request($method, $playing_id);
  #print "\n$result\n";
}

sub skip_next {
  my $player = active_player();
  if ( !$player ) { return 0; } # Wenn nichts aktiv die Funktion verlassen
  my $method = $player."Player.SkipNext";
  my $result = json_request($method);
  $result =~ m#.*"result"\s:\s"(\w*)".*#s;  
  return $1;
}

sub stop {
  my $player = active_player();
  if ( !$player ) { return 0; } # Wenn nichts aktiv die Funktion verlassen
  my $method = $player."Player.Stop";
  my $result = json_request($method);
  $result =~ m#.*"result"\s:\s"(\w*)".*#s;  
  return $1;
}

sub play_status {
  (my $player) = @_;
  if ( !$player ) { 
      $player = active_player();
      if ( $player eq "" ) { 
	     return 0;     # Wenn nichts aktiv die Funktion verlassen
      }
  }
  my $method = $player."Player.State";
  my $result = json_request($method);
  #print $result."\n";
  $result =~ m#.*"partymode"\s:\s(\w*),.*"paused"\s:\s(\w*),.*"playing"\s:\s(\w*).*#s; 
  my $partymode = $1;
  my $pause = $2;
  my $playing = $3;
  if ( $playing eq "true" && $pause eq "false" ) {
     return 1;
  } else {
     return 0;
  } 
}

sub current_title {
  (my $player) = @_;
  if ( !$player ) { 
      $player = active_player();
      if ( !$player ) { 
	     return 0;     # Wenn nichts aktiv die Funktion verlassen
      }
  }
  my $method = $player."Playlist.GetItems";
  my $result = json_request($method);
  my @labels;
  print "\Result: $result\n";
  while ($result =~ s#"label"\s:\s"(.*?)"##s) {
     push(@labels, $1);
  }
  #print "\nAlle Label: @labels\n"; 
  my $current_id = get_playing_id($player);
  $labels[$current_id]=substr($labels[$current_id],0,14); # String auf 14 Byte kürzen (DPT 16)
  #print "\nAktueller Titel: $labels[$current_id]\n";
  return "$labels[$current_id]";
}

sub rewind {
  my $player = active_player();
  if ( !$player ) { return 0; } # Wenn nichts aktiv die Funktion verlassen
  my $method = $player."Player.Rewind";
  my $result = json_request($method);
  $result =~ m#.*"result"\s:\s"(\w*)".*#s;  
  return $1;
}

sub fast_forward {
  my $player = active_player();
  if ( !$player ) { return 0; } # Wenn nichts aktiv die Funktion verlassen
  my $method = $player."Player.Forward";
  my $result = json_request($method);
  $result =~ m#.*"result"\s:\s"(\w*)".*#s;  
  return $1;
}


sub json_request {
  my ($method, $param) = @_;
  my $command = "curl -s -S -m 3 -X POST -d '".'{"jsonrpc": "2.0", "method": "'.$method.'"';
  if ( $param ne "" ) {
     $command = $command.', "params": '.$param;
  }
  my $command = $command.', "id": 1}'."'"." http://$xbmc_ip:$xbmc_port/jsonrpc";
  #print "Command: ".$command."\n";
  my $result = `$command`;
  return $result;
}

sub radio_playlist_create {
  # Eine vorhandene Playlist leeren
  my $method = "AudioPlaylist.Clear";
  my $result = json_request($method);
  # Playlist neu füllen mit den Inhalten der angegebenen Playlist
  $method = "AudioPlaylist.Add";
  my $params = '{ "playlist-file" : "'.$path_to_playlist.'"}';
  $result = json_request($method, $params);
}

sub active_player {
  my $method = "Player.GetActivePlayers";
  my $result = json_request($method);
  print $result."\n";
  $result =~ m#.*"audio"\s:\s(\w*),.*"picture"\s:\s(\w*),.*"video"\s:\s(\w*).*#s;
  if ( $1 eq "true" ) {
     # Audio aktiv
     return "Audio";
  } elsif ( $2 eq "true") {
     # Picture aktiv
     return "Picture";
  } elsif ( $3 eq "true") {
     # Video aktiv
     return "Video";
  } else {
     # Nichts ist aktiv
     return;
  }
}

sub get_playing_id {
  (my $player) = @_;
  if ( !$player ) { 
      $player = active_player();
      if ( !$player ) { 
	     return 0;     # Wenn nichts aktiv die Funktion verlassen
      }
  }
  my $method = $player."Playlist.GetItems"; 
  # my $params = '{ "fields": ["title","artist"] }';
  my $result = json_request($method);
  $result =~ m#.*"current"\s:\s(\d+),.*"end"\s:\s(.*),.*"start"\s:\s(\d+),.*"total"\s:\s(\d+).*#s;
  #print $result."Current ID: $1 Letzte ID: $2 Start ID: $3 Anzahl: $4\n";
  return $1;
}

sub ping_test {
	(my $ip_adr) = @_;
    my $command = "ping -c 2 -w 5 ".$ip_adr;
	my $status = `$command`;
	if($status =~ /bytes from/) { return 1; }
	elsif($status =~ /0 received/) { return 0; }
	return "Ein Fehler ist beim Testen der IP $ip_adr aufgetreten";
}
Angehängte Dateien
Dateityp: zip Radio.m3u.zip (377 Bytes, 21x aufgerufen)

Geändert von panzaeron (20.02.2011 um 20:00 Uhr) Grund: Kleinen Fehler im Code beseitigt
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #2  
Alt 20.02.2011, 19:20
Erfahrener Benutzer
 
Registriert seit: 12.11.2009
Beiträge: 3.455
StefanW sorgt für eine eindrucksvolle AtmosphäreStefanW sorgt für eine eindrucksvolle AtmosphäreStefanW sorgt für eine eindrucksvolle AtmosphäreStefanW sorgt für eine eindrucksvolle AtmosphäreStefanW sorgt für eine eindrucksvolle Atmosphäre
Daumen hoch

Wow! Perfekt, bin begeistert, eine sehr schöne Idee!

Stefan
__________________

Stefan Werner, Geschäftsführer Elaborated Networks GmbH. Link zum Shop.
Bitte keine PNs. Fragen gehören ins Forum oder an support ät wiregate.de
Alle Informationen und Aussagen nach bestem Wissen und Gewissen.
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #3  
Alt 21.02.2011, 00:12
Benutzer
 
Registriert seit: 16.12.2008
Beiträge: 188
panzaeron wird schon bald berühmt werden
Standard

Zitat von StefanW Beitrag anzeigen
Wow! Perfekt, bin begeistert, eine sehr schöne Idee!

Stefan
Danke , vielleicht noch als Ergänzung warum ich XBMC und einen MediaCenter-PC nutze bzw. vorgesehen habe und keinen MediaPlayer wie z. B. einen WD Live.

Warum XBMC ist schnell beantwortet, ich finde das System gut Es ist sehr flexibel hat eine schicke Oberfläche, ist durch Plugins erweiterbar und wenn die PVR Funktionalität stabil läuft für mich optimal. Fehlt nur noch ein Plugin zur Steuerung der KNX Komponenten...

Der benötigte PC ist auch erschwinglich, ein Intel Atom oder AMD-System mit NVidia ION-Grafik ist ausreichend und verhältnismäßig preiswert. Auch die Leistungsaufnahme hält sich in Grenzen, zwar mehr als z.B. ein WD Live aber weniger als ein "normaler" PC. Auch die Bootzeiten sind für mich akzeptabel, mit einem optimierten Betriebssystem wie z. B. openelec und einer schnellen SSD liegen die Bootzeiten bis zum Abspielen eines Streams bei vielleicht 15 Sekunden, die kleine Multimediaplayer sind nicht wesentlich schneller...

Auch die kleinen Unterputzradios kommen für mich nicht in Frage, allein schon wegen dem schlechten Klang. Ein gutes aktiv System oben auf dem Küchenschrank oder gute Einbaulautsprecher klingt um längen besser. Aber die simple Bedienung gefällt mir, daher ja auch dieses Plugin

Der Nachteil ist natürlich der (wesentlich) höhere Preis, allein die aktiv Lautsprecher kosten soviel wie das Unterputzradio oder ein WD Live. Auch die angesprochene elektrische Leistungsaufnahme ist viel höhere (Verstärker nicht vergessen). Die aufwändigere Installation und Konfiguration kommt noch oben drauf (für mich nicht so wichtig, da eh ein Neubau und Linux kein Problem ist)...

Geändert von panzaeron (21.02.2011 um 00:20 Uhr)
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #4  
Alt 23.02.2011, 00:08
Benutzerbild von makki
Erfahrener Benutzer
 
Registriert seit: 07.07.2007
Beiträge: 11.779
makki sorgt für eine eindrucksvolle Atmosphäremakki sorgt für eine eindrucksvolle Atmosphäremakki sorgt für eine eindrucksvolle Atmosphäremakki sorgt für eine eindrucksvolle Atmosphäremakki sorgt für eine eindrucksvolle Atmosphäremakki sorgt für eine eindrucksvolle Atmosphäre
Standard

Huh, ich muss mich glaube ich mit dem XBMC jetzt echt mal tiefer beschäftigen (Baustelle #751)

Wenn ich fragen darf, wo kommt das TV-Signal her? Da klafft für mich gedanklich irgendwie noch eine kleine Lücke, das sauber und vor allem bedienbar (EPG,...) unter einen Hut (XBMC eben) zu bekommen..

Makki
__________________
EIB/KNX & HS3(+Lüfter+picoPSU80), Multiroom-AV mit Russound,mpd,vdr,DM8000, Profilux II+, N141 DALI, DMX, dez. Lüfter (RS485), Wärmepumpe (RS422), 30+ 1-Wire Temp,Luft&Bodenfeuchte,IRTrans
WireGate - Supportforum - bitte keine PN's!
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #5  
Alt 23.02.2011, 00:51
Benutzer
 
Registriert seit: 16.12.2008
Beiträge: 188
panzaeron wird schon bald berühmt werden
Standard

@makki
Tja, das ist die Baustelle bei XBMC.

Ich nutze für den TV-Empfang (in der Testumgebung) einen extra Atom-NAS-Server auf dem TVHeadEnd als Streaming-Server läuft. Als TV-USB-Adapter nutze ich eine Technotrend 3650 die Umschaltzeiten sind super (auch bei HD), später werden es mal vier TT werden.
Für XBMC gibt es eine extra PVR-Version die trotz des frühen Entwicklungsstadiums gut läuft. In Verbindung mit TVHeadEnd funktioniert aber Timeshift noch nicht und beim EPG fehlen die detaillierten Beschreibungen. Aber ich hoffe dass die Entwickler das Problem bald in den Griff bekommen (in Verbindung mit VDR funktioniert es).
Als Hinweis, dieses Plugin läuft nicht mit der PVR-Version von XBMC, aber auch das wird hoffentlich bald gefixt...
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #6  
Alt 23.02.2011, 01:45
Benutzerbild von makki
Erfahrener Benutzer
 
Registriert seit: 07.07.2007
Beiträge: 11.779
makki sorgt für eine eindrucksvolle Atmosphäremakki sorgt für eine eindrucksvolle Atmosphäremakki sorgt für eine eindrucksvolle Atmosphäremakki sorgt für eine eindrucksvolle Atmosphäremakki sorgt für eine eindrucksvolle Atmosphäremakki sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat von panzaeron Beitrag anzeigen
Tja, das ist die Baustelle bei XBMC.
Ok, zwar leicht OT, aber dann stimmt wenigstens meine Wahrnehmung noch halbwegs

Ich bin halt jetzt (nach ca. 5 leicht/schwer gescheiterten vdr/o.ä.-Projekten in 1999-2007) ein verwöhntes DM800(0)-Kind: Klartext, ich frickle ja auch mal gerne ein WE, aber bei der DM kann ich das, ich muss es nicht zwangsweise, damit Aufnahmen zuverlässig, Timeshift, EPG einfach tun
Als Mediacenter ist das XBMC aber definitiv das g***, weil wenns um Fotos oder Musik geht kann man wiederum die DM halbwegs in die Tonne geht zwar, sieht aber k* aus und ist k* zu lahm. Browser ist nach wie vor ein Drama auf der Dream, aufm XBMC macht man den halt mit der Cometvisu auf

Fürs DVB-S Radio (ich steh da eher auf 320, nicht 64kBit..) hab ich dagegen ja zwei vdr+wechselweise mpd mit Opera DVB-S USB auf ner HW ähnlich dem WG laufen, ein selbiger Geode und ein C7 (+30 EUR, die Opera gibts aber glaube ich schon lang nicht mehr ausser Restposten in der Bucht)
-> Rock-solid 3x365x24 - nicht ein knackser(sigh! allerding waren damals vorher zwei feuchte Nächte für den Treiber fällig.. gefrickel pur, aber naja, offenbar hat sichs dafür rentiert, weil wenns danach jahrelang rennt, vergisst man das patchen und backporten von ein paar Kerneltreibern schnell..)


Und nun stehe ich fürs Heimkino vor der immernoch offenen Entscheidung: weitere DM800SE oder HTPC mit XBMC..
Beides will ich nicht, wenn im 2-Personen Haushalt ein 28-Port Switch nicht reicht ist das doch bestimmt ganz normal
Also nicht wegen der HW-Kosten, mein Gott, seis drum, aber die doppelte/unterschiedliche Ansteuerung, Bedienung: da steckt im Detail IMHO echt der Teufel! Die Meldungen der Mülltonnen etc.pp.-> alles 2x machen.
Den "Streamer" hätte ich ja schon, macht die DM8000 mit 3 Tunern wunderbar. Aber TV ohne EPG ist halt IMHO nix und wenn ich dann mal schnell ne Aufnahme programmieren will zum Notebook latschen:
(sicherlich lässt sich das auch als XBMC-Plugin machen, sofern das EPG vorliegt, aber jemand muss es machen, wäre dann Projekt #752)

Werd mir das PVR-Plugin morgen mal ansehen, so long,

Makki, (der XBMC ziemlich cool findet, aber insgesamt immernoch ziemlich unschlüssig ist..)
__________________
EIB/KNX & HS3(+Lüfter+picoPSU80), Multiroom-AV mit Russound,mpd,vdr,DM8000, Profilux II+, N141 DALI, DMX, dez. Lüfter (RS485), Wärmepumpe (RS422), 30+ 1-Wire Temp,Luft&Bodenfeuchte,IRTrans
WireGate - Supportforum - bitte keine PN's!
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #7  
Alt 23.02.2011, 14:13
Benutzer
 
Registriert seit: 16.12.2008
Beiträge: 188
panzaeron wird schon bald berühmt werden
Standard

@makki
Nochmal kurz OT, für Fernsehen taugt XBMC noch nicht, auch mit der PVR-Funktionalität, weil halt Timeshift, Record, epg noch nicht bzw. nur schlecht funktionieren. Aber zum testen ganz interessant und wenn die Entwicklung erstmal weiter ist, wird das bestimmt eine ganz gute Sache...

Aber um auf das Thema zurück zukommen, zum Radiohören nutze ich auch TVHeadEnd und zwar dann, wenn es keinen Internetstream in guter Qualität gibt...
Wie geht das? Ich nutze eine Playlist wie im ersten Post wo ich als Stream-URL den rtsp Stream von TVHeadEnd eintrage, z. B. so einer:
Code:
rtsp://192.168.0.2:9981/service/_dev_dvb_adapter0_STB0899_Multistandard12265500_H_satconf_1_6f22
(zu finden im WebInterface von TVHeadEnd unter "Configuration" -> "TV Adapters" -> "Services" -> "Play"-Link). Dabei handelt es sich um einen mp2-Stream mit dem Nachteil, dass kein "lesbarer" Name während des abspielens angezeigt wird, sondern nur die URL. Das funktioniert auch mit dem normalen XBMC "Dharma" 10.0, d. h. ohne PVR Ergänzung.
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Antwort

Stichworte
audio, denro one, multifunktionsgateway, multiroom, plugin, radio, steuern, wiregate, xbmc

Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Multimedia] Fernsteuerung der neuen Philips TV's über jointspace max999 KNX EIB Forum 7 26.12.2010 10:12
[mmh] m..Remote-Visu für iPhone mit XBMC Integration sunnyhd KNX EIB Forum 0 17.08.2010 07:54
[mmh] Mappingbeispiel Commandserver XBMC sunnyhd KNX EIB Forum 8 29.05.2010 15:08
- √ - OT: IPod Touch als Fernsteuerung SmartEIB KNX EIB Forum 61 10.12.2008 20:23


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:16 Uhr.



SEO by vBSEO