Detta är en beskrivning av hur vi på Johannas Stadsodlingar och Concinnity tillsammans har byggt Johannas Akvaponi Pilotanläggning. Vi vill dela med oss hur vi har gjort och tänkt. Det är ganska mycket att tänka på, så det blir flera inlägg för att täcka det mesta.
Also available in ENGLISH.
- Del 1 – att starta, förkunskaper
- Del 2 – design
- Del 3 – bygglogg
- Del 4 – Vattenkvalitet och näringstester (denna blogpost)
- Del 5 – Produktionsspårning
Cultivation Management Platform
De digitala system vi byggt har grundats på den vision vi satte i början på projektet som vi kallar Cultivation Management Platform (CMP).
CMP kan delas upp i fyra delar:
● Vattenkvalitets- och näringstester (Water quality & nutrient tests)
● Vatten-, luft- och automationssensorer (Water & air sensors)
● Produktionsspårning (Production management)
● Distributed ledger / blockkedja (Blockchain)
I detta avsnitt beskriver vi arbetet med vattenkvalitets och näringstester samt vatten-, luft- och automationssensorer.
En akvaponi är ett ekosystem med många ”rörliga delar” och därför behöver man ha en noggrann och kontinuerlig övervakning av den med hjälp av både manuella och automatiska system. Därtill är det viktigt att vi lär oss så mycket som möjligt om hur akvaponin fungerar, vilka plantor som fungerar bäst att odla, hur lång tid det tar för olika växter att gå från frö till skörd, hur snabb tillväxt fisken har m.m. Vår CMP hjälper oss att nå dessa mål med hjälp av modern teknik och IT i kombination med vår kännedom om växt- och fiskodling.
Vattenkvalitet och näringstester
För att förstå en akvaponi och vara säker på att ”allt står rätt till” behöver man ta regelbundna prover på vattnet och på så vis både kunna upptäcka problem och analysera hur vattenkvaliteten påverkar systemet.
Under uppstarten av systemet, då bakteriekulturen för nitrifikationsprocessen odlas upp, mätte vi en gång om dagen för god kontroll och för att förstå tillväxtprocessen. När akvaponin nu är i drift och har varit det en längre tid behöver vi generellt inte mäta så ofta utan vi mäter de flesta indikatorerna en gång i veckan.
Från början hade vi tänkt använda ett system för datainsamling och analys av vattenkvalitet vi varit med och arbetat på tidigare: Akvo Flow, från Akvo Foundation. Akvo Flow består av: en app för Androidtelefoner för datainsamling med tillhörande webbaserade administrativa- och visualiseringsverktyg och en koppling till fotometriska- och andra vattensensorer som heter Akvo Caddisfly. Efter överväganden valde vi dock att använda andra verktyg. Anledningen var att det fotometriska sensorsystemet som Akvo Caddisfly är integrerat med, Lovibond 610 från Tintometer, använder större volymer reagenskemikalier än vad som var lämpligt att arbeta med på den plats där vi har i pilotanläggningen.
Vi valde istället att använda en kombination av fotometrar och andra sensorer från andra företag. Till skillnad från Akvo Caddisfly har dessa system dålig eller ingen digital integration, så data registreras manuellt i kalkylark under detta projekt. Följande indikatorer mäter vi manuellt:
Indikator | Sensor | Kommentar |
Alkalinitet | eXact iDip, ITS | |
Ammonium | eXact iDip, ITS | |
Fosfat | eXact iDip, ITS; Checker, Hanna Instruments | eXact iDip kan bara användas upp till 3 ppm |
Hårdhet | eXact iDip, ITS | |
Järn | Checker, Hanna Instruments | |
Kalium | Fotometer Potassium, Hanna Instruments | |
Löst syre | Handy Polaris 2, Oxyguard | Portabel referensmätare |
Nitrat | eXact iDip, ITS | |
Nitrit | eXact iDip, ITS | |
pH | pH-Checker, Hanna Instruments | Portabel referensmätare |
Digital bevakning – Vatten-, luft- och automationssensorer
Systemet vi utvecklat för insamling, lagring och presentation av
realtidsdata består av två huvuddelar som vi kallar för Aquasensor och Aquadata för insamling respektive lagring och presentation av data.
Kritiska indikatorer samt indikatorer som är förhållandevis lätta att mäta automatiskt mäts varje minut med vårt sensorsystem. Dessa sensorer är kopplade till Aquasensor som är ett skräddarsytt program skrivet i programmeringsspråket Python. Aquasensor kommunicerar med sensorerna och inhämtar rådata som omvandlas till mätvärden för att sedan, via ett buffertprogram, Grafsy, skicka denna data till lagringsdelen av systemet. Följande är de viktigaste indikatorerna vi mäter:
Indikator | Sensor | Kommentar/enhet |
Elförbrukning | Elmätare med pulsutgång | 1 puls/Wh (1000 pulser/kWh) |
Ljus | TSL2561 | Lux |
Luft, temperatur | Sensirion SCD30 | °C |
Luft, fuktighet | Sensirion SCD30 | % |
Luft, koldioxid | Sensirion SCD30 | ppm |
Sensorhubb, CPU-last | Linux-operativsystemet | |
Sensorhubb, eltillgång | 230-volts relä | på/av |
Sensorhubb, nätverkspaket | Linux-operativsystemet | |
Sensorhubb, SMS signalstyrka | 3G-modem, Huawei E303 | % eller dBm |
Vatten, elektrisk konduktivitet | Sensorex CS150TC | mS/cm |
Vatten, flöde i systemet | XKC-Y25 induktiv detektor | på/av |
Vatten, tillförsel av nytt vatten | Vattenmätare med pulsutgång | 53 pulser/liter |
Vatten, löst syre | Vernier Optical DO | mg/l |
Vatten, nivå | Ultraljudsensor, JSN-SR04T och flottörbrytare i rostfritt | cm |
Vatten, pH | Sensorex pH2000 | |
Vatten, temperatur | Dallas DS18B20 | °C |
Trumfilter, spolning | 230-volts relä | på/av |
Väder, luftfuktighet | USB-ansluten väderstation | % |
Väder, temperatur | USB-ansluten väderstation | °C |
Väder, tryck | USB-ansluten väderstation | hPa |
Lagringsdelen, Aquadata, är i huvudsak en kombination av mjukvarorna Graphite och Grafana.
Graphite är ursprungligen ett verktyg för övervakning av datorer. Det har en databas som är skräddarsydd för lagring av tidsserier och lämpar sig därför väl även för annan tidsorienterad data, såsom sensordata från vår akvaponi.
Grafana är ett verktyg för att visualisera data, med enorm flexibilitet vad gäller möjligheterna att kombinera information till större enheter, “dashboards”. Flera grafer kan på så sätt samsas på en skärm och varje graf kan innehålla flera olika typer av data, kombinerad på ett logiskt sätt.
Grafana dashboard med data från Johannas pilotanläggning.
Implementation – Aquasensor
Aquasensor körs på RaspberryPi-datorer , vi kallar dom “Pajerna” eller sensorhubbarna. För närvarande har vi två stycken som samlar in data från olika delar av odlingen. Varje hel minut samlas data in från sensorerna. Aquasensor använder ett hjälpsystem, Grafsy, för att temporärt lagra den insamlade informationen. I sin tur sänder Grafsy data till lagringssystemet Aquadata. Grafsy försäkrar sig om att all information kommer fram och data från flera timmars mätningar kan hållas lagrad om kommunikationen med Aquadata blir tillfälligt avbruten. En sensorhubb kan också ha en underhubb som är en Arduino-dator med sensorer. Vissa sensorer är enklare att kommunicera med från en Arduino. Eftersom strömavbrott kan förekomma har Pajerna reservström i form av batteripackar. De är av samma typ som man kan använda för att ladda sin mobiltelefon. På så sätt kan Aquasensor fortsätta att övervaka odlingen även om strömmen går. Om reservkraft finns till routern kan Aquasensor fortsätta att sända data även under strömavbrott, om routern inte fungerar buffras informationen i Grafsy tills kommunikation upprättats igen.
Aquasensor uppkopplat till en väderstation (som pratar trådlöst med givare på taket på anläggningen).
Implementation – Aquadata
Aquadata är ett system byggt kring open source-mjukvarorna Graphite och Grafana. Graphite lagrar all information från sensorerna och Grafana presenterar data i grafer som kan samlas i “dashboards”. Med dessa två system som bas har vi byggt en molntjänst som möjliggör lagring av sensordata över internet och åtkomst av informationen samma väg.
Data och tidsserier
Data som samlas in av Aquasensor skickas till Aquadata. Där lagras den i Graphite, en databas som är skräddarsydd för lagring av s.k. tidsserier, d.v.s. data som innehåller en tidsstämpel. När Aquasensor skickar data från en sensor, är det på formen: “namn tidsstämpel data“.
Konfigureringen av lagringen är automatisk, när ett mätvärde kommer in till Aquadata läggs det automatiskt till den namngivna serien. Om namnet inte finns, skapas det i databasen och informationen läggs där som en första post.
Exempel
Från Aquasensor skickas följande data: johannas.husby1.sensor.luft.co2.stickling 2020-12-14T02:16:00+02:00 348
Namnet på mätvärdet, johannas.husby1.sensor.luft.co2.stickling, innehåller en mängd information som preciserar vilken data det handlar om. Namnet är är uppbyggt av delnamn i en hierarkisk struktur. Till att börja med två delnamn för anläggningen vi skickar data ifrån, johannas.husby1 . Sedan följer vilken typ av data det är, sensor.luft.co2 , dvs. koldioxid, och till sist namnet, stickling , på den sensor som mätvärdet kommer ifrån, i det här fallet sensorn i sticklingrummet. Med denna automatik kan man bygga upp logiska strukturer för sin data. När sedan informationen ska presenteras i grafer är det enkelt att med hjälp av de hierarkiska namnen hitta rätt information.
Nästa data-del är tidsstämpeln, 2020-12-14T02:16:00+02:00. De flesta mätningarna görs varje hel minut, med undantag för EC (konduktivitet; mäts genom att köra en svag ström genom vattnet) som görs på halvminuten för att inte interferera med pH som lätt påverkas av det.
Den sista delen i mätningen är mätvärdet, själva datan, 348. Enheten anges när man skapar visualiseringarna, den är inte en del av värdet, men är i de flesta fall uppenbar. I fallet med koldioxidhalt är det ppm, parts per million.
Grafer och dashboards
Den insamlade datan presenteras av Grafana, en open-source programvara för visualisering av data. Med Grafana har vi byggt “dashboards”, informationspaneler där vi samlar information som “passar ihop”. För närvarande har vi tre huvudsakliga paneler, Vatten, Odlingsrum och “Tech infra”, teknisk infrastruktur. Vatten- panelen visar värdena för temperatur, syrehalt, pH och elektrisk konduktivitet. På Tech infra har vi mera “fysiska” mätvärden såsom elförbrukning (och att vi har el alls!), systemets vattennivå (för att kunna larma om vi får ett större läckage) och övervakning av trumfiltret vars aktivitet indirekt är en indikation på att systemet “mår bra”. Panelen Odlingsrum visar bl.a. luftförhållandena i sticklingrummet, såsom temperatur, luftfuktighet och koldioxidhalt.
Grafana dashboards visualiserat på TV skärmar i pilotanläggningen.
Larm
Aquasensor och Aquadata har två integrerade larmsystem. Ett SMS-baserat larm som skickar ett SMS till en lista av telefonnummer vid ett larmtillstånd. Det andra systemet är en integration med molntjänsten PagerDuty, som kan konfigureras att skicka larm via: epost, SMS och telefonsamtal.
Digital säkerhet
Vårt övervakningssystem är uttryckligen inte till för att styra akvaponin. Vi är av den bestämda åsikten att det i framtiden så kommer det vara mycket svårt att skydda sig från externa aktörer som vill störa och/eller förstöra våra datasystem, eller utöva digital utpressning genom att till exempel bryta sig in i vårt system, kryptera datadiskarna och begära pengar för att låsa upp data igen. I system som driver kritisk infrastruktur, som vår fiskuppfödning, så ska detta inte vara möjligt och våra styrsystem är air-gapped, d.v.s har ingen digital åtkomst från internet eller andra externa nätverk. Det innebär att dataflödet i våra bevakningssystem endast går i en riktning: från sensorerna till den lokala dataservern och vidare till molntjänsten.
I nästa inlägg så tittar vi närmare på nästa del av det digitala systemet: Produktionsspårning.
Texten i detta inlägg är licensierad under Creative Commons BY-NC-SA International.