Ankündigung

Einklappen
Keine Ankündigung bisher.

XBMC Fernsteuerung und "Radio"

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [WireGate-Plugin] 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

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

    Stefan

    Kommentar


      #3
      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)...

      Kommentar


        #4
        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 & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
        -> Bitte KEINE PNs!

        Kommentar


          #5
          @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...

          Kommentar


            #6
            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 & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
            -> Bitte KEINE PNs!

            Kommentar


              #7
              @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.

              Kommentar


                #8
                Hallo,

                ich hab jetzt vergeblich versucht das Plugin in Verbindung mit meinem XBMC(Raspbmc) auf meinem Raspberry zum laufen zu bringen, leider ohne Erfolg.
                Also folgende Parameter sind vorhanden.
                -XBMC(Raspbmc) Frodo12.1 auf dem Pi
                -Play/Pause und Stop Switch auf der Cometvisu. Gruppenadressen sind in
                der CV eingetragen. Sowie im Plugin.
                -IP des Raspi, Web Port, Benutzer und Passwort sind auch eingetragen.

                Ich kann XBMC auch aus dem Webinterface sowie über die IPhone App bedienen.Dort funktionieren Play/Pause, Stop

                Nur reagiert es nicht auf meine Switches/Gruppenadressen aus der CV. Direktes senden aus der ETS scheitert auch.

                Gäbe es vielleicht irgendwie ne Möglichkeit das Plugin irgendwie/wo auf seine Funktion zu überprüfen. Vielleicht direkt über die Putty Konsole auf dem Pi.
                Oder per Befehl über den Browser?

                Müsste vielleicht noch ein Paket nachinstalliert werden? Raspbmc ist ja ein abgespecktes XBMC.

                Kommentar


                  #9
                  Hallo Obiwan,

                  funktioniert jetzt deine Steuerung über CV? Vielleicht könntest du mir ja ein paar Tips geben wie ich es auch schaffe die CV oder einen Tastsensor einzurichten....

                  Mfg Sean

                  Kommentar


                    #10
                    Ich hab noch mit dem URL-Trigger in der CV experimentiert.
                    Das ganze kannst du hier nachlesen.
                    https://knx-user-forum.de/cometvisu/...nis-frage.html
                    Funktioniert soweit.
                    Vorläufig hab ich aber aber das Webinterface Addon "Awxi" über das Web Widget eingebunden. Funktioniert auch sehr gut und bietet mehr Möglichkeiten.

                    Kommentar

                    Lädt...
                    X