Die Datenspeicherung, Visualisierung und Analyse der Sensorwerte von Raspberry Pi kann mithilfe von Kintone in der Cloud problemlos durchgeführt werden. Ich habe den Prozess zum Hochladen von Daten auf diesen Kintone mit meiner eigenen Bibliothek implementiert, aber ich habe versucht, den Prozess mit dem auf der offiziellen Website eingeführten Kintone API SDK für Python zu implementieren. (Im Folgenden Daten von Rasberry Pi hochgeladen) Infolgedessen konnte ich den Prozess problemlos mit Kurzcode implementieren, sodass ich mich entschied, die Wartung meiner eigenen Bibliothek einzustellen und ab sofort das Kintone API SDK für Python zu verwenden.
__Kintone API SDK für Python __ https://developer.cybozu.io/hc/ja/articles/205382194-kintone-API-SDK-for-Python
GitHub icoxfog417/pykintone https://github.com/icoxfog417/pykintone
Der Hauptteil von Raspberry Pi ist 3B, und das Betriebssystem ist derzeit das neueste.
Raspbian Buster with desktop ・ Version: September 2019 ・ Erscheinungsdatum: 2019-09-26 -Kernel-Version: 4.19
Ich werde die Setup-Methode weglassen. Wenn Sie mehr wissen möchten, lesen Sie bitte Folgendes.
__Raspberry Pi Grundeinstellung Windows (@ sigma7641) __ https://qiita.com/sigma7641/items/995c7bb07eab408b9d0e __Raspberry Pi Grundeinstellung Mac (@skkojiko) __ https://qiita.com/skkojiko/items/a7e342a8ab53b409fe6a
Das diesmal verwendete Betriebssystem-Image, Raspbian Buster mit Desktop 2019-09-26, kann von Anfang an mit Python2, Python3, pip und pip3 verwendet werden, sodass diese Einstellungen nicht erforderlich sind. Sie können das kintone API SDK für Python mit den folgenden Tipps einfach installieren.
$ pip install pykintone
$ pip3 install pykintone
Stellen Sie die Felder wie folgt ein:
Feldname | Art | Futtermantel / Element ID |
---|---|---|
Datum (und Uhrzeit | Datum (und Uhrzeit | datetime |
Titel | Zeichenkette (1 Zeile) | title |
Angehängte Datei | Angehängte Datei | file |
Erstellungsdatum und -zeit | Datum und Uhrzeit (System) | Erstellungsdatum und -zeit |
Auf dem Bildschirm mit den Anwendungseinstellungen wird der Bildschirm mit den Einstellungen für API-Token in der Reihenfolge Einstellungen-> Anpassen> API-Token für Dienstverknüpfungen geöffnet. Wenn Sie auf die Schaltfläche "Generieren" klicken, wird das API-Token hinzugefügt. Überprüfen Sie daher alle Zugriffsrechte mit Ausnahme der App-Verwaltung und "Speichern".
Bereiten Sie die folgenden Anfangsdaten vor.
Verwenden wir das kintone API SDK für Python, um Hinzufügungen und Löschungen zu implementieren, einschließlich Datenerfassung, Hinzufügung, Aktualisierung und Hochladen von Dateien.
pykintoneTest.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import codecs
import sys
import time
import pykintone
from pykintone import model
import pykintone.structure_field as sf
#Kintone-API-Einstellungen (allen Prozessen gemeinsam)
subdomein = "Kintone-Subdomain"
appId = "Kintone-Anwendungs-ID"
token = "Kintone-API-Token"
app = pykintone.app(subdomein, appId, token)
Erstellen Sie eine Instanz-App von pykintone.app () mit der Kintone-Subdomain, der App-ID und dem API-Token. Diese Instanz wird für die gesamte Verarbeitung verwendet.
pykintoneTest.py
(Auslassen der Beschreibung bis zur Einstellung der Kintone-API)
#Daten bekommen
select = "Erstellungsdatum und -zeit< NOW() order by dateTime asc"
res = app.select(select)
if res.ok:
records = res.records
if len(records) < 1 :
print("0 Datensätze")
for record in records:
print(record[u"Erstellungsdatum und -zeit"]["value"] + ", " + record["dateTime"]["value"] + ", " + record["title"]["value"])
else:
print(res.error.id.encode('utf-8'))
print(res.error.message.encode('utf-8'))
print(res.error.code)
Führt den Datensatzerfassungsprozess für die Bedingungen aus, die in der in den "Kintone-API-Einstellungen" erstellten Instanz-App angegeben sind. Die Datensatzerfassungsbedingung wird als Argument von app.select () übergeben und das Verarbeitungsergebnis empfangen.
.ok | true :: |
.records | |
.error.id | Argument Inhalt Die Verarbeitung wurde normal abgeschlossen, falsch. Verarbeitungsfehler Erfasste Datensatzinformationen (Array) Fehler-ID |
.error.message | Fehlermeldung |
.error.code | Fehlercode |
Wenn der Vorgang normal abgeschlossen ist, werden die Daten in .records (Array) gespeichert.
pykintoneTest.py
(Auslassen der Beschreibung bis zur Einstellung der Kintone-API)
#Daten hinzufügen
class recordLayout(model.kintoneModel):
def __init__(self):
super(recordLayout, self).__init__()
self.datetime = "" #Kintone-Feldcode "Datum und Uhrzeit"
self.title = "" #kintone "Titel" Feldcode
record = recordLayout()
record.datetime = time.strftime('%Y-%m-%dT%H:%M:%S+09:00')
record.title = u"Fügen Sie Testdaten von Raspi hinzu"
res = app.create(record)
if res.ok:
print("Add-ID aufzeichnen=" + str(res.record_id) + " revision=" + str(res.revision))
else:
print(res.error.id.encode('utf-8'))
print(res.error.message.encode('utf-8'))
print(res.error.code)
Führen Sie 1 Datensatzadditionsprozess mit der Instanz-App aus, die in den "Kintone-API-Einstellungen" erstellt wurde.
Erstellen Sie zum Speichern des hinzuzufügenden Datensatzes ein Klassenmodell, das kintoneModel of SDK erbt. Stellen Sie den Feldcode des Kintone-Formulars auf den Variablennamen im Modell ein und legen Sie alle Daten fest. Legen Sie dieses Modell als Argument für app.create () fest und erhalten Sie das Verarbeitungsergebnis.
Die als Ergebnis der Verarbeitung übergebenen Argumente lauten wie folgt.
Streit | Inhalt |
---|---|
.ok | true :Verarbeitung normal abgeschlossen, falsch:Verarbeitungsfehler |
.record_id | ID des hinzugefügten Datensatzes |
.revision | Versionsnummer des hinzugefügten Datensatzes |
.error.id | Fehler-ID |
.error.message | Fehlermeldung |
.error.code | Fehlercode |
Wenn der Vorgang normal abgeschlossen ist, erhalten Sie die Datensatz-ID und die Versionsnummer des hinzugefügten Datensatzes. Wenn Sie mehrere Datensätze hinzufügen möchten, übergeben Sie das Modellarray als Argument an app.batch_create ().
pykintoneTest.py
(Auslassen der Beschreibung bis zur Einstellung der Kintone-API)
#Datenaktualisierung
select = "Erstellungsdatum und -zeit< NOW() order by dateTime asc"
records = app.select(select).models(recordLayout)
record = records[0]
record.title = u"Aktualisieren Sie die Testdaten von Raspi"
res = app.update(record)
if res.ok:
print("Update-Revision aufzeichnen=" + str(res.revision))
else:
print(res.error.id.encode('utf-8'))
print(res.error.message.encode('utf-8'))
print(res.error.code)
Führen Sie einen Datensatzaktualisierungsprozess mit der Instanz-App aus, die in den "Kintone-API-Einstellungen" erstellt wurde.
Holen Sie sich zunächst den entsprechenden Datensatz von kintone. Der aktualisierte Wert wird im entsprechenden Feldcode des erfassten 1 Datensatzes wiedergegeben. Setzen Sie diesen Datensatz als Argument von app.update () und erhalten Sie das Verarbeitungsergebnis.
Die als Verarbeitungsergebnis übergebenen Argumente sind dieselben wie die Datenadditionsverarbeitung. Wenn Sie mehrere Datensätze aktualisieren möchten, übergeben Sie das Datensatzarray als Argument an app.batch_update ().
pykintoneTest.py
(Auslassen der Beschreibung bis zur Einstellung der Kintone-API)
#Daten hinzufügen
class recordLayout2(model.kintoneModel):
def __init__(self):
super(recordLayout2, self).__init__()
self.datetime = ""
self.title = ""
self.file = [sf.File()]
file = ["test.jpg "] #Legen Sie den Pfad der Datei fest, die in Kintone im Array gespeichert werden soll
record = recordLayout2()
record.datetime = time.strftime('%Y-%m-%dT%H:%M:%S+09:00')
record.title = u"Fügen Sie Testdaten von Raspi mit Datei hinzu"
record.file = [sf.File.upload(f, app) for f in file]
res = app.create(record)
if res.ok:
print("Datensatz hinzufügen(Datei UP) id=" + str(res.record_id) + " revision=" + str(res.revision))
else:
print(res.error.id.encode('utf-8'))
print(res.error.message.encode('utf-8'))
print(res.error.code)
Das kintone API SDK für Python erleichtert das Hinzufügen von Daten, bei denen Dateien hochgeladen werden.
Fügen Sie eine Variable mit dem Feldcode-Namen der angehängten Datei im Modell hinzu. Initialisieren Sie mit sf.File (), damit zusätzliche Variablen die Konfigurationsinformationen für Datei-Uploads speichern können.
Laden Sie die Datei vorab mit sf.File.upload () auf kintone hoch und setzen Sie das resultierende Dateischlüsselarray auf die Modellvariable. Andere entsprechen dem Datenadditionsprozess.
pykintoneTest.py
(Auslassen der Beschreibung bis zur Einstellung der Kintone-API)
select = "Rekordzahl> \"3\""
records = app.select(select).models(recordLayout)
for record in records:
res = app.delete(record.record_id)
if res.ok:
print("Lösch-ID des Datensatzes=" + str(record.record_id))
else:
print(res.error.id.encode('utf-8'))
print(res.error.message.encode('utf-8'))
print(res.error.code)
Führen Sie 1 Datensatzlöschvorgang mit der Instanz-App aus, die in den "Kintone-API-Einstellungen" erstellt wurde.
Holen Sie sich zunächst den entsprechenden Datensatz von kintone. Legen Sie die record_id dieses Datensatzes als Argument von app.delete () fest und erhalten Sie das Verarbeitungsergebnis.
Die als Verarbeitungsergebnis übergebenen Argumente sind dieselben wie der Inhalt ohne die Versionsnummer der Datenadditionsverarbeitung. Wenn Sie mehrere Datensätze löschen möchten, übergeben Sie das Datensatzarray als Argument an app.batch_delete ().
Unten sehen Sie das Ergebnis der Ausführung von pykintoneTest.py mit dem gesamten Code in der letzten "Referenz". -Record Nummer 34 wurde hinzugefügt. -Der Titel wurde für Datensatz Nummer 1 aktualisiert. -Record Nummer 35 wurde hinzugefügt und die angehängte Datei wurde gespeichert.
Ich habe auch den Quellcode des Kintone API SDK für Python überprüft, aber es scheint einfach zu sein. Es ist schade, dass es nur wenige Dokumente gibt. Daher werde ich in Zukunft Verwendungsbeispiele wie das Hinzufügen, Aktualisieren und Löschen mehrerer Datensätze zusammenfassen.
kintone API SDK for Python https://developer.cybozu.io/hc/ja/articles/205382194-kintone-API-SDK-for-Python
icoxfog417/pykintone https://github.com/icoxfog417/pykintone
__ [pykintone] Zusammenfassung der Bedienung von Datensätzen von Python bis kintone __ https://trialanderror.jp/python-kintone-records/
__PykintoneTest.py wurde dieses Mal erstellt. Alle Codes __
pykintoneTest.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import codecs
import sys
import time
import pykintone
from pykintone import model
import pykintone.structure_field as sf
#-------------------------------------------------
#Kintone-API-Einstellungen (allen Prozessen gemeinsam)
#-------------------------------------------------
subdomein = "Kintone-Subdomain"
appId = "Kintone-Anwendungs-ID"
token = "Kintone-API-Token"
app = pykintone.app(subdomein, appId, token)
#-------------------------------------------------
#Daten bekommen
#-------------------------------------------------
select = "Erstellungsdatum und -zeit< NOW() order by dateTime asc"
res = app.select(select)
if res.ok:
records = res.records
if len(records) < 1 :
print("0 Datensätze")
for record in records:
print(record[u"Erstellungsdatum und -zeit"]["value"] + ", " + record["dateTime"]["value"] + ", " + record["title"]["value"])
else:
print(res.error.id.encode('utf-8'))
print(res.error.message.encode('utf-8'))
print(res.error.code)
#-------------------------------------------------
#Daten hinzufügen / aktualisieren
#-------------------------------------------------
#Daten hinzufügen
class recordLayout(model.kintoneModel):
def __init__(self):
super(recordLayout, self).__init__()
self.datetime = ""
self.title = ""
record = recordLayout()
record.datetime = time.strftime('%Y-%m-%dT%H:%M:%S+09:00')
record.title = u"Fügen Sie Testdaten von Raspi hinzu"
res = app.create(record)
if res.ok:
print("Add-ID aufzeichnen=" + str(res.record_id) + " revision=" + str(res.revision))
else:
print(res.error.id.encode('utf-8'))
print(res.error.message.encode('utf-8'))
print(res.error.code)
#Datenaktualisierung
select = "Erstellungsdatum und -zeit< NOW() order by dateTime asc"
records = app.select(select).models(recordLayout)
record = records[0]
record.title = u"Aktualisieren Sie die Testdaten von Raspi"
res = app.update(record)
if res.ok:
print("Update-Revision aufzeichnen=" + str(res.revision))
else:
print(res.error.id.encode('utf-8'))
print(res.error.message.encode('utf-8'))
print(res.error.code)
#-------------------------------------------------
#Daten hinzufügen (Datei hochladen)
#-------------------------------------------------
class recordLayout2(model.kintoneModel):
def __init__(self):
super(recordLayout2, self).__init__()
self.datetime = ""
self.title = ""
self.file = [sf.File()]
file = ["test.jpg "]
record = recordLayout2()
record.datetime = time.strftime('%Y-%m-%dT%H:%M:%S+09:00')
record.title = u"Fügen Sie Testdaten von Raspi mit Datei hinzu"
record.file = [sf.File.upload(f, app) for f in file]
res = app.create(record)
if res.ok:
print("Datensatz hinzufügen(Datei UP) id=" + str(res.record_id) + " revision=" + str(res.revision))
else:
print(res.error.id.encode('utf-8'))
print(res.error.message.encode('utf-8'))
print(res.error.code)
#-------------------------------------------------
#Daten löschen
#-------------------------------------------------
#select = "Rekordzahl> \"3\""
#records = app.select(select).models(recordLayout)
#for record in records:
# res = app.delete(record.record_id)
# if res.ok:
# print("Lösch-ID des Datensatzes=" + str(record.record_id))
# else:
# print(res.error.id.encode('utf-8'))
# print(res.error.message.encode('utf-8'))
# print(res.error.code)
Recommended Posts