Utilisez le SDK API kintone pour Python avec Raspberry Pi (stockez facilement des données dans kintone à partir de Raspberry Pi)

Aperçu

Le stockage des données, la visualisation et l'analyse des valeurs des capteurs de Raspberry Pi peuvent être facilement effectués en utilisant kintone dans le cloud. J'ai implémenté le processus de téléchargement de données sur ce kintone avec ma propre bibliothèque, mais j'ai essayé de mettre en œuvre le processus avec le SDK API kintone pour Python présenté sur le site officiel. (Ci-après, les données téléchargées depuis Rasberry Pi) pykintone06a.png En conséquence, j'ai pu facilement implémenter le processus avec un code court sans aucun problème, j'ai donc décidé d'arrêter la maintenance de ma propre bibliothèque et d'utiliser le SDK API kintone pour Python à partir de maintenant.

__Kintone API SDK pour Python __ https://developer.cybozu.io/hc/ja/articles/205382194-kintone-API-SDK-for-Python

GitHub icoxfog417/pykintone https://github.com/icoxfog417/pykintone

Paramètres Raspberry Pi

Le corps principal de Raspberry Pi est 3B et le système d'exploitation est le dernier pour le moment.

Raspbian Buster with desktop ・ Version: septembre 2019 ・ Date de sortie: 2019-09-26 -Version du noyau: 4.19

Je vais omettre la méthode de configuration. Si vous souhaitez en savoir plus, veuillez vous référer à ce qui suit.

__Raspberry Pi Configuration initiale Windows (@ sigma7641) __ https://qiita.com/sigma7641/items/995c7bb07eab408b9d0e __Raspberry Pi Configuration initiale Mac (@skkojiko) __ https://qiita.com/skkojiko/items/a7e342a8ab53b409fe6a

Kintone API SDK for Python settings

L'image du système d'exploitation utilisée cette fois, Raspbian Buster avec bureau 2019-09-26, peut être utilisée avec Python2, Python3, pip et pip3 depuis le début, ces paramètres ne sont donc pas obligatoires. Vous pouvez facilement installer le SDK API kintone pour Python avec les pips suivants.

$ pip install pykintone
$ pip3 install pykintone

Ajout de l'application kintone

Créez une application Kintone à partir de zéro et créez un formulaire

Définissez les champs comme suit:

Nom de domaine type ID couche d'alimentation / élément
Date et l'heure Date et l'heure datetime
Titre Chaîne de caractères (1 ligne) title
Pièce jointe Pièce jointe file
Date et heure de création Date et heure (système) Date et heure de création

pykintone02a.png

Définir le jeton API sur l'écran de configuration de l'application

À partir de l'écran des paramètres de l'application, l'écran des paramètres du jeton API s'ouvre dans l'ordre Paramètres-> Personnaliser> Jetons API de liaison de service. Lorsque vous appuyez sur le bouton "Générer", le jeton API sera ajouté, donc vérifiez tous les droits d'accès sauf la gestion des applications et "enregistrer".

Données initiales de kintone

Préparez les données initiales suivantes. pykintone04a.png

développement de programmes python

Utilisons le SDK de l'API kintone pour Python pour implémenter des ajouts et des suppressions, y compris l'acquisition, l'ajout, la mise à jour et le téléchargement de fichiers de données.

Paramètres de l'API kintone (communs à tous les processus)

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

#Paramètres de l'API kintone (communs à tous les processus)
subdomein = "sous-domaine kintone"
appId     = "ID de l'application kintone"
token     = "jeton d'API kintone"
app       = pykintone.app(subdomein, appId, token)

Créez une application d'instance de pykintone.app () avec le sous-domaine kintone, l'ID d'application et le jeton API. Cette instance est utilisée pour tous les traitements.

acquisition de données kintone

pykintoneTest.py


(Omettre la description jusqu'à la configuration de l'API kintone)

#Obtenez des données
select = "Date et heure de création< NOW() order by dateTime asc"
res = app.select(select)
if res.ok:
    records = res.records
    if len(records) < 1 :
        print("0 enregistrements")
    for record in records:
        print(record[u"Date et heure de création"]["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)

Exécute le processus d'acquisition d'enregistrement des conditions spécifiées dans l'application d'instance créée dans "Kintone API settings". La condition d'acquisition d'enregistrement est transmise comme argument de app.select () et le résultat du traitement est reçu.

Les arguments transmis à la suite du traitement sont les suivants.

argument Contenu
.ok true :Traitement terminé normalement, faux:Erreur de traitement
.records Informations d'enregistrement acquises (tableau)
.error.id ID d'erreur
.error.message Message d'erreur
.error.code Code d'erreur

Lorsque le processus est terminé normalement, les données sont stockées dans .records (tableau).

Ajout de données kintone

pykintoneTest.py


(Omettre la description jusqu'à la configuration de l'API kintone)

#Ajouter des données
class recordLayout(model.kintoneModel):
    def __init__(self):
        super(recordLayout, self).__init__()
        self.datetime = ""  #code de champ "date et heure" kintone
        self.title    = ""  #Code de champ "Titre" kintone

record = recordLayout()
record.datetime = time.strftime('%Y-%m-%dT%H:%M:%S+09:00')
record.title    = u"Ajouter des données de test de Raspi"
res = app.create(record)
if res.ok:
    print("ID d'ajout d'enregistrement=" + 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)

Exécutez le processus d'ajout d'un enregistrement avec l'application d'instance créée dans "Paramètres de l'API kintone".

Pour stocker l'enregistrement à ajouter, créez un modèle de classe qui hérite de kintoneModel du SDK. Définissez le code de champ du formulaire kintone sur le nom de la variable dans le modèle et définissez chaque donnée. Définissez ce modèle comme argument de app.create () et recevez le résultat du traitement.

Les arguments transmis à la suite du traitement sont les suivants.

argument Contenu
.ok true :Traitement terminé normalement, faux:Erreur de traitement
.record_id ID de l'enregistrement ajouté
.revision Numéro de révision de l'enregistrement ajouté
.error.id ID d'erreur
.error.message Message d'erreur
.error.code Code d'erreur

Lorsque le processus est terminé normalement, vous recevrez l'ID d'enregistrement et le numéro de révision de l'enregistrement ajouté. Si vous souhaitez ajouter plusieurs enregistrements, passez le tableau de modèle en argument à app.batch_create ().

mise à jour des données kintone

pykintoneTest.py


(Omettre la description jusqu'à la configuration de l'API kintone)

#Mise à jour des données
select    = "Date et heure de création< NOW() order by dateTime asc"
records = app.select(select).models(recordLayout)
record = records[0]
record.title    = u"Mettre à jour les données de test de Raspi"
res = app.update(record)
if res.ok:
    print("Enregistrer la révision de la mise à jour=" + str(res.revision))
else:
    print(res.error.id.encode('utf-8'))
    print(res.error.message.encode('utf-8'))
    print(res.error.code)

Exécutez un processus de mise à jour d'enregistrement avec l'application d'instance créée dans "Paramètres de l'API kintone"

Tout d'abord, récupérez l'enregistrement correspondant de kintone. La valeur mise à jour est reflétée dans le code de champ correspondant de l'enregistrement 1 acquis. Définissez cet enregistrement en tant qu'argument de app.update () et recevez le résultat du traitement.

Les arguments passés comme résultat du traitement sont les mêmes que ceux du traitement d'ajout de données. Si vous souhaitez mettre à jour plusieurs enregistrements, passez un tableau d'enregistrements comme argument à app.batch_update ().

Ajouter des données Kintone (télécharger le fichier)

pykintoneTest.py


(Omettre la description jusqu'à la configuration de l'API kintone)

#Ajouter des données
class recordLayout2(model.kintoneModel):
    def __init__(self):
        super(recordLayout2, self).__init__()
        self.datetime = ""
        self.title    = ""
        self.file     = [sf.File()]

file = ["test.jpg "]  #Définissez le chemin du fichier à stocker dans kintone dans le tableau
record = recordLayout2()
record.datetime = time.strftime('%Y-%m-%dT%H:%M:%S+09:00')
record.title    = u"Ajouter des données de test de Raspi avec un fichier"
record.file     = [sf.File.upload(f, app) for f in file]
res = app.create(record)
if res.ok:
    print("Ajouter un enregistrement(Fichier 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)

Le SDK de l'API kintone pour Python facilite la mise en œuvre de l'ajout de données impliquant le téléchargement de fichiers.

Ajoutez une variable avec le nom de code de champ du fichier joint dans le modèle. Initialisez avec sf.File () afin que des variables supplémentaires puissent stocker les informations de configuration pour les téléchargements de fichiers.

Téléchargez le fichier dans kintone à l'avance avec sf.File.upload () et définissez le tableau de clés de fichier résultant sur la variable de modèle. D'autres sont les mêmes que le processus d'ajout de données.

Supprimer les données kintone

pykintoneTest.py


(Omettre la description jusqu'à la configuration de l'API kintone)

select    = "Numéro d'enregistrement> \"3\""
records = app.select(select).models(recordLayout)
for record in records:
    res = app.delete(record.record_id)
    if res.ok:
        print("ID de suppression d'enregistrement=" + str(record.record_id))
    else:
        print(res.error.id.encode('utf-8'))
        print(res.error.message.encode('utf-8'))
        print(res.error.code)

Exécutez le processus de suppression d'un enregistrement avec l'application d'instance créée dans les "paramètres de l'API kintone".

Tout d'abord, récupérez l'enregistrement correspondant de kintone. Définissez le record_id de cet enregistrement comme argument de app.delete () et recevez le résultat du traitement.

Les arguments passés comme résultat du traitement sont les mêmes que le contenu à l'exclusion du numéro de révision du traitement d'ajout de données. Si vous souhaitez supprimer plusieurs enregistrements, passez le tableau d'enregistrements comme argument à app.batch_delete ().

résultat

Voici le résultat de l'exécution de pykintoneTest.py avec tout le code de la dernière "référence". pykintone06b.png -Le numéro d'enregistrement 34 a été ajouté. -Le titre a été mis à jour pour l'enregistrement numéro 1. -Le numéro d'enregistrement 35 a été ajouté et le fichier joint a été sauvegardé.

J'ai également vérifié le code source du SDK API kintone pour Python, mais il semble facile à utiliser. Il est dommage qu'il y ait peu de documents, donc à l'avenir je résumerai des exemples d'utilisation tels que l'ajout, la mise à jour et la suppression de plusieurs enregistrements.

référence

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] Résumé de l'utilisation des enregistrements de Python vers kintone __ https://trialanderror.jp/python-kintone-records/

__PykintoneTest.py a créé cette fois tout le code __

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

#-------------------------------------------------
#Paramètres de l'API kintone (communs à tous les processus)
#-------------------------------------------------
subdomein = "sous-domaine kintone"
appId     = "ID de l'application kintone"
token     = "jeton d'API kintone"
app       = pykintone.app(subdomein, appId, token)

#-------------------------------------------------
#Obtenez des données
#-------------------------------------------------
select = "Date et heure de création< NOW() order by dateTime asc"
res = app.select(select)
if res.ok:
    records = res.records
    if len(records) < 1 :
        print("0 enregistrements")
    for record in records:
        print(record[u"Date et heure de création"]["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)

#-------------------------------------------------
#Ajouter / mettre à jour des données
#-------------------------------------------------
#Ajouter des données
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"Ajouter des données de test de Raspi"
res = app.create(record)
if res.ok:
    print("ID d'ajout d'enregistrement=" + 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)


#Mise à jour des données
select    = "Date et heure de création< NOW() order by dateTime asc"
records = app.select(select).models(recordLayout)
record = records[0]
record.title    = u"Mettre à jour les données de test de Raspi"
res = app.update(record)
if res.ok:
    print("Enregistrer la révision de la mise à jour=" + str(res.revision))
else:
    print(res.error.id.encode('utf-8'))
    print(res.error.message.encode('utf-8'))
    print(res.error.code)

#-------------------------------------------------
#Ajouter des données (télécharger le fichier)
#-------------------------------------------------
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"Ajouter des données de test de Raspi avec un fichier"
record.file     = [sf.File.upload(f, app) for f in file]
res = app.create(record)
if res.ok:
    print("Ajouter un enregistrement(Fichier 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)

#-------------------------------------------------
#Suprimmer les données
#-------------------------------------------------
#select    = "Numéro d'enregistrement> \"3\""
#records = app.select(select).models(recordLayout)
#for record in records:
#    res = app.delete(record.record_id)
#    if res.ok:
#        print("ID de suppression d'enregistrement=" + 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

Utilisez le SDK API kintone pour Python avec Raspberry Pi (stockez facilement des données dans kintone à partir de Raspberry Pi)
Exécutez AWS IoT Device SDK for Python sur Raspberry Pi
Utilisez le capteur de température / humidité / pression BME280 de Python avec Raspberry Pi 2
Utiliser l'API Resource plutôt que l'API client dans AWS SDK for Python (Boto3)
Ubuntu 20.04 sur raspberry pi 4 avec OpenCV et utilisation avec python
Installez PyCall sur Raspberry PI et essayez d'utiliser la bibliothèque GPIO pour Python de Ruby
Utilisez NeoPixel avec la tarte aux framboises
Utilisez l'API e-Stat de Python
Accédez aux feuilles de calcul Google en utilisant python avec raspberry pi (pour vous-même)
Obtenez des données de l'API d'analyse avec le client API Google pour python
Utilisez vl53l0x avec RaspberryPi (python)
Résolution d'une erreur lors de la mise en place de pygame dans python3 sur raspberry pi
Obtenir des données de Quandl en Python
Utilisez python sur Raspberry Pi 3 pour éclairer la LED (Hello World)
Installer Networkx dans l'environnement Python 3.7 pour une utilisation dans les livres de science des données sur les logiciels malveillants
Utilisez l'API kabu Station® de Python
Utilisez l'API Flickr de Python
Utiliser l'API Google Analytics de Python
À propos de l'erreur que j'ai rencontrée en essayant d'utiliser Adafruit_DHT à partir de Python sur Raspberry Pi
Utilisez python sur Raspberry Pi 3 pour éclairer la LED avec le contrôle du commutateur!
Acquérir la valeur du capteur de Grove Pi + avec Raspberry Pi et la stocker dans Kintone
Ajouter des mots au dictionnaire utilisateur de MeCab sur Ubuntu pour une utilisation en Python
Détectez la "luminosité" en utilisant python sur Raspberry Pi 3!
Utiliser le type de données PostgreSQL (jsonb) à partir de Python
Note de nfc.ContactlessFrontend () de nfcpy de python
Python: lecture de données JSON à partir de l'API Web
Utilisez facilement vos propres fonctions en Python
Adafruit Python BluefruitLE fonctionne sur Raspeye.
Obtenez les données de l'API Google Fit en Python
Utiliser le capteur Grove avec Raspberry Pi
Obtenez des données Youtube en Python à l'aide de l'API Youtube Data
Utiliser l'API Google Cloud Vision de Python
Exécutez un servomoteur en utilisant python sur Raspberry Pi 3
Représentez facilement des données graphiques dans le shell et Python
Comment utiliser "deque" pour les données Python
Utilisez pathlib dans Maya (Python2.7) en préparation du prochain Python3.7
Détectez la température à l'aide de python sur Raspberry Pi 3!
Travailler avec le GPS en Python pour Raspberry Pi 3
Acquisition de données à partir de l'API d'analyse avec l'application Web Client API Google pour python Partie 2
Utilisez PIL en Python pour extraire uniquement les données souhaitées d'Exif
Utilisation du capteur de température numérique à 1 fil DS18B20 avec Raspberry Pi de Python
Utilisez python sur Raspberry Pi 3 pour éclairer la LED quand il fait noir!
Obtenez des données de séries chronologiques de k-db.com avec Python
Détectez les interrupteurs à glissière à l'aide de python sur Raspberry Pi 3!
Comment utiliser Raspeye Pie Camera Python
Détectez les commutateurs magnétiques à l'aide de python sur Raspberry Pi 3!
Envelopper C avec Cython pour une utilisation à partir de Python
Envoyer des données depuis Raspberry Pi à l'aide d'AWS IOT
Conseils pour accéder à l'API ATND avec Python
Utilisez Python dans votre environnement depuis Win Automation
Grove - Capteur de température et d'humidité (DHT11) avec Raspberry Pi
Rendre DHT11 disponible avec Raspeye + python (Remarque)
N'utilisez pas readlines () dans votre instruction Python for!
Démarrage de la compilation croisée pour Raspberry Pi Zero sur Ubuntu
Sonnez le buzzer en utilisant python sur Raspberry Pi 3!
Envelopper C ++ avec Cython pour une utilisation à partir de Python
Appeler Polly à partir du kit SDK AWS pour Python
TensorFlow: exécuter des données apprises en Python sur Android
Connectez-vous à MySQL avec Python sur Raspberry Pi