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