Retour d'expérience sur le X-display-v2

Bonjour à tous,

Je vous fait part de mon retour d’expérience sur le x-display-v2.

Côté installation : il s’intègre très bien en lieu et place d’un x-display v1 ou d’une prise ou interrupteur. Seul bémol est qu’il n’y ai pas d’ergots pour le retenir en partie haute et pas de système de clips en partie basse, à la place de la petite vis qui n’est pas pratique à remettre en cas de démontage. J’ai donc mis du scotch double face pour le maintenir en partie haute, vraiment dommage sur ce point.

Côté intégration dans un système domotique : je possède un IPX800v4, il se raccorde très facilement et se programme comme le x-display v1. Cependant, il reste plus limité sur certain type d’écran (4 bouton, slider, etc…).
J’ai donc choisi de l’intégrer en mode standalone dans ma domotique jeedom qui embarque un serveur mqtt. L’intégration est très simple grâce à la documentation API. J’ai ainsi créé 17 écrans dont deux sliders, 1 quatre boutons et le reste en thermostat et jauge.

Cependant j’aurais plusieurs remarques/suggestions :

  • l’écran 4 boutons pourrait être de plus grande taille (comme par exemple l’écran thermostat), avec un texte sous chaque bouton serait un plus.
  • je ne comprends pas le fonctionnement de l’icône de chauffe sur l’écran thermostat, parfois elle est allumée, parfois éteinte, peut-être en rapport avec la température de consigne suivant la température mesurée. Il aurait été souhaitable qu’en mode standalone on puisse gérer cette icône via API.
  • l’écran player, j’ai le plugin Spotify Connect sur jeedom, donc je peux facilement piloter un player Spotify Connect. Seul bémol étant l’impossibilité depuis l’API de transmettre à l’écran le titre et l’artiste du morceau en cours. Il serait judicieux de rajouter ces deux commandes API.
  • dernier sujet, je trouve la mesure de la température intégrée à l’écran assez aléatoire. J’ai mis deux sondes à côté de l’afficheur, une en Zigbee, l’autre en Zwave, et leur mesures relevées restent sensiblement dans le même ordre de grandeur. Côté x-display, il peut y avoir plus de 1,5°C d’écart avec les deux sondes suivant que les températures soient basses ou hautes. Je n’arrête pas de régler le coefficient dans les réglages, sans succès. Par exemple lorsque les deux sondes affichent 17,5°C, l’écran est à 19°C. Sans réglage, lorsque ces mêmes sondes l’affiches plus de 22°C (avec un ressenti réel de cette température), l’écran dépasse à peine les 20°C. Bref les mesures relevées par l’écran ne me semblent pas pertinentes, et c’est dommage car je voulais remplacer mes sondes sans fils. Peut-être que la dérive est induite du système de double sondes intégrées (compensation entre la température interne et externe du boitier), et qu’il faudrait que je vérifie la bonne étanchéité du pot sur lequel le socle est vissé (va encore falloir « jouer » avec le double face et la vis).

Ci-dessous un graph d’une sonde (Zigbee) avec la sonde du x-display :

Pour résumer, je suis très satisfait du produit, d’autan plus qu’il peut évoluer côté API et logiciel.
Je viens d’en commander un autre pour gérer le studio situé au dessus de mon garage. J’ai là aussi un IPX800v4, mais je le connecterai en standalone.

1 « J'aime »

Bonjour,

oui, cela est déjà remonté dans un autre sujet. GCE a bien noté la demande, ça va sûrement évoluer.

bonne journée

Bonjour @fgtoul,

En effet, j’avais lu ce post, datant d’octobre 2023, et ne semblait pas être une priorité. Dans mon post, je demande que l’icône soit aussi gérée par API, ce qui n’était pas le cas dans la demande précédente.

Bonjour ;

Je vous partage aussi mon retour d’experience sur ce beau produit

Je suis très satisfait du rendu , l’ecran est propre et la definition très adaptée pour sa fonction, facile à monter .

Les fonctions que je pensaient trouvées / à developper

  • Possibilité d’avoir un Display text ON/OFF avec une couleur comme sur le dashboard de l’IPX v5 , cela serait très pratique: pour afficher les jours TEMPO , Rouge , Blanc , Bleu basé sur l’input de ECO DEVICE ou faire remonter des evenements ( PAC , Gel , Lumière allumées … )
  • Possibilité d’avoir des ICONEs de status avec Couleurs , sans avoir possibilité de modifier l’état car on appuie vite sur l’ecran par inadvertance
  • Possibilité d’integrer le plug In meteo comme dans le dashboard IPX V5
  • Possibilité de pousser un flux camera sur un evenement : comme dans le dashboard IPXv5

Pour info : - J’ai eu un pb en voulant connecter le Bus du display sur l’EBX switch sur l’entre Bus V4 les autres RJ45 etant tous occupés : Le display n’etait pas reconnu , j’ai trouvé une solution de contournement en branchant le display sur l’entre BUS de l’IPXv5.

Merci a toute l’equipe GCE pour vos produits

1 « J'aime »

Bonjour @choupfamily, tu pourrais me dire comment tu as fait avec Jeedom pour gérer les commandes du plugin PLAYER sur Xdisplay2 stp?

Bonjour @aero17,

Désolé pour ma réponse tardive. En fait j’ai le plugin « Spotify Connect » sur jeedom, et il suffit d’associer les commandes (via un scénario) d’un « player » Spotify connect aux commandes de ton écran « player » de ton x-display. J’ai juste fais cela pour tester, mais comme on ne peut pas pour le moment envoyer par commande API le nom du titre et de l’artiste, je n’ai pas trouvé un grand intérêt.

Bonjour @choupfamily, peux-tu m’en dire plus sur la maniere que tu as utilisée pour lier les commandes d’un player avec ton spotify? Comme expliqué dans l’autre sujet IPX v5 Widget son - #7 par Helethom j’arrive à afficher les informations de titres et d’auteurs mais pas à avoir des boutons fonctionnels…

Pour info voici le code du scenario Jeedom que j’utilise pour arriver à afficher les infos sur le player depuis Jeedom. Il est facile à utiliser car on le paramètre dans les tags au début et ensuite la requête est envoyée dans un bloc Code avec du Curl. :

- Nom du scénario : Sync Sonos Salon -> IPX800
- Objet parent : Salon
- Mode du scénario : all
    - Programmation : */5 * * * *
    - Evènement : #[Salon][192.168.1.XX - Sonos Arc][Répéter statut]#
    - Evènement : #[Salon][192.168.1.XX - Sonos Arc][Muet statut]#
    - Evènement : #[Salon][192.168.1.XX - Sonos Arc][Aléatoire statut]#
    - Evènement : #[Salon][192.168.1.XX - Sonos Arc][Piste]#
    - Evènement : #[Salon][192.168.1.XX - Sonos Arc][Statut]#



    
    ACTION
     tag - Options : {"enable":"1","background":"0","name":"ip","value":"192.168.1.xx"}//IP de l'IPX800
     tag - Options : {"enable":"1","background":"0","name":"apikey","value":"XXXXXXXXX"} // API key de l'IPX800
     tag - Options : {"enable":"1","background":"0","name":"ID_IPX800_Title","value":"xxxxx"} // ID récupéré à l'aide de l'API DECK de l'IPX800
     tag - Options : {"enable":"1","background":"0","name":"ID_IPX800_Artist","value":"xxxxx"} // ID récupéré à l'aide de l'API DECK de l'IPX800
     tag - Options : {"enable":"1","background":"0","name":"ID_IPX800_Random","value":"xxxxx"} // 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":"xxxxx"} // ID récupéré à l'aide de l'API DECK de l'IPX800
     tag - Options : {"enable":"1","background":"0","name":"ID_IPX800_Mute","value":"xxxxx"} // ID récupéré à l'aide de l'API DECK de l'IPX800
     tag - Options : {"enable":"1","background":"0","name":"String_SONOS","value":"[Salon][192.168.1.XX - Sonos Arc]"}
    
    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);
    
    

1 « J'aime »

Attention, visiblement nous n’utilisons pas le x-display de la même manière. Dans ton cas il semble être relié à un IPX800 V5 j’imagine. De mon côté il est en entièrement en standalone, c’est à dire qu’il communique en mqtt avec mon jeedom. Dans ce cas pour les commandes il m’ a suffit de créer les commandes mqtt (API) correspondantes dans l’équipement x-display que j’ai crée dans le plugin MQTT2 de jeedom.
Et comme les commandes API n’existent pas encore par la remontée des titres et du nom de l’artiste, je ne peux pas actuellement traiter ses informations.
Merci pour le partage de ton code, même si dans mon cas je ne peux pas l’utiliser.

Merci je comprends mieux. Dans le wiki je lis ce paragraphe qui semble indiquer que je ne peux pas non-plus utiliser ta méthode dans ma config avec IPX800 v5

Si vous souhaitez utiliser MQTT tout en ayant votre écran relié à une IPX800V4-V5, vous ne pourrez pas réaliser de configuration (Création/suppression/udpate et updateName des écrans) du X-DISPLAY V2. En effet, il s’agit d’une sécurité mise en place pour éviter les conflits de configuration entre IPX et MQTT.

Je pense que si car tu sera limité uniquement en création d’écran via les commandes API. En revanche tu dois pouvoir créer des écrans player avec l’IPX et utiliser les commandes API pour l’écran API. Il suffit simplement de connaître le numéro de l’écran et d’envoyer les commandes API correspondantes via le plugin MQTT2.
Essaies et fais nous un retour stp.

Ok je vais tenter.
Autre sujet relatif au X-Display: Vous aussi votre écran est fréquemment allumé, mais en noir (donc la dalle éclaire) quand il est en veille? C’est très gênant la nuit…

J’ai fait quelques essais mais je découvre totalement mqtt. Visiblement je ne parviens pas à connecter mon X-Display au server mqtt installé en local avec le plugin mqtt2…

@Helethom

Bonsoir,
Après quelques recherches j’ai finalement réussi à intégrer mon X-Display à mqtt2. En fait il a fallu que je change le mot de passe généré automatiquement par le plugin par un nouveau, plus court, pour que ça fonctionne.
Je ne vois pas comment récupérer l’info du bouton Next activé depuis le display afin de lier une action depuis Jeedom. Dans la doc je ne vois qu’un PUB lié à Next et aucun SUB. Je rate quelque-chose?

Je me réponds à moi-même: Elle n’est pas dans la doc mais le SUB /PlayerNextState retourne l’état de next activé depuis l’écran.

Bonjour @choupfamily, tu pourrais me donner les infos que tu as mis en place pour la partie scénario sur la player sur l’ipx stp? juste pour une commande (NEXT par exemple) après je pourrais me débrouiller.

Merciii

Bonjour,
Ce code met bien à jour les valeurs du titre et de l’artiste du X-Display mais seulement une fois sur 10. Je pense qu’il faudrait executer un refresh du X-Display pour que le changement s’affiche. Savez-vous si une telle commande existe?
Y-aurait-t’il une autre manière de procéder? Je ne vois pas d’entrée de type String dans l’objet player pour renseigner ces informations.

Bonsoir et désolé de ne pas avoir répondu plus top. En fait mon x-display est en mode autonome, donc pas d’utilisation de scénario IPX. J’utilise mon x-display directement avec Jeedom en mqtt. J’ai abandonné la partie player car pas vraiment d’intérêt. Avec jeedom, c’est assez facile de lancer des commandes player depuis le x-display à l’aide de scénario et de plugin comme spotify connect.

Bonjour,
Merci du retour. Oui ma problématique est d’afficher sur l’écran Player du XDisplay le titre et l’artiste qui est en cours de lecture. Avez-vous trouvé une solution?
Bonne soirée

Bonsoir,

Non pas de solution, il me semble que l’équipe GCE devait travailler sur le sujet, cela doit faire partie de leur todolist.