Sonos mittels PHP Skript steuern

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Liver_64
    MS Profi
    • 07.09.2015
    • 591

    Habe dir ein PN mit den Musterdateien geschickt. Loxone hat Sie runtergenommen.

    Wieso funktioniert der Download aus post #1 nicht mehr? Bei mir klappt es... und da ist die aktuelle Datei inkludiert.
    Anmerkung: Bitte keine Fragen mehr per PN sondern direkt im Forum damit andere mithelfen und mitprofitieren können.
    Bzgl. Sonos Plugin supporte ich nur noch die jeweils aktuelle Version NUR auf dem LoxBerry, ich kann keine VM Unterstützung mangels Hardware geben. Herzlichen Dank!

    Kommentar

    • deepinpowder
      LoxBus Spammer
      • 07.03.2016
      • 412

      Vielen Dank.

      Sehr nett von dir. Jetzt klappt der Link.

      Kommentar

      • StoRmtec
        LoxBus Spammer
        • 25.08.2015
        • 346

        Liver_64 Könntest du mir das auch schicken wegen Radiosender wechseln.
        Danke

        Kommentar


        • Liver_64
          Liver_64 kommentierte
          Kommentar bearbeiten
          du hast Post
      • deepinpowder
        LoxBus Spammer
        • 07.03.2016
        • 412

        Hallo,

        vielen Dank an alle hier im Thread.

        Bis jetzt klappt das ganz gut. Jedoch fehlt mir ein Play Befehl.

        Der Player soll mit Lautstärke 30 und dem Radiosender 1 (Paloma) aus dem Array starten. Leider finde ich den Befehl nicht. Lauter / Leiser / Mute klappt alles.

        Kann mir da einer helfen?

        Array
        'radiostations' => array(
        'Paloma' => 'tunein.com/radio/Radio-Paloma-s97169/?streamid=3859877',

        https://rap.ip/index.php?zone=bad&volume=30&(spiele Radio Paloma) <- das fehlt.

        ## L‰dt die angegebene Radioliste unter "Meine Radiosender" aus Sonos
        http://DEINE_IP/DEIN_VERZEICHNIS/son...TION&volume=15

        Das habe ich gefunden, jedoch bezieht sich das auf die Radioliste in sonos und nicht in der config.php

        Noch besser wenn ich das direkt aus Loxone machen könnte.

        Gruß
        Zuletzt geändert von deepinpowder; 17.03.2016, 17:37.

        Kommentar


        • Liver_64
          Liver_64 kommentierte
          Kommentar bearbeiten
          Warum packst du den Sender nicht in deine Sonos Favoriten und rufst ihn dann mit dem 2. Befehl auf? Das geht dann auch direkt aus Loxone!
      • daintree
        Smart Home'r
        • 30.08.2015
        • 34

        Bin ich wirklich der einzige bei dem die Interpreteninfo nicht mehr geht? Fehler wie beschrieben im Post 152.
        Habe heute Testes halber die Scripts auf einem anderen Apache Webserver laufen lassen. Auch hier, es läuft alle einwandfrei bis eben die Interpreteninfo. Dies wiederum füllt mir auch das Logfile innert 3 Tagen auf mehrere 100MB. hmmpf :-(

        Kommentar

        • Liver_64
          MS Profi
          • 07.09.2015
          • 591

          ganz ehrlich nutze ich die Datenübermittlung an Loxone nicht da ich keinen großen Mehrwert darin sehe. Von daher habe ich nicht viel Zeit zum Testen verschwendet, aber mir erade noch einmal den Code angeschaut und optimiert. Du hast eine PN mit einer aktualisierten sonos2.php, bitte teste mal und gib mir feedback ob es klappt.
          Anmerkung: Bitte keine Fragen mehr per PN sondern direkt im Forum damit andere mithelfen und mitprofitieren können.
          Bzgl. Sonos Plugin supporte ich nur noch die jeweils aktuelle Version NUR auf dem LoxBerry, ich kann keine VM Unterstützung mangels Hardware geben. Herzlichen Dank!

          Kommentar


          • daintree
            daintree kommentierte
            Kommentar bearbeiten
            Das aktualisierte sonos2.php hat das Problem gelöst. Nun funktioniert die Interpreteninfo wieder :-) Vielen Dank!
        • uli
          LoxBus Spammer
          • 30.08.2015
          • 224

          Kann den Fehler mit der Interpreteninfo nachvollziehen.

          Mir ist außerdem noch aufgefallen, dass alles Skripte nach der 1.3.2 bei mir ca. 10 Sekunden Bedenkzeit beim Start brauchen, während die Datei mit der 1.3.2 praktisch sofort abgespielt wird nachdem ich das Kommando im Browser eingegeben habe. Hättest Du eine Idee für die Ursache?
          Zuletzt geändert von uli; 22.03.2016, 19:30.

          Kommentar

          • Liver_64
            MS Profi
            • 07.09.2015
            • 591

            Ja, ab V1.3.2 habe ich den rampto Type sleep vor der t2s programmiert, ihn aber auf 10 Sek. beschränkt statt der fest programmierten 17 Sek. Ich fand es so angenehmer als den abrupten Stop und dann die t2s abzuspielen.
            Anmerkung: Bitte keine Fragen mehr per PN sondern direkt im Forum damit andere mithelfen und mitprofitieren können.
            Bzgl. Sonos Plugin supporte ich nur noch die jeweils aktuelle Version NUR auf dem LoxBerry, ich kann keine VM Unterstützung mangels Hardware geben. Herzlichen Dank!

            Kommentar


            • uli
              uli kommentierte
              Kommentar bearbeiten
              Stimmt, da hattest Du ja bereits etwas dazu geschrieben. Die Zeit kann ich bestimmt im Quelltext anpassen, oder?

            • Liver_64
              Liver_64 kommentierte
              Kommentar bearbeiten
              Update in post #1, neuer Parameter um das zu konfigurieren
          • Chris8519
            Extension Master
            • 19.12.2015
            • 106

            Ich bekomme leider trotz der vielen leider nicht ganz ausführlichen Anleitung den Titel/Interpreten nicht in Loxone in den Texteingangsverbinder.. habe das Skript seit gestern am laufen auf einem Raspi ... Nun meine Frage hier an der Stelle hat jemand vielleicht Loxone Musterdateien die ich so übernehmen könnte damit es läuft -... Gruss Chris

            Kommentar


            • Chris8519
              Chris8519 kommentierte
              Kommentar bearbeiten
              v1.4.7

            • uli
              uli kommentierte
              Kommentar bearbeiten
              Mit der aktuellen Version gibt es Probleme mit der Funktion Titel/Interpret (siehe oben). Wenn Du noch eine ältere Version hast, probiere es mit dieser, ansonsten wird es bestimmt eine neue Version geben, in der der Fehler behoben ist.

            • Liver_64
              Liver_64 kommentierte
              Kommentar bearbeiten
              update in post #1
          • Liver_64
            MS Profi
            • 07.09.2015
            • 591

            Guude zusammen,

            in post# 1 habe ich ein Update mit Fehlerbehebung und neuen Funktionen platziert. Folgende Fehler sind behoben:
            • Titel/Interpret Info für Loxone
            Folgende Funktionen sind neu:
            • Zusätzlicher Parameter in der config.php um die Zeitspanne vor dem Ansagen einer t2s zu konfigurieren (entweder ca. 10 Sekunden oder abrupt)
            • s2s (sonos-to-speech) Unterbricht abrupt den laufenden Song, sagt Titel/Interpret an, setzt Song abrupt fort. Am besten nur mit IVONA nutzen da hier die Englischkentnisse besser sind. Das s2s habe ich auf einen Taster gelegt, da meine Jungs gerne Song raten spielen und ich jetzt nicht mehr dauernd nachschauen muss ;-)
            Viel Spaß mit dem Update (und hoffentlich keine Fehler mehr)
            Gruß Oliver
            Anmerkung: Bitte keine Fragen mehr per PN sondern direkt im Forum damit andere mithelfen und mitprofitieren können.
            Bzgl. Sonos Plugin supporte ich nur noch die jeweils aktuelle Version NUR auf dem LoxBerry, ich kann keine VM Unterstützung mangels Hardware geben. Herzlichen Dank!

            Kommentar


            • uli
              uli kommentierte
              Kommentar bearbeiten
              Das mit dem komplexen Titel/Interpreten-Thema kann ich auch gut nachvollziehen. Vielleicht lässt es sich aber doch noch einfach beheben, dass bei den Sendern die keine Infos senden kein Fehler ins Log geschrieben wird. Ich nehme zumindest an, dass das damit zusammenhängt:
              2016-03-26 15:40:02 - Fehler: [8], Undefined offset: 1 in /volume1/web/sonos/sonos2.php in line 930, Variable:Array

            • Liver_64
              Liver_64 kommentierte
              Kommentar bearbeiten
              Ich habe es jetzt so programmiert das bei Radio der Sender an alle Eingänge übertragen wird. Auch der Vorschlag mit den geänderten Errorhandling ist kompliziert, da es ein php error ist der über komplexe Regeln und Programmierung eliminiert werden müsste. Update poste ich bald

            • uli
              uli kommentierte
              Kommentar bearbeiten
              Du bist der Hammer! Danke! Jetzt wüsste ich nicht, was man aus meiner Sicht noch verbessern könnte. Ivona funktioniert übrigens bei mir wunderbar.
          • uli
            LoxBus Spammer
            • 30.08.2015
            • 224

            Hier meine Rückmeldung zur 1.4.8:
            Die Funktion zum prompten Abspielen ist klasse und funktioniert einwandfrei! Bei der Zufallswiedergabe wird nun auch der zuletzt gespielte Track fortgesetzt und nicht die Liste neu geshufflet, einwandfrei!!!

            Zwei Sachen sind mir jedoch noch aufgefallen:
            - Wenn man eine Playliste pausiert hat und eine Textnachricht abspielt wird danach nicht wieder pausiert, sondern die Wiedergabe fortgesetzt
            - Wenn man den Titel und den Interpreten getrennt ausgeben lässt, werden diese beim pausieren nicht auf leer gesetzt bzw. die Meldung "Es wird gerade nichts gespielt" ausgegeben

            Kommentar


            • Liver_64
              Liver_64 kommentierte
              Kommentar bearbeiten
              beide Fehler korrigiert, update siehe post #1. Kopiert euch NUR die sonos2.php raus
          • daintree
            Smart Home'r
            • 30.08.2015
            • 34

            Habe mit Ivona noch ein Problem. Kriege nichts abgespielt. Habe auch die Anpassungen im Post 160 gemacht, ohne Erfolg.

            Getestet habe ich wie folgt über den Browser:
            http://x.x.x.x/sonos/sonos2.php?zone...Hans&text=Dies ist ein Test&volume=30

            Kriege dabei folgenden Output im Browser:

            _getConfig(); $this->_main(); } protected function _getConfig() { include 'config.php'; $this->_config = $config; } function _main() { $akey = $this->_config['access_key']; $skey = $this->_config['secret_key']; } static $utc_tz; function save_mp3($text, $filename, $language, $voice, $rate="medium", $volume="loud") { $payload['Input'] = array(); $payload['Input']['Data'] = urldecode($text);//{"Input":{"Data":"Hello world"}}' $payload['Parameters']['Rate'] = $rate; $payload['Parameters']['Volume'] = $volume; $payload['Voice']['Name'] = $voice; $payload['Voice']['Language'] = $language; $payload = json_encode($payload); $mp3 = $this->get_mp3($payload); file_put_contents($filename, $mp3); } function get_mp3($payload) { #global $skey, $akey; if( !self::$utc_tz ) { self::$utc_tz = new \DateTimeZone( 'UTC' ); } $datestamp = new \DateTime( "now", self::$utc_tz ); $longdate = $datestamp->format( "Ymd\\THis\\Z"); $shortdate = $datestamp->format( "Ymd" ); // establish the signing key { $ksecret = 'AWS4'.$this->_config['secret_key']; $kdate = hash_hmac( 'sha256', $shortdate, $ksecret, true ); $kregion = hash_hmac( 'sha256', 'eu-west-1', $kdate, true ); $kservice = hash_hmac( 'sha256', 'tts', $kregion, true ); $ksigning = hash_hmac( 'sha256', 'aws4_request', $kservice, true ); } // command parameters $params = array( 'host' => 'tts.eu-west-1.ivonacloud.com', 'content-type' => 'application/json', 'x-amz-content-sha256' => hash( 'sha256', $payload ), 'x-amz-date' => $longdate, ); $canonical_request = $this->createCanonicalRequest( $params, $payload ); $signed_request = hash( 'sha256', $canonical_request ); $sign_string = "AWS4-HMAC-SHA256\n{$longdate}\n$shortdate/eu-west-1/tts/aws4_request\n" . $signed_request; $signature = hash_hmac( 'sha256', $sign_string, $ksigning ); $params['Authorization'] = "AWS4-HMAC-SHA256 Credential=" .$this->_config['access_key']. "/$shortdate/eu-west-1/tts/aws4_request, " . "SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, " . "Signature=$signature"; $params['content-length'] = strlen( $payload ) ; /* * Execute Crafted Request */ $url = "https://tts.eu-west-1.ivonacloud.com/CreateSpeech"; $ch = curl_init(); $curl_headers = array(); foreach( $params as $p => $k ) $curl_headers[] = $p . ": " . $k; curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_POST,1); curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); curl_setopt($ch, CURLOPT_HTTPHEADER, $curl_headers); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_TCP_NODELAY, true); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false ); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false ); // debug opts { curl_setopt($ch, CURLOPT_VERBOSE, true); $verbose = fopen('php://temp', 'rw+'); curl_setopt($ch, CURLOPT_STDERR, $verbose); $result = curl_exec($ch); // raw result rewind($verbose); $verboseLog = stream_get_contents($verbose); #echo "Verbose information:\n
            ", htmlspecialchars($verboseLog), " \n"; } return $result; } private function createCanonicalRequest( Array $params, $payload ) { $canonical_request = array(); $canonical_request[] = 'POST'; $canonical_request[] = '/CreateSpeech'; $canonical_request[] = ''; $can_headers = array( 'host' => 'tts.eu-west-1.ivonacloud.com' ); foreach( $params as $k => $v ) $can_headers[ strtolower( $k ) ] = trim( $v ); uksort( $can_headers, 'strcmp' ); foreach ( $can_headers as $k => $v ) $canonical_request[] = $k . ':' . $v; $canonical_request[] = ''; $canonical_request[] = implode( ';', array_keys( $can_headers ) ); $canonical_request[] = hash( 'sha256', $payload ); $canonical_request = implode( "\n", $canonical_request ); return $canonical_request; } } ?>


            Die Berechtigungen stimmen. Im config.php habe ich den Access key und secret key korrekt gesetzt

            Jemand eine Idee?

            Kommentar


            • Liver_64
              Liver_64 kommentierte
              Kommentar bearbeiten
              so gehts nicht: sonos2.php?zone
              sondern nur so: sonos2.php/?zone (slash zwischen php und Fragezeichen)

            • Liver_64
              Liver_64 kommentierte
              Kommentar bearbeiten
              Nutzt du eine NAS oder Raspi? Wenn Raspi musst du noch curl installieren
          • daintree
            Smart Home'r
            • 30.08.2015
            • 34

            hmm.. Alle meine Befehle werden ohne slash zwischen php und dem Fragezeichen aufgerufen. Diese funktionieren so auch einwandfrei. Den Aufruf habe ich aus deinem readme und dann einfach noch entsprechend angepasst. Muss was anderes sein.


            Nachtrag:
            Habe die Stimme aus dem Aufruf entfernt und im Config File auf VoiceRSS umgestellt.
            http://x.x.x.x/sonos/sonos2.php?zone...sage&text=Dies ist ein Test&volume=30

            Funktioniert einwandfrei.

            Stelle ich wieder zurück auf Ivona und probiere wieder mit dem gleichen Command, bekomme ich wieder die gleiche Meldung wie im Post 177.
            Muss also an Ivona liegen.. ?
            Zuletzt geändert von daintree; 25.03.2016, 14:14.

            Kommentar


            • Liver_64
              Liver_64 kommentierte
              Kommentar bearbeiten
              Dein Link klappt 1:1 bei mir. Hast du den secret und access key korrekt kopiert oder vielleicht ein Leerzeichen am Ende drin?
              der die Sprache verändert? de-DE wäre für deutsch, andere unterstützt das Skript nicht
              Zuletzt geändert von Liver_64; 25.03.2016, 16:14.
          • daintree
            Smart Home'r
            • 30.08.2015
            • 34

            Ich nutze ein Raspi. Curl Support ist gemäss phpinfo enabled und aktiv. Habe nun auch den Secret und Access Key nochmals neu erstellt auf dem Ivona Portal und diese dann im config.php neu eingetragen. Alles Leider ohne Erfolg. Muss allenfalls sonst noch was auf dem Raspi installiert werden?

            Kommentar

            • lox4fun
              Smart Home'r
              • 02.09.2015
              • 51

              probier mal zeile 1 in ivona_tts.php von "<?" auf "<?php" zu verändern

              Kommentar

              Lädt...