Ma femme m'a dit de faire la queue quand j'ai quitté le bureau, mais honnêtement, c'est un problème. Je me suis demandé si je pouvais automatiquement notifier que j'avais quitté le bureau, j'ai donc envoyé les informations de localisation à AWS pour le moment.
Téléphone intelligent: Kyocera (KTV44) OS:Android 9
Installez termux sur Android à l'aide de Google Play. https://play.google.com/store/apps/details?id=com.termux&hl=ja
Comme il est difficile de saisir sur le clavier avec un smartphone, Après l'installation, entrez la commande suivante pour créer l'environnement pour ssh.
$ termux-setup-storage #Autorisez termux à utiliser le stockage Android.
$ pkg install openssh #Installez ssh (serveur et client)
$ sshd #Démarrer le serveur ssh
$ passwd #réglage du mot de passe
$ whoami #Confirmer le nom d'utilisateur (faire une note)
$ ifconfig #Vérifiez l'adresse IP de votre smartphone (notez-la)
À propos, l'adresse IP affichée par termux est la même que l'adresse IP du smartphone lui-même, donc si vous la connaissez à l'avance, vous n'avez pas besoin d'ifconfig.
Ensuite, connectez-vous à votre smartphone avec ssh depuis votre PC pour faciliter le travail. Soyez prudent ici. Le numéro de port TCP par défaut pour ssh est 22, mais pour termux 8022 est spécifié. Par conséquent, spécifiez le numéro de port avec l'option -p. Côté PC (Ubuntu)
$ ssh -p 8022 (Nom d'utilisateur)@(Adresse IP du smartphone)
Si vous faites ssh pour la première fois Are you sure you want to continue connecting (yes/no)? Répondez oui. Après cela, entrez le mot de passe défini sur votre smartphone.
Le traitement en arrière-plan étant interdit dans l'état initial, la connexion ssh sera interrompue chaque fois que le smartphone se met en veille. En sélectionnant «RELEASE WAKE LOCK» sur votre smartphone, le traitement en arrière-plan sera effectué.
Une fois que vous pourrez utiliser ssh, nous continuerons à créer l'environnement.
$ pkg install git #Installez git pour AWS IoT Core pour une utilisation ultérieure.
$ pkg install python #Installez également Python.
$ pkg install vim-python #Installez également vim pour l'édition de fichiers.
$ pkg install termux-api #termux-Installez également api. Requis pour obtenir des informations GPS.
Une fois le système d'installation terminé, l'étape suivante consiste à configurer AWS Iot Core. Reportez-vous à cet article ↓, enregistrez la chose appelée "android01" et effectuez le test de connexion du smartphone à AWS. https://qiita.com/zakuzakuzaki/items/e30d63598ca1d6c0f2a9
J'ai été surpris parce que j'ai pu le faire tel quel. termux est incroyable.
Utilisez la commande termux-location dans "termux-api" pour obtenir les informations de localisation. https://wiki.termux.com/wiki/Termux-location
$ termux-location -p network #Sortie de la position actuelle que le smartphone observe
{
"latitude": 35.6359322,
"longitude": 139.8786311,
"altitude": 43.5,
"accuracy": 23.26799964904785,
"vertical_accuracy": 3.299999237060547,
"bearing": 0.0,
"speed": 0.0,
"elapsedMs": 97,
"provider": "network"
}
-p est une option permettant de sélectionner la méthode d'obtention des informations de localisation et de sélectionner [gps / réseau / passif]. La valeur par défaut est gps, mais pour une raison quelconque, je ne pouvais pas le faire sur mon smartphone, j'ai donc choisi le réseau. (Aucune erreur, attendez longtemps.) À propos, même si vous changez votre smartphone de la connexion Wi-Fi à la connexion 3G, vous ne pouvez pas obtenir les informations de localisation sauf si vous sélectionnez le réseau.
Probablement un problème avec les autorisations de l'application termux, mais je n'ai pas pu le résoudre, alors je l'ai laissé. Normalement, Android peut donner des droits d'utilisation tels que des dossiers, des caméras, un GPS, etc. pour chaque application sur l'écran de réglage de l'application. Termux n'a pas le choix de l'autorité en premier lieu, il n'y a donc aucun moyen de l'accorder.
Après avoir confirmé que les informations de localisation peuvent être obtenues, enregistrez-les au format json pour un traitement facile.
$ termux-location -p network |sed -e "4,10d"|tr -d '\n'|tr -d ' '| sed -s s/,}/}/g > location.json
$ cat location.json
{"latitude":35.6359322,"longitude":139.8786311}#Confirmez qu'il a été bien formé
Que fais tu ・ Obtenir des informations de localisation ・ Lignes supprimées 4 à 10 (autres que la latitude et la longitude) -Supprimer les sauts de ligne -Supprimer l'espace -Supprimer le dernier "," (virgule) -Enregistrer location.json dans le répertoire courant est. Je pense qu'il est normal d'envoyer toutes les informations telles quelles, mais j'ai coupé les données inutiles afin de réduire le plus possible la quantité de communication.
Ensuite, créez un programme pour publier les informations de localisation. Créez "jsonPub.py" qui est une version modifiée de la dernière partie de "basicPubSub.py", un exemple de fichier dans aws-iot-device-sdk-python. Assurez-vous de charger et de publier location.json, qui contient des informations de localisation.
Avant de modifier
basicPubSub.py (ligne 112 et suivantes)
# Publish to the same topic in a loop forever
loopCount = 0
while True:
if args.mode == 'both' or args.mode == 'publish':
message = {}
message['message'] = args.message
message['sequence'] = loopCount
messageJson = json.dumps(message)
myAWSIoTMQTTClient.publish(topic, messageJson, 1)
if args.mode == 'publish':
print('Published topic %s: %s\n' % (topic, messageJson))
loopCount += 1
time.sleep(1)
Après l'édition
jsonPub.py (ligne 112 et suivantes)
# Publish to the same topic in a loop forever
with open("location.json", "rb") as load_file:#Lecture du fichier d'informations sur l'emplacement
location = bytearray(load_file.read())#Convertir en type bytearray pour la transmission MQTT
loopCount = 0
while True:
if args.mode == 'both' or args.mode == 'publish':
myAWSIoTMQTTClient.publish(topic, location, 1)#Publier les informations de localisation
if args.mode == 'publish':
print('Published topic %s: %s\n' % (topic, location))#Pour confirmation
loopCount += 1
time.sleep(1)
Ceci termine la construction côté smartphone.
Ensuite, définissez le côté cloud. Cela change simplement la politique.
Dans AWS IoT> Stratégies, ajoutez des rubriques auxquelles vous pouvez publier et vous abonner. Cette fois, j'ai ajouté un sujet nommé "emplacement". Lorsque vous avez terminé les modifications, "Enregistrer comme nouvelle version". Le non-respect de cette consigne entraînera une erreur de connexion.
Accédez à AWS IoT> Tests, entrez le nom de la rubrique (emplacement), puis cliquez sur S'abonner à la rubrique.
Exécutez jsonPub.py dans le terminal. Spécifiez le nom de la rubrique avec l'option -t à la fin de la commande.
python jsonPub.py -e (Veuillez faire correspondre votre ARN)-ats.iot.ap-northeast-1.amazonaws.com -r root-CA.crt -c android01.cert.pem -k android01.private.key -t location
Confirmez que le message suivant est envoyé au terminal. J'ai pu m'abonner aux informations de localisation publiées par mon smartphone sur AWS à partir d'AWS.
Received a new message:
b'{"latitude":35.6359322,"longitude":139.8786311}'
from topic:
location
--------------
De plus, du côté AWS, assurez-vous de vous abonner à la rubrique relative à l'emplacement.
Merci pour votre soutien.
Nous avons créé un environnement pour envoyer les informations de localisation du smartphone à AWS. Ensuite, ce serait bien si vous pouviez utiliser lamda etc. pour vérifier la notification automatique de sortie du bureau et l'heure de départ du train de retour. En passant, soyez assuré que les informations de localisation affichées sur cette page ne sont pas ma maison.
Le fichier créé cette fois est posté sur github. https://github.com/zakuzakuzaki/zaki-aws/tree/main/iot
Merci de votre collaboration. J'ai essayé de préparer l'environnement de développement sur le terminal Android https://qiita.com/leosuke/items/b83425d5a6730aa4cf94
Créez un référentiel mobile que vous pouvez transporter avec Termux https://wlog.flatlib.jp/item/1859
Lire JSON avec Python https://qiita.com/kikuchiTakuya/items/53990fca06fb9ba1d8a7
Recommended Posts