En utilisant l'application Android Macrodroid et Raspberry pi, la voix prononce lentement la notification du smartphone. J'ai fait un système.
Macrodroid est une application qui permet d'automatiser des tâches sur Android. Diverses actions peuvent être automatiquement exécutées déclenchées par un événement sur Android.
Associez-le à un simple serveur Web configuré dans Razpai, et lorsqu'une notification arrive, envoyez le contenu au serveur Web et jouez la voix avec AquesTalkPi. Production.
Si vous utilisez Raspeye, vous devrez peut-être remplacer la carte SD pour recréer l'environnement. Dans un tel cas, si vous avez un Dockerfile, vous n'avez pas à vous rappeler comment créer un environnement.
Je vais donc exécuter un simple serveur Web avec Docker. (Bien que Docker semble exagéré car il n'y a presque pas de quantité de code cette fois)
Le Dockerfile créé cette fois est le suivant.
Dockerfile
FROM balenalib/rpi-raspbian:buster
RUN apt-get update && \
apt-get -y install --no-install-recommends alsa-utils python3 && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# https://www.a-quest.com/products/aquestalkpi.Après avoir lu la licence du programme html, téléchargez ce qui suit
RUN mkdir /root/bin && \
curl -kL "https://www.a-quest.com/cgi-bin/download.php?download=1&readed=yes" -o /tmp/aquestalk.tgz && \
tar xzvf /tmp/aquestalk.tgz -C /tmp && \
mv /tmp/aquestalkpi/AquesTalkPi /root/bin && \
mv /tmp/aquestalkpi/aq_dic /root/bin && \
rm /tmp/aquestalk.tgz && rm -r /tmp/aquestalkpi
ADD ./softalk_server.py /root/bin
EXPOSE 8000
CMD ["python3", "/root/bin/softalk_server.py"]
De plus, le serveur Web simple était exécuté sur Python.
softalk_server.py
# -*- coding:utf-8 -*-
from http.server import HTTPServer, SimpleHTTPRequestHandler
from urllib import parse
import subprocess
KEYS = ["app", "title", "message"]
#Faites parler lentement le texte à la voix
def talk(text):
p1 = subprocess.Popen(
["/root/bin/AquesTalkPi", text],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
)
p2 = subprocess.Popen(
["aplay"],
stdin=p1.stdout, stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT
)
p1.stdout.close() # SIGPIPE if p2 exits.
p2.communicate()[0]
# [app, title, messa]Texte du dictionnaire composé des touches de_Basé sur dic
#Préparez un message parlé
def format_message(text_dic):
if text_dic['title'] is None:
return None
if text_dic['message'] is None:
return None
if len(text_dic['message']) < 40:
formatted = '{app}De{title}Le message est intitulé.{message}'.format(
**text_dic
)
else:
formatted = '{app}De{title}Le message est intitulé.'.format(
**text_dic
)
return formatted
#Serveur Web simple
#Lorsque vous recevez une demande GET, basée sur ce paramètre
#Écouter lentement la voix du haut-parleur
class RequestHandler(SimpleHTTPRequestHandler, object):
def do_GET(self):
query = parse.urlparse(self.path).query
query_dic = parse.parse_qs(query)
self.send_response(200)
for key in KEYS:
if key not in query_dic:
query_dic[key] = None
else:
query_dic[key] = query_dic[key][0]
print('query = {}'.format(query_dic))
formatted = format_message(query_dic)
#En supposant les paramètres de la requête GET
#Sinon, formaté est Aucun et aucun son n'est lu
if formatted is not None:
talk(formatted)
self.end_headers()
if __name__ == '__main__':
text = 'Le serveur de notification a démarré'
talk(text)
httpd = HTTPServer(("", 8000), RequestHandler)
httpd.serve_forever()
Exécutez ensuite la commande suivante dans le répertoire où se trouvent Dockerfile
et softalk_server.py
.
$ docker build -t softalk_notification .
$ docker run -d --name notification_server --device /dev/snd -p 8000:8000 --restart=always softalk_notification
En ajoutant l'option --restart = always
, il est pratique de reconstruire automatiquement le conteneur même lorsqu'il est redémarré (même lorsque le démon docker est arrêté).
Il transmet également dev / snd
à --device
pour jouer le son du haut-parleur en utilisant ALSA.
De plus, le port du serveur Web est défini sur «8000» pour le conteneur et l'hôte.
Si tout se passe bien, la prochaine requête GET devrait parler lentement.
$ curl localhost:8000 --get --data-urlencode 'app=lentement' --data-urlencode 'title=tester' --data-urlencode 'message=lentementしていってね'
Ensuite, faisons une requête GET au serveur Web lorsque la notification arrive sur Android. Ceci peut être réalisé avec Macrodroid.
Après avoir installé Macrodroid depuis Google Play, créez la macro suivante.
--Déclencheur --Appuyez sur "Événements de l'appareil"> "Notifications"
--Action
(lorsque l'adresse IP de Raspeye est 192.168.0.2) et appuyez sur ʻOK
en bas à droite.URL
192.168.0.2:8000?app=[not_app_name]&title=[not_title]&message=[notification]
Après avoir défini le déclencheur et l'action, appuyez sur la coche en bas à droite de l'écran. Veuillez saisir correctement la catégorie et le nom de la macro.
La configuration est terminée.
Cette fois, c'est le réglage minimum, donc je pense qu'un réglage fin est nécessaire pour une utilisation pratique. Voici les éléments de réglage qui me viennent à l'esprit actuellement.
--Lisez-vous les notifications de toutes les applications: Macrodroid peut spécifier dans une certaine mesure --Lisez-vous toujours à haute voix: Déclenchement temporel Macrodroid (il semble intéressant de juger par la luminosité en combinaison avec Nature remo)
Si vous êtes intéressé, pourquoi ne pas essayer.