Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Bitte hilfe zu den Perl Plugins

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

    #16
    ähm, also nochmal komplett von vorne:
    `` führt einen systembefehl aus
    dann kommen die Optionen in ' falls Variablen NICHT interpretiert werden sollen, in " wenn doch
    Was wir hier also wollen ist um das mal etwas aufzudröseln sowas wie:
    Code:
    my wget_command = "wget http://" . $username . ":" . $passwd . "@" . $xbmc_ip . ":" . $xbmc_port . "/xbmcCmd.......";
    my $dummy_rueckgabewert = `$wget_command`;
    return $dummy_rueckgabewert;
    Der aufruf von wget oder curl ist dafür zwar IMHO ok, weil simpel, aber es fehlt am Feedback ob erfolgreich oder nicht. Wenn man mit der HTTP-Antwort übrigens aber was anfangen will wäre die Nutzung von LWP::Useragent sinnvoller (siehe Plugin growl/prowl z.B.)

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

    Kommentar


      #17
      War da nicht noch irgend was mit dem unterschied zwischen $test = 'irgendwas'; und $test = "irgendwas"; ? Der Link der in die Variabel $picture übergeben wird, ist mit ´http://...´ übergeben. Könnte das auch noch eine Fehlerquelle sein?

      EDIT: Habs gefunden. Bei der Variante $test = "irgendwas" können direkt Variablen verarbeitet werden ohne die ganze $text='bla'.$variabel.'bla' geschichte. Man könnte direkt $text="bla $variabel bla" einsetzen. Umgemünzt auf den oben genannten Aufruf müsste demnach auch folgendes gehen:
      Code:
      get( "http://$user:$pwd@$xbmc_ip:$xbmc_port/xbmcCmds/xbmcHttp?command=ExecBuiltIn(Notification($text,$timeout,$picture))" );
      Oder sehe ich das falsch?
      Gruss Patrik alias swiss

      Kommentar


        #18
        Jein. get gibts so singulär nicht, auch nicht die Klammer und die Interpolation von Variablen ist mit Vorsicht zu geniessen.
        Geht grundsätzlich schon, solange die Variable schön alleine zwischen zwei leerzeichen steht und nicht bestimmte Sonderzeichen vorkommen.. Tretmine vorraus -> daher lieber fein säuberlich zusammenfügen..
        Und wiegesagt: so richtig sauber wird das so IMHO nie. Es fehlen z.B. URL-Encoding von Sonderzeichen(Umlaute) etc.
        Die beste Vorlage die mir einfällt ist immernoch das Prowl-Plugin

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

        Kommentar


          #19
          Danke für Eure Hilfe.
          Ich hab das ganze jetzt so gelöst

          Code:
          my $url= "http://".$user.":".$pwd."@".$xbmc_ip.":".$xbmc_port."/xbmcCmds/xbmcHttp?command=ExecBuiltIn(Notification(".$text_head.",".$text.",".$timeout.",".$img."))";
          
          wget  $url
          Das Plugin läuft damit erstmal, Funktion hab ich aber noch nicht richtig testen können. Wenigstens die Syntax stimmt jetzt. Es gibt zwar ne Fehlermeldung, die hat aber eher was mit dem Webserver von XBMC zu tun. Ich werde dann berichten und dann das ganze Plugin nachschieben.

          Danke und Gruß
          Mirko
          Umgezogen? Ja! ... Fertig? Nein!
          Baustelle 2.0 !

          Kommentar


            #20
            Die Syntax, stimmt der Befehl wird schienbar auch richtig ausgeführt, aber ich denke dass wget mit der Abfrage der "website" ein Problem hat.
            Der Link in der Fehlermeldung tut genau dass was er soll wenn im Browser geöffnet.

            Hier das logging

            Code:
            xbmc_notification,,0s,Can't locate object method "wget" via package "http://media:media@192.168.2.30:8080/xbmcCmds/xbmcHttp?command=ExecBuiltIn(Notification(Uberschrift,Testtext,5000,http://www.bildbilder.org/wp-content/bilder/2011/03/Herz.gif))" (perhaps you forgot to load "http://media:media@192.168.2.30:8080/xbmcCmds/xbmcHttp?command=ExecBuiltIn(Notification(Uberschrift,Testtext,5000,http://www.bildbilder.org/wp-content/bilder/2011/03/Herz.gif))"?) at (eval 60) line 37, <FILE> line 821.
            Ist es eigentlich möglich über das wirgate webmin ein Telegramm manuell auf den Bus zu senden?
            Umgezogen? Ja! ... Fertig? Nein!
            Baustelle 2.0 !

            Kommentar


              #21
              Zitat von JuMi2006 Beitrag anzeigen
              Code:
              my $url= "http://".$user.":".$pwd."@".$xbmc_ip.":".$xbmc_port."/xbmcCmds/xbmcHttp?command=ExecBuiltIn(Notification(".$text_head.",".$text.",".$timeout.",".$img."))";
              
              wget  $url
              Nochmal: das kann nicht gehen. wget ist keine Perl-Funktion sondern ein externes Programm, also wenn
              Code:
              my $url= "http://".$user.":".$pwd."@".$xbmc_ip.":".$xbmc_port."/xbmcCmds/xbmcHttp?command=ExecBuiltIn(Notification(".$text_head.",".$text.",".$timeout.",".$img."))";
              my $AusgabeVonWget = `wget  $url`;
              return "Antwort: $AusgabeVonWget";
              EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
              -> Bitte KEINE PNs!

              Kommentar


                #22
                Zeit mal was zurück zu geben:

                Hier ein Plugin dass eine bestimmte Nachricht an das XBMC-Mediacenter sendet.
                Der Webserver vom XBMC-Rechner sollte aktiviert sein ;-)

                Code:
                # Plugin zum versenden von Textmeldungen an XBMC
                # Version 0.1 24.06.2011
                # Copyright: JuMi2006 (https://knx-user-forum.de/members/JuMi2006.html)
                # License: GPL (v2)
                # Erstellt mit Unterstützung des KNX-User-Forums
                
                ####################
                ###Einstellungen:###
                ####################
                
                
                my $aufrufende_ga = "0/0/11"; #GA die die Benachrichtigung auslöst
                my $xbmc_ip = "192.168.2.30"; #IP des XBMC Rechners
                my $xbmc_port = "8080"; #Port des XBMC Webservers
                my $user = "media"; #Username XMBC Webserver
                my $pwd = "media"; #Password XBMC Webserver
                my $text_head = "Uberschrift"; #Überschrift für Benachrichtigung
                my $text = "Testtext"; #Inhalt der Benachrichtigung
                my $timeout = "5000"; #Zeit in Millisekunden in der die Meldung angezeigt wird
                my $img = "http://www.bildbilder.org/wp-content/bilder/2011/03/Herz.gif"; #Bildadresse für Benachrichtigung
                
                
                ######################
                ##ENDE Einstellungen##
                ######################
                
                # Plugin an Gruppenadresse anmelden
                $plugin_subscribe{$aufrufende_ga}{$plugname} = 1;
                
                # Zusammensetzen der URL aus den Einstellungen
                my $url= "http://".$user.":".$pwd."@".$xbmc_ip.":".$xbmc_port."/xbmcCmds/xbmcHttp?command=ExecBuiltIn(Notification(".$text_head.",".$text.",".$timeout.",".$img."))";
                
                # Eigenen Aufruf-Zyklus auf 1 Tag setzen, das Script reagiert auf ankommende Telegramme
                $plugin_info{$plugname.'_cycle'} = 86400; 
                
                # Hier wird die Gruppenadresse abgefangen und weiterverarbeitet
                if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $aufrufende_ga) {
                
                # Mit Hilfe von LWP wird die entsprechende Website aufgerufen - Die Rückmeldung wird protokolliert.
                use LWP::Simple;
                my $requestURL = $url;
                my $response = get($requestURL)
                }
                Umgezogen? Ja! ... Fertig? Nein!
                Baustelle 2.0 !

                Kommentar


                  #23
                  Ich sehe in den Scripten eine recht kreative Mischung aus quotes und doppelten quotes. Vielleicht nützen dem ein oder anderen dazu ein paar Hinweise:

                  - Ausdrücke in doppelten Quotes werden interpretiert, aus "ich bin $name" wird also z.B: ich bin emax
                  - Ausdrücke in einfachen Quotes werden nicht interpretiert, 'ich bin $name' bleibt also ich bin $name.

                  Der Perl Interpreter hat es mit Ausdrücken in einfachen quotes also zunächst mal leichter: Sie werden 1:1 übernommen. doppel-quotes führen dagegen zu einer Intepretation, auch wenn es gar nichts zu interpretieren gibt. Wer also effizient im Sinne von Prozessorlast arbeiten will, sollte schon deshalb bewusst mit diesen Unterschieden umgehen.

                  Aber auch aus Gründen konsistenter Arbeits- und Kodierweise ist die Beachtung dieser Umstände empfehlenswert: Perl macht es insbesondere Anfängern nicht leicht, mit den Möglichkeiten und Fallstricken der Quotierung klar zu kommen (da gibt es nämlich ganz teuflische Möglichkeiten...). Ich schreibe das nur, weil einige o.g. Beiträge bei mir den Eindruck erwecken, dass die dortigen Interpunktionen eher Zufallsprodukte sind. Das kann bei der Fehlersuche dann schon mal Kopfschmerzen verursachen.

                  Dazu zu allem Überfluss noch folgende Hinweise:

                  - Wer in einem Ausdruck ein quote verwenden will, z.B. so: "It's a mess", der kann den Ausdruck trotzdem in doppelte Anführungszeichen setzen, weil 'It's a mess' natürlich in die Hose gehen würde. Alternativ geht aber auch 'It\'s a mess', der Backslash entwertet so das eingeschlossene quote-Zeichen.
                  - Umgedreht gilt das Gleiche: '19" Bildschirm' geht ebenso wie "19\" Bildschirm".

                  Der langen Rede kurze Faustregel: Solange in einem Ausdruck Variablen stehen, also z.B. $name, @array, $array[5] oder %hash und solche Sachen, sollte (bzw. muss) man doppelte quotes verwenden, ansonsten sollten es konsequent einfache quotes sein. Konsequenter und konsistenter Kodierstil erleichtert die Fehlersuche und dokumentiert für einen selbst und für die Nachwelt, was beabsichtigt ist.

                  Das soll nicht schulmeisterlich sein, sondern eine Hilfe. Ich hatte in den Anfangszeiten nämlich mit genau solch trivialen Sachen die größten Schwierigkeiten, einfach weil mich niemand je drauf hingewiesen hat (und es auch noch kaum Internet gab ...)

                  s.a.: http://www.dummies.com/how-to/conten...s-in-perl.html



                  PS: Wenn das schon woanders gepostet wurde, hab ich es übersehen, ich bin ja erst seit Kurzen hier unterwegs.
                  PPS: Die langen Code-Zeilen in den vorigen Beiträgen bewirken in meinem Firefox überbreite Ansichten. Es wäre nett, wenn das einer mal manuell umbrechen könnte ...
                  Kein Support per PN: Fragen bzw. Fehlermeldungen bitte im Forum posten.

                  Kommentar


                    #24
                    Ich habe heute auch meine ersten Plugin/Perl Gehversuche gemacht und es funktioniert soweit auch. Da ich keine Aktoren, sondern nur Sensoren habe, würde ich mein Plugin mich irgendwie benachrichtigen lassen. Im Moment schwebt mir da ein beep vor und oder eine EMail.

                    Mit
                    Code:
                    print "\a";
                    wollte ich den beep erzeugen.

                    Und für die Mail bräuchte ich ein sendmail oder ähnliches - ist diesbezüglich was installiert?

                    Grüße Klaus

                    Kommentar


                      #25
                      zum piepen würde ich jetzt spontan eher `beep -f XXX -r Y` nehmen.
                      "man beep" erzählt einem genaueres.

                      Der lokale Mailserver ist - auf mehrfachen Wunsch! - nicht in Big-brother-manier vorkonfiguriert so das er über uns relayen darf (wir könnten das durchaus, das ist unser Kernbuiness.. jedes WG hätte ein zertifikat mit dem es sich authentisieren könnte, aber..) - und ich verstehe es..

                      Somit wird es leider komplizierter, ein Beispiel findet sich aber, ich hab das schonmal gepinselt aber ich finds grade nicht -> ich such morgen nochmal (man braucht dazu aber ein eigenes "offenes" SMTP-Relay!)

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

                      Kommentar


                        #26
                        Also ich bekomme es mit beep auch nicht hin und das ist doch meiner Meinung nach auch keine Perl-Funktion!?

                        Wg. Mailversand habe ich mir schon sowas gedacht und auch schon gesucht, aber auch noch nichts gefunden.

                        Grüße Klaus

                        Kommentar


                          #27
                          Nee, beep ist ein Shell-aufruf, "my $dummy = `beep ..` macht definitiv lärm.. Nach dem SMTP suche ich mal.. ich denke das ging sogar mit Authentisierung..

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

                          Kommentar


                            #28
                            @Makki: Bzgl. SMTP schon was gefunden?

                            Grüße Klaus

                            Kommentar


                              #29
                              Da hab ich mal wieder Threads verwürfelt und das als "erledigt" geflagged: kleines Beispiel hier..
                              (da muss man noch ein bisschen mitdenken und was tun! aber im Kern sollte es tun..)

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

                              Kommentar

                              Lädt...
                              X