[PYTHON] termux × AWS Senden Sie mit IoT Standortinformationen für Smartphones an AWS

Einführung

Meine Frau sagte mir, ich solle mich anstellen, wenn ich das Büro verlasse, aber ehrlich gesagt ist es ein Ärger. Ich fragte mich, ob ich automatisch benachrichtigen konnte, dass ich das Büro verlassen hatte, und schickte die Standortinformationen vorerst an AWS.

図1.png

Umgebung

Smartphone: Kyocera (KTV44) OS:Android 9

Smartphone (Termux) Seite

Installieren Sie termux unter Android mit Google Play. https://play.google.com/store/apps/details?id=com.termux&hl=ja

Da es schwierig ist, mit einem Smartphone über die Tastatur einzugeben, Geben Sie nach der Installation den folgenden Befehl ein, um die Umgebung für ssh zu erstellen.

$ termux-setup-storage #Erlaube termux, Android-Speicher zu verwenden.
$ pkg install openssh #Installieren Sie ssh (sowohl Server als auch Client).
$ sshd #Starten Sie den SSH-Server
$ passwd #Passworteinstellung
$ whoami #Benutzername bestätigen (notieren)
$ ifconfig #Überprüfen Sie die IP-Adresse Ihres Smartphones (notieren Sie sich diese)

Die von termux angezeigte IP-Adresse entspricht übrigens der IP-Adresse des Smartphones. Wenn Sie sie also im Voraus kennen, müssen Sie sie nicht konfigurieren.

Stellen Sie als Nächstes mit ssh von Ihrem PC aus eine Verbindung zu Ihrem Smartphone her, um die Arbeit zu vereinfachen. Sei hier vorsichtig. Die Standard-TCP-Portnummer für ssh ist 22, für termux ist jedoch 8022 angegeben. Geben Sie daher die Portnummer mit der Option -p an. PC (Ubuntu) Seite

$ ssh -p 8022  (Nutzername)@(IP-Adresse des Smartphones)

Wenn Sie zum ersten Mal ssh machen Are you sure you want to continue connecting (yes/no)? Antworte mit Ja. Geben Sie danach das auf Ihrem Smartphone festgelegte Passwort ein.

Da die Hintergrundverarbeitung im Ausgangszustand verboten ist, wird die SSH-Verbindung jedes Mal unterbrochen, wenn das Smartphone in den Ruhezustand wechselt. Durch Auswahl von "RELEASE WAKE LOCK" auf Ihrem Smartphone wird die Hintergrundverarbeitung durchgeführt.

Screenshot_20201015-214307.png

Sobald Sie ssh verwenden können, werden wir die Umgebung weiter aufbauen.

$ pkg install git #Installieren Sie git für AWS IoT Core, um es später zu verwenden.
$ pkg install python #Installieren Sie auch Python.
$ pkg install vim-python #Installieren Sie auch vim für die Dateibearbeitung.
$ pkg install termux-api #termux-Installieren Sie auch API. Erforderlich, um GPS-Informationen zu erhalten.

Nach Abschluss des Installationssystems müssen Sie im nächsten Schritt AWS Iot Core konfigurieren. Lesen Sie diesen ↓ Artikel, registrieren Sie das Objekt "android01" und führen Sie den Verbindungstest vom Smartphone zu AWS durch. https://qiita.com/zakuzakuzaki/items/e30d63598ca1d6c0f2a9

Ich war überrascht, weil ich es so machen konnte, wie es war. Termux ist unglaublich.

Verwenden Sie den Befehl termux-location in "termux-api", um die Standortinformationen abzurufen. https://wiki.termux.com/wiki/Termux-location

$ termux-location -p network #Geben Sie die aktuelle Position aus, die das Smartphone beobachtet
{
  "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 ist eine Option zum Auswählen der Methode zum Abrufen von Standortinformationen und zum Auswählen aus [GPS / Netzwerk / Passiv]. Die Standardeinstellung ist GPS, aber aus irgendeinem Grund konnte ich dies auf meinem Smartphone nicht tun. Deshalb habe ich mich für das Netzwerk entschieden. (Kein Fehler, warten Sie lange.) Übrigens, selbst wenn Sie Ihr Smartphone von einer Wi-Fi-Verbindung auf eine 3G-Verbindung umstellen, können Sie die Standortinformationen nur abrufen, wenn Sie Netzwerk auswählen.

Wahrscheinlich ein Problem mit den Berechtigungen der Termux-App, aber ich konnte es nicht lösen, also habe ich es verlassen. Normalerweise kann Android Nutzungsrechte wie Ordner, Kameras, GPS usw. für jede Anwendung auf dem Einstellungsbildschirm der Anwendung vergeben. Termux hat in erster Linie keine Wahl der Autorität, daher gibt es keine Möglichkeit, diese zu gewähren.

Nachdem Sie bestätigt haben, dass die Standortinformationen abgerufen werden können, speichern Sie sie zur einfachen Verarbeitung im JSON-Format.

$ 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}#Bestätigen Sie, dass es schön geformt wurde

Was machst du ・ Standortinformationen abrufen ・ Gelöschte Zeilen 4-10 (außer Längen- und Breitengrad) -Löschen Sie Zeilenumbrüche

Erstellen Sie als Nächstes ein Programm zum Veröffentlichen der Standortinformationen. Erstellen Sie "jsonPub.py", eine modifizierte Version des letzten Teils von "basicPubSub.py", einer Beispieldatei in aws-iot-device-sdk-python. Stellen Sie sicher, dass Sie location.json laden und veröffentlichen, das Standortinformationen enthält.

Vor dem Bearbeiten

basicPubSub.py (Zeile 112 und danach)


# 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)

Nach der Bearbeitung

jsonPub.py (Zeile 112 und danach)


# Publish to the same topic in a loop forever
with open("location.json", "rb") as load_file:#Standortinformationsdatei lesen
    location = bytearray(load_file.read())#Für MQTT-Übertragung in Bytearray-Typ konvertieren
loopCount = 0
while True:
    if args.mode == 'both' or args.mode == 'publish':
        myAWSIoTMQTTClient.publish(topic, location, 1)#Standortinformationen veröffentlichen
        if args.mode == 'publish':
            print('Published topic %s: %s\n' % (topic, location))#Zur Bestätigung
        loopCount += 1
    time.sleep(1)

Damit ist der Aufbau auf der Smartphone-Seite abgeschlossen.

AWS-Seiteneinstellungen

Als nächstes stellen Sie die Wolkenseite ein. Es ändert nur die Richtlinie.

Fügen Sie unter AWS IoT> Richtlinien Themen hinzu, die Sie veröffentlichen und abonnieren können. Dieses Mal habe ich ein Thema namens "Ort" hinzugefügt. Wenn Sie mit der Bearbeitung fertig sind, klicken Sie auf "Als neue Version speichern". Andernfalls tritt ein Verbindungsfehler auf.

0.PNG

Prüfung

Gehen Sie zu AWS IoT> Tests, geben Sie den Themennamen (Speicherort) ein und klicken Sie dann auf Thema abonnieren.

1.PNG

Führen Sie jsonPub.py im Terminal aus. Geben Sie den Themennamen mit der Option -t am Ende des Befehls an.

python jsonPub.py  -e (Bitte passen Sie Ihre ARN an)-ats.iot.ap-northeast-1.amazonaws.com -r root-CA.crt -c android01.cert.pem -k android01.private.key -t location

Stellen Sie sicher, dass die folgende Meldung an das Terminal ausgegeben wird. Ich konnte die Standortinformationen abonnieren, die mein Smartphone von AWS für AWS veröffentlicht hat.


Received a new message: 
b'{"latitude":35.6359322,"longitude":139.8786311}'
from topic: 
location
--------------

Stellen Sie außerdem auf der AWS-Seite sicher, dass Sie das Standortthema abonnieren. 2.PNG

Danke für Ihre Unterstützung.

abschließend

Wir haben eine Umgebung erstellt, um die Standortinformationen des Smartphones an AWS zu senden. Als nächstes wäre es schön, wenn Sie Lamda usw. verwenden könnten, um die automatische Benachrichtigung über das Verlassen des Büros und die Abfahrtszeit des Rückzugs zu überprüfen. Übrigens, bitte seien Sie versichert, dass die auf dieser Seite angezeigten Standortinformationen nicht mein Zuhause sind.

Die diesmal erstellte Datei wird auf github veröffentlicht. https://github.com/zakuzakuzaki/zaki-aws/tree/main/iot

Referenz-URL

Danke für Ihre Kooperation.    Ich habe versucht, die Entwicklungsumgebung auf dem Android-Terminal vorzubereiten https://qiita.com/leosuke/items/b83425d5a6730aa4cf94

Erstellen Sie ein mobiles Repository, das Sie mit Termux führen können https://wlog.flatlib.jp/item/1859

Lesen Sie JSON mit Python https://qiita.com/kikuchiTakuya/items/53990fca06fb9ba1d8a7

Recommended Posts

termux × AWS Senden Sie mit IoT Standortinformationen für Smartphones an AWS
Visualisieren Sie Standortinformationen mit Basemap
Senden Sie mit ESP32-WROOM-32 aufgenommene Bilder an AWS (API Gateway → Lambda → S3).
HTML-Mail mit Bild zum Senden mit Python
Senden Sie CSS mit Flask komprimiert an Gzip
Senden Sie Daten mit Vue.js an die DRF-API
Ich möchte mit aws mit Python spielen
Stellen Sie mit AWS Lambda Python eine Verbindung zu s3 her
Verwendung von Folium (Visualisierung von Standortinformationen)
Senden Sie eine Nachricht mit Python an LINE (LINE Notify)
So senden Sie eine Nachricht mit Curl an LINE
Holen Sie sich die neuesten AMI-Informationen mit der AWS CLI
Senden Sie eine E-Mail mit Python an Spushis Adresse
Senden Sie Daten von Raspberry Pi mit AWS IOT
Melden Sie sich einfach mit mehreren Konten bei AWS an
Beispiel für eine Slack-Benachrichtigung mit Python Lambda
Routenführung zum Standort der iPhone-Fotografie mit Pythonista
Python-Mock, um AWS IoT Device Shadow auszuprobieren
AWS-Schrittfunktionen zum Lernen anhand eines Beispiels
Erste Schritte mit AWS IoT in Python
Senden Sie msgpack mit Ajax an die flk (werkzeug) Umgebung
Python-Skript zum Abrufen von Notizinformationen mit REAPER
Ich möchte die Standortinformationen von GTFS Realtime auf Jupyter zeichnen! (Mit Ballon)