element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • About Us
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Just Encase
  • Challenges & Projects
  • Design Challenges
  • Just Encase
  • More
  • Cancel
Just Encase
Blog Blog 11 - The launch! Floaty Mc Test Face (updated)
  • Blog
  • Forum
  • Documents
  • Events
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Just Encase to participate - click to join for free!
  • Share
  • More
  • Cancel
Group Actions
  • Group RSS
  • More
  • Cancel
Engagement
  • Author Author: christophesky
  • Date Created: 21 Feb 2022 8:12 PM Date Created
  • Views 1627 views
  • Likes 16 likes
  • Comments 5 comments
  • the final countdown
  • Hammond Manufacturing Enclosures
  • just encase design challenge
  • garden pond monitor
  • Floaty Mc Test Face
Related
Recommended

Blog 11 - The launch! Floaty Mc Test Face (updated)

christophesky
christophesky
21 Feb 2022
Blog 11 - The launch! Floaty Mc Test Face (updated)

The blog so far:

Links should open new tabs / windows

Sections 1-4. Initial thoughts, requirements,excitement and unboxing.

  • Blog 1 - The what and why (Garden pond monitoring Background and Introductions)
  • Blog 2 - My Method or WWHW (What, Why, How, When)
  • Blog 3 - excited as its on the way
  • Blog 4 - Arrivals, Unboxing, Github and requirements

Sections 5 -10, design build, code and test, so much testing

  • Blog 5 - Getting started with the MKR 1300 (and LoRa Sender Starting LoRa failed!)
  • Blog 6 - The Soak Test UPDATE 2 (Test 3 - sump pump and soak)
  • Blog 7 - Sensors, connections and starting some code - draft / wip
  • Blog 8 - Measure, send, receive, transform, store, display (updated with code)
  • Blog 9 - Bringing the hardware all together - Part 1 (updated)
  • Blog 10 - Bringing the hardware all together Part 2 (updated)

Sections 11-12+ the launch, final code, final build instructions and ce fin!

  • Blog 11 - The launch! Floaty Mc Test Face (this blog).
  • Blog 12 - Wrap up, conclusions, and appendicies.

Table of Contents

  • The blog so far:
  • Introduction
  • Floaty McTest Face
  • But does it work?
  • But does it float? Continued
  • Block Diagram
  • Schematics
  • Arduino Code - Outstation
  • Arduino Code - Instation
  • Node Red Code
  • Grafana Dashboard Code
  • In Station Positioning

Introduction

So a thing happened, well actually a few things. The UK since last thursday has had storm upon storm, this has brought plenty of wind, rain, sleet, flying trampolines, wheelie bins and many fences down. Spotting a window of opportunity to safely go ahead and put my baby outside (that has been lovingly cared for as its has been developed on my desk) would be a great chance to really kick the tyres in extreme (relative to the UK) conditions.

image

One very empty side desk pull out.

So far we have had storm:

  • Arwen
  • Barra
  • Corrie
  • Dudley
  • Eunice
  • Franklin

With Franklin now easing off. Windest day was on Friday night / saturday evening with some 80+mph winds and rain from every direction! The good news, Floaty McTest Face is still reporting in!

Floaty McTest Face

image

Front view: Floating test platform, with sensor rig now attached. Turbidity Probe, 2No temp probes. Top right, light meter and BME280

image

Rear view: Floating test platform, with sensor rig now attached.pH probe and TDS probe

image

Stand offs installed and now to tidy route wiring - note, not a rats tail nest in sight!

image

Turbidity Sensor and its lack lustre connector put aside, replaced the on PCB connector with a tiny 2.54mm pitch screw connector and used alarm cable.

image

The inside of the turbidity sensor before heat sealed tubes and mastic to waterproof it all.

image

The final overnight soak test before packaging it all up into the incredible hammond enclosure for safe keeping and weather proof aquatic adventures.

image

Remembering to change the loop delay from 1 second to 30 seconds BEFORE I seal her up. (honest)

image

Everything nicely packaged inside, 6mm clearance to spare.

Top layer comprises of (left to right):

  • Turbidity sensor interface board - connects to probe (top) and to MKR 1300 connector shield (bottom)
  • TDS sensor interface board - connects to probe (top) and to MKR 1300 connector shield (bottom)
  • Enclosure temp / humidity monitor - connects to MKR 1300 connector shield (bottom)
  • BME280 breakout board (mine) connects to probe (top) and to MKR 1300 connector shield (bottom)
  • Temp probes uppper and lower - connects to probe (top) and to MKR 1300 connector shield (bottom)*1

*1 as the temp probes continued to give me trouble, i ended up breaking them out onto two seperate one wire buses. If i can avoid in future I am likely to go one wire free :) this experience has put me off.

image

Bottom later comprises of (left to right again)

  • Arduino MKR1300 mounted on Arduino Connector Carrier board
  • Top right - pH prove sensor breakout connects to probe (top) and to MKR 1300 connector shield (bottom)
  • Bottom right - step down power - 12v - 5.5v.

FInally, what you canonot see in the picture is a bonus in enclosure sensor for ambient light. With the case closed I get a read of 515 abritary light units and this stays constant, any change to this will give me an alert via the dashboard (whcih we will get onto)

image

The makings of a radiation shield, complete with ... ambient light level meter of I am going to smash all the bits on your I2C interface, good luck that with sensor.

image

All assembled, mid way, one weather proofed BME280 for temp, pressure and humidity and then the ambient light sensor at the very top. The radiation shield, also known as a Stevenson screen <--link for the curious (i learnt)

image

Test equipment holder! 40mm pipe, with insulation foam inner to which the sensor is either secured (As above) or sits in the middle of, as with the pH probe. Each holder is topped off with a 3d printed snug fitting lid and wire router.

Each test equipment holder allows for the up/down adjustment of the sensor relative to the water level ... (important for floaty mc test face) as how she will sit in the pond was an unknown ...

But does it work?

As they say, the proof is in the pudding, well this pudding looks good to me! Have a look and then I will describe what you see below, below Slight smile

image

image

Enclosure Monitoring

  • Temp
  • Humidity
  • Light level

all inside the enclosure, so to ensure, not too hot, not too cold, not to humid and no sudden changes in light level - the goldilocks zone if you will for the Hammond Enclosure Slight smile

Pond Monitoring (above water)

  • Air humidity
  • Air temp
  • RSSI
  • Air pressure
  • Light levels

Pond Monitoring - the water

  • Water pH
  • Total disolved solids
  • Water temp at 10cm and 30cm
  • Turbidity

But does it float? Continued

image

Yes! Floaty Mc Test Face floats. A lift from the pond to check for any water ingress (a gentle shake and listen to internal water noise for the floating platform) - none.

Now if I had thought about including a surface skimmer for all that duck week (cries silently) this would be the ultimate project.

Block Diagram

Outstation (top) logical block diagram showing the consituent components, reasonably high level like any good block diagram should be (any questions please let me know)

Instation (bottom)

image

Schematics

image

Arduino Code - Outstation

//Credits and Acknowledgements
//https://wiki.dfrobot.com/PH_meter_SKU__SEN0161_ - modified sample Arduino code for the ph meter (temp correction)
//https://wiki.dfrobot.com/Gravity__Analog_TDS_Sensor___Meter_For_Arduino_SKU__SEN0244 - modified TDS meter code (temp correction)
//https://wiki.dfrobot.com/Turbidity_sensor_SKU__SEN0189 - modfied sample Arduino code for the turbidity sensor (temp correction)

//Libraries

#include <SPI.h>
#include <LoRa.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include "DHT.h"
#include <DHT_U.h>
#include <math.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <DFRobot_B_LUX_V30B.h>

//Constants

//LUX meter
DFRobot_B_LUX_V30B    myLux(13,5,6);

//pH Sensor
#define pHSensorPin 0 
#define VREF 5.0
#define SCOUNT 30

//Turbidity Sensor
#define TurbSensorPin A1

//TDS Sensor
#define TdsSensorPin 3

//DHT22 pin and object name
DHT dht(2, DHT22);    // Initialize DHT 
//#define DHTPIN 2
//#define DHTTYPE    DHT22     // DHT 22 (AM2302)

//Variables

int counter = 0;

// one wire
// Setup a oneWire instance to communicate with any OneWire device
OneWire oneWireA (0);
OneWire oneWireB (1);
// Pass oneWire reference to DallasTemperature library
DallasTemperature sensorsA(&oneWireA);
DallasTemperature sensorsB(&oneWireB);

int deviceCount = 0;
float tempCu;
float tempCl;

//TDS Meter
int analogBuffer[SCOUNT];    // store the analog value in the array, read from ADC
int analogBufferTemp[SCOUNT];
int analogBufferIndex = 0,copyIndex = 0;
float averageVoltage = 0,tdsValue = 0,temperature = tempCl;

//pH sensor
unsigned long int avgValue;  //Store the average value of the sensor feedback
float phValue=(((phValue=(float)avgValue*5.0/1024/6)*3.5));
float b;
int buf[10],temp;

//BME280
Adafruit_BME280 bme;

//dht22 
int chk;
float enc_humidity;  //Stores humidity value
float enc_temp; //Stores temperature value

//lightiness (open enclosure)
float lightsensor; //Resistance of grove light sensor (v1.2) in K

//turbidity
int sensorValue = analogRead(TurbSensorPin);
float turbidity = sensorValue * (5.0 / 1024.0);

///////////////////////////////////ends/////////////////////////////////

void setup() {
  
  Serial.begin(9600);
  sensorsA.begin();
  sensorsB.begin();
  dht.begin();
  myLux.begin();  
  
  if (!bme.begin(0x76)) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    while (1);
  }
  
  LoRa.begin(868E6);
}

void loop() {
  int sensorValue = analogRead(TurbSensorPin);
  float turbidity = sensorValue * (5.0 / 1024.0);
  
  sensorsA.requestTemperatures();
  sensorsB.requestTemperatures();
  //gettemp();
  gettds();
  getph();
  getlight();
  
  Serial.print(bme.readTemperature());
  Serial.print(",");
  Serial.print(bme.readPressure() / 100.0F);
  Serial.print(",");
  Serial.print(bme.readHumidity());
  Serial.print(",");
  Serial.print(tdsValue);
  Serial.print(",");
  Serial.print(phValue);
  Serial.print(",");
  Serial.print(dht.readHumidity());
  Serial.print(",");
  Serial.print(dht.readTemperature());
  Serial.print(",");
  Serial.print(lightsensor,DEC);
  Serial.print(",");
  Serial.print(sensorsA.getTempCByIndex(0));
  Serial.print(",");
  Serial.print(sensorsB.getTempCByIndex(0));
  Serial.print(",");
  Serial.print(turbidity);
  Serial.print(",");
  Serial.print(myLux.lightStrengthLux());
  Serial.print(",");
  Serial.print("Sending packet: ");
  Serial.println(counter);
  LoRa.beginPacket();
  LoRa.print(bme.readTemperature());
  LoRa.print(",");
  LoRa.print(bme.readPressure() / 100.0F);
  LoRa.print(",");
  LoRa.print(bme.readHumidity());
  LoRa.print(",");
  LoRa.print(tdsValue);
  LoRa.print(",");
  LoRa.print(phValue);
  LoRa.print(",");
  LoRa.print(dht.readHumidity());
  LoRa.print(",");
  LoRa.print(dht.readTemperature());
  LoRa.print(",");
  LoRa.print(lightsensor,DEC);
  LoRa.print(",");
  LoRa.print(sensorsA.getTempCByIndex(0));
  LoRa.print(",");
  LoRa.print(sensorsB.getTempCByIndex(0));
  LoRa.print(",");
  LoRa.print(turbidity);
  LoRa.print(",");
  LoRa.print(myLux.lightStrengthLux());
  LoRa.print(","); //included at end of main data string as RSSI is added last
  LoRa.endPacket();

  counter++;
  delay(30000);
}

/////////////////////////////////////////////////
////////Function things TDS, pH, Light///////////
/////////////////////////////////////////////////


void gettemp()
{ 
  // Send command to all the sensors for temperature conversion
  sensorsA.requestTemperatures();
  sensorsB.requestTemperatures(); 
  tempCl = sensorsA.getTempCByIndex(0);
  tempCu = sensorsB.getTempCByIndex(0);
}

void gettds()
{
   static unsigned long analogSampleTimepoint = millis();
   if(millis()-analogSampleTimepoint > 40U)     //every 40 milliseconds,read the analog value from the ADC
   {
     analogSampleTimepoint = millis();
     analogBuffer[analogBufferIndex] = analogRead(TdsSensorPin);    //read the analog value and store into the buffer
     analogBufferIndex++;
     if(analogBufferIndex == SCOUNT) 
         analogBufferIndex = 0;
   }   
   static unsigned long printTimepoint = millis();
   if(millis()-printTimepoint > 800U)
   {
      printTimepoint = millis();
      for(copyIndex=0;copyIndex<SCOUNT;copyIndex++)
        analogBufferTemp[copyIndex]= analogBuffer[copyIndex];
      averageVoltage = getMedianNum(analogBufferTemp,SCOUNT) * (float)VREF / 1024.0; // read the analog value more stable by the median filtering algorithm, and convert to voltage value
      float compensationCoefficient=1.0+0.02*(temperature-25.0);    //temperature compensation formula: fFinalResult(25^C) = fFinalResult(current)/(1.0+0.02*(fTP-25.0));
      float compensationVolatge=averageVoltage/compensationCoefficient;  //temperature compensation
      tdsValue=(133.42*compensationVolatge*compensationVolatge*compensationVolatge - 255.86*compensationVolatge*compensationVolatge + 857.39*compensationVolatge)*0.5; //convert voltage value to tds value
   }
}
int getMedianNum(int bArray[], int iFilterLen) 
{
      int bTab[iFilterLen];
      for (byte i = 0; i<iFilterLen; i++)
      bTab[i] = bArray[i];
      int i, j, bTemp;
      for (j = 0; j < iFilterLen - 1; j++) 
      {
      for (i = 0; i < iFilterLen - j - 1; i++) 
          {
        if (bTab[i] > bTab[i + 1]) 
            {
        bTemp = bTab[i];
            bTab[i] = bTab[i + 1];
        bTab[i + 1] = bTemp;
         }
      }
      }
      if ((iFilterLen & 1) > 0)
    bTemp = bTab[(iFilterLen - 1) / 2];
      else
    bTemp = (bTab[iFilterLen / 2] + bTab[iFilterLen / 2 - 1]) / 2;
      return bTemp;
}

void getph()
{
  for(int i=0;i<10;i++)       //Get 10 sample value from the sensor for smooth the value
  { 
    buf[i]=analogRead(pHSensorPin);
    delay(10);
  }
  for(int i=0;i<9;i++)        //sort the analog from small to large
  {
    for(int j=i+1;j<10;j++)
    {
      if(buf[i]>buf[j])
      {
        temp=buf[i];
        buf[i]=buf[j];
        buf[j]=temp;
      }
    }
  }
  avgValue=0;
  for(int i=2;i<8;i++)                      //take the average value of 6 center sample
    avgValue+=buf[i];
  float phValue1=(float)avgValue*5.0/1024/6; //convert the analog into millivolt
  phValue=3.5*phValue1;                      //convert the millivolt into pH value 
}

void getlight()  {
  int sensorValue = analogRead(4); 
  lightsensor=(float)(1023-sensorValue)*10/sensorValue;
}

Arduino Code - Instation

#include <SPI.h>
#include <LoRa.h>

void setup() {
  Serial.begin(9600);
  while (!Serial);

  Serial.println("LoRa Receiver");

  if (!LoRa.begin(868E6)) {
    Serial.println("Starting LoRa failed!");
    while (1);
  }
}

void loop() {
  // try to parse packet
  int packetSize = LoRa.parsePacket();
  if (packetSize) {
    // received a packet
    Serial.print("RSSI:");

    // read packet
    while (LoRa.available()) {
      Serial.print((char)LoRa.read());
    }

    // print RSSI of packet
    // Serial.print("' with RSSI ");
    Serial.println(LoRa.packetRssi());
  }
}

Node Red Code

[
    {
        "id": "9a63abc8bf548d52",
        "type": "tab",
        "label": "BME280 end to end",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "9a432e9a0a0a43e1",
        "type": "serial in",
        "z": "9a63abc8bf548d52",
        "name": "LoRA Reciever Bridge to Pi",
        "serial": "52e690c089097413",
        "x": 160,
        "y": 180,
        "wires": [
            [
                "eec124d3bdf3987b",
                "5f9753b43272a6eb"
            ]
        ]
    },
    {
        "id": "eec124d3bdf3987b",
        "type": "debug",
        "z": "9a63abc8bf548d52",
        "name": "Debugging received packets",
        "active": true,
        "tosidebar": true,
        "console": true,
        "tostatus": true,
        "complete": "true",
        "targetType": "full",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 530,
        "y": 300,
        "wires": []
    },
    {
        "id": "c0f2fc11b1525619",
        "type": "influxdb out",
        "z": "9a63abc8bf548d52",
        "influxdb": "b25ff12e164a2d6b",
        "name": "Pressure Write to Pi Influx",
        "measurement": "pressure",
        "precision": "",
        "retentionPolicy": "",
        "database": "pond",
        "precisionV18FluxV20": "s",
        "retentionPolicyV18Flux": "",
        "org": "organisation",
        "bucket": "bucket",
        "x": 1110,
        "y": 220,
        "wires": []
    },
    {
        "id": "57bf657a5a85445a",
        "type": "influxdb out",
        "z": "9a63abc8bf548d52",
        "influxdb": "b25ff12e164a2d6b",
        "name": "TEMP Write to Pi Influx",
        "measurement": "temp",
        "precision": "",
        "retentionPolicy": "",
        "database": "pond",
        "precisionV18FluxV20": "s",
        "retentionPolicyV18Flux": "",
        "org": "organisation",
        "bucket": "bucket",
        "x": 1100,
        "y": 180,
        "wires": []
    },
    {
        "id": "5f9753b43272a6eb",
        "type": "csv",
        "z": "9a63abc8bf548d52",
        "name": "",
        "sep": ",",
        "hdrin": "",
        "hdrout": "none",
        "multi": "one",
        "ret": "\\n",
        "temp": "temp,pressure,humidity,tds,ph,ehumid,etemp,light,temp1,temp2,turbid,LUX,RSSI",
        "skip": "0",
        "strings": true,
        "include_empty_strings": "",
        "include_null_values": "",
        "x": 450,
        "y": 180,
        "wires": [
            [
                "6c5bd3e935834bd2"
            ]
        ]
    },
    {
        "id": "6c5bd3e935834bd2",
        "type": "split",
        "z": "9a63abc8bf548d52",
        "name": "",
        "splt": "\\n",
        "spltType": "str",
        "arraySplt": 1,
        "arraySpltType": "len",
        "stream": false,
        "addname": "topic",
        "x": 610,
        "y": 180,
        "wires": [
            [
                "976274677e8b515f"
            ]
        ]
    },
    {
        "id": "976274677e8b515f",
        "type": "switch",
        "z": "9a63abc8bf548d52",
        "name": "",
        "property": "topic",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "temp",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "pressure",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "humidity",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "tds",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "ph",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "ehumid",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "etemp",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "light",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "temp1",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "temp2",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "turbid",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "LUX",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "RSSI",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 13,
        "x": 790,
        "y": 180,
        "wires": [
            [
                "57bf657a5a85445a",
                "6316852894b77a0d"
            ],
            [
                "c0f2fc11b1525619",
                "6316852894b77a0d"
            ],
            [
                "b523ceb37f789015",
                "6316852894b77a0d"
            ],
            [
                "0edbd3eca27c989d",
                "6316852894b77a0d"
            ],
            [
                "9f820cd854dc0a34",
                "6316852894b77a0d"
            ],
            [
                "6316852894b77a0d",
                "754a152b58450677"
            ],
            [
                "6316852894b77a0d",
                "0cac3dc02c126594"
            ],
            [
                "c80d4374754128ae"
            ],
            [
                "cb264322d07f71b6",
                "6316852894b77a0d"
            ],
            [
                "29665da285c1bc43",
                "6316852894b77a0d"
            ],
            [
                "20de70c655b02bf1",
                "6316852894b77a0d"
            ],
            [
                "e9edf94e4659a5fc"
            ],
            [
                "6316852894b77a0d",
                "76cfa3e059b264d4"
            ]
        ]
    },
    {
        "id": "b523ceb37f789015",
        "type": "influxdb out",
        "z": "9a63abc8bf548d52",
        "influxdb": "b25ff12e164a2d6b",
        "name": "humid Write to Pi Influx",
        "measurement": "humidity",
        "precision": "",
        "retentionPolicy": "",
        "database": "pond",
        "precisionV18FluxV20": "s",
        "retentionPolicyV18Flux": "",
        "org": "organisation",
        "bucket": "bucket",
        "x": 1100,
        "y": 260,
        "wires": []
    },
    {
        "id": "0edbd3eca27c989d",
        "type": "influxdb out",
        "z": "9a63abc8bf548d52",
        "influxdb": "b25ff12e164a2d6b",
        "name": "tds Write to Pi Influx",
        "measurement": "tds",
        "precision": "",
        "retentionPolicy": "",
        "database": "pond",
        "precisionV18FluxV20": "s",
        "retentionPolicyV18Flux": "",
        "org": "organisation",
        "bucket": "bucket",
        "x": 1100,
        "y": 300,
        "wires": []
    },
    {
        "id": "9f820cd854dc0a34",
        "type": "influxdb out",
        "z": "9a63abc8bf548d52",
        "influxdb": "b25ff12e164a2d6b",
        "name": "ph Write to Pi Influx",
        "measurement": "ph",
        "precision": "",
        "retentionPolicy": "",
        "database": "pond",
        "precisionV18FluxV20": "s",
        "retentionPolicyV18Flux": "",
        "org": "organisation",
        "bucket": "bucket",
        "x": 1090,
        "y": 340,
        "wires": []
    },
    {
        "id": "76cfa3e059b264d4",
        "type": "influxdb out",
        "z": "9a63abc8bf548d52",
        "influxdb": "b25ff12e164a2d6b",
        "name": "rssi Write to Pi Influx",
        "measurement": "rssi",
        "precision": "",
        "retentionPolicy": "",
        "database": "pond",
        "precisionV18FluxV20": "s",
        "retentionPolicyV18Flux": "",
        "org": "organisation",
        "bucket": "bucket",
        "x": 1100,
        "y": 660,
        "wires": []
    },
    {
        "id": "6316852894b77a0d",
        "type": "debug",
        "z": "9a63abc8bf548d52",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 1130,
        "y": 20,
        "wires": []
    },
    {
        "id": "754a152b58450677",
        "type": "influxdb out",
        "z": "9a63abc8bf548d52",
        "influxdb": "b25ff12e164a2d6b",
        "name": "enc_humid Write to Pi Influx",
        "measurement": "ehumid",
        "precision": "",
        "retentionPolicy": "",
        "database": "pond",
        "precisionV18FluxV20": "s",
        "retentionPolicyV18Flux": "",
        "org": "organisation",
        "bucket": "bucket",
        "x": 1120,
        "y": 380,
        "wires": []
    },
    {
        "id": "0cac3dc02c126594",
        "type": "influxdb out",
        "z": "9a63abc8bf548d52",
        "influxdb": "b25ff12e164a2d6b",
        "name": "enc_temp Write to Pi Influx",
        "measurement": "etemp",
        "precision": "",
        "retentionPolicy": "",
        "database": "pond",
        "precisionV18FluxV20": "s",
        "retentionPolicyV18Flux": "",
        "org": "organisation",
        "bucket": "bucket",
        "x": 1120,
        "y": 420,
        "wires": []
    },
    {
        "id": "c80d4374754128ae",
        "type": "influxdb out",
        "z": "9a63abc8bf548d52",
        "influxdb": "b25ff12e164a2d6b",
        "name": "enc_light Write to Pi Influx",
        "measurement": "light",
        "precision": "",
        "retentionPolicy": "",
        "database": "pond",
        "precisionV18FluxV20": "s",
        "retentionPolicyV18Flux": "",
        "org": "organisation",
        "bucket": "bucket",
        "x": 1110,
        "y": 460,
        "wires": []
    },
    {
        "id": "cb264322d07f71b6",
        "type": "influxdb out",
        "z": "9a63abc8bf548d52",
        "influxdb": "b25ff12e164a2d6b",
        "name": "h20_temp1 Write to Pi Influx",
        "measurement": "temp1",
        "precision": "",
        "retentionPolicy": "",
        "database": "pond",
        "precisionV18FluxV20": "s",
        "retentionPolicyV18Flux": "",
        "org": "organisation",
        "bucket": "bucket",
        "x": 1120,
        "y": 500,
        "wires": []
    },
    {
        "id": "29665da285c1bc43",
        "type": "influxdb out",
        "z": "9a63abc8bf548d52",
        "influxdb": "b25ff12e164a2d6b",
        "name": "h20_temp2 Write to Pi Influx",
        "measurement": "temp2",
        "precision": "",
        "retentionPolicy": "",
        "database": "pond",
        "precisionV18FluxV20": "s",
        "retentionPolicyV18Flux": "",
        "org": "organisation",
        "bucket": "bucket",
        "x": 1120,
        "y": 540,
        "wires": []
    },
    {
        "id": "20de70c655b02bf1",
        "type": "influxdb out",
        "z": "9a63abc8bf548d52",
        "influxdb": "b25ff12e164a2d6b",
        "name": "turbid Write to Pi Influx",
        "measurement": "turbid",
        "precision": "",
        "retentionPolicy": "",
        "database": "pond",
        "precisionV18FluxV20": "s",
        "retentionPolicyV18Flux": "",
        "org": "organisation",
        "bucket": "bucket",
        "x": 1100,
        "y": 580,
        "wires": []
    },
    {
        "id": "e9edf94e4659a5fc",
        "type": "influxdb out",
        "z": "9a63abc8bf548d52",
        "influxdb": "b25ff12e164a2d6b",
        "name": "LUX Write to Pi Influx",
        "measurement": "LUX",
        "precision": "",
        "retentionPolicy": "",
        "database": "pond",
        "precisionV18FluxV20": "s",
        "retentionPolicyV18Flux": "",
        "org": "organisation",
        "bucket": "bucket",
        "x": 1100,
        "y": 620,
        "wires": []
    },
    {
        "id": "52e690c089097413",
        "type": "serial-port",
        "serialport": "/dev/ttyACM0",
        "serialbaud": "9600",
        "databits": "8",
        "parity": "none",
        "stopbits": "1",
        "waitfor": "",
        "dtr": "none",
        "rts": "none",
        "cts": "none",
        "dsr": "none",
        "newline": "\\n",
        "bin": "false",
        "out": "char",
        "addchar": "",
        "responsetimeout": "10000"
    },
    {
        "id": "b25ff12e164a2d6b",
        "type": "influxdb",
        "hostname": "127.0.0.1",
        "port": "8086",
        "protocol": "http",
        "database": "pond",
        "name": "pond-test",
        "usetls": false,
        "tls": "",
        "influxdbVersion": "1.8-flux",
        "url": "http://localhost:8086",
        "rejectUnauthorized": true
    }
]

Grafana Dashboard Code

{
  "annotations": {
    "list": [
      {
        "builtIn": 1,
        "datasource": "-- Grafana --",
        "enable": true,
        "hide": true,
        "iconColor": "rgba(0, 211, 255, 1)",
        "name": "Annotations & Alerts",
        "target": {
          "limit": 100,
          "matchAny": false,
          "tags": [],
          "type": "dashboard"
        },
        "type": "dashboard"
      }
    ]
  },
  "editable": true,
  "fiscalYearStartMonth": 0,
  "graphTooltip": 0,
  "id": 1,
  "links": [],
  "liveNow": false,
  "panels": [
    {
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "thresholds"
          },
          "mappings": [],
          "thresholds": {
            "mode": "percentage",
            "steps": [
              {
                "color": "green",
                "value": null
              },
              {
                "color": "#EAB839",
                "value": 60
              },
              {
                "color": "red",
                "value": 90
              }
            ]
          },
          "unit": "humidity"
        },
        "overrides": []
      },
      "gridPos": {
        "h": 4,
        "w": 3,
        "x": 0,
        "y": 0
      },
      "id": 12,
      "options": {
        "orientation": "auto",
        "reduceOptions": {
          "calcs": [
            "lastNotNull"
          ],
          "fields": "",
          "values": false
        },
        "showThresholdLabels": false,
        "showThresholdMarkers": true
      },
      "pluginVersion": "8.3.6",
      "targets": [
        {
          "datasource": {
            "type": "influxdb",
            "uid": "de9vqN07k"
          },
          "groupBy": [
            {
              "params": [
                "$__interval"
              ],
              "type": "time"
            },
            {
              "params": [
                "null"
              ],
              "type": "fill"
            }
          ],
          "measurement": "ehumid",
          "orderByTime": "ASC",
          "policy": "default",
          "refId": "A",
          "resultFormat": "time_series",
          "select": [
            [
              {
                "params": [
                  "value"
                ],
                "type": "field"
              },
              {
                "params": [],
                "type": "mean"
              }
            ]
          ],
          "tags": []
        }
      ],
      "title": "Enclosure Humidity",
      "type": "gauge"
    },
    {
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "continuous-RdYlGr"
          },
          "mappings": [],
          "thresholds": {
            "mode": "percentage",
            "steps": [
              {
                "color": "green",
                "value": null
              },
              {
                "color": "red",
                "value": 30
              },
              {
                "color": "#EAB839",
                "value": 80
              }
            ]
          },
          "unit": "celsius"
        },
        "overrides": []
      },
      "gridPos": {
        "h": 4,
        "w": 3,
        "x": 3,
        "y": 0
      },
      "id": 10,
      "options": {
        "orientation": "auto",
        "reduceOptions": {
          "calcs": [
            "lastNotNull"
          ],
          "fields": "",
          "values": false
        },
        "showThresholdLabels": false,
        "showThresholdMarkers": true
      },
      "pluginVersion": "8.3.6",
      "targets": [
        {
          "datasource": {
            "type": "influxdb",
            "uid": "de9vqN07k"
          },
          "groupBy": [
            {
              "params": [
                "$__interval"
              ],
              "type": "time"
            },
            {
              "params": [
                "null"
              ],
              "type": "fill"
            }
          ],
          "measurement": "etemp",
          "orderByTime": "ASC",
          "policy": "default",
          "refId": "A",
          "resultFormat": "time_series",
          "select": [
            [
              {
                "params": [
                  "value"
                ],
                "type": "field"
              },
              {
                "params": [],
                "type": "mean"
              }
            ]
          ],
          "tags": []
        }
      ],
      "title": "Enclosure Temp (C)",
      "type": "gauge"
    },
    {
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "thresholds"
          },
          "mappings": [
            {
              "options": {
                "> 500": {
                  "color": "green",
                  "index": 0,
                  "text": "Enclosure OK"
                }
              },
              "type": "value"
            },
            {
              "options": {
                "from": 0,
                "result": {
                  "color": "red",
                  "index": 1,
                  "text": "Enc probably open"
                },
                "to": 50
              },
              "type": "range"
            },
            {
              "options": {
                "match": "null",
                "result": {
                  "color": "orange",
                  "index": 2,
                  "text": "Sensor Error"
                }
              },
              "type": "special"
            }
          ],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "red",
                "value": null
              },
              {
                "color": "green",
                "value": 500
              }
            ]
          },
          "unit": "lux"
        },
        "overrides": []
      },
      "gridPos": {
        "h": 4,
        "w": 6,
        "x": 6,
        "y": 0
      },
      "id": 14,
      "options": {
        "colorMode": "value",
        "graphMode": "area",
        "justifyMode": "center",
        "orientation": "horizontal",
        "reduceOptions": {
          "calcs": [
            "lastNotNull"
          ],
          "fields": "/^light\\.mean$/",
          "values": false
        },
        "text": {},
        "textMode": "value"
      },
      "pluginVersion": "8.3.6",
      "targets": [
        {
          "datasource": {
            "type": "influxdb",
            "uid": "de9vqN07k"
          },
          "groupBy": [
            {
              "params": [
                "1m"
              ],
              "type": "time"
            },
            {
              "params": [
                "null"
              ],
              "type": "fill"
            }
          ],
          "measurement": "light",
          "orderByTime": "ASC",
          "policy": "default",
          "refId": "A",
          "resultFormat": "time_series",
          "select": [
            [
              {
                "params": [
                  "value"
                ],
                "type": "field"
              },
              {
                "params": [],
                "type": "mean"
              }
            ]
          ],
          "tags": []
        }
      ],
      "title": "Enclosure Integrity",
      "type": "stat"
    },
    {
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "continuous-BlYlRd"
          },
          "custom": {
            "axisLabel": "",
            "axisPlacement": "auto",
            "barAlignment": 0,
            "drawStyle": "line",
            "fillOpacity": 77,
            "gradientMode": "hue",
            "hideFrom": {
              "legend": false,
              "tooltip": false,
              "viz": false
            },
            "lineInterpolation": "smooth",
            "lineWidth": 2,
            "pointSize": 5,
            "scaleDistribution": {
              "type": "linear"
            },
            "showPoints": "auto",
            "spanNulls": false,
            "stacking": {
              "group": "A",
              "mode": "none"
            },
            "thresholdsStyle": {
              "mode": "off"
            }
          },
          "mappings": [],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "green",
                "value": null
              },
              {
                "color": "red",
                "value": 80
              }
            ]
          },
          "unit": "ph"
        },
        "overrides": []
      },
      "gridPos": {
        "h": 8,
        "w": 6,
        "x": 12,
        "y": 0
      },
      "id": 18,
      "options": {
        "legend": {
          "calcs": [],
          "displayMode": "hidden",
          "placement": "bottom"
        },
        "tooltip": {
          "mode": "single"
        }
      },
      "targets": [
        {
          "datasource": {
            "type": "influxdb",
            "uid": "de9vqN07k"
          },
          "groupBy": [
            {
              "params": [
                "1m"
              ],
              "type": "time"
            },
            {
              "params": [
                "null"
              ],
              "type": "fill"
            }
          ],
          "measurement": "ph",
          "orderByTime": "ASC",
          "policy": "default",
          "refId": "A",
          "resultFormat": "time_series",
          "select": [
            [
              {
                "params": [
                  "value"
                ],
                "type": "field"
              },
              {
                "params": [],
                "type": "mean"
              }
            ]
          ],
          "tags": []
        }
      ],
      "title": "Pond pH",
      "type": "timeseries"
    },
    {
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "continuous-BlPu"
          },
          "custom": {
            "axisLabel": "",
            "axisPlacement": "auto",
            "barAlignment": 0,
            "drawStyle": "line",
            "fillOpacity": 50,
            "gradientMode": "scheme",
            "hideFrom": {
              "legend": false,
              "tooltip": false,
              "viz": false
            },
            "lineInterpolation": "smooth",
            "lineWidth": 1,
            "pointSize": 5,
            "scaleDistribution": {
              "type": "linear"
            },
            "showPoints": "auto",
            "spanNulls": false,
            "stacking": {
              "group": "A",
              "mode": "none"
            },
            "thresholdsStyle": {
              "mode": "off"
            }
          },
          "mappings": [],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "green",
                "value": null
              },
              {
                "color": "red",
                "value": 80
              }
            ]
          },
          "unit": "ppm"
        },
        "overrides": []
      },
      "gridPos": {
        "h": 8,
        "w": 6,
        "x": 18,
        "y": 0
      },
      "id": 16,
      "options": {
        "legend": {
          "calcs": [],
          "displayMode": "hidden",
          "placement": "bottom"
        },
        "tooltip": {
          "mode": "single"
        }
      },
      "targets": [
        {
          "datasource": {
            "type": "influxdb",
            "uid": "de9vqN07k"
          },
          "groupBy": [
            {
              "params": [
                "1m"
              ],
              "type": "time"
            },
            {
              "params": [
                "null"
              ],
              "type": "fill"
            }
          ],
          "measurement": "tds",
          "orderByTime": "ASC",
          "policy": "default",
          "refId": "A",
          "resultFormat": "time_series",
          "select": [
            [
              {
                "params": [
                  "value"
                ],
                "type": "field"
              },
              {
                "params": [],
                "type": "mean"
              }
            ]
          ],
          "tags": []
        }
      ],
      "title": "Pond Total Disolved Solids",
      "type": "timeseries"
    },
    {
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "continuous-BlYlRd"
          },
          "custom": {
            "axisLabel": "",
            "axisPlacement": "auto",
            "barAlignment": 0,
            "drawStyle": "line",
            "fillOpacity": 44,
            "gradientMode": "none",
            "hideFrom": {
              "legend": false,
              "tooltip": false,
              "viz": false
            },
            "lineInterpolation": "linear",
            "lineWidth": 1,
            "pointSize": 5,
            "scaleDistribution": {
              "type": "linear"
            },
            "showPoints": "auto",
            "spanNulls": false,
            "stacking": {
              "group": "A",
              "mode": "none"
            },
            "thresholdsStyle": {
              "mode": "line"
            }
          },
          "mappings": [],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "green",
                "value": null
              }
            ]
          },
          "unit": "humidity"
        },
        "overrides": []
      },
      "gridPos": {
        "h": 8,
        "w": 6,
        "x": 0,
        "y": 4
      },
      "id": 8,
      "options": {
        "legend": {
          "calcs": [],
          "displayMode": "hidden",
          "placement": "bottom"
        },
        "tooltip": {
          "mode": "single"
        }
      },
      "targets": [
        {
          "datasource": {
            "type": "influxdb",
            "uid": "de9vqN07k"
          },
          "groupBy": [
            {
              "params": [
                "1m"
              ],
              "type": "time"
            },
            {
              "params": [
                "null"
              ],
              "type": "fill"
            }
          ],
          "measurement": "humidity",
          "orderByTime": "ASC",
          "policy": "default",
          "refId": "A",
          "resultFormat": "time_series",
          "select": [
            [
              {
                "params": [
                  "value"
                ],
                "type": "field"
              },
              {
                "params": [],
                "type": "mean"
              }
            ]
          ],
          "tags": []
        }
      ],
      "title": "Air Humidity",
      "type": "timeseries"
    },
    {
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "continuous-BlYlRd"
          },
          "custom": {
            "axisLabel": "",
            "axisPlacement": "auto",
            "axisSoftMax": 30,
            "axisSoftMin": 0,
            "barAlignment": 0,
            "drawStyle": "line",
            "fillOpacity": 50,
            "gradientMode": "scheme",
            "hideFrom": {
              "legend": false,
              "tooltip": false,
              "viz": false
            },
            "lineInterpolation": "smooth",
            "lineWidth": 1,
            "pointSize": 5,
            "scaleDistribution": {
              "type": "linear"
            },
            "showPoints": "auto",
            "spanNulls": false,
            "stacking": {
              "group": "A",
              "mode": "none"
            },
            "thresholdsStyle": {
              "mode": "off"
            }
          },
          "mappings": [],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "green",
                "value": null
              }
            ]
          }
        },
        "overrides": []
      },
      "gridPos": {
        "h": 8,
        "w": 6,
        "x": 6,
        "y": 4
      },
      "id": 2,
      "options": {
        "legend": {
          "calcs": [],
          "displayMode": "hidden",
          "placement": "bottom"
        },
        "tooltip": {
          "mode": "single"
        }
      },
      "targets": [
        {
          "datasource": {
            "type": "influxdb",
            "uid": "de9vqN07k"
          },
          "groupBy": [],
          "measurement": "temp",
          "orderByTime": "ASC",
          "policy": "default",
          "refId": "A",
          "resultFormat": "time_series",
          "select": [
            [
              {
                "params": [
                  "value"
                ],
                "type": "field"
              }
            ]
          ],
          "tags": []
        }
      ],
      "title": "Air Temp",
      "type": "timeseries"
    },
    {
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "continuous-BlYlRd"
          },
          "custom": {
            "axisGridShow": true,
            "axisLabel": "",
            "axisPlacement": "auto",
            "barAlignment": 0,
            "drawStyle": "line",
            "fillOpacity": 50,
            "gradientMode": "hue",
            "hideFrom": {
              "legend": false,
              "tooltip": false,
              "viz": false
            },
            "lineInterpolation": "smooth",
            "lineStyle": {
              "fill": "solid"
            },
            "lineWidth": 1,
            "pointSize": 5,
            "scaleDistribution": {
              "type": "linear"
            },
            "showPoints": "auto",
            "spanNulls": false,
            "stacking": {
              "group": "A",
              "mode": "none"
            },
            "thresholdsStyle": {
              "mode": "line"
            }
          },
          "decimals": 2,
          "mappings": [],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "dark-blue",
                "value": null
              },
              {
                "color": "red",
                "value": 80
              }
            ]
          },
          "unit": "celsius"
        },
        "overrides": [
          {
            "matcher": {
              "id": "byFrameRefID",
              "options": "A"
            },
            "properties": [
              {
                "id": "mappings",
                "value": [
                  {
                    "options": {
                      "-127.00 °C": {
                        "index": 0,
                        "text": "0"
                      }
                    },
                    "type": "value"
                  }
                ]
              }
            ]
          }
        ]
      },
      "gridPos": {
        "h": 8,
        "w": 6,
        "x": 12,
        "y": 8
      },
      "id": 20,
      "options": {
        "legend": {
          "calcs": [],
          "displayMode": "hidden",
          "placement": "bottom"
        },
        "tooltip": {
          "mode": "single"
        }
      },
      "targets": [
        {
          "datasource": {
            "type": "influxdb",
            "uid": "de9vqN07k"
          },
          "groupBy": [],
          "measurement": "temp1",
          "orderByTime": "ASC",
          "policy": "default",
          "refId": "A",
          "resultFormat": "time_series",
          "select": [
            [
              {
                "params": [
                  "value"
                ],
                "type": "field"
              }
            ]
          ],
          "tags": []
        }
      ],
      "title": "Pond Water Temp - 10CM",
      "transformations": [
        {
          "id": "filterByRefId",
          "options": {}
        },
        {
          "id": "filterByValue",
          "options": {
            "filters": [
              {
                "config": {
                  "id": "equal",
                  "options": {
                    "value": -127
                  }
                },
                "fieldName": "temp1"
              },
              {
                "config": {
                  "id": "greater",
                  "options": {
                    "value": 85
                  }
                },
                "fieldName": "temp1"
              }
            ],
            "match": "any",
            "type": "exclude"
          }
        }
      ],
      "type": "timeseries"
    },
    {
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "continuous-BlYlRd",
            "seriesBy": "last"
          },
          "custom": {
            "axisLabel": "",
            "axisPlacement": "auto",
            "barAlignment": 0,
            "drawStyle": "line",
            "fillOpacity": 50,
            "gradientMode": "hue",
            "hideFrom": {
              "legend": false,
              "tooltip": false,
              "viz": false
            },
            "lineInterpolation": "linear",
            "lineWidth": 1,
            "pointSize": 5,
            "scaleDistribution": {
              "type": "linear"
            },
            "showPoints": "auto",
            "spanNulls": false,
            "stacking": {
              "group": "A",
              "mode": "none"
            },
            "thresholdsStyle": {
              "mode": "off"
            }
          },
          "mappings": [],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "green",
                "value": null
              },
              {
                "color": "red",
                "value": 80
              }
            ]
          },
          "unit": "celsius"
        },
        "overrides": []
      },
      "gridPos": {
        "h": 8,
        "w": 6,
        "x": 18,
        "y": 8
      },
      "id": 22,
      "options": {
        "legend": {
          "calcs": [],
          "displayMode": "hidden",
          "placement": "bottom"
        },
        "tooltip": {
          "mode": "single"
        }
      },
      "targets": [
        {
          "datasource": {
            "type": "influxdb",
            "uid": "de9vqN07k"
          },
          "groupBy": [
            {
              "params": [
                "1m"
              ],
              "type": "time"
            },
            {
              "params": [
                "none"
              ],
              "type": "fill"
            }
          ],
          "measurement": "temp2",
          "orderByTime": "ASC",
          "policy": "default",
          "refId": "A",
          "resultFormat": "time_series",
          "select": [
            [
              {
                "params": [
                  "value"
                ],
                "type": "field"
              },
              {
                "params": [],
                "type": "mean"
              }
            ]
          ],
          "tags": []
        }
      ],
      "title": "Pond Water Temp 30cm",
      "type": "timeseries"
    },
    {
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "palette-classic"
          },
          "custom": {
            "axisLabel": "",
            "axisPlacement": "auto",
            "barAlignment": 0,
            "drawStyle": "line",
            "fillOpacity": 0,
            "gradientMode": "none",
            "hideFrom": {
              "legend": false,
              "tooltip": false,
              "viz": false
            },
            "lineInterpolation": "linear",
            "lineWidth": 1,
            "pointSize": 5,
            "scaleDistribution": {
              "type": "linear"
            },
            "showPoints": "auto",
            "spanNulls": false,
            "stacking": {
              "group": "A",
              "mode": "none"
            },
            "thresholdsStyle": {
              "mode": "off"
            }
          },
          "mappings": [],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "green",
                "value": null
              },
              {
                "color": "red",
                "value": 80
              }
            ]
          }
        },
        "overrides": []
      },
      "gridPos": {
        "h": 7,
        "w": 6,
        "x": 0,
        "y": 12
      },
      "id": 4,
      "options": {
        "legend": {
          "calcs": [],
          "displayMode": "hidden",
          "placement": "bottom"
        },
        "tooltip": {
          "mode": "single"
        }
      },
      "targets": [
        {
          "datasource": {
            "type": "influxdb",
            "uid": "de9vqN07k"
          },
          "groupBy": [],
          "measurement": "rssi",
          "orderByTime": "ASC",
          "policy": "autogen",
          "refId": "A",
          "resultFormat": "time_series",
          "select": [
            [
              {
                "params": [
                  "value"
                ],
                "type": "field"
              }
            ]
          ],
          "tags": []
        }
      ],
      "title": "Receieved LoRa RSSI",
      "type": "timeseries"
    },
    {
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "continuous-GrYlRd"
          },
          "custom": {
            "axisLabel": "",
            "axisPlacement": "auto",
            "barAlignment": 0,
            "drawStyle": "line",
            "fillOpacity": 45,
            "gradientMode": "scheme",
            "hideFrom": {
              "legend": false,
              "tooltip": false,
              "viz": false
            },
            "lineInterpolation": "smooth",
            "lineWidth": 1,
            "pointSize": 5,
            "scaleDistribution": {
              "type": "linear"
            },
            "showPoints": "auto",
            "spanNulls": false,
            "stacking": {
              "group": "A",
              "mode": "none"
            },
            "thresholdsStyle": {
              "mode": "off"
            }
          },
          "decimals": 2,
          "mappings": [],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "green",
                "value": null
              },
              {
                "color": "red",
                "value": 80
              }
            ]
          },
          "unit": "pressurehg"
        },
        "overrides": []
      },
      "gridPos": {
        "h": 7,
        "w": 6,
        "x": 6,
        "y": 12
      },
      "id": 6,
      "options": {
        "legend": {
          "calcs": [],
          "displayMode": "hidden",
          "placement": "bottom"
        },
        "tooltip": {
          "mode": "single"
        }
      },
      "targets": [
        {
          "datasource": {
            "type": "influxdb",
            "uid": "de9vqN07k"
          },
          "groupBy": [
            {
              "params": [
                "1m"
              ],
              "type": "time"
            },
            {
              "params": [
                "null"
              ],
              "type": "fill"
            }
          ],
          "measurement": "pressure",
          "orderByTime": "ASC",
          "policy": "default",
          "refId": "A",
          "resultFormat": "time_series",
          "select": [
            [
              {
                "params": [
                  "value"
                ],
                "type": "field"
              },
              {
                "params": [],
                "type": "mean"
              }
            ]
          ],
          "tags": []
        }
      ],
      "title": "Air Pressure",
      "type": "timeseries"
    },
    {
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "continuous-BlYlRd"
          },
          "custom": {
            "axisLabel": "",
            "axisPlacement": "auto",
            "barAlignment": 0,
            "drawStyle": "line",
            "fillOpacity": 59,
            "gradientMode": "hue",
            "hideFrom": {
              "legend": false,
              "tooltip": false,
              "viz": false
            },
            "lineInterpolation": "smooth",
            "lineWidth": 1,
            "pointSize": 5,
            "scaleDistribution": {
              "type": "linear"
            },
            "showPoints": "auto",
            "spanNulls": false,
            "stacking": {
              "group": "A",
              "mode": "none"
            },
            "thresholdsStyle": {
              "mode": "off"
            }
          },
          "mappings": [],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "green",
                "value": null
              },
              {
                "color": "red",
                "value": 80
              }
            ]
          }
        },
        "overrides": []
      },
      "gridPos": {
        "h": 8,
        "w": 12,
        "x": 12,
        "y": 16
      },
      "id": 24,
      "options": {
        "legend": {
          "calcs": [],
          "displayMode": "list",
          "placement": "bottom"
        },
        "tooltip": {
          "mode": "single"
        }
      },
      "targets": [
        {
          "datasource": {
            "type": "influxdb",
            "uid": "de9vqN07k"
          },
          "groupBy": [
            {
              "params": [
                "1m"
              ],
              "type": "time"
            },
            {
              "params": [
                "null"
              ],
              "type": "fill"
            }
          ],
          "measurement": "turbid",
          "orderByTime": "ASC",
          "policy": "default",
          "refId": "A",
          "resultFormat": "time_series",
          "select": [
            [
              {
                "params": [
                  "value"
                ],
                "type": "field"
              },
              {
                "params": [],
                "type": "mean"
              }
            ]
          ],
          "tags": []
        }
      ],
      "title": "Turbidity",
      "type": "timeseries"
    },
    {
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "continuous-YlBl"
          },
          "custom": {
            "axisLabel": "",
            "axisPlacement": "auto",
            "barAlignment": 0,
            "drawStyle": "line",
            "fillOpacity": 59,
            "gradientMode": "hue",
            "hideFrom": {
              "legend": false,
              "tooltip": false,
              "viz": false
            },
            "lineInterpolation": "smooth",
            "lineWidth": 1,
            "pointSize": 5,
            "scaleDistribution": {
              "type": "linear"
            },
            "showPoints": "auto",
            "spanNulls": false,
            "stacking": {
              "group": "A",
              "mode": "none"
            },
            "thresholdsStyle": {
              "mode": "off"
            }
          },
          "mappings": [],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "green",
                "value": null
              },
              {
                "color": "red",
                "value": 80
              }
            ]
          },
          "unit": "lux"
        },
        "overrides": []
      },
      "gridPos": {
        "h": 5,
        "w": 12,
        "x": 0,
        "y": 19
      },
      "id": 26,
      "options": {
        "legend": {
          "calcs": [],
          "displayMode": "list",
          "placement": "bottom"
        },
        "tooltip": {
          "mode": "single"
        }
      },
      "targets": [
        {
          "datasource": {
            "type": "influxdb",
            "uid": "de9vqN07k"
          },
          "groupBy": [
            {
              "params": [
                "1m"
              ],
              "type": "time"
            },
            {
              "params": [
                "null"
              ],
              "type": "fill"
            }
          ],
          "measurement": "LUX",
          "orderByTime": "ASC",
          "policy": "default",
          "refId": "A",
          "resultFormat": "time_series",
          "select": [
            [
              {
                "params": [
                  "value"
                ],
                "type": "field"
              },
              {
                "params": [],
                "type": "mean"
              }
            ]
          ],
          "tags": []
        }
      ],
      "title": "Light Level (LUX)",
      "type": "timeseries"
    }
  ],
  "schemaVersion": 34,
  "style": "dark",
  "tags": [],
  "templating": {
    "list": []
  },
  "time": {
    "from": "now-30m",
    "to": "now"
  },
  "timepicker": {},
  "timezone": "",
  "title": "RT Dashboard + Historic",
  "uid": "eDiXGvA7z",
  "version": 45,
  "weekStart": ""
}

In Station Positioning

When sat on my desk during the build and test phase, I had approx 5m between the sender and receiver for the two MKR1300s, unsuprisingly I had a great RSSI for the duration.

Having now moved the outstation to the bottom of the garden, approximately 90m from my current position, RSSI without moving the instation end dropped almost of the chart and into the -100 / -103dBm range of, thats not great and right at the end of drops out expected. With some rain at 1020 this morning and a watchful eye on data coming in ... first missed packets were seen, as rain intensity increased albeit for a short duration, data RX dropped off.

image

Moved the instation reciever at 1248, during conference call :D, not a massive improvement, but better.

Line of sight distance about 90m, out of a window, through a greenhouse, out of another window and then straight to the bottom of the garden.

image image

  • Sign in to reply

Top Comments

  • DAB
    DAB over 3 years ago +1
    Nice build. It will be interesting to see how it performs over time.
  • mp2100
    mp2100 over 3 years ago +1
    It looks good. Your RSSI is not so bad, LoRa can go much lower than -100 db and still receive data. Because you have obstructions, achieving a typical -100 db is rather good. LoRa is much better with…
  • christophesky
    christophesky over 3 years ago in reply to mp2100

    I had not previously measured the height diffeence between the back of my house and the bottom of the garden, this comes in at just over 1100mm. I may experiment with inclination of the dipole antenna on the instation end to see if this helps move things along any further. I have also treated myself to a second MKR1300 and a GPS module so I can go for a walk about and see quite how far I can still recieve data.

    I did find despite trying out other (alleged) 868 tuned antennas, none were as good as the Arduino recommended.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • More
    • Cancel
  • christophesky
    christophesky over 3 years ago in reply to DAB

    Thank you DAB.

    I assume the blogs for the design challenge will remain open, assuming that they do I plan to report in on how it is all holding up. The pH probe is probably my single biggest question on how long will it last. As a lab grade rather than process grade test equipment when used for occassional measurement cited to run for about a year before you need to replace the electrode, mine is sampling every 30 seconds Slight smile

    Everything inside the enclosure I have no concern about, it was really put through its paces, see earlier posts on testing. I do need to finish up my build details including where I have 6mm cable runs through the 16mm glands - this was sealed up with self annealing tape.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • More
    • Cancel
  • mp2100
    mp2100 over 3 years ago

    It looks good.

    Your RSSI is not so bad, LoRa can go much lower than -100 db and still receive data.  Because you have obstructions, achieving a typical -100 db is rather good.  LoRa is much better with line-of-sight signals.

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • More
    • Cancel
  • DAB
    DAB over 3 years ago

    Nice build.

    It will be interesting to see how it performs over time.

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • More
    • Cancel
  • christophesky
    christophesky over 3 years ago

    image

    My mission patch for good measure :) and i do feel that this has been earnt. (over 35 years since my last "badge" and that was on my cub scouts uniform :D Smiley)

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • More
    • Cancel
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube