Tidsseriedata
Tidsseriedata finns tillgängliga för översatta iotnodes. När en översatt iotnode uppdateras sparar Yggio numerisk och sträng data i en tidsseriedatabas.
Med hjälp av REST API:et kan du hämta tidsseriedata för ett specifikt attribut från en iotnode.
Följande är formatet för tidsseriedata för ett attribut av en iotnode:
[
{
"time": String,
"value": Number || String
},
...
]
time
är ett ISO 8601-tidsstämpel. T.ex.: 2019-08-07T12:30:00.00Z.
value
är det sparade värdet.
Ställ in tidsintervall
Man kan välja att hämta data med ett fast tidsintervall mellan varje datapunkt. Detta kan vara önskvärt om en hög dataupplösning inte behövs. Det kan förbättra laddningstider och prestanda. Databasen använder då interpolation för att ställa in värdena för datapunkterna.
Om ett fast tidsintervall används kommer data att ha följande format:
[
{
"time": String,
"value": Number,
"min": Number,
"max": Number,
"stddev": Number
},
...
]
time
är ett ISO 8601-tidsstämpel. T.ex.: 2019-08-07T12:30:00.00Z.
value
är det interpolerade värdet.
min
är värdet av den minsta punkten i interpolationsområdet.
max
är värdet av den största punkten i interpolationsområdet.
stddev
är standardavvikelsen för punkterna i interpolationsområdet.
Sampla ner data med ValueFunction
Funktionen valueFunction
låter dig utföra operationer på data grupperade inom specifika tidsfönster. Detta kan vara användbart för att analysera datatrender över tid genom att sammanfatta datapunkterna inom varje fönster.
Stödda operationer
Följande operationer kan utföras med valueFunction:
mean
: Beräknar medelvärdet av alla värden inom fönstret.timeWeightedMean
: Beräknar det tidsviktade medelvärdet av alla värden inom fönstret.max
: Hittar det högsta värdet inom fönstret.min
: Hittar det lägsta värdet inom fönstret.first
: Använder det första värdet inom fönstret.last
: Använder det sista värdet inom fönstret.sum
: Beräknar summan av alla värden inom fönstret.count
: Räknar antalet värden inom fönstret.difference
: Beräknar skillnaden mellan det första värdet i efterföljande fönster.
Tidsvägt medelvärde
Det tidsvägda medelvärdet beräknas genom att fastställa hur länge en mätning har befunnit sig i ett visst tillstånd inom ett givet intervall.
Exempel: En sensor mäter utnyttjandegraden av ett skrivbord:
[
{time: "2025-03-18T13:00:00.000Z", value: 0},
{time: "2025-03-18T13:30:00.000Z", value: 1},
{time: "2025-03-18T13:45:00.000Z", value: 0},
{time: "2025-03-18T14:15:00.000Z", value: 1},
{time: "2025-03-18T14:30:00.000Z", value: 1},
{time: "2025-03-18T14:45:00.000Z", value: 0},
{time: "2025-03-18T15:00:00.000Z", value: 1},
{time: "2025-03-18T15:45:00.000Z", value: 0}
]
Följande anrop beräknar det tidsvägda medelvärdet av beläggningen för varje timme:
$ curl -X 'GET' \
'https://staging.yggio.net/api/iotnodes/<iotnode._id>/stats?measurement=occupancy&distance=3600&valueFunction=timeWeightedMean' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <token>'
Svarsexempel:
[
{"time": "2025-03-18T13:00:00.000Z", "value": 0.25},
{"time": "2025-03-18T14:00:00.000Z", "value": 0.5},
{"time": "2025-03-18T15:00:00.000Z", "value": 0.75}
]
Förklaring:
Timme 1 (13:00–14:00)
: Tre observationer registrerades. Skrivbordet var obelagt (värde 0) i totalt 45 minuter och belagt (värde 1) i 15 minuter. Det ger ett tidsvägt medelvärde på 0,25.Timme 2 (14:00–15:00)
: Tre observationer registrerades. De första 15 minuterna använder föregående timmes tillstånd (0), följt av två observationer med värde 1. Det ger 30 minuter med värde 0 och 30 minuter med värde 1, vilket resulterar i ett medelvärde på 0,5.Timme 3 (15:00–16:00)
: Två observationer registrerades. Skrivbordet var belagt (värde 1) i 45 minuter och obelagt (värde 0) i 15 minuter. Det ger ett tidsvägt medelvärde på 0,75.
Notera:
Om den första observationen inträffar efter intervallets starttid kommer resultatet för det intervallet att bli null. Detta beror på att vi inte känner till värdet innan den första observationen och därför inte kan fastställa tillståndet för hela intervallet.
Exempel:
Om det första intervallet startar kl. 13:00 men den första observationen görs kl. 13:15 saknas information om tillståndet mellan 13:00 och 13:15. Eftersom tillståndet före 13:00 är okänt kan systemet varken anta eller härleda ett värde, vilket leder till att resultatet för det första intervallet blir null. Alla efterföljande intervall påverkas inte av detta, eftersom de utgår från tidigare kända värden.
Definiera tidsfönstret
Tidsfönstret för valueFunction
bestäms av alternativet distance
. Detta anger längden på varje fönster i antal sekunder.
Svarformat
När du använder funktionen valueFunction
kommer svaret att ha följande JSON-format:
[
{
"time": String,
"value": Number
},
...
]
time
: En ISO 8601-tidsstämpel (t.ex. 2019-08-07T12:30:00.00Z) som anger början av tidsfönstret.
value
: Resultatet av den specificerade valueFunction-operationen för tidsfönstret.
Hantering av tomma fönster
Om det inte finns några datapunkter inom ett specificerat tidsfönster kommer det fönstret att hoppas över i svaret. Exempel
Här är ett exempel på svar för en API-förfrågan med valueFunction=mean och distance=3600 (1 timme):
[
{
"time": "2019-08-07T12:00:00.00Z",
"value": 23.5
},
{
"time": "2019-08-07T13:00:00.00Z",
"value": 19.8
},
...
]
I detta exempel är value vid varje tidsstämpel medelvärdet av alla värden inom det motsvarande en-timmes fönstret.