# IPX v5 Widget son

**URL:** <https://forum.gce-electronics.com/t/ipx-v5-widget-son/17923>\
**Category:** Cartes Ethernet IPX800\
**Tags:** ipx800-v5\
**Created:** [Décembre 15, 2023, 10:27 UTC](https://forum.gce-electronics.com/t/ipx-v5-widget-son/17923 "2023-12-15T10:27:49Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Antarion](https://forum.gce-electronics.com/letter_avatar_proxy/v4/letter/a/ecc23a/32.png) [@Antarion](https://forum.gce-electronics.com/u/Antarion)\
**Post date:** [Décembre 15, 2023, 10:27 UTC](https://forum.gce-electronics.com/t/ipx-v5-widget-son/17923/1 "2023-12-15T10:27:49Z")

</div>

Bonjous à tous,

Sur un [IPX V5](https://gce-electronics.com/1799-.html) est il possible de créer a partir d’un Widget HTML du son soit en html ou js  
du style mp3 comme un son de sirene ou alarme.

Merci d’avance

---

<div class="post-metadata">

**Author:** ![grocrabe](https://forum.gce-electronics.com/user_avatar/forum.gce-electronics.com/grocrabe/32/6197_2.png) [@grocrabe](https://forum.gce-electronics.com/u/grocrabe)\
**Post date:** [Décembre 15, 2023, 11:08 UTC](https://forum.gce-electronics.com/t/ipx-v5-widget-son/17923/2 "2023-12-15T11:08:05Z")

</div>

Bonjour Antarion,

si vous voulez un son de sirène, pourquoi ne pas brancher une sirène sur un relais de la [V5](https://gce-electronics.com/1799-.html)?

Bonne journée

---

<div class="post-metadata">

**Author:** ![Antarion](https://forum.gce-electronics.com/letter_avatar_proxy/v4/letter/a/ecc23a/32.png) [@Antarion](https://forum.gce-electronics.com/u/Antarion)\
**Post date:** [Décembre 15, 2023, 11:29 UTC](https://forum.gce-electronics.com/t/ipx-v5-widget-son/17923/3 "2023-12-15T11:29:04Z")

</div>

Bonjour grocrabe,

Oui je pense faire ça  
mais j’ai essayé avant a partir d’un widget sans reussir mais je suis sûr qu’il y a une possibilité de lire un son mp3  
Mais je n’y arrive pas …

---

<div class="post-metadata">

**Author:** ![fgtoul](https://forum.gce-electronics.com/user_avatar/forum.gce-electronics.com/fgtoul/32/28801_2.png) [@fgtoul](https://forum.gce-electronics.com/u/fgtoul)\
**Post date:** [Décembre 15, 2023, 2:17 UTC](https://forum.gce-electronics.com/t/ipx-v5-widget-son/17923/4 "2023-12-15T14:17:59Z")

</div>

Bonjour,  
aujourd’hui il y a l’objet Player.  
Il faudrait voir si c’est possible de créer une playlist particulière pour l’alarme, je n’ai pas exploré les possibilités de ce côté avec l’API.  
Il y a peut être également une possibilité avec les enceintes Sonos. Pas exploré non plus.

---

<div class="post-metadata">

**Author:** ![Antarion](https://forum.gce-electronics.com/letter_avatar_proxy/v4/letter/a/ecc23a/32.png) [@Antarion](https://forum.gce-electronics.com/u/Antarion)\
**Post date:** [Décembre 15, 2023, 3:11 UTC](https://forum.gce-electronics.com/t/ipx-v5-widget-son/17923/5 "2023-12-15T15:11:32Z")

</div>

Bonjour fgtoul,

Merci pour les réponses.  
Bonne journée

---

<div class="post-metadata">

**Author:** ![Helethom](https://forum.gce-electronics.com/letter_avatar_proxy/v4/letter/h/779978/32.png) [@Helethom](https://forum.gce-electronics.com/u/Helethom)\
**Post date:** [Mars 3, 2024, 4:45 UTC](https://forum.gce-electronics.com/t/ipx-v5-widget-son/17923/6 "2024-03-03T16:45:05Z")

</div>

Bonjour,  
Je tente de faire le lien entre les infos du plugin Sonos depuis mon jeedom vers le module player afin de pouvoir controler mes enceintes depuis mes [X-Display](https://gce-electronics.com/1421-.html) 2. J’arrive à transférer les infos de titre et auteur de jeedom vers l’IPX grace à une requete PUT en Curl en revanche je ne parviens pas à effectuer de Push vers jeedom depuis le module player, qui n’a qu’une sortie timelapse. Les IO, récupérable via l’API ne semblent pas non plus donner l’état de l’action et je ne peux donc pas non plus déclencher d’action (lecture ou autre) depuis jeedom.  
J’ai tenté de rentrer l’IP de mon jeedom comme nom de serveur dans le module mais je sèche aussi sur cette piste. Auriez-vous d’autres idees?

---

<div class="post-metadata">

**Author:** ![Helethom](https://forum.gce-electronics.com/letter_avatar_proxy/v4/letter/h/779978/32.png) [@Helethom](https://forum.gce-electronics.com/u/Helethom)\
**Post date:** [Mars 3, 2024, 6:22 UTC](https://forum.gce-electronics.com/t/ipx-v5-widget-son/17923/7 "2024-03-03T18:22:47Z")

</div>

GCE indique que le Player n’est compatible qu’avec IEST. [En cherchant sur le net](https://github.com/hannes/IEastMediaRoom) je vois que IEST fonctionne avec des requettes HTTP de type [http://10.10.10.254/httpapi.asp?command=setPlayerCmd:play:http://pr320.pinguinradio.nl/listen.pls](http://10.10.10.254/httpapi.asp?command=setPlayerCmd:play:http://pr320.pinguinradio.nl/listen.pls), 10.10.10.254 étant dans cet exemple l’IP indiquée dans la configuration du module player de l’IPX. Savez-vous s’il est possible d’émuler par exemple un serveur IEST et de rediriger ces requetes HTTP vers des URL de commandes de Jeedom?

---

<div class="post-metadata">

**Author:** ![Helethom](https://forum.gce-electronics.com/letter_avatar_proxy/v4/letter/h/779978/32.png) [@Helethom](https://forum.gce-electronics.com/u/Helethom)\
**Post date:** [Mars 3, 2024, 6:48 UTC](https://forum.gce-electronics.com/t/ipx-v5-widget-son/17923/8 "2024-03-03T18:48:58Z")

</div>

On peut déclencher des Push grace à un scenario avec comme déclencheur le module Player, mais ça ne marche que pour la commande Pause/Play. Dommage.

---

<div class="post-metadata">

**Author:** ![aero17](https://forum.gce-electronics.com/letter_avatar_proxy/v4/letter/a/49beb7/32.png) [@aero17](https://forum.gce-electronics.com/u/aero17)\
**Post date:** [Juin 21, 2024, 6:28 UTC](https://forum.gce-electronics.com/t/ipx-v5-widget-son/17923/9 "2024-06-21T06:28:07Z")

</div>

Bonjour @Helethom, j’essaie de mettre en place le script donc tu parles sur l’autre discussion et je n’arrive pas à faire remonter les infos.

Est ce que tu vois un endrois où j’ai pu me planter stp? 🤞

```auto
Nom du scénario : Test Sonos SDB > IPX
- Objet parent : Salle de Bain
- Mode du scénario : all
    - Programmation : */5 * * * *
    - Evènement : #[Salle de Bain][Sonos SdB][Répéter statut]#
    - Evènement : #[Salle de Bain][Sonos SdB][Muet statut]#
    - Evènement : #[Salle de Bain][Sonos SdB][Aléatoire statut]#
    - Evènement : #[Salle de Bain][Sonos SdB][Piste]#
    - Evènement : #[Salle de Bain][Sonos SdB][Statut]#

    
    ACTION
     tag - Options : {"enable":"1","background":"0","name":"ip","value":"192.168.99.245"}//IP de l'IPX800
     tag - Options : {"enable":"1","background":"0","name":"apikey","value":"apikey"} // API key de l'IPX800
     tag - Options : {"enable":"1","background":"0","name":"ID_IPX800_Title","value":"524323"} // ID récupéré à l'aide de l'API DECK de l'IPX800
     tag - Options : {"enable":"1","background":"0","name":"ID_IPX800_Artist","value":"524324"} // ID récupéré à l'aide de l'API DECK de l'IPX800
     tag - Options : {"enable":"1","background":"0","name":"ID_IPX800_Random","value":"65968"} // ID récupéré à l'aide de l'API DECK de l'IPX800
     tag - Options : {"enable":"1","background":"0","name":"ID_IPX800_Loop_Mode","value":"196683"} // ID récupéré à l'aide de l'API DECK de l'IPX800
     tag - Options : {"enable":"1","background":"0","name":"ID_IPX800_Mute","value":"65964"} // ID récupéré à l'aide de l'API DECK de l'IPX800
     tag - Options : {"enable":"1","background":"0","name":"String_SONOS","value":"[Salle de Bain][Sonos SdB]"}
    
    CODE
     (code) $tags = $scenario->getTags();
    
    // Configuration de l'IPX800
    $Config_IPX800 = array(
        'ip' => $tags['#ip#'],
        'apikey' => $tags['#apikey#']
    );
    
    // Données pour le Player
    $Player_Data = array(
        'Artist' => array(
            'ipx800id' => $tags['#ID_IPX800_Artist#'],
            'ipx800folder' => '/api/core/str/',
            'sonosvalue' => cmd::byString('#' . $tags['#String_SONOS#'] . '[Artiste]#')->execCmd()
        ),
        'Title' => array(
            'ipx800id' => $tags['#ID_IPX800_Title#'], 
            'ipx800folder' => '/api/core/str/',
            'sonosvalue' => cmd::byString('#' . $tags['#String_SONOS#'] . '[Piste]#')->execCmd()
        ),
        'Random' => array(
            'ipx800id' => $tags['#ID_IPX800_Random#'],
            'ipx800folder' => '/api/core/io/',
            'sonosvalue' => cmd::byString('#' . $tags['#String_SONOS#'] . '[Aléatoire statut]#')->execCmd()
        ),
        'Mute' => array(
            'ipx800id' => $tags['#ID_IPX800_Mute#'],
            'ipx800folder' => '/api/core/io/',
            'sonosvalue' => cmd::byString('#' . $tags['#String_SONOS#'] . '[Muet statut]#')->execCmd()
        ),
        'Loop_Mode' => array(
            'ipx800id' => $tags['#ID_IPX800_Loop_Mode#'],
            'ipx800folder' => '/api/core/ana',
            'sonosvalue' => cmd::byString('#' . $tags['#String_SONOS#'] . '[Répéter statut]#')->execCmd()
        )
    );
    
    // Fonction pour envoyer les données via PUT
    function put($url, $data) {
        $curl = curl_init($url);
        $headers = array(
            "accept: application/json",
            "Content-Type: application/json"
        );
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
    
        $resp = curl_exec($curl);
        if ($resp === false) {
            throw new Exception('cURL error: ' . curl_error($curl));
        }
        curl_close($curl);
        return $resp;
    }
    
    // Fonction principale pour exécuter les commandes sur l'IPX800
    function execute($Config_IPX800, $Player_Data) {
        foreach ($Player_Data as $key => $info) {
            $urlPut = 'http://' . $Config_IPX800['ip'] . $info['ipx800folder'] . $info['ipx800id'] . '?ApiKey=' . $Config_IPX800['apikey'];
            $body = array('value' => $info['sonosvalue']);
            try {
                $response = put($urlPut, $body);
                // Log pour déboguer
                // log::add('GCE_IPX800V5', 'debug', $urlPut . ' PUT : ' . json_encode($response));
            } catch (Exception $e) {
                // Gestion d'erreur
                log::add('GCE_IPX800V5', 'error', 'Error sending data to IPX800: ' . $e->getMessage());
            }
        }
    }
    
    // Exécution avec les données configurées
    execute($Config_IPX800, $Player_Data);
    
    

```
