Skip to content

Commit f6e816d

Browse files
authored
Update documentation for fleet-based communication implementation
1 parent bd537a8 commit f6e816d

File tree

5 files changed

+9
-48
lines changed

5 files changed

+9
-48
lines changed

TankAlarm-112025-Client-BluesOpta/FLEET_IMPLEMENTATION_SUMMARY.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -152,10 +152,6 @@ The Tank Alarm system has been updated to use **Blues Notehub fleet-based device
152152
"sampleSeconds": 300,
153153
"reportHour": 5,
154154
"reportMinute": 0,
155-
"sms": {
156-
"primary": "+12223334444",
157-
"secondary": "+15556667777"
158-
},
159155
"dailyEmail": "[email protected]",
160156
"tanks": [
161157
{
@@ -174,6 +170,8 @@ The Tank Alarm system has been updated to use **Blues Notehub fleet-based device
174170
}
175171
```
176172

173+
SMS recipients now reside exclusively in the server configuration. Client-side `alarmSms` flags simply signal whether a tank should request SMS escalation when it triggers an alarm.
174+
177175
### Server Config Example
178176
```json
179177
{

TankAlarm-112025-Client-BluesOpta/MIGRATION_GUIDE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ For each client:
147147

148148
4. **Review other settings:**
149149
- Verify all tank configurations
150-
- Confirm SMS and email settings
150+
- Confirm email recipients (SMS numbers now live on the server)
151151
- Check sample intervals
152152

153153
5. **Click "Send Config to Client"**

TankAlarm-112025-Client-BluesOpta/TankAlarm-112025-Client-BluesOpta.ino

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -161,8 +161,6 @@ struct ClientConfig {
161161
char siteName[32];
162162
char deviceLabel[24];
163163
char serverFleet[32]; // Target fleet name for server (e.g., "tankalarm-server")
164-
char smsPrimary[20];
165-
char smsSecondary[20];
166164
char dailyEmail[64];
167165
uint16_t sampleSeconds;
168166
uint8_t reportHour;
@@ -369,8 +367,6 @@ static void createDefaultConfig(ClientConfig &cfg) {
369367
strlcpy(cfg.siteName, "Opta Tank Site", sizeof(cfg.siteName));
370368
strlcpy(cfg.deviceLabel, "Client-112025", sizeof(cfg.deviceLabel));
371369
strlcpy(cfg.serverFleet, "tankalarm-server", sizeof(cfg.serverFleet));
372-
strlcpy(cfg.smsPrimary, "+12223334444", sizeof(cfg.smsPrimary));
373-
strlcpy(cfg.smsSecondary, "+15556667777", sizeof(cfg.smsSecondary));
374370
strlcpy(cfg.dailyEmail, "[email protected]", sizeof(cfg.dailyEmail));
375371
cfg.sampleSeconds = DEFAULT_SAMPLE_SECONDS;
376372
cfg.reportHour = DEFAULT_REPORT_HOUR;
@@ -417,8 +413,6 @@ static bool loadConfigFromFlash(ClientConfig &cfg) {
417413
strlcpy(cfg.siteName, doc["site"].as<const char *>() ? doc["site"].as<const char *>() : "", sizeof(cfg.siteName));
418414
strlcpy(cfg.deviceLabel, doc["deviceLabel"].as<const char *>() ? doc["deviceLabel"].as<const char *>() : "", sizeof(cfg.deviceLabel));
419415
strlcpy(cfg.serverFleet, doc["serverFleet"].as<const char *>() ? doc["serverFleet"].as<const char *>() : "", sizeof(cfg.serverFleet));
420-
strlcpy(cfg.smsPrimary, doc["sms"]["primary"].as<const char *>() ? doc["sms"]["primary"].as<const char *>() : "", sizeof(cfg.smsPrimary));
421-
strlcpy(cfg.smsSecondary, doc["sms"]["secondary"].as<const char *>() ? doc["sms"]["secondary"].as<const char *>() : "", sizeof(cfg.smsSecondary));
422416
strlcpy(cfg.dailyEmail, doc["dailyEmail"].as<const char *>() ? doc["dailyEmail"].as<const char *>() : "", sizeof(cfg.dailyEmail));
423417

424418
cfg.sampleSeconds = doc["sampleSeconds"].is<uint16_t>() ? doc["sampleSeconds"].as<uint16_t>() : DEFAULT_SAMPLE_SECONDS;
@@ -465,10 +459,6 @@ static bool saveConfigToFlash(const ClientConfig &cfg) {
465459
doc["reportMinute"] = cfg.reportMinute;
466460
doc["dailyEmail"] = cfg.dailyEmail;
467461

468-
JsonObject smsObj = doc.createNestedObject("sms");
469-
smsObj["primary"] = cfg.smsPrimary;
470-
smsObj["secondary"] = cfg.smsSecondary;
471-
472462
JsonArray tanks = doc.createNestedArray("tanks");
473463
for (uint8_t i = 0; i < cfg.tankCount; ++i) {
474464
JsonObject t = tanks.createNestedObject();
@@ -775,14 +765,6 @@ static void applyConfigUpdate(const JsonDocument &doc) {
775765
if (doc.containsKey("reportMinute")) {
776766
gConfig.reportMinute = doc["reportMinute"].as<uint8_t>();
777767
}
778-
if (doc.containsKey("sms")) {
779-
if (doc["sms"].containsKey("primary")) {
780-
strlcpy(gConfig.smsPrimary, doc["sms"]["primary"].as<const char *>(), sizeof(gConfig.smsPrimary));
781-
}
782-
if (doc["sms"].containsKey("secondary")) {
783-
strlcpy(gConfig.smsSecondary, doc["sms"]["secondary"].as<const char *>(), sizeof(gConfig.smsSecondary));
784-
}
785-
}
786768
if (doc.containsKey("dailyEmail")) {
787769
strlcpy(gConfig.dailyEmail, doc["dailyEmail"].as<const char *>(), sizeof(gConfig.dailyEmail));
788770
}
@@ -1256,8 +1238,6 @@ static void sendAlarm(uint8_t idx, const char *alarmType, float inches) {
12561238
doc["highThreshold"] = cfg.highAlarmInches;
12571239
doc["lowThreshold"] = cfg.lowAlarmInches;
12581240
doc["smsEnabled"] = allowSmsEscalation;
1259-
doc["smsPrimary"] = gConfig.smsPrimary;
1260-
doc["smsSecondary"] = gConfig.smsSecondary;
12611241
doc["time"] = currentEpoch();
12621242

12631243
publishNote(ALARM_FILE, doc, true);

TankAlarm-112025-Server-BluesOpta/FLEET_SETUP.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,6 @@ The client configuration file (`/client_config.json` on LittleFS) includes:
4949
"sampleSeconds": 300,
5050
"reportHour": 5,
5151
"reportMinute": 0,
52-
"sms": {
53-
"primary": "+12223334444",
54-
"secondary": "+15556667777"
55-
},
5652
"dailyEmail": "[email protected]",
5753
"tanks": [
5854
{
@@ -74,6 +70,8 @@ The client configuration file (`/client_config.json` on LittleFS) includes:
7470
}
7571
```
7672

73+
Server-managed SMS contacts have been removed from the client schema; per-tank `alarmSms` flags now simply request that the server escalate alerts via its own contact list.
74+
7775
**Key field:** `serverFleet` - Must match the server's fleet name in Notehub
7876

7977
### Server Configuration

TankAlarm-112025-Server-BluesOpta/TankAlarm-112025-Server-BluesOpta.ino

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -266,8 +266,6 @@ static const char CONFIG_GENERATOR_HTML[] PROGMEM = R"HTML(
266266
<label class="field"><span>Sample Seconds</span><input id="sampleSeconds" type="number" value="300"></label>
267267
<label class="field"><span>Report Hour</span><input id="reportHour" type="number" value="5"></label>
268268
<label class="field"><span>Report Minute</span><input id="reportMinute" type="number" value="0"></label>
269-
<label class="field"><span>SMS Primary</span><input id="smsPrimary" type="text"></label>
270-
<label class="field"><span>SMS Secondary</span><input id="smsSecondary" type="text"></label>
271269
<label class="field"><span>Daily Email</span><input id="dailyEmail" type="email"></label>
272270
</div>
273271
@@ -420,10 +418,6 @@ static const char CONFIG_GENERATOR_HTML[] PROGMEM = R"HTML(
420418
sampleSeconds: parseInt(document.getElementById('sampleSeconds').value, 10) || 300,
421419
reportHour: parseInt(document.getElementById('reportHour').value, 10) || 5,
422420
reportMinute: parseInt(document.getElementById('reportMinute').value, 10) || 0,
423-
sms: {
424-
primary: document.getElementById('smsPrimary').value.trim(),
425-
secondary: document.getElementById('smsSecondary').value.trim()
426-
},
427421
dailyEmail: document.getElementById('dailyEmail').value.trim(),
428422
tanks: []
429423
};
@@ -1078,6 +1072,8 @@ static const char DASHBOARD_HTML[] PROGMEM = R"HTML(
10781072
}
10791073
10801074
function syncServerSettings(serverInfo) {
1075+
els.smsPrimary.value = valueOr(serverInfo && serverInfo.smsPrimary, '');
1076+
els.smsSecondary.value = valueOr(serverInfo && serverInfo.smsSecondary, '');
10811077
els.smsHighToggle.checked = !!valueOr(serverInfo && serverInfo.smsOnHigh, true);
10821078
els.smsLowToggle.checked = !!valueOr(serverInfo && serverInfo.smsOnLow, true);
10831079
els.smsClearToggle.checked = !!valueOr(serverInfo && serverInfo.smsOnClear, false);
@@ -1197,10 +1193,6 @@ static const char DASHBOARD_HTML[] PROGMEM = R"HTML(
11971193
sampleSeconds: 300,
11981194
reportHour: 5,
11991195
reportMinute: 0,
1200-
sms: {
1201-
primary: serverDefaults.smsPrimary || '',
1202-
secondary: serverDefaults.smsSecondary || ''
1203-
},
12041196
dailyEmail: serverDefaults.dailyEmail || '',
12051197
tanks: tankList.length ? tankList.map(t => ({
12061198
id: t.tank || 'A',
@@ -1284,9 +1276,6 @@ static const char DASHBOARD_HTML[] PROGMEM = R"HTML(
12841276
els.sampleSeconds.value = valueOr(config.sampleSeconds, 300);
12851277
els.reportHour.value = valueOr(config.reportHour, 5);
12861278
els.reportMinute.value = valueOr(config.reportMinute, 0);
1287-
const smsConfig = config.sms || {};
1288-
els.smsPrimary.value = smsConfig.primary || '';
1289-
els.smsSecondary.value = smsConfig.secondary || '';
12901279
els.dailyEmail.value = config.dailyEmail || '';
12911280
populateTankRows(config.tanks);
12921281
@@ -1300,11 +1289,6 @@ static const char DASHBOARD_HTML[] PROGMEM = R"HTML(
13001289
}
13011290
13021291
function collectConfig() {
1303-
const sms = {
1304-
primary: els.smsPrimary.value.trim(),
1305-
secondary: els.smsSecondary.value.trim()
1306-
};
1307-
13081292
const tanks = [];
13091293
els.tankBody.querySelectorAll('tr').forEach(row => {
13101294
const tank = {
@@ -1336,7 +1320,6 @@ static const char DASHBOARD_HTML[] PROGMEM = R"HTML(
13361320
sampleSeconds: parseInt(els.sampleSeconds.value, 10) || 300,
13371321
reportHour: parseInt(els.reportHour.value, 10) || 5,
13381322
reportMinute: parseInt(els.reportMinute.value, 10) || 0,
1339-
sms,
13401323
dailyEmail: els.dailyEmail.value.trim(),
13411324
tanks
13421325
};
@@ -1346,6 +1329,8 @@ static const char DASHBOARD_HTML[] PROGMEM = R"HTML(
13461329
13471330
function collectServerSettings() {
13481331
return {
1332+
smsPrimary: els.smsPrimary.value.trim(),
1333+
smsSecondary: els.smsSecondary.value.trim(),
13491334
smsOnHigh: !!els.smsHighToggle.checked,
13501335
smsOnLow: !!els.smsLowToggle.checked,
13511336
smsOnClear: !!els.smsClearToggle.checked

0 commit comments

Comments
 (0)