API อย่างง่าย (อินเทอร์เฟซการเขียนโปรแกรมแอปพลิเคชัน) เพื่อส่งการวัดจาก thethingsNetwork ด้วยการตอบกลับไปยัง URL และในภายหลังดึงการวัดด้วยการตอบกลับ
การวัดที่ทำโดยเซ็นเซอร์อาจเป็นหนึ่งในประเภทต่อไปนี้ ( type S):
PH, CONDUCTIVITY, TURBIDITY, TEMPERATURE, TEMPERATURE_INSIDE, HUMIDITY, BATTERY, LID, DISSOLVED_OXYGEN
หากมีความจำเป็นที่จะต้องเพิ่มการสนับสนุนสำหรับการวัดประเภทอื่นโปรดติดต่อฉัน (Leik Lima-Eksen)
ในการส่งข้อมูลจาก TTN ไปยัง API สำหรับการจัดเก็บ
http://vannovervakning.com:5000/api/v1/measurements/<GRUPPENR>
มี <GRUPPENR> แทนที่ด้วยจำนวนกลุ่มของคุณ
สำหรับส่วนของคุณหมายความว่าภายใต้ Integrations คุณควรเพิ่มการรวมของ HTTP Integration ประเภทกับ URL ดังที่แสดงด้านบนเพื่อให้การตั้งค่านี้ถูกต้อง
ข้อมูลที่ส่งจาก TTN (สิ่งที่ส่งคืนใน Payload Formats ) จะต้องอยู่ในรูปแบบดังที่แสดงด้านล่าง
{
data : [
{
type : "TEMPERATURE" ,
value : 21.3
} ,
{
type : "CONDUCTIVITY" ,
value : 120
}
.
.
.
]
}ตัวอย่างของคุณสมบัติการบรรทุกที่ง่ายมาก:
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
}
]
} ;
} นอกจากนี้โปรดทราบว่าค่าตัวเลขที่คุณส่งไปยัง API นั้นเป็นวิธีที่พวกเขาจะถูกเก็บไว้สำหรับการดึงข้อมูลในภายหลัง นั่นคือถ้าคุณได้รับการอ่านอุณหภูมิแบบอะนาล็อกเช่น 502 คุณต้องแปลงเป็นอุณหภูมิจริงก่อนที่จะส่งไปยัง API
เคล็ดลับ : การตอบสนองทั้งหมด API ให้รูปแบบผู้ใช้ JSON (Notation Object JavaScript) เป็นไปได้มากว่าภาษาการเขียนโปรแกรมที่คุณใช้มีการสนับสนุนสิ่งนี้ Google EG <PROGRAMMERINGSSPRÅK> json parse ข้อมูลเพิ่มเติม MTP <PROGRAMMERINGSSPRÅK>
เพื่อเรียกคืนการอ่านเซ็นเซอร์ล่าสุดได้รับการตอบกลับดังกล่าวจะถูกส่งไปยัง API
https://vannovervakning.com/api/v1/measurements/<GRUPPENR>
โดยที่ <GRUPPENR> ตามปกติจะถูกแทนที่ด้วยจำนวนกลุ่มของคุณ (จะไม่ทำซ้ำอีก)
การตอบสนองจะเป็นการวัดครั้งสุดท้ายสำหรับเซ็นเซอร์แต่ละตัวสำหรับเซ็นเซอร์ที่ระบุ ตัวอย่างของการตอบสนองดังกล่าว:
{
"nodeId": 1,
"data": {
"HUMIDITY": [
{
"value": 10,
"timeCreated": "2019-02-06T09:41:55.432Z"
}
],
"BATTERY": [
{
"value": 30,
"timeCreated": "2019-02-06T09:41:55.431Z"
}
]
}
}
เพื่อดึงการวัดภายในช่วงเวลาหนึ่ง URL จะใช้ในรูปแบบต่อไปนี้
https://vannovervakning.com/api/v1/measurements/<GRUPPENR>/<FROM_TIMESTAMP_MS>/<TO_TIMESTAMP_MS>
der <FROM_TIMESTAMP_MS> และ <TO_TIMESTAMP_MS> เป็น tamp ต่อชั่วโมงของ Unix ในมิลลิวินาที
เคล็ดลับ : สิ่งนี้สอดคล้องกับรูปแบบที่คุณได้รับจากคุณสมบัติ JavaScript Date.now()
การตอบสนองจะมีรูปแบบเดียวกับการอ่านล่าสุด แต่ตอนนี้อาร์เรย์สำหรับแต่ละ type จะมีการอ่านเพิ่มเติม ตัวอย่างของการตอบสนองดังกล่าว:
{
"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" : { }
} ,
]
}
} หากคุณต้องการดึงข้อมูลจากเวลาที่กำหนดจนถึงตอนนี้ <TO_TIMESTAMP_MS> สามารถคลายได้ ดังนั้นคำขอดังกล่าวจะมีรูปแบบดังที่แสดงด้านล่าง:
https://vannovervakning.com/api/v1/measurements/<GRUPPENR>/<FROM_TIMESTAMP_MS>
มันอาจจะเป็นที่น่าสังเกต (พิจารณาการเพิ่มประสิทธิภาพของเว็บไซต์ของพวกเขา) ว่ารับประกันได้ว่าคำสั่งของการอ่านเซ็นเซอร์จะมาตามลำดับจากมากไปน้อยเรียงลำดับโดย Tamp ชั่วโมง นั่นคือการอ่านล่าสุดมาที่ด้านบนของอาร์เรย์
API ยังรองรับการกรองตามประเภทการวัด โดยทั่วไปคุณจะได้รับทุกประเภทการวัดที่ตอบสนอง <GRUPPENR> และ จำกัด เวลาใด ๆ หากป้อน แต่ถ้าคุณต้องการการวัดเฉพาะบางอย่างเท่านั้นคุณสามารถเพิ่มได้ ?types=<TYPE>,<TYPE>,... ในตอนท้ายของ URL ตัวอย่างของการสืบค้นดังกล่าวที่ไม่มีกลุ่มข้อ จำกัด ด้านเวลาและ types การกำหนดคือดังต่อไปนี้:
https://vannovervakning.com/api/v1/measurements/1/1551434764874?types=PH,CONDUCTIVITY
หรือด้วย <TO_TIMESTAMP_MS> :
https://vannovervakning.com/api/v1/measurements/1/1551434764874/1551442024867?types=CONDUCTIVITY
สามารถแทรกเซ็นเซอร์ได้หลายประเภทเป็นที่ต้องการสำหรับ <TYPE>
หนึ่งฟังก์ชั่นสุดท้ายที่มีประโยชน์ของ API คือความสามารถในการรวมการวัดที่คุณสกัด หากการสืบค้นเสร็จสิ้นด้วย ?aggregate=<AGGREGATE> คุณสามารถเพิ่ม <AGGREGATE> อาจเป็นหนึ่งในค่าต่อไปนี้:
HIGHEST, LOWEST, AVERAGE
ตัวอย่างของคำขอดังกล่าว:
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
ตัวอย่างของการตอบกลับคำขอดังกล่าวมี:
สำหรับ AVERAGE :
{
"nodeId" : 1 ,
"data" : {
"TURBIDITY" : [
{
"value" : 348.7556962025316
}
] ,
"TEMPERATURE" : [
{
"value" : 23.533417721518983
}
] ,
"PH" : [
{
"value" : 7.778101265822785
}
] ,
"CONDUCTIVITY" : [
{
"value" : 0
}
]
}
} สำหรับ HIGEST และ 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
}
]
}
}