Ankündigung

Einklappen
Keine Ankündigung bisher.

Plugin mit PHP

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

  • perf
    antwortet
    Toll, vielen Dank, aggie und NetFritz!

    Jetzt wird es mir gelingen, von CometVisu oder von einem KNX-Taster aus meinem Sonos-System zu kontrollieren.

    Der letzte Schritt ist nun, Status-Info ins Cometvisu zu bringen. Ich frage im CometVisu-Forum danach.

    /Per

    Einen Kommentar schreiben:


  • aggie89go
    antwortet
    Zitat von perf Beitrag anzeigen
    Gelingt es dir dann auch, Parameter zwischen Perl und php zu austauschen?
    Klar,

    Code:
      my @response = qx(/usr/bin/php /opt/misterhouse/code/PHPSonos.php player=$_player command=$_command value=$_value );
      my $line; my $stringA; my $stringB; my $stringC; my %_HoH = ();
       foreach $line (@response) {
          if (index($line,"=> Array") > 0) {
             $stringA = substr($line,index($line,"[")+1,index($line,"]")-index($line,"[")-1);
          } elsif (index($line,"=> ") > 0) {
             $line = substr($line,0,index($line,"/n"));
             $stringB = substr($line,index($line,"[")+1,index($line,"]")-index($line,"[")-1);
             $stringC = substr($line,index($line,"=> ")+3,);
             $_HoH{$stringA}{$stringB} = $stringC;
          }
       }
    Wie von NetFritz bereits geschrieben, steht auf @response das was von dem PHP-script zurück gegeben wird, in meinem Fall ein mehrdimensionales Array, dass ich dann in der foreach Schleife auf ein Hash schreibe. Dieses Hash enthält für alle Sonos Player alle Werte (Lautstärke, aktuelles Lied, Status, Playlist, etc.)

    Das aufgerufene PHP script enthält dann z.B.
    PHP-Code:
    //* ***************************** SONOS STATUS UPDATE ****************************************

    if (strcmp($_SONOS["command"], 'SonosStatusUpdate()') == 0) {
        
    $ret $sonos->GetMediaInfo();
            
    $_SONOS array_merge($_SONOS$ret);
            if (isset(
    $ret['title'])) {

            
    $_SONOS array_merge($_SONOS, array("RadioStation" => $ret['title']));
                } else {
            
    $_SONOS array_merge($_SONOS, array("RadioStation" => ""));
            }

        
    $ret $sonos->GetTransportInfo(); 
            
    $_SONOS array_merge($_SONOS, array("PlayerStatus" => $PlayerStatus[$ret]));
        
    $ret $sonos->GetVolume();

            
    $_SONOS array_merge($_SONOS, array("Volume" => $ret));
        
    $_SONOS2[$iplayer] = $_SONOS;
    }
    print_r($_SONOS2); 

    Einen Kommentar schreiben:


  • NetFritz
    antwortet
    Hallo
    Google ist dein Freund.

    PHP-Scriptaufruf in Perl
    Code:
    [B]script.php?Inhalt=Claudia[/B]
    und im PHP-Script.
    Code:
    <?php echo $_POST["Inhalt"]; ?>
    oder
    Code:
    <?php $inhalt = $_POST["Inhalt"]; ?>
    dann steht in Variable $inhalt = Claudia.
    Gruß NetFritz

    Einen Kommentar schreiben:


  • perf
    antwortet
    Zitat von NetFritz Beitrag anzeigen
    Von Perl aus kann man hinter den Scriptaufruf mit Post oder Get was übergeben.
    Wie macht man das?

    /Per

    Einen Kommentar schreiben:


  • NetFritz
    antwortet
    Hallo
    Alles schon gehabt.
    Siehe hier https://knx-user-forum.de/forum/supp...wiregate/17756
    Von Perl aus kann man hinter den Scriptaufruf mit Post oder Get was übergeben.
    Von PHP nach Perl
    Code:
    [COLOR=#000000][COLOR=#007700] [COLOR=#000000][COLOR=#0000BB]my [/COLOR][COLOR=#007700]$[/COLOR][COLOR=#0000BB]response [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]qx[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]usr[/COLOR][COLOR=#007700]/[/COLOR][COLOR=#0000BB]bin[/COLOR][COLOR=#007700]/[/COLOR][COLOR=#0000BB]php [/COLOR][COLOR=#007700]../var/[/COLOR][COLOR=#0000BB]www[/COLOR][COLOR=#007700]/[/COLOR][COLOR=#0000BB]myhouse[/COLOR][COLOR=#007700]/[/COLOR][COLOR=#0000BB]pv[/COLOR][COLOR=#007700]/[/COLOR][COLOR=#0000BB]sma_rpc[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]php[/COLOR][COLOR=#007700]); [/COLOR][/COLOR][/COLOR][/COLOR]
    in "$response" steht der Rückgabestring.
    Gruß NetFritz

    Einen Kommentar schreiben:


  • perf
    antwortet
    Vielen Dank für den Hinweis! Werde ich probieren!

    Gelingt es dir dann auch, Parameter zwischen Perl und php zu austauschen?

    /Per

    Einen Kommentar schreiben:


  • aggie89go
    antwortet
    Ich benutze auch die PHP-Sonos Klasse aus dem ip-symcon Forum und rufe die aus Perl heraus auf (zwar von mh aus auf einem FitPC2 der vielleicht etwas mehr Performance hat) funktioniert tadellos!
    Ich rufe dazu einfach mit qx() ein weiteres php-Script auf, dass dann die sonos klasse benutzt.

    Einen Kommentar schreiben:


  • makki
    antwortet
    Keine Ahnung ob das geht, die allgemeine Erfahrung mit cpan-Modulen ist aber eher: oft grottig, viel Speicherleck, wenig gut.
    Ist halt auch ein bisschen "Wild" im Perl-eval einen PHP-interpreter zu starten..
    Sinnvoller ist ausm Bauch ein externer Aufruf oder eben die Suppe für Sonos in Perl zu implementieren, das sind unterm Strich eine Handvoll HTTP-POST wie mir das aussieht, da brauch ich keine PHP-Klasse für (Ausser es ist eben auch die Umgebung PHP..)

    Makki

    Einen Kommentar schreiben:


  • amaridian
    antwortet
    Wenn man sich die Klasse so anschaut und mal die ganzen Dokumentations-Statements und Kommentare abzieht bleibt da garnicht so viel über...

    evtl. würde es sich lohnen die Statements die man tatsächlich braucht nach Perl zu portieren.

    Grüße
    Christian

    Einen Kommentar schreiben:


  • perf
    antwortet
    Makki,

    Weißt du ob PPH::Intepreter im Plugin-System vom Wiregate funktioniert? Ich müsste "include()" benützen um Zugang zu PHPSonos zu bekommen, und dann die entsprechenden Funktionen anrufen.

    /Per

    Einen Kommentar schreiben:


  • perf
    antwortet
    OK. Ich hatte vor, diese Klasse zu integrieren:

    www.ip-symcon.de/wiki/PHPSonos

    um mein Sonos-System zu kontrollieren. Dann müsste ich verschiedene funktionen dieser Klasse aufrufen und Parameter zwischen Perl und PHP überführen.

    /Per

    Einen Kommentar schreiben:


  • makki
    antwortet
    Ein Aufruf von my $dummy = `php5 /somewhere/whatever.php`dürfte erheblich effizienter sein..

    Makki

    Einen Kommentar schreiben:


  • perf
    antwortet
    Zitat von Chris M. Beitrag anzeigen
    Mit den Plugins nein (bzw. CLI Umweg, von der Performance ein Graus!), ist ja schon gesagt worden.
    Kann das Perl-Modul PHP::Interpreter ( PHP::Interpreter - search.cpan.org ) nicht benutzt werden?

    /Per

    Einen Kommentar schreiben:


  • makki
    antwortet
    Zitat von Chris M. Beitrag anzeigen
    Mit den Plugins nein (bzw. CLI Umweg, von der Performance ein Graus!), ist ja schon gesagt worden.
    Sicher nicht die Optimal-Lösung (hier, im ursprünglichen Kontext wird Text vom PHP gelesen und dann als Text weitergegeben, das ist natürlich nicht so ganz die "Optimal-Lösung") aber so grausam ist das garnicht; es gäbe Mittel&Wege (womit wir wieder bei fcgi wären, mit dem kleinen Fehler: das wurde nicht für sowas gemacht! Das verbrät man eine Menge knappen RAM um 50ms reichliche CPU zu sparen.. und handelt sich kostenlos ein paar handfeste gedankliche Stolperfallen ein, fcgi ist halt wie Threads³ - ohne Threads zu haben und zu wissen wo man gerade wie läuft [was man bei threads wenigstens wissen könnte, wenn man wollte])

    Ich verzweifel jedes mal wieder über den $, % und # für Arrays, Hashs, Referenzen darauf,
    Naja, das findet keiner sinnvoll, logisch oder gar intuitiv Oder Perl als der Weisheit letzter Schluss, nur ist es eben so das man auch mal nach 1h googeln was runterschreiben kann wenn man sonst nur eher wenig mit Programmierung zu tun hat..
    Hat eben alles seine Vor und Nachteile..

    Makki

    Einen Kommentar schreiben:


  • Chris M.
    antwortet
    Zitat von amaridian Beitrag anzeigen
    Wäre es theoretisch möglich seine Logiken auch über PHP-Skripte zu realisieren?
    Mit den Plugins nein (bzw. CLI Umweg, von der Performance ein Graus!), ist ja schon gesagt worden.

    Wie bei zukünftigen LogikEngines andere Sprachen eingebettet werden ist eine andere Sache. Hier habe ich durchaus Sympathien für PHP. Aber hier sprechen wir über Entwicklungen die noch nicht mal gestartet sind und erst mal nicht mit dem WireGate oder ElabNet zu tun haben. Wer darauf wartet ist blöd.
    Zitat von makki Beitrag anzeigen
    Aber mal ganz ehrlich, das ist doch eh alles dieselbe Suppe: Für syntaktische Feinheiten muss man ein bisschen Umschalten,
    Um hier keinen sinnlosen Flame-War zu starten, der eh keine Lösung hat, nur ein persönlicher Eindruck von mir:

    Ich verzweifel jedes mal wieder über den $, % und # für Arrays, Hashs, Referenzen darauf, ... - da wäre ich oft schon mit dem PHP durch gewesen als ich beim Perl noch mit Google-Hilfe probiert habe meine Datenstruktur zum Laufen zu bringen.

    Einen Kommentar schreiben:

Lädt...
X