Skip to content

Commit 09e7050

Browse files
committed
Add priming and time not-yet-set checks.
1 parent a08671a commit 09e7050

File tree

6 files changed

+75
-26
lines changed

6 files changed

+75
-26
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ You can monitor and change most 'day-to-day' settings. Notably absent right now
99

1010
## Examples
1111

12-
Cross platform networking is a bit of a mess for Arduino, so there are three different exaples that differ by how the network is declared and initialized.
12+
Cross platform networking is a bit of a mess for Arduino, so there are three different examples that differ by how the network is declared and initialized.
1313
- Mega_2560: Assumes a Wiznet style shield or add-on board, controlled over SPI
1414
- Wemos D1 R1: ESP8266 based board in an Uno form factor.
1515
- Wemos D1 R32: ESP32 based board in an Uno form factor.

examples/Mega_2560/Mega_2560.ino

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22

33
#ifndef ARDUINO_ARCH_AVR
4-
#error Wrong architecture, this code is for ESP8266 based boards.
4+
#error Wrong architecture, this code is for AVR (Uno / Mega 2560) based boards.
55
#endif
66

77

library.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=Balboa Spa communications
2-
version=1.0.1
2+
version=1.0.2
33
author=M Hotchin <github@hotchin.net>
44
maintainer=M Hotchin <github@hotchin.net>
55
sentence=Use Arduino to control your BalBoa Spa Pack.

src/BalBoaMessages.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,11 @@ namespace BalBoa
134134
byte : 0; //
135135
byte _light : 2; // 14
136136
byte : 0; //
137-
byte _r7[5]; // 15
137+
byte _r7[3]; // 15->17
138+
byte _r7a : 1; // both 18 & 19, bit 2 seem related to time not
139+
byte _timeUnset : 1; // yet set.
140+
byte : 0;
141+
byte _r7b; // 19
138142
byte _setTemp; // 20
139143
byte _r8 : 2; // 21
140144
byte _systemHold : 1;

src/BalBoaSpa.cpp

Lines changed: 61 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ namespace
2424
{
2525
EthernetClass &Networking = Ethernet;
2626
typedef EthernetUDP SpaUdp;
27+
28+
2729
}
2830
#endif
2931

@@ -464,6 +466,12 @@ BalBoa::BalBoaSpa::GetRunningFilter() const
464466
}
465467

466468

469+
BalBoa::TriState
470+
BalBoa::BalBoaSpa::IsTimeUnset() const
471+
{
472+
return _timeUnset;
473+
}
474+
467475
BalBoa::TriState
468476
BalBoa::BalBoaSpa::IsHeating() const
469477
{
@@ -504,6 +512,15 @@ BalBoa::BalBoaSpa::GetPanelMessages() const
504512
}
505513

506514

515+
BalBoa::TriState
516+
BalBoa::BalBoaSpa::IsPriming() const
517+
{
518+
_changes &= ~scPriming;
519+
520+
return _priming;
521+
}
522+
523+
507524
void
508525
BalBoa::BalBoaSpa::SetTime(
509526
const BalBoa::SpaTime &time)
@@ -582,32 +599,44 @@ void
582599
BalBoa::BalBoaSpa::CrackStatusMessage(const byte *_messageBuffer)
583600
{
584601
const StatusMessage *pMessage = reinterpret_cast<const StatusMessage *>(_messageBuffer);
602+
603+
604+
// Only mark this off if something changed.
605+
// _waitingForMessages &= ~wfmStatus;
606+
607+
unsigned int newChanges = 0;
585608

586609
if (pMessage->_hour != _time.hour)
587610
{
588611
_time.hour = pMessage->_hour;
589-
_changes |= scTime;
612+
newChanges |= scTime;
590613
}
591614

592615
if (pMessage->_minute != _time.minute)
593616
{
594617
_time.minute = pMessage->_minute;
595-
_changes |= scTime;
618+
newChanges |= scTime;
596619
}
597620

598621
if (pMessage->_24hrTime != _time.displayAs24Hr)
599622
{
600623
_time.displayAs24Hr = pMessage->_24hrTime;
601-
_changes |= scTime;
602-
_changes |= scFilterTimes; // Because time format has changed.
624+
newChanges |= scTime;
625+
newChanges |= scFilterTimes; // Because time format has changed.
626+
}
627+
628+
if (pMessage->_timeUnset != _timeUnset)
629+
{
630+
_timeUnset = static_cast<TriState>(pMessage->_timeUnset);
631+
newChanges |= scTime;
603632
}
604633

605634
if (pMessage->_currentTemp != _currentTemp.temp)
606635
{
607636
_currentTemp.temp = pMessage->_currentTemp;
608637
_currentTemp.isCelsiusX2 = pMessage->_tempScaleCelsius;
609638

610-
_changes |= scTemp;
639+
newChanges |= scTemp;
611640
}
612641

613642

@@ -616,68 +645,78 @@ BalBoa::BalBoaSpa::CrackStatusMessage(const byte *_messageBuffer)
616645
_setPoint.temp = pMessage->_setTemp;
617646
_setPoint.isCelsiusX2 = pMessage->_tempScaleCelsius;
618647

619-
_changes |= scSetPoint;
648+
newChanges |= scSetPoint;
620649
}
621650

622651

623652
if (static_cast<TriState>(pMessage->_tempRange) != _rangeHigh)
624653
{
625654
_rangeHigh = static_cast<TriState>(pMessage->_tempRange);
626-
_changes |= scSetPoint;
655+
newChanges |= scSetPoint;
627656
}
628657

629658
if (static_cast<TriState>(pMessage->_tempScaleCelsius) != _tempCelsius)
630659
{
631660
_tempCelsius = static_cast<TriState>(pMessage->_tempScaleCelsius);
632-
_changes |= (scTemp | scSetPoint);
661+
newChanges |= (scTemp | scSetPoint);
633662
}
634663

635664
if (pMessage->_pump1 != _pump1Speed)
636665
{
637666
_pump1Speed = static_cast<BalBoa::PumpSpeed>(pMessage->_pump1);
638667

639-
_changes |= scPump1;
668+
newChanges |= scPump1;
640669
}
641670

642671
if (pMessage->_pump2 != _pump2Speed)
643672
{
644673
_pump2Speed = static_cast<BalBoa::PumpSpeed>(pMessage->_pump2);
645674

646-
_changes |= scPump2;
675+
newChanges |= scPump2;
647676
}
648677

649678
if (static_cast<TriState>(pMessage->_light != 0) != _lights)
650679
{
651680
_lights = static_cast<TriState>(pMessage->_light != 0);
652-
_changes |= scLights;
681+
newChanges |= scLights;
653682
}
654683

655684
if (static_cast<TriState>(pMessage->_heating != 0) != _heating)
656685
{
657686
_heating = static_cast<TriState>(pMessage->_heating != 0);
658-
_changes |= scHeating;
687+
newChanges |= scHeating;
659688
}
660689

661-
if (static_cast<TriState>(pMessage->_filter1Running) != _filter1Running)
690+
if (static_cast<TriState>(pMessage->_filter1Running != 0) != _filter1Running)
662691
{
663-
_filter1Running = static_cast<TriState>(pMessage->_filter1Running);
664-
_changes |= scFilterRunning;
692+
_filter1Running = static_cast<TriState>(pMessage->_filter1Running != 0);
693+
newChanges |= scFilterRunning;
665694
}
666695

667-
if (static_cast<TriState>(pMessage->_filter2Running) != _filter2Running)
696+
if (static_cast<TriState>(pMessage->_filter2Running != 0) != _filter2Running)
668697
{
669-
_filter2Running = static_cast<TriState>(pMessage->_filter2Running);
670-
_changes |= scFilterRunning;
698+
_filter2Running = static_cast<TriState>(pMessage->_filter2Running != 0);
699+
newChanges |= scFilterRunning;
671700
}
672701

673702
if (pMessage->_panelMessage != _messages)
674703
{
675704
_messages = pMessage->_panelMessage;
676-
_changes |= scPanelMessages;
705+
newChanges |= scPanelMessages;
677706
}
678707

679-
_waitingForMessages &= ~wfmStatus;
708+
if (static_cast<TriState>(pMessage->_priming != 0) != _priming)
709+
{
710+
_priming = static_cast<TriState>(pMessage->_priming != 0);
711+
newChanges |= scPriming;
712+
}
680713

714+
if (newChanges)
715+
{
716+
_waitingForMessages &= ~wfmStatus;
717+
718+
_changes |= newChanges;
719+
}
681720

682721
// Look to see how the 'unknown' areas change, maybe we can figure some more stuff
683722
// out.
@@ -694,6 +733,7 @@ BalBoa::BalBoaSpa::CrackStatusMessage(const byte *_messageBuffer)
694733
pMess->_panelMessage &= 0b11110001;
695734
pMess->_24hrTime = 0;
696735
pMess->_tempRange = 0;
736+
pMess->_timeUnset = 0;
697737
pMess->_heating = 0;
698738
pMess->_pump1 = 0;
699739
pMess->_pump2 = 0;
@@ -834,6 +874,7 @@ BalBoa::BalBoaSpa::ResetInfo()
834874
_pump1Speed = psUNKNOWN;
835875
_pump2Speed = psUNKNOWN;
836876
_recirc = psUNKNOWN;
877+
_timeUnset = tsUnknown;
837878
_lights = tsUnknown;
838879
_heating = tsUnknown;
839880
_filter1Running = tsUnknown;

src/BalBoaSpa.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ namespace BalBoa
3838
scVersion = 1 << 9, // Balboa software version
3939
scFilterRunning = 1 << 10, // What filter cycle is currently running
4040
scPanelMessages = 1 << 11, // Message displayed on panel
41-
scMASK = (1 << 12) - 1
41+
scPriming = 1 << 12, // Hot-tub is priming (power-on start-up)
42+
scMASK = (1 << 13) - 1
4243
};
4344

4445

@@ -148,12 +149,13 @@ namespace BalBoa
148149
PumpSpeed GetPump2Speed() const; // scPump2
149150
const FilterInfo &GetFilterInfo() const; // scFilterTimes
150151
RunningFilter GetRunningFilter() const; // scFilterRunning
152+
TriState IsTimeUnset() const;
151153
TriState IsHeating() const; // scHeating
152154
TriState IsLightOn() const; // scLights
153155
TriState IsHighRange() const; // scSetPoint
154156
const VersionInfo &GetVersion() const; // scVersion
155157
uint8_t GetPanelMessages() const; // scPanelMessages
156-
158+
TriState IsPriming() const; // scPriming
157159
void SendFilterConfigRequest();
158160

159161
// Calling any of these will likely cause change notifications to come back. So,
@@ -222,13 +224,15 @@ namespace BalBoa
222224
PumpSpeed _pump1Speed;
223225
PumpSpeed _pump2Speed;
224226
PumpSpeed _recirc;
227+
TriState _timeUnset;
225228
TriState _lights;
226229
TriState _heating;
227230
mutable FilterInfo _filters;
228231
TriState _filter1Running;
229232
TriState _filter2Running;
230233
VersionInfo _version;
231234
uint8_t _messages;
235+
TriState _priming;
232236
};
233237
#endif
234238
}

0 commit comments

Comments
 (0)