[TUTORIEL] Wake-up en musique


#1

Salut à tous,
ça y est, après quelques heures à plancher dessus j’ai réussis à faire en sorte que Gladys me réveil en musique…depuis mon Téléphone.
Et oui car jouer ma musique dans le salon, je m’en f** un peu quand je suis au lit.
Je suis donc en train d’écrire un tuto dessus.
Pour info, il faut MQTT sur Gladys et Tasker+MQTT client sur le phone.


#2

Hâte de lire ça, ça m’intéresse !


#3

Alors voila,
comment faire pour que gladys vous envoi une notification et que cela active , par exemple, la musique(dans mon cas SPOTIFY mais cela doit être possible avec d’autres appli)?

Ce tuto va se décomposer en 3 parties, deux sur le téléphone(Android, désolé pour les autres) et une troisième sur Gladys.

Gladys

Déja, il faut faire en sorte que Gladys réagisse à un reveil.

Pré-requis

Il n’y a pas besoin de grand-chose hormis Gladys en 3.8.0(ou superieur) et le module MQTT(avec sa nouvelle mouture) :https://github.com/isokar/gladys-mqtt

Création du script d’emission

En premier lieu, une fois le module installer, il faut créer un script qui va envoyer un message à votre smartphone.
Pour cela, allez dans l’onglet script, faite nouveau, choisissez le nom que vous voulez.
dans le code, tapez:

gladys.modules.mqtt.emit(‘stat/ID_Utilisateur/wakeup’,‘ON’);

Pensez à bien mettre Votre ID dans ce code.

Création du scénario

Maintenant que le script existe, il faut l’activer. Pour cela, on passe par un scenario qui se déclenchera
allez dans l’onglet scenario, choisissez le titre que vous voulez. Ensuite, choisissez la catégorie “Utilisateur” puis “Utilisateur doit se reveiller”.
Enfin dans l’étape 5, selectionnez “Exécute un script” et choisissez le script que vous venez de créer.

C’est bon, Gladys est pret. Il reste maintenant à configurer le smartphone.

Le Smartphone

Pré-requis

Pour le smartphone, nous partons sur Tasker et un module complémentaire, MQTT Client

Reception du message MQTT

Dans MQTT Client, cliquez sur “+” pour creer une nouvelle connexion.Ensuite:

  • Enable : mettre sur “ON”
  • Nick Name : Le nom que vous voulez (Ex:Gladys)
  • Host : L’adresse IP de votre Broker (Attention, si le broker est hébergé sur votre Pi, mettez l’IP externe si vous risquez de l’utiliser hors de chez vous)
  • Port : le port d’acces de votre Broker(généralement 1883)
  • Username : L’ID d’acces au Broker
  • Password : Le MdP
    Selon votre configuration de Broker, il se peux que vous ayez à modifier certains parametres(SSL…)

Une fois la configuration enregistrer, la connexion apparait sur la page d’acceuil.
Cliquez dessus pour gerer les messages.
En bas de la fenetre, tapez:
“stat/ID_Utilisateur/+” et faite “ENTER”.
Là aussi, mettez votre ID Gladys.

A ce niveau, vous pouvez tester que tout fonctionne en lancant le script depuis Gladys. La messagerie sur Android devrait s’incrémenter et afficher “ON”

InterAction avec Tasker

Maintenant que l’on recois bien le message, nous allons jouer avec.
Dans Tasker, faites “Nouveau Profil”
Choisissez Evénement->Plugin->MQTT Client->Message Arrived
Dans configuration:

  • varmessage : ON
  • varmqtttopic : wakeup
    Enregistrez
    Ensuite dans taches, faites “Nouvelle Tache”->wakeup_Gladys et faites ce que vous voulez pour vous réveiller.

lancer Spotify

Pour Lancer Spotify, il faut le faire en deux étapes, choisir la musique et lancer la lecture à proprement parler. en effet, quand le téléphone est vérouillé, le choix de lecture ne suffit pas.
Dans la tache faites “Nouvelle Action”->Réseau->Naviguer vers une URL
Dans l’url, mettez celle de votre titre préféré(perso: https://open.spotify.com/track/61nSbxyL6VRPp32AMscxiF)
Ensuite, faite “Nouvelle Action”->Media->Controle des médias

  • Cmd : Play
  • App : Spotify

Et ca y est, normalement si vous relancez le script sur Gladys, la musique devrait se lancer sur votre téléphone.

évidemment, vous pouvez adapter à votre besoin.


#4

Hello,
Merci pour le tuto.

Points à noter :

  • dans sendMqttMsg le log fait référence à Roomba :wink: peut être que sendMqttMsg serait plus approprié ?
  • Pour information, Tasker coûte 2,99€ pour les gens qui font comme il faut
  • Le module MQTT Client est le premier : mqtt client pour android

Problème rencontré :frowning:

Ça m’aurait tenté d’essayer jusqu’au bout par contre je rencontre cette erreur à l’exécution du script : TypeError: client.publish is not a function

Tests faits :

  • Je suis bien sur le fork d’isokar
  • j’ai check le code je vois pas pourquoi ça ne fonctionne pas (je suis noob en node alors très certainement que j’ai pas eu les yeux au bon endroit)
  • La traceback :
    0|gladys | sendMqttMsg - Sending stat/1/wakeup stat/1/wakeup
    0|gladys | Error in script : TypeError: client.publish is not a function
    0|gladys | Successfully connected to MQTT : [object Object]
    0|gladys | Unhandled rejection TypeError: shared.setClient is not a function
    0|gladys | at /home/pi/gladys/api/hooks/mqtt/lib/connect.js:38:11
    0|gladys | at tryCatcher (/home/pi/gladys/node_modules/bluebird/js/release/util.js:16:23)
    0|gladys | at Promise._settlePromiseFromHandler (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:509:35)
    0|gladys | at Promise._settlePromise (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:569:18)
    0|gladys | at Promise._settlePromise0 (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:614:10)
    0|gladys | at Promise._settlePromises (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:693:18)
    0|gladys | at Promise._fulfill (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:638:18)
    0|gladys | at PromiseArray._resolve (/home/pi/gladys/node_modules/bluebird/js/release/promise_array.js:126:19)
    0|gladys | at PromiseArray._promiseFulfilled (/home/pi/gladys/node_modules/bluebird/js/release/promise_array.js:144:14)
    0|gladys | at PromiseArray._iterate (/home/pi/gladys/node_modules/bluebird/js/release/promise_array.js:114:31)
    0|gladys | at PromiseArray.init [as _init] (/home/pi/gladys/node_modules/bluebird/js/release/promise_array.js:78:10)
    0|gladys | at Promise._settlePromise (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:566:21)
    0|gladys | at Promise._settlePromise0 (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:614:10)
    0|gladys | at Promise._settlePromises (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:693:18)
    0|gladys | at Async._drainQueue (/home/pi/gladys/node_modules/bluebird/js/release/async.js:133:16)
    0|gladys | at Async._drainQueues (/home/pi/gladys/node_modules/bluebird/js/release/async.js:143:10)
    0|gladys | at Immediate.Async.drainQueues (/home/pi/gladys/node_modules/bluebird/js/release/async.js:17:14)
    0|gladys | at runCallback (timers.js:789:20)
    0|gladys | at tryOnImmediate (timers.js:751:5)
    0|gladys | at processImmediate [as _immediateCallback] (timers.js:722:5)

Suggestion (probablement hors propos)

Je suis assez fan des tests unitaires, j’ai bien lancés ceux du module dépendant mqtt, mais ça n’a rien à voir. Il n’y aurait pas moyen de généraliser le fait d’avoir des tests ? (Attention, ce n’est pas une critique et je suis bien conscient que le dev par le test ça représente une charge initiale de temps plus conséquente, mais quel bonheur pour la maintenance …)

Merci pour toute proposition ou idée qui pourrait solutionner ce problème


#5

Je suis 100% d’accord pour les tests. Gladys en lui même est couvert au maximum par des tests lancés à chaque push par TravisCI

Après les modules le problème c’est que chaque module à pour objectif de communiquer avec des périphériques extérieurs, pas toujours facile à mocker dans les tests

Pour ton problème ici je laisse @isokar répondre ! :slight_smile:


#6

Yop,
je regarde ca.
pour les test unitaires, c’est surtout que je débute en codage “propre” et surtout node mais je suis d’acc que ce serait mieux.

EDIT: j’ai corrigé le text. par contre @ProtZ , pour ton erreur, as-tu une connexion au serveur MQTT au démarrage de Gladys?


#7

Bonjour à tous !

Tout d’abord merci pour ce tuto !
J’ai tenté de le suivire, resuivre, reresuivre scrupuleusement, mais je n’y arrive pas, enfin ca ne marche pas :confused:

Ma config ! J’utilise mosquitto comme broker MQTT (installer grâce à ce tuto : [TUTORIEL] Installer un broker MQTT pour Gladys).
Quand je démarre Gladys, Il arrive bien à s’y connecter.
Mais quand je lance la commande de ton script gladys.modules.mqtt.emit(‘stat/1/wakeup’,‘ON’);
( mon ID gladys vaut 1). J’ai une erreur :

0| gladys | Error in script : TypeError: gladys.modules.mqtt.emit is not a function

Je n’ai rien de plus, et je ne comprends pas ce que j’ai pu rater !

Merci d’avance !

A bientôt !


#8

Plop,

Bon j’ai testé un truc et pffffttt alors j’ai tout réinstallé … maintenant j’ai une base saine.

@isokar Je te confirmes que :
Successfully connected to MQTT : mqtt://m23.cloudmqtt.com:10243

Par contre au démarrage juste avant ça j’ai :

You have triggered an unhandledRejection, you may have forgotten to catch a Promise rejection:
0|gladys | TypeError: shared.setClient is not a function
0|gladys | at /home/pi/gladys/api/hooks/mqtt/lib/connect.js:38:11
0|gladys | at tryCatcher (/home/pi/gladys/node_modules/bluebird/js/release/util.js:16:23)
[…]

Si je lance le script :
0|gladys | Gladys MQTT - Sending stat/1/wakeup
0|gladys | Error in script : TypeError: client.publish is not a function
0|gladys | Unhandled rejection TypeError: shared.setClient is not a function
0|gladys | at /home/pi/gladys/api/hooks/mqtt/lib/connect.js:38:11
0|gladys | at tryCatcher (/home/pi/gladys/node_modules/bluebird/js/release/util.js:16:23)
[…]

:frowning:


#9

Salut à tous,

Au temps pour moi, mon erreur venait de l’installation de module, j’avais pris celle sur le store de module…
Du coup je me retrouve dans la même situation que @ProtZ, même erreur.

Une idée ?


#10

Quelqu’un a une idée ? Petit up’ …


#11

Hello @Jojo ! J’ai fais le merge sur le module MQTT officiel, et normalement il devrait fonctionner maintenant avec cette commande.

Pourrais tu tester avec le module du store ?


#12

Hello,
Trop cool merci infiniment @pierre-gilles et @isokar ça fonctionne : Gladys=>MQTT=>Tasker=> Action.
Je n’ai pas spotify mais deezer alors je cherche encore comment faire pour lancer l’app.

@+


#13

je n’ai pas deezer mais je pense qu’il doit y avoir un truc dans le même genre


#14

Salut @ProtZ

Pour lancer deezer il suffit que tu aille dans ton navigateur et que tu prenne l’URL de la playlist que tu veux lui faire jouer. Si ti veux que ça démarre automatique ajoute autoplay=true à la fin de l’URL.

Ensuite tu crée une tâche dans tasker pour ouvrir une URL avec celle que tu viens de récupérer, tu déclenche l’action une première fois et ton téléphone devrait te demander si tu veux ouvrir l’URL avec un navigateur ou directement avec l’appli Deezer, donc à ce moment tu choisis Deezer. Et après à chaque fois il lancera l’appli directement :slight_smile:

C’est ce que je fait chez moi ^^


#16

Merci pour les tips sur l’url, sinon je me suis mis ça dans tasker v5.1 :

  1. Charger une appli => App Deezer (Exclure des app récentes oui, Always start a new copy : oui)
  2. Attendre => 5s
  3. Contrôle des médias => Cmd Play (simuler le bouton Media : Oui, App Deezer)

Fonctionne bien quand le téléphone est déverrouillé et que l’app n’est pas lancée.
Fonctionne 1 fois sur 2 quand le téléphone est verrouillé et que l’app n’est pas lancée.

Bref c’est perfectible :wink:

source


#17

j’ai effectivement un souci dans le genre. Android n’a pas l’air d’aimer lancer une app quand il est verrouillé.


#18

Hello,

Désolé pour la réponse tardive, mais oui ça fonctionne ! Super Merci Pierre-Gilles !
Mais comme les autres ont dit, en effet Android à un soucis avec le lancement d’application quand il est verrouillé ! Mais Gladys n’y est pour rien :wink:

Et félicitation pour ton lancement sur Gladys à mi-temps !


#19

Bonsoir, j’ai tout configurer comme indiqué mais tasker n’active pas le profil. Que faut il faire?


#20

Normalement, tu as un profil que tu active toi et ensuite tu as des taches qui sont lancée en automatique.


#21

Le profil es activé mais dans la notification tasker ça met aucun profil actif