Une API simple (interface de programmation d'applications) pour envoyer des mesures de TheThingsNetwork avec un post-demande à une URL, puis récupérer les mesures avec une demande de get.
Les mesures effectuées par le capteur peuvent être l'un des types suivants ( type S):
PH, CONDUCTIVITY, TURBIDITY, TEMPERATURE, TEMPERATURE_INSIDE, HUMIDITY, BATTERY, LID, DISSOLVED_OXYGEN
S'il est nécessaire d'ajouter un support pour un autre type de mesure, veuillez me contacter (Leik Lima-eriksen).
Pour envoyer des données de TTN à l'API pour le stockage, un post-record est fait pour
http://vannovervakning.com:5000/api/v1/measurements/<GRUPPENR>
Là <GRUPPENR> remplacé par le nombre de votre groupe.
Pour votre part, cela signifie que sous Integrations , vous devez ajouter une intégration de l' HTTP Integration de type avec l'URL comme indiqué ci-dessus pour obtenir cette configuration correctement.
Les données envoyées à partir de TTN (ce qui est retourné au Payload Formats ) doit être sur le format comme indiqué ci-dessous.
{
data : [
{
type : "TEMPERATURE" ,
value : 21.3
} ,
{
type : "CONDUCTIVITY" ,
value : 120
}
.
.
.
]
}Un exemple d'une fonctionnalité de charge utile très simple:
function Decoder ( bytes , port ) {
//Definerer de ulike elementene i bufferen
var temp = ( ( bytes [ 0 ] << 8 ) + bytes [ 1 ] ) ;
var turb = bytes [ 2 ] ;
//Returerer verdiene.
return {
data : [
{
type : "TEMPERATURE" ,
value : temp ,
} ,
{
type : "TURBIDITY" ,
value : turb
}
]
} ;
} Notez également que les valeurs de nombre que vous envoyez à l'API sont également la façon dont elles seront stockées pour une récupération ultérieure. Autrement dit, si vous recevez une lecture de température analogique par EG 502 , vous devez la convertir en une température réelle avant de l'envoyer à l'API.
Astuce : toutes les réponses API fournit un format JSON utilisateur (notation d'objet JavaScript). Très probablement, le langage de programmation que vous utilisez a un support pour cela. Google, par exemple <PROGRAMMERINGSSPRÅK> json parse pour plus d'informations MTP votre <PROGRAMMERINGSSPRÅK> .
Pour récupérer les dernières lectures de capteurs, une telle demande de Get est envoyée à l'API.
https://vannovervakning.com/api/v1/measurements/<GRUPPENR>
Où <GRUPPENR> comme d'habitude, est remplacé par le nombre de votre groupe (ne sera pas répété plus loin).
La réponse sera la dernière mesure pour chacun des capteurs du capteur spécifié. Exemple d'une telle réponse:
{
"nodeId": 1,
"data": {
"HUMIDITY": [
{
"value": 10,
"timeCreated": "2019-02-06T09:41:55.432Z"
}
],
"BATTERY": [
{
"value": 30,
"timeCreated": "2019-02-06T09:41:55.431Z"
}
]
}
}
Pour récupérer les mesures dans un intervalle de temps, l'URL est utilisée dans le format suivant.
https://vannovervakning.com/api/v1/measurements/<GRUPPENR>/<FROM_TIMESTAMP_MS>/<TO_TIMESTAMP_MS>
Der <FROM_TIMESTAMP_MS> et <TO_TIMESTAMP_MS> est un TAMP horaire Unix en millisecondes.
Conseil : cela correspond au format que vous obtenez à partir de la fonction JavaScript Date.now()
La réponse aura le même format que pour les dernières lectures, mais maintenant les tableaux pour chacun type contiendront plus de lectures. Exemple d'une telle réponse:
{
"nodeId" : 1 ,
"data" : {
"PH" : [
{
"value" : 7.8 ,
"timeCreated" : "2019-03-01T11:55:03.390Z" ,
"position" : { }
} ,
{
"value" : 7.8 ,
"timeCreated" : "2019-03-01T11:55:03.372Z" ,
"position" : { }
}
] ,
"BATTERY" : [
{
"value" : 20 ,
"timeCreated" : "2019-02-22T09:14:20.806Z" ,
"position" : { }
} ,
{
"value" : 15 ,
"timeCreated" : "2019-02-21T22:45:33.735Z" ,
"position" : { }
} ,
]
}
} Si vous souhaitez récupérer des données à partir d'une période spécifique jusqu'à présent <TO_TIMESTAMP_MS> peut être desserré. Ainsi, une telle demande aura le format comme indiqué ci-dessous:
https://vannovervakning.com/api/v1/measurements/<GRUPPENR>/<FROM_TIMESTAMP_MS>
Il peut être utile de noter (considérant l'optimisation de leur site Web) qu'il est garanti que l'ordre de la lecture du capteur viendra en ordre décroissant trié par Tamp horaire. C'est-à-dire que les dernières lectures se présentent en haut du tableau.
L'API prend également en charge la filtration en fonction des types de mesure. Fondamentalement, vous obtiendrez toutes sortes de types de mesures qui satisfont <GRUPPENR> et à tout délai s'il est entré. Mais si vous ne voulez que des mesures spécifiques, vous pouvez ajouter ?types=<TYPE>,<TYPE>,... à la fin de l'URL. Un exemple d'une telle requête avec le groupe no, la limitation de temps et la délimitation types est la suivante:
https://vannovervakning.com/api/v1/measurements/1/1551434764874?types=PH,CONDUCTIVITY
ou avec <TO_TIMESTAMP_MS> :
https://vannovervakning.com/api/v1/measurements/1/1551434764874/1551442024867?types=CONDUCTIVITY
Comme de nombreux types de capteurs peuvent être insérés comme souhaitables pour <TYPE> .
Une dernière fonction pratique de l'API est la capacité d'agréger les mesures que vous extraire. Si une requête est effectuée avec ?aggregate=<AGGREGATE> limite de temps, vous pouvez ajouter <AGGREGATE> peut être l'une des valeurs suivantes:
HIGHEST, LOWEST, AVERAGE
Exemples de ces demandes:
https://vannovervakning.com/api/v1/measurements/1/1551434764874?types=PH,CONDUCTIVITY&aggregate=HIGHEST
https://vannovervakning.com/api/v1/measurements/1/1551434764874/1551442024867?aggregate=LOWEST
https://vannovervakning.com/api/v1/measurements/1/1551434764874?aggregate=AVERAGE
Exemple de la réponse que ces demandes fournissent:
Pour AVERAGE :
{
"nodeId" : 1 ,
"data" : {
"TURBIDITY" : [
{
"value" : 348.7556962025316
}
] ,
"TEMPERATURE" : [
{
"value" : 23.533417721518983
}
] ,
"PH" : [
{
"value" : 7.778101265822785
}
] ,
"CONDUCTIVITY" : [
{
"value" : 0
}
]
}
} Pour HIGEST et LOWEST :
{
"nodeId" : 1 ,
"data" : {
"TURBIDITY" : [
{
"value" : 1425 ,
"timeCreated" : "2019-03-01T11:54:38.129Z" ,
"position" : null
}
] ,
"TEMPERATURE" : [
{
"value" : 30.9 ,
"timeCreated" : "2019-03-01T11:50:29.988Z" ,
"position" : null
}
] ,
"PH" : [
{
"value" : 9.4 ,
"timeCreated" : "2019-03-01T11:13:04.545Z" ,
"position" : null
}
] ,
"CONDUCTIVITY" : [
{
"value" : 0 ,
"timeCreated" : "2019-03-01T10:32:48.394Z" ,
"position" : null
}
]
}
}