X
-
Zum Thema POST-Methode: Siehe LBS "SMA SunnyPortal auslesen" im Download und Threat im Forum dazu. Viel Spaß damit.
-
-
Christian
Meinst jetzt ist es nicht mehr "dreckig"....


PHP-Code:sql_connect();
//-------------------------------
//Dämon wurde gestartet
//-------------------------------
//eigener Code...
while(getSysInfo(1)>=1) { //Hauptschleife (wird beim Beenden oder Neustart von EDOMI verlassen)
if ($E=getLogicEingangDataAll($id)) {
$ip = $E[2]['value'];
$sonos = new SonosAccess($ip);
if (getLogicElementVar($id,10)==1) {
$sonos->SetAVTransportURI('x-rincon-queue:RINCON_B8E9378E827A01400#0',$MetaData="");
$sonos->Play();
setLogicElementVar($id,10,0);
}
if (getLogicElementVar($id,9)==2) {
$sonos->SetRadio('x-rincon-mp3radio://arabella.stream.kapper.net:8000/arabellavie', $radio_name = "Radio Arabella" );
$sonos->Play();
setLogicLinkAusgang($id,7,2);
setLogicElementVar($id,9,0);
}
if (getLogicElementVar($id,9)==1) {
$sonos->SetRadio('x-rincon-mp3radio://mp3stream7.apasf.apa.at:8000', $radio_name = "OE3 Hitradio" );
$sonos->Play();
setLogicLinkAusgang($id,7,1);
setLogicElementVar($id,9,0);
}
if (getLogicElementVar($id,8)==1) {
$sonos->SetMute(0);
setLogicElementVar($id,8,0);
}
if (getLogicElementVar($id,8)==2) {
$sonos->SetMute(1);
setLogicElementVar($id,8,0);
}
if (getLogicElementVar($id,7)==1) {
$sonos->SetVolume($volume-=2);
setLogicElementVar($id,7,0);
}
if (getLogicElementVar($id,6)==1) {
$sonos->SetVolume($volume+=2);
setLogicElementVar($id,6,0);
}
if (getLogicElementVar($id,5)==1) {
$sonos->Pause();
setLogicElementVar($id,5,0);
}
if (getLogicElementVar($id,4)==1) {
$sonos->Stop();
setLogicElementVar($id,4,0);
}
if (getLogicElementVar($id,3)==1) {
$sonos->Play();
setLogicElementVar($id,3,0);
}
$positionInfo=$sonos->GetPositionInfo();
$mediaInfo=$sonos->GetMediaInfo();
$transportInfo=$sonos->GetTransportInfo();
$volume=$sonos-> GetVolume();
$mute = $sonos->GetMute();
// if (array_key_exists('title', $mediaInfo)) {
if (empty($mediaInfo['title']) !== true) {
setLogicLinkAusgang($id,3,$mediaInfo["title"]);
setLogicLinkAusgang($id,4,$positionInfo["streamContent"]);
setLogicLinkAusgang($id,5,'');
setLogicLinkAusgang($id,6,'');
setLogicLinkAusgang($id,8,'');
setLogicLinkAusgang($id,9,'');
}
else{
setLogicLinkAusgang($id,3,'');
setLogicLinkAusgang($id,4,$positionInfo['title']);
setLogicLinkAusgang($id,5,$positionInfo['artist']);
setLogicLinkAusgang($id,6,$positionInfo["album"]);
setLogicLinkAusgang($id,7,$positionInfo["albumArtURI"]);
setLogicLinkAusgang($id,8,$positionInfo["TrackDuration"]);
setLogicLinkAusgang($id,9,$positionInfo["RelTime"]);
}
setLogicLinkAusgang($id,1,$transportInfo);
setLogicLinkAusgang($id,2,$volume);
setLogicLinkAusgang($id,14,$mute);
if ($transportInfo == 3) {
setLogicLinkAusgang($id,3,'');
setLogicLinkAusgang($id,4,'');
setLogicLinkAusgang($id,5,'');
setLogicLinkAusgang($id,7,'');
setLogicLinkAusgang($id,8,'');
setLogicLinkAusgang($id,9,'');
}
}
usleep(1000000*1); //CPU-Last verteilen (die Länge der Pause sollte je nach Bedarf angepasst werden - je länger, desto ressourcenschonender)
}
//-------------------------------
//Dämon wurde beendet (EDOMI wurde beendet oder neugestartet)
//Achtung: Nach ca. 3 Sekunden wird der Prozess vom Betriebssystem hart beendet!
//-------------------------------
//eigener Code, z.B. Aufräumen, Verbindungen trennen, etc.
//setLogicElementStatus($id,0);
sql_disconnect();
?>
Einen Kommentar schreiben:
-
Immer her damit.. Was wir ham das ham wir..Zitat von saegefisch Beitrag anzeigentimberland und pfischi: Braucht Ihr noch eine funktionierende POST-Lösung für den EXEC-Teil oder macht das eine externe Lösung für Euch? Hätte bei Bedarf eine EXEC-Lösung mit https
Einen Kommentar schreiben:
-
timberland und pfischi: Braucht Ihr noch eine funktionierende POST-Lösung für den EXEC-Teil oder macht das eine externe Lösung für Euch? Hätte bei Bedarf eine EXEC-Lösung mit https
Einen Kommentar schreiben:
-
Das ist aber ein bisschen "dreckig"...
Eleganter wäre es, wenn Dein LBS die [refresh]-Eigenschaft auswerten würde - oder z.B. alterWert != neuerWert vergleichen würde (siehe Thread von coliflower "iTunes-LBS").
Einen Kommentar schreiben:
-
Ja, darum habe ich an den Eingängen davor den Impuls LBS geschalten. Sonst hätte er z.B. immer ausgeschalten wenn ich wo anders einschalten würde.
So kann ich Schalten von wo ich möchte und der LBS bekommt das mit.
Einen Kommentar schreiben:
-
Im Prinzip ok. Bedenke aber, dass z.B. E3 immer wieder den Play-Befehl ausführen wird, solange E3 = 1 ist... Also mit jedem schleifendurchlauf
Einen Kommentar schreiben:
-
Christian
...würde da etwas grob fahrlässig dagegen sprechen wenn man das so löst im EXEC Bereich?
Funktionieren würde das mal alles.
PHP-Code:while(getSysInfo(1)>=1) { //Hauptschleife (wird beim Beenden oder Neustart von EDOMI verlassen)
if ($E=getLogicEingangDataAll($id)) {
$IP_Addr = $E[2]['value'];
$sonos = new PHPSonos($IP_Addr);
if ($E[4]['value']==1){
$sonos->Stop();
}
if ($E[3]['value']==1){
$sonos->Play();
}
$positionInfo=$sonos->GetPositionInfo();
$mediaInfo=$sonos->GetMediaInfo();
$transportInfo=$sonos->GetTransportInfo();
$volume=$sonos-> GetVolume();
$radioInfo=$sonos->RadiotimeGetNowPlaying();
if (array_key_exists('title', $mediaInfo)) {
setLogicLinkAusgang($id,4,$positionInfo["streamContent"]);
setLogicLinkAusgang($id,3,$mediaInfo["title"]);
setLogicLinkAusgang($id,5,'');
setLogicLinkAusgang($id,6,$radioInfo["logo"]);
}
else{
setLogicLinkAusgang($id,3,'');
setLogicLinkAusgang($id,4,$positionInfo["title"]);
setLogicLinkAusgang($id,5,$positionInfo["artist"]);
setLogicLinkAusgang($id,6,'');
}
setLogicLinkAusgang($id,1,$transportInfo);
setLogicLinkAusgang($id,2,$volume);
if ($transportInfo == 3) {
setLogicLinkAusgang($id,3,'');
setLogicLinkAusgang($id,4,'');
setLogicLinkAusgang($id,5,'');
setLogicLinkAusgang($id,6,'');
}
}
usleep(1000000*4); //CPU-Last verteilen (die Länge der Pause sollte je nach Bedarf angepasst werden - je länger, desto ressourcenschonender)
}
//-------------------------------
//Dämon wurde beendet (EDOMI wurde beendet oder neugestartet)
//Achtung: Nach ca. 3 Sekunden wird der Prozess vom Betriebssystem hart beendet!
//-------------------------------
//eigener Code, z.B. Aufräumen, Verbindungen trennen, etc.
//setLogicElementStatus($id,0);
sql_disconnect();
?>
Einen Kommentar schreiben:
-
Hallo,
hat das vielleicht jemand laufen und könnte mich hier unterstützen, gerne über PN.
Bekomm das irgendwie nicht zum laufen.
http://duncan3dc.github.io/sonos/
Einen Kommentar schreiben:
-
POST zu implementieren ist nun wahrlich kein Hexenwerk - ich hatte es schlicht noch nie benötigt... Werde ich demnächst mal einbauen.
Der "Rückkanal" per UDP ist prinzipiell auch kein Problem, allerdings habe ich jetzt keine Zeit für sowas (und ich habe kein Sonos zum Testen). Das ist doch eine nette Aufgabe für einen "Logikbaustein" - Doku ist in Arbeit.
Einen Kommentar schreiben:
-
Leider brauchen wir hier tatsächlich POST-Methoden. Für Rückmeldungen von den Lautsprechern zusätzlich UDP (integriert als Listener).Zitat von timberland Beitrag anzeigen@ pfischi
den Server hätte ich mal laufen.
Könnte man über http GET oder POST von Edomi mal Play und Stop senden? Komm da irgendwie nicht weiter...
Aber als Trockenübung kannst du zum Testen mal die sonos_cmd starten (liegt im gleichen Verzeichnis wo auch der Broker auf dem Server liegt). Dort kannst du mit der Kommandozeile deine Speaker steuern. Hilfe gibt's bei Github oder einem beherzten Druck auf Taste h (oder help) während sonos_cmd läuft.
Gruss,
Stefan
Einen Kommentar schreiben:
-
HTTP-GET ist kein Problem - POST habe ich noch nicht implementiert (weil selten notwendig).
Einen Kommentar schreiben:
-
@ pfischi
den Server hätte ich mal laufen.
Könnte man über http GET oder POST von Edomi mal Play und Stop senden? Komm da irgendwie nicht weiter...
Einen Kommentar schreiben:
-
Gefühlt ist Musiksteuerung eines der Top 10-Features für "Homeserver" (als Gattungsbegriff). OK, Sonos und Squeeze teilen sich sicher den Platz in der Hitparade.Zitat von gaert Beitrag anzeigenSicher eine feine Sache, aber das ist mir aktuell zu speziell - kleine Zielgruppe... Wartet am besten mal die Doku zur Erstellung von Logikbausteinen ab - dann ist dies sicher schnell implementiert.
Einen Kommentar schreiben:



Einen Kommentar schreiben: