+ Antworten
Seite 9 von 26 ErsteErste ... 7 8 9 10 11 19 ... LetzteLetzte
Ergebnis 81 bis 90 von 251
  1. #81
    Registriert seit
    Aug 2005
    Ort
    Fürstenfeldbruck-Aich (Bayern)
    Beiträge
    4,048

    Standard Durchsage-Funktion auf Squeezebox LMS

    Da sich meine Squeezeboxen mittlerweile vermehren habe ich mir gedacht nutze diese doch als Durchsagegeräte.

    Nichts einfacher als das und habe folgende Funktion dafür gebastelt.

    PHP-Code:
    //------------- Durchsage an Squeezebox ----------------------------------------
    // parameters:
    // (define) $box      = Name der Box oder MAC-Adresse
    // (int)  $id_status    = ID der Statusvariable ob Box vor Durchsage AN oder AUS war
    // (int)  $id_playlist_old  = ID der Variable für die Wiedergabeliste der entsprechenden Box
    // (int)  $id_volume_old  = ID der Lautstärke-Variable der Box vor Durchsage
    // (int)    $id_time_old      = ID der Positionsvariable in Sekunden
    // (int)  $volume_durchsage = Lautstärke der Durchsage
    // (array)  $array_mp3    = Pfade der Sounddateien
    // (int)    $id_wf            = ID des Webfronts auf dem Meldung ausgegeben wird
    // -----------------------------------------------------------------------------
    function SqueezeDurchsage($boxname$id_status$id_playlist_old$id_volume_old$id_time_old$volume_durchsage$array_mp3$id_wf) {
     include 
    "getid3/getid3.php";        // Class zum Auslesen der Informationen einer Multimediadatei
     
    $box     $boxname;            // Raum
     
    $status    GetValue($id_status);          // Status Box An oder Aus
     
    $playlist_old  GetValue($id_playlist_old);    // aktuelle Wiedergabeliste zwischenspeichern
     
    $volume_old  GetValue($id_volume_old);      // aktuelle Lautstärke der Box zwischenspeichern
     
    $time_old  GetValue($id_time_old);        // Position des aktuellen Titels merken (float Sekunden)
     
    $volume_durch  $volume_durchsage;       // Lautstärke für Durchsage
     
    $mp3     $array_mp3;                    // Array mit Audiodateien
     
    $id_webfront   $id_wf;
     
    $offset        2;                             // Offset für längere Spielzeit
     // Informationen über die Mediadateien sammeln insbesondere Länge der Dateien
     
    $getID3 = new getid3;
     
    $laenge 0;
     
    $playtime = array();
     
     foreach(
    $mp3 as $key => $value) {
      
    $playtime[$key] = $getID3->analyze($mp3[$key]);
      
    IPS_Logmessage("Playtime""Dauer von Media [".$key."] ".$value." ist ".$playtime[$key]['playtime_seconds']." Sekunden.");
      
    $laenge $laenge $playtime[$key]['playtime_seconds'];
     }
     
    $laenge = ($laenge $offset ) * 1000;
     
    IPS_Logmessage("Playtime""Gesamtdauer: ".round($laenge2)." ms");
     
    // Aktuelle Wiedergabeliste löschen
     
    $cmd"playlist clear ";
     
    CSCK_SendText(SqueezeServer$box." ".$cmd.chr(13));
     
    // Abzuspielende Dateien in die gelöschte Wiedergabeliste schreiben
     
    foreach($mp3 as $key => $value) {
      
    $cmd"playlist add ".$value;
      
    CSCK_SendText(SqueezeServer$box." ".$cmd.chr(13));
     }
     
    WFC_SendNotification($id_webfront"Durchsage für ".round(($laenge/1000), 2)." Sekunden!","""Speaker", ($laenge/1000)-1);
     
    SqueezeVolume($box$volume_durch);
     
    $cmd "play";
     
    CSCK_SendText(SqueezeServer$box." ".$cmd.chr(13));
     
    // Warten bis Audiodateien abgespielt wurden
     
    IPS_Sleep($laenge); // Dauer ca. Gesamtspielzeit der Durchsage
     // Temporäre Wiedergabeliste wieder löschen
     
    $cmd"playlist clear ";
     
    CSCK_SendText(SqueezeServer$box." ".$cmd.chr(13));
     
    $SQ_Playlist IPS_GetVariableProfile(".SQ_Playlist");                       // Variablenprofil in Array schreiben
     
    $SQ_Playlist_ID $SQ_Playlist['Associations'][$playlist_old-1]['Icon'];
     
    // Alte Wiedergabeliste wieder starten
     
    $cmd "playlist loadtracks playlist.id=";
     
    CSCK_SendText(SqueezeServer$box" "$cmd $SQ_Playlist_ID chr(13));
     
    WFC_SendNotification($id_webfront"Playlist"$SQ_Playlist['Associations'][$playlist_old-1]['Name']." wird neu gestartet.""Speaker"5);
     
    SqueezeVolume($box$volume_old);
     
    $cmd "time $time_old";
     
    CSCK_SendText(SqueezeServer$box." ".$cmd.chr(13));
     
     
    // War die Box zuvor aus wieder ausschalten
     
    if(!$status) {
      
    SqueezePower($boxfalse);
     }

    Diese Funktion ist eine Erweitung meines Squeezeskriptes und sollte so erst einmal nicht ohne weiteres auf anderen Squeeze-Skripten im Forum laufen da diese etliche Variablen benötigt die meine Skripte derzeit anbieten.

    Als weiteres wird die Klasse getid3 benötigt die Ihr hier im Anhang findet. Die Klasse kann verdammt viel Informationen aus Mediendateien auslesen, ich benötige hier nur die Abspielzeit der eigentlich Durchsagen und in der Funktion damit arbeiten zu können.

    1. Die Klasse einfach entpacken und den darin befindlichen Ordner getid3 komplett ins Skriptverzeichnis von IPS kopieren.
    2. Die oben stehende Funktion in eure inc_squeezebox ans Ende kopieren.
    Das folgende Skript zeigt ein Beispiel wie man durchsagen steuern kann.

    PHP-Code:
    <?
    include('59910.ips.php'); // Squeeze-Funktionssammlung laden
    // Sprachdatei generieren ------------------------------------------------------
    $id_tts 39243 /*[Tools\Squeezebox\Auswertung Squeezeboxen\Durchsagen\Text To Speech für SQ-Durchsagen]*/;
    TTS_GenerateFile($id_tts"  So ein scheiß Wind!""L://Daten/mp3/IPSymcon/durchsage.wav"35);
    //------------- Durchsage an Squeezebox ----------------------------------------
    // parameters:
    // (define) $box      = Name der Box oder MAC-Adresse
    // (int)  $id_status    = ID der Statusvariable ob Box vor Durchsage AN oder AUS war
    // (int)  $id_playlist_old  = ID der Variable für die Wiedergabeliste der entsprechenden Box
    // (int)  $id_volume_old  = ID der Lautstärke-Variable der Box vor Durchsage
    // (int)    $id_time_old      = ID der Positionsvariable des Titels
    // (int)  $volume_durchsage = Lautstärke der Durchsage
    // (array)  $array_mp3    = Pfade der Sounddateien
    // (int)    $id_wf            = ID des Webfronts auf dem Meldung ausgegeben wird
    // -----------------------------------------------------------------------------
    SqueezeDurchsageWohnzimmer,
          
    36142 /*[Tools\Squeezebox\Auswertung Squeezeboxen\Musik Büro\Power]*/,
          
    41742,
          
    47000 /*[Tools\Squeezebox\Auswertung Squeezeboxen\Musik Büro\Volume]*/,
          
    37989,
          
    20,
          array(
    "K://IP-Symcon2/media/meldung.wav""L://Daten/mp3/IPSymcon/durchsage.wav"),
          
    43269 /*[WebFront Hauptsteuerung]*/
         
    );
    ?>
    Die TTS-Instanz wird nur dann benötigt wenn man sich Durchsagen selber durch IPS generieren möchte, ansonsten einfach eine beliebige Datei erzeugen und ins Array eintragen.

    Der Aufruf der Funktion bzw. die benötigten Parameter sollte für Nutzer meines Skriptes verständlich sein.





    Kleiner Hinweis zu meinem Array.
    • Die erste Datei ist ein Hinweiston um Aufmerksamkeit zu erreichen
    • Die zweite Datei ist dann die eigentliche Durchsage die ich durch TTS erzeuge und anschließend abspiele.
    Ein kleines Manko hat diese Funktion noch was aber in Kürze noch beseitigt wird. Die Funktion muss derzeit für jede Box nacheinander aufgerufen werden, d.h. es spielt derzeit noch nicht parallel an mehreren Box gleichzeit ab.

    Nun viel Spaß
    Angehängte Dateien Angehängte Dateien
    Geändert von wgreipl (23.02.12 um 20:41 Uhr)
    Gruß
    Werner

    Komponenten:: Homematic(CCU) 250DP, EATON-MOELLER, 1-Wire, WMRS200, 15" Touchdisplay
    Software::
    IPS V4.x, iMobile, WebFront, Logitech Media Server 7.8.x, SONOS
    Hardware:: IPS-Server: ESXi 6.x, Windows 10 Ent, 4 Kerne, 8GB RAM

  2. #82
    Registriert seit
    Sep 2011
    Ort
    um Berlin/Neuenhagen
    Beiträge
    384

    Standard Include!!!

    habe ein Problem beim Starten des Auswertungsskriptes, bekomme folgende Fehlermeldung.
    Kann sich das einer von euch erklären????
    Angehängte Grafiken Angehängte Grafiken  

  3. #83
    Registriert seit
    Sep 2011
    Ort
    um Berlin/Neuenhagen
    Beiträge
    384

    so noch den Baum
    Angehängte Grafiken Angehängte Grafiken  

  4. #84
    Registriert seit
    Aug 2005
    Ort
    Fürstenfeldbruck-Aich (Bayern)
    Beiträge
    4,048

    Als allererstes heißt dein Includescript nicht 56479.ips.php sondern inc_squeezebox.php (rechte Spalte) und zweitens darfst Du das Skript nicht per Hand (Execute/Ausführen) starten. Es wird nur per RegisterVariable gestartet.

    Die restlichen Fehler haben sich dann entweder erledigt oder wir suchen weiter.
    Gruß
    Werner

    Komponenten:: Homematic(CCU) 250DP, EATON-MOELLER, 1-Wire, WMRS200, 15" Touchdisplay
    Software::
    IPS V4.x, iMobile, WebFront, Logitech Media Server 7.8.x, SONOS
    Hardware:: IPS-Server: ESXi 6.x, Windows 10 Ent, 4 Kerne, 8GB RAM

  5. #85
    Registriert seit
    Feb 2007
    Ort
    Zwickau
    Beiträge
    5,483

    Hallo Werner,

    kannst Du mir mal auf die Sprüge helfen, ich bastle ja gerade an meiner SQB Lösung für mein WF Player. Dank Deiner tollen Scripte, aus denen ich schon einiges exportiert habe, gehts auch gut vorwärts.

    Ich lade ja immer einen Ordner (auf meiner HDD) in die SQB, wie kann ich die Info bekommen wie die Playlist dann aussieht, wenn z.B. shuffle an ist... Kann ich die Info aus der SQB zurücklesen? Ich möchte quasi eine Liste mit der Reihenfolge und dem Namen der mp3 Dateien.
    Geändert von Ferengi-Master (02.02.12 um 16:31 Uhr)
    MfG Thomas

    Eaton Xcomfort|FS20|1-Wire|Axis WebCams|WMRS200 Wetterstation|Funksystem-868|Gas und Wasserzähler per S0 1-Wire|E-Zähler per OKK+seriell2LAN Adapter|Amazon Alexa|
    Visu auf: 10"Touchscr.|Apple iPod Touch|Apple iPhone|Apple iPad|IPS V5.x|Dashboard|WebFront|iFront


  6. #86
    Registriert seit
    Aug 2005
    Ort
    Fürstenfeldbruck-Aich (Bayern)
    Beiträge
    4,048

    Hui,

    gute Frage und dazu auch noch eine gute Idee.

    Kommen über

    <MAC> status 0 50 tags: <LF>

    die Tracks in der Originalen oder geshuffelten Reihenfolge zurück.

    Ansonsten kann ich es im Moment auch nicht beantworten.

    Evtl. das LMS-Interface parsen, so bin ich auch auf manche Lösungen gekommen.
    Gruß
    Werner

    Komponenten:: Homematic(CCU) 250DP, EATON-MOELLER, 1-Wire, WMRS200, 15" Touchdisplay
    Software::
    IPS V4.x, iMobile, WebFront, Logitech Media Server 7.8.x, SONOS
    Hardware:: IPS-Server: ESXi 6.x, Windows 10 Ent, 4 Kerne, 8GB RAM

  7. #87
    Registriert seit
    Feb 2007
    Ort
    Zwickau
    Beiträge
    5,483

    Werner, das klappt wunderbar, Danke!!!
    Sogar mit shuffle funktioniert es.

    Code:
    .....
     [24] id:2731
     [25] title:Caruso
     [26] playlist index:1
     [27] id:2732
     [28] title:Non Ti Scordar Di Me
     [29] playlist index:2
     [30] id:2733
     [31] title:Il Canto
     [32] playlist index:3
    ....
    Geändert von Ferengi-Master (02.02.12 um 20:56 Uhr)
    MfG Thomas

    Eaton Xcomfort|FS20|1-Wire|Axis WebCams|WMRS200 Wetterstation|Funksystem-868|Gas und Wasserzähler per S0 1-Wire|E-Zähler per OKK+seriell2LAN Adapter|Amazon Alexa|
    Visu auf: 10"Touchscr.|Apple iPod Touch|Apple iPhone|Apple iPad|IPS V5.x|Dashboard|WebFront|iFront


  8. #88
    Registriert seit
    Aug 2005
    Ort
    Fürstenfeldbruck-Aich (Bayern)
    Beiträge
    4,048

    Seltsam ist eigentlich nur das ich diese Abfrage bei mir auch nutze und es bei mir nicht korrekt angezeigt wird.
    Hmmmm.
    Gruß
    Werner

    Komponenten:: Homematic(CCU) 250DP, EATON-MOELLER, 1-Wire, WMRS200, 15" Touchdisplay
    Software::
    IPS V4.x, iMobile, WebFront, Logitech Media Server 7.8.x, SONOS
    Hardware:: IPS-Server: ESXi 6.x, Windows 10 Ent, 4 Kerne, 8GB RAM

  9. #89
    Registriert seit
    Mar 2008
    Ort
    Ruesselsheim
    Beiträge
    3,555

    Zitat Zitat von wgreipl Beitrag anzeigen
    Da sich meine Squeezeboxen mittlerweile vermehren habe ich mir gedacht nutze diese doch als Durchsagegeräte.
    Hallo
    Ich habe auch mehrere Boxen ( 3 + Squeezeplay ) und hab mir auch eine
    "Durchsage" gebastelt. Wie verhinderst du , dass dein Script gleichzeitig
    mehrmals aufgerufen wirst? Ich hab mir dafuer ein Spooldir eingerichtet,
    aber denk ich zu kompliziert?

    Hier meine Durchsagescript als Info
    PHP-Code:
    //******************************************************************************
    //    Name            :    Sprachausgabe.ips.php
    //    Aufruf        :    Erstellen einer MP3-Datei im Spooldir danach dieses Script
    //                        aufrufen.Solange noch Files im Spooldir alle 10 Sekunden
    //                probieren. ( IPS_Semaphore )
    //                Wenn keine Files zum Ansagen Scripttimer auf 2 Minuten,
    //                nur zur Sicherheit
    // Info        :  Spooldir eingerichtet weil gleichzeitige Ausgabe
    //                von Meldungen , von verschiedenen Scripts , moeglich ist.
    //                Und dann kam Chaos !
    //                Wenn nicht anwesend oder nicht wach MP3-Files im
    //                Spooldir sammeln.
    //                Wird dann bei anwesend und wach angesagt.
    //
    //******************************************************************************

       
    require_once("squeeze_func.ips.php");
       require_once(
    "Funcpool.ips.php");

        
    $debug false;

        
    $scriptid $_IPS['SELF'];

        
    $x GetValueBoolean(IPS_GetVariableIDByName("EINSTELLUNGEN.SPRACHAUSGABE",$root_settings));
        if (!
    $x) { IPS_SetScriptTimer($scriptid,120); return; }                                             // wenn Sprachausgabe abgewaehlt dann raus
        
    $x GetValueBoolean(IPS_GetVariableIDByName("STATUS.WACH",$root_status));
        if (!
    $x) { IPS_SetScriptTimer($scriptid,120); return; }                                                // wenn nicht wach raus
        
    $x GetValueBoolean(IPS_GetVariableIDByName("STATUS.ANWESEND",$root_status));
        if (!
    $x) { IPS_SetScriptTimer($scriptid,120); return; }                                                // wenn nicht anwesend raus

       
    $dir        IPS_GetKernelDir();
        
    $dir           $dir "voicereader\\";
        
    $spooldir   $dir "spooler\\";                                                                 // Spooldirectory

        
    $files scandir($spooldir);                                                                      // sind MP3-Files zum Ansagen
        
    $files array_slice($files,2);                                                                   // ".." und "." weg

        
    if ( !$files )                                                                                                  // Keine Files zum ausgeben
            
    {
           
    IPS_SetScriptTimer($scriptid,120);                                                     // Scripttimer auf 2 Minuten
            
    if ( $debug IPS_Logmessage("Sprachausgabe","Scripttimer auf 60");
            return;
            }
        
    IPS_SetScriptTimer($scriptid,10);                                                                          // In 10 Sekunden wieder probieren

        
    if (!IPS_SemaphoreEnter("SPRACHAUSGABE"1000))                                           // Sprachausgabe sperren wenn noch ausgeben wird
            
    {
              
    IPS_LogMessage("Sprachausgabe","Script gesperrt!");
            return;
            }


        
    $file $spooldir $files[0];                                                                            // erstes File ausgeben im Spooldir

        
    $squeezebox_alias "WOHNEN";                                                                             // Squeezebox WOHNEN - egal welche da alle sync

        
    if ( isset($file) )
            
    $meldung   $file;
        else
            
    $meldung   IPS_GetKernelDir() . "//Voicereader//test.mp3";                           // Testfunktion

        
    if ( !file_exists($meldung))
            { 
    IPS_LogMessage("Sprachausgabe","\nSprachfile nicht gefunden") ; return; }            // wenn File nicht gefunden raus

        
    $fadeinsec ;                                                                                            // Fadeinzeit nach der Ansage
        
    $volume    60;                                                                                            // Volume der Ansage

        
    $anzahl_player squeeze_command("PLAYERS_PLAYERCOUNT");
        if ( 
    $anzahl_player == ) { echo "\nKein Player connected ! "; return; }                 // wenn kein Player connected dann raus

        
    $connected squeeze_command("PLAYERS_PLAYERCONNECTED",$squeezebox_alias);
        if ( 
    $connected == )
            { echo 
    "\nPlayer : ".$squeezebox_alias." nicht connected ! "; return; }                // wenn der Player nicht connected raus

       
    $mode squeeze_command("PLAYLIST_MODE",$squeezebox_alias);                                       // Modes merken ( Play , Pause , Stop )

        
    $aktuelle_repeat   squeeze_command("PLAYLIST_PLAYLISTREPEAT",$squeezebox_alias,"?");    // Repeatmodus merken

        
    $aktuelle_position squeeze_command("PLAYLIST_TIME",$squeezebox_alias,"?");              // aktuelle Position merken

        
    $aktuelle_volume   squeeze_command("PLAYERS_PLAYERMIXERVOLUME",$squeezebox_alias,"?");  // aktuelles Volume merken

        
    $aktuelle_position $aktuelle_position ;                                                        // aktuelle Position - 3 Sekunden
        
    if( $aktuelle_position $aktuelle_position 0;                                                 // nicht kleiner als 0 werden

        
    squeeze_command("PLAYERS_PLAYERMIXERVOLUME",$squeezebox_alias,"-10");                           // Etwas leiser

        
    sleep(1);                                                                                 // kurz warten

        
    squeeze_command("PLAYLIST_STOP",$squeezebox_alias);                                             // Plaliste stoppen

        
    squeeze_command("PLAYLIST_PLAYLISTSAVE",$squeezebox_alias,"playlist");                         // aktuelle Playlist speichern

       
    squeeze_command("PLAYERS_PLAYERMIXERVOLUME",$squeezebox_alias,"0");                            // Volumen auf 0

        
    squeeze_command("PLAYLIST_PLAYLISTREPEAT",$squeezebox_alias,"0");                              // Repeatmode auf 0

        
    squeeze_command("PLAYERS_PLAYERMIXERVOLUME",$squeezebox_alias,$volume);                        // Volume auf Ausgabelevel

        
    squeeze_command("PLAYLIST_PLAYLISTPLAY",$squeezebox_alias,$meldung);                           // Meldung ausgeben

        
    $laenge squeeze_command("PLAYLIST_DURATION",$squeezebox_alias);                              // Laenge der Ausgabe in Sekunden

        
    $laenge = ($laenge );                                                                      // Laenge plus 1 Sekunde

        
    sleep($laenge);                                                                                // warte bis Meldung beendet

        
    squeeze_command("PLAYLIST_PLAYLISTRESUME",$squeezebox_alias,"playlist noplay:1");           // alte Playliste laden - mit noplay Option

        
    squeeze_command("PLAYERS_PLAYERMIXERVOLUME",$squeezebox_alias,$aktuelle_volume);            // altes Volume einstellen

        
    squeeze_command("PLAYLIST_PLAYLISTREPEAT",$squeezebox_alias,$aktuelle_repeat);              // altes Repeat einstellen

        
    if ( $mode == "play" )                                                                      // nur wenn vorher Play dann ausfuehren
            
    {
            
    squeeze_command("PLAYLIST_PLAY",$squeezebox_alias,$fadeinsec);                           // Play mit fadein Sekunden
            
    squeeze_command("PLAYLIST_TIME",$squeezebox_alias,"+".$aktuelle_position);               // an alte Position springen
            
    }
            
        
    unlink($file);                                                                              // ausgegebenes File aus Spool loeschen
        
          
    IPS_SemaphoreLeave("SPRACHAUSGABE");                                                                         // Semaphore wieder freigeben! 

  10. #90
    Registriert seit
    Aug 2005
    Ort
    Fürstenfeldbruck-Aich (Bayern)
    Beiträge
    4,048

    Chaos dürfte eigentlich nicht passieren da ich auf der SQB ein Playliste einrichte, diese mit den abzuspielenden Dateien befüttere und dann erst abspiele.

    Danach wird die Playliste gelöscht.

    Von der Logik her sollte bei einem mehrfachen Ausführen die Playliste erweitert werden, habe ich aber noch nicht getestet.
    Gruß
    Werner

    Komponenten:: Homematic(CCU) 250DP, EATON-MOELLER, 1-Wire, WMRS200, 15" Touchdisplay
    Software::
    IPS V4.x, iMobile, WebFront, Logitech Media Server 7.8.x, SONOS
    Hardware:: IPS-Server: ESXi 6.x, Windows 10 Ent, 4 Kerne, 8GB RAM

Ähnliche Themen

  1. Ereignis Skript wird mehrmals ausgeführt
    Von Marco im Forum HomeMatic
    Antworten: 8
    Letzter Beitrag: 29.12.10, 16:29
  2. Antworten: 8
    Letzter Beitrag: 30.03.10, 20:40
  3. Dieses Skript wurde als 'fehlerhaft' markiert, falsch!
    Von Hinti im Forum Skripte, PHP, SQL
    Antworten: 6
    Letzter Beitrag: 24.02.09, 20:33
  4. Wer ruft das Skript auf
    Von wgreipl im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 4
    Letzter Beitrag: 03.05.08, 12:38
  5. Probleme mit dem Skript von Retiarius(FHT)
    Von crezs im Forum Skripte, PHP, SQL
    Antworten: 5
    Letzter Beitrag: 20.12.06, 08:05

Stichworte