Benachrichtigen Sie regelmäßig den Verarbeitungsstatus von Raspberry Pi mit Python → Google Spreadsheet → LINE

Einführung

Über den Grund, warum ich mich dazu entschlossen habe. Ich habe beschlossen, eine kleine Stapelverarbeitung auf dem Raspberry Pi auszuführen, aber als ich den Server lange Zeit betrieb, nicht nur auf dem Raspberry Pi, wurde der Server unwissentlich gestoppt. Es kann eine Veranstaltung geben. Obwohl der Server selbst funktioniert, ist es möglich, dass die Stapelverarbeitung aus irgendeinem Grund zu moos wird, aber es ist schwierig, sich jeden Tag anzumelden und zu überprüfen. Daher war ich froh, das Smartphone über das Ergebnis informieren zu können, ob die Stapelverarbeitung auf dem Raspberry Pi normal oder abnormal ist. Wenn keine Benachrichtigung vorliegt, kann festgestellt werden, dass mit dem Server ein Fehler aufgetreten ist. Ein Weg, um es zu implementieren

  1. Lassen Sie Google Spreadsheet ein Python-Programm ausführen, das Daten regelmäßig mit cron aktualisiert
  2. IFTTT löst eine LINE-Benachrichtigung über die Aktualisierung der Google-Tabelle aus Mit dem oben genannten schien es möglich zu sein, also habe ich es versucht. Es ist ein Artikel namens.

(1) Vorbereitung für die Veröffentlichung in Google Spread Sheet

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

Die Vorbereitung für die Veröffentlichung wird empfohlen, da sie in früheren Artikeln leicht verständlich organisiert ist. https://qiita.com/connvoi_tyou/items/7cd7ffd5a98f61855f5c

(2) Erstellen eines Programms zum Posten in Google Spread Sheet

Erstellen Sie im Voraus eine Tabelle in Google Drive. Notieren Sie sich einen Teil der Datei-URL, da Sie diese in Ihr Programm schreiben müssen.

https://docs.google.com/spreadsheets/d/<XXXXXXXXXXXXXXXXXXX>/edit#gid=zzzzzzzz
# "<XXXXXXXXXXXXXXXXXXX>"Notieren

Zu Google Spreadsheet wie unten Ich habe es mit dem Namen "server_check.py" gemacht.

server_check.py


from __future__ import print_function
import pickle
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request

SCOPES = 'https://www.googleapis.com/auth/spreadsheets'
creds = None
if os.path.exists('token.pickle'):
    with open('token.pickle', 'rb') as token:
        creds = pickle.load(token)
# If there are no (valid) credentials available, let the user log in.
if not creds or not creds.valid:
    if creds and creds.expired and creds.refresh_token:
        creds.refresh(Request())
    else:
        flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES)
        creds = flow.run_local_server(port=0)
    # Save the credentials for the next run
    with open('token.pickle', 'wb') as token:
        pickle.dump(creds, token)

service = build('sheets', 'v4', credentials=creds)

#Bis zu diesem Punkt ist es fast das gleiche wie das in der Anleitung von Google beschriebene.
#Geben Sie unten die spezifischen Informationen für die Tabelle ein.
spreadsheet_id = '<XXXXXXXXXXXXXXXXXXX>'
sheetname='Blatt1'
range_ = sheetname

#Datumsinformationen abrufen
import datetime
_str_dt=datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S")

#Ersetzen Sie Daten, um in die Spalten A, B und C zu schreiben
#Spalte A ist das Datum, die Spalten B und C sind beliebige Zeichenfolgen(Ersetzen Sie diesmal eine Testzeichenfolge)
values = [
  [_str_dt,"Status-1","Status-2"]
]
body = {
  'values' : values
}

#Schreiben Sie in die Tabelle
result=service.spreadsheets().values().append(spreadsheetId=spreadsheet_id,valueInputOption='RAW',range=range_,body=body).execute()
print(result)

Im obigen Programm ist die Testnachricht so etwas wie "Status-1". Extrahieren Sie beim tatsächlichen Betrieb die Ausgabe der Protokolldatei. Ich denke, es wird dem Werte-Array hinzugefügt.

(3) Programmausführung und Browserberechtigungen

Führen Sie nach dem Reparieren der erforderlichen Teile das obige Python-Programm aus. ** Zu diesem Zeitpunkt muss die Datei "credentials.json" im selben Verzeichnis vorhanden sein. ** ** ** Wenn das Programm zum ersten Mal ausgeführt wird, ist eine Browserauthentifizierung erforderlich, sodass es in einer GUI-Umgebung ausgeführt werden muss.

Nach der Ausführung wird der Browser gestartet und die Bestätigungsseite für das Google-Konto angezeigt. Gewähren Sie Zugriffsrechte entsprechend dem Bildschirm. (Unterwegs wird eine Warnung zu einer unsicheren Seite angezeigt, die jedoch fortgesetzt wird.) Wenn ein Zeichen wie "Der Authentifizierungsablauf ist abgeschlossen. Sie können dieses Fenster schließen." An den Browser ausgegeben wird, ist die Einstellung abgeschlossen.

Wenn der Zugriff gewährt wird, sollte der Tabelle ein Eintrag hinzugefügt werden (Wert in der ersten Zeile eingegeben). Außerdem wird eine "token.pickle" -Datei im selben Verzeichnis wie das Programm erstellt. Mit dieser Datei wird beim nächsten Überspringen der Browserauthentifizierung die Zeile hinzugefügt.

(4) Benachrichtigungseinstellungen in IFTTT

  1. Wenn nicht installiert, ist eine IFTTT-App erforderlich
  2. Erstellen Sie ein Applet mit "Erstellen Sie Ihre eigenen Applets von Grund auf neu".
  3. Dies (Auslöser) ist "Google Sheets" -> "Neue Zeile zur Tabelle hinzugefügt"
  4. Geben Sie die in (2) erstellten Blattinformationen ein.
  5. Das (Aktion) ist "LINE" -> "Nachricht senden"
  6. Empfänger "erhält Benachrichtigung von LINE Notify 1: 1"
  7. Passen Sie den Nachrichtentext an

Wo ich feststeckte

Wenn der Browser in der Programmausführungsumgebung nicht geöffnet werden kann

Das ultimative Ziel dieses Mal war es, das Zielprogramm vom Himbeerkuchen aus auszuführen, aber der Himbeerkuchen hatte keine GUI-Umgebung (normalerweise mit einer SSH-Verbindung). Selbst wenn ich "server_check.py" für den Himbeerkuchen ausführe, kann der Browser nicht geöffnet werden, sodass ich die Berechtigungen nicht festlegen kann.

In einem solchen Fall können Sie das Programm wahrscheinlich auch auf der CUI ausführen, wenn Sie dasselbe Programm in einer anderen GUI-Umgebung ausführen und die generierte Datei "token.pickle" auf dem Zielserver ablegen. Indem ich dasselbe Programm auf meinem Mac ausführe und das generierte token.pickle an den Himbeerkuchen sende, kann ich es jetzt auch auf dem Himbeerkuchen ausführen.

Beim Ausführen eines Programms wird eine Fehlermeldung angezeigt

Gelegentlich trat beim Ausführen des Programms eine Fehlermeldung auf.

[root@localhost python]# python server_check.py 
Traceback (most recent call last):
  File "server_check.py", line 17, in <module>
    creds.refresh(Request())
  File "/usr/local/lib/python3.7/site-packages/google/oauth2/credentials.py", line 182, in refresh
    self._scopes,
  File "/usr/local/lib/python3.7/site-packages/google/oauth2/_client.py", line 248, in refresh_grant
    response_data = _token_endpoint_request(request, token_uri, body)
  File "/usr/local/lib/python3.7/site-packages/google/oauth2/_client.py", line 124, in _token_endpoint_request
    _handle_error_response(response_body)
  File "/usr/local/lib/python3.7/site-packages/google/oauth2/_client.py", line 60, in _handle_error_response
    raise exceptions.RefreshError(error_details, response_body)
google.auth.exceptions.RefreshError: ('invalid_scope: Some requested scopes were invalid. {invalid=[a, c, d, e, g, h, i, l, m, ., /, o, p, r, s, t, u, w, :]}', '{\n  "error": "invalid_scope",\n  "error_description": "Some requested scopes were invalid. {invalid\\u003d[a, c, d, e, g, h, i, l, m, ., /, o, p, r, s, t, u, w, :]}",\n  "error_uri": "http://code.google.com/apis/accounts/docs/OAuth2.html"\n}')
[root@localhost python]# 

Ich bin nicht sicher, was der Fehler war, aber ich habe ihn durch Neuerstellung von "token.pickle" behoben. Um es neu zu erstellen, löschen Sie einfach "token.pickle" und führen Sie das Programm aus. Seien Sie jedoch vorsichtig mit der CUI-Umgebung, in der Sie den Browser nicht öffnen können, da er erneut über den Browser eingestellt wird.

Ich weiß übrigens nicht, warum es passiert, aber aus persönlicher Sicht habe ich das Gefühl, dass zum folgenden Zeitpunkt ein Fehler aufgetreten ist.

--Wenn das Programm erheblich renoviert wird --Wenn Sie ein anderes Programm zur Authentifizierung ausführen

abschließend

Damit bemerkte ich früh, wenn die Stapelverarbeitung abnormal war oder der Server stoppte, aber ich bin es ein wenig leid, dass jeden Tag LINE kommt. Eigentlich wollte ich LINE benachrichtigen, wenn eine Anomalie festgestellt wurde (der Server hat eine Anomalie festgestellt oder es gab keinen regelmäßigen Kontakt), und zwar im Stil "Keine Nachrichten sind ein gesunder Beweis", aber das ist das nächste Problem. Das war's.

Recommended Posts

Benachrichtigen Sie regelmäßig den Verarbeitungsstatus von Raspberry Pi mit Python → Google Spreadsheet → LINE
Benachrichtigen Sie LINE über die Körpertemperatur vom BLE-Thermometer mit Raspeltorte Nr. 1
Protokollieren Sie die Omron-Umgebungssensorwerte regelmäßig mit Raspberry Pi
Holen Sie sich CPU-Informationen von Raspberry Pi mit Python
Messen Sie die CPU-Temperatur von Raspeye mit Python
Nehmen Sie den Wert des SwitchBot-Thermo-Hygrometers mit Raspberry Pi
Holen Sie sich mit Python den Betriebsstatus von JR West
Lassen Sie uns GPIO von Raspeye mit Python CGI betreiben
Ich habe versucht, Movidius NCS mit Python von Raspberry Pi3 auszuführen
Zugriff auf Google Spreadsheets Verwenden von Python mit Himbeer-Pi (für sich selbst)
Google sucht mit Python nach der Zeichenfolge in der letzten Zeile der Datei
Verwenden Sie vl53l0x mit RaspberryPi (Python)
Steuern Sie den Motor mit einem Motortreiber mit Python auf Raspberry Pi 3!
Grundlagen der binärisierten Bildverarbeitung durch Python
Die Geschichte, wie man mit Python einen 100-Yen-Frühstücks-Bot für die Universität macht
CSV-Ausgabe von Pulsdaten mit Raspberry Pi (Analogeingang mit Python prüfen)
Überprüfen Sie die Existenz der Datei mit Python
Führen Sie regelmäßig eine beliebige Verarbeitung mit Python Twisted durch
Benachrichtigen Sie LINE über Standortinformationen (Google-Karte) mit der GPS-SORACOM Edition mit mehreren Einheiten
Erhalten Sie eine Liste der Ergebnisse der Parallelverarbeitung in Python mit Starmap
Zeichnen mit Matrix-Reinventor von Python Image Processing-
Protokollierung der Omron-Umgebungssensorwerte mit Raspberry Pi (USB-Typ)
Die Geschichte der Verarbeitung A von Blackjack (Python)
Lesen Sie die Daten des NFC-Lesegeräts, das mit Python an Raspberry Pi 3 angeschlossen ist, und senden Sie sie mit OSC an openFrameworks
Status jedes Python-Verarbeitungssystems im Jahr 2020
python> print> Wird es erst am Ende des Prozesses umgeleitet?> Mit -u ausführen
Arbeiten mit GPS in Python für Raspberry Pi 3
Rund um die Authentifizierung von PyDrive2, einem Paket zum Betreiben von Google Drive mit Python
Versuchen Sie, die 4-Kern-CPU des Raspberry Pi 2 mit Parallel Python zu verbrauchen
Ich habe versucht, die Literatur des neuen Corona-Virus mit Python automatisch an LINE zu senden
Discord Bot Himbeere Pi Null mit Python [Hinweis]
Senden Sie eine Nachricht mit Python an LINE (LINE Notify)
Bereiten Sie die Ausführungsumgebung von Python3 mit Docker vor
2016 Todai Mathematik mit Python gelöst
[Hinweis] Exportieren Sie das HTML der Site mit Python.
Zeigen Sie das Ergebnis der Geometrieverarbeitung in Python an
Berechnen Sie die Gesamtzahl der Kombinationen mit Python
Überprüfen Sie das Datum der Flaggenpflicht mit Python
Bildverarbeitung? Die Geschichte, Python für zu starten
CSV-Ausgabe von Impulsdaten mit Raspberry Pi (CSV-Ausgabe)
Beobachten Sie die Futago-Meteorgruppe mit Raspberry Pi4
Lassen Sie den Summer mit Python auf Raspberry Pi 3 erklingen!
[Python] Fehlerbehebung vor dem Zugriff auf Google Spreadsheet mit gspread
Konvertieren Sie den Zeichencode der Datei mit Python3
Ein Liner, der mit Python ein Umfangsverhältnis von 10000 Stellen ausgibt
[Python] Bestimmen Sie den Typ der Iris mit SVM
Stellen Sie mit Python auf Raspberry Pi eine Verbindung zu MySQL her
GPS-Tracking mit Raspeye 4B + BU-353S4 (Python)
Verschiedene Memoranden bei Verwendung von SDK der LINE Messaging API mit Python (2.7.9) + Google App Engine
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit dplyr von R und pandas von Python zu vergleichen
Extrahieren Sie die Tabelle der Bilddateien mit OneDrive & Python
Verwendung des digitalen Beleuchtungsstärkesensors TSL2561 mit Raspberry Pi
Lerne Nim mit Python (ab Anfang des Jahres).
Stellen wir uns den Raum mit Raspeltorte vor, Teil 1
Verwendung von Raspeye Relay Module Python
Zerstören Sie den Zwischenausdruck der Sweep-Methode mit Python
Versuchen Sie, Python auf Raspberry Pi mit Visual Studio zu debuggen.
Ermitteln Sie den Tragezustand der Maske mit OpenCV und Raspberry Pi
Visualisieren Sie den Bereich der internen und externen Einfügungen mit Python
Berechnen Sie den Regressionskoeffizienten der einfachen Regressionsanalyse mit Python