Changement titres sonos

bonjour,
j’ai créer un flow comme joint

je voudrai par un appui sur un BP (bouton sonoff) a changer de favoris sonos

Je n’arrive pas a creer ce flow, quelqu’un pourrais m’aider
Merci
Yann

Je n’ai pas “sonos” mais je dirai:
QUAND: Appuis sur le bouton sonoff
ET: Sonos est en cours de lecture (si la carte existe)
ALORS: Jouer favoris X

Non?

bonjour sebastien,
non ce n’est pas si simple, car j’ai environ 15 favori, le but est a chaque appui sur le bp, on change de favori
yann

Avec Homeyscript et un script dans le genre ça peut se faire.

Si un nombre aléatoire suffit à sélectionner une playlist, le script serai le suivant:

const numberOfFav = 15;
var randomNum = Math.floor(Math.random() * numberOfFav) + 1;
log(randomNum);
await tag('Favoris aléatoire', randomNum);
return true;

Il créé un tag ‘Favoris aléatoire’ en lui donnant un nombre aléatoire de 1 à 15. A adapter.

Si jamais il te faut le nom de la playlist ça peut être celui ci:

const favPlaylist = ['playlist1', 'playlist2', 'playlist3', 'playlist4', 'playlist5'];
var randomPlaylist = favPlaylist[Math.floor(Math.random() * favPlaylist.length)];
log(randomPlaylist);
await tag('Favoris aléatoire', randomPlaylist);
return true;
1 Like

:woozy_face: :woozy_face:

tu peux m’expliquer parce que la je suis perdu…
Merci
Yann

Bien sur! :slightly_smiling_face:

Je viens de regarder l’appli Sonos. Visiblement c’est du texte dans ta tuile
image
“Favorite” c’est bien le nom d’un favoris et pas un numéro si je ne me trompe pas?

Et bien tu peux créer le flow que j’ai proposé et utiliser HomeyScript pour l’enregistrer dedans. Une fois HomeyScript installé, tu aura un nouvel onglet dans ton menu latéral. Tu fais “Nouveau HomeyScript”, tu le nomme (dans mon exemple plus haut j’avais random mais tu mets ce que tu veux faudra juste remplacé random dans le flow) et tu l’enregistre.

Tu utilisera donc ce script:

const favPlaylist = ['playlist1', 'playlist2', 'playlist3', 'playlist4', 'playlist5'];
var randomPlaylist = favPlaylist[Math.floor(Math.random() * favPlaylist.length)];
log(randomPlaylist);
await tag('Favoris aléatoire', randomPlaylist);
return true;

Où playlist1, playlist2, … sont à remplacer par les nom de tes favoris, tu peux en mettre autant que tu veux. A chaque fois que le script sera exécuté, il ira chercher aléatoirement une valeur du tableau ( en javascript “[…]” est un tableau de données) et mettra à jour le tag “Favoris aléatoire” avec comme valeur la valeur aléatoirement sortie.

Donc il te faut simplement appeler ce script dans ton flow avec la carte “Run script” dans les cartes ET.
Par exemple:
QUAND: appuis sur le bouton sonoff
ET: “Run script” (entrer le nom que tu as donné pour ton script)
ALORS: ta carte sonos pour jouer ton favoris (avec comme valeur de favoris le tag créé par le script qui se nomme “Favoris aléatoire”)

1 Like

favori est bien le nom d’un favori.
Et bien même si c’est chinois ce script je vais le recopier bêtement (je n’aime pas car il faut comprendre).
je vais le tester ce weekend
Comment tu créer ces scripts avec ce langage?
Merci

/* Déclaration du tableau. 'const' car il est constant il ne changera pas dans le code
 'favPlayslit' est le nom du tableau
 ['1er élément', '2e élement', '3e élément'] sont le tableau et ses élément; */
const favPlaylist = ['playlist1', 'playlist2', 'playlist3', 'playlist4', 'playlist5']; 

/* Déclaration d'une variable 'randomPlaylist' pour stocker le titre de la playlist (j'aurai également pu mettre 'const' aussi car elle ne change pas plus loin dans le code)

Nous voulons un élément du tableau favPlaylist[]; favPlaylist[0] renverra le 1er élément du tableau soit 'playlist1',
favPlaylist[4] renverra le 5e élément du tableau soit 'playlist5'...
Mais nous voulons un élément de ce tableau de façon aléatoire, donc on ajuste avec ce qui suit.

Math.floor() est une fonction javascipt qui renvois l'entier inférieur d'un nombre Math.floor(0.1) renverra 0, Math.floor(1.999) renverra 1.

Math.random est une fonction javascript qui renvoie un nombre (décimal ou non, d'où l'intéret de Math.floor()) dans une plage qui lui est donnée. Math.random(10); renverra un nombre de 0 à 10. 3,3232323 ou 0,1233, ou 8...


.length est 'la taille de'. Donc favPlaylist.length est la taille du tableau 'favPlaylist'. en ajoutant *favPlaylist.length on dit que ça doit être un nombre aléatoire dans la plage de la taille du tableau (le nombre d'élément dans le tableau).


Nous avons donc une variable 'randomPlaylist' qui, a chaque fois que le code est exécuté, sera égale à:

favPlaylist[un nombre décimale ou non, aléatoire compris entre 0 et la taille du tableau, qui est arrondi à l'entier inférieur]

soit favPlaylist[nombre entier aléatoire]

Et on a vu plus haut que favPlaylist[2] renverra le 3e élément du tableau.
*/
var randomPlaylist = favPlaylist[Math.floor(Math.random() * favPlaylist.length)];


//log(); ou console.log(); permet de débogger en affichant ce que l'on souhaite dans la console
log(randomPlaylist);


//Ensuite on créé un tag ('Nom du tag', valeur);
await tag('Favoris aléatoire', randomPlaylist);

/* On retourne true cela permet dans les flows de continuer ensuite.
Dans les Advanced flow tu as du remarquer que les lignes entre carte sont bleu ou orange/jaune.
Quand c'est bleu c'est que la carte retourne vrai (true) quand c'est orange/jaune c'est que la carte retourne faux 'false'
*/
return true;

Tu peux créer directement dans HomeyScript.

Pour aller plus loin:

const

var

array (tableau)

Math.floor()

Math.random()

console.log()

1 Like

Un grand Merci @sebyldino , je cherchais cette fonction, par contre je n’arrive pas a remonter le Tag dans le Flow ? (A vrai dire j’ai jamais utilisé de Tag…)

Il faut que le script soit exécuté une première fois pour que le tag soit créé.

Meme un fois, je n’arrive pas a récupérer le Tag, je pense que Sonos n’accepte pas, il faut choisir dans la liste.

Meme avec un simple Flow :slight_smile:

Ah je comprend mieux.
La liste est à choisir parmi un choix défini dans la tuile.
Du j’ai bien ma petite idée de comment faire mais je ne suis pas sur mon PC.

Il faudrai du coup utiliser le script qui sort un numéro aléatoire et faire un un flow.

Quand on appuis sur le bouton lancer le script.
Et une autre carte QUAND la variables « favori aléatoire » a changé ET qu’elle est égale à 1 jouer favoris1, ET quand elle est égale à 2 jouer favoris 2…

1 Like

seb
merci de tes retours, pourrais tu nous aider pour ton idée?
Merci

sinon pour contourner le probleme (ca ne le résoudra pas), j’avais chez moi n aeotec wallmote quad, il y a pas mal de possibilité de declenchements (16), mais pas +, c’est sur qu’avec un BP on peut faire a l’infini, mais je seche…

Voici le flow auquel je pense. A ajuster suivant vos favoris.

Il faudra donc utiliser ce script:

const numberOfFav = 15; // Définir ici le nombre de favoris
var randomNum = Math.floor(Math.random() * numberOfFav) + 1; 
log(randomNum);
await tag('Favoris aléatoire', randomNum);
return true;

Si vous aviez utilisé l’autre script avant, il faudrait supprimer l’ancien tag. Car l’autre créait un tag de type String et celui ci créé un tag de type Number.

Pour supprimer un tag:

await tag('NAME', null); // Remplacer NAME par le nom du tag à supprimer puis exécuté le script

bonjour sebastien,
tu es matinal :grinning:, merci de ton aide
je vais essayer aujourd’hui, par contre question:
comment fais tu pour taper le script? j’ai éssayé de le copier coller, ca ne fct pas, tu le tapes donc?il faut respecter les espaces scrupuleusement?
Merci
Yann

au top sebastien,
ca fonctionne super
merci a toi
:+1: :+1: :+1: :+1: :+1:

1 Like

Bonjour a vous deux, l’App Sonos a été développée par Athom/Homey, je leur ai demandé de la modifier pour avoir l’option aléatoire, j’ai eu une réponse positive, ils vont l’ajouter, néanmoins si vous pouviez faire aussi une demande cela les incitera a placer en priorité cette demande :wink:

https://homey.app/en-us/support/

1 Like