Bodemvocht Data Analyse

languages: ennl

Sensoren met bodemvocht data

Om selectief data van bodemvocht nodes te downloaden kun je in onderstaand bestand voor elke node zien of deze bodemvochtmetingen uitvoert. 

https://meetjestad.net/static/node_metadata.json

Dit bestand heeft een JSON formaat. Om snel nodes met een bodemvocht-meting te kunnen selecteren kun je in het hoofdveld 'nodes' per node bepalen of het bodemvochtmetingen doet. Hiervoor kan je gebruik maken van de key 'maintype'. Als maintype=="soil_moisture" dan verricht de node bodemvochtmetingen. 

Data formaat

De data van de bodemvocht-sensoren wordt in de MeetJeStad database opgeslagen in het 'Extra' veld van de node. Voor bodemvocht nodes is de volgorde in het extra veld standaard:

SM1, ST1, SM2, ST2, Zonnepaneel

Waarbij
SM1 = meting bodemvocht op diepte 1 (10 cm) in mV
ST1 = meting van bodemtemperatuur op diepte 1 (10cm) 
SM2 = meting bodemvocht op diepte 2 (40 cm) in mV
ST2 = meting van bodemtemperatuur op diepte 2 (40cm)

Sommige nodes meten zowel bodemvocht als fijnstof (bijvoorbeeld sensor 2003,2044). In dat geval staan er meer getallen in het extra veld. Om te weten welke getallen horen bij de bodemvochtmeting moet je dan kijken naar de volgorde van de sensoren. Dit is aangegeven in node_metadata.json in het hoofdveld sensors. Dit is een lijst van collecties (dictionaries) met een lijst van aangesloten sensoren en de datum vanaf wanneer deze sensoren zijn aangesloten. De volgorde van de sensoren in de lijst is de volgorde waarin zij voorkomen in het extra veld.In onderstaande voorbeeld van node 2003, is een fijnstofkastje in maart 2022 uitgebreid met bodemvochtsensoren ("2xpinotechsw10_2xntc10k"). 

   "id": "2003",
   "sensors": [
    {
     "date": "20201104",
     "order": [
      "si7021",
      "sensirion_sps30",
      "vsolar"
     ]
    },
    {
     "date": "20220322",
     "order": [
      "si7021",
      "2xpinotechsw10_2xntc10k",
      "sensirion_sps30",
      "vsolar"
     ]
    }
   ],

Om de juiste waarden uit het extra veld te halen zal er 

  1. Per meting bepaald moeten worden welke sensoren er op dat moment aangesloten waren. In veel gevallen is dit eenvoudig en is er vanaf het bouwen van de sensor maar 1 set sensoren aangesloten geweest. 
  2. In het bestand node_metadata.json opgehaald worden hoeveel getallen elke sensor in het extra veld plaatst. Dit is te vinden in het hoofdveld 'sensors' onderaan het bestand. Daar staat per sensor de naam, het type en het aantal waarden in het extra veld. In onderstaand voorbeeld gaat het om de sensor '2xpinotechsw10_2xntc10k' van het type bodemvocht 'soil_moisture'  die 4 waarden heeft in het extra veld
   "name": "2xpinotechsw10_2xntc10k",
   "type": "soil_moisture",
   "fields": {
    "extra": "4"
   },

Om terug te komen op het voorbeeld van sensor 2003, zijn de posities van de bodemvochtmeting te vinden door het aantal waardes van elke sensor op te tellen  De bodemvochtmetingen bevinden zich in dit geval in de eerste 4 posities. 

0 (si7021) + 4 (2xpinotechsw10_2xntc10k)

Voor een andere sensor (2021) worden eerst de fijnstofmetingen verzonden en bevinden de bodemvochtmetingen zich in de posities 10 t/m 14 (of 9-13 rekenend vanaf 0). 

0 (si7021) + 9 (sensirion_sps30) + 4 (2xpinotechsw10_2xntc10k)

Op deze manier zijn er ook in de toekomst andere sensoren aan te sluiten, zonder dat dit problemen geeft in het maken van grafieken of data analyse. 

Afwijkende positie

Het kan voorkomen dat een bodemvochtsensor niet exact op de juiste manier is aangesloten. Bijvoorbeeld als de sensor op 10cm wordt verwisseld met die op 40 cm. Dit kan dan achteraf gecorrigeerd worden. Deze correctie is per node te vinden in het hoofdveld 'nodes' onder het veld formats. Hieronder is een voorbeeld gegeven waar de bodemvochtsensoren zijn verwisseld en de volgorde dus afwijkt van de standaard. 

   "formats": [
    {
     "date": "20220303",
     "sensor": "2xpinotechsw10_2xntc10k",
     "soilM1": "2",
     "soilT1": "1",
     "soilM2": "0",
     "soilT2": "3"
    }

Kalibratie

De waarden die in het extra veld staan komen niet overeen met het % bodemvocht of de temperatuur. Hiervoor moeten zij eerst omgerekend worden. Dit doen we op dit moment met de functies:

Bodemvocht (%) = aX + b
Bodemtemperatuur (Celcius) = cY + d

Waarbij X = de ruwe bodemvocht meting in mV en Y = de ruwe bodemtemperatuur meting. Voor de temperatuursensor zijn deze waarden altijd hetzelfde namelijk c=0,250 en d=-20. Een ruw waarde van 160 is dus gelijk aan 20 graden celcius. Voor de bodemvochtmetingen is zijn de gemiddelde waarden a=0,047 en d=-5.8. Deze kunnen echter nog wel eens afwijken per sensor. Daarom hebben de  deelnemers tijdens de workshop een eerste kalibratie gedaan op de sensoren. Deze kalibratie is per node te vinden in het hoofdveld 'nodes' in node_metadata.json , onder het veld 'calibrations' . Dit veld bevat een lijst met kalibraties met een datum, de sensor die gekalibreerd is er ruwe (raw) en berekende waarden (values). De ruwe waarden zijn hier bewaard om later nog een andere kalibratie formule toe te kunnen passen. Op dit moment worden alleen de waarden a en b gebruikt die onder SoilM1,SoilT1,SoilM2 en SoilT2 staan. 

   "calibrations": [
    {
     "name": "workshop",
     "date": "20220303",
     "sensor": "2xpinotechsw10_2xntc10k",
     "raw": {
      "airtemp": "17,9",
      "humidity": "59,3",
      "soilM1": {
       "air": "17",
       "soil": "812",
       "soilmoisture": "32",
       "soiltype": "sand",
       "soilbase": "89"
      },
      "soilT1": {
       "air": "135",
       "soil": "125"
      },
      "soilM2": {
       "air": "24",
       "soil": "808",
       "soilmoisture": "32",
       "soiltype": "sand",
       "soilbase": "89"
      },
      "soilT2": {
       "air": "131",
       "soil": "122"
      }
     },
     "values": {
      "soilM1": {
       "a": "0,045",
       "bsen": "15,7",
       "b": "-4,7",
       "alpha": "0,0",
       "beta": "0,020",
       "gamma": "0,020"
      },
      "soilT1": {
       "a": "0,25",
       "b": "-20,00"
      },
      "soilM2": {
       "a": "0,046",
       "bsen": "22,7",
       "b": "-5,1",
       "alpha": "0",
       "beta": "0,020",
       "gamma": "0,020"
      },
      "soilT2": {
       "a": "0,25",
       "b": "-20"
      }
     }
    }

Voor deze node wordt het bodemvocht gehalte dus berekend door de formules:

SoilM1 (%) = 0.045 * X - 4.7 
SoilM2 (%) = 0.046 * X - 5.1 

Niet alle bodemvochtsensoren hebben een kalibratie. In dat geval kunnen de standaard waarden gebruikt worden. Die zijn ook per sensor te vinden onder het hoofdveld 'sensors' .