Verwenden Sie das Kintone API SDK für Python mit Raspberry Pi (speichern Sie Daten einfach in Kintone von Raspberry Pi).

Überblick

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) pykintone06a.png 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

Himbeer-Pi-Einstellungen

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

kintone API SDK für Python-Einstellungen

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

Hinzufügung der Kintone-App

Erstellen Sie eine Kintone-App von Grund auf neu und erstellen Sie ein Formular

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

pykintone02a.png

Legen Sie das API-Token auf dem Einstellungsbildschirm der Anwendung fest

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".

Anfangsdaten von Kintone

Bereiten Sie die folgenden Anfangsdaten vor. pykintone04a.png

Python-Programmentwicklung

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.

Kintone-API-Einstellungen (allen Prozessen gemeinsam)

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.

Kintone-Datenerfassung

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.

Hinzufügen von Kintondaten

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 ().

Kintone-Datenaktualisierung

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 ().

Kintone-Daten hinzufügen (Datei hochladen)

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.

Löschen Sie die Kintondaten

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 ().

Ergebnis

Unten sehen Sie das Ergebnis der Ausführung von pykintoneTest.py mit dem gesamten Code in der letzten "Referenz". pykintone06b.png -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.

Referenz

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

Verwenden Sie das Kintone API SDK für Python mit Raspberry Pi (speichern Sie Daten einfach in Kintone von Raspberry Pi).
Führen Sie das AWS IoT Device SDK für Python auf Raspberry Pi aus
Verwenden Sie den Temperatur- / Feuchtigkeits- / Drucksensor BME280 von Python mit Raspberry Pi 2
Verwenden Sie die Ressourcen-API anstelle der Client-API im AWS SDK für Python (Boto3).
Ubuntu 20.04 auf Himbeer-Pi 4 mit OpenCV und mit Python verwenden
Installieren Sie PyCall auf Raspberry PI und versuchen Sie, die GPIO-Bibliothek für Python von Ruby zu verwenden
Verwenden Sie NeoPixel mit Himbeerkuchen
Verwenden Sie die e-Stat-API von Python
Zugriff auf Google Spreadsheets Verwenden von Python mit Himbeer-Pi (für sich selbst)
Abrufen von Daten aus der Analyse-API mit Google API Client für Python
Verwenden Sie vl53l0x mit RaspberryPi (Python)
Ein Fehler beim Einfügen von Pygame in Python3 auf Himbeer-Pi wurde behoben
Verwenden Sie Python auf Raspberry Pi 3, um die LED zu beleuchten (Hello World)
Installieren Sie Networkx in der Python 3.7-Umgebung zur Verwendung in Malware Data Science-Büchern
Verwenden Sie die kabu Station® API von Python
Verwenden Sie die Flickr-API von Python
Verwenden Sie die Google Analytics-API von Python
Über den Fehler, den ich beim Versuch, Adafruit_DHT von Python auf Raspberry Pi zu verwenden, festgestellt habe
Verwenden Sie Python auf Raspberry Pi 3, um die LED mit Schaltersteuerung zu beleuchten!
Erfassen Sie den Sensorwert von Grove Pi + mit Raspberry Pi und speichern Sie ihn in Kintone
Fügen Sie dem Benutzerwörterbuch von MeCab unter Ubuntu Wörter zur Verwendung in Python hinzu
Erkennen Sie "Helligkeit" mit Python auf Raspberry Pi 3!
Verwenden Sie den PostgreSQL-Datentyp (jsonb) von Python
Anmerkung von nfc.ContactlessFrontend () von nfcpy von Python
Python: Lesen von JSON-Daten von der Web-API
Verwenden Sie einfach Ihre eigenen Funktionen in Python
Adafruit Python BluefruitLE arbeitet mit Raspeye.
Holen Sie sich Google Fit API-Daten in Python
Verwenden Sie den Grove-Sensor mit Raspberry Pi
Holen Sie sich Youtube-Daten in Python mithilfe der Youtube-Daten-API
Verwenden Sie die Google Cloud Vision-API von Python
Lassen Sie einen Servomotor mit Python auf Raspberry Pi 3 laufen
Zeichnen Sie Daten einfach in Shell und Python
Verwendung von "deque" für Python-Daten
Verwenden Sie pathlib in Maya (Python2.7), um sich auf das kommende Python3.7 vorzubereiten
Ermitteln Sie die Temperatur mit Python auf Raspberry Pi 3!
Arbeiten mit GPS in Python für Raspberry Pi 3
Datenerfassung von der Analytics-API mit dem Google API-Client für die Python Part 2-Webanwendung
Verwenden Sie PIL in Python, um nur die gewünschten Daten aus Exif zu extrahieren
Verwendung des digitalen 1-Draht-Temperatursensors DS18B20 mit Raspberry Pi von Python
Verwenden Sie Python auf Raspberry Pi 3, um die LED zu beleuchten, wenn es dunkel wird!
Holen Sie sich mit Python Zeitreihendaten von k-db.com
Erkennen Sie Schiebeschalter mit Python auf Raspberry Pi 3!
Verwendung von Raspeye Pie Camera Python
Erkennen Sie Magnetschalter mit Python auf Raspberry Pi 3!
Wickeln Sie C mit Cython für Python ein
Senden Sie Daten von Raspberry Pi mit AWS IOT
Tipps zum Erreichen der ATND-API mit Python
Verwenden Sie Python in Ihrer Umgebung von Win Automation
Grove - Temperatur- und Feuchtigkeitssensor (DHT11) mit Raspberry Pi
Stellen Sie DHT11 mit Raspeye + Python zur Verfügung (Hinweis)
Verwenden Sie in Ihrem Python keine readlines () für Anweisungen!
Cross-Compilierung für Raspberry Pi Zero unter Ubuntu gestartet
Lassen Sie den Summer mit Python auf Raspberry Pi 3 erklingen!
Wrap C ++ mit Cython zur Verwendung von Python
Rufen Sie Polly aus dem AWS SDK für Python auf
TensorFlow: Führen Sie in Python gelernte Daten unter Android aus
Stellen Sie mit Python auf Raspberry Pi eine Verbindung zu MySQL her