Discord, Sms/mms, Macrodroid et bottle/Flask

Honimoura

Member
Bonjour,
Je suis sur un projet personnel qui me fait me tirer ce qui me reste de cheveux.
J'ai créé une assistante vocale comme Cortana et compagnie en plus poussée (Ouverture d'applications, recherche de fichiers, recherche sur internet, recherche de films, SpeechToText, Navigation par la voix, etc...)
Voulant toujours plus, je cherche un moyen pour que tout SMS, MMS et notifications discord reçues sur le téléphone lorsqu'il est connecté au wifi du domicile soient envoyé a mon assistante vocale afin que celle ci me puisse me dire ce que je recois, de quelle type, de qui et quoi (Discord ou sms/mms, l'expediteur et le message).

J'ai donc essayé avec un serveur Flask et Bottle afin de recevoir la requete POST et Macrodroid pour envoyer les informations a chaque notification.

Cependant les deux semblent fonctionner (Serveur et macrodroid) mais ne semble pas se comprendre (certainement une erreur de ma part)

Car a chaque notification le serveur Flask ou Bottle m'affiche les mêmes résultats :

code 400, message Version de requête incorrecte ('\x13\x01\x13\x02\x13\x03À+À,Ì©À/À0̨À\x13À\x14\x00\x9c\x00\x9d\x00/\x005\x01 \x00\x00\x8b\x00\x17\x00\x00ÿ\x01\x00\x01\x00\x00')

Je n'y connais rien autant en serveur Flask/Bottle que macrodroid qui pourtant n'est pas si compliqué.
Je précise que jusque là je me suis attaqué uniquement aux notifications Discord.

Du coté serveur j'ai fais quelque chose de simple :
from bottle import Bottle, request

app = Bottle()

@app.route('', method='POST')
def handle_post():
data = request.forms # Récupère les données du formulaire POST
print(data) # Affiche les données reçues
return 'OK'

if __name__ == '__main__':
app.run(host='localhost', port=8080)

Du coté macrodroid j'ai fait une interception de notification de tout type de l'application discord en déclencheur et en action une requete HTTP (POST) avec l'url et le port du serveur, en paramètres de requetes key1 = {not_title}, key2 = {notification}. Afin d'avoir le nom et le message. Corps du contenu, type = application/json. En-tête "Nom = {not_title}", "Message = {notification}".

Je précise également, je sais que je peux être connecté a deux endroits sur le même compte discord... mais ce n'est pas le but recherché car 2 comptes différents et le but est de pouvoir obtenir ces infos même en faisant autre chose, ce qui évite de basculer entre les fenêtres si ce n'est pas important ou de devoir sauter sur le téléphone lorsque l'on est occupé.

Le but sera également de pouvoir répondre a ces messages par l'Assistante vocale et donc de faire l'inverse (Dire a l'assistante vocale de répondre, donner le texte, transférer du pc au tel, de macrodroid a discord ou sms suivant le message initialement reçu.

Je vous rassure, je ne demande pas a ce que l'on me fasse tout ca, je demande juste si le problème vient de ma configuration macrodroid ou serveur ou les deux. Et comment résoudre ce probleme. Pour le reste, je me débrouillerais.

Si quelqu'un s'y connait, je serais ravis d'avoir de l'aide car là je sèche. Sur internet, des que l'on écrit macrodroid et discord, vous n'avez que des techniques pour que macrodroid et son concurrent envoi un message automatique sur discord, mais personne ne semble chercher a faire ce que je recherche... ou ils se cachent bien ;)

Merci a tous !
 

Endercraft

Moderator (& bug finder :D)
C'est certainement possible, mais cela dépend de comment vous envoyez le texte à Cortana.
Je connais une application (web) très utile qui permet le transfer facile de texte depuis n'importe quel appareil connecté.
L'application en question s'appelle ntfy, le site est accessible à ntfy.sh et comme c'est open-source c'est possible de créer son propre serveur, que ce soit sur le réseau local ou du monde entier (mais autant utiliser le site officiel pour ça).
Avec une seule requête HTTP POST depuis MacroDroid on peut transférer du texte.
Essayez d'expérimenter avec, la documentation est assez bonne.
 

Honimoura

Member
Bonsoir et merci pour ta réponse plus que rapide ^^
Je vais regarder ca, penses tu que ce soit compatible pour les notifs discord, sms, mms et appel ?

Sinon je me demandais, ne peut on pas simplement récupérer les valeurs (Nom d'application, expéditeur, message) directement dans un fichier texte a l'aide de variable avec macrodroid ? De cette manière je pourrais simplement envoyer les données texte.

Car mon problème est que je ne connaissais pas du tout macrodroid jusqu'à il y a quelques heures... du coup je ne sais pas comment transférer un simple texte de macrodroid vers un autre appareil
 

Endercraft

Moderator (& bug finder :D)
Il y a une action permettant d'écrire du texte dans un ficher nommée 'Écrire dans un fichier' (nom très original).
 

Honimoura

Member
intéressant efficacement ;)
Je vais me pencher sur ces solutions, je te remercie encore !
Si je trouve la solution permettant de faire ce que je recherche, je ne manquerais pas de faire un retour et de le partager.

Merci encore !
 

Honimoura

Member
Je suis fatigué...

J'ai essayé la solution de transfert de fichier de macrodroid mais on peut uniquement transférer le fichier d'un dossier du téléphone vers un autre dossier du téléphone... J'ai également trouvé les requêtes HTTP. J'ai donc essayé de transférer le fichier de cette manière mais ça ne fonctionne pas... ou je m'y prends mal mais toujours aucun résultat. J'ai aussi éssayé en utilisant un script à l'aide de Termux afin de lancer le script avec la commande : "scp /chemin/du/fichier/* utilisateur@adresse_ip_ordinateur:/chemin/de/destination" mais aucun transfert ne se fait...

J'essaye d'éviter d'utiliser une application/site supplémentaire afin de rendre la procédure la plus rapide et légère mais quoi que je fasse il ya toujours un mur et j'ai beau regarder sur internet, il semble que je sois le seul un vouloir faire ca...

Si l'un d'entre vous a déjà fait ce style de procédure et a trouvé une solution légère et rapide, je prends de toute urgence avant de craquer et de laisser tomber.

Merci à tous.

Edit : Petite précision, ces tests ont été effectués après avoir trouvé la solution pour sauvegarder les données voulues dans un fichier texte. J'essaie donc de transférer ce fichier texte vers mon ordinateur. (Merci a Endercraft)
 
Last edited:

Endercraft

Moderator (& bug finder :D)
Nous trouverons bien une solution, j'en ai vu des problèmes plus compliqué ! Je reviens dans 15 minutes.
En regardant rapidement c'est possible de le faire avec adb.
 

Honimoura

Member
Merci beaucoup pour le coup de main.
Par contre j'essaye au maximum d'éviter d'utiliser des logiciels tiers car je ne veux pas qu'un simple transfert d'un fichier texte me vide ma batterie.
Sinon il faudrait pouvoir lancer ce logiciel tiers au début de la procédure, envoyer le fichier puis fermer le logiciel tiers.
Ca m'étonne vraiment qu'il ne soit pas possible avec macrodroid de le faire directement ou avec un script. Ou est ce possible et je possède juste deux mains gauches ? ^^
 

Endercraft

Moderator (& bug finder :D)
Ce n'est pas un logiciel tiers, c'est intégré directement à Android..

Quelle est vôtre version d'Android ?
 

Endercraft

Moderator (& bug finder :D)
C'est assez simple, il y a 2 manières de le faire : avec un câble usb ou sans fil (sur le même réseau). Qu'est ce que vous préférez ?
 

Endercraft

Moderator (& bug finder :D)
Vu que vous avez Android 11 c'est possible assez facilement.
  1. Activez les options développeur si ce n'est pas déjà fait et ouvrez la page.
  2. Trouvez l'option 'Débugage sans fil' et activez-la.
  3. Téléchargez le fichier suivant sur votre ordinateur (depuis le site officiel Android) : https://developer.android.com/studio/releases/platform-tools
    Cherchez la version pour Windows (https://dl.google.com/android/repository/platform-tools-latest-windows.zip?hl=fr)
  4. Dans le fichier extrait, ouvrez la barre représentant le chemin au répertoire et à la place entrez 'cmd' Puis entrée.
  5. Dans la fenêtre, entrez adb connect (texte noté sous 'Adresse IP & Port')
  6. Acceptez le popup affiché sur l'écran du smartphone.
  7. Si la réponse est connected to (texte noté sous 'Adresse IP & Port') et qu'une notification 'débogage sans fil connecté' vous avez réussi à vous connecter à votre smartphone.

    Les étapes suivantes ne sont pas nécessaires mais garantissent la stabilité de la connexion.

  8. Dans la fenêtre (sur l'ordinateur), entrez adb tcpip 5555
    La réponse devrait être restarting in TCP mode port: 5555
  9. Entrez adb disconnect puis adb connect (addresse IP locale de votre smartphone) pour vous reconnecter. Cette fois il ne devrait pas avoir de notification et la réponse devrait être connected to (addresse IP):5555

    Ces étapes sont valides jusqu'au redémarrage de l'appareil.

  10. Maintenant vous pouvez extraire les fichiers depuis le smartphone en utilisant par exemple :
    adb pull /storage/emulated/0/MacroDroid/texte.txt ./ depuis la fenêtre de commande.

    Le premier chemin est celui de votre smartphone et le deuxième où le fichier sera sauvegardé sur votre ordinateur, ./ signifiant le répertoire actuel.
J'espère que c'était clair.
 

Honimoura

Member
J'ai bien activé le débogage sans fil mais lorsque j'essaye de connecter le téléphone à l'aide d'adb avec "adb connect 192.... je reçois le message suivant :
Aucune connexion n'a pu être établie car l'ordinateur cible l'a expressément refusée. (10061)

Pourtant sur le téléphone je ne reçois aucune demande
 

Endercraft

Moderator (& bug finder :D)
Vous vous êtes peut-être trompé de numéro de port.
Activez aussi les options :
  • Débogage USB
  • Installer via USB
  • Débogage USB (paramètres de sécurité)
  • Désactiver délai d'expiration automatique
 

Honimoura

Member
Ca y est, ca continué a refuser. J'ai du supprimer les autorisations, brancher en USB, accepter cette ordinateur puis reconnecter avec adb... pfiou, je passe a la suite de la procédure.
 

Honimoura

Member
Décidément... maintenant c'est la ligne "Dans la fenêtre (sur l'ordinateur), entrez adb tcpip 5555" je recois le message "error: more than one device/emulator"
 
Top