reef-pi :: An opensource reef tank controller based on Raspberry Pi.

I wish I could do a dedicated blog/docs on this, but here is the tldr version;
- I have one dashboard each for individual tanks. That shows ato, ph, temp, light etc.. whatever that build has
- I have a global dashboard that consolidated all key parameters (ph, temperature, ato) and some ambient readings (temperature for example). I use this as Home Screen, to get a glimpse of fleet wide stats
- I have the stock node exporter dashboard , imported from grafana community hub that shows low level system metrics (it requires node exporter installed and running on all pi )

Other than these keyed dashboard I also use a whole bunch of adhoc dashboard to test things like light profile, psu setup (under voltage detection ).
I do use alerting from several of these dashboard


I've been playing with variables and whatnot to setup some "template" type dashboards.. It's coming along pretty nice for someone who never heard of prometheus or grafana two years ago..
 
@Ranjib how difficult would it be to expose the "name" of the reef-pi install via prometheus??


1643840660295.png
 
@Ranjib how difficult would it be to expose the "name" of the reef-pi install via prometheus??


1643840660295.png
I have multiple and what I have learned to do in order to make it easier in grafana is I include the name in each of the function. For example I have a coral QT tank and I include coral in each of the name like this...

Screenshot at 2022-02-02 16-40-45.png


repeat for ato etc, just include the name in the object that you are defining then it will show up that way in grafana. :)
 
I have multiple and what I have learned to do in order to make it easier in grafana is I include the name in each of the function. For example I have a coral QT tank and I include coral in each of the name like this...

Screenshot at 2022-02-02 16-40-45.png


repeat for ato etc, just include the name in the object that you are defining then it will show up that way in grafana. :)

Yeah, I do that too, but I want the name of the device running for something else... ;)
 
@Ranjib how difficult would it be to expose the "name" of the reef-pi install via prometheus??


1643840660295.png
Prometheus is a metric system , hence it only supports numeric values. We can use the labels feature for this instead.

I configure Prometheus config with the job name same as the reef-pi controller name , and then use the built in “job” label to display the controller name as job label value
 
Looking to get some of @Michael Lane goby hat boards made up and looks like pca9685pw are OOS everywhere, I assume @robsworld78 you are seeing the same thing, where are folks ordering from etc...just thought I would ask.
 
Yeah they have a couple of versions in stock, was wanting to order the boards assy, if I go this path I have to hand solder the SMT and not sure I have the skill to do it. :)
No time like the present to try :)

With some liquid or tacky flux this goes down very quickly with any old iron. You need the flux.
 
This is my current dashboard, in progress of course.. I have it setup to be somewhat dynamic.. I need that "hostname" to be emitted from prometheus so that I can replace the IP address with the hostname..
Very nice... here is mine:
1643908360557.png

.. and the JASON code to follow. pH is off by around .20 ( have not calibrated it yet.. waiting on new probe) Spikes are me playing around.
 
Code:
[ICODE]

{

  "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": 4,

  "links": [],

  "liveNow": false,

  "panels": [

    {

      "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": 8,

        "w": 12,

        "x": 0,

        "y": 0

      },

      "id": 18,

      "options": {

        "legend": {

          "calcs": [],

          "displayMode": "list",

          "placement": "bottom"

        },

        "tooltip": {

          "mode": "single"

        }

      },

      "targets": [

        {

          "datasource": {

            "type": "prometheus",

            "uid": "FvND3Zigz"

          },

          "exemplar": false,

          "expr": "equipment_3_skimmer_state ",

          "hide": false,

          "interval": "",

          "legendFormat": "",

          "refId": "A"

        }

      ],

      "title": "Panel Title",

      "type": "timeseries"

    },

    {

      "description": "",

      "gridPos": {

        "h": 3,

        "w": 15,

        "x": 2,

        "y": 8

      },

      "id": 14,

      "options": {

        "bgColor": "transparent",

        "clockType": "12 hour",

        "countdownSettings": {

          "endCountdownTime": "2022-02-03T10:26:59-08:00",

          "endText": "00:00:00"

        },

        "dateSettings": {

          "dateFormat": "DD-MM-YYYY",

          "fontSize": "20px",

          "fontWeight": "normal",

          "locale": "",

          "showDate": true

        },

        "mode": "time",

        "refresh": "sec",

        "timeSettings": {

          "fontSize": "26",

          "fontWeight": "normal"

        },

        "timezone": "",

        "timezoneSettings": {

          "fontSize": "12px",

          "fontWeight": "normal",

          "showTimezone": false,

          "zoneFormat": "offsetAbbv"

        }

      },

      "pluginVersion": "1.2.0",

      "targets": [

        {

          "datasource": {

            "type": "prometheus",

            "uid": "FvND3Zigz"

          },

          "exemplar": false,

          "expr": "",

          "interval": "",

          "legendFormat": "",

          "refId": "A"

        }

      ],

      "transparent": true,

      "type": "grafana-clock-panel"

    },

    {

      "fieldConfig": {

        "defaults": {

          "color": {

            "mode": "thresholds"

          },

          "mappings": [],

          "max": 8.6,

          "min": 7.5,

          "thresholds": {

            "mode": "absolute",

            "steps": [

              {

                "color": "orange",

                "value": null

              },

              {

                "color": "semi-dark-orange",

                "value": 7.5

              },

              {

                "color": "super-light-green",

                "value": 7.8

              },

              {

                "color": "semi-dark-green",

                "value": 8

              },

              {

                "color": "dark-green",

                "value": 8.3

              },

              {

                "color": "semi-dark-orange",

                "value": 8.4

              },

              {

                "color": "dark-red",

                "value": 8.5

              }

            ]

          }

        },

        "overrides": []

      },

      "gridPos": {

        "h": 5,

        "w": 4,

        "x": 2,

        "y": 11

      },

      "id": 4,

      "options": {

        "orientation": "auto",

        "reduceOptions": {

          "calcs": [

            "lastNotNull"

          ],

          "fields": "",

          "values": false

        },

        "showThresholdLabels": false,

        "showThresholdMarkers": true

      },

      "pluginVersion": "8.3.4",

      "targets": [

        {

          "datasource": {

            "type": "prometheus",

            "uid": "FvND3Zigz"

          },

          "exemplar": true,

          "expr": "ph_ph_probe ",

          "interval": "",

          "legendFormat": "",

          "refId": "A"

        }

      ],

      "title": "pH",

      "transparent": true,

      "type": "gauge"

    },

    {

      "fieldConfig": {

        "defaults": {

          "color": {

            "mode": "thresholds"

          },

          "mappings": [],

          "max": 80,

          "min": 75,

          "thresholds": {

            "mode": "absolute",

            "steps": [

              {

                "color": "red",

                "value": null

              },

              {

                "color": "transparent",

                "value": 60

              },

              {

                "color": "light-blue",

                "value": 75

              },

              {

                "color": "dark-blue",

                "value": 76

              },

              {

                "color": "semi-dark-green",

                "value": 77

              },

              {

                "color": "dark-green",

                "value": 78

              },

              {

                "color": "semi-dark-red",

                "value": 79

              },

              {

                "color": "dark-red",

                "value": 80

              },

              {

                "color": "transparent",

                "value": 85

              }

            ]

          }

        },

        "overrides": []

      },

      "gridPos": {

        "h": 5,

        "w": 4,

        "x": 11,

        "y": 11

      },

      "id": 10,

      "options": {

        "orientation": "auto",

        "reduceOptions": {

          "calcs": [

            "lastNotNull"

          ],

          "fields": "",

          "values": false

        },

        "showThresholdLabels": false,

        "showThresholdMarkers": true

      },

      "pluginVersion": "8.3.4",

      "targets": [

        {

          "datasource": {

            "type": "prometheus",

            "uid": "FvND3Zigz"

          },

          "exemplar": true,

          "expr": "temperature_reading",

          "interval": "",

          "legendFormat": "",

          "refId": "A"

        }

      ],

      "title": "Temperature",

      "transparent": true,

      "type": "gauge"

    },

    {

      "fieldConfig": {

        "defaults": {

          "color": {

            "mode": "continuous-GrYlRd",

            "seriesBy": "last"

          },

          "custom": {

            "axisGridShow": false,

            "axisLabel": "",

            "axisPlacement": "auto",

            "barAlignment": 0,

            "drawStyle": "line",

            "fillOpacity": 40,

            "gradientMode": "scheme",

            "hideFrom": {

              "legend": false,

              "tooltip": false,

              "viz": false

            },

            "lineInterpolation": "linear",

            "lineWidth": 2,

            "pointSize": 5,

            "scaleDistribution": {

              "type": "linear"

            },

            "showPoints": "never",

            "spanNulls": false,

            "stacking": {

              "group": "A",

              "mode": "none"

            },

            "thresholdsStyle": {

              "mode": "line+area"

            }

          },

          "mappings": [],

          "max": 8.6,

          "min": 7.5,

          "thresholds": {

            "mode": "absolute",

            "steps": [

              {

                "color": "transparent",

                "value": null

              },

              {

                "color": "#EAB839",

                "value": 7.8

              },

              {

                "color": "semi-dark-green",

                "value": 8

              },

              {

                "color": "dark-red",

                "value": 8.6

              }

            ]

          }

        },

        "overrides": []

      },

      "gridPos": {

        "h": 7,

        "w": 8,

        "x": 0,

        "y": 16

      },

      "id": 6,

      "options": {

        "legend": {

          "calcs": [],

          "displayMode": "hidden",

          "placement": "bottom"

        },

        "tooltip": {

          "mode": "single"

        }

      },

      "pluginVersion": "8.3.4",

      "targets": [

        {

          "datasource": {

            "type": "prometheus",

            "uid": "FvND3Zigz"

          },

          "exemplar": false,

          "expr": "ph_ph_probe",

          "interval": "",

          "legendFormat": "",

          "refId": "A"

        }

      ],

      "transparent": true,

      "type": "timeseries"

    },

    {

      "fieldConfig": {

        "defaults": {

          "color": {

            "mode": "continuous-BlYlRd",

            "seriesBy": "last"

          },

          "custom": {

            "axisGridShow": false,

            "axisLabel": "",

            "axisPlacement": "auto",

            "barAlignment": 0,

            "drawStyle": "line",

            "fillOpacity": 36,

            "gradientMode": "scheme",

            "hideFrom": {

              "legend": false,

              "tooltip": false,

              "viz": false

            },

            "lineInterpolation": "linear",

            "lineWidth": 2,

            "pointSize": 5,

            "scaleDistribution": {

              "type": "linear"

            },

            "showPoints": "never",

            "spanNulls": false,

            "stacking": {

              "group": "A",

              "mode": "none"

            },

            "thresholdsStyle": {

              "mode": "line+area"

            }

          },

          "mappings": [],

          "max": 79,

          "min": 77,

          "thresholds": {

            "mode": "absolute",

            "steps": [

              {

                "color": "transparent",

                "value": null

              },

              {

                "color": "semi-dark-blue",

                "value": 77

              },

              {

                "color": "semi-dark-green",

                "value": 78

              },

              {

                "color": "semi-dark-orange",

                "value": 79

              },

              {

                "color": "red",

                "value": 80

              }

            ]

          }

        },

        "overrides": []

      },

      "gridPos": {

        "h": 7,

        "w": 8,

        "x": 9,

        "y": 16

      },

      "id": 16,

      "options": {

        "legend": {

          "calcs": [],

          "displayMode": "hidden",

          "placement": "bottom"

        },

        "tooltip": {

          "mode": "single"

        }

      },

      "pluginVersion": "8.3.4",

      "targets": [

        {

          "datasource": {

            "type": "prometheus",

            "uid": "FvND3Zigz"

          },

          "exemplar": false,

          "expr": "temperature_reading",

          "interval": "",

          "legendFormat": "",

          "refId": "A"

        }

      ],

      "transparent": true,

      "type": "timeseries"

    }

  ],

  "refresh": "1m",

  "schemaVersion": 34,

  "style": "dark",

  "tags": [],

  "templating": {

    "list": []

  },

  "time": {

    "from": "now-6h",

    "to": "now"

  },

  "timepicker": {},

  "timezone": "",

  "title": "Tank",

  "uid": "78PsugWRz",

  "version": 14,

  "weekStart": ""

}

[/ICODE]
 
No time like the present to try :)

With some liquid or tacky flux this goes down very quickly with any old iron. You need the flux.
Yeah I have kester tacky flux in a syringe, its good stuff. Did you see my PM, anyway you could take a look at the parts I have laid out from JLPCB. I think I have things covered but would be nice before pulling the trigger.

I found some on pc9685 on newark and going to add some more parts and give it a go.
 
Sorry for the newby questions. I can get a 3A+ starter kit from local micro center. Anything wrong with jumping in the water with this?
Ive been running 3a+ for several years now, they work just fine. :)

Keep in mind that the starter kit has stuff in it that you will not need, it's a shame the rpi's are so hard to come by these days.
 

TOP 10 Trending Threads

ARE YOU READY TO CONFESS TO CRAZIEST, DUMBEST, FUNNIEST THING YOU’VE EVER DONE IN REEFING?

  • Yeah, I'll confess! (Share your story in the comments!)

    Votes: 19 57.6%
  • Nah, I'll keep mine a secret...(Don't be like that, share with the class!)

    Votes: 14 42.4%
Back
Top
Home
Post thread…
Market
What's new