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) 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
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
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
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 |
À 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".
Préparez les données initiales suivantes.
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.
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.
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).
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 ().
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 ().
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.
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 ().
Voici le résultat de l'exécution de pykintoneTest.py avec tout le code de la dernière "référence". -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.
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