Ankündigung

Einklappen
Keine Ankündigung bisher.

mpd Steuerung über GA´s

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

    [WireGate-Plugin] mpd Steuerung über GA´s

    So hier gleich mal ne änderung weils mir selbst zu unübersichtlich wurde:

    Das aktuelle Plugin das "fast" alles tut (natürlich in bezug auf mpd und alsa )
    ich hab alle vertipper, copy - paste fehler auszubügeln und die erklärungen zu aktualisieren. Wenn was auffällt wie man es noch weiter zusammenfassen könnte Bin ich für jeden Tipp Dankbar!

    Code:
    # Alsa Sound
    my $vol_alsa = "100%";    # Volume for amixer (alsa volume)
    my $Kanal = "Front";    # Channel of 7.1 soundcard
    my $Kanal2 = "Rear";    # Channel of the second speaker pair
    my $volkanal2 = "40%";    # The volume of the 2nd Speaker
    my $cardnum = "1";        # Hardware Number of the Sound card
    my $Speaker = "Speaker,1";    # Name of the output ( My soundcard is defined as following: Speaker,1 Front; Speaker,1 Rear
    ## mpd 
    my $mpdname = "mpd2";        # the name of the mpd instance
    my $IP = "192.168.178.33";    # The IP where the mpd Instanz is running
    my $Port = "6601";        # Port of the mpd Instanz
    my $volume_anfang = "35";     # This Volume will be set for mpd
    # Aus wenn Fernseher an
    my $Fernseher = '3/0/0';    # Fernseher
    # Verstaerker
    my $verstaerker = '13/1/2';    # Verstaerker on/off GA
    #Radio GA
    my $knx_addr_player2 = '13/1/0';# mpd Player on/off GA
    #Volume
    ## Vol Receive
    my $Vol_addr = '13/1/7'; # knx_address for volume up/down (receive)
    my $volumestep = 3;    # The stepsize for volume
    my $vol_up_data = "9";    # Data that ETS Busmonitor shows when you send a telegram from a switch to this GA
    my $vol_down_data = "1";
    #Vol send (brightness-value / helligkeitswert)
    my $knx_addr_vol = '13/1/22'; # The Volume will be send here from the plugin
    my $laut_GA = '13/1/23';    #the volume can be send here as brightness-value
    # GA for recorded message
    my $info_wz = '3/1/2';        # Info Switch wz
    # Partymodus
    my $Partymodus = '13/1/21';    # GA for Partymodus
    my $vol_party = "100%";     # With % Symbol
    # Quellen
    my $kueche = '13/1/5';        # küche enable/disable    
    my $kueche_nr = "1";        # mpd output number
    my $wohnz = '13/1/8';        # Wohnzimmer enable/disable
    my $wohnz_nr = "3";    # number of mpd output
    my $Bad = '13/1/15';        # enable/disable bathroom output
    my $Bad_nr = "2";        # mpd output number
    # Prev / next
    my $addr_pn= '13/1/14';    # Prev / Next
    # Playlist
    my $playlist = '13/1/24';    # the playlist number will be send here (value 1 - 255)
    my $playlist1 = "Antenne";
    my $playlist2 = "Christina";
    my $playlist3 = "Volker";
    my $playlist4 = "Kinderlieder";
    
    
    ##########################################################
    
    #################################################################
    # do not change anything below, all config stays above
    #################################################################
    
    # subscribe plugin and call it only when necessary
    $plugin_subscribe{$knx_addr_player2}{$plugname} = 1;
    $plugin_subscribe{$Fernseher}{$plugname} = 1;
    $plugin_subscribe{$Vol_addr}{$plugname} = 1;
    $plugin_subscribe{$Partymodus}{$plugname} = 1;
    $plugin_subscribe{$addr_pn}{$plugname} = 1;
    $plugin_subscribe{$laut_GA}{$plugname} = 1;
    $plugin_subscribe{$knx_addr_vol}{$plugname} = 1;
    $plugin_subscribe{$wohnz}{$plugname} = 1;
    $plugin_subscribe{$kueche}{$plugname} = 1;
    $plugin_subscribe{$Bad}{$plugname} = 1;
    $plugin_subscribe{$playlist}{$plugname} = 1;
    $plugin_info{$plugname.'_cycle'} = 0;
    
    # Radio on/off
    if ($msg{'dst'} eq ($knx_addr_player2))
    {
    if ($msg{'apci'} eq 'A_GroupValue_Write') # change volume
    {
    if ($msg{'value'} == 01) {
        
        knx_write($verstaerker,1,1);
        knx_write($Bad,0,1);
        knx_write($wohnz,1,1);
        knx_write($kueche,1,1);
        my $debug = `/etc/init.d/$mpdname restart && MPD_PORT=$Port MPD_HOST=$IP mpc volume $volume_anfang`;
            my $debug = `amixer -c $cardnum set $Speaker $Kanal $vol_alsa && amixer -c $cardnum set $Speaker $Kanal2 $volkanal2`;
            knx_write($playlist,1,1);
            return "Player 2 läuft";
    }
    
    
    if ($msg{'value'} == 00) {
        knx_write($verstaerker,0,1);  # Verstaerker aus
        my $debug = `MPD_HOST=$IP MPD_PORT=$Port mpc stop`;
        return "Player 2 aus";
    }
    }
    }
    # Aus wenn Fernseher an
    if ($msg{'dst'} eq ($Fernseher) && ($msg{'apci'} eq 'A_GroupValue_Write') && ($msg{'value'} == 1))    {
        knx_write( $knx_addr_player2, 0,1 );
        return "Player 2 aus Fernseher";
        }
        
     #################### Volume step ################################
    if ($msg{'dst'} eq ($Vol_addr))
    {    
     if ($msg{'apci'} eq 'A_GroupValue_Write')  # change volume
    {
    if ($msg{'data'} == $vol_up_data) {
        my $debug = `MPD_PORT=$Port MPD_HOST=$IP mpc volume +$volumestep`;
        return;
    }
    
    if ($msg{'data'} == $vol_down_data) {
        my $debug = `MPD_PORT=$Port MPD_HOST=$IP mpc volume -$volumestep`;
        return;
    }
    }
    }
    
    ###################### Vol receive ####################################
    if ($msg{'dst'} eq ($laut_GA) && ($msg{'apci'} eq 'A_GroupValue_Write'))
    {
        my $vol1 = decode_dpt5($msg{'data'});
        my $vol = round($vol1);
        my $debug = `MPD_PORT=$Port MPD_IP=$IP mpc volume $vol`; 
        my $debug = `MPD_PORT=$Port MPD_IP=$IP mpc volume > /tmp/test.txt`;
        knx_write($knx_addr_vol,$vol,5);
        return $vol1;
    }
    ###################### Partymodus ##########################################
    if ($msg{'dst'} eq ($Partymodus) && ($msg{'apci'} eq 'A_GroupValue_Write'))
    {
    
    if ($msg{'data'} == 01) {
        knx_write($kueche,00,1);
        knx_write($wohnz,1,1);
         my $debug = `amixer -c $cardnum set $Speaker $Kanal $vol_party`;
        return "Party";
    }
    
    if ($msg{'value'} == 00) {
       my $debug = `amixer -c $cardnum set $Speaker $Kanal $volume_anfang`;
       knx_write($kueche,01,1);
        return "Party ende";
    }
    else{
    return;
    }
    }
    ######################### prev / next #####################################################
    if ($msg{'dst'} eq ($addr_pn))
    {
    if ($msg{'apci'} eq 'A_GroupValue_Write') # change volume
    {
    if ($msg{'value'} == 1) {
        my $debug = `MPD_PORT=$Port MPD_HOST=$IP mpc next`;
        return "next";
    }
    
    if ($msg{'value'} == 0) {
        my $debug = `MPD_PORT=$Port MPD_HOST=$IP mpc prev`;
        return "prev";
    }
    }
    }
    ####################### Quellen ########################################
    # wohnz
         if ($msg{'dst'} eq $wohnz && ($msg{'apci'} eq 'A_GroupValue_Write'))
         {
           if (($msg{'value'} == 01)) {
            my $debug = `MPD_HOST=$IP MPD_PORT=$Port mpc enable $wohnz_nr`;
            return;
              }
              if (($msg{'value'} == 00)) {
            my $debug = `MPD_HOST=$IP MPD_PORT=$Port mpc disable $wohnz_nr`;
            return;
              }
              }
      
        # kueche
          if ($msg{'dst'} eq $kueche && ($msg{'apci'} eq 'A_GroupValue_Write'))
         {
            if (($msg{'data'} == 01)) {
            my $debug = `MPD_HOST=$IP MPD_PORT=$Port mpc enable $kueche_nr`;
            return "OK";
              }
              if (($msg{'data'} == 00)) {
            my $debug = `MPD_HOST=$IP MPD_PORT=$Port mpc disable $kueche_nr`;
            return "nOK";
              }else {return "fuck";}
              }
      
      
        # Bad
         if ($msg{'dst'} eq $Bad && ($msg{'apci'} eq 'A_GroupValue_Write'))
         {
            if (($msg{'value'} == 01)) {
            my $debug = `MPD_HOST=$IP MPD_PORT=$Port mpc enable $Bad_nr`;
            return;
              }
              if (($msg{'value'} == 00)) {
            my $debug = `MPD_HOST=$IP MPD_PORT=$Port mpc disable $Bad_nr`;
            return;
              }
              else {return;}
              }
    ###################### Playlist #########################################
    
    if ($msg{'dst'} eq ($playlist) && ($msg{'apci'} eq 'A_GroupValue_Write'))
    {
        if ($msg{'data'} == 01){
        my $playlist = $playlist1;
        my $debug = `MPD_PORT=$Port MPD_IP=$IP mpc clear`; 
        my $debug = `MPD_PORT=$Port MPD_IP=$IP mpc load $playlist`;
        my $debug = `MPD_PORT=$Port MPD_IP=$IP mpc play`; 
        return "1";
    }
    if ($msg{'data'} == 02){
        my $playlist = $playlist2;
        my $debug = `MPD_PORT=$Port MPD_IP=$IP mpc clear`; 
        my $debug = `MPD_PORT=$Port MPD_IP=$IP mpc load $playlist`;
        my $debug = `MPD_PORT=$Port MPD_IP=$IP mpc play`; 
        return "2";
    }
    if ($msg{'data'} == 03){
        my $playlist = $playlist3;
        my $debug = `MPD_PORT=$Port MPD_IP=$IP mpc clear`; 
        my $debug = `MPD_PORT=$Port MPD_IP=$IP mpc load $playlist`;
        my $debug = `MPD_PORT=$Port MPD_IP=$IP mpc play`; 
        return "3";
    }
    if ($msg{'data'} == 04){
        my $playlist = $playlist4;
        my $debug = `MPD_PORT=$Port MPD_IP=$IP mpc clear`; 
        my $debug = `MPD_PORT=$Port MPD_IP=$IP mpc load $playlist`;
        my $debug = `MPD_PORT=$Port MPD_IP=$IP mpc play`; 
        return "4";
    }
    else {
    my $pl = ($msg{'data'});
    return $pl;
    }}
    Die anderen Plugins schalten nur meine Verstärker zyklisch aus und eins aktualisiert die lautstärke. siehe nächster Post

    Gruß
    Angehängte Dateien

    #2
    Das Plugin das die lautstärke aktualisiert, falls sie nicht mit einer GA geändert wird:
    Code:
    my $lautstaerke = '13/1/22';
    my $volume_GA = '13/1/7';     #Volume that will be set
    my $Port = '6601';
    my $IP = '192.168.178.33';
    $plugin_info{$plugname.'_cycle'} = 60;
    $plugin_subscribe{$volume_GA}{$plugname} = 1;
    
    
    
    if ($msg{'dst'} eq ($volume_GA) && ($msg{'apci'} eq 'A_GroupValue_Write'))
    {
    my $debug = `MPD_PORT=$Port MPD_IP=$IP mpc volume > /tmp/test.txt`;
    use strict;
    my $FILE="/tmp/test.txt";
    open FH, "<$FILE";
    while(<FH>) {
      if( $_ =~ m/^volume:\s+(\d+)%\s+.*$/) {
        my $match=$1;
        print "$match\n";
    ##       my $volume = decode_dpt5($1); 
        knx_write($lautstaerke,$1,5);
        return $1;
      }
    }
    close FH;
    } else {
    my $debug = `MPD_PORT=$Port MPD_IP=$IP mpc volume > /tmp/test.txt`;
    use strict;
    my $FILE="/tmp/test.txt";
    open FH, "<$FILE";
    while(<FH>) {
      if( $_ =~ m/^volume:\s+(\d+)%\s+.*$/) {
        my $match=$1;
        print "$match\n";
    ##       my $volume = decode_dpt5($1); 
        knx_write($lautstaerke,$1,5);
        return $1;
      }
    }
    close FH;}
    Das verstärker auschalt Plugin:

    Code:
    my $Verstaerker = '13/1/2';
    my $Radio_an = '13/1/0';
    
    # Eigenen Aufruf-Zyklus auf 15*60 Sekunden setzen
    # der Aufrufzyklus ist unabhängig von der Taktzeit und muss kürzer sein!
    
    my $status = knx_read($Radio_an,0,1);
    $plugin_info{$plugname.'_cycle'} = 300;
    
    
    if ($status == 01) {
    return "laeuft";
    }
    
    if ($status == 00){
    sleep(5);
    knx_write($Verstaerker,0,1);
    return "aus";
    } else {
    return "fehler";
    }
    Gruß

    Kommentar


      #3
      *** aufgeräumt und zusammengefasst ******

      hoffentlich ein wenig übersichtlicher...

      Gruß

      Kommentar


        #4
        Hallo Volker

        Ist zwar OT aber in denem Garagentor-Plugin im SVN hast du in der ersten Zeile die Beschreibung der Plugins nicht angepasst. Dort steht immer noch IRTrans Aber ansonnsten sehen die Plugins wirklich gut aus. Du lernst echt schnell Wenn das so weiter geht, werde ich in Zukunft von dir lernen
        Gruss Patrik alias swiss

        Kommentar


          #5
          Den IR-Trans änder ich gleich

          Vielen Dank für das Kompliment, aber ich muss gestehen dass das script hauptsächlich aus tipps aus diesem forum besteht, ich hab sie mehr oder weniger nur zusammen kopiert und angepaßt...

          Und hierbei ging es um den WAF da hats "bresiert"
          muss für meine neuen ideen etwas luft nach oben verschaffen aber Psssst.... sie weiß noch nix davon.

          Gruß

          Kommentar


            #6
            Zitat von vlamers Beitrag anzeigen
            Vielen Dank für das Kompliment, aber ich muss gestehen dass das script hauptsächlich aus tipps aus diesem forum besteht, ich hab sie mehr oder weniger nur zusammen kopiert und angepaßt...
            Ich denke das muss nicht als entschuldigung herhalten: das ist ja nun der tiefere Sinn von OSS, das nicht jeder das Rad täglich neu erfinden muss und es einfach kopieren kann&darf (Solange er kapiert hat, das er das nicht als eigene Erfindung dann patentieren & verkaufen darf.. und es ebenso GPL ist.. privaten Code gibbet da nicht, ist eigentlich einfach )

            Makki
            EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
            -> Bitte KEINE PNs!

            Kommentar


              #7
              Hi, tolle Arbeit. Ich hab den Player für mich so angepasst, dass er Multiplayer fähig ist, so dass ich das Plugin nicht für zB 4 MPD's 4 mal einsetzen muss.

              Im Anhang ist das modifizierte Plugin von vlamers mit der conf Datei und Beispiel XML für die Cometvisu
              Angehängte Dateien

              Kommentar


                #8
                Hi Respekt! Das sieht mal kompliziert aus auf den ersten Blick.
                50% davon kapier ich erstmal nicht auf anhieb aber das werd ich mir bei Gelegenheit mal zu Gemüte führen.

                Den auskommentierten Teil unten könnte man weg lassen?

                Wenn es geht kannst du es ja ins svn schieben. Das mpd_player2 kann man dann entfernen wird ja hiermit ersetzt.

                Gruß

                Kommentar


                  #9
                  Klasse, laufen bei dir die 4 MPDs problemlos parallel auf dem Wiregate?

                  Kommentar


                    #10
                    Ist bei mir obergrenze aber ja die Laufen

                    Gruß

                    Kommentar


                      #11
                      AW: mpd Steuerung über GA´s

                      @lars
                      Hab mir das Plugin heute mal kurz angesehen.

                      Folgendes:
                      Hast du für jeden mpd bloß ein output? Oder wie werden die zu/ab geschalten?

                      Evtl wäre eine Option nicht schlecht das der mpd gleich abspielt wenn er gestartet wird.

                      Ansonsten hervorragendes Plugin! bin begeistert!

                      Gruß

                      Gesendet von meinem GT-N7100 mit Tapatalk 2

                      Kommentar


                        #12
                        Also ich arbeite auch mit Volkers Plugin,

                        Ansagen stehen noch aus aber die brauch ich auch noch ^^

                        Hier mal meine Visu basierend auf xxapi, die LS sind je MPD verriegelt, sobald man von MPD1 auf MPD2 umschaltet wird der LS in MPD 1 ausgeschaltet.

                        Playlist läuft auch über Volkers Plugin und HS Bausteine in dem freien Feld möchte ich dann noch den Sender bzw. Cover anzeigen
                        Angehängte Dateien
                        Gruss Mathias

                        Kommentar


                          #13
                          Zitat von larsknx Beitrag anzeigen
                          Hi, tolle Arbeit. Ich hab den Player für mich so angepasst, dass er Multiplayer fähig ist, so dass ich das Plugin nicht für zB 4 MPD's 4 mal einsetzen muss.

                          Im Anhang ist das modifizierte Plugin von vlamers mit der conf Datei und Beispiel XML für die Cometvisu
                          Hallo Larsknx,

                          könntest Du bitte mal Deine asound.conf und Deine mpd.conf (bitte mpd1 und mpd2) als Datei anhängen! Ich habe immer noch Probleme, den zweiten mpd ohne pulseaudio ans Laufen zu bekommen!

                          Gruß Norbert

                          Kommentar


                            #14
                            Klar, Dateien sind anbei, aber ich nutze pulse, weiss daher nicht, obs was für dich bringt.

                            Ich hab pro MPD Player nur 2 Outputs, einen ohne und einen mit Equalizer, da ich die Soundkarte mit den 4 Ausgängen rein als Zuspieler für den Russound C5 nutze, also nicht für Zonen, das macht ja bei mir der Russound.

                            Hab auch nochmal meine pulseAudio default.pa mit reingepackt, dann wird das mit meinem Zuspielern vielleicht noch klarer.

                            Ich werde das Plugin wie gewünscht um Autotstartfunktionen etc. erweitern.

                            Wobei wie gesagt, ich hab vlamers statische GA Definitionen eigentlich nur um ein Array bzw. Hash ersetzt und somit dynamisiert, um nicht für jeden MPD Player ein neues Plugin laden zu müssen. Somit dürfte sich zu vlamers Plugin eigentlich kaum etwas ändern.
                            Angehängte Dateien

                            Kommentar


                              #15
                              Moin,

                              könnt ihr mir kurz erklären, warum ihr zur Lautstärkeregelung mal den amixer nutzt und mal mpc (vol up/down)? Liegt es daran, dass ihr zwei Ausgänge mit einem mpc laufen lasst (zumindest vlamers mit küche/wohnzimmer)??

                              Grüße

                              Kommentar

                              Lädt...
                              X