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

brian.badge

Active Member
View Badges
Joined
Apr 19, 2019
Messages
143
Reaction score
79
Rating - 0%
0   0   0
if its sticking till you tap it its arc welded. the tap breaks the weak weld. but once it arc welds, it builds carbon, and then then it becomes more prone to arc due to increased resistance from the carbon causing it circle and get worse. i was looking at 8 port you bought for $9 where the digikey are $12 for just the relays plus shipping.
No worries I would pay 20 if I could just buy a whole board with good relays already on it.
 

robsworld78

Well-Known Member
View Badges
Joined
Feb 14, 2020
Messages
952
Reaction score
1,281
Location
Edmonton, Canada
Rating - 0%
0   0   0
and I think the mosfet blew again.. or something equally stupid. The wife just texted me and that light has no blues on right now. I'd like to swap out the driver with a meanwell, but I have yet go find one that matches the specs closely enough to make me feel good about doing it.
That stinks, good thing you're handy. This one is 500ma up to 90v, getting close.

 

ReeferLou

Active Member
View Badges
Joined
Dec 24, 2020
Messages
193
Reaction score
151
Location
Michigan-Oakland County
Rating - 0%
0   0   0
Anyone interested in how hot your pi CPU is running you can schedule this with krontab and send your self an email at the frequency of your choosing. Save as a .py file and run as python.

Code:
# coding=utf-8
#import time
import os
import smtplib
from email.mime.text import MIMEText

critical = False

high = 50
too_high = 80

# At First we have to get the current CPU-Temperature with this defined function
def getCPUtemperature():
    res = os.popen('vcgencmd measure_temp').readline()
    return(res.replace("temp=","").replace("'C\n",""))


        # Now we convert our value into a float number
temp = float(getCPUtemperature())

        # Check if the temperature is above 60°C (you can change this value, but it shouldn't be above 70)
if (temp > high):
        if (temp > too_high):
                critical = True
                subject = "Critical warning! The temperature is: {} shutting down!!".format(temp)
                body = "Critical warning! The actual temperature is: {} \n\n Shutting down the pi!".format(temp)
        else:
                subject = "Warning! The temperature is: {} ".format(temp)
                body = "Warning! The actual temperature is: {} ".format(temp)


else:
        subject = "LousReef Controller at Normal Temp"
        body = "LousReef running at {}".format(temp)

# Enter your smtp Server-Connection
server = smtplib.SMTP('smtp.gmail.com', 587) # if your using gmail: smtp.gmail.com
server.ehlo()
server.starttls()
server.ehlo
# Login
server.login("your email", "your password")

msg = MIMEText(body)
msg['Subject'] = subject
msg['From'] = "you"
msg['To'] = "whoever"

# Finally send the mail
server.sendmail("from", "to", msg.as_string())
server.quit()

# Critical, shut down the pi
if critical:
        os.popen('sudo halt')
 

BenB

Active Member
View Badges
Joined
Jun 11, 2019
Messages
100
Reaction score
152
Rating - 0%
0   0   0
With the L293D it is possible to control Stepper motors. The L293D is already part of Reef-Pi for the normal Doser motors.

Here a link as an example:


Some additional coding will be needed...

The only limitation is the current.
 

elysics

Valuable Member
View Badges
Joined
Jan 15, 2020
Messages
1,520
Reaction score
1,511
Rating - 0%
0   0   0
I would really really advise against people trying to control steppers without a proper chopper driver, and not even the super cheap 4988 ones.

Unless you have your setup far away in the basement where you can't hear it, you really don't want to do that.

There is a reason that video has music instead of sound.

Not to mention that you won't be getting the accuracy you presumably bought the more expensive and less convenient stepper motors for if you don't use a proper driver and on top of that control it properly by telling it to run a certain amount of steps rather than for a certain time at a certain speed.
 
Last edited:

GaryE

Well-Known Member
View Badges
Joined
Mar 12, 2020
Messages
992
Reaction score
1,384
Location
Coatesville, Indiana
Rating - 0%
0   0   0
That stinks, good thing you're handy. This one is 500ma up to 90v, getting close.


Seems to have been just a bad connection.. need a real male-male jst adapter.. for now I have it plugged back into the board with the pot and it's "working".. Just a little dimmer than the other at lower levels, probably due to the resistance on the pot. But it does dim properly, so that's a plus..

This is just odd looking

1613040298310.png
 

elysics

Valuable Member
View Badges
Joined
Jan 15, 2020
Messages
1,520
Reaction score
1,511
Rating - 0%
0   0   0
Btw has anyone figured out how to stop the timeline on the graphs from overlapping and being messed up after rebooting the pi? I thought adding a realtimeclock would fix it and added a DS3231, but that either doesn't help or i have it set up wrong.
 

babrooks

New Member
View Badges
Joined
Feb 28, 2020
Messages
22
Reaction score
43
Rating - 0%
0   0   0
well my thing is I think I would need atleast 8 if not 9 dosers for everything. I dont know if pi has multiple uart pins. and the number of dosers needed is why i was wondering if pca9685 could be used to deliever the pulses. each 9685 has 16 output and can be chained together to give massive number of outputs using just i2c. and If i design a board it can have 48 output easy, which should be more than enough for dosers and anything else that the and the pwm powers the doser, the faster the pwm the faster the doser doses, but think the pi uses 1 pwm for everything, so not sure how it works on that side, or how to limit the number of pulses.
I think any digital pins can be used for the serial bus, at least with the Arduino boards. I looked again at the TMC2209 datasheet. You can have 4 drivers individually addressed on one bus. Of course, if you want two drivers to behave in the same way (say for two dosing pumps that you run in unison) then you can just give them the same address. Another way to scale is to add a transistor that switches the serial interface from one set of four drivers to another set of four. So if you want to communicate with 4x drivers, you need 1+x pins (2 for the serial bus + 1 to drive the transistor for each set of additional 4 drivers). But this would add even more complexity to the reef-pi code...
 
OP
OP
Ranjib

Ranjib

7500 Club Member
View Badges
Joined
Apr 16, 2016
Messages
9,843
Reaction score
17,058
Location
Pleasant Hill, Concord
Rating - 0%
0   0   0
Btw has anyone figured out how to stop the timeline on the graphs from overlapping and being messed up after rebooting the pi? I thought adding a realtimeclock would fix it and added a DS3231, but that either doesn't help or i have it set up wrong.
Can you send a screen shot ?
 
OP
OP
Ranjib

Ranjib

7500 Club Member
View Badges
Joined
Apr 16, 2016
Messages
9,843
Reaction score
17,058
Location
Pleasant Hill, Concord
Rating - 0%
0   0   0
I think any digital pins can be used for the serial bus, at least with the Arduino boards. I looked again at the TMC2209 datasheet. You can have 4 drivers individually addressed on one bus. Of course, if you want two drivers to behave in the same way (say for two dosing pumps that you run in unison) then you can just give them the same address. Another way to scale is to add a transistor that switches the serial interface from one set of four drivers to another set of four. So if you want to communicate with 4x drivers, you need 1+x pins (2 for the serial bus + 1 to drive the transistor for each set of additional 4 drivers). But this would add even more complexity to the reef-pi code...
Stepper capability is important. I’m won’t worry about the code bits if we have a robust strategy (open source , affordable, good circuit/drivers and solves dosing workflows )
 

elysics

Valuable Member
View Badges
Joined
Jan 15, 2020
Messages
1,520
Reaction score
1,511
Rating - 0%
0   0   0
Can you send a screen shot ?
1613064268872.png

1613064317979.png

1613064346189.png


New data is written inbetween old data instead of at the very right, the graph then flickers back and forth between new and old data. Happens every time i reboot the pi. If i reboot it again, all previous data is magically sorted again, but the newly arriving one will be broken again. After some time in the range of an hour or two, the problem stops, and new data is appended at the right again.

Same exact behaviour at the same exact timings is happening in health, temperature, and ph graph as far as i can tell. Others had this problem as well iirc.
 

brian.badge

Active Member
View Badges
Joined
Apr 19, 2019
Messages
143
Reaction score
79
Rating - 0%
0   0   0
I have an optical sensor hooked to an ATO where the pump relay is reversed. Its set up this way so that I can add saltwater and have the ato empty down to the desired level. That work well, but after its complete the ato will keep triggering intermittently and eventually leave the sensor dry and the pump running.

The pump should not be on when the sensor is dry. Anyone understand whats happening?
 

brian.badge

Active Member
View Badges
Joined
Apr 19, 2019
Messages
143
Reaction score
79
Rating - 0%
0   0   0
I have an optical sensor hooked to an ATO where the pump relay is reversed. Its set up this way so that I can add saltwater and have the ato empty down to the desired level. That work well, but after its complete the ato will keep triggering intermittently and eventually leave the sensor dry and the pump running.

The pump should not be on when the sensor is dry. Anyone understand whats happening?
Please disregard this is relay sticking not ATO.
 

Mwdsonny

Community Member
View Badges
Joined
Nov 20, 2018
Messages
29
Reaction score
44
Rating - 0%
0   0   0
RC snubber
i havent massed with them. Ive just had relays get stuck on ac unit and well pumps. (ants climb into controls and get smashed in the contactor.) once they start to arc they start circling the drain. also have welded relays in 12v heavy duty use. like the relays under your hood for the horn. I custom built a control box for a warn wench and it pulled more than the 15amp the relays were rated at and arc welded them in the on position from the sudden high current.
 

robsworld78

Well-Known Member
View Badges
Joined
Feb 14, 2020
Messages
952
Reaction score
1,281
Location
Edmonton, Canada
Rating - 0%
0   0   0
Seems to have been just a bad connection.. need a real male-male jst adapter.. for now I have it plugged back into the board with the pot and it's "working".. Just a little dimmer than the other at lower levels, probably due to the resistance on the pot. But it does dim properly, so that's a plus..

This is just odd looking

1613040298310.png
Right on and that looks very odd, the blue is hard on the eyes.
 

robsworld78

Well-Known Member
View Badges
Joined
Feb 14, 2020
Messages
952
Reaction score
1,281
Location
Edmonton, Canada
Rating - 0%
0   0   0

GaryE

Well-Known Member
View Badges
Joined
Mar 12, 2020
Messages
992
Reaction score
1,384
Location
Coatesville, Indiana
Rating - 0%
0   0   0
1613316086428.png

{
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": "-- Grafana --",
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"type": "dashboard"
}
]
},
"editable": true,
"gnetId": null,
"graphTooltip": 0,
"id": 3,
"links": [],
"panels": [
{
"datasource": null,
"fieldConfig": {
"defaults": {
"custom": {},
"mappings": [
{
"from": "",
"id": 1,
"operator": "",
"text": "Off",
"to": "",
"type": 1,
"value": "0"
},
{
"from": "",
"id": 2,
"operator": "",
"text": "On",
"to": "",
"type": 1,
"value": "1"
}
],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 0
},
{
"color": "green",
"value": 1
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 3,
"w": 24,
"x": 0,
"y": 0
},
"id": 2,
"options": {
"colorMode": "background",
"graphMode": "none",
"justifyMode": "center",
"orientation": "vertical",
"reduceOptions": {
"calcs": [
"last"
],
"values": false
}
},
"pluginVersion": "7.0.0",
"targets": [
{
"expr": "equipment_fan_state",
"interval": "",
"legendFormat": "Fan",
"refId": "A"
},
{
"expr": "equipment_fuge_light_state",
"interval": "",
"legendFormat": "Fuge Light",
"refId": "B"
},
{
"expr": "equipment_heater_state",
"interval": "",
"legendFormat": "Heater",
"refId": "C"
},
{
"expr": "equipment_skimmer_state",
"interval": "",
"legendFormat": "Skimmer",
"refId": "F"
},
{
"expr": "equipment_sump__state",
"interval": "",
"legendFormat": "Sump",
"refId": "G"
},
{
"expr": "equipment_gyre_pump_state",
"interval": "",
"legendFormat": "Gyre",
"refId": "D"
}
],
"timeFrom": null,
"timeShift": null,
"title": "Equipment Status",
"type": "stat"
},
{
"datasource": null,
"fieldConfig": {
"defaults": {
"custom": {},
"decimals": 2,
"mappings": [],
"max": 90,
"min": 70,
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 79
}
]
},
"unit": "fahrenheit"
},
"overrides": []
},
"gridPos": {
"h": 4,
"w": 12,
"x": 0,
"y": 3
},
"id": 4,
"options": {
"orientation": "auto",
"reduceOptions": {
"calcs": [
"last"
],
"values": false
},
"showThresholdLabels": false,
"showThresholdMarkers": true
},
"pluginVersion": "7.0.0",
"targets": [
{
"expr": "tank_temp_reading",
"interval": "",
"legendFormat": "{{jobname}} Tank Temp",
"refId": "A"
},
{
"expr": "sump_temp_reading",
"interval": "",
"legendFormat": "Sump Temp",
"refId": "B"
}
],
"timeFrom": null,
"timeShift": null,
"title": "Tank Temp",
"type": "gauge"
},
{
"datasource": null,
"fieldConfig": {
"defaults": {
"custom": {},
"decimals": 2,
"mappings": [],
"max": 125,
"min": 55,
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 90
}
]
},
"unit": "fahrenheit"
},
"overrides": []
},
"gridPos": {
"h": 4,
"w": 12,
"x": 12,
"y": 3
},
"id": 5,
"options": {
"orientation": "auto",
"reduceOptions": {
"calcs": [
"last"
],
"values": false
},
"showThresholdLabels": false,
"showThresholdMarkers": true
},
"pluginVersion": "7.0.0",
"targets": [
{
"expr": "internal_box_temp_reading",
"interval": "",
"legendFormat": "Internal Temp 1",
"refId": "A"
},
{
"expr": "internal_box_temp_2_reading",
"interval": "",
"legendFormat": "Internal Temp 2",
"refId": "B"
}
],
"timeFrom": null,
"timeShift": null,
"title": "Box Temp",
"type": "gauge"
},
{
"aliasColors": {
"Back": "rgb(159, 255, 220)",
"Blue Light": "blue",
"Front ": "rgb(142, 164, 166)",
"Middle": "rgb(255, 255, 255)"
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": null,
"fieldConfig": {
"defaults": {
"custom": {}
},
"overrides": []
},
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 6,
"w": 24,
"x": 0,
"y": 7
},
"hiddenSeries": false,
"id": 8,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [
{
"alias": "Middle",
"yaxis": 1
}
],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "left_white_left_white",
"interval": "",
"legendFormat": "Left White",
"refId": "A"
},
{
"expr": "left_blue_left_blue",
"interval": "",
"legendFormat": "Left Blue",
"refId": "B"
},
{
"expr": "right_white_right_white",
"interval": "",
"legendFormat": "Right White",
"refId": "C"
},
{
"expr": "right_blue_right_blue",
"interval": "",
"legendFormat": "Right Blue",
"refId": "D"
},
{
"expr": "blue_bar_back_channel_1",
"interval": "",
"legendFormat": "Back Blue Bar",
"refId": "E"
},
{
"expr": "blue_bar_front_channel_1",
"interval": "",
"legendFormat": "Front Blue Bar",
"refId": "F"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "Lights",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": null,
"fieldConfig": {
"defaults": {
"custom": {}
},
"overrides": []
},
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 13
},
"hiddenSeries": false,
"id": 12,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "tank_temp_reading",
"interval": "",
"legendFormat": "Tank Temp",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "Tank Temp",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {
"Sump Temp": "yellow"
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": null,
"fieldConfig": {
"defaults": {
"custom": {}
},
"overrides": []
},
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 13
},
"hiddenSeries": false,
"id": 15,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "sump_temp_reading",
"interval": "",
"legendFormat": "Sump Temp",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "Sump Temp",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": null,
"fieldConfig": {
"defaults": {
"custom": {
"align": null
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
}
},
"overrides": []
},
"fill": 3,
"fillGradient": 3,
"gridPos": {
"h": 7,
"w": 24,
"x": 0,
"y": 21
},
"hiddenSeries": false,
"id": 14,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"dataLinks": []
},
"percentage": false,
"pluginVersion": "7.0.0",
"pointradius": 0.5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "internal_box_temp_reading",
"format": "time_series",
"instant": false,
"interval": "",
"intervalFactor": 2,
"legendFormat": "Internal Temp 1",
"refId": "A"
},
{
"expr": "internal_box_temp_2_reading",
"interval": "",
"legendFormat": "Internal Temp 2",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "Box Temp",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"transformations": [],
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "fahrenheit",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": false
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {
"Fan": "purple",
"Heater": "dark-red"
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": null,
"fieldConfig": {
"defaults": {
"custom": {}
},
"overrides": []
},
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 5,
"w": 12,
"x": 0,
"y": 28
},
"hiddenSeries": false,
"id": 16,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "equipment_heater_state",
"instant": false,
"interval": "",
"intervalFactor": 1,
"legendFormat": "Heater",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "Heater",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {
"Fan": "purple"
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": null,
"fieldConfig": {
"defaults": {
"custom": {}
},
"overrides": []
},
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 5,
"w": 12,
"x": 12,
"y": 28
},
"hiddenSeries": false,
"id": 10,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "equipment_fan_state",
"instant": false,
"interval": "",
"intervalFactor": 1,
"legendFormat": "Fan",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "Fan",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
}
],
"refresh": "5s",
"schemaVersion": 25,
"style": "dark",
"tags": [],
"templating": {
"list": []
},
"time": {
"from": "now-6h",
"to": "now"
},
"timepicker": {
"refresh_intervals": [
"10s",
"30s",
"1m",
"5m",
"15m",
"30m",
"1h",
"2h",
"1d"
]
},
"timezone": "",
"title": "Reef Pi Full",
"uid": "7SiCNC6Wz",
"version": 30
}
 

Algae invading algae: Have you had unwanted algae in your good macroalgae?

  • I regularly have unwanted algae in my macroalgae.

    Votes: 35 34.3%
  • I occasionally have unwanted algae in my macroalgae.

    Votes: 21 20.6%
  • I rarely have unwanted algae in my macroalgae.

    Votes: 9 8.8%
  • I never have unwanted algae in my macroalgae.

    Votes: 6 5.9%
  • I don’t have macroalgae.

    Votes: 28 27.5%
  • Other.

    Votes: 3 2.9%
Back
Top