Gbox 4.20
Grow box automation and monitoring - <a href='https://sites.google.com/site/growboxguy/'>https://sites.google.com/site/growboxguy/</a>
 
Loading...
Searching...
No Matches
Settings.h
Go to the documentation of this file.
1#pragma once
2
12static const uint8_t Version = 16;
13
15
17static const uint8_t MaxWordLength = 32;
18static const uint8_t MaxShortTextLength = 128;
19static const uint16_t MaxLongTextLength = 1280;
20static const uint8_t LogDepth = 4;
21static const uint8_t QueueDepth = 32;
22static const uint8_t MovingAverageDepth = 10;
23static const uint8_t NTPTimeout = 15;
24
26extern char LongMessage[MaxLongTextLength]; // Temp storage for assembling long messages (REST API - Google Sheets reporting)
27extern char ShortMessage[MaxShortTextLength]; // Temp storage for assembling short messages (Log entries, Error messages)
28extern char CurrentTime[MaxWordLength]; // Buffer for storing current time in text format
29
31static const uint8_t WirelessCSNPin = 49;
32static const uint8_t WirelessCEPin = 53;
33static const uint8_t WirelessDelay = 8;
34static const uint8_t WirelessRetry = 10;
35static const uint8_t WirelessPayloadSize = 32;
36static const uint16_t WirelessMessageTimeout = 500;
37static const uint16_t WirelessReceiveTimeout = 65000;
38
40#define PushingBoxLogRelayID "v755877CF53383E1"
41
43#define MqttPubTopic "Gbox420/"
44#define MqttSubTopic "Gbox420CMD/#"
45#define MqttLwtTopic "Gbox420LWT/"
46#define MqttLwtMessage "Gbox420 Offline"
47
48/*
50#define HomeAssistantServerIP "192.168.1.100" ///< Address of Home Assistant server ip
51#define HomeAssistantServerPort 8123 ///< Address of Home Assistant server port
52#define HomeAssistantServerURL "/api/states/sensor.gbox420" ///< Where to send the JSON formatted Log containing sensor readings
53#define HomeAssistantServerToken "Authorization: Bearer YOUR-TOKEN" ///< Generate a token in Home Assistant - USERNAME- Security - Long-lived access tokens
54*/
55
58
59typedef struct
60{
61 bool Debug = true;
62 bool Metric = true;
63
64 // initialized via Designated initializer https://riptutorial.com/c/example/18609/using-designated-initializers
66 {
68 float Duration;
69 uint16_t DayInterval;
70 uint16_t NightInterval;
71 uint8_t PumpSpeed;
72 uint16_t PumpTimeOut;
73 uint16_t PrimingTime;
76 };
77 struct AeroModuleSettings AeroModule1 = {.PressureTankPresent = true, .Duration = 3.0, .DayInterval = 6, .NightInterval = 10, .PumpSpeed = 100, .PumpTimeOut = 420, .PrimingTime = 10, .MaxPressure = 7.0, .MinPressure = 5.0};
78
80 {
81 uint8_t Speed;
82 };
83 struct ACMotorModuleSettings ACMotor1 = {.Speed = 50};
84
86 {
87 uint8_t Pin;
88 bool State;
89 };
90 struct AirPumpSettings Ap1 = {.Pin = 23, .State = true};
91
93 {
94 uint8_t Pin;
95 uint8_t Type;
96 };
97 struct DHTSensorSettings DHT1 = {.Pin = 3, .Type = 22};
98
100 {
101 uint8_t OnOffPin;
102 uint8_t SpeedPin;
103 bool State;
105 };
106 struct FanSettings FanI = {.OnOffPin = 25, .SpeedPin = 26, .State = true, .HighSpeed = true};
107 struct FanSettings FanE = {.OnOffPin = 27, .SpeedPin = 28, .State = true, .HighSpeed = true};
108
109 /*
110 // PWM adjusted AC signal - Need to move this to a dedicated module, Mega already uses interrupts to talk to ESP-link and it messes with counting the phase zero crossings
111 struct Fan_PWMSettings ///< Fan default settings
112 {
113 uint8_t ZeroCrossingPin; ///< On Arduino Mega2560 and Nano this has to be D2 pin
114 uint8_t PWMPin; ///< PWM capable digital pin
115 bool State; ///< ON or OFF
116 uint8_t MinSpeed; ///< Limit the lowest output (%)
117 uint8_t Speed; ///< Speed between 0-100 (%) (Real output mapped between MinSpeed - 100)
118 };
119 struct Fan_PWMSettings FanI = {.Status = true, .ZeroCrossingPin = 2, .PWMPin = 9, .State = true, .MinSpeed = 35, .Speed = 80};
120 struct Fan_PWMSettings FanE = {.Status = true, .ZeroCrossingPin = 2, .PWMPin = 10, .State = true, .MinSpeed = 35, .Speed = 80};
121 */
122
135 struct MainModuleSettings Main1 = {.SerialReportDate = true, .SerialReportMemory = true, .SerialReportJSON = true, .SerialReportJSONFriendly = true, .SerialReportWireless = true, .ReportToGoogleSheets = false, .SheetsReportingFrequency = 30, .ReportToMqtt = true, .MQTTReportFrequency = 5};
136
156 struct HempyModuleSettings HempyModule1 = {.StartWeight_B1 = 16, .WateringIncrement_B1 = 0.3, .EvaporationTarget_B1 = 2.0, .DrainTargetWeight_B1 = 0.1, .MaxWeight_B1 = 20, .PumpSpeed_B1 = 35, .PumpTimeOut_B1 = 60, .DrainWaitTime_B1 = 300, .StartWeight_B2 = 16, .WateringIncrement_B2 = 0.3, .EvaporationTarget_B2 = 2.0, .DrainTargetWeight_B2 = 0.1, .MaxWeight_B2 = 20.0, .PumpSpeed_B2 = 35, .PumpTimeOut_B2 = 60, .DrainWaitTime_B2 = 300};
157
159 {
160 uint8_t DigitalPin;
161 uint8_t AnalogPin;
162 };
163 struct LightSensorSettings Ls1 = {.DigitalPin = 4, .AnalogPin = A0};
164
166 {
167 bool Status;
168 uint8_t RelayPin;
169 uint8_t DimmingPin;
170 uint8_t DimmingLimit;
172 uint8_t Brightness;
174 uint8_t OnHour;
175 uint8_t OnMinute;
176 uint8_t OffHour;
177 uint8_t OffMinute;
179 uint16_t FadingInterval;
181 };
182 struct LightsSettings Lt1 = {.Status = false, .RelayPin = 29, .DimmingPin = 11, .DimmingLimit = 16, .DimmingDuration = 10, .Brightness = 75, .TimerEnabled = true, .OnHour = 4, .OnMinute = 20, .OffHour = 16, .OffMinute = 20, .FadingEnabled = false, .FadingInterval = 1, .FadingIncrements = 1};
183 struct LightsSettings Lt2 = {.Status = false, .RelayPin = 24, .DimmingPin = 12, .DimmingLimit = 6, .DimmingDuration = 10, .Brightness = 55, .TimerEnabled = false, .OnHour = 4, .OnMinute = 20, .OffHour = 16, .OffMinute = 20, .FadingEnabled = false, .FadingInterval = 1, .FadingIncrements = 1};
184
186 {
187 // ReservoirModuleSettings() : {}
188 };
190
192 {
193 uint8_t Pin;
194 bool Enabled;
195 };
196 struct SoundSettings Sound1 = {.Pin = 2, .Enabled = true};
197
198 uint8_t CompatibilityVersion = Version;
199} Settings;
200
205void saveSettings(Settings *ToSave);
211Settings *loadSettings(bool ResetEEPROM = false);
212void restoreDefaults();
Settings * loadSettings(bool ResetEEPROM=false)
Load settings from EEPROM.
Definition Settings.cpp:20
void restoreDefaults()
Load sketch default settings into EEPROM.
Definition Settings.cpp:45
char CurrentTime[MaxWordLength]
Buffer for storing current time in text format.
char LongMessage[MaxLongTextLength]
Temp storage for assembling long messages (REST API, MQTT reporting, Serial reporting,...
void saveSettings(Settings *ToSave)
Store settings in EEPROM - Only updates changed bits.
Definition Settings.cpp:10
char ShortMessage[MaxShortTextLength]
Temp storage for assembling short text messages (Log entries, Error messages,..etc)
MainModule * Main1
Represents a Grow Box with all components (Lights, DHT sensors, Power sensor, Aero/Hempy/Reservoir wi...
bool & Debug
True - Turns on extra debug messages on the Serial Output.
bool & Metric
True - Use metric units, False - Use imperial units.
ReservoirModule * ReservoirMod1
< AeroModule default settings
Definition Settings.h:80
uint8_t Speed
PWM duty cycle to adjust motor speed.
Definition Settings.h:81
< AeroModule default settings
Definition Settings.h:66
bool PressureTankPresent
Is there a pressure tank connected or not.
Definition Settings.h:67
uint16_t NightInterval
Spray every X minutes - When the lights are OFF.
Definition Settings.h:70
float MinPressure
Turn on pump below this pressure.
Definition Settings.h:75
float MaxPressure
Turn off pump above this pressure.
Definition Settings.h:74
float Duration
Spray length in seconds (Actual duration is ~0.5sec longer due to thread + solenoid delay)
Definition Settings.h:68
uint16_t PrimingTime
(Sec) For how long to keep the bypass solenoid on when starting the pump - Removes air bubbles from t...
Definition Settings.h:73
uint8_t PumpSpeed
Pump duty cycle to adjust motor speed.
Definition Settings.h:71
uint16_t PumpTimeOut
(Sec) Max pump run time
Definition Settings.h:72
uint16_t DayInterval
Spray every X minutes - When the lights are ON.
Definition Settings.h:69
< AirPump default settings
Definition Settings.h:86
bool State
true - ON, false - OFF
Definition Settings.h:88
uint8_t Pin
Relay pin controlling AC power to the air pump.
Definition Settings.h:87
< DHTSensor default settings
Definition Settings.h:93
uint8_t Pin
DAT pin of the DHT sensor.
Definition Settings.h:94
uint8_t Type
Type defines the sensor type: 11 - DHT11, 12 - DHT12, 21 - DHT21 or AM2301 , 22 - DHT22.
Definition Settings.h:95
< Fan default settings
Definition Settings.h:100
uint8_t OnOffPin
Relay pin controlling AC power.
Definition Settings.h:101
bool State
true - ON, false - OFF
Definition Settings.h:103
bool HighSpeed
true - High speed, false - Low speed
Definition Settings.h:104
uint8_t SpeedPin
Relay pin for speed selection.
Definition Settings.h:102
< Hempy default settings
Definition Settings.h:138
uint16_t DrainWaitTime_B1
(sec) How long to wait after watering for the water to drain
Definition Settings.h:146
float StartWeight_B2
Target weight for watering: Turn on pump below this weight.
Definition Settings.h:147
uint16_t PumpTimeOut_B1
Waste reservoir full weight -> Pump gets disabled if reached.
Definition Settings.h:145
uint16_t PumpTimeOut_B2
Waste reservoir full weight -> Pump gets disabled if reached.
Definition Settings.h:153
float EvaporationTarget_B1
(kg/lbs) Amount of water that should evaporate before starting the watering cycles
Definition Settings.h:141
float MaxWeight_B2
Waste reservoir full weight -> Pump gets disabled if reached.
Definition Settings.h:151
float WateringIncrement_B1
(kg/lbs) Amount of water that should be pumped at each watering cycle
Definition Settings.h:140
float DrainTargetWeight_B1
(kg/lbs) Amount of water that should go to the waste reservoir after a watering cycle
Definition Settings.h:142
float EvaporationTarget_B2
(kg/lbs) Amount of water that should evaporate before starting the watering cycles
Definition Settings.h:149
float StartWeight_B1
Target weight for watering: Turn on pump below this weight.
Definition Settings.h:139
float WateringIncrement_B2
(kg/lbs) Amount of water that should be pumped at each watering cycle
Definition Settings.h:148
uint8_t PumpSpeed_B2
Pump duty cycle to adjust motor speed.
Definition Settings.h:152
uint16_t DrainWaitTime_B2
(sec) How long to wait after watering for the water to drain
Definition Settings.h:154
uint8_t PumpSpeed_B1
Pump duty cycle to adjust motor speed.
Definition Settings.h:144
float MaxWeight_B1
Waste reservoir full weight -> Pump gets disabled if reached.
Definition Settings.h:143
float DrainTargetWeight_B2
(kg/lbs) Amount of water that should go to the waste reservoir after a watering cycle
Definition Settings.h:150
< LightSensor default settings
Definition Settings.h:159
uint8_t DigitalPin
Light sensor D0 pin.
Definition Settings.h:160
uint8_t AnalogPin
Light sensor A0 pin.
Definition Settings.h:161
< Lights default settings
Definition Settings.h:166
uint8_t RelayPin
Relay port controlling AC power to LED driver.
Definition Settings.h:168
uint8_t OffHour
Light OFF time - hour.
Definition Settings.h:176
uint8_t Brightness
Light intensity: 0 - 100 range for controlling led driver output.
Definition Settings.h:172
uint8_t DimmingPin
PWM based dimming, connected to optocoupler`s base over 1k ohm resistor.
Definition Settings.h:169
bool TimerEnabled
Enable/Disable timer controlling lights.
Definition Settings.h:173
uint8_t DimmingDuration
Temporary dimming duration in Seconds.
Definition Settings.h:171
uint8_t FadingIncrements
How much to change the brightness during a fade in/out in Percentage <Not exposed to Web interface>
Definition Settings.h:180
uint16_t FadingInterval
(Sec) How often should the brightness change during a fade in/out <Not exposed to Web interface>
Definition Settings.h:179
uint8_t OffMinute
Light OFF time - minute.
Definition Settings.h:177
uint8_t OnMinute
Light ON time - minute.
Definition Settings.h:175
uint8_t DimmingLimit
Sets the LED dimming limit (Usually around 5%)
Definition Settings.h:170
bool FadingEnabled
Enables/disables fading lights in when turning on, and fading lights out when turning off <Not expose...
Definition Settings.h:178
bool Status
Startup status for lights: True-ON / False-OFF.
Definition Settings.h:167
uint8_t OnHour
Light ON time - hour.
Definition Settings.h:174
< MainModule default settings
Definition Settings.h:124
bool SerialReportMemory
Enable/disable reporting the remaining free memory to the Serial output.
Definition Settings.h:126
uint16_t SheetsReportingFrequency
How often to report to Google Sheets. Use 15 minute increments only! Min 15min, Max 1440 (1day)
Definition Settings.h:131
bool SerialReportDate
Enable/disable reporting the current time to the Serial output.
Definition Settings.h:125
bool SerialReportJSON
Enable/disable sending JSON formatted reports to the Serial output.
Definition Settings.h:127
bool SerialReportJSONFriendly
Enable/disable sending JSON report with friendly values (Sec,%,Min,kg/lbs..etc appended) to Serial.
Definition Settings.h:128
bool ReportToGoogleSheets
Enable/disable reporting sensor readings to Google Sheets.
Definition Settings.h:130
bool SerialReportWireless
Enable/disable sending wireless package exchange reports to the Serial output.
Definition Settings.h:129
uint16_t MQTTReportFrequency
How often to report to MQTT. Use 5 Sec increments, Min 5sec, Max 86400 (1day)
Definition Settings.h:133
bool ReportToMqtt
Enable/disable reporting sensor readings to an MQTT broker.
Definition Settings.h:132
< ReservoirModule default settings
Definition Settings.h:186
< Sound default settings
Definition Settings.h:192
uint8_t Pin
Piezo Buzzer red(+) cable.
Definition Settings.h:193
bool Enabled
Enable/Disable sound.
Definition Settings.h:194