Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Socat Problem - Squeezebox Telnet

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #16
    Geil!
    Werde das mal ausprobieren!
    Gibt es eine Befehlsliste zur Steuerung der SB?

    Kann man ggf einen Sender (-platz) bzw Titel direkt aufrufen?

    Danke und Grüße,
    Lio

    Kommentar


      #17
      Ja geht wohl, ich nutze nur die Radio-Funktion und hab dann die Sender auf den entsprechenden Favoriten liegen.

      squeezeboxserver-ip:9000 im Browser aufrufen, dann: Hilfe -> Technische Informationen -> CLI Commandline Interface

      Dort findest du die Doku zum CLI worauf das Plugin aufsetzt.
      Habe mich ansonsten bemüht meine zusätzlichen Modifikationen halbwegs zu dokumentieren.
      Umgezogen? Ja! ... Fertig? Nein!
      Baustelle 2.0 !

      Kommentar


        #18
        ja Deine Doku zum Plugin ist gut!

        Wenn ich die CLI kurz überfliege, sollte es auch möglich sein x-belibiege Meldungen auf dem Display anzuzeigen?!?!


        Grüße,
        Lio

        Kommentar


          #19
          bin ich auch drüber gestolpert. Wollte mal mit einer zyklischen Temperaturmeldung am Morgen für die Außentemperatur anfangen. Mal sehen wann ich dazu komme. Da die Box bei uns im Bad steht wäre auch die Speichertemperatur oder ähnliches denkbar.
          Umgezogen? Ja! ... Fertig? Nein!
          Baustelle 2.0 !

          Kommentar


            #20
            Geht

            Hier mal ein statischer Text:

            Code:
            # Show / Trigger mit beliebigem Wert auf show_ga, subscribe nicht vergessen
            if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $show_ga && defined $msg{'value'}) {
                my $command = $player_id . " show line1:Guten%20Tag%20lieber line2:User duration:30 centered:1";
                my $return_val = sendCommand($command);
            }
            Ich nenne die GAs immer nach den Befehlen aus dem CLI.

            Weil es so schön war hier nochmal was etwas dynamischeres - Die Aussentemperatur:
            Code:
            my $temp = knx_read("7/0/0",0);
            my $temp_trigger = "1/2/100";
            $plugin_subscribe{$temp_trigger}{$plugname} = 1;
            if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $temp_trigger && defined $msg{'value'}) {
                my $command = $player_id . " show line1:Draussen%20sind%20gerade line2:" . $temp . "%20°C duration:30 centered:1";
                my $return_val = sendCommand($command);
                plugin_log($plugname, $temp);
            Umgezogen? Ja! ... Fertig? Nein!
            Baustelle 2.0 !

            Kommentar


              #21
              goil!


              probier ich aus!

              reicht es, den schnipsel in Dein Haupt-Plugin zu kopieren, oder muss ich ein neues anlegen mit dem Socket?
              Was macht temp_trigger?

              Kommentar


                #22
                Hallo,

                hab das jetzt mal ergänzt,
                wenn ich triggere ut sich nix im Log steht:
                Code:
                2012-07-03 23:12:48.632,Squeezebox,open of 192.168.2.255 : 50105 failed: Permission denied 2012-07-03 23:12:48.633,Squeezebox,opened Socket 121 2012-07-03 23:12:50.093,Squeezebox,open of 192.168.2.255 : 50105 failed: Permission denied 2012-07-03 23:12:50.093,Squeezebox,opened Socket 121 2012-07-03 23:13:13.558,Squeezebox,open of 192.168.2.255 : 50105 failed: Permission denied 2012-07-03 23:13:13.558,Squeezebox,opened Socket 121 2012-07-03 23:13:15.414,Squeezebox,open of 192.168.2.255 : 50105 failed: Permission denied 2012-07-03 23:13:15.415,Squeezebox,opened Socket 121
                Das ist der localhost.
                Was muss ich da noch ändern?


                Hier mal mein Quellcode:

                Code:
                # Steuern der Squeezeboxen
                # socat notwendig
                # V0.2 2012-06-28
                
                ### Im WG muss eine Socketverbindung mit folgenden Parametern erstellt werden
                # Socket1: tcp-connect, Socket: IP_OF_SqueezeServer:9090
                # Socket2: udp-datagram, Socket: localhost:50105, Optionen: bind=localhost:50106,reuseaddr
                
                ### Definitionen 
                
                # 00%3A04%3A20%3A1f%3A92%3Ac4
                # 00:04:20:29:25:e1
                my $player_id = "00%3A04%3A20%3A29%3A25%3Ae1";   # Player ID = Mac Adresse Trennzeichen "%3A"
                
                my $power_ga = "8/1/0";  # "power" # DPT1 1=on 0=off
                my $play_ga = "8/1/1";  # "play" # Trigger DPT1 Wert egal
                my $mute_ga = "8/1/2";  # "mixer muting" # DPT1 1=mute 0=unmute
                my $vol_trigger_ga = "8/1/3";  # "mixer volume" +/- 10% Trigger DPT1 1=vol-up 0=vol-down
                my $volume_ga = "8/1/5";  # "mixer volume" # absoluter Wert  DPT5
                my $pause_ga = "8/1/4";  # "button pause" # Trigger DPT1 Wert egal
                my $stop_ga = "8/1/6"; # "button stop" # Trigger DPT1 Wert egal
                my $favorites_ga = "8/1/7"; # "favorites playlist play item_id:" # DPT 6.020 Nummer des Favoriten
                my $temp = knx_read("15/5/12",0); # Schreibt Temperatur Aussenfühler Satelit in Variable
                my $temp_trigger = "4/1/254"; # Löst die Anzeige in der Squeezebox aus-Arbeitszimmer Taster4
                
                
                my $socknum = 121; # Eindeutige Nummer des Sockets +1
                my $send_ip = "192.168.2.255"; # Sendeport (UDP, siehe in Socket-Einstellungen)
                my $send_port = "50106"; # Sendeport (UDP, siehe in Socket-Einstellungen)
                my $recv_ip = "192.168.2.255"; # Empfangsport (UDP, siehe in Socket-Einstellungen)
                my $recv_port = "50105"; # Empfangsport (UDP, siehe in Socket-Einstellungen)
                
                ### Ende Definitionen
                
                # Eigenen Aufruf-Zyklus setzen
                $plugin_info{$plugname.'_cycle'} = 0;
                
                # Plugin an Gruppenadresse "anmelden"
                $plugin_subscribe{$power_ga}{$plugname} = 1;
                $plugin_subscribe{$play_ga}{$plugname} = 1;
                $plugin_subscribe{$mute_ga}{$plugname} = 1;
                $plugin_subscribe{$vol_trigger_ga}{$plugname} = 1;
                $plugin_subscribe{$volume_ga}{$plugname} = 1;
                $plugin_subscribe{$pause_ga}{$plugname} = 1;
                $plugin_subscribe{$stop_ga}{$plugname} = 1;
                $plugin_subscribe{$favorites_ga}{$plugname} = 1;
                $plugin_subscribe{$temp_trigger}{$plugname} = 1;
                
                # Socket erstellen
                if (!$socket[$socknum]) {
                        $socket[$socknum] = IO::Socket::INET->new(LocalPort => $recv_port,
                                                  Proto => "udp",
                                                  LocalAddr => $recv_ip,
                                                  PeerPort  => $send_port,
                                                  PeerAddr  => $send_ip,
                                                  ReuseAddr => 1
                                                   )
                    or plugin_log($plugname, "open of $recv_ip : $recv_port failed: $!");
                    $socksel->add($socket[$socknum]); # add socket to select
                    $plugin_socket_subscribe{$socket[$socknum]} = $plugname; # subscribe plugin
                    plugin_log($plugname, "opened Socket $socknum");
                } 
                
                # Nur bei einem Wert auf GA reagieren
                
                
                # Temp in Squeezebox Küche
                if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $temp_trigger && defined $msg{'value'}) {
                    my $command = $player_id . " show line1:Draussen%20sind%20gerade line2:" . $temp . "%20°C duration:30 centered:1";
                    my $return_val = sendCommand($command);
                #    plugin_log($plugname, $temp);
                
                }
                
                
                
                
                # Power Befehl / 0=off 1=on
                if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $power_ga && defined $msg{'value'}) {
                    my $command = $player_id . " power " . $msg{'value'};
                    my $return_val = sendCommand($command);
                 #   plugin_log($plugname, $return_val);
                }
                
                # Play (last) = Power on / Trigger mit beliebigem Wert
                if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $play_ga && defined $msg{'value'}) {
                    my $command = $player_id . " play";
                    my $return_val = sendCommand($command);
                #    plugin_log($plugname, $return_val);
                }
                
                # Mute Befehl / Trigger mit beliebigem Wert
                if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $mute_ga && defined $msg{'value'}) {
                    my $command = $player_id . " mixer muting " . $msg{'value'};
                    my $return_val = sendCommand($command);
                #    plugin_log($plugname, $return_val);
                }
                
                # Volume Down Befehl -10 Prozent / DPT 1 Trigger auf 0
                if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $vol_trigger_ga && $msg{'value'}==0) {
                    my $command = $player_id . " mixer volume -10";
                    my $return_val = sendCommand($command);
                #    plugin_log($plugname, $return_val);
                }
                
                # Volume Down Befehl +10 Prozent / DPT 1 Trigger auf 1
                if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $vol_trigger_ga && $msg{'value'}==1) {
                    my $command = $player_id . " mixer volume +10";
                    my $return_val = sendCommand($command);
                #    plugin_log($plugname, $return_val);
                }
                
                # Lautstärke setzen / DPT 5 in %
                if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $volume_ga && defined $msg{'value'}) {
                    my $command = $player_id ." mixer volume " .$msg{'value'};
                    my $return_val = sendCommand($command);
                #    plugin_log($plugname, $return_val);
                }
                
                # Pause Befehl / Trigger mit beliebigem Wert
                if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $pause_ga && defined $msg{'value'}) {
                    my $command = $player_id . " button pause";
                    my $return_val = sendCommand($command);
                #    plugin_log($plugname, $return_val);
                }
                # Stop Befehl über Button / Trigger mit beliebigem Wert
                if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $stop_ga && defined $msg{'value'}) {
                    my $command = $player_id . " button stop";
                    my $return_val = sendCommand($command);
                #    plugin_log($plugname, $return_val);
                }
                
                # Favoriten wählen / DPT 6.020 als integer der Favoritennummer
                if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $favorites_ga && defined $msg{'value'}) {
                    my $command = $player_id ." favorites playlist play item_id:" .$msg{'value'};
                    my $return_val = sendCommand($command);
                #    plugin_log($plugname, $return_val);
                }
                
                # Log
                return 0;
                
                sub sendCommand {
                
                    my $command = $_[0]."\n";
                    plugin_log($plugname, $command);
                    syswrite($socket[$socknum], $command);
                }

                Danke und Grüße,
                Lio

                Kommentar


                  #23
                  Die IP des socat im Script bitte wieder zurück auf localhost. ($send_ip, $reciv_ip)

                  Die Socketeinstellungen hast Du bis auf die Squeeze-Server-IP gemacht wie im Beitrag Nr. 1 (Bild) bzw. in den ersten Zeilen des Scriptes beschrieben ???

                  Kurz zur Info:
                  Wo läuft der Squeezebox-Server -> IP ???
                  Wiregate-IP ???
                  Squeezebox-IP ???


                  P.S.: Ich hab den Code nochmal ein bisschen übersichtlicher gemacht, aber das wird heute nix mehr im SVN. Ich geb dann Meldung.
                  Umgezogen? Ja! ... Fertig? Nein!
                  Baustelle 2.0 !

                  Kommentar


                    #24
                    Die Leerzeilen im Log sind jetzt auch weg.
                    Favoriten implementiert und Funktion->GA etwas übersichtlicher.
                    Plugin_subscribe wird nun auch für zukünftige Befehle automatisch erledigt.

                    Code:
                    # Steuern der Squeezeboxen
                    # socat notwendig
                    # V0.2 2012-06-30
                    
                    ### Im WG muss eine Socketverbindung mit folgenden Parametern erstellt werden
                    # Socket1: tcp-connect, Socket: IP_OF_SqueezeServer:9090
                    # Socket2: udp-datagram, Socket: localhost:50105, Optionen: bind=localhost:50106,reuseaddr
                    
                    ### Definitionen 
                    
                    # 00%3A04%3A20%3A1f%3A92%3Ac4
                    # 00:04:20:1f:92:c4
                    my $player_id = "00%3A04%3A20%3A1f%3A92%3Ac4";   # Player ID = Mac Adresse Trennzeichen "%3A"
                    
                    my %function = ("power"=>"8/1/0",
                                    "play"=>"8/1/1",
                                    "mute"=>"8/1/2",
                                    "vol_trigger"=>"8/1/3",
                                    "volume"=>"8/1/5",
                                    "pause"=>"8/1/4",
                                    "stop"=>"8/1/6",
                                    "favorites"=>"8/1/7",
                                    "show"=>"1/2/35");
                    
                    my $socknum = 121; # Eindeutige Nummer des Sockets +1
                    my $send_ip = "localhost"; # Sendeport (UDP, siehe in Socket-Einstellungen)
                    my $send_port = "50106"; # Sendeport (UDP, siehe in Socket-Einstellungen)
                    my $recv_ip = "localhost"; # Empfangsport (UDP, siehe in Socket-Einstellungen)
                    my $recv_port = "50105"; # Empfangsport (UDP, siehe in Socket-Einstellungen)
                    
                    ### Ende Definitionen
                    
                    # Eigenen Aufruf-Zyklus setzen
                    $plugin_info{$plugname.'_cycle'} = 86400;
                    
                    # Plugin an Gruppenadresse "anmelden"
                    while (my($key,$ga) = each %function)
                    {
                      $plugin_subscribe{$function{$key}}{$plugname} = 1;
                    }
                    
                    # Beispiel für Hash-Zuordnung
                    # $key = power
                    # {$function{power} = "8/1/0"
                    
                    # Socket erstellen
                    if (!$socket[$socknum]) {
                            $socket[$socknum] = IO::Socket::INET->new(LocalPort => $recv_port,
                                                      Proto => "udp",
                                                      LocalAddr => $recv_ip,
                                                      PeerPort  => $send_port,
                                                      PeerAddr  => $send_ip,
                                                      ReuseAddr => 1
                                                       )
                        or plugin_log($plugname, "open of $recv_ip : $recv_port failed: $!");
                        $socksel->add($socket[$socknum]); # add socket to select
                        $plugin_socket_subscribe{$socket[$socknum]} = $plugname; # subscribe plugin
                        plugin_log($plugname, "opened Socket $socknum");
                    } 
                    
                    # Nur bei einem Wert auf GA reagieren
                    
                    # Power Befehl / 0=off 1=on
                    if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{power} && defined $msg{'value'}) {
                        my $command = $player_id . " power " . $msg{'value'};
                        my $return_val = sendCommand($command);
                     #   plugin_log($plugname, $return_val);
                    }
                    
                    # Play (last) = Power on / Trigger mit beliebigem Wert
                    if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{play} && defined $msg{'value'}) {
                        my $command = $player_id . " play";
                        my $return_val = sendCommand($command);
                    #    plugin_log($plugname, $return_val);
                    }
                    
                    # Mute Befehl / Trigger mit beliebigem Wert
                    if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{mute} && defined $msg{'value'}) {
                        my $command = $player_id . " mixer muting " . $msg{'value'};
                        my $return_val = sendCommand($command);
                    #    plugin_log($plugname, $return_val);
                    }
                    
                    # Volume Down Befehl -10 Prozent / DPT 1 Trigger auf 0
                    if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{vol_trigger} && $msg{'value'}==0) {
                        my $command = $player_id . " mixer volume -10";
                        my $return_val = sendCommand($command);
                    #    plugin_log($plugname, $return_val);
                    }
                    
                    # Volume Down Befehl +10 Prozent / DPT 1 Trigger auf 1
                    if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{vol_trigger} && $msg{'value'}==1) {
                        my $command = $player_id . " mixer volume +10";
                        my $return_val = sendCommand($command);
                    #    plugin_log($plugname, $return_val);
                    }
                    
                    # Lautstärke setzen / DPT 5 in %
                    if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{volume} && defined $msg{'value'}) {
                        my $command = $player_id ." mixer volume " .$msg{'value'};
                        my $return_val = sendCommand($command);
                    #    plugin_log($plugname, $return_val);
                    }
                    
                    # Pause Befehl / Trigger mit beliebigem Wert
                    if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{pause} && defined $msg{'value'}) {
                        my $command = $player_id . " button pause";
                        my $return_val = sendCommand($command);
                    #    plugin_log($plugname, $return_val);
                    
                    }
                    # Stop Befehl über Button / Trigger mit beliebigem Wert
                    if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{stop} && defined $msg{'value'}) {
                        my $command = $player_id . " button stop";
                        my $return_val = sendCommand($command);
                    #    plugin_log($plugname, $return_val);
                    }
                    
                    # Favoriten wählen / DPT 6.020 als integer der Favoritennummer
                    if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{favorites} && defined $msg{'value'}) {
                        my $command = $player_id ." favorites playlist play item_id:" .$msg{'value'};
                        my $return_val = sendCommand($command);
                    #    plugin_log($plugname, $return_val);
                    }
                    
                    # Display / Trigger mit beliebigem Wert
                    if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $function{show} && defined $msg{'value'}) {
                        my $command = $player_id . " show line1:Mirko%20und line2:Juliane duration:30 centered:1";
                        my $return_val = sendCommand($command);
                    #    plugin_log($plugname, $return_val);
                    }
                    
                    #Special Notifications
                    #Aussentemperatur + Speicher anzeigen
                    my $temp_aussen = knx_read("7/0/0",0);
                    my $temp_speicher = knx_read("7/0/20",0);
                    my $temp_trigger = "1/2/100";
                    $plugin_subscribe{$temp_trigger}{$plugname} = 1;
                    if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $temp_trigger && defined $msg{'value'}) {
                        my $command = $player_id . " show line1:Aussentemperatur%20" . $temp_aussen . "%20°C line2:Speicher%20" . $temp_speicher . "%20°C duration:30 centered:1";
                        my $return_val = sendCommand($command);
                    }
                    
                    # Log
                    return 0;
                    
                    sub sendCommand {
                    
                        my $request = $_[0]."\n";
                        plugin_log($plugname, $_[0]);
                        syswrite($socket[$socknum], $request);
                    }
                    Umgezogen? Ja! ... Fertig? Nein!
                    Baustelle 2.0 !

                    Kommentar


                      #25
                      Wo läuft der Squeezebox-Server -> IP ??? 192.168.2.50
                      Wiregate-IP ??? 192.168.2.250
                      Squeezebox-IP ??? 192.168.2.21


                      Kann Dir mal heute abend ein Bild von der Socet einstellung schicken.
                      Die meldung taucht nun nicht mehr im Log auf, aber die Squezzebox reagiert auch nicht.
                      Muss bei der auch noch was eingestellt werden?

                      Danke und Grüße,
                      Lio

                      Kommentar


                        #26
                        anbei die socat einstellungen
                        Angehängte Dateien

                        Kommentar


                          #27
                          Hallo Lio,

                          bitte auch die Kommentare bzw. Beschreibung der Plugins lesen

                          # Socket1: tcp-connect, Socket: IP_OF_SqueezeServer:9090
                          # Socket2: udp-datagram, Socket: localhost:50105, Optionen: bind=localhost:50106,reuseaddr

                          Die Squeezeboxen werden ja über den Server gesteuert.

                          Also ersetze Deine 192.168.2.21/30 durch 192.168.2.50. M.m.n. reicht eine Verbindung zum Squeeze-Server also nur ein Eintrag in den Socketeinstellungen. Welche Squeezebox du wählst gibst Du im Plugin ja mit der Mac-Adresse/Player-ID an.

                          Ansonsten würde ich empfehlen beim Wiregate mit "localhost" statt 192.168.2.255 zu arbeiten. Die x.x.x.255 ist m.M. nach ein Broadcast Aufruf.

                          Also Deine 192.168.2.255 in den Socketeinstellungen und im Plugin durch localhost ersetzten. Das ist eindeutig.
                          Umgezogen? Ja! ... Fertig? Nein!
                          Baustelle 2.0 !

                          Kommentar


                            #28
                            Hallo,
                            habe die Änderungen nun vorgenommen-leider ohne erfolg.
                            Habe die Firewall mal abgeschaltet -aber auch nichts.
                            Muss ich bei den SB noch was einstellen?
                            geprüft habe ich Play, ON/OFF und Displayanzeige.
                            Getriggert jeweils über Taster bzw Gruppenmpnitor der ETS

                            gibt es eine Möglichkeit zu sehen wohin was geht?

                            Danke und GRüße,
                            Lio

                            Kommentar


                              #29
                              Zeig doch nochmal Socket, Plugin und Plugin Logdatei.

                              Squeezboxserver:9000 ist im Browser erreichbar?
                              Umgezogen? Ja! ... Fertig? Nein!
                              Baustelle 2.0 !

                              Kommentar


                                #30
                                Ja, Server ist erreichbar und ich kann über Browser und Server die SB steuern.

                                Code:
                                # Steuern der Squeezeboxen
                                # socat notwendig
                                # V0.2 2012-06-28
                                
                                ### Im WG muss eine Socketverbindung mit folgenden Parametern erstellt werden
                                # Socket1: tcp-connect, Socket: IP_OF_SqueezeServer:9090
                                # Socket2: udp-datagram, Socket: localhost:50105, Optionen: bind=localhost:50106,reuseaddr
                                
                                ### Definitionen 
                                
                                # 00%3A04%3A20%3A1f%3A92%3Ac4
                                # 00:04:20:29:25:e1
                                my $player_id = "00%3A04%3A20%3A29%3A25%3Ae1";   # Player ID = Mac Adresse Trennzeichen "%3A"
                                
                                my $power_ga = "4/1/254";  # "power" # DPT1 1=on 0=off
                                my $play_ga = "8/1/1";  # "play" # Trigger DPT1 Wert egal
                                my $mute_ga = "8/1/2";  # "mixer muting" # DPT1 1=mute 0=unmute
                                my $vol_trigger_ga = "8/1/3";  # "mixer volume" +/- 10% Trigger DPT1 1=vol-up 0=vol-down
                                my $volume_ga = "8/1/5";  # "mixer volume" # absoluter Wert  DPT5
                                my $pause_ga = "8/1/4";  # "button pause" # Trigger DPT1 Wert egal
                                my $stop_ga = "8/1/6"; # "button stop" # Trigger DPT1 Wert egal
                                my $favorites_ga = "8/1/7"; # "favorites playlist play item_id:" # DPT 6.020 Nummer des Favoriten
                                my $temp = knx_read("15/5/12",0); # Schreibt Temperatur Aussenfühler Satelit in Variable
                                my $temp_trigger = "4/1/254"; # Löst die Anzeige in der Squeezebox aus-Arbeitszimmer Taster4
                                
                                
                                my $socknum = 121; # Eindeutige Nummer des Sockets +1
                                my $send_ip = "localhost"; # Sendeport (UDP, siehe in Socket-Einstellungen)
                                my $send_port = "50106"; # Sendeport (UDP, siehe in Socket-Einstellungen)
                                my $recv_ip = "localhost"; # Empfangsport (UDP, siehe in Socket-Einstellungen)
                                my $recv_port = "50105"; # Empfangsport (UDP, siehe in Socket-Einstellungen)
                                
                                ### Ende Definitionen
                                
                                # Eigenen Aufruf-Zyklus setzen
                                $plugin_info{$plugname.'_cycle'} = 0;
                                
                                # Plugin an Gruppenadresse "anmelden"
                                $plugin_subscribe{$power_ga}{$plugname} = 1;
                                $plugin_subscribe{$play_ga}{$plugname} = 1;
                                $plugin_subscribe{$mute_ga}{$plugname} = 1;
                                $plugin_subscribe{$vol_trigger_ga}{$plugname} = 1;
                                $plugin_subscribe{$volume_ga}{$plugname} = 1;
                                $plugin_subscribe{$pause_ga}{$plugname} = 1;
                                $plugin_subscribe{$stop_ga}{$plugname} = 1;
                                $plugin_subscribe{$favorites_ga}{$plugname} = 1;
                                $plugin_subscribe{$temp_trigger}{$plugname} = 1;
                                
                                # Socket erstellen
                                if (!$socket[$socknum]) {
                                        $socket[$socknum] = IO::Socket::INET->new(LocalPort => $recv_port,
                                                                  Proto => "udp",
                                                                  LocalAddr => $recv_ip,
                                                                  PeerPort  => $send_port,
                                                                  PeerAddr  => $send_ip,
                                                                  ReuseAddr => 1
                                                                   )
                                    or plugin_log($plugname, "open of $recv_ip : $recv_port failed: $!");
                                    $socksel->add($socket[$socknum]); # add socket to select
                                    $plugin_socket_subscribe{$socket[$socknum]} = $plugname; # subscribe plugin
                                    plugin_log($plugname, "opened Socket $socknum");
                                } 
                                
                                # Nur bei einem Wert auf GA reagieren
                                
                                
                                # Temp in Squeezebox Küche
                                if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $temp_trigger && defined $msg{'value'}) {
                                    my $command = $player_id . " show line1:Draussen%20sind%20gerade line2:" . $temp . "%20°C duration:30 centered:1";
                                    my $return_val = sendCommand($command);
                                #    plugin_log($plugname, $temp);
                                
                                }
                                
                                
                                
                                
                                # Power Befehl / 0=off 1=on
                                if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $power_ga && defined $msg{'value'}) {
                                    my $command = $player_id . " power " . $msg{'value'};
                                    my $return_val = sendCommand($command);
                                 #   plugin_log($plugname, $return_val);
                                }
                                
                                # Play (last) = Power on / Trigger mit beliebigem Wert
                                if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $play_ga && defined $msg{'value'}) {
                                    my $command = $player_id . " play";
                                    my $return_val = sendCommand($command);
                                #    plugin_log($plugname, $return_val);
                                }
                                
                                # Mute Befehl / Trigger mit beliebigem Wert
                                if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $mute_ga && defined $msg{'value'}) {
                                    my $command = $player_id . " mixer muting " . $msg{'value'};
                                    my $return_val = sendCommand($command);
                                #    plugin_log($plugname, $return_val);
                                }
                                
                                # Volume Down Befehl -10 Prozent / DPT 1 Trigger auf 0
                                if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $vol_trigger_ga && $msg{'value'}==0) {
                                    my $command = $player_id . " mixer volume -10";
                                    my $return_val = sendCommand($command);
                                #    plugin_log($plugname, $return_val);
                                }
                                
                                # Volume Down Befehl +10 Prozent / DPT 1 Trigger auf 1
                                if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $vol_trigger_ga && $msg{'value'}==1) {
                                    my $command = $player_id . " mixer volume +10";
                                    my $return_val = sendCommand($command);
                                #    plugin_log($plugname, $return_val);
                                }
                                
                                # Lautstärke setzen / DPT 5 in %
                                if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $volume_ga && defined $msg{'value'}) {
                                    my $command = $player_id ." mixer volume " .$msg{'value'};
                                    my $return_val = sendCommand($command);
                                #    plugin_log($plugname, $return_val);
                                }
                                
                                # Pause Befehl / Trigger mit beliebigem Wert
                                if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $pause_ga && defined $msg{'value'}) {
                                    my $command = $player_id . " button pause";
                                    my $return_val = sendCommand($command);
                                #    plugin_log($plugname, $return_val);
                                }
                                # Stop Befehl über Button / Trigger mit beliebigem Wert
                                if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $stop_ga && defined $msg{'value'}) {
                                    my $command = $player_id . " button stop";
                                    my $return_val = sendCommand($command);
                                #    plugin_log($plugname, $return_val);
                                }
                                
                                # Favoriten wählen / DPT 6.020 als integer der Favoritennummer
                                if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $favorites_ga && defined $msg{'value'}) {
                                    my $command = $player_id ." favorites playlist play item_id:" .$msg{'value'};
                                    my $return_val = sendCommand($command);
                                #    plugin_log($plugname, $return_val);
                                }
                                
                                # Log
                                return 0;
                                
                                sub sendCommand {
                                
                                    my $command = $_[0]."\n";
                                    plugin_log($plugname, $command);
                                    syswrite($socket[$socknum], $command);
                                }
                                Code:
                                Squeezebox_cycle    0
                                Squeezebox_last    1341352030.94612
                                Squeezebox_lastsaved    1341352030
                                Squeezebox_meminc    0
                                Squeezebox_memstart    0
                                Squeezebox_result    0
                                Squeezebox_runtime    0
                                Squeezebox_ticks    23
                                Squeezebox_timeout_err    0
                                Der Server läuft auf 192.168.2.30
                                Angehängte Dateien

                                Kommentar

                                Lädt...
                                X