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
Ankündigung
Einklappen
Keine Ankündigung bisher.
Plugin mit PHP
Einklappen
Dieses Thema ist geschlossen.
X
X
-
Klar,Zitat von perf Beitrag anzeigenGelingt es dir dann auch, Parameter zwischen Perl und php zu austauschen?
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.)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; } }
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:
-
Hallo
Google ist dein Freund.
PHP-Scriptaufruf in Perl
und im PHP-Script.Code:[B]script.php?Inhalt=Claudia[/B]
oderCode:<?php echo $_POST["Inhalt"]; ?>
dann steht in Variable $inhalt = Claudia.Code:<?php $inhalt = $_POST["Inhalt"]; ?>
Gruß NetFritz
Einen Kommentar schreiben:
-
Wie macht man das?Zitat von NetFritz Beitrag anzeigenVon Perl aus kann man hinter den Scriptaufruf mit Post oder Get was übergeben.
/Per
Einen Kommentar schreiben:
-
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 Perlin "$response" steht der Rückgabestring.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]
Gruß NetFritz
Einen Kommentar schreiben:
-
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:
-
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:
-
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:
-
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:
-
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:
-
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:
-
Ein Aufruf von my $dummy = `php5 /somewhere/whatever.php`dürfte erheblich effizienter sein..
Makki
Einen Kommentar schreiben:
-
Kann das Perl-Modul PHP::Interpreter ( PHP::Interpreter - search.cpan.org ) nicht benutzt werden?Zitat von Chris M. Beitrag anzeigenMit den Plugins nein (bzw. CLI Umweg, von der Performance ein Graus!), ist ja schon gesagt worden.
/Per
Einen Kommentar schreiben:
-
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])Zitat von Chris M. Beitrag anzeigenMit den Plugins nein (bzw. CLI Umweg, von der Performance ein Graus!), ist ja schon gesagt worden.
Naja, das findet keiner sinnvoll, logisch oder gar intuitivIch verzweifel jedes mal wieder über den $, % und # für Arrays, Hashs, Referenzen darauf,
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:
-
Mit den Plugins nein (bzw. CLI Umweg, von der Performance ein Graus!), ist ja schon gesagt worden.Zitat von amaridian Beitrag anzeigenWäre es theoretisch möglich seine Logiken auch über PHP-Skripte zu realisieren?
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.
Um hier keinen sinnlosen Flame-War zu starten, der eh keine Lösung hat, nur ein persönlicher Eindruck von mir:Zitat von makki Beitrag anzeigenAber mal ganz ehrlich, das ist doch eh alles dieselbe Suppe: Für syntaktische Feinheiten muss man ein bisschen Umschalten,
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:


Einen Kommentar schreiben: